"
output += ruler
usr << browse({"[jointext(output, "")]"}, "window=browse_messages;size=900x500")
-proc/get_message_output(type, target_ckey)
+/proc/get_message_output(type, target_ckey)
if(!SSdbcore.Connect())
to_chat(usr, "Failed to establish database connection.")
return
@@ -319,6 +357,7 @@ proc/get_message_output(type, target_ckey)
query += " AND targetckey = '[target_ckey]'"
var/datum/DBQuery/query_get_message_output = SSdbcore.NewQuery(query)
if(!query_get_message_output.warn_execute())
+ qdel(query_get_message_output)
return
while(query_get_message_output.NextRow())
var/message_id = query_get_message_output.item[1]
@@ -332,7 +371,10 @@ proc/get_message_output(type, target_ckey)
output += " [text] "
var/datum/DBQuery/query_message_read = SSdbcore.NewQuery("UPDATE [format_table_name("messages")] SET type = 'message sent' WHERE id = [message_id]")
if(!query_message_read.warn_execute())
+ qdel(query_get_message_output)
+ qdel(query_message_read)
return
+ qdel(query_message_read)
if("watchlist entry")
message_admins("Notice: [key_name_admin(target_ckey)] has been on the watchlist since [timestamp] and has just connected - Reason: [text]")
send2irc_adminless_only("Watchlist", "[key_name(target_ckey)] is on the watchlist and has just connected - Reason: [text]")
@@ -341,6 +383,7 @@ proc/get_message_output(type, target_ckey)
if(editor_ckey)
output += " Last edit by [editor_ckey] (Click here to see edit log)"
output += " [text] "
+ qdel(query_get_message_output)
return output
#define NOTESFILE "data/player_notes.sav"
@@ -365,9 +408,11 @@ proc/get_message_output(type, target_ckey)
var/admin_ckey = note.group[3]
var/datum/DBQuery/query_convert_time = SSdbcore.NewQuery("SELECT ADDTIME(STR_TO_DATE('[timestamp]','%d-%b-%Y'), '0')")
if(!query_convert_time.Execute())
+ qdel(query_convert_time)
return
if(query_convert_time.NextRow())
timestamp = query_convert_time.item[1]
+ qdel(query_convert_time)
if(ckey && notetext && timestamp && admin_ckey && server)
create_message("note", ckey, admin_ckey, notetext, timestamp, server, 1, 0)
notesfile.cd = "/"
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index d5349c3e2f..7cba469019 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -74,7 +74,7 @@
message_admins("[key_name_admin(usr)] tried to create traitors. Unfortunately, there were no candidates available.")
log_admin("[key_name(usr)] failed to create traitors.")
if("changelings")
- if(src.makeChanglings())
+ if(src.makeChangelings())
message_admins("[key_name(usr)] created changelings.")
log_admin("[key_name(usr)] created changelings.")
else
@@ -447,6 +447,8 @@
if("Yes")
delmob = 1
+ log_admin("[key_name(usr)] has used rudimentary transformation on [key_name(M)]. Transforming to [href_list["simplemake"]].; deletemob=[delmob]")
+ message_admins("[key_name_admin(usr)] has used rudimentary transformation on [key_name_admin(M)]. Transforming to [href_list["simplemake"]].; deletemob=[delmob]")
switch(href_list["simplemake"])
if("observer")
M.change_mob_type( /mob/dead/observer , null, null, delmob )
@@ -499,8 +501,6 @@
M.change_mob_type( /mob/living/simple_animal/hostile/construct/wraith , null, null, delmob )
if("shade")
M.change_mob_type( /mob/living/simple_animal/shade , null, null, delmob )
- log_admin("[key_name(usr)] has used rudimentary transformation on [key_name(M)]. Transforming to [href_list["simplemake"]].; deletemob=[delmob]")
- message_admins("[key_name_admin(usr)] has used rudimentary transformation on [key_name_admin(M)]. Transforming to [href_list["simplemake"]].; deletemob=[delmob]")
/////////////////////////////////////new ban stuff
@@ -1200,10 +1200,13 @@
var/message_id = sanitizeSQL("[href_list["messageedits"]]")
var/datum/DBQuery/query_get_message_edits = SSdbcore.NewQuery("SELECT edits FROM [format_table_name("messages")] WHERE id = '[message_id]'")
if(!query_get_message_edits.warn_execute())
+ qdel(query_get_message_edits)
return
if(query_get_message_edits.NextRow())
var/edit_log = query_get_message_edits.item[1]
- usr << browse(edit_log,"window=noteedits")
+ if(!QDELETED(usr))
+ usr << browse(edit_log,"window=noteedits")
+ qdel(query_get_message_edits)
else if(href_list["newban"])
if(!check_rights(R_BAN))
@@ -1822,18 +1825,7 @@
usr.client.smite(H)
else if(href_list["CentComReply"])
- var/mob/living/carbon/human/H = locate(href_list["CentComReply"]) in GLOB.mob_list
- if(!istype(H))
- to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human")
- return
- if(!istype(H.ears, /obj/item/radio/headset))
- to_chat(usr, "The person you are trying to contact is not wearing a headset.")
- return
-
- message_admins("[src.owner] has started answering [key_name(H)]'s CentCom request.")
- var/input = input(src.owner, "Please enter a message to reply to [key_name(H)] via their headset.","Outgoing message from CentCom", "")
- if(!input)
- message_admins("[src.owner] decided not to answer [key_name(H)]'s CentCom request.")
+ if(!check_rights(R_ADMIN))
return
var/mob/M = locate(href_list["CentComReply"])
diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm
index f385cdc1bd..bef39c29ca 100644
--- a/code/modules/admin/verbs/adminhelp.dm
+++ b/code/modules/admin/verbs/adminhelp.dm
@@ -256,7 +256,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new)
/datum/admin_help/proc/MessageNoRecipient(msg)
var/ref_src = "[REF(src)]"
//Message to be sent to all admins
- var/admin_msg = "Ticket [TicketHref("#[id]", ref_src)]: [LinkedReplyName(ref_src)] [FullMonty(ref_src)]: [keywords_lookup(msg)]"
+ var/admin_msg = "Ticket [TicketHref("#[id]", ref_src)]: [LinkedReplyName(ref_src)] [FullMonty(ref_src)]:[keywords_lookup(msg)]"
AddInteraction("[LinkedReplyName(ref_src)]: [msg]")
@@ -268,7 +268,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new)
to_chat(X, admin_msg)
//show it to the person adminhelping too
- to_chat(initiator, "PM to-Admins: [msg]")
+ to_chat(initiator, "PM to-Admins: [msg]")
//Reopen a closed ticket
/datum/admin_help/proc/Reopen()
diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm
index 179595866f..4d72f0a8e2 100644
--- a/code/modules/admin/verbs/adminpm.dm
+++ b/code/modules/admin/verbs/adminpm.dm
@@ -145,15 +145,15 @@
var/keywordparsedmsg = keywords_lookup(msg)
if(irc)
- to_chat(src, "PM to-Admins: [rawmsg]")
+ to_chat(src, "PM to-Admins: [rawmsg]")
var/datum/admin_help/AH = admin_ticket_log(src, "Reply PM from-[key_name(src, TRUE, TRUE)] to IRC: [keywordparsedmsg]")
ircreplyamount--
send2irc("[AH ? "#[AH.id] " : ""]Reply: [ckey]", rawmsg)
else
if(recipient.holder)
if(holder) //both are admins
- to_chat(recipient, "Admin PM from-[key_name(src, recipient, 1)]: [keywordparsedmsg]")
- to_chat(src, "Admin PM to-[key_name(recipient, src, 1)]: [keywordparsedmsg]")
+ to_chat(recipient, "Admin PM from-[key_name(src, recipient, 1)]: [keywordparsedmsg]")
+ to_chat(src, "Admin PM to-[key_name(recipient, src, 1)]: [keywordparsedmsg]")
//omg this is dumb, just fill in both their tickets
var/interaction_message = "PM from-[key_name(src, recipient, 1)] to-[key_name(recipient, src, 1)]: [keywordparsedmsg]"
@@ -162,12 +162,12 @@
admin_ticket_log(recipient, interaction_message)
else //recipient is an admin but sender is not
- var/replymsg = "Reply PM from-[key_name(src, recipient, 1)]: [keywordparsedmsg]"
+ var/replymsg = "Reply PM from-[key_name(src, recipient, 1)]: [keywordparsedmsg]"
admin_ticket_log(src, replymsg)
to_chat(recipient, replymsg)
- to_chat(src, "PM to-Admins: [msg]")
+ to_chat(src, "PM to-Admins: [msg]")
- //play the recieving admin the adminhelp sound (if they have them enabled)
+ //play the receiving admin the adminhelp sound (if they have them enabled)
if(recipient.prefs.toggles & SOUND_ADMINHELP)
SEND_SOUND(recipient, sound('sound/effects/adminhelp.ogg'))
@@ -177,9 +177,9 @@
new /datum/admin_help(msg, recipient, TRUE)
to_chat(recipient, "-- Administrator private message --")
- to_chat(recipient, "Admin PM from-[key_name(src, recipient, 0)]: [msg]")
+ to_chat(recipient, "Admin PM from-[key_name(src, recipient, 0)]: [msg]")
to_chat(recipient, "Click on the administrator's name to reply.")
- to_chat(src, "Admin PM to-[key_name(recipient, src, 1)]: [msg]")
+ to_chat(src, "Admin PM to-[key_name(recipient, src, 1)]: [msg]")
admin_ticket_log(recipient, "PM From [key_name_admin(src)]: [keywordparsedmsg]")
diff --git a/code/modules/admin/verbs/adminsay.dm b/code/modules/admin/verbs/adminsay.dm
index 82bbc27abc..bf39288511 100644
--- a/code/modules/admin/verbs/adminsay.dm
+++ b/code/modules/admin/verbs/adminsay.dm
@@ -12,10 +12,10 @@
log_talk(mob,"[key_name(src)] : [msg]",LOGASAY)
msg = keywords_lookup(msg)
if(check_rights(R_ADMIN,0))
- msg = "ADMIN:[key_name(usr, 1)] [ADMIN_FLW(mob)]: [msg]"
+ msg = "ADMIN:[key_name(usr, 1)] [ADMIN_FLW(mob)]: [msg]"
to_chat(GLOB.admins, msg)
else
- msg = "ADMIN:[key_name(usr, 1)] [ADMIN_FLW(mob)]: [msg]"
+ msg = "ADMIN:[key_name(usr, 1)] [ADMIN_FLW(mob)]: [msg]"
to_chat(GLOB.admins, msg)
SSblackbox.record_feedback("tally", "admin_verb", 1, "Asay") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
diff --git a/code/modules/admin/verbs/manipulate_organs.dm b/code/modules/admin/verbs/manipulate_organs.dm
index 4d1de50e47..a3b7e4247c 100644
--- a/code/modules/admin/verbs/manipulate_organs.dm
+++ b/code/modules/admin/verbs/manipulate_organs.dm
@@ -1,7 +1,9 @@
/client/proc/manipulate_organs(mob/living/carbon/C in world)
set name = "Manipulate Organs"
set category = "Debug"
- var/operation = input("Select organ operation.", "Organ Manipulation", "cancel") in list("add organ", "add implant", "drop organ/implant", "remove organ/implant", "cancel")
+ var/operation = input("Select organ operation.", "Organ Manipulation", "cancel") as null|anything in list("add organ", "add implant", "drop organ/implant", "remove organ/implant", "cancel")
+ if (!operation)
+ return
var/list/organs = list()
switch(operation)
@@ -10,7 +12,9 @@
var/dat = replacetext("[path]", "/obj/item/organ/", ":")
organs[dat] = path
- var/obj/item/organ/organ = input("Select organ type:", "Organ Manipulation", null) in organs
+ var/obj/item/organ/organ = input("Select organ type:", "Organ Manipulation", null) as null|anything in organs
+ if(!organ)
+ return
organ = organs[organ]
organ = new organ
organ.Insert(C)
@@ -22,7 +26,9 @@
var/dat = replacetext("[path]", "/obj/item/implant/", ":")
organs[dat] = path
- var/obj/item/implant/organ = input("Select implant type:", "Organ Manipulation", null) in organs
+ var/obj/item/implant/organ = input("Select implant type:", "Organ Manipulation", null) as null|anything in organs
+ if(!organ)
+ return
organ = organs[organ]
organ = new organ
organ.implant(C)
@@ -38,7 +44,9 @@
var/obj/item/implant/I = X
organs["[I.name] ([I.type])"] = I
- var/obj/item/organ = input("Select organ/implant:", "Organ Manipulation", null) in organs
+ var/obj/item/organ = input("Select organ/implant:", "Organ Manipulation", null) as null|anything in organs
+ if(!organ)
+ return
organ = organs[organ]
if(!organ)
return
diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm
index daa1ce473a..190ddd7e63 100644
--- a/code/modules/admin/verbs/one_click_antag.dm
+++ b/code/modules/admin/verbs/one_click_antag.dm
@@ -76,7 +76,7 @@
return 0
-/datum/admins/proc/makeChanglings()
+/datum/admins/proc/makeChangelings()
var/datum/game_mode/changeling/temp = new
if(CONFIG_GET(flag/protect_roles_from_antagonist))
@@ -95,11 +95,11 @@
candidates += applicant
if(candidates.len)
- var/numChanglings = min(candidates.len, 3)
+ var/numChangelings = min(candidates.len, 3)
- for(var/i = 0, i[ADMIN_FULLMONTY(src)] [ADMIN_SC(src)]: [msg]"
+ msg = "[icon2html(cross, GLOB.admins)][prayer_type][deity ? " (to [deity])" : ""]: [ADMIN_FULLMONTY(src)] [ADMIN_SC(src)]:[msg]"
for(var/client/C in GLOB.admins)
if(C.prefs.chat_toggles & CHAT_PRAYER)
diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm
index e8afe623ee..0184c4b34f 100644
--- a/code/modules/admin/verbs/randomverbs.dm
+++ b/code/modules/admin/verbs/randomverbs.dm
@@ -1356,8 +1356,9 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits
alert("ERROR: Incorrect / improper path given.")
return
//send the pod
- target.Stun(10)//takes 0.53 seconds for CentCom pod to land
- new /obj/effect/DPtarget(get_turf(target), delivery, POD_CENTCOM, target)
+ if(iscarbon(target))
+ target.Stun(10)//takes 0.53 seconds for CentCom pod to land
+ new /obj/effect/DPtarget(get_turf(target), delivery, POD_CENTCOM)
var/msg = "[key_name_admin(usr)] punished [key_name_admin(target)] with [punishment]."
message_admins(msg)
diff --git a/code/modules/antagonists/_common/antag_datum.dm b/code/modules/antagonists/_common/antag_datum.dm
index 1e7d3303d6..50281d54b4 100644
--- a/code/modules/antagonists/_common/antag_datum.dm
+++ b/code/modules/antagonists/_common/antag_datum.dm
@@ -75,7 +75,7 @@ GLOBAL_LIST_EMPTY(antagonists)
/datum/antagonist/proc/is_banned(mob/M)
if(!M)
return FALSE
- . = (jobban_isbanned(M, ROLE_SYNDICATE) || (job_rank && jobban_isbanned(M,job_rank)))
+ . = (jobban_isbanned(M, ROLE_SYNDICATE) || QDELETED(M) || (job_rank && (jobban_isbanned(M,job_rank) || QDELETED(M))))
/datum/antagonist/proc/replace_banned_player()
set waitfor = FALSE
@@ -110,12 +110,12 @@ GLOBAL_LIST_EMPTY(antagonists)
/datum/antagonist/proc/give_antag_moodies()
if(!antag_moodlet)
return
- owner.current.SendSignal(COMSIG_ADD_MOOD_EVENT, "antag_moodlet", antag_moodlet)
+ SEND_SIGNAL(owner.current, COMSIG_ADD_MOOD_EVENT, "antag_moodlet", antag_moodlet)
/datum/antagonist/proc/clear_antag_moodies()
if(!antag_moodlet)
return
- owner.current.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "antag_moodlet")
+ SEND_SIGNAL(owner.current, COMSIG_CLEAR_MOOD_EVENT, "antag_moodlet")
//Returns the team antagonist belongs to if any.
/datum/antagonist/proc/get_team()
diff --git a/code/modules/antagonists/_common/antag_spawner.dm b/code/modules/antagonists/_common/antag_spawner.dm
index 0a000c4bf0..ca87b94d5b 100644
--- a/code/modules/antagonists/_common/antag_spawner.dm
+++ b/code/modules/antagonists/_common/antag_spawner.dm
@@ -58,6 +58,8 @@
return
var/list/candidates = pollCandidatesForMob("Do you want to play as a wizard's [href_list["school"]] apprentice?", ROLE_WIZARD, null, ROLE_WIZARD, 150, src)
if(LAZYLEN(candidates))
+ if(QDELETED(src))
+ return
if(used)
to_chat(H, "You already used this contract!")
return
@@ -121,7 +123,7 @@
to_chat(user, "You activate [src] and wait for confirmation.")
var/list/nuke_candidates = pollGhostCandidates("Do you want to play as a syndicate [borg_to_spawn ? "[lowertext(borg_to_spawn)] cyborg":"operative"]?", ROLE_OPERATIVE, null, ROLE_OPERATIVE, 150, POLL_IGNORE_SYNDICATE)
if(LAZYLEN(nuke_candidates))
- if(!(check_usability(user)))
+ if(QDELETED(src) || !check_usability(user))
return
used = TRUE
var/mob/dead/observer/G = pick(nuke_candidates)
@@ -235,7 +237,7 @@
return
var/list/candidates = pollCandidatesForMob("Do you want to play as a [initial(demon_type.name)]?", ROLE_ALIEN, null, ROLE_ALIEN, 50, src)
if(LAZYLEN(candidates))
- if(used)
+ if(used || QDELETED(src))
return
used = TRUE
var/mob/dead/observer/C = pick(candidates)
diff --git a/code/modules/antagonists/abductor/equipment/abduction_gear.dm b/code/modules/antagonists/abductor/equipment/abduction_gear.dm
index e7cdb4d00c..f19521e821 100644
--- a/code/modules/antagonists/abductor/equipment/abduction_gear.dm
+++ b/code/modules/antagonists/abductor/equipment/abduction_gear.dm
@@ -30,9 +30,9 @@
var/combat_armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 50, "bomb" = 50, "bio" = 50, "rad" = 50, "fire" = 90, "acid" = 90)
/obj/item/clothing/suit/armor/abductor/vest/proc/toggle_nodrop()
- flags_1 ^= NODROP_1
+ item_flags ^= NODROP
if(ismob(loc))
- to_chat(loc, "Your vest is now [flags_1 & NODROP_1 ? "locked" : "unlocked"].")
+ to_chat(loc, "Your vest is now [item_flags & NODROP ? "locked" : "unlocked"].")
/obj/item/clothing/suit/armor/abductor/vest/proc/flip_mode()
switch(mode)
@@ -589,9 +589,10 @@ Congratulations! You are now trained for invasive xenobiology research!"}
righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi'
breakouttime = 450
trashtype = /obj/item/restraints/handcuffs/energy/used
+ flags_1 = NONE
/obj/item/restraints/handcuffs/energy/used
- flags_1 = DROPDEL_1
+ item_flags = DROPDEL
/obj/item/restraints/handcuffs/energy/used/dropped(mob/user)
user.visible_message("[user]'s [name] breaks in a discharge of energy!", \
diff --git a/code/modules/antagonists/abductor/equipment/abduction_outfits.dm b/code/modules/antagonists/abductor/equipment/abduction_outfits.dm
index 8b8851ec18..e2b881d147 100644
--- a/code/modules/antagonists/abductor/equipment/abduction_outfits.dm
+++ b/code/modules/antagonists/abductor/equipment/abduction_outfits.dm
@@ -17,7 +17,7 @@
var/obj/item/clothing/suit/armor/abductor/vest/V = locate() in H
if(V)
console.AddVest(V)
- V.flags_1 |= NODROP_1
+ V.item_flags |= NODROP
var/obj/item/storage/backpack/B = locate() in H
if(B)
diff --git a/code/modules/antagonists/abductor/machinery/console.dm b/code/modules/antagonists/abductor/machinery/console.dm
index 6bc8fc0d5d..a14b667069 100644
--- a/code/modules/antagonists/abductor/machinery/console.dm
+++ b/code/modules/antagonists/abductor/machinery/console.dm
@@ -75,7 +75,7 @@
dat+=" "
dat += "Select Agent Vest Disguise "
- dat += "[vest.flags_1 & NODROP_1 ? "Unlock" : "Lock"] Vest "
+ dat += "[vest.item_flags & NODROP ? "Unlock" : "Lock"] Vest "
else
dat += "NO AGENT VEST DETECTED"
var/datum/browser/popup = new(user, "computer", "Abductor Console", 400, 500)
diff --git a/code/modules/antagonists/blob/blob/overmind.dm b/code/modules/antagonists/blob/blob/overmind.dm
index 9d31852d28..3483c3a557 100644
--- a/code/modules/antagonists/blob/blob/overmind.dm
+++ b/code/modules/antagonists/blob/blob/overmind.dm
@@ -123,7 +123,7 @@ GLOBAL_LIST_EMPTY(blob_nodes)
else
L.fully_heal()
- for(var/V in GLOB.sortedAreas)
+ for(var/V in GLOB.the_station_areas)
var/area/A = V
if(!A.blob_allowed)
continue
diff --git a/code/modules/antagonists/changeling/changeling.dm b/code/modules/antagonists/changeling/changeling.dm
index a42ae6ef4f..ab6dd3607d 100644
--- a/code/modules/antagonists/changeling/changeling.dm
+++ b/code/modules/antagonists/changeling/changeling.dm
@@ -451,7 +451,7 @@
/datum/antagonist/changeling/proc/update_changeling_icons_added()
var/datum/atom_hud/antag/hud = GLOB.huds[ANTAG_HUD_CHANGELING]
hud.join_hud(owner.current)
- set_antag_hud(owner.current, "changling")
+ set_antag_hud(owner.current, "changeling")
/datum/antagonist/changeling/proc/update_changeling_icons_removed()
var/datum/atom_hud/antag/hud = GLOB.huds[ANTAG_HUD_CHANGELING]
diff --git a/code/modules/antagonists/changeling/powers/absorb.dm b/code/modules/antagonists/changeling/powers/absorb.dm
index 199bc6636b..a8bec72771 100644
--- a/code/modules/antagonists/changeling/powers/absorb.dm
+++ b/code/modules/antagonists/changeling/powers/absorb.dm
@@ -112,10 +112,3 @@
target.death(0)
target.Drain()
return TRUE
-
-
-
-//Absorbs the target DNA.
-//datum/changeling/proc/absorb_dna(mob/living/carbon/T, mob/user)
-
-//datum/changeling/proc/store_dna(datum/dna/new_dna, mob/user)
diff --git a/code/modules/antagonists/changeling/powers/augmented_eyesight.dm b/code/modules/antagonists/changeling/powers/augmented_eyesight.dm
index f48464700f..5ec5440a2b 100644
--- a/code/modules/antagonists/changeling/powers/augmented_eyesight.dm
+++ b/code/modules/antagonists/changeling/powers/augmented_eyesight.dm
@@ -1,4 +1,4 @@
-//Augmented Eyesight: Gives you x-ray vision or protection from flashes. Also, high DNA cost because of how powerful it is.
+//Augmented Eyesight: Gives you X-ray vision or protection from flashes. Also, high DNA cost because of how powerful it is.
//Possible todo: make a custom message for directing a penlight/flashlight at the eyes - not sure what would display though.
/obj/effect/proc_holder/changeling/augmented_eyesight
@@ -41,7 +41,7 @@
return 1
-/obj/effect/proc_holder/changeling/augmented_eyesight/on_refund(mob/user) //Get rid of x-ray vision and flash protection when the user refunds this ability
+/obj/effect/proc_holder/changeling/augmented_eyesight/on_refund(mob/user) //Get rid of X-ray vision and flash protection when the user refunds this ability
var/obj/item/organ/eyes/E = user.getorganslot(ORGAN_SLOT_EYES)
if(E)
if (active)
diff --git a/code/modules/antagonists/changeling/powers/digitalcamo.dm b/code/modules/antagonists/changeling/powers/digitalcamo.dm
index afb4e0bef7..68a1fa4add 100644
--- a/code/modules/antagonists/changeling/powers/digitalcamo.dm
+++ b/code/modules/antagonists/changeling/powers/digitalcamo.dm
@@ -1,6 +1,6 @@
/obj/effect/proc_holder/changeling/digitalcamo
name = "Digital Camouflage"
- desc = "By evolving the ability to distort our form and proprotions, we defeat common altgorithms used to detect lifeforms on cameras."
+ desc = "By evolving the ability to distort our form and proportions, we defeat common algorithms used to detect lifeforms on cameras."
helptext = "We cannot be tracked by camera or seen by AI units while using this skill. However, humans looking at us will find us... uncanny."
dna_cost = 1
diff --git a/code/modules/antagonists/changeling/powers/mutations.dm b/code/modules/antagonists/changeling/powers/mutations.dm
index dbc8446fca..08fe6bd0ce 100644
--- a/code/modules/antagonists/changeling/powers/mutations.dm
+++ b/code/modules/antagonists/changeling/powers/mutations.dm
@@ -29,7 +29,7 @@
/obj/effect/proc_holder/changeling/weapon/proc/check_weapon(mob/user, obj/item/hand_item)
if(istype(hand_item, weapon_type))
- user.temporarilyRemoveItemFromInventory(hand_item, TRUE) //DROPDEL_1 will delete the item
+ user.temporarilyRemoveItemFromInventory(hand_item, TRUE) //DROPDEL will delete the item
if(!silent)
playsound(user, 'sound/effects/blobattack.ogg', 30, 1)
user.visible_message("With a sickening crunch, [user] reforms [user.p_their()] [weapon_name_simple] into an arm!", "We assimilate the [weapon_name_simple] back into our body.", "We search for the scent of any nearby changelings.")
+ changeling.chem_recharge_slowdown += 0.5
+ user.apply_status_effect(/datum/status_effect/agent_pinpointer/changeling)
+ else
+ to_chat(user, "We stop searching for now.")
+ changeling.chem_recharge_slowdown -= 0.5
+ user.remove_status_effect(/datum/status_effect/agent_pinpointer/changeling)
+
+ receptors_active = !receptors_active
+
+//Modified IA pinpointer - Points to the NEAREST changeling, but will only get you within a few tiles of the target.
+//You'll still have to rely on intuition and observation to make the identification. Lings can 'hide' in public places.
+/datum/status_effect/agent_pinpointer/changeling
+ alert_type = /obj/screen/alert/status_effect/agent_pinpointer/changeling
+ minimum_range = CHANGELING_PHEROMONE_MIN_DISTANCE
+ tick_interval = CHANGELING_PHEROMONE_PING_TIME
+ range_fuzz_factor = 0
+
+/datum/status_effect/agent_pinpointer/changeling/scan_for_target()
+ var/turf/my_loc = get_turf(owner)
+
+ var/list/mob/living/carbon/changelings = list()
+
+ for(var/mob/living/carbon/C in GLOB.alive_mob_list)
+ if(C != owner && C.mind)
+ var/datum/antagonist/changeling/antag_datum = C.mind.has_antag_datum(/datum/antagonist/changeling)
+ if(istype(antag_datum))
+ var/their_loc = get_turf(C)
+ var/distance = get_dist_euclidian(my_loc, their_loc)
+ if (distance < CHANGELING_PHEROMONE_MAX_DISTANCE)
+ changelings[C] = (CHANGELING_PHEROMONE_MAX_DISTANCE ** 2) - (distance ** 2)
+
+ if(changelings.len)
+ scan_target = pickweight(changelings) //Point at a 'random' changeling, biasing heavily towards closer ones.
+ else
+ scan_target = null
+
+
+/obj/screen/alert/status_effect/agent_pinpointer/changeling
+ name = "Pheromone Scent"
+ desc = "The nose always knows."
\ No newline at end of file
diff --git a/code/modules/antagonists/changeling/powers/tiny_prick.dm b/code/modules/antagonists/changeling/powers/tiny_prick.dm
index 1d0a4cf143..a801c87ac2 100644
--- a/code/modules/antagonists/changeling/powers/tiny_prick.dm
+++ b/code/modules/antagonists/changeling/powers/tiny_prick.dm
@@ -134,7 +134,7 @@
return 1
/obj/effect/proc_holder/changeling/sting/false_armblade/sting_action(mob/user, mob/target)
- add_logs(user, target, "stung", object="falso armblade sting")
+ add_logs(user, target, "stung", object="false armblade sting")
var/obj/item/held = target.get_active_held_item()
if(held && !target.dropItemToGround(held))
diff --git a/code/modules/antagonists/changeling/powers/transform.dm b/code/modules/antagonists/changeling/powers/transform.dm
index 2929b5743e..1e2b22cdae 100644
--- a/code/modules/antagonists/changeling/powers/transform.dm
+++ b/code/modules/antagonists/changeling/powers/transform.dm
@@ -8,7 +8,7 @@
/obj/item/clothing/glasses/changeling
name = "flesh"
- flags_1 = NODROP_1
+ item_flags = NODROP
//ATTACK HAND IGNORING PARENT RETURN VALUE
/obj/item/clothing/glasses/changeling/attack_hand(mob/user)
@@ -20,7 +20,7 @@
/obj/item/clothing/under/changeling
name = "flesh"
- flags_1 = NODROP_1
+ item_flags = NODROP
//ATTACK HAND IGNORING PARENT RETURN VALUE
/obj/item/clothing/under/changeling/attack_hand(mob/user)
@@ -32,7 +32,7 @@
/obj/item/clothing/suit/changeling
name = "flesh"
- flags_1 = NODROP_1
+ item_flags = NODROP
allowed = list(/obj/item/changeling)
//ATTACK HAND IGNORING PARENT RETURN VALUE
@@ -45,7 +45,7 @@
/obj/item/clothing/head/changeling
name = "flesh"
- flags_1 = NODROP_1
+ item_flags = NODROP
//ATTACK HAND IGNORING PARENT RETURN VALUE
/obj/item/clothing/head/changeling/attack_hand(mob/user)
@@ -57,7 +57,7 @@
/obj/item/clothing/shoes/changeling
name = "flesh"
- flags_1 = NODROP_1
+ item_flags = NODROP
//ATTACK HAND IGNORING PARENT RETURN VALUE
/obj/item/clothing/shoes/changeling/attack_hand(mob/user)
@@ -69,7 +69,7 @@
/obj/item/clothing/gloves/changeling
name = "flesh"
- flags_1 = NODROP_1
+ item_flags = NODROP
//ATTACK HAND IGNORING PARENT RETURN VALUE
/obj/item/clothing/gloves/changeling/attack_hand(mob/user)
@@ -81,7 +81,7 @@
/obj/item/clothing/mask/changeling
name = "flesh"
- flags_1 = NODROP_1
+ item_flags = NODROP
//ATTACK HAND IGNORING PARENT RETURN VALUE
/obj/item/clothing/mask/changeling/attack_hand(mob/user)
@@ -93,7 +93,7 @@
/obj/item/changeling
name = "flesh"
- flags_1 = NODROP_1
+ item_flags = NODROP
slot_flags = ALL
allowed = list(/obj/item/changeling)
diff --git a/code/modules/antagonists/clockcult/clock_helpers/fabrication_helpers.dm b/code/modules/antagonists/clockcult/clock_helpers/fabrication_helpers.dm
index b32345fa69..bd986bac25 100644
--- a/code/modules/antagonists/clockcult/clock_helpers/fabrication_helpers.dm
+++ b/code/modules/antagonists/clockcult/clock_helpers/fabrication_helpers.dm
@@ -254,8 +254,8 @@
var/list/repair_values = list()
if(!fabricator.fabricator_repair_checks(repair_values, src, user))
return
- user.visible_message("[user]'s [fabricator.name] starts coverin[src == user ? "g [user.p_them()]" : "g [src]"] in glowing orange energy...", \
- "You start repairin[src == user ? "g yourself" : "g [src]"]...")
+ user.visible_message("[user]'s [fabricator.name] starts covering [src == user ? "[user.p_them()]" : "[src]"] in glowing orange energy...", \
+ "You start repairing [src == user ? "yourself" : "[src]"]...")
fabricator.repairing = src
while(fabricator && user && src)
if(!do_after(user, repair_values["healing_for_cycle"] * fabricator.speed_multiplier, target = src, \
@@ -283,7 +283,7 @@
if(health == maxHealth) //if we're at maximum health, replace the turf under us
return FALSE
else if(fabricator_heal(user, fabricator) && user)
- user.visible_message("[user]'s [fabricator.name] stops coverin[src == user ? "g [user.p_them()]" : "g [src]"] with glowing orange energy.", \
+ user.visible_message("[user]'s [fabricator.name] stops covering [src == user ? "[user.p_them()]" : "[src]"] with glowing orange energy.", \
"You finish repairin[src == user ? "g yourself. You are":"g [src]. [p_theyre(TRUE)]"] now at [abs(HEALTH_THRESHOLD_DEAD - health)]/[abs(HEALTH_THRESHOLD_DEAD - maxHealth)] health.")
//Same with clockwork mobs.
@@ -292,7 +292,7 @@
if(health == maxHealth) //if we're at maximum health, replace the turf under us
return FALSE
else if(fabricator_heal(user, fabricator) && user)
- user.visible_message("[user]'s [fabricator.name] stops coverin[src == user ? "g [user.p_them()]" : "g [src]"] with glowing orange energy.", \
+ user.visible_message("[user]'s [fabricator.name] stops covering [src == user ? "[user.p_them()]" : "[src]"] with glowing orange energy.", \
"You finish repairin[src == user ? "g yourself. You are":"g [src]. [p_theyre(TRUE)]"] now at [health]/[maxHealth] health.")
//Cogscarabs get special interaction because they're drones and have innate self-heals/revives.
@@ -304,13 +304,13 @@
if(health == maxHealth)
return FALSE
else if(!(flags_1 & GODMODE))
- user.visible_message("[user]'s [fabricator.name] starts coverin[src == user ? "g [user.p_them()]" : "g [src]"] in glowing orange energy...", \
- "You start repairin[src == user ? "g yourself" : "g [src]"]...")
+ user.visible_message("[user]'s [fabricator.name] starts covering [src == user ? "[user.p_them()]" : "[src]"] in glowing orange energy...", \
+ "You start repairing [src == user ? "yourself" : "[src]"]...")
fabricator.repairing = src
if(do_after(user, (maxHealth - health)*2, target=src))
adjustHealth(-maxHealth)
- user.visible_message("[user]'s [fabricator.name] stops coverin[src == user ? "g [user.p_them()]" : "g [src]"] with glowing orange energy.", \
- "You finish repairin[src == user ? "g yourself" : "g [src]"].")
+ user.visible_message("[user]'s [fabricator.name] stops covering [src == user ? "[user.p_them()]" : "[src]"] with glowing orange energy.", \
+ "You finish repairing [src == user ? "yourself" : "[src]"].")
if(fabricator)
fabricator.repairing = null
diff --git a/code/modules/antagonists/clockcult/clock_helpers/slab_abilities.dm b/code/modules/antagonists/clockcult/clock_helpers/slab_abilities.dm
index d39656c8d8..aaeb871e5d 100644
--- a/code/modules/antagonists/clockcult/clock_helpers/slab_abilities.dm
+++ b/code/modules/antagonists/clockcult/clock_helpers/slab_abilities.dm
@@ -67,7 +67,7 @@
name = "replicant manacles"
desc = "Heavy manacles made out of freezing-cold metal. It looks like brass, but feels much more solid."
icon_state = "brass_manacles"
- flags_1 = DROPDEL_1
+ item_flags = DROPDEL
/obj/item/restraints/handcuffs/clockwork/dropped(mob/user)
user.visible_message("[user]'s [name] come apart at the seams!", \
diff --git a/code/modules/antagonists/clockcult/clock_items/clockwork_armor.dm b/code/modules/antagonists/clockcult/clock_items/clockwork_armor.dm
index d32eeee84b..8ed8edae8a 100644
--- a/code/modules/antagonists/clockcult/clock_items/clockwork_armor.dm
+++ b/code/modules/antagonists/clockcult/clock_items/clockwork_armor.dm
@@ -106,13 +106,13 @@
if(slot == SLOT_WEAR_SUIT && !is_servant_of_ratvar(user))
if(!iscultist(user))
to_chat(user, "\"Now now, this is for my servants, not you.\"")
- user.visible_message("As [user] puts [src] on, it flickers off [user.p_their()] body!", "The curiass flickers off your body, leaving only nausea!")
+ user.visible_message("As [user] puts [src] on, it flickers off [user.p_their()] body!", "The cuirass flickers off your body, leaving only nausea!")
if(iscarbon(user))
var/mob/living/carbon/C = user
C.vomit(20)
else
to_chat(user, "\"I think this armor is too hot for you to handle.\"")
- to_chat(user, "The curiass emits a burst of flame as you scramble to get it off!")
+ to_chat(user, "The cuirass emits a burst of flame as you scramble to get it off!")
user.emote("scream")
user.apply_damage(15, BURN, BODY_ZONE_CHEST)
user.adjust_fire_stacks(2)
diff --git a/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm b/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm
index c464656150..1cdc05a07a 100644
--- a/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm
+++ b/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm
@@ -278,7 +278,7 @@
dat += "Items "
dat += "Slab: A clockwork slab, a Servant's most important tool. You're holding one! Keep it safe and hidden. "
dat += "Visor: A judicial visor, which is a pair of glasses that can smite an area for a brief stun and delayed explosion. "
- dat += "Wraith Specs: Wraith spectacles, which provide true sight (x-ray, night vision) but damage the wearer's eyes. "
+ dat += "Wraith Specs: Wraith spectacles, which provide true sight (X-ray, night vision) but damage the wearer's eyes. "
dat += "Spear: A Ratvarian spear, which is a very powerful melee weapon that produces Vitality. "
dat += "Fabricator: A replica fabricator, which converts objects into clockwork versions.
"
dat += "Constructs "
diff --git a/code/modules/antagonists/clockcult/clock_items/integration_cog.dm b/code/modules/antagonists/clockcult/clock_items/integration_cog.dm
index 4e4aff5569..0ce70336fe 100644
--- a/code/modules/antagonists/clockcult/clock_items/integration_cog.dm
+++ b/code/modules/antagonists/clockcult/clock_items/integration_cog.dm
@@ -9,7 +9,7 @@
Siphons 5 W of power per second while in an APC."
icon_state = "wall_gear"
w_class = WEIGHT_CLASS_TINY
- flags_1 = NOBLUDGEON_1
+ item_flags = NOBLUDGEON
var/obj/machinery/power/apc/apc
/obj/item/clockwork/integration_cog/Initialize()
diff --git a/code/modules/antagonists/clockcult/clock_items/replica_fabricator.dm b/code/modules/antagonists/clockcult/clock_items/replica_fabricator.dm
index c89a04c932..741b251a4f 100644
--- a/code/modules/antagonists/clockcult/clock_items/replica_fabricator.dm
+++ b/code/modules/antagonists/clockcult/clock_items/replica_fabricator.dm
@@ -8,7 +8,7 @@
righthand_file = 'icons/mob/inhands/antag/clockwork_righthand.dmi'
w_class = WEIGHT_CLASS_NORMAL
force = 5
- flags_1 = NOBLUDGEON_1
+ item_flags = NOBLUDGEON
var/speed_multiplier = 1 //The speed ratio the fabricator operates at
var/uses_power = TRUE
var/repairing = null //what we're currently repairing, if anything
diff --git a/code/modules/antagonists/clockcult/clock_items/wraith_spectacles.dm b/code/modules/antagonists/clockcult/clock_items/wraith_spectacles.dm
index dab12dc304..6fda25a1b5 100644
--- a/code/modules/antagonists/clockcult/clock_items/wraith_spectacles.dm
+++ b/code/modules/antagonists/clockcult/clock_items/wraith_spectacles.dm
@@ -1,4 +1,4 @@
-//Wraith spectacles: Grants x-ray and night vision at the eventual cost of the wearer's sight if worn too long. Nar-Sian cultists are instantly blinded.
+//Wraith spectacles: Grants X-ray and night vision at the eventual cost of the wearer's sight if worn too long. Nar-Sian cultists are instantly blinded.
/obj/item/clothing/glasses/wraith_spectacles
name = "antique spectacles"
desc = "Unnerving glasses with opaque yellow lenses."
diff --git a/code/modules/antagonists/clockcult/clock_scriptures/scripture_drivers.dm b/code/modules/antagonists/clockcult/clock_scriptures/scripture_drivers.dm
index ad4062598e..e78a6e4623 100644
--- a/code/modules/antagonists/clockcult/clock_scriptures/scripture_drivers.dm
+++ b/code/modules/antagonists/clockcult/clock_scriptures/scripture_drivers.dm
@@ -29,7 +29,7 @@
descname = "Trap, Stunning"
name = "Sigil of Transgression"
desc = "Wards a tile with a sigil, which will briefly stun the next non-Servant to cross it and apply Belligerent to them."
- invocations = list("Divinity, smite...", "...those who tresspass here!")
+ invocations = list("Divinity, smite...", "...those who trespass here!")
channel_time = 50
power_cost = 50
whispered = TRUE
diff --git a/code/modules/antagonists/cult/blood_magic.dm b/code/modules/antagonists/cult/blood_magic.dm
index 5459e4c45e..847b49c354 100644
--- a/code/modules/antagonists/cult/blood_magic.dm
+++ b/code/modules/antagonists/cult/blood_magic.dm
@@ -339,7 +339,8 @@
icon = 'icons/obj/items_and_weapons.dmi'
icon_state = "disintegrate"
item_state = null
- flags_1 = ABSTRACT_1 | NODROP_1 | DROPDEL_1
+ item_flags = NEEDS_PERMIT | ABSTRACT | NODROP | DROPDEL
+
w_class = WEIGHT_CLASS_HUGE
throwforce = 0
throw_range = 0
@@ -519,7 +520,7 @@
name = "shadow shackles"
desc = "Shackles that bind the wrists with sinister magic."
trashtype = /obj/item/restraints/handcuffs/energy/used
- flags_1 = DROPDEL_1
+ item_flags = DROPDEL
/obj/item/restraints/handcuffs/energy/cult/used/dropped(mob/user)
user.visible_message("[user]'s shackles shatter in a discharge of dark magic!", \
@@ -541,7 +542,7 @@
var/obj/item/stack/sheet/candidate = target
if(candidate.use(50))
uses--
- to_chat(user, "A dark cloud eminates from your hand and swirls around the metal, twisting it into a construct shell!")
+ to_chat(user, "A dark cloud emanates from your hand and swirls around the metal, twisting it into a construct shell!")
new /obj/structure/constructshell(T)
SEND_SOUND(user, sound('sound/effects/magic.ogg',0,1,25))
else
@@ -552,12 +553,12 @@
if(candidate.use(quantity))
uses --
new /obj/item/stack/sheet/runed_metal(T,quantity)
- to_chat(user, "A dark cloud eminates from you hand and swirls around the plasteel, transforming it into runed metal!")
+ to_chat(user, "A dark cloud emanates from you hand and swirls around the plasteel, transforming it into runed metal!")
SEND_SOUND(user, sound('sound/effects/magic.ogg',0,1,25))
else if(istype(target,/mob/living/silicon/robot))
var/mob/living/silicon/robot/candidate = target
if(candidate.mmi)
- user.visible_message("A dark cloud eminates from [user]'s hand and swirls around [candidate]!")
+ user.visible_message("A dark cloud emanates from [user]'s hand and swirls around [candidate]!")
playsound(T, 'sound/machines/airlock_alien_prying.ogg', 80, 1)
var/prev_color = candidate.color
candidate.color = "black"
@@ -580,7 +581,7 @@
candidate.color = prev_color
else
uses--
- to_chat(user, "A dark cloud eminates from you hand and swirls around [candidate] - twisting it into a construct shell!")
+ to_chat(user, "A dark cloud emanates from you hand and swirls around [candidate] - twisting it into a construct shell!")
new /obj/structure/constructshell(T)
SEND_SOUND(user, sound('sound/effects/magic.ogg',0,1,25))
else if(istype(target,/obj/machinery/door/airlock))
diff --git a/code/modules/antagonists/cult/cult.dm b/code/modules/antagonists/cult/cult.dm
index f8a3d84576..8ea391d2ca 100644
--- a/code/modules/antagonists/cult/cult.dm
+++ b/code/modules/antagonists/cult/cult.dm
@@ -95,7 +95,7 @@
else
to_chat(mob, "You have a [item_name] in your [where].")
if(where == "backpack")
- mob.back.SendSignal(COMSIG_TRY_STORAGE_SHOW, mob)
+ SEND_SIGNAL(mob.back, COMSIG_TRY_STORAGE_SHOW, mob)
return TRUE
/datum/antagonist/cult/apply_innate_effects(mob/living/mob_override)
@@ -228,7 +228,7 @@
target_candidates += player.mind
if(target_candidates.len == 0)
- message_admins("Cult Sacrifice: Could not find unconvertable target, checking for convertable target.")
+ message_admins("Cult Sacrifice: Could not find unconvertible target, checking for convertible target.")
for(var/mob/living/carbon/human/player in GLOB.player_list)
if(player.mind && !player.mind.has_antag_datum(/datum/antagonist/cult) && player.stat != DEAD)
target_candidates += player.mind
@@ -248,7 +248,7 @@
objectives += sac_objective
else
- message_admins("Cult Sacrifice: Could not find unconvertable or convertable target. WELP!")
+ message_admins("Cult Sacrifice: Could not find unconvertible or convertible target. WELP!")
//SUMMON OBJECTIVE
diff --git a/code/modules/antagonists/cult/cult_comms.dm b/code/modules/antagonists/cult/cult_comms.dm
index 4e6a50bf6b..fd1d0d1c67 100644
--- a/code/modules/antagonists/cult/cult_comms.dm
+++ b/code/modules/antagonists/cult/cult_comms.dm
@@ -215,7 +215,7 @@
var/cooldown = 0
var/base_cooldown = 1200
-/datum/action/innate/cult/master/cultmark/New()
+/datum/action/innate/cult/master/cultmark/New(Target)
CM = new()
CM.attached_action = src
..()
@@ -299,7 +299,7 @@
name = "Mark a Blood Target for the Cult"
desc = "Marks a target for the entire cult to track."
-/datum/action/innate/cult/master/cultmark/IsAvailable()
+/datum/action/innate/cult/master/cultmark/ghost/IsAvailable()
if(istype(owner, /mob/dead/observer) && iscultist(owner.mind.current))
return TRUE
else
diff --git a/code/modules/antagonists/cult/cult_items.dm b/code/modules/antagonists/cult/cult_items.dm
index 7678cdcfb3..e1710dae96 100644
--- a/code/modules/antagonists/cult/cult_items.dm
+++ b/code/modules/antagonists/cult/cult_items.dm
@@ -64,7 +64,8 @@
/obj/item/melee/cultblade/ghost
name = "eldritch sword"
force = 19 //can't break normal airlocks
- flags_1 = NODROP_1|DROPDEL_1
+ item_flags = NEEDS_PERMIT | NODROP | DROPDEL
+ flags_1 = NONE
/obj/item/melee/cultblade/pickup(mob/living/user)
..()
@@ -301,7 +302,7 @@
item_state = "cult_hoodalt"
/obj/item/clothing/head/culthood/alt/ghost
- flags_1 = NODROP_1|DROPDEL_1
+ item_flags = NODROP | DROPDEL
/obj/item/clothing/suit/cultrobes/alt
name = "cultist robes"
@@ -310,7 +311,7 @@
item_state = "cultrobesalt"
/obj/item/clothing/suit/cultrobes/alt/ghost
- flags_1 = NODROP_1|DROPDEL_1
+ item_flags = NODROP | DROPDEL
/obj/item/clothing/head/magus
@@ -333,7 +334,7 @@
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
/obj/item/clothing/head/helmet/space/hardsuit/cult
- name = "nar-sien hardened helmet"
+ name = "\improper Nar-Sien hardened helmet"
desc = "A heavily-armored helmet worn by warriors of the Nar-Sien cult. It can withstand hard vacuum."
icon_state = "cult_helmet"
item_state = "cult_helmet"
@@ -342,7 +343,7 @@
actions_types = list()
/obj/item/clothing/suit/space/hardsuit/cult
- name = "nar-sien hardened armor"
+ name = "\improper Nar-Sien hardened armor"
icon_state = "cult_armor"
item_state = "cult_armor"
desc = "A heavily-armored exosuit worn by warriors of the Nar-Sien cult. It can withstand hard vacuum."
@@ -754,7 +755,7 @@
guns_left = 24
mag_type = /obj/item/ammo_box/magazine/internal/boltaction/enchanted/arcane_barrage/blood
fire_sound = 'sound/magic/wand_teleport.ogg'
- flags_1 = NOBLUDGEON_1 | DROPDEL_1
+ item_flags = NEEDS_PERMIT | NOBLUDGEON | DROPDEL
/obj/item/ammo_box/magazine/internal/boltaction/enchanted/arcane_barrage/blood
@@ -792,7 +793,7 @@
icon = 'icons/obj/items_and_weapons.dmi'
icon_state = "disintegrate"
item_state = null
- flags_1 = ABSTRACT_1 | NODROP_1 | DROPDEL_1
+ item_flags = ABSTRACT | NODROP | DROPDEL
w_class = WEIGHT_CLASS_HUGE
throwforce = 0
throw_range = 0
diff --git a/code/modules/antagonists/cult/runes.dm b/code/modules/antagonists/cult/runes.dm
index 4f4cc6c751..df4715bc69 100644
--- a/code/modules/antagonists/cult/runes.dm
+++ b/code/modules/antagonists/cult/runes.dm
@@ -804,7 +804,7 @@ structure_check() searches for nearby cultist structures required for the invoca
construct_invoke = FALSE
color = RUNE_COLOR_DARKRED
var/mob/living/affecting = null
- var/ghost_limit = 4
+ var/ghost_limit = 3
var/ghosts = 0
/obj/effect/rune/manifest/Initialize()
@@ -834,10 +834,15 @@ structure_check() searches for nearby cultist structures required for the invoca
if(A.map_name == "Space" || is_mining_level(T.z))
to_chat(user, "The veil is not weak enough here to manifest spirits, you must be on station!")
return
+ if(ghosts >= ghost_limit)
+ to_chat(user, "You are sustaining too many ghosts to summon more!")
+ fail_invoke()
+ log_game("Manifest rune failed - too many summoned ghosts")
+ return list()
notify_ghosts("Manifest rune invoked in [get_area(src)].", 'sound/effects/ghost2.ogg', source = src)
var/list/ghosts_on_rune = list()
for(var/mob/dead/observer/O in T)
- if(O.client && !jobban_isbanned(O, ROLE_CULTIST))
+ if(O.client && !jobban_isbanned(O, ROLE_CULTIST) && !QDELETED(src) && !QDELETED(O))
ghosts_on_rune += O
if(!ghosts_on_rune.len)
to_chat(user, "There are no spirits near [src]!")
@@ -852,11 +857,6 @@ structure_check() searches for nearby cultist structures required for the invoca
new_human.apply_status_effect(STATUS_EFFECT_SUMMONEDGHOST) //ghosts can't summon more ghosts
new_human.see_invisible = SEE_INVISIBLE_OBSERVER
ghosts++
- if(ghosts >= ghost_limit)
- to_chat(user, "You are sustaining too many ghosts to summon more!")
- fail_invoke()
- log_game("Manifest rune failed - too many summoned ghosts")
- return list()
playsound(src, 'sound/magic/exit_blood.ogg', 50, 1)
visible_message("A cloud of red mist forms above [src], and from within steps... a [new_human.gender == FEMALE ? "wo":""]man.")
to_chat(user, "Your blood begins flowing into [src]. You must remain in place and conscious to maintain the forms of those summoned. This will hurt you slowly but surely...")
diff --git a/code/modules/antagonists/devil/imp/imp.dm b/code/modules/antagonists/devil/imp/imp.dm
index 7752d0449f..da51a5d698 100644
--- a/code/modules/antagonists/devil/imp/imp.dm
+++ b/code/modules/antagonists/devil/imp/imp.dm
@@ -36,7 +36,7 @@
var/boost = 0
bloodcrawl = BLOODCRAWL_EAT
var/list/consumed_mobs = list()
- var/playstyle_string = "You are an imp, a mischevious creature from hell. You are the lowest rank on the hellish totem pole \
+ var/playstyle_string = "You are an imp, a mischievous creature from hell. You are the lowest rank on the hellish totem pole \
Though you are not obligated to help, perhaps by aiding a higher ranking devil, you might just get a promotion. However, you are incapable \
of intentionally harming a fellow devil."
diff --git a/code/modules/antagonists/devil/true_devil/_true_devil.dm b/code/modules/antagonists/devil/true_devil/_true_devil.dm
index 72b945600b..4e1175c13e 100644
--- a/code/modules/antagonists/devil/true_devil/_true_devil.dm
+++ b/code/modules/antagonists/devil/true_devil/_true_devil.dm
@@ -67,7 +67,7 @@
//Left hand items
for(var/obj/item/I in held_items)
- if(!(I.flags_1 & ABSTRACT_1))
+ if(!(I.item_flags & ABSTRACT))
msg += "It is holding [I.get_examine_string(user)] in its [get_held_index_name(get_held_index_of_item(I))].\n"
//Braindead
diff --git a/code/modules/antagonists/disease/disease_abilities.dm b/code/modules/antagonists/disease/disease_abilities.dm
index 9a792749a0..07cd3030b1 100644
--- a/code/modules/antagonists/disease/disease_abilities.dm
+++ b/code/modules/antagonists/disease/disease_abilities.dm
@@ -54,7 +54,7 @@ GLOBAL_LIST_INIT(disease_ability_singletons, list(
stage_speed += initial(S.stage_speed)
transmittable += initial(S.transmittable)
threshold_block += "
"
/datum/disease_ability/proc/CanBuy(mob/camera/disease/D)
if(world.time < D.next_adaptation_time)
@@ -130,14 +130,14 @@ GLOBAL_LIST_INIT(disease_ability_singletons, list(
required_total_points = 0
start_with = TRUE
short_desc = "Force the host you are following to cough, spreading your infection to those nearby."
- long_desc = "Force the host you are following to cough with extra force, spreading your infection to those within two meters of your host even if your transmitability is low. Cooldown: 10 seconds"
+ long_desc = "Force the host you are following to cough with extra force, spreading your infection to those within two meters of your host even if your transmissibility is low. Cooldown: 10 seconds"
/datum/action/cooldown/disease_cough
name = "Cough"
icon_icon = 'icons/mob/actions/actions_minor_antag.dmi'
button_icon_state = "cough"
- desc = "Force the host you are following to cough with extra force, spreading your infection to those within two meters of your host even if your transmitability is low. Cooldown: 10 seconds"
+ desc = "Force the host you are following to cough with extra force, spreading your infection to those within two meters of your host even if your transmissibility is low. Cooldown: 10 seconds"
cooldown_time = 100
/datum/action/cooldown/disease_cough/Trigger()
@@ -148,7 +148,7 @@ GLOBAL_LIST_INIT(disease_ability_singletons, list(
if(!L)
return FALSE
if(L.stat != CONSCIOUS)
- to_chat(D, "Your host must be concious to cough.")
+ to_chat(D, "Your host must be conscious to cough.")
return FALSE
to_chat(D, "You force [L.real_name] to cough.")
L.emote("cough")
@@ -170,7 +170,7 @@ GLOBAL_LIST_INIT(disease_ability_singletons, list(
name = "Sneeze"
icon_icon = 'icons/mob/actions/actions_minor_antag.dmi'
button_icon_state = "sneeze"
- desc = "Force the host you are following to sneeze with extra force, spreading your infection to any victims in a 4 meter cone in front of your host even if your transmitability is low. Cooldown: 20 seconds"
+ desc = "Force the host you are following to sneeze with extra force, spreading your infection to any victims in a 4 meter cone in front of your host even if your transmissibility is low. Cooldown: 20 seconds"
cooldown_time = 200
/datum/action/cooldown/disease_sneeze/Trigger()
@@ -181,7 +181,7 @@ GLOBAL_LIST_INIT(disease_ability_singletons, list(
if(!L)
return FALSE
if(L.stat != CONSCIOUS)
- to_chat(D, "Your host must be concious to sneeze.")
+ to_chat(D, "Your host must be conscious to sneeze.")
return FALSE
to_chat(D, "You force [L.real_name] to sneeze.")
L.emote("sneeze")
@@ -243,7 +243,7 @@ GLOBAL_LIST_INIT(disease_ability_singletons, list(
cost = 2
required_total_points = 4
short_desc = "Cause victims to cough intermittently."
- long_desc = "Cause victims to cough intermittently, spreading your infection if your transmitability is high."
+ long_desc = "Cause victims to cough intermittently, spreading your infection if your transmissibility is high."
/datum/disease_ability/symptom/sneeze
name = "Involuntary Sneezing"
@@ -251,7 +251,7 @@ GLOBAL_LIST_INIT(disease_ability_singletons, list(
cost = 2
required_total_points = 4
short_desc = "Cause victims to sneeze intermittently."
- long_desc = "Cause victims to sneeze intermittently, spreading your infection and also increasing transmitability and resistance, at the cost of stealth."
+ long_desc = "Cause victims to sneeze intermittently, spreading your infection and also increasing transmissibility and resistance, at the cost of stealth."
/datum/disease_ability/symptom/beard
//I don't think I need to justify the fact that this is the best symptom
@@ -277,7 +277,7 @@ GLOBAL_LIST_INIT(disease_ability_singletons, list(
cost = 4
required_total_points = 8
short_desc = "Cause victims to choke."
- long_desc = "Cause victims to choke, threatening asphyxiation. Decreases stats, especially transmittability."
+ long_desc = "Cause victims to choke, threatening asphyxiation. Decreases stats, especially transmissibility."
/datum/disease_ability/symptom/confusion
@@ -295,7 +295,7 @@ GLOBAL_LIST_INIT(disease_ability_singletons, list(
cost = 4
required_total_points = 8
short_desc = "Cause victims to become eternally young."
- long_desc = "Cause victims to become eternally young. Provides boosts to all stats except transmittability."
+ long_desc = "Cause victims to become eternally young. Provides boosts to all stats except transmissibility."
/datum/disease_ability/symptom/vomit
@@ -304,7 +304,7 @@ GLOBAL_LIST_INIT(disease_ability_singletons, list(
cost = 4
required_total_points = 8
short_desc = "Cause victims to vomit."
- long_desc = "Cause victims to vomit. Slightly increases transmittability. Vomiting also also causes the victims to lose nutrition and removes some toxin damage."
+ long_desc = "Cause victims to vomit. Slightly increases transmissibility. Vomiting also also causes the victims to lose nutrition and removes some toxin damage."
/datum/disease_ability/symptom/voice_change
@@ -367,7 +367,7 @@ GLOBAL_LIST_INIT(disease_ability_singletons, list(
cost = 4
required_total_points = 8
short_desc = "Cause victims to lose weight."
- long_desc = "Cause victims to lose weight, and make it almost immpossible for them to gain nutrition from food. Reduced nutrition allows your infection to spread more easily from hosts, especially by sneezing."
+ long_desc = "Cause victims to lose weight, and make it almost impossible for them to gain nutrition from food. Reduced nutrition allows your infection to spread more easily from hosts, especially by sneezing."
/datum/disease_ability/symptom/metabolism_heal
diff --git a/code/modules/antagonists/disease/disease_mob.dm b/code/modules/antagonists/disease/disease_mob.dm
index bf035e1f21..6908c5eebf 100644
--- a/code/modules/antagonists/disease/disease_mob.dm
+++ b/code/modules/antagonists/disease/disease_mob.dm
@@ -81,7 +81,7 @@ the new instance inside the host to be updated to the template's stats.
/mob/camera/disease/Login()
..()
if(freemove)
- to_chat(src, "You have [round((freemove_end - world.time)/10)] seconds to select your first host. Click on a human to select your host.")
+ to_chat(src, "You have [DisplayTimeText(freemove_end - world.time)] to select your first host. Click on a human to select your host.")
/mob/camera/disease/Stat()
@@ -285,7 +285,7 @@ the new instance inside the host to be updated to the template's stats.
..()
/mob/camera/disease/proc/adapt_cooldown()
- to_chat(src, "You have altered your genetic structure. You will be unable to adapt again for [adaptation_cooldown/10] seconds.")
+ to_chat(src, "You have altered your genetic structure. You will be unable to adapt again for [DisplayTimeText(adaptation_cooldown)].")
next_adaptation_time = world.time + adaptation_cooldown
addtimer(CALLBACK(src, .proc/notify_adapt_ready), adaptation_cooldown)
@@ -310,7 +310,7 @@ the new instance inside the host to be updated to the template's stats.
Resistance: [DT.totalResistance()] \
Stealth: [DT.totalStealth()] \
Stage Speed: [DT.totalStageSpeed()] \
- Transmittability: [DT.totalTransmittable()]\
+ Transmissibility: [DT.totalTransmittable()]\
Cure: [DT.cure_text]"
dat += "
Adaptations
\
Points: [points] / [total_points]\
diff --git a/code/modules/antagonists/highlander/highlander.dm b/code/modules/antagonists/highlander/highlander.dm
index 4e511d7fac..62da2df87f 100644
--- a/code/modules/antagonists/highlander/highlander.dm
+++ b/code/modules/antagonists/highlander/highlander.dm
@@ -59,7 +59,7 @@
W.access += get_all_centcom_access()
W.assignment = "Highlander"
W.registered_name = H.real_name
- W.flags_1 |= NODROP_1
+ W.item_flags |= NODROP
W.update_label(H.real_name)
H.equip_to_slot_or_del(W, SLOT_WEAR_ID)
diff --git a/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm b/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm
index b3c5ae3b30..df04059f99 100644
--- a/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm
+++ b/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm
@@ -16,7 +16,7 @@ GLOBAL_LIST_EMPTY(jam_on_wardec)
Such a brazen move will attract the attention of powerful benefactors within the Syndicate, who will supply your team with a massive amount of bonus telecrystals. \
Must be used within five minutes, or your benefactors will lose interest."
var/declaring_war = FALSE
- var/uplink_type = /obj/item/radio/uplink/nuclear
+ var/uplink_type = /obj/item/uplink/nuclear
/obj/item/nuclear_challenge/attack_self(mob/living/user)
if(!check_allowed(user))
@@ -88,7 +88,7 @@ GLOBAL_LIST_EMPTY(jam_on_wardec)
return TRUE
/obj/item/nuclear_challenge/clownops
- uplink_type = /obj/item/radio/uplink/clownop
+ uplink_type = /obj/item/uplink/clownop
#undef CHALLENGE_TELECRYSTALS
#undef CHALLENGE_TIME_LIMIT
diff --git a/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm b/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm
index 1beb60f624..df9b35ee8b 100644
--- a/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm
+++ b/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm
@@ -588,7 +588,7 @@ This is here to make the tiles around the station mininuke change when it's arme
CRASH("A fake nuke disk tried to call process(). Who the fuck and how the fuck")
var/turf/newturf = get_turf(src)
if(newturf && lastlocation == newturf)
- if(last_disk_move < world.time - 5000 && prob((world.time - 5000 - last_disk_move)*0.00001))
+ if(last_disk_move < world.time - 5000 && prob((world.time - 5000 - last_disk_move)*0.0001))
var/datum/round_event_control/operative/loneop = locate(/datum/round_event_control/operative) in SSevents.control
if(istype(loneop))
loneop.weight += 1
diff --git a/code/modules/antagonists/nukeop/equipment/pinpointer.dm b/code/modules/antagonists/nukeop/equipment/pinpointer.dm
index 1cdc356559..d8dc709975 100644
--- a/code/modules/antagonists/nukeop/equipment/pinpointer.dm
+++ b/code/modules/antagonists/nukeop/equipment/pinpointer.dm
@@ -52,7 +52,7 @@
/obj/item/pinpointer/nuke/proc/switch_mode_to(new_mode)
if(isliving(loc))
var/mob/living/L = loc
- to_chat(L, "Your [name] beeps as it reconfigures its tracking algorithms.")
+ to_chat(L, "Your [name] beeps as it reconfigures it's tracking algorithms.")
playsound(L, 'sound/machines/triple_beep.ogg', 50, 1)
mode = new_mode
scan_for_target()
@@ -65,7 +65,8 @@
/obj/item/pinpointer/syndicate_cyborg // Cyborg pinpointers just look for a random operative.
name = "cyborg syndicate pinpointer"
desc = "An integrated tracking device, jury-rigged to search for living Syndicate operatives."
- flags_1 = NODROP_1
+ item_flags = NODROP
+ flags_1 = NONE
/obj/item/pinpointer/syndicate_cyborg/scan_for_target()
target = null
@@ -79,4 +80,3 @@
if(closest_operative)
target = closest_operative
..()
-
diff --git a/code/modules/antagonists/nukeop/nukeop.dm b/code/modules/antagonists/nukeop/nukeop.dm
index 3df9d1d9ca..db25adcda4 100644
--- a/code/modules/antagonists/nukeop/nukeop.dm
+++ b/code/modules/antagonists/nukeop/nukeop.dm
@@ -278,7 +278,7 @@
return NUKE_RESULT_WRONG_STATION
else if (!disk_rescued && !station_was_nuked && nuke_off_station && syndies_didnt_escape)
return NUKE_RESULT_WRONG_STATION_DEAD
- else if ((disk_rescued || evacuation) && operatives_dead())
+ else if ((disk_rescued && evacuation) && operatives_dead())
return NUKE_RESULT_CREW_WIN_SYNDIES_DEAD
else if (disk_rescued)
return NUKE_RESULT_CREW_WIN
diff --git a/code/modules/antagonists/official/official.dm b/code/modules/antagonists/official/official.dm
index 4b867585ae..23bf472422 100644
--- a/code/modules/antagonists/official/official.dm
+++ b/code/modules/antagonists/official/official.dm
@@ -31,7 +31,7 @@
else if (!mission)
var/datum/objective/missionobj = new
missionobj.owner = owner
- missionobj.explanation_text = "Conduct a routine preformance review of [station_name()] and its Captain."
+ missionobj.explanation_text = "Conduct a routine performance review of [station_name()] and its Captain."
missionobj.completed = 1
mission = missionobj
objectives |= mission
diff --git a/code/modules/antagonists/traitor/IAA/internal_affairs.dm b/code/modules/antagonists/traitor/IAA/internal_affairs.dm
index e17d1a23b4..5213c679ca 100644
--- a/code/modules/antagonists/traitor/IAA/internal_affairs.dm
+++ b/code/modules/antagonists/traitor/IAA/internal_affairs.dm
@@ -44,6 +44,7 @@
tick_interval = PINPOINTER_PING_TIME
alert_type = /obj/screen/alert/status_effect/agent_pinpointer
var/minimum_range = PINPOINTER_MINIMUM_RANGE
+ var/range_fuzz_factor = PINPOINTER_EXTRA_RANDOM_RANGE
var/mob/scan_target = null
/obj/screen/alert/status_effect/agent_pinpointer
@@ -61,7 +62,7 @@
if(here.z != there.z)
linked_alert.icon_state = "pinonnull"
return
- if(get_dist_euclidian(here,there)<=minimum_range + rand(0, PINPOINTER_EXTRA_RANDOM_RANGE))
+ if(get_dist_euclidian(here,there)<=minimum_range + rand(0, range_fuzz_factor))
linked_alert.icon_state = "pinondirect"
else
linked_alert.setDir(get_dir(here, there))
@@ -228,14 +229,14 @@
/datum/antagonist/traitor/internal_affairs/forge_traitor_objectives()
forge_iaa_objectives()
-
+
var/objtype = traitor_kind == TRAITOR_HUMAN ? /datum/objective/escape : /datum/objective/survive
var/datum/objective/escape_objective = new objtype
escape_objective.owner = owner
add_objective(escape_objective)
/datum/antagonist/traitor/internal_affairs/proc/greet_iaa()
- var/crime = pick("distribution of contraband" , "unauthorized erotic action on duty", "embezzlement", "piloting under the influence", "dereliction of duty", "syndicate collaboration", "mutiny", "multiple homicides", "corporate espionage", "recieving bribes", "malpractice", "worship of prohbited life forms", "possession of profane texts", "murder", "arson", "insulting their manager", "grand theft", "conspiracy", "attempting to unionize", "vandalism", "gross incompetence")
+ var/crime = pick("distribution of contraband" , "unauthorized erotic action on duty", "embezzlement", "piloting under the influence", "dereliction of duty", "syndicate collaboration", "mutiny", "multiple homicides", "corporate espionage", "receiving bribes", "malpractice", "worship of prohibited life forms", "possession of profane texts", "murder", "arson", "insulting their manager", "grand theft", "conspiracy", "attempting to unionize", "vandalism", "gross incompetence")
to_chat(owner.current, "You are the [special_role].")
if(syndicate)
diff --git a/code/modules/antagonists/traitor/equipment/Malf_Modules.dm b/code/modules/antagonists/traitor/equipment/Malf_Modules.dm
index f574412b4c..ff4f7276bc 100644
--- a/code/modules/antagonists/traitor/equipment/Malf_Modules.dm
+++ b/code/modules/antagonists/traitor/equipment/Malf_Modules.dm
@@ -532,7 +532,7 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list(
if(!is_station_level(AA.z))
continue
AA.obj_flags |= EMAGGED
- to_chat(owner, "All air alarm safeties on the station have been overriden. Air alarms may now use the Flood environmental mode.")
+ to_chat(owner, "All air alarm safeties on the station have been overridden. Air alarms may now use the Flood environmental mode.")
owner.playsound_local(owner, 'sound/machines/terminal_off.ogg', 50, 0)
@@ -625,7 +625,7 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list(
to_chat(ranged_ability_user, "You can only animate machines!")
return
if(!target.can_be_overridden() || is_type_in_typecache(target, GLOB.blacklisted_malf_machines))
- to_chat(ranged_ability_user, "That machine can't be overriden!")
+ to_chat(ranged_ability_user, "That machine can't be overridden!")
return
ranged_ability_user.playsound_local(ranged_ability_user, 'sound/misc/interference.ogg', 50, 0)
attached_action.adjust_uses(-1)
@@ -806,7 +806,7 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list(
desc = "[initial(desc)] There are [uses] reactivations remaining."
-//Upgrade Camera Network: EMP-proofs all cameras, in addition to giving them x-ray vision.
+//Upgrade Camera Network: EMP-proofs all cameras, in addition to giving them X-ray vision.
/datum/AI_Module/large/upgrade_cameras
module_name = "Upgrade Camera Network"
mod_pick_name = "upgradecam"
diff --git a/code/modules/antagonists/valentines/valentine.dm b/code/modules/antagonists/valentines/valentine.dm
index 7e1effbaff..31e69b32c2 100644
--- a/code/modules/antagonists/valentines/valentine.dm
+++ b/code/modules/antagonists/valentines/valentine.dm
@@ -16,8 +16,17 @@
/datum/antagonist/valentine/on_gain()
forge_objectives()
+ if(isliving(owner))
+ var/mob/living/L = owner
+ L.apply_status_effect(STATUS_EFFECT_INLOVE, date)
. = ..()
+/datum/antagonist/valentine/on_removal()
+ . = ..()
+ if(isliving(owner))
+ var/mob/living/L = owner
+ L.remove_status_effect(STATUS_EFFECT_INLOVE)
+
/datum/antagonist/valentine/greet()
to_chat(owner, "You're on a date with [date.name]! Protect [date.p_them()] at all costs. This takes priority over all other loyalties.")
diff --git a/code/modules/antagonists/wizard/equipment/artefact.dm b/code/modules/antagonists/wizard/equipment/artefact.dm
index 5afd1ca3c3..415d1318cb 100644
--- a/code/modules/antagonists/wizard/equipment/artefact.dm
+++ b/code/modules/antagonists/wizard/equipment/artefact.dm
@@ -109,6 +109,10 @@
move()
eat()
return
+
+/obj/singularity/wizard/mapped/admin_investigate_setup()
+ return
+
/////////////////////////////////////////Scrying///////////////////
/obj/item/scrying
@@ -205,7 +209,7 @@
for(var/obj/item/I in H)
H.dropItemToGround(I)
- var/hat = pick(/obj/item/clothing/head/helmet/roman, /obj/item/clothing/head/helmet/roman/legionaire)
+ var/hat = pick(/obj/item/clothing/head/helmet/roman, /obj/item/clothing/head/helmet/roman/legionnaire)
H.equip_to_slot_or_del(new hat(H), SLOT_HEAD)
H.equip_to_slot_or_del(new /obj/item/clothing/under/roman(H), SLOT_W_UNIFORM)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/roman(H), SLOT_SHOES)
diff --git a/code/modules/antagonists/wizard/equipment/soulstone.dm b/code/modules/antagonists/wizard/equipment/soulstone.dm
index 9a5f41baee..50bc4f54a4 100644
--- a/code/modules/antagonists/wizard/equipment/soulstone.dm
+++ b/code/modules/antagonists/wizard/equipment/soulstone.dm
@@ -9,7 +9,7 @@
desc = "A fragment of the legendary treasure known simply as the 'Soul Stone'. The shard still flickers with a fraction of the full artefact's power."
w_class = WEIGHT_CLASS_TINY
slot_flags = ITEM_SLOT_BELT
- var/usability = 0
+ var/usability = FALSE
var/old_shard = FALSE
var/spent = FALSE
@@ -23,7 +23,7 @@
whatever spark it once held long extinguished."
/obj/item/soulstone/anybody
- usability = 1
+ usability = TRUE
/obj/item/soulstone/anybody/chaplain
name = "mysterious old shard"
@@ -63,8 +63,9 @@
if(!ishuman(M))//If target is not a human.
return ..()
if(iscultist(M))
- to_chat(user, "\"Come now, do not capture your bretheren's soul.\"")
- return
+ if(iscultist(user))
+ to_chat(user, "\"Come now, do not capture your bretheren's soul.\"")
+ return
add_logs(user, M, "captured [M.name]'s soul", src)
transfer_soul("VICTIM", M, user)
@@ -82,7 +83,7 @@
/obj/item/soulstone/proc/release_shades(mob/user)
for(var/mob/living/simple_animal/shade/A in src)
A.status_flags &= ~GODMODE
- A.canmove = 1
+ A.canmove = TRUE
A.forceMove(get_turf(user))
A.cancel_camera()
icon_state = "soulstone"
@@ -128,15 +129,15 @@
switch(choice)
if("FORCE")
if(!iscarbon(target)) //TODO: Add sacrifice stoning for non-organics, just because you have no body doesnt mean you dont have a soul
- return 0
+ return FALSE
if(contents.len)
- return 0
+ return FALSE
var/mob/living/carbon/T = target
if(T.client != null)
for(var/obj/item/W in T)
T.dropItemToGround(W)
init_shade(T, user)
- return 1
+ return TRUE
else
to_chat(user, "Capture failed!: The soul has already fled its mortal frame. You attempt to bring it back...")
return getCultGhost(T,user)
@@ -149,7 +150,7 @@
to_chat(user, "\"This soul is mine.SACRIFICE THEM!\"")
else
to_chat(user, "The soulstone seems to reject this soul.")
- return 0
+ return FALSE
if(contents.len)
to_chat(user, "Capture failed!: The soulstone is full! Free an existing soul to make room.")
else
@@ -172,7 +173,7 @@
else
T.forceMove(src) //put shade in stone
T.status_flags |= GODMODE
- T.canmove = 0
+ T.canmove = FALSE
T.health = T.maxHealth
icon_state = "soulstone2"
name = "soulstone: Shade of [T.real_name]"
@@ -239,7 +240,7 @@
T.dust_animation()
var/mob/living/simple_animal/shade/S = new /mob/living/simple_animal/shade(src)
S.status_flags |= GODMODE //So they won't die inside the stone somehow
- S.canmove = 0//Can't move out of the soul stone
+ S.canmove = FALSE//Can't move out of the soul stone
S.name = "Shade of [T.real_name]"
S.real_name = "Shade of [T.real_name]"
S.key = T.key
@@ -272,15 +273,15 @@
if(consenting_candidates.len)
chosen_ghost = pick(consenting_candidates)
if(!T)
- return 0
+ return FALSE
if(!chosen_ghost)
to_chat(U, "There were no spirits willing to become a shade.")
- return 0
+ return FALSE
if(contents.len) //If they used the soulstone on someone else in the meantime
- return 0
+ return FALSE
T.ckey = chosen_ghost.ckey
for(var/obj/item/W in T)
T.dropItemToGround(W)
init_shade(T, U)
qdel(T)
- return 1
+ return TRUE
diff --git a/code/modules/antagonists/wizard/equipment/spellbook.dm b/code/modules/antagonists/wizard/equipment/spellbook.dm
index 3f94c65437..afefaa68c1 100644
--- a/code/modules/antagonists/wizard/equipment/spellbook.dm
+++ b/code/modules/antagonists/wizard/equipment/spellbook.dm
@@ -318,7 +318,7 @@
/datum/spellbook_entry/item/scryingorb
name = "Scrying Orb"
- desc = "An incandescent orb of crackling energy, using it will allow you to ghost while alive, allowing you to spy upon the station with ease. In addition, buying it will permanently grant you x-ray vision."
+ desc = "An incandescent orb of crackling energy, using it will allow you to ghost while alive, allowing you to spy upon the station with ease. In addition, buying it will permanently grant you X-ray vision."
item_path = /obj/item/scrying
category = "Defensive"
@@ -409,7 +409,7 @@
/datum/spellbook_entry/item/battlemage
name = "Battlemage Armour"
- desc = "An ensorcelled suit of armour, protected by a powerful shield. The shield can completly negate sixteen attacks before being permanently depleted."
+ desc = "An ensorceled suit of armour, protected by a powerful shield. The shield can completely negate sixteen attacks before being permanently depleted."
item_path = /obj/item/clothing/suit/space/hardsuit/shielded/wizard
limit = 1
category = "Defensive"
@@ -452,7 +452,7 @@
/datum/spellbook_entry/summon/ghosts
name = "Summon Ghosts"
- desc = "Spook the crew out by making them see dead people. Be warned, ghosts are capricious and occasionally vindicative, and some will use their incredibly minor abilties to frustrate you."
+ desc = "Spook the crew out by making them see dead people. Be warned, ghosts are capricious and occasionally vindicative, and some will use their incredibly minor abilities to frustrate you."
cost = 0
/datum/spellbook_entry/summon/ghosts/IsAvailible()
@@ -589,22 +589,22 @@
switch(category)
if("Offensive")
dat += "Spells and items geared towards debilitating and destroying.
"
- dat += "Items are not bound to you and can be stolen. Additionaly they cannot typically be returned once purchased. "
+ dat += "Items are not bound to you and can be stolen. Additionally they cannot typically be returned once purchased. "
dat += "For spells: the number after the spell name is the cooldown time. "
dat += "You can reduce this number by spending more points on the spell. "
if("Defensive")
- dat += "Spells and items geared towards improving your survivabilty or reducing foes' ability to attack.
"
- dat += "Items are not bound to you and can be stolen. Additionaly they cannot typically be returned once purchased. "
+ dat += "Spells and items geared towards improving your survivability or reducing foes' ability to attack.
"
+ dat += "Items are not bound to you and can be stolen. Additionally they cannot typically be returned once purchased. "
dat += "For spells: the number after the spell name is the cooldown time. "
dat += "You can reduce this number by spending more points on the spell. "
if("Mobility")
dat += "Spells and items geared towards improving your ability to move. It is a good idea to take at least one.
"
- dat += "Items are not bound to you and can be stolen. Additionaly they cannot typically be returned once purchased. "
+ dat += "Items are not bound to you and can be stolen. Additionally they cannot typically be returned once purchased. "
dat += "For spells: the number after the spell name is the cooldown time. "
dat += "You can reduce this number by spending more points on the spell. "
if("Assistance")
- dat += "Spells and items geared towards bringing in outside forces to aid you or improving upon your other items and abilties.
"
- dat += "Items are not bound to you and can be stolen. Additionaly they cannot typically be returned once purchased. "
+ dat += "Spells and items geared towards bringing in outside forces to aid you or improving upon your other items and abilities.
"
+ dat += "Items are not bound to you and can be stolen. Additionally they cannot typically be returned once purchased. "
dat += "For spells: the number after the spell name is the cooldown time. "
dat += "You can reduce this number by spending more points on the spell. "
if("Challenges")
diff --git a/code/modules/assembly/flash.dm b/code/modules/assembly/flash.dm
index ececaf683f..b5a7c5d3c5 100644
--- a/code/modules/assembly/flash.dm
+++ b/code/modules/assembly/flash.dm
@@ -161,7 +161,7 @@
AOE_flash()
burn_out()
-/obj/item/assembly/flash/activate()//AOE flash on signal recieved
+/obj/item/assembly/flash/activate()//AOE flash on signal received
if(!..())
return
AOE_flash()
@@ -210,7 +210,7 @@
/obj/item/assembly/flash/armimplant
name = "photon projector"
- desc = "A high-powered photon projector implant normally used for lighting purposes, but also doubles as a flashbulb weapon. Self-repair protocals fix the flashbulb if it ever burns out."
+ desc = "A high-powered photon projector implant normally used for lighting purposes, but also doubles as a flashbulb weapon. Self-repair protocols fix the flashbulb if it ever burns out."
var/flashcd = 20
var/overheat = 0
var/obj/item/organ/cyberimp/arm/flash/I = null
diff --git a/code/modules/assembly/igniter.dm b/code/modules/assembly/igniter.dm
index 2aae7db5e2..1f62bfaaef 100644
--- a/code/modules/assembly/igniter.dm
+++ b/code/modules/assembly/igniter.dm
@@ -26,7 +26,7 @@
return FALSE//Cooldown check
var/turf/location = get_turf(loc)
if(location)
- location.hotspot_expose(1000,1000)
+ location.hotspot_expose(700,10)
sparks.start()
return TRUE
diff --git a/code/modules/assembly/infrared.dm b/code/modules/assembly/infrared.dm
index fe6e94605b..94359f0a10 100644
--- a/code/modules/assembly/infrared.dm
+++ b/code/modules/assembly/infrared.dm
@@ -171,6 +171,10 @@
return
if(offender == src || istype(offender,/obj/effect/beam/i_beam))
return
+ if (offender && isitem(offender))
+ var/obj/item/I = offender
+ if (I.item_flags & ABSTRACT)
+ return
return refreshBeam()
/obj/item/assembly/infra/ui_interact(mob/user)//TODO: change this this to the wire control panel
@@ -219,10 +223,13 @@
var/obj/item/assembly/infra/master
anchored = TRUE
density = FALSE
- flags_1 = ABSTRACT_1
pass_flags = PASSTABLE|PASSGLASS|PASSGRILLE|LETPASSTHROW
/obj/effect/beam/i_beam/Crossed(atom/movable/AM as mob|obj)
- if(istype(AM, /obj/effect/beam) || (AM.flags_1 & ABSTRACT_1))
+ if(istype(AM, /obj/effect/beam))
return
+ if (isitem(AM))
+ var/obj/item/I = AM
+ if (I.item_flags & ABSTRACT)
+ return
master.trigger_beam(AM, get_turf(src))
diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm
index 0a1394bf04..8959029b9b 100644
--- a/code/modules/assembly/signaler.dm
+++ b/code/modules/assembly/signaler.dm
@@ -24,7 +24,7 @@
return MANUAL_SUICIDE
/obj/item/assembly/signaler/proc/manual_suicide(mob/living/carbon/user)
- user.visible_message("[user]'s \the [src] recieves a signal, killing [user.p_them()] instantly!")
+ user.visible_message("[user]'s \the [src] receives a signal, killing [user.p_them()] instantly!")
user.adjustOxyLoss(200)//it sends an electrical pulse to their heart, killing them. or something.
user.death(0)
@@ -158,21 +158,21 @@ Code:
// Embedded signaller used in grenade construction.
// It's necessary because the signaler doens't have an off state.
// Generated during grenade construction. -Sayu
-/obj/item/assembly/signaler/reciever
+/obj/item/assembly/signaler/receiver
var/on = FALSE
-/obj/item/assembly/signaler/reciever/proc/toggle_safety()
+/obj/item/assembly/signaler/receiver/proc/toggle_safety()
on = !on
-/obj/item/assembly/signaler/reciever/activate()
+/obj/item/assembly/signaler/receiver/activate()
toggle_safety()
return TRUE
-/obj/item/assembly/signaler/reciever/examine(mob/user)
+/obj/item/assembly/signaler/receiver/examine(mob/user)
..()
to_chat(user, "The radio receiver is [on?"on":"off"].")
-/obj/item/assembly/signaler/reciever/receive_signal(datum/signal/signal)
+/obj/item/assembly/signaler/receiver/receive_signal(datum/signal/signal)
if(!on)
return
return ..(signal)
diff --git a/code/modules/atmospherics/environmental/LINDA_fire.dm b/code/modules/atmospherics/environmental/LINDA_fire.dm
index a3c9c68d55..ede69a6b22 100644
--- a/code/modules/atmospherics/environmental/LINDA_fire.dm
+++ b/code/modules/atmospherics/environmental/LINDA_fire.dm
@@ -42,6 +42,11 @@
active_hotspot.just_spawned = (current_cycle < SSair.times_fired)
//remove just_spawned protection if no longer processing this cell
SSair.add_to_active(src, 0)
+ else
+ var/datum/gas_mixture/heating = air_contents.remove_ratio(exposed_volume/air_contents.volume)
+ heating.temperature = exposed_temperature
+ heating.react()
+ assume_air(heating)
return igniting
//This is the icon for fire on turfs, also helps for nurturing small fires until they are full tile
@@ -231,7 +236,7 @@
else
chance_of_deletion = 100
if(prob(chance_of_deletion))
- T.ScrapeAway()
+ T.Melt()
else
T.to_be_destroyed = FALSE
T.max_fire_temperature_sustained = 0
@@ -256,4 +261,4 @@
. = ..()
if(!isliving(loc))
return INITIALIZE_HINT_QDEL
-#undef INSUFFICIENT
\ No newline at end of file
+#undef INSUFFICIENT
diff --git a/code/modules/atmospherics/environmental/LINDA_turf_tile.dm b/code/modules/atmospherics/environmental/LINDA_turf_tile.dm
index db489d04fe..104879b168 100644
--- a/code/modules/atmospherics/environmental/LINDA_turf_tile.dm
+++ b/code/modules/atmospherics/environmental/LINDA_turf_tile.dm
@@ -100,28 +100,38 @@
if (atmos_overlay_types)
for(var/overlay in atmos_overlay_types-new_overlay_types) //doesn't remove overlays that would only be added
- vars["vis_contents"] -= overlay
+ vis_contents -= overlay
- if (new_overlay_types.len)
+ if (length(new_overlay_types))
if (atmos_overlay_types)
- vars["vis_contents"] += new_overlay_types - atmos_overlay_types //don't add overlays that already exist
+ vis_contents += new_overlay_types - atmos_overlay_types //don't add overlays that already exist
else
- vars["vis_contents"] += new_overlay_types
+ vis_contents += new_overlay_types
UNSETEMPTY(new_overlay_types)
src.atmos_overlay_types = new_overlay_types
/turf/open/proc/tile_graphic()
- . = new /list
+ var/static/list/nonoverlaying_gases = typecache_of_gases_with_no_overlays()
if(air)
+ . = new /list
var/list/gases = air.gases
for(var/id in gases)
+ if (nonoverlaying_gases[id])
+ continue
var/gas = gases[id]
var/gas_meta = gas[GAS_META]
var/gas_overlay = gas_meta[META_GAS_OVERLAY]
if(gas_overlay && gas[MOLES] > gas_meta[META_GAS_MOLES_VISIBLE])
. += gas_overlay
+/proc/typecache_of_gases_with_no_overlays()
+ . = list()
+ for (var/gastype in subtypesof(/datum/gas))
+ var/datum/gas/gasvar = gastype
+ if (!initial(gasvar.gas_overlay))
+ .[gastype] = TRUE
+
/////////////////////////////SIMULATION///////////////////////////////////
#define LAST_SHARE_CHECK \
diff --git a/code/modules/atmospherics/gasmixtures/gas_mixture.dm b/code/modules/atmospherics/gasmixtures/gas_mixture.dm
index 6e78256c87..f2bb51159c 100644
--- a/code/modules/atmospherics/gasmixtures/gas_mixture.dm
+++ b/code/modules/atmospherics/gasmixtures/gas_mixture.dm
@@ -285,8 +285,6 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache())
return 1
/datum/gas_mixture/share(datum/gas_mixture/sharer, atmos_adjacent_turfs = 4)
- if(!sharer)
- return 0
var/list/cached_gases = gases
var/list/sharer_gases = sharer.gases
@@ -322,7 +320,7 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache())
if(delta > 0)
heat_capacity_self_to_sharer += gas_heat_capacity
else
- heat_capacity_sharer_to_self -= gas_heat_capacity //subtract here instead of adding the absolute value because we know that delta is negative. saves a proc call.
+ heat_capacity_sharer_to_self -= gas_heat_capacity //subtract here instead of adding the absolute value because we know that delta is negative.
gas[MOLES] -= delta
sharergas[MOLES] += delta
@@ -348,8 +346,7 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache())
if(abs(new_sharer_heat_capacity/old_sharer_heat_capacity - 1) < 0.1) // <10% change in sharer heat capacity
temperature_share(sharer, OPEN_HEAT_TRANSFER_COEFFICIENT)
- var/list/unique_gases = cached_gases ^ sharer_gases
- if(unique_gases.len) //if all gases were present in both mixtures, we know that no gases are 0
+ if(length(cached_gases ^ sharer_gases)) //if all gases were present in both mixtures, we know that no gases are 0
garbage_collect(cached_gases - sharer_gases) //any gases the sharer had, we are guaranteed to have. gases that it didn't have we are not.
sharer.garbage_collect(sharer_gases - cached_gases) //the reverse is equally true
sharer.after_share(src, atmos_adjacent_turfs)
@@ -358,8 +355,7 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache())
TOTAL_MOLES(cached_gases,our_moles)
var/their_moles
TOTAL_MOLES(sharer_gases,their_moles)
- var/delta_pressure = temperature_archived*(our_moles + moved_moles) - sharer.temperature_archived*(their_moles - moved_moles)
- return delta_pressure * R_IDEAL_GAS_EQUATION / volume
+ return (temperature_archived*(our_moles + moved_moles) - sharer.temperature_archived*(their_moles - moved_moles)) * R_IDEAL_GAS_EQUATION / volume
/datum/gas_mixture/after_share(datum/gas_mixture/sharer, atmos_adjacent_turfs = 4)
return
diff --git a/code/modules/atmospherics/gasmixtures/reactions.dm b/code/modules/atmospherics/gasmixtures/reactions.dm
index 5bd8c548f7..67836746fa 100644
--- a/code/modules/atmospherics/gasmixtures/reactions.dm
+++ b/code/modules/atmospherics/gasmixtures/reactions.dm
@@ -88,7 +88,7 @@
/datum/gas_reaction/nobliumsupression
priority = INFINITY
- name = "Hyper-Noblium Reaction Supression"
+ name = "Hyper-Noblium Reaction Suppression"
id = "nobstop"
/datum/gas_reaction/nobliumsupression/init_reqs()
@@ -402,13 +402,13 @@
var/pressure = air.return_pressure()
var/old_heat_capacity = air.heat_capacity()
- var/reaction_efficency = min(1/((pressure/(0.1*ONE_ATMOSPHERE))*(max(cached_gases[/datum/gas/plasma][MOLES]/cached_gases[/datum/gas/tritium][MOLES],1))),cached_gases[/datum/gas/tritium][MOLES],cached_gases[/datum/gas/plasma][MOLES]/2)
+ var/reaction_efficency = min(1/((pressure/(0.1*ONE_ATMOSPHERE))*(max(cached_gases[/datum/gas/plasma][MOLES]/cached_gases[/datum/gas/nitrous_oxide][MOLES],1))),cached_gases[/datum/gas/nitrous_oxide][MOLES],cached_gases[/datum/gas/plasma][MOLES]/2)
var/energy_released = 2*reaction_efficency*FIRE_CARBON_ENERGY_RELEASED
- if ((cached_gases[/datum/gas/tritium][MOLES] - reaction_efficency < 0 )|| (cached_gases[/datum/gas/plasma][MOLES] - (2*reaction_efficency) < 0)) //Shouldn't produce gas from nothing.
+ if ((cached_gases[/datum/gas/nitrous_oxide][MOLES] - reaction_efficency < 0 )|| (cached_gases[/datum/gas/plasma][MOLES] - (2*reaction_efficency) < 0)) //Shouldn't produce gas from nothing.
return NO_REACTION
ASSERT_GAS(/datum/gas/bz,air)
cached_gases[/datum/gas/bz][MOLES] += reaction_efficency
- cached_gases[/datum/gas/tritium][MOLES] -= reaction_efficency
+ cached_gases[/datum/gas/nitrous_oxide][MOLES] -= reaction_efficency
cached_gases[/datum/gas/plasma][MOLES] -= 2*reaction_efficency
@@ -422,6 +422,7 @@
priority = 5
name = "Stimulum formation"
id = "stimformation"
+
/datum/gas_reaction/stimformation/init_reqs()
min_requirements = list(
/datum/gas/tritium = 30,
diff --git a/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm b/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm
index cf1d0e1866..dd593c53bc 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm
@@ -1,12 +1,12 @@
//node2, air2, network2 correspond to input
//node1, air1, network1 correspond to output
-#define CIRCULATOR_COLD 0
-#define CIRCULATOR_HOT 1
+#define CIRCULATOR_HOT 0
+#define CIRCULATOR_COLD 1
/obj/machinery/atmospherics/components/binary/circulator
name = "circulator/heat exchanger"
desc = "A gas circulator pump and heat exchanger."
- icon_state = "circ-off"
+ icon_state = "circ-off-0"
var/active = FALSE
@@ -185,4 +185,4 @@
flipped = !flipped
to_chat(usr, "You flip [src].")
- update_icon()
\ No newline at end of file
+ update_icon()
diff --git a/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm
index a737b3c688..879668e4d7 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm
@@ -227,7 +227,7 @@ Acts like a normal vent, but has an input AND output.
pressure_checks &= ~1
pump_direction = 0
- if("stabalize" in signal.data)
+ if("stabilize" in signal.data)
pressure_checks |= 1
pump_direction = 1
diff --git a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm
index 4fb1de3527..e7df188f70 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm
@@ -27,7 +27,7 @@ Thus, the two variables affect pump operation are set in New():
construction_type = /obj/item/pipe/directional
pipe_state = "pump"
-
+
/obj/machinery/atmospherics/components/binary/pump/layer1
piping_layer = PIPING_LAYER_MIN
pixel_x = -PIPING_LAYER_P_X
@@ -41,7 +41,7 @@ Thus, the two variables affect pump operation are set in New():
/obj/machinery/atmospherics/components/binary/pump/on
on = TRUE
icon_state = "pump_on_map"
-
+
/obj/machinery/atmospherics/components/binary/pump/on/layer1
piping_layer = PIPING_LAYER_MIN
pixel_x = -PIPING_LAYER_P_X
@@ -51,7 +51,7 @@ Thus, the two variables affect pump operation are set in New():
piping_layer = PIPING_LAYER_MAX
pixel_x = PIPING_LAYER_P_X
pixel_y = PIPING_LAYER_P_Y
-
+
/obj/machinery/atmospherics/components/binary/pump/Destroy()
SSradio.remove_object(src,frequency)
if(radio_connection)
@@ -132,8 +132,8 @@ Thus, the two variables affect pump operation are set in New():
switch(action)
if("power")
on = !on
- investigate_log("Pump, [src.name], was turned [on ? "on" : "off"] by [key_name(usr)] at [x], [y], [z], [A]", INVESTIGATE_ATMOS)
message_admins("Pump, [src.name], turned [on ? "on" : "off"] by [ADMIN_LOOKUPFLW(usr)] at [ADMIN_COORDJMP(T)], [A]")
+ investigate_log("was turned [on ? "on" : "off"] by [key_name(usr)]", INVESTIGATE_ATMOS)
. = TRUE
if("pressure")
var/pressure = params["pressure"]
diff --git a/code/modules/atmospherics/machinery/components/binary_devices/valve.dm b/code/modules/atmospherics/machinery/components/binary_devices/valve.dm
index fb6539828e..f22ac62106 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/valve.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/valve.dm
@@ -13,7 +13,6 @@ It's like a regular ol' straight pipe, but you can turn it on and off.
var/frequency = 0
var/id = null
- var/open = FALSE
var/valve_type = "m" //lets us have a nice, clean, OOP update_icon_nopipes()
construction_type = /obj/item/pipe/binary
diff --git a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm
index 5623a14dbe..a3ecda947a 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm
@@ -79,7 +79,7 @@ Thus, the two variables affect pump operation are set in New():
if((input_starting_pressure < 0.01) || (output_starting_pressure > 9000))
return
- var/transfer_ratio = min(1, transfer_rate/air1.volume)
+ var/transfer_ratio = transfer_rate/air1.volume
var/datum/gas_mixture/removed = air1.remove_ratio(transfer_ratio)
diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm
index 861821349c..ced4855b1a 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm
@@ -341,7 +341,7 @@
pressure_checks &= ~EXT_BOUND
pump_direction = SIPHONING
- if("stabalize" in signal.data)
+ if("stabilize" in signal.data)
pressure_checks |= EXT_BOUND
pump_direction = RELEASING
@@ -399,7 +399,7 @@
user.visible_message("[user] welds the vent shut.", "You weld the vent shut.", "You hear welding.")
welded = TRUE
else
- user.visible_message("[user] unwelds the vent.", "You unweld the vent.", "You hear welding.")
+ user.visible_message("[user] unwelded the vent.", "You unweld the vent.", "You hear welding.")
welded = FALSE
update_icon()
pipe_vision_img = image(src, loc, layer = ABOVE_HUD_LAYER, dir = dir)
diff --git a/code/modules/atmospherics/machinery/datum_pipeline.dm b/code/modules/atmospherics/machinery/datum_pipeline.dm
index bc034ec506..cfaef38f6c 100644
--- a/code/modules/atmospherics/machinery/datum_pipeline.dm
+++ b/code/modules/atmospherics/machinery/datum_pipeline.dm
@@ -60,7 +60,7 @@
warning("build_pipeline(): [item.type] added to a pipenet while still having one. (pipes leading to the same spot stacking in one turf) Nearby: ([item.x], [item.y], [item.z])")
pipenetwarnings -= 1
if(pipenetwarnings == 0)
- warning("build_pipeline(): further messages about pipenets will be supressed")
+ warning("build_pipeline(): further messages about pipenets will be suppressed")
members += item
possible_expansions += item
diff --git a/code/modules/awaymissions/capture_the_flag.dm b/code/modules/awaymissions/capture_the_flag.dm
index c65fc0960e..56f5d63b0c 100644
--- a/code/modules/awaymissions/capture_the_flag.dm
+++ b/code/modules/awaymissions/capture_the_flag.dm
@@ -494,14 +494,14 @@
W.registered_name = H.real_name
W.update_label(W.registered_name, W.assignment)
- // The shielded hardsuit is already NODROP_1
+ // The shielded hardsuit is already NODROP
no_drops += H.get_item_by_slot(SLOT_GLOVES)
no_drops += H.get_item_by_slot(SLOT_SHOES)
no_drops += H.get_item_by_slot(SLOT_W_UNIFORM)
no_drops += H.get_item_by_slot(SLOT_EARS)
for(var/i in no_drops)
var/obj/item/I = i
- I.flags_1 |= NODROP_1
+ I.item_flags |= NODROP
/datum/outfit/ctf/instagib
r_hand = /obj/item/gun/energy/laser/instakill
diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm
index 92704833ef..0ee182d9f8 100644
--- a/code/modules/awaymissions/corpse.dm
+++ b/code/modules/awaymissions/corpse.dm
@@ -37,6 +37,8 @@
if(jobban_isbanned(user, banType))
to_chat(user, "You are jobanned!")
return
+ if(QDELETED(src) || QDELETED(user))
+ return
var/ghost_role = alert("Become [mob_name]? (Warning, You can no longer be cloned!)",,"Yes","No")
if(ghost_role == "No" || !loc)
return
diff --git a/code/modules/awaymissions/mission_code/Academy.dm b/code/modules/awaymissions/mission_code/Academy.dm
index b233235d81..57d8420fa8 100644
--- a/code/modules/awaymissions/mission_code/Academy.dm
+++ b/code/modules/awaymissions/mission_code/Academy.dm
@@ -58,7 +58,7 @@
/obj/item/paper/fluff/awaymissions/academy/grade/failure
name = "Pyromancy Evaluation"
- info = "Current Grade: F. Educator's Notes: No improvement shown despite multiple private lessons. Suggest additional tutilage."
+ info = "Current Grade: F. Educator's Notes: No improvement shown despite multiple private lessons. Suggest additional tutelage."
/obj/singularity/academy
diff --git a/code/modules/awaymissions/mission_code/caves.dm b/code/modules/awaymissions/mission_code/caves.dm
index fd2f8f18af..fd2735678d 100644
--- a/code/modules/awaymissions/mission_code/caves.dm
+++ b/code/modules/awaymissions/mission_code/caves.dm
@@ -31,14 +31,14 @@
//caves papers
/obj/item/paper/crumpled/awaymissions/caves/unsafe_area
- info = "
WARNING
Majority of this area is consitered 'unsafe' past this point. Theres an outpost directly south of here where you can get your bearing and travel further down if needed. Traveling in groups is HIGHLY advised, the shit out there can be extremely deadly if you're alone.
"
+ info = "
WARNING
Majority of this area is considered 'unsafe' past this point. Theres an outpost directly south of here where you can get your bearing and travel further down if needed. Traveling in groups is HIGHLY advised, the shit out there can be extremely deadly if you're alone.
"
/obj/item/paper/fluff/awaymissions/caves/omega
name = "Subject Omega Notes"
info = "
Testing Notes
Subject appears unresponsive to most interactions, refusing to move away from the corners or face any scientists. Subject appears to move between the two back corners every observation. A strange humming can be heard from inside the cell, appears to be originating from the subject itself, further testing is necessary to confirm or deny this.
"
/obj/item/paper/fluff/awaymissions/caves/magma
- info = "
Mining is hell down here, you can feel the heat of the magma no matter how thick the suit is. Conditions are barely managble as is, restless nights and horrid work conditions. The ore maybe rich down here, but we've already lost a few men to the faults shifting, god knows how much longer till it all just collapses down and consumes everyone with it.
"
+ info = "
Mining is hell down here, you can feel the heat of the magma no matter how thick the suit is. Conditions are barely manageable as is, restless nights and horrid work conditions. The ore maybe rich down here, but we've already lost a few men to the faults shifting, god knows how much longer till it all just collapses down and consumes everyone with it.
"
/obj/item/paper/fluff/awaymissions/caves/work_notice
name = "work notice"
@@ -48,7 +48,7 @@
name = "shipment notice"
info = "
We were suppose to get a shipment of these special laser rifles and a couple 'nades to help combat the wildlife down here, but its been weeks since we last heard from the caravan carrying the shit down here. At this point we can only assume they fell victim to one of the monster nests or the dumbasses managed to trip into the lava. So much for that shipment, I guess.
"
-/obj/item/paper/fluff/awaymissions/caves/saftey_notice
+/obj/item/paper/fluff/awaymissions/caves/safety_notice
name = "safety notice"
info = "
Some of the miners have gone to laying some mine traps among the lower levels of the mine to keep the monsters at bay. This probably isn't the smartest idea in a cavern like this but the boys seem to get a chuckle out of every distant blast they hear go off, so I guess it works
"
diff --git a/code/modules/awaymissions/mission_code/moonoutpost19.dm b/code/modules/awaymissions/mission_code/moonoutpost19.dm
index 92d25bfee3..c0af9cd08c 100644
--- a/code/modules/awaymissions/mission_code/moonoutpost19.dm
+++ b/code/modules/awaymissions/mission_code/moonoutpost19.dm
@@ -44,7 +44,7 @@
/obj/item/paper/fluff/awaymissions/moonoutpost19/research/larva_social
name = "Larva Xenomorph Social Interactions & Capturing Procedure"
- info = "Researcher: Dr. Sakuma Sano Date: 04/06/2554
Report: As expected, all that is left of the monkeys we sent in earlier is a group of xenomorph larvae. It is quite clear that the facehuggers are not selective in their hosts, and so far the gestation process has been shown to have a 100% success rate.
The larvae themselves have been behaving very differently from the lone larva we first observed, and despite shying away from humans they are clearly comfortable with others of their kind. Our previous suspicions on larvae have been confirmed with their demonstration of playfulness: they are not nearly as aggressive or violent when young, before molting to adulthood.
The majority of the play we observed involved a sort of hide-and-seek, and occasionally wrestling by tangling themselves and struggling out of it. While normally we would write these off as instinctual play for honing their skills when they molt, their growth period is so incredibly fast and they are still such adept killers that it would serve no practical purpose. The only explanation for this is perhaps to create bonds and friendships with each other, if that is even possible for such an incredibly hostile race. It may be that they are much more reasonable with each other than other life forms.
It had become clear that now was the best time to extract a xenomorph for dissecting, as these were all still larvae and the queen was still attached to its ovipositor and would be immobile. With the approval of the research director, we sent in our medical robot that had been dubbed 'Head Surgeon' into the containment pen, dropping the shields for only a fraction of a second to allow it entry. The larvae were cautious, but the curiosity of one had him within grabbing range of our robot. It was brought out and quickly euthanized through lethal injection, courtesy of our mechanical doctor."
+ info = "Researcher: Dr. Sakuma Sano Date: 04/06/2554
Report: As expected, all that is left of the monkeys we sent in earlier is a group of xenomorph larvae. It is quite clear that the facehuggers are not selective in their hosts, and so far the gestation process has been shown to have a 100% success rate.
The larvae themselves have been behaving very differently from the lone larva we first observed, and despite shying away from humans they are clearly comfortable with others of their kind. Our previous suspicions on larvae have been confirmed with their demonstration of playfulness: they are not nearly as aggressive or violent when young, before molting to adulthood.
The majority of the play we observed involved a sort of hide-and-seek, and occasionally wrestling by tangling themselves and struggling out of it. While normally we would write these off as instinctual play for honing their skills when they molt, their growth period is so incredibly fast and they are still such adept killers that it would serve no practical purpose. The only explanation for this is perhaps to create bonds and friendships with each other, if that is even possible for such an incredibly hostile race. It may be that they are much more reasonable with each other than other life forms.
It had become clear that now was the best time to extract a xenomorph for dissecting, as these were all still larvae and the queen was still attached to its ovipositor and would be immobile. With the approval of the research director, we sent in our medical robot that had been dubbed 'Head Surgeon' into the containment pen, dropping the shields for only a fraction of a second to allow it entry. The larvae were cautious, but the curiosity of one had him within grabbing range of our robot. It was brought out and quickly euthanized through lethal injection, courtesy of our mechanical doctor."
/obj/item/paper/fluff/awaymissions/moonoutpost19/research/xeno_queen
name = "Queen Xenomorph Physiology & Behavior Observation"
@@ -65,7 +65,7 @@
/obj/item/paper/fluff/awaymissions/moonoutpost19/research/xeno_hivemind
name = "The Hivemind Hypothesis"
info = "Researcher: Dr. Mark Douglas Date: 17/06/2554
Report: Earlier today we have observed a new phenomenon with our subjects. While feeding them our last monkey subject and throwing out the box, the aliens merely looked at us instead of infecting the monkey right away. They looked to be collectively distressed as they would no longer be given hosts, where instead we would move to the next phase of the experiment. When I glanced at the gas tanks and piping leading to their cell, I looked back to see all of them were up against the glass, even the queen! It was as if they all understood what was going to happen, even though we knew only the queen had the cognitive capability to do so.
The only explanation for this is a form of communication between the aliens, but we have seen no such action take place anywhere in the cell until now. We also know that regular drone and hunter xenomorphs have no personality or instinct to survive by themselves. Perhaps the queen has a direct link to them? A form of a commander or overseer that controls their every move? A hivemind?"
-
+
/obj/item/paper/fluff/awaymissions/moonoutpost19/research/xeno_behavior
name = "A Preliminary Study of Alien Behavior"
info = "Researcher: Dr. Sakuma Sano Date: 08/06/2554
Report: The xenomorphs we have come to study here are a remarkable species. They are almost universally aggressive across all castes, showing no remorse or guilt or pause before or after acts of violence. They appear to be a species entirely designed to kill. Oddly enough, even their method of reproduction is a brutal two-for-one method of birthing a new xenomorph and killing its host.
The lone xenomorph we studied only five days ago showed little sign of intelligence. Only a simple drone that flung itself at the safety glass and shields repeatedly and thankfully without success. Once the drone molted into a queen, it became much more calm and calculating, merely looking at us and waiting while building its nest. As the hive grew in size and in numbers, so too did the intelligence of the common hunter and drone. We are still researching how they can communicate with one another and the relationship between the different castes and the queen. We will continue to update our research as we learn more about the species."
@@ -80,11 +80,11 @@
/obj/item/paper/fluff/awaymissions/moonoutpost19/research/evacuation
name = "Evacuation Procedure"
- info = "
In The Event of Xenobiology Breach: Evacuate staff, Lock down Xenobiology, Notify on-site superiors and/or Central Command immediatly.
Current Xenobiology Containment Level:Secure RUN
"
+ info = "
In The Event of Xenobiology Breach: Evacuate staff, Lock down Xenobiology, Notify on-site superiors and/or Central Command immediately.
Current Xenobiology Containment Level:Secure RUN
"
/obj/item/paper/fluff/awaymissions/moonoutpost19/log/personal
name = "Personal Log"
- info = "Log 1: We got our promised supply drop today. We were only meant to get it, what, a week ago? This bloody gateway keeps desyncing itself, and that means subsisting off recycled water and carb packs. No clue where the damn thing connects to on its off days, and HQ say we are 'not to touch it if it isn't linking to command.' We dumped off the assload of crates Jim filled, got our boxes of oxygen, food and drink, and closed the portal.
Log 2: Damn thing is acting up again. Three days no contact this time. I thought I heard clanking noises from it yesterday. Jim is going on about the NT base or some shit. We've been over this before - They don't know we're here, that engineer was too drunk to recognise his suit, especially since I had it painted orange. He's starting to get annoying. We're safe.
Log 3: Gateway synced itself up automatically today. I opened it for an instant to spy through it, got a glimpse of the inside of a transport container. Either HQ's redecorating or something, or there's more than two of these things."
+ info = "Log 1: We got our promised supply drop today. We were only meant to get it, what, a week ago? This bloody gateway keeps desyncing itself, and that means subsisting off recycled water and carb packs. No clue where the damn thing connects to on its off days, and HQ say we are 'not to touch it if it isn't linking to command.' We dumped off the assload of crates Jim filled, got our boxes of oxygen, food and drink, and closed the portal.
Log 2: Damn thing is acting up again. Three days no contact this time. I thought I heard clanking noises from it yesterday. Jim is going on about the NT base or some shit. We've been over this before - They don't know we're here, that engineer was too drunk to recognize his suit, especially since I had it painted orange. He's starting to get annoying. We're safe.
Log 3: Gateway synced itself up automatically today. I opened it for an instant to spy through it, got a glimpse of the inside of a transport container. Either HQ's redecorating or something, or there's more than two of these things."
/obj/item/paper/fluff/awaymissions/moonoutpost19/log/personal_2
name = "Personal Log"
@@ -100,7 +100,7 @@
/obj/item/paper/fluff/awaymissions/moonoutpost19/log/ivan
name = "Personal Log - Ivan Volodin"
- info = "Ivan Volodin Stories:
Entry Won - 28/05/2554: Hello. I am Crazy Ivan. Boss say I must write. I do good job fixing outpost. Is very good job. Much better than mines. Many nice people. I cause no trouble.
Entry Too - 05/06/2554: I am finding problem with Booze-O-Mat. Is not problem. I solve very easy. Use yellow tool to make purple light go off. I am good engineer! Bartender will be very happy.
Entry Tree - 08/06/2554: Bartender is not happy. Security man is not happy. Cannot feel legs, is very cold in freezer. Is not good. Table is jammed into door, have no tools. Is very not good. But, on bright side, found meat! Shall chew to keep spirits up.
Entry Fore - 12/06/2554: Big nasty purple bug looked at me today. Make nervous. Blue wall wire can be broken, then bad thing happens. Very very bad thing. Man in orange spacesuit wave at me today too. He seem nice. Wonder who was?
Entry Fiv - 15/06/2554: I eat cornflakes today. Is good day. Sun shine for a while. Was nice. I also take ride on disposals chute. Was fun, but tiny. Get clog out of pipes, was vodka bottle. Is empty. This make many sads.
Entry Sex: 19/06/2554: Purple bugs jumpy today. When waved, get hiss. Maybe very bad. Maybe just ill. Do not know. Is science problem, is not engineer problem. I eat sandwich. Is glorious job. Wish to never end."
+ info = "Ivan Volodin Stories:
Entry Won - 28/05/2554: Hello. I am Crazy Ivan. Boss say I must write. I do good job fixing outpost. Is very good job. Much better than mines. Many nice people. I cause no trouble.
Entry Too - 05/06/2554: I am finding problem with Booze-O-Mat. Is not problem. I solve very easy. Use yellow tool to make purple light go off. I am good engineer! Bartender will be very happy.
Entry Tree - 08/06/2554: Bartender is not happy. Security man is not happy. Cannot feel legs, is very cold in freezer. Is not good. Table is jammed into door, have no tools. Is very not good. But, on bright side, found meat! Shall chew to keep spirits up.
Entry Fore - 12/06/2554: Big nasty purple bug looked at me today. Make nervous. Blue wall wire can be broken, then bad thing happens. Very very bad thing. Man in orange spacesuit wave at me today too. He seem nice. Wonder who was?
Entry Fiv - 15/06/2554: I eat cornflakes today. Is good day. Sun shine for a while. Was nice. I also take ride on disposals chute. Was fun, but tiny. Get clog out of pipes, was vodka bottle. Is empty. This make many sads.
Entry Sex: 19/06/2554: Purple bugs jumpy today. When waved, get hiss. Maybe very bad. Maybe just ill. Do not know. Is science problem, is not engineer problem. I eat sandwich. Is glorious job. Wish to never end."
/obj/item/paper/fluff/awaymissions/moonoutpost19/log/gerald
name = "Personal Log - Gerald Rosswell"
@@ -117,5 +117,5 @@
/obj/item/paper/fluff/awaymissions/moonoutpost19/goodbye_note
name = "Note"
info = "Bugs break out. I run to here and lock door. I hear door next to me break open and screams. All nice people here dead now. I no want to be eaten, and bottle always said to be coward way out, but person who say that is stupid. Mira, there is no escape for me, tell Alexis and Elena that father will never come home, and that I love you all."
-
+
diff --git a/code/modules/awaymissions/mission_code/snowdin.dm b/code/modules/awaymissions/mission_code/snowdin.dm
index f64b1fe838..b3018d9d1c 100644
--- a/code/modules/awaymissions/mission_code/snowdin.dm
+++ b/code/modules/awaymissions/mission_code/snowdin.dm
@@ -89,7 +89,7 @@
icon_state = "awaycontent22"
/area/awaymission/snowdin/post/broken_shuttle
- name = "Snowdin Outpost - Broken Transist Shuttle"
+ name = "Snowdin Outpost - Broken Transit Shuttle"
icon_state = "awaycontent20"
requires_power = FALSE
@@ -223,8 +223,9 @@
var/list/plasma_parts = list()//a list of the organic parts to be turned into plasma limbs
var/list/robo_parts = list()//keep a reference of robotic parts so we know if we can turn them into a plasmaman
var/mob/living/carbon/human/PP = L
- if(istype(PP.dna.species, /datum/species/plasmaman || /datum/species/android || /datum/species/synth)) //ignore plasmamen/robotic species
- return
+ var/S = PP.dna.species
+ if(istype(S, /datum/species/plasmaman) || istype(S, /datum/species/android) || istype(S, /datum/species/synth)) //ignore plasmamen/robotic species
+ continue
for(var/BP in PP.bodyparts)
var/obj/item/bodypart/NN = BP
@@ -263,7 +264,7 @@
/obj/item/paper/crumpled/ruins/snowdin/foreshadowing
name = "scribbled note"
- info = {"Somnethings gone VERY wrong here. Jouslen has been mumbling about some weird shit in his cabin during the night and he seems always tired when we're working. I tried to confront him about it and he blew up on me,
+ info = {"Something's gone VERY wrong here. Jouslen has been mumbling about some weird shit in his cabin during the night and he seems always tired when we're working. I tried to confront him about it and he blew up on me,
telling me to mind my own business. I reported him to the officer, said he'd look into it. We only got another 2 months here before we're pulled for another assignment, so this shit can't go any quicker.."}
/obj/item/paper/crumpled/ruins/snowdin/misc1
@@ -283,58 +284,58 @@
/obj/item/paper/fluff/awaymissions/snowdin/research_feed
name = "Research Feed"
- info = {"A page full of graphs and other detailed infomation on the seismic activity of the surrounding area."}
+ info = {"A page full of graphs and other detailed information on the seismic activity of the surrounding area."}
//profile of each of the old crewmembers for the outpost
/obj/item/paper/fluff/awaymissions/snowdin/profile/overseer
name = "Personnel Record AOP#01"
- info = {"
Caleb Reed lead several expeditions
among uncharted planets in search of plasma for Nanotrasen, scouring from hot savanas to freezing arctics. Track record is fairly clean with only incidient including the loss of two researchers during the
expedition of _______, where mis-used of explosive ordinance for tunneling causes a cave-in."}
/obj/item/paper/fluff/awaymissions/snowdin/profile/sec1
name = "Personnel Record AOP#02"
- info = {"
James Reed has been a part
of Nanotrasen's security force for over 20 years, first joining in 22XX. A clean record and unwavering loyalty to the corperation through numerous deployments to various sites makes him a valuable asset to Natotrasen
when it comes to keeping the peace while prioritizing Nanotrasen privacy matters. "}
/obj/item/paper/fluff/awaymissions/snowdin/profile/hydro1
name = "Personnel Record AOP#03"
- info = {"
Katherine Esterdeen is a recent
graduate with a major in Botany and a PH.D in Ecology. Having a clean record and eager to work, Esterdeen seems to be the right fit for maintaining plants in the middle of nowhere."}
/obj/item/paper/fluff/awaymissions/snowdin/profile/engi1
name = "Personnel Record AOP#04"
- info = {"
Recently certified to be a full-time Journeyman, Rachel has
been assigned various construction projects in the past 5 years. Competent and has no past infractions, should be of little concern."}
/obj/item/paper/fluff/awaymissions/snowdin/profile/research1
name = "Personnel Record AOP#05"
- info = {"
"}
/obj/item/paper/fluff/awaymissions/snowdin/secnotice
name = "Security Notice"
- info = {"YOu have been assigned to this Arctic Post with intention of protecting Nanotrasen assets and ensuring vital infomation is kept secure while the stationed crew obeys protocal. The picked
+ info = {"YOu have been assigned to this Arctic Post with intention of protecting Nanotrasen assets and ensuring vital information is kept secure while the stationed crew obeys protocol. The picked
staff for this post have been pre-screened with no prior incidients on record, but incase of an issue you have been given a single holding cell and instructions to contact Central to terminate the
offending crewmember."}
/obj/item/paper/fluff/awaymissions/snowdin/mining
name = "Assignment Notice"
- info = {"This cold-ass planet is the new-age equivilant of striking gold. Huge deposits of plasma and literal streams of plasma run through the caverns under all this ice and we're here to mine it all.\
+ info = {"This cold-ass planet is the new-age equivalent of striking gold. Huge deposits of plasma and literal streams of plasma run through the caverns under all this ice and we're here to mine it all.\
Nanotrasen pays by the pound, so get minin' boys!"}
/obj/item/paper/crumpled/ruins/snowdin/lootstructures
name = "scribbled note"
- info = {"There's some ruins scattered along the cavern, their walls seem to be made of some sort of super-condensned mixture of ice and snow. We've already barricaded up the ones we've found so far,
+ info = {"There's some ruins scattered along the cavern, their walls seem to be made of some sort of super-condensed mixture of ice and snow. We've already barricaded up the ones we've found so far,
since we keep hearing some strange noises from inside. Besides, what sort of fool would wrecklessly run into ancient ruins full of monsters for some old gear, anyway?"}
/obj/item/paper/crumpled/ruins/snowdin/shovel
@@ -388,7 +389,7 @@
DELAY 30
SAY Nanotrasen is pleased to have you working in one of the many top-of-the-line research posts within the $%@!! sector!
DELAY 30
- SAY Further job assignment infomation can be found at your local security post! Have a secure day!
+ SAY Further job assignment information can be found at your local security post! Have a secure day!
DELAY 20;"}
/obj/item/disk/holodisk/snowdin/overrun
@@ -529,7 +530,7 @@
/obj/item/gun/ballistic/automatic/c20r/unrestricted = 16,
/obj/item/gun/magic/wand/resurrection/inert = 15,
/obj/item/gun/magic/wand/resurrection = 10,
- /obj/item/radio/uplink/old = 2,
+ /obj/item/uplink/old = 2,
/obj/item/book/granter/spell/charge = 12,
/obj/item/grenade/clusterbuster/spawner_manhacks = 15,
/obj/item/book/granter/spell/fireball = 10,
@@ -558,7 +559,7 @@
/obj/item/clothing/under/syndicate/coldres
name = "insulated tactical turtleneck"
- desc = "A non-descript and slightly suspicious-looking turtleneck with digital camouflage cargo pants. The interior has been padded with special insulation for both warmth and protection."
+ desc = "A nondescript and slightly suspicious-looking turtleneck with digital camouflage cargo pants. The interior has been padded with special insulation for both warmth and protection."
armor = list("melee" = 20, "bullet" = 10, "laser" = 0,"energy" = 5, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 25, "acid" = 25)
cold_protection = CHEST|GROIN|ARMS|LEGS
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
diff --git a/code/modules/cargo/bounties/special.dm b/code/modules/cargo/bounties/special.dm
index 8d0157ad86..42c9ab8202 100644
--- a/code/modules/cargo/bounties/special.dm
+++ b/code/modules/cargo/bounties/special.dm
@@ -1,6 +1,6 @@
/datum/bounty/item/alien_organs
name = "Alien Organs"
- description = "Nanotrasen is interested in studying Xenomorph biology. Ship a set of organs to be thouroughly compensated."
+ description = "Nanotrasen is interested in studying Xenomorph biology. Ship a set of organs to be thoroughly compensated."
reward = 25000
required_count = 3
wanted_types = list(/obj/item/organ/brain/alien, /obj/item/organ/alien, /obj/item/organ/body_egg/alien_embryo)
diff --git a/code/modules/cargo/bounties/virus.dm b/code/modules/cargo/bounties/virus.dm
index e046e09af2..8f078a2668 100644
--- a/code/modules/cargo/bounties/virus.dm
+++ b/code/modules/cargo/bounties/virus.dm
@@ -73,7 +73,7 @@
return A.totalStealth() == stat_value
/datum/bounty/virus/transmit
- stat_name = "transmittable"
+ stat_name = "transmissible"
/datum/bounty/virus/transmit/accepts_virus(V)
var/datum/disease/advance/A = V
diff --git a/code/modules/cargo/export_scanner.dm b/code/modules/cargo/export_scanner.dm
index e493f96c6e..2113696e90 100644
--- a/code/modules/cargo/export_scanner.dm
+++ b/code/modules/cargo/export_scanner.dm
@@ -6,7 +6,7 @@
item_state = "radio"
lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
- flags_1 = NOBLUDGEON_1
+ item_flags = NOBLUDGEON
w_class = WEIGHT_CLASS_SMALL
siemens_coefficient = 1
var/obj/machinery/computer/cargo/cargo_console = null
diff --git a/code/modules/cargo/exports/weapons.dm b/code/modules/cargo/exports/weapons.dm
index 28b55a2c8f..0d363f7132 100644
--- a/code/modules/cargo/exports/weapons.dm
+++ b/code/modules/cargo/exports/weapons.dm
@@ -69,29 +69,29 @@
unit_name = "pair"
message = "of handcuffs"
export_types = list(/obj/item/restraints/handcuffs)
-
+
// relics of lavaland
/datum/export/weapon/hierophant
cost = 40000
unit_name = "Hierophant Club"
export_types = list(/obj/item/hierophant_club)
-
+
/datum/export/weapon/lava
cost = 40000
unit_name = "Lava Staff"
export_types = list(/obj/item/lava_staff)
-
+
/datum/export/weapon/cleaving_saw
cost = 40000
unit_name = "Cleaving Saw"
export_types = list(/obj/item/melee/transforming/cleaving_saw)
-
+
/datum/export/weapon/mayhem
cost = 40000
unit_name = "Mayhem in a bottle"
export_types = list(/obj/item/mayhem)
-
+
/datum/export/weapon/blood_contract
cost = 40000
unit_name = "Blood Contract"
@@ -103,22 +103,22 @@
cost = 10000
unit_name = "Immortality Talisman"
export_types = list(/obj/item/immortality_talisman)
-
+
/datum/export/weapon/babel
cost = 10000
unit_name = "Book of Babel"
export_types = list(/obj/item/book_of_babel)
-
+
/datum/export/weapon/hook
cost = 10000
unit_name = "Meat hook"
export_types = list(/obj/item/gun/magic/hook)
-
+
/datum/export/weapon/shipbottle //the price for not breaking the bottle.
cost = 20000
unit_name = "Ship in a bottle"
export_types = list(/obj/item/ship_in_a_bottle)
-
+
/datum/export/weapon/tarot //price for sacraficing a very profitiable ally
cost = 20000
unit_name = "Tarot cards"
@@ -128,37 +128,37 @@
cost = 5000
unit_name = "Red Cube"
export_types = list(/obj/item/warp_cube/red)
-
+
/datum/export/weapon/blue //first half of telecube
cost = 5000
unit_name = "Blue Cube"
export_types = list(/obj/item/warp_cube)
-
+
/datum/export/weapon/wisplantern //thermals on lavaland
cost = 10000
unit_name = "Wisp Lantern"
export_types = list(/obj/item/wisp_lantern)
-
+
/datum/export/weapon/flight //if xenobiology ever reaches the point to get these without shuttle being called they deserve it
cost = 10000
- unit_name = "Strange Elixer"
+ unit_name = "Strange Elixir"
export_types = list(/obj/item/reagent_containers/glass/bottle/potion/flight)
-
+
/datum/export/weapon/cheart //is a very powerfull healing artifact in the robust hands
cost = 10000
unit_name = "Cursed Heart"
export_types = list(/obj/item/organ/heart/cursed/wizard)
-
+
/datum/export/weapon/ckatana
cost = 10000
unit_name = "Katana"
export_types = list(/obj/item/katana/cursed)
-
+
/datum/export/weapon/geye //xray
cost = 10000
unit_name = "God eye"
export_types = list(/obj/item/clothing/glasses/godeye)
-
+
/datum/export/weapon/spectral
cost = 10000
unit_name = "Spectral Sword"
diff --git a/code/modules/cargo/packs.dm b/code/modules/cargo/packs.dm
index cffd954b0e..e27cb8f56e 100644
--- a/code/modules/cargo/packs.dm
+++ b/code/modules/cargo/packs.dm
@@ -60,15 +60,6 @@
crate_name = "Biker Kit"
crate_type = /obj/structure/closet/crate/large
-/datum/supply_pack/emergency/droneshells
- name = "Drone Shell Crate"
- desc = "The station's little helpers. Contains three Drone Shells."
- cost = 1000
- contains = list(/obj/item/drone_shell,
- /obj/item/drone_shell,
- /obj/item/drone_shell)
- crate_name = "drone shell crate"
-
/datum/supply_pack/emergency/equipment
name = "Emergency Bot/Internals Crate"
desc = "Explosions got you down? These supplies are guaranteed to patch up holes, in stations and people alike! Comes with two floorbots, two medbots, five oxygen masks and five small oxygen tanks."
@@ -181,7 +172,7 @@
/datum/supply_pack/emergency/radiation
name = "Radiation Protection Crate"
- desc = "Survive the Nuclear Apocalypse and Supermatter Engine alike with two sets of Radiation suits. Each set contains a helmet, suit, and geiger counter. We'll even throw in a bottle of vodka and some glasses too, considering the life-expectancy of people who order this."
+ desc = "Survive the Nuclear Apocalypse and Supermatter Engine alike with two sets of Radiation suits. Each set contains a helmet, suit, and Geiger counter. We'll even throw in a bottle of vodka and some glasses too, considering the life-expectancy of people who order this."
cost = 1000
contains = list(/obj/item/clothing/head/radiation,
/obj/item/clothing/head/radiation,
@@ -225,7 +216,7 @@
/datum/supply_pack/emergency/weedcontrol
name = "Weed Control Crate"
- desc = "Keep those invasive species OUT. Contains a scythe, gasmask, and two anti-weed chemical grenades. Warrenty void if used on ambrosia. Requires Hydroponics access to open."
+ desc = "Keep those invasive species OUT. Contains a scythe, gasmask, and two anti-weed chemical grenades. Warranty void if used on ambrosia. Requires Hydroponics access to open."
cost = 1500
access = ACCESS_HYDROPONICS
contains = list(/obj/item/scythe,
@@ -631,7 +622,7 @@
/datum/supply_pack/engineering/shuttle_engine
name = "Shuttle Engine Crate"
- desc = "Through advanced bluespace-shenanigins, our engineers have managed to fit an entire shuttle engine into one tiny little crate. Requires CE access to open."
+ desc = "Through advanced bluespace-shenanigans, our engineers have managed to fit an entire shuttle engine into one tiny little crate. Requires CE access to open."
cost = 5000
access = ACCESS_CE
contains = list(/obj/structure/shuttle/engine/propulsion/burst/cargo)
@@ -1134,24 +1125,24 @@
desc = "Contains refills for medical vending machines."
cost = 2000
contains = list(/obj/item/vending_refill/medical,
- /obj/item/vending_refill/medical,
- /obj/item/vending_refill/medical)
+ /obj/item/vending_refill/wallmed)
crate_name = "medical vending crate"
/datum/supply_pack/medical/virus
name = "Virus Crate"
- desc = "Contains twelve different bottles, each filled with a different chemical compound, each useful for virology. Also includes seven beakers and syringes. Balled-up jeans not included. Requires CMO access to open."
+ desc = "Contains twelve different bottles, containing several viral samples for virology research. Also includes seven beakers and syringes. Balled-up jeans not included. Requires CMO access to open."
cost = 2500
access = ACCESS_CMO
contains = list(/obj/item/reagent_containers/glass/bottle/flu_virion,
/obj/item/reagent_containers/glass/bottle/cold,
- /obj/item/reagent_containers/glass/bottle/epiglottis_virion,
- /obj/item/reagent_containers/glass/bottle/liver_enhance_virion,
+ /obj/item/reagent_containers/glass/bottle/random_virus,
+ /obj/item/reagent_containers/glass/bottle/random_virus,
+ /obj/item/reagent_containers/glass/bottle/random_virus,
+ /obj/item/reagent_containers/glass/bottle/random_virus,
/obj/item/reagent_containers/glass/bottle/fake_gbs,
/obj/item/reagent_containers/glass/bottle/magnitis,
/obj/item/reagent_containers/glass/bottle/pierrot_throat,
/obj/item/reagent_containers/glass/bottle/brainrot,
- /obj/item/reagent_containers/glass/bottle/hallucigen_virion,
/obj/item/reagent_containers/glass/bottle/anxiety,
/obj/item/reagent_containers/glass/bottle/beesease,
/obj/item/storage/box/syringes,
@@ -1367,53 +1358,41 @@
/datum/supply_pack/service/vending/bartending
name = "Bartending Supply Crate"
- desc = "Bring on the booze with six vending machine refills, as well as a free book containing the well-kept secrets to the bartending trade!"
+ desc = "Bring on the booze with vending machine refills, as well as a free book containing the well-kept secrets to the bartending trade!"
cost = 2000
contains = list(/obj/item/vending_refill/boozeomat,
- /obj/item/vending_refill/boozeomat,
- /obj/item/vending_refill/boozeomat,
- /obj/item/vending_refill/coffee,
- /obj/item/vending_refill/coffee,
/obj/item/vending_refill/coffee,
/obj/item/book/granter/action/drink_fling)
crate_name = "bartending supply crate"
/datum/supply_pack/service/vending/cigarette
name = "Cigarette Supply Crate"
- desc = "Don't believe the reports - smoke today! Contains cigarette vending machine refills."
+ desc = "Don't believe the reports - smoke today! Contains a cigarette vending machine refill."
cost = 1500
- contains = list(/obj/item/vending_refill/cigarette,
- /obj/item/vending_refill/cigarette,
- /obj/item/vending_refill/cigarette)
+ contains = list(/obj/item/vending_refill/cigarette)
crate_name = "cigarette supply crate"
crate_type = /obj/structure/closet/crate
/datum/supply_pack/service/vending/games
name = "Games Supply Crate"
- desc = "Get your game on with these three game vending machine refills."
+ desc = "Get your game on with this game vending machine refill."
cost = 1000
- contains = list(/obj/item/vending_refill/games,
- /obj/item/vending_refill/games,
- /obj/item/vending_refill/games)
+ contains = list(/obj/item/vending_refill/games)
crate_name = "games supply crate"
crate_type = /obj/structure/closet/crate
/datum/supply_pack/service/vending/snack
name = "Snack Supply Crate"
- desc = "Three vending machine refills of cavity-bringin' goodness! The number one dentist recommended order!"
+ desc = "One vending machine refill of cavity-bringin' goodness! The number one dentist recommended order!"
cost = 1500
- contains = list(/obj/item/vending_refill/snack,
- /obj/item/vending_refill/snack,
- /obj/item/vending_refill/snack)
+ contains = list(/obj/item/vending_refill/snack)
crate_name = "snacks supply crate"
/datum/supply_pack/service/vending/cola
name = "Softdrinks Supply Crate"
- desc = "Got whacked by a toolbox, but you still have those pesky teeth? Get rid of those pearly whites with these three soda machine refills, today!"
+ desc = "Got whacked by a toolbox, but you still have those pesky teeth? Get rid of those pearly whites with this soda machine refill, today!"
cost = 1500
- contains = list(/obj/item/vending_refill/cola,
- /obj/item/vending_refill/cola,
- /obj/item/vending_refill/cola)
+ contains = list(/obj/item/vending_refill/cola)
crate_name = "soft drinks supply crate"
//////////////////////////////////////////////////////////////////////////////
@@ -1957,10 +1936,9 @@
/datum/supply_pack/costumes_toys/wardrobes/autodrobe
name = "Autodrobe Supply Crate"
- desc = "Autodrobe missing your favorite dress? Solve that issue today with these two autodrobe refills."
+ desc = "Autodrobe missing your favorite dress? Solve that issue today with this autodrobe refill."
cost = 1500
- contains = list(/obj/item/vending_refill/autodrobe,
- /obj/item/vending_refill/autodrobe)
+ contains = list(/obj/item/vending_refill/autodrobe)
crate_name = "autodrobe supply crate"
/datum/supply_pack/costumes_toys/wardrobes/cargo
@@ -2083,7 +2061,7 @@
/datum/supply_pack/misc/paper
name = "Bureaucracy Crate"
- desc = "High stacks of papers on your desk Are a big problem - make it Pea-sized with these bureacratic supplies! Contains six pens, some camera film, hand labeler supplies, a paper bin, three folders, two clipboards and two stamps."//that was too forced
+ desc = "High stacks of papers on your desk Are a big problem - make it Pea-sized with these bureaucratic supplies! Contains six pens, some camera film, hand labeler supplies, a paper bin, three folders, two clipboards and two stamps."//that was too forced
cost = 1500
contains = list(/obj/structure/filingcabinet/chestdrawer/wheeled,
/obj/item/camera_film,
diff --git a/code/modules/client/asset_cache.dm b/code/modules/client/asset_cache.dm
index 28a3ec23b9..b57aebb2cd 100644
--- a/code/modules/client/asset_cache.dm
+++ b/code/modules/client/asset_cache.dm
@@ -225,7 +225,7 @@ GLOBAL_LIST_EMPTY(asset_datums)
var/res_name = "spritesheet_[name].css"
var/fname = "data/spritesheets/[res_name]"
- call("rust_g", "file_write")(generate_css(), fname)
+ text2file(generate_css(), fname)
register_asset(res_name, file(fname))
for(var/size_id in sizes)
@@ -249,7 +249,7 @@ GLOBAL_LIST_EMPTY(asset_datums)
// save flattened version
var/fname = "data/spritesheets/[name]_[size_id].png"
fcopy(size[SPRSZ_ICON], fname)
- var/error = call("rust_g", "dmi_strip_metadata")(fname)
+ var/error = rustg_dmi_strip_metadata(fname)
if(length(error))
stack_trace("Failed to strip [name]_[size_id].png: [error]")
size[SPRSZ_STRIPPED] = icon(fname)
@@ -587,7 +587,11 @@ GLOBAL_LIST_EMPTY(asset_datums)
if (machine)
item = machine
var/icon_file = initial(item.icon)
- var/icon/I = icon(icon_file, initial(item.icon_state), SOUTH)
+ var/icon_state = initial(item.icon_state)
+ if (!(icon_state in icon_states(icon_file)))
+ warning("design [D] with icon '[icon_file]' missing state '[icon_state]'")
+ continue
+ var/icon/I = icon(icon_file, icon_state, SOUTH)
// computers (and snowflakes) get their screen and keyboard sprites
if (ispath(item, /obj/machinery/computer) || ispath(item, /obj/machinery/power/solar_control))
diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm
index fdcb27ad75..2ae00f9348 100644
--- a/code/modules/client/client_procs.dm
+++ b/code/modules/client/client_procs.dm
@@ -217,7 +217,9 @@ GLOBAL_LIST_EMPTY(external_rsc_urls)
new /datum/admins(localhost_rank, ckey, 1, 1)
//preferences datum - also holds some persistent data for the client (because we may as well keep these datums to a minimum)
prefs = GLOB.preferences_datums[ckey]
- if(!prefs)
+ if(prefs)
+ prefs.parent = src
+ else
prefs = new /datum/preferences(src)
GLOB.preferences_datums[ckey] = prefs
prefs.last_ip = address //these are gonna be used for banning
@@ -465,12 +467,14 @@ GLOBAL_LIST_EMPTY(external_rsc_urls)
related_accounts_ip = ""
while(query_get_related_ip.NextRow())
related_accounts_ip += "[query_get_related_ip.item[1]], "
+ qdel(query_get_related_ip)
var/datum/DBQuery/query_get_related_cid = SSdbcore.NewQuery("SELECT ckey FROM [format_table_name("player")] WHERE computerid = '[computer_id]' AND ckey != '[sql_ckey]'")
if(!query_get_related_cid.Execute())
return
related_accounts_cid = ""
while (query_get_related_cid.NextRow())
related_accounts_cid += "[query_get_related_cid.item[1]], "
+ qdel(query_get_related_cid)
var/admin_rank = "Player"
if (src.holder && src.holder.rank)
admin_rank = src.holder.rank.name
@@ -483,6 +487,7 @@ GLOBAL_LIST_EMPTY(external_rsc_urls)
var/new_player
var/datum/DBQuery/query_client_in_db = SSdbcore.NewQuery("SELECT 1 FROM [format_table_name("player")] WHERE ckey = '[sql_ckey]'")
if(!query_client_in_db.Execute())
+ qdel(query_client_in_db)
return
if(!query_client_in_db.NextRow())
if (CONFIG_GET(flag/panic_bunker) && !holder && !GLOB.deadmins[ckey])
@@ -496,6 +501,7 @@ GLOBAL_LIST_EMPTY(external_rsc_urls)
to_chat(src, "Sending you to [panic_name ? panic_name : panic_addr].")
winset(src, null, "command=.options")
src << link("[panic_addr]?redirect=1")
+ qdel(query_client_in_db)
qdel(src)
return
@@ -503,12 +509,17 @@ GLOBAL_LIST_EMPTY(external_rsc_urls)
account_join_date = sanitizeSQL(findJoinDate())
var/datum/DBQuery/query_add_player = SSdbcore.NewQuery("INSERT INTO [format_table_name("player")] (`ckey`, `firstseen`, `firstseen_round_id`, `lastseen`, `lastseen_round_id`, `ip`, `computerid`, `lastadminrank`, `accountjoindate`) VALUES ('[sql_ckey]', Now(), '[GLOB.round_id]', Now(), '[GLOB.round_id]', INET_ATON('[sql_ip]'), '[sql_computerid]', '[sql_admin_rank]', [account_join_date ? "'[account_join_date]'" : "NULL"])")
if(!query_add_player.Execute())
+ qdel(query_client_in_db)
+ qdel(query_add_player)
return
+ qdel(query_add_player)
if(!account_join_date)
account_join_date = "Error"
account_age = -1
+ qdel(query_client_in_db)
var/datum/DBQuery/query_get_client_age = SSdbcore.NewQuery("SELECT firstseen, DATEDIFF(Now(),firstseen), accountjoindate, DATEDIFF(Now(),accountjoindate) FROM [format_table_name("player")] WHERE ckey = '[sql_ckey]'")
if(!query_get_client_age.Execute())
+ qdel(query_get_client_age)
return
if(query_get_client_age.NextRow())
player_join_date = query_get_client_age.item[1]
@@ -523,17 +534,23 @@ GLOBAL_LIST_EMPTY(external_rsc_urls)
else
var/datum/DBQuery/query_datediff = SSdbcore.NewQuery("SELECT DATEDIFF(Now(),'[account_join_date]')")
if(!query_datediff.Execute())
+ qdel(query_datediff)
return
if(query_datediff.NextRow())
account_age = text2num(query_datediff.item[1])
+ qdel(query_datediff)
+ qdel(query_get_client_age)
if(!new_player)
var/datum/DBQuery/query_log_player = SSdbcore.NewQuery("UPDATE [format_table_name("player")] SET lastseen = Now(), lastseen_round_id = '[GLOB.round_id]', ip = INET_ATON('[sql_ip]'), computerid = '[sql_computerid]', lastadminrank = '[sql_admin_rank]', accountjoindate = [account_join_date ? "'[account_join_date]'" : "NULL"] WHERE ckey = '[sql_ckey]'")
if(!query_log_player.Execute())
+ qdel(query_log_player)
return
+ qdel(query_log_player)
if(!account_join_date)
account_join_date = "Error"
var/datum/DBQuery/query_log_connection = SSdbcore.NewQuery("INSERT INTO `[format_table_name("connection_log")]` (`id`,`datetime`,`server_ip`,`server_port`,`round_id`,`ckey`,`ip`,`computerid`) VALUES(null,Now(),INET_ATON(IF('[world.internet_address]' LIKE '', '0', '[world.internet_address]')),'[world.port]','[GLOB.round_id]','[sql_ckey]',INET_ATON('[sql_ip]'),'[sql_computerid]')")
query_log_connection.Execute()
+ qdel(query_log_connection)
if(new_player)
player_age = -1
. = player_age
@@ -569,6 +586,7 @@ GLOBAL_LIST_EMPTY(external_rsc_urls)
var/lastcid
if (query_cidcheck.NextRow())
lastcid = query_cidcheck.item[1]
+ qdel(query_cidcheck)
var/oldcid = cidcheck[ckey]
if (oldcid)
@@ -642,16 +660,22 @@ GLOBAL_LIST_EMPTY(external_rsc_urls)
//check to see if we noted them in the last day.
var/datum/DBQuery/query_get_notes = SSdbcore.NewQuery("SELECT id FROM [format_table_name("messages")] WHERE type = 'note' AND targetckey = '[sql_ckey]' AND adminckey = '[sql_system_ckey]' AND timestamp + INTERVAL 1 DAY < NOW() AND deleted = 0")
if(!query_get_notes.Execute())
+ qdel(query_get_notes)
return
if(query_get_notes.NextRow())
+ qdel(query_get_notes)
return
+ qdel(query_get_notes)
//regardless of above, make sure their last note is not from us, as no point in repeating the same note over and over.
query_get_notes = SSdbcore.NewQuery("SELECT adminckey FROM [format_table_name("messages")] WHERE targetckey = '[sql_ckey]' AND deleted = 0 ORDER BY timestamp DESC LIMIT 1")
if(!query_get_notes.Execute())
+ qdel(query_get_notes)
return
if(query_get_notes.NextRow())
if (query_get_notes.item[1] == system_ckey)
+ qdel(query_get_notes)
return
+ qdel(query_get_notes)
create_message("note", ckey, system_ckey, message, null, null, 0, 0)
@@ -797,6 +821,8 @@ GLOBAL_LIST_EMPTY(external_rsc_urls)
if (isliving(mob))
var/mob/living/M = mob
M.update_damage_hud()
+ if (prefs.auto_fit_viewport)
+ fit_viewport()
/client/proc/generate_clickcatcher()
if(!void)
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 5c6c0a8229..088c75a1b5 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -36,7 +36,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
//autocorrected this round, not that you'd need to check that.
- var/UI_style = "Midnight"
+ var/UI_style = null
var/buttons_locked = FALSE
var/hotkeys = FALSE
var/tgui_fancy = TRUE
@@ -121,6 +121,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
var/parallax
var/ambientocclusion = TRUE
+ var/auto_fit_viewport = FALSE
var/uplink_spawn_loc = UPLINK_PDA
@@ -133,9 +134,10 @@ GLOBAL_LIST_EMPTY(preferences_datums)
parent = C
custom_names["human"] = random_unique_name()
custom_names["ai"] = pick(GLOB.ai_names)
- custom_names["cyborg"] = pick(GLOB.ai_names)
+ custom_names["cyborg"] = DEFAULT_CYBORG_NAME
custom_names["clown"] = pick(GLOB.clown_names)
custom_names["mime"] = pick(GLOB.mime_names)
+ UI_style = GLOB.available_ui_styles[1]
if(istype(C))
if(!IsGuestKey(C.key))
load_path(C.ckey)
@@ -213,10 +215,13 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "Special Names: "
dat += "Backup Human Name: [custom_names["human"]] "
+ dat += " "
dat += "Clown: [custom_names["clown"]] "
- dat += "Mime:[custom_names["mime"]] "
+ dat += "Mime: [custom_names["mime"]]"
+ dat += " "
dat += "AI: [custom_names["ai"]] "
- dat += "Cyborg: [custom_names["cyborg"]] "
+ dat += "Cyborg: [custom_names["cyborg"]]"
+ dat += " "
dat += "Chaplain religion: [custom_names["religion"]] "
dat += "Chaplain deity: [custom_names["deity"]] "
@@ -457,24 +462,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
button_name = GHOST_OTHERS_SIMPLE_NAME
dat += "Ghosts of Others:[button_name] "
-
- if (CONFIG_GET(flag/maprotation))
- var/p_map = preferred_map
- if (!p_map)
- p_map = "Default"
- if (config.defaultmap)
- p_map += " ([config.defaultmap.map_name])"
- else
- if (p_map in config.maplist)
- var/datum/map_config/VM = config.maplist[p_map]
- if (!VM)
- p_map += " (No longer exists)"
- else
- p_map = VM.map_name
- else
- p_map += " (No longer exists)"
- if(CONFIG_GET(flag/allow_map_voting))
- dat += "Preferred Map:[p_map] "
+ dat += " "
dat += "FPS:[clientfps] "
@@ -493,6 +481,25 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += " "
dat += "Ambient Occlusion:[ambientocclusion ? "Enabled" : "Disabled"] "
+ dat += "Fit Viewport:[auto_fit_viewport ? "Auto" : "Manual"] "
+
+ if (CONFIG_GET(flag/maprotation))
+ var/p_map = preferred_map
+ if (!p_map)
+ p_map = "Default"
+ if (config.defaultmap)
+ p_map += " ([config.defaultmap.map_name])"
+ else
+ if (p_map in config.maplist)
+ var/datum/map_config/VM = config.maplist[p_map]
+ if (!VM)
+ p_map += " (No longer exists)"
+ else
+ p_map = VM.map_name
+ else
+ p_map += " (No longer exists)"
+ if(CONFIG_GET(flag/allow_map_voting))
+ dat += "Preferred Map:[p_map] "
dat += "
"
@@ -1101,11 +1108,6 @@ GLOBAL_LIST_EMPTY(preferences_datums)
if(new_age)
age = max(min( round(text2num(new_age)), AGE_MAX),AGE_MIN)
- if("metadata")
- var/new_metadata = input(user, "Enter any information you'd like others to see, such as Roleplay-preferences:", "Game Preference" , metadata) as message|null
- if(new_metadata)
- metadata = sanitize(copytext(new_metadata,1,MAX_MESSAGE_LEN))
-
/* if("hair")
var/new_hair = input(user, "Choose your character's hair colour:", "Character Preference","#"+hair_color) as color|null
if(new_hair)
@@ -1326,7 +1328,12 @@ GLOBAL_LIST_EMPTY(preferences_datums)
to_chat(user, "Invalid name. Your name should be at least 2 and at most [MAX_NAME_LEN] characters long. It may only contain the characters A-Z, a-z, 0-9, -, ' and .")
if("cyborg_name")
- var/new_cyborg_name = reject_bad_name( input(user, "Choose your character's cyborg name:", "Character Preference") as text|null, 1 )
+ var/raw_name = input(user, "Choose your character's cyborg name (Leave empty to use default naming scheme):", "Character Preference") as text|null
+ var/new_cyborg_name
+ if(!raw_name)
+ new_cyborg_name = DEFAULT_CYBORG_NAME
+ else
+ new_cyborg_name = reject_bad_name(raw_name,1 )
if(new_cyborg_name)
custom_names["cyborg"] = new_cyborg_name
else
@@ -1372,13 +1379,12 @@ GLOBAL_LIST_EMPTY(preferences_datums)
if (!isnull(desiredfps))
clientfps = desiredfps
parent.fps = desiredfps
- else
- clientfps = 0
- parent.fps = 0
if("ui")
- var/pickedui = input(user, "Choose your UI style.", "Character Preference") as null|anything in list("Midnight", "Plasmafire", "Retro", "Slimecore", "Operative", "Clockwork")
+ var/pickedui = input(user, "Choose your UI style.", "Character Preference", UI_style) as null|anything in GLOB.available_ui_styles
if(pickedui)
UI_style = pickedui
+ if (parent && parent.mob && parent.mob.hud_used)
+ parent.mob.hud_used.update_ui_style(ui_style2icon(UI_style))
if("pda_style")
var/pickedPDAStyle = input(user, "Choose your PDA style.", "Character Preference", pda_style) as null|anything in GLOB.pda_styles
if(pickedPDAStyle)
@@ -1468,6 +1474,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
toggles ^= SOUND_ADMINHELP
if("announce_login")
toggles ^= ANNOUNCE_LOGIN
+ if("combohud_lighting")
+ toggles ^= COMBOHUD_LIGHTING
if("be_special")
var/be_special_type = href_list["be_special_type"]
@@ -1487,7 +1495,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
if("lobby_music")
toggles ^= SOUND_LOBBY
- if((toggles & SOUND_LOBBY) && user.client)
+ if((toggles & SOUND_LOBBY) && user.client && isnewplayer(user))
user.client.playtitlemusic()
else
user.stop_sound_channel(CHANNEL_LOBBYMUSIC)
@@ -1539,6 +1547,11 @@ GLOBAL_LIST_EMPTY(preferences_datums)
var/obj/screen/plane_master/game_world/PM = locate(/obj/screen/plane_master/game_world) in parent.screen
PM.backdrop(parent.mob)
+ if("auto_fit_viewport")
+ auto_fit_viewport = !auto_fit_viewport
+ if(auto_fit_viewport && parent)
+ parent.fit_viewport()
+
if("save")
save_preferences()
save_character()
@@ -1600,7 +1613,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
if(be_random_body)
random_character(gender)
- if(CONFIG_GET(flag/humans_need_surnames))
+ if(CONFIG_GET(flag/humans_need_surnames) && (pref_species.id == "human"))
var/firstspace = findtext(real_name, " ")
var/name_length = length(real_name)
if(!firstspace) //we need a surname
diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm
index ad53f8f0dd..4c2cdbb074 100644
--- a/code/modules/client/preferences_savefile.dm
+++ b/code/modules/client/preferences_savefile.dm
@@ -131,6 +131,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
S["clientfps"] >> clientfps
S["parallax"] >> parallax
S["ambientocclusion"] >> ambientocclusion
+ S["auto_fit_viewport"] >> auto_fit_viewport
S["menuoptions"] >> menuoptions
S["enable_tips"] >> enable_tips
S["tip_delay"] >> tip_delay
@@ -151,7 +152,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
//Sanitize
ooccolor = sanitize_ooccolor(sanitize_hexcolor(ooccolor, 6, 1, initial(ooccolor)))
lastchangelog = sanitize_text(lastchangelog, initial(lastchangelog))
- UI_style = sanitize_inlist(UI_style, list("Midnight", "Plasmafire", "Retro", "Slimecore", "Operative", "Clockwork"), initial(UI_style))
+ UI_style = sanitize_inlist(UI_style, GLOB.available_ui_styles, GLOB.available_ui_styles[1])
hotkeys = sanitize_integer(hotkeys, 0, 1, initial(hotkeys))
tgui_fancy = sanitize_integer(tgui_fancy, 0, 1, initial(tgui_fancy))
tgui_lock = sanitize_integer(tgui_lock, 0, 1, initial(tgui_lock))
@@ -162,6 +163,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
clientfps = sanitize_integer(clientfps, 0, 1000, 0)
parallax = sanitize_integer(parallax, PARALLAX_INSANE, PARALLAX_DISABLE, null)
ambientocclusion = sanitize_integer(ambientocclusion, 0, 1, initial(ambientocclusion))
+ auto_fit_viewport = sanitize_integer(auto_fit_viewport, 0, 1, initial(auto_fit_viewport))
ghost_form = sanitize_inlist(ghost_form, GLOB.ghost_forms, initial(ghost_form))
ghost_orbit = sanitize_inlist(ghost_orbit, GLOB.ghost_orbits, initial(ghost_orbit))
ghost_accs = sanitize_inlist(ghost_accs, GLOB.ghost_accs_options, GHOST_ACCS_DEFAULT_OPTION)
@@ -213,6 +215,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
WRITE_FILE(S["clientfps"], clientfps)
WRITE_FILE(S["parallax"], parallax)
WRITE_FILE(S["ambientocclusion"], ambientocclusion)
+ WRITE_FILE(S["auto_fit_viewport"], auto_fit_viewport)
WRITE_FILE(S["menuoptions"], menuoptions)
WRITE_FILE(S["enable_tips"], enable_tips)
WRITE_FILE(S["tip_delay"], tip_delay)
@@ -260,7 +263,6 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
WRITE_FILE(S["features["mcolor"]"] , "#FFF")
//Character
- S["OOC_Notes"] >> metadata
S["real_name"] >> real_name
S["name_is_always_random"] >> be_random_name
S["body_is_always_random"] >> be_random_body
@@ -374,7 +376,6 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
update_character(needs_update, S) //needs_update == savefile_version if we need an update (positive integer)
//Sanitize
- metadata = sanitize_text(metadata, initial(metadata))
real_name = reject_bad_name(real_name)
if(!features["mcolor"] || features["mcolor"] == "#000")
features["mcolor"] = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F")
@@ -444,7 +445,6 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
WRITE_FILE(S["version"] , SAVEFILE_VERSION_MAX) //load_character will sanitize any bad data, so assume up-to-date.)
//Character
- WRITE_FILE(S["OOC_Notes"] , metadata)
WRITE_FILE(S["real_name"] , real_name)
WRITE_FILE(S["name_is_always_random"] , be_random_name)
WRITE_FILE(S["body_is_always_random"] , be_random_body)
diff --git a/code/modules/client/verbs/ooc.dm b/code/modules/client/verbs/ooc.dm
index 0bcfac811e..2f4922fddf 100644
--- a/code/modules/client/verbs/ooc.dm
+++ b/code/modules/client/verbs/ooc.dm
@@ -22,6 +22,8 @@
if(jobban_isbanned(src.mob, "OOC"))
to_chat(src, "You have been banned from OOC.")
return
+ if(QDELETED(src))
+ return
msg = copytext(sanitize(msg), 1, MAX_MESSAGE_LEN)
var/raw_msg = msg
@@ -56,21 +58,19 @@
if(prefs.unlock_content)
if(prefs.toggles & MEMBER_PUBLIC)
keyname = "[icon2html('icons/member_content.dmi', world, "blag")][keyname]"
-
+ //The linkify span classes and linkify=TRUE below make ooc text get clickable chat href links if you pass in something resembling a url
for(var/client/C in GLOB.clients)
if(C.prefs.chat_toggles & CHAT_OOC)
if(holder)
if(!holder.fakekey || C.holder)
if(check_rights_for(src, R_ADMIN))
- to_chat(C, "[CONFIG_GET(flag/allow_admin_ooccolor) && prefs.ooccolor ? "" :"" ]OOC:[keyname][holder.fakekey ? "/([holder.fakekey])" : ""]:[msg]")
+ to_chat(C, "[CONFIG_GET(flag/allow_admin_ooccolor) && prefs.ooccolor ? "" :"" ]OOC:[keyname][holder.fakekey ? "/([holder.fakekey])" : ""]:[msg]")
else
- to_chat(C, "OOC:[keyname][holder.fakekey ? "/([holder.fakekey])" : ""]:[msg]")
+ to_chat(C, "OOC:[keyname][holder.fakekey ? "/([holder.fakekey])" : ""]:[msg]")
else
- to_chat(C, "OOC:[holder.fakekey ? holder.fakekey : key]:[msg]")
- else if(is_mentor()) // Citadel Mentors
- to_chat(C, "OOC:[keyname]:[msg]") // hippie end
+ to_chat(C, "OOC:[holder.fakekey ? holder.fakekey : key]:[msg]")
else if(!(key in C.prefs.ignoring))
- to_chat(C, "OOC:[keyname]:[msg]")
+ to_chat(C, "OOC:[keyname]:[msg]")
/proc/toggle_ooc(toggle = null)
if(toggle != null) //if we're specifically en/disabling ooc
@@ -301,3 +301,49 @@ GLOBAL_VAR_INIT(normal_ooc_colour, OOC_COLOR)
set desc = "View the last round end report you've seen"
SSticker.show_roundend_report(src, TRUE)
+
+/client/verb/fit_viewport()
+ set name = "Fit Viewport"
+ set category = "OOC"
+ set desc = "Fit the width of the map window to match the viewport"
+
+ // Fetch aspect ratio
+ var/view_size = getviewsize(view)
+ var/aspect_ratio = view_size[1] / view_size[2]
+
+ // Calculate desired pixel width using window size and aspect ratio
+ var/sizes = params2list(winget(src, "mainwindow.split;mapwindow", "size"))
+ var/map_size = splittext(sizes["mapwindow.size"], "x")
+ var/height = text2num(map_size[2])
+ var/desired_width = round(height * aspect_ratio)
+ if (text2num(map_size[1]) == desired_width)
+ // Nothing to do
+ return
+
+ var/split_size = splittext(sizes["mainwindow.split.size"], "x")
+ var/split_width = text2num(split_size[1])
+
+ // Calculate and apply a best estimate
+ // +4 pixels are for the width of the splitter's handle
+ var/pct = 100 * (desired_width + 4) / split_width
+ winset(src, "mainwindow.split", "splitter=[pct]")
+
+ // Apply an ever-lowering offset until we finish or fail
+ var/delta
+ for(var/safety in 1 to 10)
+ var/after_size = winget(src, "mapwindow", "size")
+ map_size = splittext(after_size, "x")
+ var/got_width = text2num(map_size[1])
+
+ if (got_width == desired_width)
+ // success
+ return
+ else if (isnull(delta))
+ // calculate a probable delta value based on the difference
+ delta = 100 * (desired_width - got_width) / split_width
+ else if ((delta > 0 && got_width > desired_width) || (delta < 0 && got_width < desired_width))
+ // if we overshot, halve the delta and reverse direction
+ delta = -delta/2
+
+ pct += delta
+ winset(src, "mainwindow.split", "splitter=[pct]")
diff --git a/code/modules/client/verbs/suicide.dm b/code/modules/client/verbs/suicide.dm
index 06e555bb32..6b273cb818 100644
--- a/code/modules/client/verbs/suicide.dm
+++ b/code/modules/client/verbs/suicide.dm
@@ -19,7 +19,7 @@
if(damagetype & SHAME)
adjustStaminaLoss(200)
suiciding = FALSE
- SendSignal(COMSIG_ADD_MOOD_EVENT, "shameful_suicide", /datum/mood_event/shameful_suicide)
+ SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "shameful_suicide", /datum/mood_event/shameful_suicide)
return
suicide_log()
@@ -219,7 +219,4 @@
if(!canmove || restrained()) //just while I finish up the new 'fun' suiciding verb. This is to prevent metagaming via suicide
to_chat(src, "You can't commit suicide whilst restrained! ((You can type Ghost instead however.))")
return
-// if(has_brain_worms())
-// to_chat(src, "You can't bring yourself to commit suicide!")
-// return
return TRUE
diff --git a/code/modules/clothing/chameleon.dm b/code/modules/clothing/chameleon.dm
index 9d4983ed57..e4cc477f11 100644
--- a/code/modules/clothing/chameleon.dm
+++ b/code/modules/clothing/chameleon.dm
@@ -170,7 +170,7 @@
for(var/V in typesof(chameleon_type))
if(ispath(V) && ispath(V, /obj/item))
var/obj/item/I = V
- if(chameleon_blacklist[V] || (initial(I.flags_1) & ABSTRACT_1) || !initial(I.icon_state))
+ if(chameleon_blacklist[V] || (initial(I.item_flags) & ABSTRACT) || !initial(I.icon_state))
continue
var/chameleon_item_name = "[initial(I.name)] ([initial(I.icon_state)])"
chameleon_list[chameleon_item_name] = I
@@ -405,7 +405,7 @@
/obj/item/clothing/head/chameleon/drone
// The camohat, I mean, holographic hat projection, is part of the
// drone itself.
- flags_1 = NODROP_1
+ item_flags = NODROP
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
// which means it offers no protection, it's just air and light
@@ -459,7 +459,7 @@
/obj/item/clothing/mask/chameleon/drone
//Same as the drone chameleon hat, undroppable and no protection
- flags_1 = NODROP_1
+ item_flags = NODROP
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
// Can drones use the voice changer part? Let's not find out.
vchange = 0
diff --git a/code/modules/clothing/ears/_ears.dm b/code/modules/clothing/ears/_ears.dm
index bb2a489030..1dcaeb35fa 100644
--- a/code/modules/clothing/ears/_ears.dm
+++ b/code/modules/clothing/ears/_ears.dm
@@ -1,50 +1,50 @@
-
-//Ears: currently only used for headsets and earmuffs
-/obj/item/clothing/ears
- name = "ears"
- w_class = WEIGHT_CLASS_TINY
- throwforce = 0
- slot_flags = ITEM_SLOT_EARS
- resistance_flags = NONE
-
-/obj/item/clothing/ears/earmuffs
- name = "earmuffs"
- desc = "Protects your hearing from loud noises, and quiet ones as well."
- icon_state = "earmuffs"
- item_state = "earmuffs"
- strip_delay = 15
- equip_delay_other = 25
- resistance_flags = FLAMMABLE
-
-/obj/item/clothing/ears/earmuffs/ComponentInitialize()
- . = ..()
- AddComponent(/datum/component/earhealing)
- AddComponent(/datum/component/wearertargeting/earprotection, list(SLOT_EARS))
-
-/obj/item/clothing/ears/headphones
- name = "headphones"
- desc = "Unce unce unce unce. Boop!"
- icon = 'icons/obj/clothing/accessories.dmi'
- icon_state = "headphones"
- item_state = "headphones"
- slot_flags = ITEM_SLOT_EARS | ITEM_SLOT_HEAD | ITEM_SLOT_NECK //Fluff item, put it whereever you want!
- actions_types = list(/datum/action/item_action/toggle_headphones)
- var/headphones_on = FALSE
-
-/obj/item/clothing/ears/headphones/Initialize()
- . = ..()
- update_icon()
-
-/obj/item/clothing/ears/headphones/update_icon()
- icon_state = "[initial(icon_state)]_[headphones_on? "on" : "off"]"
- item_state = "[initial(item_state)]_[headphones_on? "on" : "off"]"
-
-/obj/item/clothing/ears/headphones/proc/toggle(owner)
- headphones_on = !headphones_on
- update_icon()
- var/mob/living/carbon/human/H = owner
- if(istype(H))
- H.update_inv_ears()
- H.update_inv_neck()
- H.update_inv_head()
- to_chat(owner, "You turn the music [headphones_on? "on. Untz Untz Untz!" : "off."]")
+
+//Ears: currently only used for headsets and earmuffs
+/obj/item/clothing/ears
+ name = "ears"
+ w_class = WEIGHT_CLASS_TINY
+ throwforce = 0
+ slot_flags = ITEM_SLOT_EARS
+ resistance_flags = NONE
+
+/obj/item/clothing/ears/earmuffs
+ name = "earmuffs"
+ desc = "Protects your hearing from loud noises, and quiet ones as well."
+ icon_state = "earmuffs"
+ item_state = "earmuffs"
+ strip_delay = 15
+ equip_delay_other = 25
+ resistance_flags = FLAMMABLE
+
+/obj/item/clothing/ears/earmuffs/ComponentInitialize()
+ . = ..()
+ AddComponent(/datum/component/earhealing)
+ AddComponent(/datum/component/wearertargeting/earprotection, list(SLOT_EARS))
+
+/obj/item/clothing/ears/headphones
+ name = "headphones"
+ desc = "Unce unce unce unce. Boop!"
+ icon = 'icons/obj/clothing/accessories.dmi'
+ icon_state = "headphones"
+ item_state = "headphones"
+ slot_flags = ITEM_SLOT_EARS | ITEM_SLOT_HEAD | ITEM_SLOT_NECK //Fluff item, put it whereever you want!
+ actions_types = list(/datum/action/item_action/toggle_headphones)
+ var/headphones_on = FALSE
+
+/obj/item/clothing/ears/headphones/Initialize()
+ . = ..()
+ update_icon()
+
+/obj/item/clothing/ears/headphones/update_icon()
+ icon_state = "[initial(icon_state)]_[headphones_on? "on" : "off"]"
+ item_state = "[initial(item_state)]_[headphones_on? "on" : "off"]"
+
+/obj/item/clothing/ears/headphones/proc/toggle(owner)
+ headphones_on = !headphones_on
+ update_icon()
+ var/mob/living/carbon/human/H = owner
+ if(istype(H))
+ H.update_inv_ears()
+ H.update_inv_neck()
+ H.update_inv_head()
+ to_chat(owner, "You turn the music [headphones_on? "on. Untz Untz Untz!" : "off."]")
diff --git a/code/modules/clothing/glasses/_glasses.dm b/code/modules/clothing/glasses/_glasses.dm
index c64ecc0e0f..bbb8d687d9 100644
--- a/code/modules/clothing/glasses/_glasses.dm
+++ b/code/modules/clothing/glasses/_glasses.dm
@@ -367,7 +367,7 @@
vision_flags = SEE_TURFS|SEE_MOBS|SEE_OBJS
darkness_view = 8
scan_reagents = 1
- flags_1 = NODROP_1
+ item_flags = NODROP
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
resistance_flags = LAVA_PROOF | FIRE_PROOF
diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm
index 2d60c7d236..25e0dbe886 100644
--- a/code/modules/clothing/head/helmet.dm
+++ b/code/modules/clothing/head/helmet.dm
@@ -150,7 +150,7 @@
dog_fashion = null
/obj/item/clothing/head/helmet/roman
- name = "roman helmet"
+ name = "\improper Roman helmet"
desc = "An ancient helmet made of bronze and leather."
flags_inv = HIDEEARS|HIDEHAIR
flags_cover = HEADCOVERSEYES
@@ -165,13 +165,13 @@
desc = "An ancient helmet made of plastic and leather."
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
-/obj/item/clothing/head/helmet/roman/legionaire
- name = "roman legionaire helmet"
+/obj/item/clothing/head/helmet/roman/legionnaire
+ name = "\improper Roman legionnaire helmet"
desc = "An ancient helmet made of bronze and leather. Has a red crest on top of it."
icon_state = "roman_c"
item_state = "roman_c"
-/obj/item/clothing/head/helmet/roman/legionaire/fake
+/obj/item/clothing/head/helmet/roman/legionnaire/fake
desc = "An ancient helmet made of plastic and leather. Has a red crest on top of it."
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm
index 18521b7dc9..faa3ebdb0f 100644
--- a/code/modules/clothing/head/jobs.dm
+++ b/code/modules/clothing/head/jobs.dm
@@ -100,7 +100,7 @@
/obj/item/clothing/head/beret/highlander
desc = "That was white fabric. Was."
- flags_1 = NODROP_1
+ item_flags = NODROP
dog_fashion = null //THIS IS FOR SLAUGHTER, NOT PUPPIES
//Security
@@ -136,7 +136,7 @@
/obj/item/clothing/head/beret/sec
name = "security beret"
- desc = "A robust beret with the security insignia emblazoned on it. Uses reinforced fabric to offer sufficent protection."
+ desc = "A robust beret with the security insignia emblazoned on it. Uses reinforced fabric to offer sufficient protection."
icon_state = "beret_badge"
armor = list("melee" = 40, "bullet" = 30, "laser" = 30,"energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = 50)
strip_delay = 60
diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm
index d7a7e7f5e2..ba23338415 100644
--- a/code/modules/clothing/head/misc.dm
+++ b/code/modules/clothing/head/misc.dm
@@ -221,7 +221,7 @@
icon_state = "shamebrero"
item_state = "shamebrero"
desc = "Once it's on, it never comes off."
- flags_1 = NODROP_1
+ item_flags = NODROP
dog_fashion = null
/obj/item/clothing/head/cone
@@ -305,8 +305,8 @@
icon_state = "drfreeze_hat"
flags_inv = HIDEHAIR
-/obj/item/clothing/head/pharoah
- name = "pharoah hat"
+/obj/item/clothing/head/pharaoh
+ name = "pharaoh hat"
desc = "Walk like an Egyptian."
icon_state = "pharoah_hat"
icon_state = "pharoah_hat"
@@ -318,7 +318,7 @@
dynamic_hair_suffix = ""
/obj/item/clothing/head/nemes
- name = "headress of Nemes"
+ name = "headdress of Nemes"
desc = "Lavish space tomb not included."
icon_state = "nemes_headdress"
icon_state = "nemes_headdress"
@@ -344,4 +344,4 @@
if(prob(3))
M += pick(" Honh honh honh!"," Honh!"," Zut Alors!")
- return trim(M)
\ No newline at end of file
+ return trim(M)
diff --git a/code/modules/clothing/masks/hailer.dm b/code/modules/clothing/masks/hailer.dm
index 0d78e11874..3f21780f15 100644
--- a/code/modules/clothing/masks/hailer.dm
+++ b/code/modules/clothing/masks/hailer.dm
@@ -3,7 +3,7 @@
/obj/item/clothing/mask/gas/sechailer
name = "security gas mask"
- desc = "A standard issue Security gas mask with integrated 'Compli-o-nator 3000' device. Plays over a dozen pre-recorded compliance phrases designed to get scumbags to stand still whilst you taze them. Do not tamper with the device."
+ desc = "A standard issue Security gas mask with integrated 'Compli-o-nator 3000' device. Plays over a dozen pre-recorded compliance phrases designed to get scumbags to stand still whilst you tase them. Do not tamper with the device."
actions_types = list(/datum/action/item_action/halt, /datum/action/item_action/adjust)
icon_state = "sechailer"
item_state = "sechailer"
diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm
index 667bc7fc78..c0d41aeb68 100644
--- a/code/modules/clothing/masks/miscellaneous.dm
+++ b/code/modules/clothing/masks/miscellaneous.dm
@@ -123,7 +123,7 @@
return message
/obj/item/clothing/mask/frog/cursed
- flags_1 = NODROP_1 //reee!!
+ item_flags = NODROP //reee!!
/obj/item/clothing/mask/frog/cursed/attack_self(mob/user)
return //no voicebox to alter.
diff --git a/code/modules/clothing/outfits/event.dm b/code/modules/clothing/outfits/event.dm
index 37a06046b5..347fc5c2d7 100644
--- a/code/modules/clothing/outfits/event.dm
+++ b/code/modules/clothing/outfits/event.dm
@@ -26,5 +26,5 @@
var/obj/item/storage/backpack/bag = H.back
var/obj/item/a_gift/gift = new(H)
- while(bag.SendSignal(COMSIG_TRY_STORAGE_INSERT, gift, null, TRUE, FALSE))
+ while(SEND_SIGNAL(bag, COMSIG_TRY_STORAGE_INSERT, gift, null, TRUE, FALSE))
gift = new(H)
diff --git a/code/modules/clothing/outfits/standard.dm b/code/modules/clothing/outfits/standard.dm
index 88752f7415..88b51963e5 100644
--- a/code/modules/clothing/outfits/standard.dm
+++ b/code/modules/clothing/outfits/standard.dm
@@ -182,11 +182,11 @@
for(var/obj/item/briefcase_item in sec_briefcase)
qdel(briefcase_item)
for(var/i = 3 to 0 step -1)
- sec_briefcase.SendSignal(COMSIG_TRY_STORAGE_INSERT, new /obj/item/stack/spacecash/c1000, null, TRUE, TRUE)
- sec_briefcase.SendSignal(COMSIG_TRY_STORAGE_INSERT, new /obj/item/gun/energy/kinetic_accelerator/crossbow, null, TRUE, TRUE)
- sec_briefcase.SendSignal(COMSIG_TRY_STORAGE_INSERT, new /obj/item/gun/ballistic/revolver/mateba, null, TRUE, TRUE)
- sec_briefcase.SendSignal(COMSIG_TRY_STORAGE_INSERT, new /obj/item/ammo_box/a357, null, TRUE, TRUE)
- sec_briefcase.SendSignal(COMSIG_TRY_STORAGE_INSERT, new /obj/item/grenade/plastic/x4, null, TRUE, TRUE)
+ SEND_SIGNAL(sec_briefcase, COMSIG_TRY_STORAGE_INSERT, new /obj/item/stack/spacecash/c1000, null, TRUE, TRUE)
+ SEND_SIGNAL(sec_briefcase, COMSIG_TRY_STORAGE_INSERT, new /obj/item/gun/energy/kinetic_accelerator/crossbow, null, TRUE, TRUE)
+ SEND_SIGNAL(sec_briefcase, COMSIG_TRY_STORAGE_INSERT, new /obj/item/gun/ballistic/revolver/mateba, null, TRUE, TRUE)
+ SEND_SIGNAL(sec_briefcase, COMSIG_TRY_STORAGE_INSERT, new /obj/item/ammo_box/a357, null, TRUE, TRUE)
+ SEND_SIGNAL(sec_briefcase, COMSIG_TRY_STORAGE_INSERT, new /obj/item/grenade/plastic/x4, null, TRUE, TRUE)
var/obj/item/pda/heads/pda = H.belt
pda.owner = H.real_name
diff --git a/code/modules/clothing/outfits/vr.dm b/code/modules/clothing/outfits/vr.dm
index 48b69c9568..cd8930641f 100644
--- a/code/modules/clothing/outfits/vr.dm
+++ b/code/modules/clothing/outfits/vr.dm
@@ -27,7 +27,7 @@
/datum/outfit/vr/syndicate/post_equip(mob/living/carbon/human/H)
. = ..()
- var/obj/item/radio/uplink/U = new /obj/item/radio/uplink/nuclear_restricted(H, H.key, 80)
+ var/obj/item/uplink/U = new /obj/item/uplink/nuclear_restricted(H, H.key, 80)
H.equip_to_slot_or_del(U, SLOT_IN_BACKPACK)
var/obj/item/implant/weapons_auth/W = new/obj/item/implant/weapons_auth(H)
W.implant(H)
diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm
index 9f0d8358ac..c81505d8e8 100644
--- a/code/modules/clothing/shoes/miscellaneous.dm
+++ b/code/modules/clothing/shoes/miscellaneous.dm
@@ -1,5 +1,5 @@
/obj/item/clothing/shoes/proc/step_action() //this was made to rewrite clown shoes squeaking
- SendSignal(COMSIG_SHOES_STEP_ACTION)
+ SEND_SIGNAL(src, COMSIG_SHOES_STEP_ACTION)
/obj/item/clothing/shoes/sneakers/mime
name = "mime shoes"
@@ -64,7 +64,7 @@
/obj/item/clothing/shoes/galoshes/dry/step_action()
var/turf/open/t_loc = get_turf(src)
- t_loc.SendSignal(COMSIG_TURF_MAKE_DRY, TURF_WET_WATER, TRUE, INFINITY)
+ SEND_SIGNAL(t_loc, COMSIG_TURF_MAKE_DRY, TURF_WET_WATER, TRUE, INFINITY)
/obj/item/clothing/shoes/clown_shoes
desc = "The prankster's standard-issue clowning shoes. Damn, they're huge!"
@@ -82,12 +82,12 @@
/obj/item/clothing/shoes/clown_shoes/equipped(mob/user, slot)
. = ..()
if(user.mind && user.mind.assigned_role == "Clown")
- user.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "noshoes")
+ SEND_SIGNAL(user, COMSIG_CLEAR_MOOD_EVENT, "noshoes")
/obj/item/clothing/shoes/clown_shoes/dropped(mob/user)
. = ..()
if(user.mind && user.mind.assigned_role == "Clown")
- user.SendSignal(COMSIG_ADD_MOOD_EVENT, "noshoes", /datum/mood_event/noshoes)
+ SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT, "noshoes", /datum/mood_event/noshoes)
/obj/item/clothing/shoes/clown_shoes/jester
name = "jester shoes"
@@ -157,7 +157,7 @@
icon_state = "cultalt"
/obj/item/clothing/shoes/cult/alt/ghost
- flags_1 = NODROP_1|DROPDEL_1
+ item_flags = NODROP | DROPDEL
/obj/item/clothing/shoes/cyborg
name = "cyborg boots"
diff --git a/code/modules/clothing/spacesuits/chronosuit.dm b/code/modules/clothing/spacesuits/chronosuit.dm
index b3b74446ec..d0820304fe 100644
--- a/code/modules/clothing/spacesuits/chronosuit.dm
+++ b/code/modules/clothing/spacesuits/chronosuit.dm
@@ -98,7 +98,7 @@
teleporting = 0
for(var/obj/item/I in user.held_items)
if(I in hands_nodrop)
- I.flags_1 &= ~NODROP_1
+ I.item_flags &= ~NODROP
if(camera)
camera.remove_target_ui()
camera.forceMove(user)
@@ -133,9 +133,9 @@
hands_nodrop = list()
for(var/obj/item/I in user.held_items)
- if(!(I.flags_1 & NODROP_1))
+ if(!(I.item_flags & NODROP))
hands_nodrop += I
- I.flags_1 |= NODROP_1
+ I.item_flags |= NODROP
user.animate_movement = NO_STEPS
user.changeNext_move(8 + phase_in_ds)
user.notransform = 1
@@ -194,9 +194,9 @@
if(user.head && istype(user.head, /obj/item/clothing/head/helmet/space/chronos))
to_chat(user, "\[ ok \] Mounting /dev/helm")
helmet = user.head
- helmet.flags_1 |= NODROP_1
+ helmet.item_flags |= NODROP
helmet.suit = src
- src.flags_1 |= NODROP_1
+ src.item_flags |= NODROP
to_chat(user, "\[ ok \] Starting brainwave scanner")
to_chat(user, "\[ ok \] Starting ui display driver")
to_chat(user, "\[ ok \] Initializing chronowalk4-view")
@@ -215,7 +215,7 @@
activating = 1
var/mob/living/carbon/human/user = src.loc
var/hard_landing = teleporting && force
- src.flags_1 &= ~NODROP_1
+ item_flags &= ~NODROP
cooldown = world.time + cooldowntime * 1.5
activated = 0
activating = 0
@@ -236,7 +236,7 @@
to_chat(user, "\[ ok \] Unmounting /dev/helmet")
to_chat(user, "logout")
if(helmet)
- helmet.flags_1 &= ~NODROP_1
+ helmet.item_flags &= ~NODROP
helmet.suit = null
helmet = null
if(camera)
diff --git a/code/modules/clothing/spacesuits/flightsuit.dm b/code/modules/clothing/spacesuits/flightsuit.dm
index d117bf482b..176bc81665 100644
--- a/code/modules/clothing/spacesuits/flightsuit.dm
+++ b/code/modules/clothing/spacesuits/flightsuit.dm
@@ -302,7 +302,7 @@
if(suit && !suit.deployedshoes && (brake || stabilizer))
brake = FALSE
stabilizer = FALSE
- usermessage("Warning: Sensor data is not being recieved from flight shoes. Stabilizers and airbrake modules deactivated!", "boldwarning")
+ usermessage("Warning: Sensor data is not being received from flight shoes. Stabilizers and airbrake modules deactivated!", "boldwarning")
/obj/item/flightpack/process()
@@ -897,7 +897,7 @@
usermessage("You're already wearing something on your back!", "boldwarning")
return FALSE
user.equip_to_slot_if_possible(pack,SLOT_BACK,0,0,1)
- pack.flags_1 |= NODROP_1
+ pack.item_flags |= NODROP
resync()
user.visible_message("A [pack.name] extends from [user]'s [name] and clamps to [user.p_their()] back!")
user.update_inv_wear_suit()
@@ -911,7 +911,7 @@
return FALSE
if(pack.flight && forced)
pack.disable_flight(1)
- pack.flags_1 &= ~NODROP_1
+ pack.item_flags &= ~NODROP
resync()
if(user)
user.transferItemToLoc(pack, src, TRUE)
@@ -935,14 +935,14 @@
usermessage("You're already wearing something on your feet!", "boldwarning")
return FALSE
user.equip_to_slot_if_possible(shoes,SLOT_SHOES,0,0,1)
- shoes.flags_1 |= NODROP_1
+ shoes.item_flags |= NODROP
user.visible_message("[user]'s [name] extends a pair of [shoes.name] over [user.p_their()] feet!")
user.update_inv_wear_suit()
playsound(src.loc, 'sound/mecha/mechmove03.ogg', 50, 1)
deployedshoes = TRUE
/obj/item/clothing/suit/space/hardsuit/flightsuit/proc/retract_flightshoes(forced = FALSE)
- shoes.flags_1 &= ~NODROP_1
+ shoes.item_flags &= ~NODROP
playsound(src, 'sound/mecha/mechmove03.ogg', 50, 1)
if(user)
user.transferItemToLoc(shoes, src, TRUE)
diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm
index 0667f2be6f..2e5896098f 100644
--- a/code/modules/clothing/spacesuits/hardsuit.dm
+++ b/code/modules/clothing/spacesuits/hardsuit.dm
@@ -713,7 +713,7 @@
icon_state = "ert_medical"
item_state = "ert_medical"
item_color = "ert_medical"
- flags_1 = NODROP_1 //Dont want people changing into the other teams gear
+ item_flags = NODROP //Dont want people changing into the other teams gear
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/ctf
armor = list("melee" = 0, "bullet" = 30, "laser" = 30, "energy" = 30, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 95, "acid" = 95)
slowdown = 0
diff --git a/code/modules/clothing/spacesuits/miscellaneous.dm b/code/modules/clothing/spacesuits/miscellaneous.dm
index f3975d1f81..a4b82c8234 100644
--- a/code/modules/clothing/spacesuits/miscellaneous.dm
+++ b/code/modules/clothing/spacesuits/miscellaneous.dm
@@ -165,7 +165,7 @@ Contains:
item_color = "ert_commander"
armor = list("melee" = 65, "bullet" = 50, "laser" = 50, "energy" = 50, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 80)
strip_delay = 130
- flags_1 = NODROP_1
+ item_flags = NODROP
brightness_on = 7
/obj/item/clothing/suit/space/hardsuit/ert
@@ -265,7 +265,7 @@ Contains:
armor = list("melee" = -20, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 75, "fire" = 60, "acid" = 75) //As whimpy as a space carp
brightness_on = 0 //luminosity when on
actions_types = list()
- flags_1 = NODROP_1
+ item_flags = NODROP
/obj/item/clothing/suit/space/hardsuit/carp
diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm
index ea300aaf13..f73ca30fb0 100644
--- a/code/modules/clothing/suits/armor.dm
+++ b/code/modules/clothing/suits/armor.dm
@@ -53,7 +53,7 @@
/obj/item/clothing/suit/armor/hos/trenchcoat
name = "armored trenchoat"
- desc = "A trenchcoat enchanced with a special lightweight kevlar. The epitome of tactical plainclothes."
+ desc = "A trenchcoat enhanced with a special lightweight kevlar. The epitome of tactical plainclothes."
icon_state = "hostrench"
item_state = "hostrench"
flags_inv = 0
diff --git a/code/modules/clothing/suits/bio.dm b/code/modules/clothing/suits/bio.dm
index d38c625ee2..1c24ee17a7 100644
--- a/code/modules/clothing/suits/bio.dm
+++ b/code/modules/clothing/suits/bio.dm
@@ -2,7 +2,7 @@
/obj/item/clothing/head/bio_hood
name = "bio hood"
icon_state = "bio"
- desc = "A hood that protects the head and face from biological comtaminants."
+ desc = "A hood that protects the head and face from biological contaminants."
permeability_coefficient = 0.01
clothing_flags = THICKMATERIAL | BLOCK_GAS_SMOKE_EFFECT
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 80, "fire" = 30, "acid" = 100)
diff --git a/code/modules/clothing/suits/cloaks.dm b/code/modules/clothing/suits/cloaks.dm
index 8b87cf6f6e..85767852e4 100644
--- a/code/modules/clothing/suits/cloaks.dm
+++ b/code/modules/clothing/suits/cloaks.dm
@@ -15,7 +15,7 @@
icon_state = "golhood"
desc = "A hood for a cloak."
body_parts_covered = HEAD
- flags_1 = NODROP_1
+ item_flags = NODROP
flags_inv = HIDEHAIR|HIDEEARS
/obj/item/clothing/neck/cloak/suicide_act(mob/user)
diff --git a/code/modules/clothing/suits/labcoat.dm b/code/modules/clothing/suits/labcoat.dm
index 1b28c71c4b..a598bd0959 100644
--- a/code/modules/clothing/suits/labcoat.dm
+++ b/code/modules/clothing/suits/labcoat.dm
@@ -17,13 +17,13 @@
item_state = "labcoat_cmo"
/obj/item/clothing/suit/toggle/labcoat/emt
- name = "EMT's jacket"
+ name = "\improper EMT's jacket"
desc = "A dark blue jacket with reflective strips for emergency medical technicians."
icon_state = "labcoat_emt"
item_state = "labcoat_cmo"
/obj/item/clothing/suit/toggle/labcoat/mad
- name = "\improper The Mad's labcoat"
+ name = "\proper The Mad's labcoat"
desc = "It makes you look capable of konking someone on the noggin and shooting them into space."
icon_state = "labgreen"
item_state = "labgreen"
diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm
index f6cb6a44ad..858f65b64c 100644
--- a/code/modules/clothing/suits/miscellaneous.dm
+++ b/code/modules/clothing/suits/miscellaneous.dm
@@ -222,7 +222,7 @@
desc = "Forced to live on your shameful acting as a fake Mexican, you and your poncho have grown inseparable. Literally."
icon_state = "ponchoshame"
item_state = "ponchoshame"
- flags_1 = NODROP_1
+ item_flags = NODROP
/obj/item/clothing/suit/whitedress
name = "white dress"
@@ -311,7 +311,7 @@
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR
/obj/item/clothing/suit/security/officer/russian
- name = "russian officer's jacket"
+ name = "\improper Russian officer's jacket"
desc = "This jacket is for those special occasions when a russian officer isn't required to wear their armor."
icon_state = "officertanjacket"
item_state = "officertanjacket"
@@ -594,3 +594,12 @@
icon = 'icons/obj/clothing/clockwork_garb.dmi'
icon_state = "clockwork_cuirass_old"
armor = list("melee" = 5, "bullet" = 0, "laser" = -5, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = 20)
+
+/obj/item/clothing/suit/ghost_sheet
+ name = "ghost sheet"
+ desc = "The hands float by themselves, so it's extra spooky."
+ icon_state = "ghost_sheet"
+ item_state = "ghost_sheet_item"
+ w_class = WEIGHT_CLASS_TINY
+ flags_inv = HIDEGLOVES|HIDEMASK|HIDEEARS|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR
+ alternate_worn_layer = UNDER_HEAD_LAYER
diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm
index 0ac6dba14e..59f7a1c387 100644
--- a/code/modules/clothing/suits/wiz_robe.dm
+++ b/code/modules/clothing/suits/wiz_robe.dm
@@ -81,7 +81,7 @@
/obj/item/clothing/suit/wizrobe/yellow
name = "yellow wizard robe"
- desc = "A magnificant yellow gem-lined robe that seems to radiate power."
+ desc = "A magnificent yellow gem-lined robe that seems to radiate power."
icon_state = "yellowwizard"
item_state = "yellowwizrobe"
diff --git a/code/modules/clothing/under/accessories.dm b/code/modules/clothing/under/accessories.dm
index 235eac6704..8d250ab766 100644
--- a/code/modules/clothing/under/accessories.dm
+++ b/code/modules/clothing/under/accessories.dm
@@ -14,7 +14,7 @@
/obj/item/clothing/accessory/proc/attach(obj/item/clothing/under/U, user)
GET_COMPONENT(storage, /datum/component/storage)
if(storage)
- if(U.SendSignal(COMSIG_CONTAINS_STORAGE))
+ if(SEND_SIGNAL(U, COMSIG_CONTAINS_STORAGE))
return FALSE
U.TakeComponent(storage)
detached_pockets = storage
diff --git a/code/modules/clothing/under/color.dm b/code/modules/clothing/under/color.dm
index afb9bff1c1..324c16fec7 100644
--- a/code/modules/clothing/under/color.dm
+++ b/code/modules/clothing/under/color.dm
@@ -22,7 +22,7 @@
resistance_flags = NONE
/obj/item/clothing/under/color/black/ghost
- flags_1 = NODROP_1|DROPDEL_1
+ item_flags = NODROP | DROPDEL
/obj/item/clothing/under/color/grey
name = "grey jumpsuit"
diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm
index 8c85f414e6..57ead15de8 100644
--- a/code/modules/clothing/under/miscellaneous.dm
+++ b/code/modules/clothing/under/miscellaneous.dm
@@ -38,7 +38,7 @@
can_adjust = FALSE
/obj/item/clothing/under/roman
- name = "roman armor"
+ name = "\improper Roman armor"
desc = "Ancient Roman armor. Made of metallic and leather straps."
icon_state = "roman"
item_color = "roman"
@@ -388,7 +388,7 @@
/obj/item/clothing/under/kilt/highlander
desc = "You're the only one worthy of this kilt."
- flags_1 = NODROP_1
+ item_flags = NODROP
/obj/item/clothing/under/sexymime
name = "sexy mime outfit"
@@ -667,7 +667,7 @@
icon = 'icons/obj/device.dmi'
/obj/item/clothing/under/rank/security/navyblue/russian
- name = "russian officer's uniform"
+ name = "\improper Russian officer's uniform"
desc = "The latest in fashionable russian outfits."
icon_state = "hostanclothes"
item_state = "hostanclothes"
diff --git a/code/modules/crafting/craft.dm b/code/modules/crafting/craft.dm
index 7d309bd9c7..ea1db981e5 100644
--- a/code/modules/crafting/craft.dm
+++ b/code/modules/crafting/craft.dm
@@ -100,6 +100,7 @@
.["other"][I.type] += S.amount
else if(I.tool_behaviour)
.["tool_behaviour"] += I.tool_behaviour
+ .["other"][I.type] += 1
else
if(istype(I, /obj/item/reagent_containers))
var/obj/item/reagent_containers/RC = I
@@ -182,7 +183,7 @@
After its done loop over deletion list and delete all the shit that wasnt taken by parts loop
- del_reqs return the list of parts resulting object will recieve as argument of CheckParts proc, on the atom level it will add them all to the contents, on all other levels it calls ..() and does whatever is needed afterwards but from contents list already
+ del_reqs return the list of parts resulting object will receive as argument of CheckParts proc, on the atom level it will add them all to the contents, on all other levels it calls ..() and does whatever is needed afterwards but from contents list already
*/
/datum/personal_crafting/proc/del_reqs(datum/crafting_recipe/R, mob/user)
diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm
index 5122574e58..1ffda7413e 100644
--- a/code/modules/crafting/recipes.dm
+++ b/code/modules/crafting/recipes.dm
@@ -669,3 +669,11 @@
tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
reqs = list(/obj/item/clothing/glasses/sunglasses/reagent = 1)
category = CAT_CLOTHING
+
+/datum/crafting_recipe/ghostsheet
+ name = "Ghost Sheet"
+ result = /obj/item/clothing/suit/ghost_sheet
+ time = 5
+ tools = list(TOOL_WIRECUTTER)
+ reqs = list(/obj/item/bedsheet = 1)
+ category = CAT_CLOTHING
diff --git a/code/modules/detectivework/evidence.dm b/code/modules/detectivework/evidence.dm
index d17090816c..a97758e294 100644
--- a/code/modules/detectivework/evidence.dm
+++ b/code/modules/detectivework/evidence.dm
@@ -40,8 +40,8 @@
return
if(!isturf(I.loc)) //If it isn't on the floor. Do some checks to see if it's in our hands or a box. Otherwise give up.
- if(I.loc.SendSignal(COMSIG_CONTAINS_STORAGE)) //in a container.
- I.loc.SendSignal(COMSIG_TRY_STORAGE_TAKE, I, src)
+ if(SEND_SIGNAL(I.loc, COMSIG_CONTAINS_STORAGE)) //in a container.
+ SEND_SIGNAL(I.loc, COMSIG_TRY_STORAGE_TAKE, I, src)
if(!user.dropItemToGround(I))
return
diff --git a/code/modules/detectivework/footprints_and_rag.dm b/code/modules/detectivework/footprints_and_rag.dm
index 5f4603e35e..50a845a689 100644
--- a/code/modules/detectivework/footprints_and_rag.dm
+++ b/code/modules/detectivework/footprints_and_rag.dm
@@ -12,7 +12,7 @@
w_class = WEIGHT_CLASS_TINY
icon = 'icons/obj/toy.dmi'
icon_state = "rag"
- flags_1 = NOBLUDGEON_1
+ item_flags = NOBLUDGEON
container_type = OPENCONTAINER
amount_per_transfer_from_this = 5
possible_transfer_amounts = list()
@@ -46,5 +46,5 @@
user.visible_message("[user] starts to wipe down [A] with [src]!", "You start to wipe down [A] with [src]...")
if(do_after(user,30, target = A))
user.visible_message("[user] finishes wiping off [A]!", "You finish wiping off [A].")
- A.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_MEDIUM)
+ SEND_SIGNAL(A, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_MEDIUM)
return
diff --git a/code/modules/detectivework/scanner.dm b/code/modules/detectivework/scanner.dm
index c323f1edf2..e8847adb11 100644
--- a/code/modules/detectivework/scanner.dm
+++ b/code/modules/detectivework/scanner.dm
@@ -11,7 +11,8 @@
item_state = "electronic"
lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
- flags_1 = CONDUCT_1 | NOBLUDGEON_1
+ flags_1 = CONDUCT_1
+ item_flags = NOBLUDGEON
slot_flags = ITEM_SLOT_BELT
var/scanning = 0
var/list/log = list()
@@ -200,4 +201,4 @@
return
to_chat(user, "Scanner Report")
for(var/iterLog in log)
- to_chat(user, iterLog)
\ No newline at end of file
+ to_chat(user, iterLog)
diff --git a/code/modules/events/aurora_caelus.dm b/code/modules/events/aurora_caelus.dm
index 745e8a6ac3..89a84d3494 100644
--- a/code/modules/events/aurora_caelus.dm
+++ b/code/modules/events/aurora_caelus.dm
@@ -14,8 +14,8 @@
announceWhen = 1
startWhen = 9
endWhen = 50
- var/list/aurora_colors = list("#A2FF80", "#A2FF8B", "#A2FF96", "#A2FFA5", "#A2FFB6", "#A2FFC7", "#A2FFDE")
- var/aurora_progress = 0 //this cycles from 1 to 7, slowly changing colors from gentle green to gentle blue
+ var/list/aurora_colors = list("#A2FF80", "#A2FF8B", "#A2FF96", "#A2FFA5", "#A2FFB6", "#A2FFC7", "#A2FFDE", "#A2FFEE")
+ var/aurora_progress = 0 //this cycles from 1 to 8, slowly changing colors from gentle green to gentle blue
/datum/round_event/aurora_caelus/announce()
priority_announce("[station_name()]: A harmless cloud of ions is approaching your station, and will exhaust their energy battering the hull. Nanotrasen has approved a short break for all employees to relax and observe this very rare event. During this time, starlight will be bright but gentle, shifting between quiet green and blue colors. Any staff who would like to view these lights for themselves may proceed to the area nearest to them with viewing ports to open space. We hope you enjoy the lights.",
diff --git a/code/modules/events/disease_outbreak.dm b/code/modules/events/disease_outbreak.dm
index 81e93244ea..f09c0481f6 100644
--- a/code/modules/events/disease_outbreak.dm
+++ b/code/modules/events/disease_outbreak.dm
@@ -61,7 +61,7 @@
else
D = new virus_type()
else
- D = make_virus(max_severity, max_severity)
+ D = new /datum/disease/advance/random(max_severity, max_severity)
D.carrier = TRUE
H.ForceContractDisease(D, FALSE, TRUE)
@@ -73,23 +73,3 @@
message_admins("An event has triggered a random advanced virus outbreak on [ADMIN_LOOKUPFLW(H)]! It has these symptoms: [english_list(name_symptoms)]")
log_game("An event has triggered a random advanced virus outbreak on [key_name(H)]! It has these symptoms: [english_list(name_symptoms)]")
break
-
-/datum/round_event/disease_outbreak/proc/make_virus(max_symptoms, max_level)
- if(max_symptoms > VIRUS_SYMPTOM_LIMIT)
- max_symptoms = VIRUS_SYMPTOM_LIMIT
- var/datum/disease/advance/A = new /datum/disease/advance()
- var/list/datum/symptom/possible_symptoms = list()
- for(var/symptom in subtypesof(/datum/symptom))
- var/datum/symptom/S = symptom
- if(initial(S.level) > max_level)
- continue
- if(initial(S.level) <= 0) //unobtainable symptoms
- continue
- possible_symptoms += S
- for(var/i in 1 to max_symptoms)
- var/datum/symptom/chosen_symptom = pick_n_take(possible_symptoms)
- if(chosen_symptom)
- var/datum/symptom/S = new chosen_symptom
- A.symptoms += S
- A.Refresh() //just in case someone already made and named the same disease
- return A
diff --git a/code/modules/events/wizard/curseditems.dm b/code/modules/events/wizard/curseditems.dm
index 180589b4f1..a6e08fbd8c 100644
--- a/code/modules/events/wizard/curseditems.dm
+++ b/code/modules/events/wizard/curseditems.dm
@@ -50,7 +50,7 @@
var/obj/item/I = new J //dumb but required because of byond throwing a fit anytime new gets too close to a list
H.dropItemToGround(H.get_item_by_slot(i), TRUE)
H.equip_to_slot_or_del(I, i)
- I.flags_1 |= NODROP_1 | DROPDEL_1
+ I.item_flags |= NODROP | DROPDEL
I.name = "cursed " + I.name
for(var/mob/living/carbon/human/H in GLOB.alive_mob_list)
diff --git a/code/modules/events/wizard/rpgloot.dm b/code/modules/events/wizard/rpgloot.dm
index 08cfe7aeea..d94ee0e212 100644
--- a/code/modules/events/wizard/rpgloot.dm
+++ b/code/modules/events/wizard/rpgloot.dm
@@ -16,7 +16,7 @@
GET_COMPONENT_FROM(STR, /datum/component/storage, S)
if(prob(upgrade_scroll_chance) && S.contents.len < STR.max_items && !S.invisibility)
var/obj/item/upgradescroll/scroll = new
- S.SendSignal(COMSIG_TRY_STORAGE_INSERT, scroll, null, TRUE, TRUE)
+ SEND_SIGNAL(S, COMSIG_TRY_STORAGE_INSERT, scroll, null, TRUE, TRUE)
upgrade_scroll_chance = max(0,upgrade_scroll_chance-100)
upgrade_scroll_chance += 25
@@ -77,7 +77,7 @@
attached = null
/datum/rpg_loot/proc/randomise()
- var/static/list/prefixespositive = list("greater", "major", "blessed", "superior", "enpowered", "honed", "true", "glorious", "robust")
+ var/static/list/prefixespositive = list("greater", "major", "blessed", "superior", "empowered", "honed", "true", "glorious", "robust")
var/static/list/prefixesnegative = list("lesser", "minor", "blighted", "inferior", "enfeebled", "rusted", "unsteady", "tragic", "gimped")
var/static/list/suffixes = list("orc slaying", "elf slaying", "corgi slaying", "strength", "dexterity", "constitution", "intelligence", "wisdom", "charisma", "the forest", "the hills", "the plains", "the sea", "the sun", "the moon", "the void", "the world", "the fool", "many secrets", "many tales", "many colors", "rending", "sundering", "the night", "the day")
diff --git a/code/modules/fields/gravity.dm b/code/modules/fields/gravity.dm
new file mode 100644
index 0000000000..8b16bb6487
--- /dev/null
+++ b/code/modules/fields/gravity.dm
@@ -0,0 +1,17 @@
+/datum/proximity_monitor/advanced/gravity
+ name = "modified gravity zone"
+ setup_field_turfs = TRUE
+ var/gravity_value = 0
+ var/list/grav_components = list()
+ field_shape = FIELD_SHAPE_RADIUS_SQUARE
+
+/datum/proximity_monitor/advanced/gravity/setup_field_turf(turf/T)
+ . = ..()
+ grav_components[T] = T.AddComponent(/datum/component/forced_gravity,gravity_value)
+
+/datum/proximity_monitor/advanced/gravity/cleanup_field_turf(turf/T)
+ . = ..()
+ var/datum/component/forced_gravity/G = grav_components[T]
+ grav_components -= T
+ if(G)
+ qdel(G)
\ No newline at end of file
diff --git a/code/modules/fields/turf_objects.dm b/code/modules/fields/turf_objects.dm
index 7d7454f46a..d37036d83c 100644
--- a/code/modules/fields/turf_objects.dm
+++ b/code/modules/fields/turf_objects.dm
@@ -6,7 +6,7 @@
icon_state = null
alpha = 0
invisibility = INVISIBILITY_ABSTRACT
- flags_1 = ABSTRACT_1|ON_BORDER_1
+ flags_1 = ON_BORDER_1
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
var/datum/proximity_monitor/advanced/parent = null
diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm
index 1ade5070a7..a21747837b 100644
--- a/code/modules/flufftext/Hallucination.dm
+++ b/code/modules/flufftext/Hallucination.dm
@@ -915,7 +915,7 @@ GLOBAL_LIST_INIT(hallucination_list, list(
/datum/hallucination/fake_alert/New(mob/living/carbon/C, forced = TRUE, specific, duration = 150)
set waitfor = FALSE
..()
- var/alert_type = pick("not_enough_oxy","not_enough_tox","not_enough_co2","too_much_oxy","too_much_co2","too_much_tox","newlaw","nutrition","charge","weightless","fire","locked","hacked","temphot","tempcold","pressure")
+ var/alert_type = pick("not_enough_oxy","not_enough_tox","not_enough_co2","too_much_oxy","too_much_co2","too_much_tox","newlaw","nutrition","charge","gravity","fire","locked","hacked","temphot","tempcold","pressure")
if(specific)
alert_type = specific
feedback_details += "Type: [alert_type]"
@@ -937,7 +937,7 @@ GLOBAL_LIST_INIT(hallucination_list, list(
target.throw_alert(alert_type, /obj/screen/alert/fat, override = TRUE)
else
target.throw_alert(alert_type, /obj/screen/alert/starving, override = TRUE)
- if("weightless")
+ if("gravity")
target.throw_alert(alert_type, /obj/screen/alert/weightless, override = TRUE)
if("fire")
target.throw_alert(alert_type, /obj/screen/alert/fire, override = TRUE)
diff --git a/code/modules/food_and_drinks/drinks/drinks.dm b/code/modules/food_and_drinks/drinks/drinks.dm
index dc903dce85..d84deb8132 100644
--- a/code/modules/food_and_drinks/drinks/drinks.dm
+++ b/code/modules/food_and_drinks/drinks/drinks.dm
@@ -250,6 +250,11 @@
list_reagents = list("beer" = 30)
foodtype = GRAIN | ALCOHOL
+/obj/item/reagent_containers/food/drinks/beer/light
+ name = "Carp Lite"
+ desc = "Brewed with \"Pure Ice Asteroid Spring Water\"."
+ list_reagents = list("light_beer" = 30)
+
/obj/item/reagent_containers/food/drinks/ale
name = "Magm-Ale"
desc = "A true dorf's drink of choice."
diff --git a/code/modules/food_and_drinks/food.dm b/code/modules/food_and_drinks/food.dm
index 375ce80f96..f9d9a3d85a 100644
--- a/code/modules/food_and_drinks/food.dm
+++ b/code/modules/food_and_drinks/food.dm
@@ -23,15 +23,15 @@
if(foodtype & H.dna.species.toxic_food)
to_chat(H,"What the hell was that thing?!")
H.adjust_disgust(25 + 30 * fraction)
- H.SendSignal(COMSIG_ADD_MOOD_EVENT, "toxic_food", /datum/mood_event/disgusting_food)
+ SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "toxic_food", /datum/mood_event/disgusting_food)
else if(foodtype & H.dna.species.disliked_food)
to_chat(H,"That didn't taste very good...")
H.adjust_disgust(11 + 15 * fraction)
- H.SendSignal(COMSIG_ADD_MOOD_EVENT, "gross_food", /datum/mood_event/gross_food)
+ SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "gross_food", /datum/mood_event/gross_food)
else if(foodtype & H.dna.species.liked_food)
to_chat(H,"I love this taste!")
H.adjust_disgust(-5 + -2.5 * fraction)
- H.SendSignal(COMSIG_ADD_MOOD_EVENT, "fav_food", /datum/mood_event/favorite_food)
+ SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "fav_food", /datum/mood_event/favorite_food)
else
if(foodtype & H.dna.species.toxic_food)
to_chat(H, "You don't feel so good...")
diff --git a/code/modules/food_and_drinks/food/customizables.dm b/code/modules/food_and_drinks/food/customizables.dm
index 3df4ca4bd0..e98aae37e3 100644
--- a/code/modules/food_and_drinks/food/customizables.dm
+++ b/code/modules/food_and_drinks/food/customizables.dm
@@ -118,8 +118,8 @@
if(INGREDIENTS_STACKPLUSTOP)
filling.pixel_x = rand(-1,1)
filling.pixel_y = 2 * ingredients.len - 1
- if(our_overlays)
- our_overlays.Cut(ingredients.len) //???, add overlay calls later in this proc will queue the compile if necessary
+ if(overlays)
+ overlays -= overlays[ingredients.len]
var/mutable_appearance/TOP = mutable_appearance(icon, "[icon_state]_top")
TOP.pixel_y = 2 * ingredients.len + 3
add_overlay(filling)
diff --git a/code/modules/food_and_drinks/food/snacks.dm b/code/modules/food_and_drinks/food/snacks.dm
index 85371e0875..a74c7c6f69 100644
--- a/code/modules/food_and_drinks/food/snacks.dm
+++ b/code/modules/food_and_drinks/food/snacks.dm
@@ -109,7 +109,7 @@
M.satiety -= junkiness
playsound(M.loc,'sound/items/eatfood.ogg', rand(10,50), 1)
if(reagents.total_volume)
- SendSignal(COMSIG_FOOD_EATEN, M, user)
+ SEND_SIGNAL(src, COMSIG_FOOD_EATEN, M, user)
var/fraction = min(bitesize / reagents.total_volume, 1)
reagents.reaction(M, INGEST, fraction)
reagents.trans_to(M, bitesize)
diff --git a/code/modules/food_and_drinks/food/snacks_pastry.dm b/code/modules/food_and_drinks/food/snacks_pastry.dm
index 01105cf6d3..80aa588bae 100644
--- a/code/modules/food_and_drinks/food/snacks_pastry.dm
+++ b/code/modules/food_and_drinks/food/snacks_pastry.dm
@@ -406,8 +406,8 @@
name = "stack of pancakes"
else
name = initial(name)
- if(contents.len < LAZYLEN(our_overlays))
- cut_overlay(our_overlays[our_overlays.len])
+ if(contents.len < LAZYLEN(overlays))
+ overlays-=overlays[overlays.len]
/obj/item/reagent_containers/food/snacks/pancakes/examine(mob/user)
var/ingredients_listed = ""
diff --git a/code/modules/food_and_drinks/food/snacks_pie.dm b/code/modules/food_and_drinks/food/snacks_pie.dm
index 5efcb98faf..04177783e6 100644
--- a/code/modules/food_and_drinks/food/snacks_pie.dm
+++ b/code/modules/food_and_drinks/food/snacks_pie.dm
@@ -56,7 +56,7 @@
if(!H.creamed) // one layer at a time
H.add_overlay(creamoverlay)
H.creamed = TRUE
- H.SendSignal(COMSIG_ADD_MOOD_EVENT, "creampie", /datum/mood_event/creampie)
+ SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "creampie", /datum/mood_event/creampie)
qdel(src)
/obj/item/reagent_containers/food/snacks/pie/cream/nostun
diff --git a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm
index bdcc8e14ac..5e7a3db504 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm
@@ -95,7 +95,7 @@ God bless America.
else if(default_deconstruction_screwdriver(user, "fryer_off", "fryer_off" ,I)) //where's the open maint panel icon?!
return
else
- if(is_type_in_typecache(I, deepfry_blacklisted_items) || (I.flags_1 & (ABSTRACT_1 | NODROP_1 | DROPDEL_1)))
+ if(is_type_in_typecache(I, deepfry_blacklisted_items) || (I.item_flags & (ABSTRACT | NODROP | DROPDEL)))
return ..()
else if(!frying && user.transferItemToLoc(I, src))
to_chat(user, "You put [I] into [src].")
diff --git a/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm b/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm
index 42da7e226b..b1da39daf3 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm
@@ -92,7 +92,7 @@
to_chat(user, "[src] is at full capacity.")
break
else
- if(T.SendSignal(COMSIG_TRY_STORAGE_TAKE, S, src))
+ if(SEND_SIGNAL(T, COMSIG_TRY_STORAGE_TAKE, S, src))
if(stored_food[sanitize(S.name)])
stored_food[sanitize(S.name)]++
else
diff --git a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm
index d960d9945b..e6734b4b58 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm
@@ -78,7 +78,7 @@
if(!ignore_clothing)
for(var/obj/item/I in C.held_items + C.get_equipped_items())
- if(!(I.flags_1 & NODROP_1))
+ if(!(I.item_flags & NODROP))
to_chat(user, "Subject may not have abiotic items on.")
return
diff --git a/code/modules/food_and_drinks/kitchen_machinery/microwave.dm b/code/modules/food_and_drinks/kitchen_machinery/microwave.dm
index ee04e73fbe..8c4e0eaae0 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/microwave.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/microwave.dm
@@ -129,7 +129,7 @@
if (contents.len>=max_n_of_items)
to_chat(user, "[src] is full, you can't put anything in!")
return 1
- if(T.SendSignal(COMSIG_TRY_STORAGE_TAKE, S, src))
+ if(SEND_SIGNAL(T, COMSIG_TRY_STORAGE_TAKE, S, src))
loaded++
if(loaded)
diff --git a/code/modules/food_and_drinks/kitchen_machinery/processor.dm b/code/modules/food_and_drinks/kitchen_machinery/processor.dm
index 2ec1e56adb..3f917273b4 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/processor.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/processor.dm
@@ -60,7 +60,7 @@
for(var/obj/item/reagent_containers/food/snacks/S in T.contents)
var/datum/food_processor_process/P = select_recipe(S)
if(P)
- if(T.SendSignal(COMSIG_TRY_STORAGE_TAKE, S, src))
+ if(SEND_SIGNAL(T, COMSIG_TRY_STORAGE_TAKE, S, src))
loaded++
if(loaded)
@@ -106,7 +106,7 @@
for(var/O in src.contents)
var/datum/food_processor_process/P = select_recipe(O)
if (!P)
- log_admin("DEBUG: [O] in processor hasnt got a suitable recipe. How did it get in there? Please report it immediatly!!!")
+ log_admin("DEBUG: [O] in processor doesn't have a suitable recipe. How did it get in there? Please report it immediately!!!")
continue
total_time += P.time
var/offset = prob(50) ? -2 : 2
@@ -115,7 +115,7 @@
for(var/atom/movable/O in src.contents)
var/datum/food_processor_process/P = select_recipe(O)
if (!P)
- log_admin("DEBUG: [O] in processor havent suitable recipe. How do you put it in?")
+ log_admin("DEBUG: [O] in processor doesn't have a suitable recipe. How do you put it in?")
continue
process_food(P, O)
pixel_x = initial(pixel_x) //return to its spot after shaking
diff --git a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm
index 11da92dce0..79202e8190 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm
@@ -125,8 +125,8 @@
else
return TRUE
else
- if(O.loc.SendSignal(COMSIG_CONTAINS_STORAGE))
- return O.loc.SendSignal(COMSIG_TRY_STORAGE_TAKE, O, src)
+ if(SEND_SIGNAL(O.loc, COMSIG_CONTAINS_STORAGE))
+ return SEND_SIGNAL(O.loc, COMSIG_TRY_STORAGE_TAKE, O, src)
else
O.forceMove(src)
return TRUE
@@ -327,7 +327,7 @@
desc = "A refrigerated storage unit for tasty tasty alcohol."
/obj/machinery/smartfridge/drinks/accept_check(obj/item/O)
- if(!istype(O, /obj/item/reagent_containers) || (O.flags_1 & ABSTRACT_1) || !O.reagents || !O.reagents.reagent_list.len)
+ if(!istype(O, /obj/item/reagent_containers) || (O.item_flags & ABSTRACT) || !O.reagents || !O.reagents.reagent_list.len)
return FALSE
if(istype(O, /obj/item/reagent_containers/glass) || istype(O, /obj/item/reagent_containers/food/drinks) || istype(O, /obj/item/reagent_containers/food/condiment))
return TRUE
@@ -375,7 +375,7 @@
return FALSE
return TRUE
return FALSE
- if(!istype(O, /obj/item/reagent_containers) || (O.flags_1 & ABSTRACT_1))
+ if(!istype(O, /obj/item/reagent_containers) || (O.item_flags & ABSTRACT))
return FALSE
if(istype(O, /obj/item/reagent_containers/pill)) // empty pill prank ok
return TRUE
@@ -415,6 +415,7 @@
/obj/machinery/smartfridge/disks
name = "disk compartmentalizer"
desc = "A machine capable of storing a variety of disks. Denoted by most as the DSU (disk storage unit)."
+ icon_state = "disktoaster"
/obj/machinery/smartfridge/disks/accept_check(obj/item/O)
if(istype(O, /obj/item/disk/))
diff --git a/code/modules/goonchat/browserOutput.dm b/code/modules/goonchat/browserOutput.dm
index d6e3232baa..55d5a806bd 100644
--- a/code/modules/goonchat/browserOutput.dm
+++ b/code/modules/goonchat/browserOutput.dm
@@ -208,7 +208,18 @@ GLOBAL_DATUM_INIT(iconCache, /savefile, new("data/iconCache.sav")) //Cache of ic
for(var/I in targets)
//Grab us a client if possible
- var/client/C = grab_client(I)
+ var/client/C
+ if (ismob(I))
+ var/mob/M = I
+ if(M.client)
+ C = M.client
+ else if(istype(I, /client))
+ C = I
+ else if(istype(I, /datum/mind))
+ var/datum/mind/M = I
+ if(M.current && M.current.client)
+ C = M.current.client
+
if (!C)
continue
@@ -226,15 +237,3 @@ GLOBAL_DATUM_INIT(iconCache, /savefile, new("data/iconCache.sav")) //Cache of ic
// url_encode it TWICE, this way any UTF-8 characters are able to be decoded by the Javascript.
C << output(url_encode(url_encode(message)), "browseroutput:output")
-
-/proc/grab_client(target)
- if(istype(target, /client))
- return target
- else if(ismob(target))
- var/mob/M = target
- if(M.client)
- return M.client
- else if(istype(target, /datum/mind))
- var/datum/mind/M = target
- if(M.current && M.current.client)
- return M.current.client
diff --git a/code/modules/goonchat/browserassets/js/browserOutput.js b/code/modules/goonchat/browserassets/js/browserOutput.js
index 045177c92d..15265b2a93 100644
--- a/code/modules/goonchat/browserassets/js/browserOutput.js
+++ b/code/modules/goonchat/browserassets/js/browserOutput.js
@@ -95,8 +95,53 @@ if (typeof String.prototype.trim !== 'function') {
};
}
+// Linkify the contents of a node, within its parent.
+function linkify(parent, insertBefore, text) {
+ var start = 0;
+ var match;
+ var regex = /(?:(?:https?:\/\/)|(?:www\.))(?:[^ ]*?\.[^ ]*?)+[-A-Za-z0-9+&@#\/%?=~_|$!:,.;()]+/ig;
+ while ((match = regex.exec(text)) !== null) {
+ // add the unmatched text
+ parent.insertBefore(document.createTextNode(text.substring(start, match.index)), insertBefore);
+
+ var href = match[0];
+ if (!/^https?:\/\//i.test(match[0])) {
+ href = "http://" + match[0];
+ }
+
+ // add the link
+ var link = document.createElement("a");
+ link.href = href;
+ link.textContent = match[0];
+ parent.insertBefore(link, insertBefore);
+
+ start = regex.lastIndex;
+ }
+ if (start !== 0) {
+ // add the remaining text and remove the original text node
+ parent.insertBefore(document.createTextNode(text.substring(start)), insertBefore);
+ parent.removeChild(insertBefore);
+ }
+}
+
+// Recursively linkify the children of a given node.
+function linkify_node(node) {
+ var children = node.childNodes;
+ // work backwards to avoid the risk of looping forever on our own output
+ for (var i = children.length - 1; i >= 0; --i) {
+ var child = children[i];
+ if (child.nodeType == Node.TEXT_NODE) {
+ // text is to be linkified
+ linkify(node, child, child.textContent);
+ } else if (child.nodeName != "A" && child.nodeName != "a") {
+ // do not linkify existing links
+ linkify_node(child);
+ }
+ }
+}
+
//Shit fucking piece of crap that doesn't work god fuckin damn it
-function linkify(text) {
+function linkify_fallback(text) {
var rex = /((?: 0) {
diff --git a/code/modules/holiday/easter.dm b/code/modules/holiday/easter.dm
index 6cc3f56461..829cb55312 100644
--- a/code/modules/holiday/easter.dm
+++ b/code/modules/holiday/easter.dm
@@ -147,7 +147,7 @@
desc = "The Cross represents the Assistants that died for your sins."
icon_state = "hotcrossbun"
-/datum/crafting_recipe/food/food/hotcrossbun
+/datum/crafting_recipe/food/hotcrossbun
name = "Hot-Cross Bun"
reqs = list(
/obj/item/reagent_containers/food/snacks/store/bread/plain = 1,
@@ -171,7 +171,7 @@
icon_state = "briochecake_slice"
filling_color = "#FFD700"
-/datum/crafting_recipe/food/food/briochecake
+/datum/crafting_recipe/food/briochecake
name = "Brioche cake"
reqs = list(
/obj/item/reagent_containers/food/snacks/store/cake/plain = 1,
diff --git a/code/modules/holodeck/area_copy.dm b/code/modules/holodeck/area_copy.dm
index 8edc7090e4..efe7418e44 100644
--- a/code/modules/holodeck/area_copy.dm
+++ b/code/modules/holodeck/area_copy.dm
@@ -1,5 +1,8 @@
//Vars that will not be copied when using /DuplicateObject
-GLOBAL_LIST_INIT(duplicate_forbidden_vars,list("tag", "datum_components", "area","type","loc","locs","vars", "parent","parent_type", "verbs","ckey","key","power_supply","contents","reagents","stat","x","y","z","group","atmos_adjacent_turfs"))
+GLOBAL_LIST_INIT(duplicate_forbidden_vars,list(
+ "tag", "datum_components", "area", "type", "loc", "locs", "vars", "parent", "parent_type", "verbs", "ckey", "key",
+ "power_supply", "contents", "reagents", "stat", "x", "y", "z", "group", "atmos_adjacent_turfs", "comp_lookup"
+ ))
/proc/DuplicateObject(atom/original, perfectcopy = TRUE, sameloc = FALSE, atom/newloc = null, nerf = FALSE, holoitem=FALSE)
if(!original)
diff --git a/code/modules/holodeck/computer.dm b/code/modules/holodeck/computer.dm
index a1f1394e16..4590d58174 100644
--- a/code/modules/holodeck/computer.dm
+++ b/code/modules/holodeck/computer.dm
@@ -136,7 +136,7 @@
if(prob(30))
do_sparks(2, 1, T)
T.ex_act(EXPLODE_LIGHT)
- T.hotspot_expose(1000,500,1)
+ T.hotspot_expose(700,25,1)
if(!(obj_flags & EMAGGED))
for(var/item in spawned)
diff --git a/code/modules/holodeck/holo_effect.dm b/code/modules/holodeck/holo_effect.dm
index c83e7d5520..4134b0516f 100644
--- a/code/modules/holodeck/holo_effect.dm
+++ b/code/modules/holodeck/holo_effect.dm
@@ -100,6 +100,11 @@
/obj/effect/holodeck_effect/mobspawner/penguin
mobtype = /mob/living/simple_animal/pet/penguin/emperor
+
+/obj/effect/holodeck_effect/mobspawner/penguin/Initialize()
+ if(prob(1))
+ mobtype = /mob/living/simple_animal/pet/penguin/emperor/shamebrero
+ return ..()
/obj/effect/holodeck_effect/mobspawner/penguin_baby
mobtype = /mob/living/simple_animal/pet/penguin/baby
diff --git a/code/modules/hydroponics/biogenerator.dm b/code/modules/hydroponics/biogenerator.dm
index c7a775523a..e1eb976966 100644
--- a/code/modules/hydroponics/biogenerator.dm
+++ b/code/modules/hydroponics/biogenerator.dm
@@ -15,7 +15,7 @@
var/productivity = 0
var/max_items = 40
var/datum/techweb/stored_research
- var/list/show_categories = list("Food", "Botany Chemicals", "Leather and Cloth")
+ var/list/show_categories = list("Food", "Botany Chemicals", "Organic Materials")
var/list/timesFiveCategories = list("Food", "Botany Chemicals")
/obj/machinery/biogenerator/Initialize()
@@ -112,7 +112,7 @@
for(var/obj/item/reagent_containers/food/snacks/grown/G in PB.contents)
if(i >= max_items)
break
- if(PB.SendSignal(COMSIG_TRY_STORAGE_TAKE, G, src))
+ if(SEND_SIGNAL(PB, COMSIG_TRY_STORAGE_TAKE, G, src))
i++
if(iYou empty the plant bag into the biogenerator.")
diff --git a/code/modules/hydroponics/grown/towercap.dm b/code/modules/hydroponics/grown/towercap.dm
index 89206342b1..6f5a1a0ee4 100644
--- a/code/modules/hydroponics/grown/towercap.dm
+++ b/code/modules/hydroponics/grown/towercap.dm
@@ -146,7 +146,7 @@
if(W.is_hot())
StartBurning()
if(grill)
- if(user.a_intent != INTENT_HARM && !(W.flags_1 & ABSTRACT_1))
+ if(user.a_intent != INTENT_HARM && !(W.item_flags & ABSTRACT))
if(user.temporarilyRemoveItemFromInventory(W))
W.forceMove(get_turf(src))
var/list/click_params = params2list(params)
@@ -203,7 +203,7 @@
/obj/structure/bonfire/proc/Burn()
var/turf/current_location = get_turf(src)
- current_location.hotspot_expose(1000,500,1)
+ current_location.hotspot_expose(1000,100,1)
for(var/A in current_location)
if(A == src)
continue
diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm
index 5e75a57c32..f464fccf91 100644
--- a/code/modules/hydroponics/hydroponics.dm
+++ b/code/modules/hydroponics/hydroponics.dm
@@ -779,7 +779,7 @@
else if(istype(O, /obj/item/storage/bag/plants))
attack_hand(user)
for(var/obj/item/reagent_containers/food/snacks/grown/G in locate(user.x,user.y,user.z))
- O.SendSignal(COMSIG_TRY_STORAGE_INSERT, G, user, TRUE)
+ SEND_SIGNAL(O, COMSIG_TRY_STORAGE_INSERT, G, user, TRUE)
else if(default_unfasten_wrench(user, O))
return
diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm
index 4ba1aa0c33..2a28b7b097 100644
--- a/code/modules/hydroponics/seeds.dm
+++ b/code/modules/hydroponics/seeds.dm
@@ -9,7 +9,7 @@
resistance_flags = FLAMMABLE
var/plantname = "Plants" // Name of plant when planted.
var/product // A type path. The thing that is created when the plant is harvested.
- var/species = "" // Used to update icons. Should match the name in the sprites unless all icon_* are overriden.
+ var/species = "" // Used to update icons. Should match the name in the sprites unless all icon_* are overridden.
var/growing_icon = 'icons/obj/hydroponics/growing.dmi' //the file that stores the sprites of the growing plant from this seed.
var/icon_grow // Used to override grow icon (default is "[species]-grow"). You can use one grow icon for multiple closely related plants with it.
diff --git a/code/modules/integrated_electronics/core/assemblies.dm b/code/modules/integrated_electronics/core/assemblies.dm
index 6dd3f43592..d39163b547 100644
--- a/code/modules/integrated_electronics/core/assemblies.dm
+++ b/code/modules/integrated_electronics/core/assemblies.dm
@@ -8,8 +8,9 @@
w_class = WEIGHT_CLASS_SMALL
icon = 'icons/obj/assemblies/electronic_setups.dmi'
icon_state = "setup_small"
- flags_1 = NOBLUDGEON_1
+ item_flags = NOBLUDGEON
materials = list() // To be filled later
+ datum_flags = DF_USE_TAG
var/list/assembly_components = list()
var/list/ckeys_allowed_to_scan = list() // Players who built the circuit can scan it as a ghost.
var/max_components = IC_MAX_SIZE_BASE
@@ -30,6 +31,8 @@
var/combat_circuits = 0 //number of combat cicuits in the assembly, used for diagnostic hud
var/long_range_circuits = 0 //number of long range cicuits in the assembly, used for diagnostic hud
var/prefered_hud_icon = "hudstat" // Used by the AR circuit to change the hud icon.
+ var/creator // circuit creator if any
+ var/static/next_assembly_id = 0
hud_possible = list(DIAG_STAT_HUD, DIAG_BATT_HUD, DIAG_TRACK_HUD, DIAG_CIRCUIT_HUD) //diagnostic hud overlays
max_integrity = 50
pass_flags = 0
@@ -56,14 +59,17 @@
COLOR_ASSEMBLY_PURPLE
)
+/obj/item/electronic_assembly/GenerateTag()
+ tag = "assembly_[next_assembly_id++]"
+
/obj/item/electronic_assembly/examine(mob/user)
. = ..()
if(can_anchor)
- to_chat(user, "The anchoring bolts [anchored ? "are" : "can be"] wrenched in place and the maintainence panel [opened ? "can be" : "is"] screwed in place.")
+ to_chat(user, "The anchoring bolts [anchored ? "are" : "can be"] wrenched in place and the maintenance panel [opened ? "can be" : "is"] screwed in place.")
else
- to_chat(user, "The maintainence panel [opened ? "can be" : "is"] screwed in place.")
+ to_chat(user, "The maintenance panel [opened ? "can be" : "is"] screwed in place.")
- if(isobserver(user) && ckeys_allowed_to_scan[user.ckey])
+ if((isobserver(user) && ckeys_allowed_to_scan[user.ckey]) || IsAdminGhost(user))
to_chat(user, "You can scan this circuit.");
/obj/item/electronic_assembly/proc/check_interactivity(mob/user)
@@ -186,7 +192,7 @@
return 1
if(href_list["ghostscan"])
- if(isobserver(usr) && ckeys_allowed_to_scan[usr.ckey])
+ if((isobserver(usr) && ckeys_allowed_to_scan[usr.ckey]) || IsAdminGhost(usr))
if(assembly_components.len)
var/saved = "On circuit printers with cloning enabled, you may use the code below to clone the circuit:
[SScircuit.save_electronic_assembly(src)]"
usr << browse(saved, "window=circuit_scan;size=500x600;border=1;can_resize=1;can_close=1;can_minimize=1")
@@ -194,6 +200,9 @@
to_chat(usr, "The circuit is empty!")
return
+ if(!check_interactivity(usr))
+ return
+
if(href_list["rename"])
rename(usr)
@@ -348,6 +357,7 @@
to_chat(user, "You slide [IC] inside [src].")
playsound(src, 'sound/items/Deconstruct.ogg', 50, 1)
add_allowed_scanner(user.ckey)
+ investigate_log("had [IC]([IC.type]) inserted by [key_name(user)].", INVESTIGATE_CIRCUIT)
add_component(IC)
return TRUE
@@ -387,6 +397,7 @@
playsound(src, 'sound/items/crowbar.ogg', 50, 1)
user.put_in_hands(IC)
add_allowed_scanner(user.ckey)
+ investigate_log("had [IC]([IC.type]) removed by [key_name(user)].", INVESTIGATE_CIRCUIT)
return TRUE
diff --git a/code/modules/integrated_electronics/core/debugger.dm b/code/modules/integrated_electronics/core/debugger.dm
index 6abaf316da..d6f6a551ad 100644
--- a/code/modules/integrated_electronics/core/debugger.dm
+++ b/code/modules/integrated_electronics/core/debugger.dm
@@ -4,7 +4,8 @@
settings to specific circuits, or for debugging purposes. It can also pulse activation pins."
icon = 'icons/obj/assemblies/electronic_tools.dmi'
icon_state = "debugger"
- flags_1 = CONDUCT_1 | NOBLUDGEON_1
+ flags_1 = CONDUCT_1
+ item_flags = NOBLUDGEON
w_class = WEIGHT_CLASS_SMALL
var/data_to_write = null
var/accepting_refs = FALSE
diff --git a/code/modules/integrated_electronics/core/detailer.dm b/code/modules/integrated_electronics/core/detailer.dm
index 9a718df73e..33f7ef96ad 100644
--- a/code/modules/integrated_electronics/core/detailer.dm
+++ b/code/modules/integrated_electronics/core/detailer.dm
@@ -3,7 +3,8 @@
desc = "A combination autopainter and flash anodizer designed to give electronic assemblies a colorful, wear-resistant finish."
icon = 'icons/obj/assemblies/electronic_tools.dmi'
icon_state = "detailer"
- flags_1 = CONDUCT_1 | NOBLUDGEON_1
+ flags_1 = CONDUCT_1
+ item_flags = NOBLUDGEON
w_class = WEIGHT_CLASS_SMALL
var/data_to_write = null
var/accepting_refs = FALSE
@@ -44,4 +45,4 @@
if(!in_range(src, user))
return
detail_color = color_list[color_choice]
- update_icon()
\ No newline at end of file
+ update_icon()
diff --git a/code/modules/integrated_electronics/core/integrated_circuit.dm b/code/modules/integrated_electronics/core/integrated_circuit.dm
index d5ebeb3001..57ad917246 100644
--- a/code/modules/integrated_electronics/core/integrated_circuit.dm
+++ b/code/modules/integrated_electronics/core/integrated_circuit.dm
@@ -24,7 +24,7 @@
var/category_text = "NO CATEGORY THIS IS A BUG" // To show up on circuit printer, and perhaps other places.
var/removable = TRUE // Determines if a circuit is removable from the assembly.
var/displayed_name = ""
-
+
/*
Integrated circuits are essentially modular machines. Each circuit has a specific function, and combining them inside Electronic Assemblies allows
a creative player the means to solve many problems. Circuits are held inside an electronic assembly, and are wired using special tools.
diff --git a/code/modules/integrated_electronics/core/pins.dm b/code/modules/integrated_electronics/core/pins.dm
index cc81c20081..c1bbb900fa 100644
--- a/code/modules/integrated_electronics/core/pins.dm
+++ b/code/modules/integrated_electronics/core/pins.dm
@@ -209,6 +209,7 @@ D [1]/ ||
write_data_to_pin(new_data)
/datum/integrated_io/activate/ask_for_pin_data(mob/user) // This just pulses the pin.
+ holder.investigate_log(" was manually pulsed by [key_name(user)].", INVESTIGATE_CIRCUIT)
holder.check_then_do_work(ord,ignore_power = TRUE)
to_chat(user, "You pulse \the [holder]'s [src] pin.")
diff --git a/code/modules/integrated_electronics/core/printer.dm b/code/modules/integrated_electronics/core/printer.dm
index 2cab5ad3b9..f8d1424160 100644
--- a/code/modules/integrated_electronics/core/printer.dm
+++ b/code/modules/integrated_electronics/core/printer.dm
@@ -12,7 +12,6 @@
var/debug = FALSE // If it's upgraded and can clone, even without config settings.
var/current_category = null
var/cloning = FALSE // If the printer is currently creating a circuit
- var/clone_countdown = 0 // Timestamp for when to print the circuit
var/recycling = FALSE // If an assembly is being emptied into this printer
var/list/program // Currently loaded save, in form of list
@@ -29,26 +28,22 @@
debug = TRUE
upgraded = TRUE
can_clone = TRUE
+ fast_clone = TRUE
w_class = WEIGHT_CLASS_TINY
/obj/item/integrated_circuit_printer/Initialize()
. = ..()
AddComponent(/datum/component/material_container, list(MAT_METAL), MINERAL_MATERIAL_AMOUNT * 25, TRUE, list(/obj/item/stack, /obj/item/integrated_circuit, /obj/item/electronic_assembly))
-/obj/item/integrated_circuit_printer/Destroy()
- STOP_PROCESSING(SSprocessing, src)
- return ..()
-
-/obj/item/integrated_circuit_printer/process()
+/obj/item/integrated_circuit_printer/proc/print_program(mob/user)
if(!cloning)
- STOP_PROCESSING(SSprocessing, src)
- if(world.time >= clone_countdown || fast_clone)
- var/turf/T = get_turf(src)
- T.visible_message("[src] has finished printing its assembly!")
- playsound(get_turf(T), 'sound/items/poster_being_created.ogg', 50, TRUE)
- SScircuit.load_electronic_assembly(T, program)
- cloning = FALSE
- STOP_PROCESSING(SSprocessing, src)
+ return
+ visible_message("[src] has finished printing its assembly!")
+ playsound(src, 'sound/items/poster_being_created.ogg', 50, TRUE)
+ var/obj/item/electronic_assembly/assembly = SScircuit.load_electronic_assembly(get_turf(src), program)
+ assembly.creator = key_name(user)
+ assembly.investigate_log("was printed by [assembly.creator].", INVESTIGATE_CIRCUIT)
+ cloning = FALSE
/obj/item/integrated_circuit_printer/attackby(obj/item/O, mob/user)
if(istype(O, /obj/item/disk/integrated_circuit/upgrade/advanced))
@@ -141,7 +136,7 @@
if(!program)
HTML += " {[fast_clone ? "Print" : "Begin Printing"] Assembly}"
else if(cloning)
- HTML += " {Cancel Print} - [DisplayTimeText(max(0, clone_countdown - world.time))] remaining until completion"
+ HTML += " {Cancel Print}"
else
HTML += " {[fast_clone ? "Print" : "Begin Printing"] Assembly}"
@@ -206,6 +201,7 @@
if(istype(built, /obj/item/electronic_assembly))
var/obj/item/electronic_assembly/E = built
+ E.creator = key_name(usr)
E.opened = TRUE
E.update_icon()
//reupdate diagnostic hud because it was put_in_hands() and not pickup()'ed
@@ -213,6 +209,7 @@
E.diag_hud_set_circuitcell()
E.diag_hud_set_circuitstat()
E.diag_hud_set_circuittracking()
+ E.investigate_log("was printed by [E.creator].", INVESTIGATE_CIRCUIT)
to_chat(usr, "[capitalize(built.name)] printed.")
playsound(src, 'sound/items/jaws_pry.ogg', 50, TRUE)
@@ -226,8 +223,10 @@
return
switch(href_list["print"])
if("load")
+ if(cloning)
+ return
var/input = input("Put your code there:", "loading", null, null) as message | null
- if(!check_interactivity(usr))
+ if(!check_interactivity(usr) || cloning)
return
if(!input)
program = null
@@ -254,7 +253,7 @@
to_chat(usr, "Metal cost: [program["metal_cost"]].")
if("print")
- if(!program)
+ if(!program || cloning)
return
if(program["requires_upgrades"] && !upgraded && !debug)
@@ -263,12 +262,11 @@
if(program["unsupported_circuit"] && !debug)
to_chat(usr, "This program uses components not supported by the specified assembly. Please change the assembly type in the save file to a supported one.")
return
- else if(fast_clone || debug)
+ else if(fast_clone)
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
if(debug || materials.use_amount_type(program["metal_cost"], MAT_METAL))
- var/obj/item/assembly = SScircuit.load_electronic_assembly(get_turf(src), program)
- to_chat(usr, "[assembly] has been printed from the provided template!")
- playsound(src, 'sound/items/poster_being_created.ogg', 50, TRUE)
+ cloning = TRUE
+ print_program(usr)
else
to_chat(usr, "You need [program["metal_cost"]] metal to build that!")
else
@@ -279,11 +277,10 @@
var/cloning_time = round(program["metal_cost"] / 15)
cloning_time = min(cloning_time, MAX_CIRCUIT_CLONE_TIME)
cloning = TRUE
- clone_countdown = world.time + cloning_time
to_chat(usr, "You begin printing a custom assembly. This will take approximately [DisplayTimeText(cloning_time)]. You can still print \
off normal parts during this time.")
playsound(src, 'sound/items/poster_being_created.ogg', 50, TRUE)
- START_PROCESSING(SSprocessing, src)
+ addtimer(CALLBACK(src, .proc/print_program, usr), cloning_time)
if("cancel")
if(!cloning || !program)
@@ -291,7 +288,6 @@
to_chat(usr, "Cloning has been canceled. Metal cost has been refunded.")
cloning = FALSE
- clone_countdown = FALSE
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
materials.use_amount_type(-program["metal_cost"], MAT_METAL) //use negative amount to regain the cost
diff --git a/code/modules/integrated_electronics/subtypes/input.dm b/code/modules/integrated_electronics/subtypes/input.dm
index cca3f2babf..96ca6a3055 100644
--- a/code/modules/integrated_electronics/subtypes/input.dm
+++ b/code/modules/integrated_electronics/subtypes/input.dm
@@ -763,7 +763,7 @@
data.standard_format_data(message, text, key)
ntnet_send(data)
-/obj/item/integrated_circuit/input/ntnet_recieve(datum/netdata/data)
+/obj/item/integrated_circuit/input/ntnet_receive(datum/netdata/data)
set_pin_data(IC_OUTPUT, 1, data.sender_id)
set_pin_data(IC_OUTPUT, 2, data.data["data"])
set_pin_data(IC_OUTPUT, 3, data.data["data_secondary"])
@@ -774,7 +774,7 @@
activate_pin(2)
/obj/item/integrated_circuit/input/ntnet_advanced
- name = "Low level NTNet transreciever"
+ name = "Low level NTNet transreceiver"
desc = "Enables the sending and receiving of messages over NTNet via packet data protocol. Allows advanced control of message contents and signalling. Must use associative lists. Outputs associative list. Has a slower transmission rate than normal NTNet circuits, due to increased data processing complexity."
extended_desc = "Data can be sent or received using the second pin on each side, \
with additonal data reserved for the third pin. When a message is received, the second activation pin \
@@ -787,7 +787,7 @@
"target NTNet addresses"= IC_PINTYPE_STRING,
"data" = IC_PINTYPE_LIST,
)
- outputs = list("recieved data" = IC_PINTYPE_LIST, "is_broadcast" = IC_PINTYPE_BOOLEAN)
+ outputs = list("received data" = IC_PINTYPE_LIST, "is_broadcast" = IC_PINTYPE_BOOLEAN)
activators = list("send data" = IC_PINTYPE_PULSE_IN, "on data received" = IC_PINTYPE_PULSE_OUT)
spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH
action_flags = IC_ACTION_LONG_RANGE
@@ -811,7 +811,7 @@
data.data = message
ntnet_send(data)
-/obj/item/integrated_circuit/input/ntnet_advanced/ntnet_recieve(datum/netdata/data)
+/obj/item/integrated_circuit/input/ntnet_advanced/ntnet_receive(datum/netdata/data)
set_pin_data(IC_OUTPUT, 1, data.data)
set_pin_data(IC_OUTPUT, 2, data.broadcast)
push_data()
@@ -1123,6 +1123,67 @@
else
activate_pin(3)
+/obj/item/integrated_circuit/input/atmospheric_analyzer
+ name = "atmospheric analyzer"
+ desc = "A miniaturized analyzer which can scan anything that contains gases. Leave target as NULL to scan the air around the assembly."
+ extended_desc = "The nth element of gas amounts is the number of moles of the \
+ nth gas in gas list. \
+ Pressure is in kPa, temperature is in Kelvin. \
+ Due to programming limitations, scanning an object that does \
+ not contain a gas will return the air around it instead."
+ spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH
+ inputs = list(
+ "target" = IC_PINTYPE_REF
+ )
+ outputs = list(
+ "gas list" = IC_PINTYPE_LIST,
+ "gas amounts" = IC_PINTYPE_LIST,
+ "total moles" = IC_PINTYPE_NUMBER,
+ "pressure" = IC_PINTYPE_NUMBER,
+ "temperature" = IC_PINTYPE_NUMBER,
+ "volume" = IC_PINTYPE_NUMBER
+ )
+ activators = list(
+ "scan" = IC_PINTYPE_PULSE_IN,
+ "on success" = IC_PINTYPE_PULSE_OUT,
+ "on failure" = IC_PINTYPE_PULSE_OUT
+ )
+ power_draw_per_use = 5
+
+/obj/item/integrated_circuit/input/atmospheric_analyzer/do_work()
+ for(var/i=1 to 6)
+ set_pin_data(IC_OUTPUT, i, null)
+ var/atom/target = get_pin_data_as_type(IC_INPUT, 1, /atom)
+ var/atom/movable/acting_object = get_object()
+ if(!target)
+ target = acting_object.loc
+ if(!target.Adjacent(acting_object))
+ activate_pin(3)
+ return
+
+ var/datum/gas_mixture/air_contents = target.return_air()
+ if(!air_contents)
+ activate_pin(3)
+ return
+
+ var/list/gases = air_contents.gases
+ var/list/gas_names = list()
+ var/list/gas_amounts = list()
+ for(var/id in gases)
+ var/name = gases[id][GAS_META][META_GAS_NAME]
+ var/amt = round(gases[id][MOLES], 0.001)
+ gas_names.Add(name)
+ gas_amounts.Add(amt)
+
+ set_pin_data(IC_OUTPUT, 1, gas_names)
+ set_pin_data(IC_OUTPUT, 2, gas_amounts)
+ set_pin_data(IC_OUTPUT, 3, round(air_contents.total_moles(), 0.001))
+ set_pin_data(IC_OUTPUT, 4, round(air_contents.return_pressure(), 0.001))
+ set_pin_data(IC_OUTPUT, 5, round(air_contents.temperature, 0.001))
+ set_pin_data(IC_OUTPUT, 6, round(air_contents.return_volume(), 0.001))
+ push_data()
+ activate_pin(2)
+
/obj/item/integrated_circuit/input/data_card_reader
name = "data card reader"
desc = "A circuit that can read from and write to data cards."
diff --git a/code/modules/integrated_electronics/subtypes/manipulation.dm b/code/modules/integrated_electronics/subtypes/manipulation.dm
index c391c62962..6267f2b622 100644
--- a/code/modules/integrated_electronics/subtypes/manipulation.dm
+++ b/code/modules/integrated_electronics/subtypes/manipulation.dm
@@ -367,12 +367,12 @@
var/atom/movable/acting_object = get_object()
var/turf/T = get_turf(acting_object)
var/obj/item/AM = get_pin_data_as_type(IC_INPUT, 1, /obj/item)
- if(AM)
+ if(!QDELETED(AM) && !istype(AM, /obj/item/electronic_assembly) && !istype(AM, /obj/item/transfer_valve) && !istype(AM, /obj/item/twohanded) && !istype(assembly.loc, /obj/item/implant/storage))
var/mode = get_pin_data(IC_INPUT, 2)
if(mode == 1)
if(check_target(AM))
var/weightcheck = FALSE
- if (AM.w_class < max_w_class)
+ if (AM.w_class <= max_w_class)
weightcheck = TRUE
else
weightcheck = FALSE
@@ -496,7 +496,10 @@
var/target_y_rel = round(get_pin_data(IC_INPUT, 2))
var/obj/item/A = get_pin_data_as_type(IC_INPUT, 3, /obj/item)
- if(!A || A.anchored || A.throwing || A == assembly)
+ if(!A || A.anchored || A.throwing || A == assembly || istype(A, /obj/item/twohanded) || istype(A, /obj/item/transfer_valve))
+ return
+
+ if (istype(assembly.loc, /obj/item/implant/storage)) //Prevents the more abusive form of chestgun.
return
if(max_w_class && (A.w_class > max_w_class))
@@ -527,6 +530,7 @@
var/range = round(CLAMP(sqrt(target_x_rel*target_x_rel+target_y_rel*target_y_rel),0,8),1)
assembly.visible_message("[assembly] has thrown [A]!")
+ log_attack("[assembly] [REF(assembly)] has thrown [A].")
A.forceMove(drop_location())
A.throw_at(locate(x_abs, y_abs, T.z), range, 3)
diff --git a/code/modules/integrated_electronics/subtypes/output.dm b/code/modules/integrated_electronics/subtypes/output.dm
index 2d820b016e..b887617ea8 100644
--- a/code/modules/integrated_electronics/subtypes/output.dm
+++ b/code/modules/integrated_electronics/subtypes/output.dm
@@ -46,6 +46,10 @@
for(var/mob/M in nearby_things)
var/obj/O = assembly ? assembly : src
to_chat(M, "[icon2html(O.icon, world, O.icon_state)] [stuff_to_display]")
+ if(assembly)
+ assembly.investigate_log("displayed \"[html_encode(stuff_to_display)]\" with [type].", INVESTIGATE_CIRCUIT)
+ else
+ investigate_log("displayed \"[html_encode(stuff_to_display)]\" as [type].", INVESTIGATE_CIRCUIT)
/obj/item/integrated_circuit/output/screen/large
name = "large screen"
@@ -58,6 +62,10 @@
..()
var/obj/O = assembly ? get_turf(assembly) : loc
O.visible_message("[icon2html(O.icon, world, O.icon_state)] [stuff_to_display]")
+ if(assembly)
+ assembly.investigate_log("displayed \"[html_encode(stuff_to_display)]\" with [type].", INVESTIGATE_CIRCUIT)
+ else
+ investigate_log("displayed \"[html_encode(stuff_to_display)]\" as [type].", INVESTIGATE_CIRCUIT)
/obj/item/integrated_circuit/output/light
name = "light"
@@ -151,6 +159,10 @@
return
vol = CLAMP(vol ,0 , 100)
playsound(get_turf(src), selected_sound, vol, freq, -1)
+ if(assembly)
+ assembly.investigate_log("played a sound ([selected_sound]) with [type].", INVESTIGATE_CIRCUIT)
+ else
+ investigate_log("played a sound ([selected_sound]) as [type].", INVESTIGATE_CIRCUIT)
/obj/item/integrated_circuit/output/sound/on_data_written()
power_draw_per_use = get_pin_data(IC_INPUT, 2) * 15
@@ -234,8 +246,12 @@
text = get_pin_data(IC_INPUT, 1)
if(!isnull(text))
var/atom/movable/A = get_object()
- A.say(sanitize(text))
-
+ var/sanitized_text = sanitize(text)
+ A.say(sanitized_text)
+ if (assembly)
+ log_say("[assembly] [REF(assembly)] : [sanitized_text]")
+ else
+ log_say("[name] ([type]) : [sanitized_text]")
/obj/item/integrated_circuit/output/video_camera
name = "video camera circuit"
diff --git a/code/modules/integrated_electronics/subtypes/power.dm b/code/modules/integrated_electronics/subtypes/power.dm
index e760b21f72..4e5b6952a4 100644
--- a/code/modules/integrated_electronics/subtypes/power.dm
+++ b/code/modules/integrated_electronics/subtypes/power.dm
@@ -24,7 +24,7 @@
/obj/item/integrated_circuit/power/transmitter/large
name = "large power transmission circuit"
- desc = "This can wirelessly transmit a lot of electricity from an assembly's battery towards a nearby machine. Warning: Do not operate in flammable enviroments."
+ desc = "This can wirelessly transmit a lot of electricity from an assembly's battery towards a nearby machine. Warning: Do not operate in flammable environments."
extended_desc = "This circuit transmits 20 kJ of electricity every time the activator pin is pulsed. The input pin must be \
a reference to a machine to send electricity to. This can be a battery, or anything containing a battery. The machine can exist \
inside the assembly, or adjacent to it. The power is sourced from the assembly's power cell. If the target is outside of the assembly, \
diff --git a/code/modules/integrated_electronics/subtypes/reagents.dm b/code/modules/integrated_electronics/subtypes/reagents.dm
index 3232acda71..2a6b4a1a80 100644
--- a/code/modules/integrated_electronics/subtypes/reagents.dm
+++ b/code/modules/integrated_electronics/subtypes/reagents.dm
@@ -186,7 +186,7 @@
//Always log attemped injections for admins
var/contained = reagents.log_list()
- add_logs(src, L, "attemped to inject", addition="which had [contained]")
+ add_logs(src, L, "attempted to inject", addition="which had [contained]")
L.visible_message("[acting_object] is trying to inject [L]!", \
"[acting_object] is trying to inject you!")
busy = TRUE
diff --git a/code/modules/jobs/access.dm b/code/modules/jobs/access.dm
index 6ec7463ab5..ced08bbc6a 100644
--- a/code/modules/jobs/access.dm
+++ b/code/modules/jobs/access.dm
@@ -222,7 +222,7 @@
if(ACCESS_ENGINE)
return "Engineering"
if(ACCESS_ENGINE_EQUIP)
- return "Power Equipment"
+ return "Power and Engineering Equipment"
if(ACCESS_MAINT_TUNNELS)
return "Maintenance"
if(ACCESS_EXTERNAL_AIRLOCKS)
diff --git a/code/modules/jobs/job_exp.dm b/code/modules/jobs/job_exp.dm
index b4679ae479..6a5a857ef0 100644
--- a/code/modules/jobs/job_exp.dm
+++ b/code/modules/jobs/job_exp.dm
@@ -143,8 +143,10 @@ GLOBAL_PROTECT(exp_to_update)
L.update_exp_list(mins,ann)
/datum/controller/subsystem/blackbox/proc/update_exp_db()
- SSdbcore.MassInsert(format_table_name("role_time"), GLOB.exp_to_update, "ON DUPLICATE KEY UPDATE minutes = minutes + VALUES(minutes)")
- LAZYCLEARLIST(GLOB.exp_to_update)
+ set waitfor = FALSE
+ var/list/old_minutes = GLOB.exp_to_update
+ GLOB.exp_to_update = null
+ SSdbcore.MassInsert(format_table_name("role_time"), old_minutes, "ON DUPLICATE KEY UPDATE minutes = minutes + VALUES(minutes)")
//resets a client's exp to what was in the db.
/client/proc/set_exp_from_db()
@@ -154,10 +156,12 @@ GLOBAL_PROTECT(exp_to_update)
return -1
var/datum/DBQuery/exp_read = SSdbcore.NewQuery("SELECT job, minutes FROM [format_table_name("role_time")] WHERE ckey = '[sanitizeSQL(ckey)]'")
if(!exp_read.Execute())
+ qdel(exp_read)
return -1
var/list/play_records = list()
while(exp_read.NextRow())
play_records[exp_read.item[1]] = text2num(exp_read.item[2])
+ qdel(exp_read)
for(var/rtype in SSjob.name_occupations)
if(!play_records[rtype])
@@ -186,7 +190,9 @@ GLOBAL_PROTECT(exp_to_update)
var/datum/DBQuery/flag_update = SSdbcore.NewQuery("UPDATE [format_table_name("player")] SET flags = '[prefs.db_flags]' WHERE ckey='[sanitizeSQL(ckey)]'")
if(!flag_update.Execute())
+ qdel(flag_update)
return -1
+ qdel(flag_update)
/client/proc/update_exp_list(minutes, announce_changes = FALSE)
@@ -264,10 +270,12 @@ GLOBAL_PROTECT(exp_to_update)
var/datum/DBQuery/flags_read = SSdbcore.NewQuery("SELECT flags FROM [format_table_name("player")] WHERE ckey='[ckey]'")
if(!flags_read.Execute())
+ qdel(flags_read)
return FALSE
if(flags_read.NextRow())
prefs.db_flags = text2num(flags_read.item[1])
else if(isnull(prefs.db_flags))
prefs.db_flags = 0 //This PROBABLY won't happen, but better safe than sorry.
+ qdel(flags_read)
return TRUE
diff --git a/code/modules/jobs/job_types/civilian.dm b/code/modules/jobs/job_types/civilian.dm
index 72d58088d1..8ec25e5f5e 100644
--- a/code/modules/jobs/job_types/civilian.dm
+++ b/code/modules/jobs/job_types/civilian.dm
@@ -18,7 +18,7 @@ Clown
minimal_access = list(ACCESS_THEATRE)
/datum/job/clown/after_spawn(mob/living/carbon/human/H, mob/M)
- H.rename_self("clown", M.client)
+ H.apply_pref_name("clown", M.client)
/datum/outfit/job/clown
name = "Clown"
@@ -81,7 +81,7 @@ Mime
minimal_access = list(ACCESS_THEATRE)
/datum/job/mime/after_spawn(mob/living/carbon/human/H, mob/M)
- H.rename_self("mime", M.client)
+ H.apply_pref_name("mime", M.client)
/datum/outfit/job/mime
name = "Mime"
diff --git a/code/modules/jobs/job_types/job.dm b/code/modules/jobs/job_types/job.dm
index 1cd7f59a27..5d4802f93a 100644
--- a/code/modules/jobs/job_types/job.dm
+++ b/code/modules/jobs/job_types/job.dm
@@ -49,7 +49,7 @@
var/exp_type_department = ""
//The amount of good boy points playing this role will earn you towards a higher chance to roll antagonist next round
- //can be overriden by antag_rep.txt config
+ //can be overridden by antag_rep.txt config
var/antag_rep = 10
//Only override this proc
@@ -81,7 +81,7 @@
if(CONFIG_GET(flag/enforce_human_authority) && (title in GLOB.command_positions))
if(H.dna.species.id != "human")
H.set_species(/datum/species/human)
- H.rename_self("human", H.client)
+ H.apply_pref_name("human", H.client)
purrbation_remove(H, silent=TRUE)
//Equip the rest of the gear
diff --git a/code/modules/jobs/job_types/silicon.dm b/code/modules/jobs/job_types/silicon.dm
index 86246952f3..0738f20b24 100644
--- a/code/modules/jobs/job_types/silicon.dm
+++ b/code/modules/jobs/job_types/silicon.dm
@@ -34,7 +34,7 @@ AI
H.forceMove(lateJoinCore.loc)
qdel(lateJoinCore)
var/mob/living/silicon/ai/AI = H
- AI.rename_self("ai", M.client) //If this runtimes oh well jobcode is fucked.
+ AI.apply_pref_name("ai", M.client) //If this runtimes oh well jobcode is fucked.
//we may have been created after our borg
if(SSticker.current_state == GAME_STATE_SETTING_UP)
@@ -85,4 +85,4 @@ Cyborg
return H.Robotize(FALSE, latejoin)
/datum/job/cyborg/after_spawn(mob/living/silicon/robot/R, mob/M)
- R.rename_self("cyborg", M.client)
+ R.updatename(M.client)
diff --git a/code/modules/keybindings/bindings_human.dm b/code/modules/keybindings/bindings_human.dm
index 14890cc7e2..5d02d9aedb 100644
--- a/code/modules/keybindings/bindings_human.dm
+++ b/code/modules/keybindings/bindings_human.dm
@@ -17,7 +17,7 @@
to_chat(user, "You can't fit anything in.")
return
if(thing) // put thing in belt
- if(!equipped_belt.SendSignal(COMSIG_TRY_STORAGE_INSERT, thing, user.mob))
+ if(!SEND_SIGNAL(equipped_belt, COMSIG_TRY_STORAGE_INSERT, thing, user.mob))
to_chat(user, "You can't fit anything in.")
return
if(!equipped_belt.contents.len) // nothing to take out
@@ -45,7 +45,7 @@
to_chat(user, "You can't fit anything in.")
return
if(thing) // put thing in backpack
- if(!equipped_backpack.SendSignal(COMSIG_TRY_STORAGE_INSERT, thing, user.mob))
+ if(!SEND_SIGNAL(equipped_backpack, COMSIG_TRY_STORAGE_INSERT, thing, user.mob))
to_chat(user, "You can't fit anything in.")
return
if(!equipped_backpack.contents.len) // nothing to take out
diff --git a/code/modules/library/lib_items.dm b/code/modules/library/lib_items.dm
index 4126cc4768..066ce22831 100644
--- a/code/modules/library/lib_items.dm
+++ b/code/modules/library/lib_items.dm
@@ -206,7 +206,7 @@
if(dat)
user << browse("Penned by [author]. " + "[dat]", "window=book[window_size != null ? ";size=[window_size]" : ""]")
user.visible_message("[user] opens a book titled \"[title]\" and begins reading intently.")
- user.SendSignal(COMSIG_ADD_MOOD_EVENT, "book_nerd", /datum/mood_event/book_nerd)
+ SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT, "book_nerd", /datum/mood_event/book_nerd)
onclose(user, "book")
else
to_chat(user, "This book is completely blank!")
diff --git a/code/modules/library/lib_machines.dm b/code/modules/library/lib_machines.dm
index 367d3505a0..81e296e4c8 100644
--- a/code/modules/library/lib_machines.dm
+++ b/code/modules/library/lib_machines.dm
@@ -41,6 +41,8 @@
if(1)
if (!SSdbcore.Connect())
dat += "ERROR: Unable to contact External Archive. Please contact your system administrator for assistance. "
+ else if(QDELETED(user))
+ return
else if(!SQLquery)
dat += "ERROR: Malformed search request. Please contact your system administrator for assistance. "
else
@@ -50,12 +52,16 @@
var/datum/DBQuery/query_library_list_books = SSdbcore.NewQuery(SQLquery)
if(!query_library_list_books.Execute())
dat += "ERROR: Unable to retrieve book listings. Please contact your system administrator for assistance. "
- while(query_library_list_books.NextRow())
- var/author = query_library_list_books.item[1]
- var/title = query_library_list_books.item[2]
- var/category = query_library_list_books.item[3]
- var/id = query_library_list_books.item[4]
- dat += "
Player poll"
output += "Question: [pollquestion] You can select up to [multiplechoiceoptions] options. If you select more, the first [multiplechoiceoptions] will be saved. "
output += "Poll runs from [pollstarttime] until [pollendtime]
"
@@ -216,22 +237,26 @@
var/datum/DBQuery/query_irv_get_votes = SSdbcore.NewQuery("SELECT optionid FROM [format_table_name("poll_vote")] WHERE pollid = [pollid] AND ckey = '[ckey]'")
if(!query_irv_get_votes.warn_execute())
+ qdel(query_irv_get_votes)
return
var/list/votedfor = list()
while(query_irv_get_votes.NextRow())
votedfor.Add(text2num(query_irv_get_votes.item[1]))
+ qdel(query_irv_get_votes)
var/list/datum/polloption/options = list()
var/datum/DBQuery/query_irv_options = SSdbcore.NewQuery("SELECT id, text FROM [format_table_name("poll_option")] WHERE pollid = [pollid]")
if(!query_irv_options.warn_execute())
+ qdel(query_irv_options)
return
while(query_irv_options.NextRow())
var/datum/polloption/PO = new()
PO.optionid = text2num(query_irv_options.item[1])
PO.optiontext = query_irv_options.item[2]
options["[PO.optionid]"] += PO
+ qdel(query_irv_options)
//if they already voted, use their sort
if (votedfor.len)
@@ -332,10 +357,13 @@
return
var/datum/DBQuery/query_hasvoted = SSdbcore.NewQuery("SELECT id FROM `[format_table_name(table)]` WHERE pollid = [pollid] AND ckey = '[ckey]'")
if(!query_hasvoted.warn_execute())
+ qdel(query_hasvoted)
return
if(query_hasvoted.NextRow())
+ qdel(query_hasvoted)
to_chat(usr, "You've already replied to this poll.")
return
+ qdel(query_hasvoted)
. = "Player"
if(client.holder)
. = client.holder.rank.name
@@ -364,9 +392,12 @@
//validate the poll is actually the right type of poll and its still active
var/datum/DBQuery/query_validate_poll = SSdbcore.NewQuery("SELECT id FROM [format_table_name("poll_question")] WHERE id = [pollid] AND Now() BETWEEN starttime AND endtime AND polltype = '[type]' [(holder ? "" : "AND adminonly = false")]")
if(!query_validate_poll.warn_execute())
+ qdel(query_validate_poll)
return 0
if (!query_validate_poll.NextRow())
+ qdel(query_validate_poll)
return 0
+ qdel(query_validate_poll)
return 1
/mob/dead/new_player/proc/vote_on_irv_poll(pollid, list/votelist)
@@ -397,10 +428,12 @@
//lets collect the options
var/datum/DBQuery/query_irv_id = SSdbcore.NewQuery("SELECT id FROM [format_table_name("poll_option")] WHERE pollid = [pollid]")
if(!query_irv_id.warn_execute())
+ qdel(query_irv_id)
return 0
var/list/optionlist = list()
while (query_irv_id.NextRow())
optionlist += text2num(query_irv_id.item[1])
+ qdel(query_irv_id)
//validate their votes are actually in the list of options and actually numbers
var/list/numberedvotelist = list()
@@ -428,13 +461,18 @@
//now lets delete their old votes (if any)
var/datum/DBQuery/query_irv_del_old = SSdbcore.NewQuery("DELETE FROM [format_table_name("poll_vote")] WHERE pollid = [pollid] AND ckey = '[ckey]'")
if(!query_irv_del_old.warn_execute())
+ qdel(query_irv_del_old)
return 0
+ qdel(query_irv_del_old)
//now to add the new ones.
var/datum/DBQuery/query_irv_vote = SSdbcore.NewQuery("INSERT INTO [format_table_name("poll_vote")] (datetime, pollid, optionid, ckey, ip, adminrank) VALUES [sqlrowlist]")
if(!query_irv_vote.warn_execute())
+ qdel(query_irv_vote)
return 0
- src << browse(null,"window=playerpoll")
+ qdel(query_irv_vote)
+ if(!QDELETED(src))
+ src << browse(null,"window=playerpoll")
return 1
@@ -454,8 +492,11 @@
return
var/datum/DBQuery/query_option_vote = SSdbcore.NewQuery("INSERT INTO [format_table_name("poll_vote")] (datetime, pollid, optionid, ckey, ip, adminrank) VALUES (Now(), [pollid], [optionid], '[ckey]', INET_ATON('[client.address]'), '[adminrank]')")
if(!query_option_vote.warn_execute())
+ qdel(query_option_vote)
return
- usr << browse(null,"window=playerpoll")
+ qdel(query_option_vote)
+ if(!QDELETED(usr))
+ usr << browse(null,"window=playerpoll")
return 1
/mob/dead/new_player/proc/log_text_poll_reply(pollid, replytext)
@@ -481,8 +522,11 @@
return
var/datum/DBQuery/query_text_vote = SSdbcore.NewQuery("INSERT INTO [format_table_name("poll_textreply")] (datetime ,pollid ,ckey ,ip ,replytext ,adminrank) VALUES (Now(), [pollid], '[ckey]', INET_ATON('[client.address]'), '[replytext]', '[adminrank]')")
if(!query_text_vote.warn_execute())
+ qdel(query_text_vote)
return
- usr << browse(null,"window=playerpoll")
+ qdel(query_text_vote)
+ if(!QDELETED(usr))
+ usr << browse(null,"window=playerpoll")
return 1
/mob/dead/new_player/proc/vote_on_numval_poll(pollid, optionid, rating)
@@ -498,18 +542,24 @@
return 0
var/datum/DBQuery/query_numval_hasvoted = SSdbcore.NewQuery("SELECT id FROM [format_table_name("poll_vote")] WHERE optionid = [optionid] AND ckey = '[ckey]'")
if(!query_numval_hasvoted.warn_execute())
+ qdel(query_numval_hasvoted)
return
if(query_numval_hasvoted.NextRow())
+ qdel(query_numval_hasvoted)
to_chat(usr, "You've already replied to this poll.")
return
+ qdel(query_numval_hasvoted)
var/adminrank = "Player"
if(client.holder)
adminrank = client.holder.rank.name
adminrank = sanitizeSQL(adminrank)
var/datum/DBQuery/query_numval_vote = SSdbcore.NewQuery("INSERT INTO [format_table_name("poll_vote")] (datetime ,pollid ,optionid ,ckey ,ip ,adminrank, rating) VALUES (Now(), [pollid], [optionid], '[ckey]', INET_ATON('[client.address]'), '[adminrank]', [(isnull(rating)) ? "null" : rating])")
if(!query_numval_vote.warn_execute())
+ qdel(query_numval_vote)
return
- usr << browse(null,"window=playerpoll")
+ qdel(query_numval_vote)
+ if(!QDELETED(usr))
+ usr << browse(null,"window=playerpoll")
return 1
/mob/dead/new_player/proc/vote_on_multi_poll(pollid, optionid)
@@ -525,26 +575,33 @@
return 0
var/datum/DBQuery/query_multi_choicelen = SSdbcore.NewQuery("SELECT multiplechoiceoptions FROM [format_table_name("poll_question")] WHERE id = [pollid]")
if(!query_multi_choicelen.warn_execute())
+ qdel(query_multi_choicelen)
return 1
var/i
if(query_multi_choicelen.NextRow())
- i = text2num(query_multi_choicelen.item[1])
+ i = text2num(query_multi_choicelen.item[1])
+ qdel(query_multi_choicelen)
var/datum/DBQuery/query_multi_hasvoted = SSdbcore.NewQuery("SELECT id FROM [format_table_name("poll_vote")] WHERE pollid = [pollid] AND ckey = '[ckey]'")
if(!query_multi_hasvoted.warn_execute())
+ qdel(query_multi_hasvoted)
return 1
while(i)
if(query_multi_hasvoted.NextRow())
i--
else
break
+ qdel(query_multi_hasvoted)
if(!i)
return 2
var/adminrank = "Player"
- if(client.holder)
+ if(!QDELETED(client) && client.holder)
adminrank = client.holder.rank.name
adminrank = sanitizeSQL(adminrank)
var/datum/DBQuery/query_multi_vote = SSdbcore.NewQuery("INSERT INTO [format_table_name("poll_vote")] (datetime, pollid, optionid, ckey, ip, adminrank) VALUES (Now(), [pollid], [optionid], '[ckey]', INET_ATON('[client.address]'), '[adminrank]')")
if(!query_multi_vote.warn_execute())
+ qdel(query_multi_vote)
return 1
- usr << browse(null,"window=playerpoll")
+ qdel(query_multi_vote)
+ if(!QDELETED(usr))
+ usr << browse(null,"window=playerpoll")
return 0
diff --git a/code/modules/mob/dead/new_player/sprite_accessories.dm b/code/modules/mob/dead/new_player/sprite_accessories.dm
index b44daefd3f..13ede8ef04 100644
--- a/code/modules/mob/dead/new_player/sprite_accessories.dm
+++ b/code/modules/mob/dead/new_player/sprite_accessories.dm
@@ -68,7 +68,7 @@
icon = 'icons/mob/human_face.dmi' // default icon for all hairs
/datum/sprite_accessory/hair/short
- name = "Short Hair" // try to capatilize the names please~ // try to spell
+ name = "Short Hair" // try to capitalize the names please~ // try to spell
icon_state = "hair_a" // you do not need to define _s or _l sub-states, game automatically does this for you
/datum/sprite_accessory/hair/shorthair2
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index 5715a1fe87..7655e8e1d7 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -622,7 +622,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
//this is a mob verb instead of atom for performance reasons
//see /mob/verb/examinate() in mob.dm for more info
-//overriden here and in /mob/living for different point span classes and sanity checks
+//overridden here and in /mob/living for different point span classes and sanity checks
/mob/dead/observer/pointed(atom/A as mob|obj|turf in view())
if(!..())
return 0
diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm
index 44af3936a8..494536ebfa 100644
--- a/code/modules/mob/inventory.dm
+++ b/code/modules/mob/inventory.dm
@@ -136,7 +136,7 @@
//To appropriately fluff things like "they are holding [I] in their [get_held_index_name(get_held_index_of_item(I))]"
-//Can be overriden to pass off the fluff to something else (eg: science allowing people to add extra robotic limbs, and having this proc react to that
+//Can be overridden to pass off the fluff to something else (eg: science allowing people to add extra robotic limbs, and having this proc react to that
// with say "they are holding [I] in their Nanotrasen Brand Utility Arm - Right Edition" or w/e
/mob/proc/get_held_index_name(i)
var/list/hand = list()
@@ -200,7 +200,7 @@
/mob/proc/put_in_hand_check(obj/item/I)
- if(incapacitated() && !(I.flags_1&ABSTRACT_1)) //Cit change - Changes lying to incapacitated so that it's plausible to pick things up while on the ground
+ if(incapacitated() && !(I.item_flags&ABSTRACT)) //Cit change - Changes lying to incapacitated so that it's plausible to pick things up while on the ground
return FALSE
if(!istype(I))
return FALSE
@@ -272,7 +272,7 @@
/mob/proc/canUnEquip(obj/item/I, force)
if(!I)
return TRUE
- if((I.flags_1 & NODROP_1) && !force)
+ if((I.item_flags & NODROP) && !force)
return FALSE
return TRUE
@@ -312,7 +312,7 @@
if(!I) //If there's nothing to drop, the drop is automatically succesfull. If(unEquip) should generally be used to check for NODROP_1.
return TRUE
- if((I.flags_1 & NODROP_1) && !force)
+ if((I.item_flags & NODROP) && !force)
return FALSE
var/hand_index = get_held_index_of_item(I)
@@ -325,7 +325,7 @@
I.layer = initial(I.layer)
I.plane = initial(I.plane)
I.appearance_flags &= ~NO_CLIENT_COLOR
- if(!no_move && !(I.flags_1 & DROPDEL_1)) //item may be moved/qdel'd immedietely, don't bother moving it
+ if(!no_move && !(I.item_flags & DROPDEL)) //item may be moved/qdel'd immedietely, don't bother moving it
if (isnull(newloc))
I.moveToNullspace()
else
@@ -396,7 +396,7 @@
if(equip_delay_self)
return
- if(M.active_storage && M.active_storage.parent && M.active_storage.parent.SendSignal(COMSIG_TRY_STORAGE_INSERT, src,M))
+ if(M.active_storage && M.active_storage.parent && SEND_SIGNAL(M.active_storage.parent, COMSIG_TRY_STORAGE_INSERT, src,M))
return TRUE
var/list/obj/item/possible = list(M.get_inactive_held_item(), M.get_item_by_slot(SLOT_BELT), M.get_item_by_slot(SLOT_GENERC_DEXTROUS_STORAGE), M.get_item_by_slot(SLOT_BACK))
@@ -404,7 +404,7 @@
if(!i)
continue
var/obj/item/I = i
- if(I.SendSignal(COMSIG_TRY_STORAGE_INSERT, src, M))
+ if(SEND_SIGNAL(I, COMSIG_TRY_STORAGE_INSERT, src, M))
return TRUE
to_chat(M, "You are unable to equip that!")
@@ -441,10 +441,7 @@
held_items.len = amt
if(hud_used)
- var/style
- if(client && client.prefs)
- style = ui_style2icon(client.prefs.UI_style)
- hud_used.build_hand_slots(style)
+ hud_used.build_hand_slots()
/mob/living/carbon/human/change_number_of_hands(amt)
diff --git a/code/modules/mob/living/bloodcrawl.dm b/code/modules/mob/living/bloodcrawl.dm
index 0052cf923d..d70007452c 100644
--- a/code/modules/mob/living/bloodcrawl.dm
+++ b/code/modules/mob/living/bloodcrawl.dm
@@ -138,7 +138,7 @@
name = "blood crawl"
desc = "You are unable to hold anything while in this form."
icon = 'icons/effects/blood.dmi'
- flags_1 = NODROP_1|ABSTRACT_1
+ item_flags = NODROP | ABSTRACT
/mob/living/proc/exit_blood_effect(obj/effect/decal/cleanable/B)
playsound(get_turf(src), 'sound/magic/exit_blood.ogg', 100, 1, -1)
diff --git a/code/modules/mob/living/brain/posibrain.dm b/code/modules/mob/living/brain/posibrain.dm
index de6c45841b..864d5d769c 100644
--- a/code/modules/mob/living/brain/posibrain.dm
+++ b/code/modules/mob/living/brain/posibrain.dm
@@ -34,9 +34,9 @@ GLOBAL_VAR(posibrain_notify_cooldown)
if(istype(ghost))
activate(ghost)
-/obj/item/mmi/posibrain/proc/ping_ghosts(msg, newlymade) // CITADEL EDIT sound change to 'sound/misc/server-ready.ogg'
+/obj/item/mmi/posibrain/proc/ping_ghosts(msg, newlymade)
if(newlymade || GLOB.posibrain_notify_cooldown <= world.time)
- notify_ghosts("[name] [msg] in [get_area(src)]!", ghost_sound = !newlymade ? 'sound/misc/server-ready.ogg':null, enter_link = "(Click to enter)", source = src, action = NOTIFY_ATTACK, flashwindow = FALSE)
+ notify_ghosts("[name] [msg] in [get_area(src)]!", ghost_sound = !newlymade ? 'sound/effects/ghost2.ogg':null, enter_link = "(Click to enter)", source = src, action = NOTIFY_ATTACK, flashwindow = FALSE)
if(!newlymade)
GLOB.posibrain_notify_cooldown = world.time + askDelay
@@ -85,7 +85,7 @@ GLOBAL_VAR(posibrain_notify_cooldown)
/obj/item/mmi/posibrain/proc/activate(mob/user)
if(QDELETED(brainmob))
return
- if(is_occupied() || jobban_isbanned(user,"posibrain"))
+ if(is_occupied() || jobban_isbanned(user,"posibrain") || QDELETED(brainmob) || QDELETED(src) || QDELETED(user))
return
var/posi_ask = alert("Become a [name]? (Warning, You can no longer be cloned, and all past lives will be forgotten!)","Are you positive?","Yes","No")
diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/praetorian.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/praetorian.dm
index f8cf430d74..fe61c2a8ff 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/caste/praetorian.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/caste/praetorian.dm
@@ -29,7 +29,7 @@
/obj/effect/proc_holder/alien/royal/praetorian/evolve
name = "Evolve"
- desc = "Produce an interal egg sac capable of spawning children. Only one queen can exist at a time."
+ desc = "Produce an internal egg sac capable of spawning children. Only one queen can exist at a time."
plasma_cost = 500
action_icon_state = "alien_evolve_praetorian"
diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
index 2216d955c0..eb5e9664d9 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
@@ -45,7 +45,7 @@
"
@@ -230,7 +230,7 @@
usr.visible_message("[usr] successfully rips [I] out of [usr.p_their()] [L.name]!","You successfully remove [I] from your [L.name].")
if(!has_embedded_objects())
clear_alert("embeddedobject")
- usr.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "embedded")
+ SEND_SIGNAL(usr, COMSIG_CLEAR_MOOD_EVENT, "embedded")
return
if(href_list["item"])
@@ -246,11 +246,11 @@
var/obj/item/place_item = usr.get_active_held_item() // Item to place in the pocket, if it's empty
var/delay_denominator = 1
- if(pocket_item && !(pocket_item.flags_1&ABSTRACT_1))
- if(pocket_item.flags_1 & NODROP_1)
+ if(pocket_item && !(pocket_item.item_flags & ABSTRACT))
+ if(pocket_item.item_flags & NODROP)
to_chat(usr, "You try to empty [src]'s [pocket_side] pocket, it seems to be stuck!")
to_chat(usr, "You try to empty [src]'s [pocket_side] pocket.")
- else if(place_item && place_item.mob_can_equip(src, usr, pocket_id, 1) && !(place_item.flags_1&ABSTRACT_1))
+ else if(place_item && place_item.mob_can_equip(src, usr, pocket_id, 1) && !(place_item.item_flags & ABSTRACT))
to_chat(usr, "You try to place [place_item] into [src]'s [pocket_side] pocket.")
delay_denominator = 4
else
@@ -274,7 +274,7 @@
// Display a warning if the user mocks up
to_chat(src, "You feel your [pocket_side] pocket being fumbled with!")
- ..()
+ ..() //CITADEL CHANGE - removes a tab from behind this ..() so that flavortext can actually be examined
///////HUDs///////
@@ -387,7 +387,7 @@
R = find_record("name", perpname, GLOB.data_core.security)
if(R)
if(href_list["status"])
- var/setcriminal = input(usr, "Specify a new criminal status for this person.", "Security HUD", R.fields["criminal"]) in list("None", "*Arrest*", "Incarcerated", "Parolled", "Discharged", "Cancel")
+ var/setcriminal = input(usr, "Specify a new criminal status for this person.", "Security HUD", R.fields["criminal"]) in list("None", "*Arrest*", "Incarcerated", "Paroled", "Discharged", "Cancel")
if(setcriminal != "Cancel")
if(R)
if(H.canUseHUD())
@@ -590,7 +590,7 @@
threatcount += 5
if("Incarcerated")
threatcount += 2
- if("Parolled")
+ if("Paroled")
threatcount += 2
//Check for dresscode violations
@@ -662,7 +662,7 @@
return
src.visible_message("[src] performs CPR on [C.name]!", "You perform CPR on [C.name].")
- SendSignal(COMSIG_ADD_MOOD_EVENT, "perform_cpr", /datum/mood_event/perform_cpr)
+ SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "perform_cpr", /datum/mood_event/perform_cpr)
C.cpr_time = world.time
add_logs(src, C, "CPRed")
@@ -689,7 +689,7 @@
if(strength < CLEAN_STRENGTH_BLOOD)
return
if(gloves)
- if(gloves.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD))
+ if(SEND_SIGNAL(gloves, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD))
update_inv_gloves()
else
if(bloody_hands)
@@ -727,9 +727,8 @@
to_chat(src, "You can't do that right now!")
return FALSE
if(!Adjacent(M) && (M.loc != src))
- if((be_close == 0) && (dna.check_mutation(TK)))
- if(tkMaxRangeCheck(src, M))
- return TRUE
+ if((be_close == 0) || (dna.check_mutation(TK) && tkMaxRangeCheck(src, M)))
+ return TRUE
to_chat(src, "You are too far away!")
return FALSE
return TRUE
diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm
index 33344486b1..acf4b0734c 100644
--- a/code/modules/mob/living/carbon/human/human_defense.dm
+++ b/code/modules/mob/living/carbon/human/human_defense.dm
@@ -144,7 +144,7 @@
I.forceMove(src)
L.receive_damage(I.w_class*I.embedding.embedded_impact_pain_multiplier)
visible_message("[I] embeds itself in [src]'s [L.name]!","[I] embeds itself in your [L.name]!")
- SendSignal(COMSIG_ADD_MOOD_EVENT, "embedded", /datum/mood_event/embedded)
+ SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "embedded", /datum/mood_event/embedded)
hitpush = FALSE
skipcatch = TRUE //can't catch the now embedded item
@@ -173,7 +173,7 @@
affecting = get_bodypart(ran_zone(user.zone_selected))
var/target_area = parse_zone(check_zone(user.zone_selected)) //our intended target
- I.SendSignal(COMSIG_ITEM_ATTACK_ZONE, src, user, affecting)
+ SEND_SIGNAL(I, COMSIG_ITEM_ATTACK_ZONE, src, user, affecting)
SSblackbox.record_feedback("nested tally", "item_used_for_combat", 1, list("[I.force]", "[I.type]"))
SSblackbox.record_feedback("tally", "zone_targeted", 1, target_area)
diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm
index 47a866df97..c371465ffa 100644
--- a/code/modules/mob/living/carbon/human/human_defines.dm
+++ b/code/modules/mob/living/carbon/human/human_defines.dm
@@ -44,7 +44,6 @@
var/name_override //For temporary visible name changes
- var/drunkenness = 0 //Overall drunkenness - check handle_alcohol() in life.dm for effects
var/datum/personal_crafting/handcrafting
var/datum/physiology/physiology
diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm
index 871b64bbc0..5bfbb76e46 100644
--- a/code/modules/mob/living/carbon/human/human_movement.dm
+++ b/code/modules/mob/living/carbon/human/human_movement.dm
@@ -67,6 +67,6 @@
S.step_action()
/mob/living/carbon/human/Process_Spacemove(movement_dir = 0) //Temporary laziness thing. Will change to handles by species reee.
- if(..())
- return 1
- return dna.species.space_move(src)
+ if(dna.species.space_move(src))
+ return TRUE
+ return ..()
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index 0e033856b2..2216843716 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -66,14 +66,14 @@
adjust_blurriness(-1)
if (getBrainLoss() >= 60 && !incapacitated(TRUE))
- SendSignal(COMSIG_ADD_MOOD_EVENT, "brain_damage", /datum/mood_event/brain_damage)
+ SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "brain_damage", /datum/mood_event/brain_damage)
if(prob(3))
if(prob(25))
emote("drool")
else
say(pick_list_replacements(BRAIN_DAMAGE_FILE, "brain_damage"))
else
- SendSignal(COMSIG_CLEAR_MOOD_EVENT, "brain_damage")
+ SEND_SIGNAL(src, COMSIG_CLEAR_MOOD_EVENT, "brain_damage")
/mob/living/carbon/human/handle_mutations_and_radiation()
if(!dna || !dna.species.handle_mutations_and_radiation(src))
@@ -313,7 +313,7 @@
visible_message("[I] falls out of [name]'s [BP.name]!","[I] falls out of your [BP.name]!")
if(!has_embedded_objects())
clear_alert("embeddedobject")
- SendSignal(COMSIG_CLEAR_MOOD_EVENT, "embedded")
+ SEND_SIGNAL(src, COMSIG_CLEAR_MOOD_EVENT, "embedded")
/mob/living/carbon/human/proc/handle_active_genes()
for(var/datum/mutation/human/HM in dna.mutations)
@@ -339,108 +339,8 @@
// Tissues die without blood circulation
adjustBruteLoss(2)
-/*
-Alcohol Poisoning Chart
-Note that all higher effects of alcohol poisoning will inherit effects for smaller amounts (i.e. light poisoning inherts from slight poisoning)
-In addition, severe effects won't always trigger unless the drink is poisonously strong
-All effects don't start immediately, but rather get worse over time; the rate is affected by the imbiber's alcohol tolerance
-
-0: Non-alcoholic
-1-10: Barely classifiable as alcohol - occassional slurring
-11-20: Slight alcohol content - slurring
-21-30: Below average - imbiber begins to look slightly drunk
-31-40: Just below average - no unique effects
-41-50: Average - mild disorientation, imbiber begins to look drunk
-51-60: Just above average - disorientation, vomiting, imbiber begins to look heavily drunk
-61-70: Above average - small chance of blurry vision, imbiber begins to look smashed
-71-80: High alcohol content - blurry vision, imbiber completely shitfaced
-81-90: Extremely high alcohol content - light brain damage, passing out
-91-100: Dangerously toxic - swift death
-*/
-#define BALLMER_POINTS 5
-GLOBAL_LIST_INIT(ballmer_good_msg, list("Hey guys, what if we rolled out a bluespace wiring system so mice can't destroy the powergrid anymore?",
- "Hear me out here. What if, and this is just a theory, we made R&D controllable from our PDAs?",
- "I'm thinking we should roll out a git repository for our research under the AGPLv3 license so that we can share it among the other stations freely.",
- "I dunno about you guys, but IDs and PDAs being separate is clunky as fuck. Maybe we should merge them into a chip in our arms? That way they can't be stolen easily.",
- "Why the fuck aren't we just making every pair of shoes into galoshes? We have the technology."))
-GLOBAL_LIST_INIT(ballmer_windows_me_msg, list("Yo man, what if, we like, uh, put a webserver that's automatically turned on with default admin passwords into every PDA?",
- "So like, you know how we separate our codebase from the master copy that runs on our consumer boxes? What if we merged the two and undid the separation between codebase and server?",
- "Dude, radical idea: H.O.N.K mechs but with no bananium required.",
- "Best idea ever: Disposal pipes instead of hallways."))
-/mob/living/carbon/human/handle_status_effects()
- ..()
- if(drunkenness)
- drunkenness = max(drunkenness - (drunkenness * 0.04), 0)
- if(drunkenness >= 6)
- if(prob(25))
- slurring += 2
- jitteriness = max(jitteriness - 3, 0)
- if(has_trait(TRAIT_DRUNK_HEALING))
- adjustBruteLoss(-0.12, FALSE)
- adjustFireLoss(-0.06, FALSE)
-
- if(drunkenness >= 11 && slurring < 5)
- slurring += 1.2
-
- if(mind && (mind.assigned_role == "Scientist" || mind.assigned_role == "Research Director"))
- if(SSresearch.science_tech)
- if(drunkenness >= 12.9 && drunkenness <= 13.8)
- drunkenness = round(drunkenness, 0.01)
- var/ballmer_percent = 0
- if(drunkenness == 13.35) // why run math if I dont have to
- ballmer_percent = 1
- else
- ballmer_percent = (-abs(drunkenness - 13.35) / 0.9) + 1
- if(prob(5))
- say(pick(GLOB.ballmer_good_msg))
- SSresearch.science_tech.add_point_list(list(TECHWEB_POINT_TYPE_GENERIC = BALLMER_POINTS * ballmer_percent))
- if(drunkenness > 26) // by this point you're into windows ME territory
- if(prob(5))
- SSresearch.science_tech.remove_point_list(list(TECHWEB_POINT_TYPE_GENERIC = BALLMER_POINTS))
- say(pick(GLOB.ballmer_windows_me_msg))
-
- if(drunkenness >= 41)
- if(prob(25))
- confused += 2
- Dizzy(10)
- if(has_trait(TRAIT_DRUNK_HEALING)) // effects stack with lower tiers
- adjustBruteLoss(-0.3, FALSE)
- adjustFireLoss(-0.15, FALSE)
-
- if(drunkenness >= 51)
- if(prob(5))
- confused += 10
- vomit()
- Dizzy(25)
-
- if(drunkenness >= 61)
- if(prob(50))
- blur_eyes(5)
- if(has_trait(TRAIT_DRUNK_HEALING))
- adjustBruteLoss(-0.4, FALSE)
- adjustFireLoss(-0.2, FALSE)
-
- if(drunkenness >= 71)
- blur_eyes(5)
-
- if(drunkenness >= 81)
- adjustToxLoss(0.2)
- if(prob(5) && !stat)
- to_chat(src, "Maybe you should lie down for a bit...")
-
- if(drunkenness >= 91)
- adjustBrainLoss(0.4, 60)
- if(prob(20) && !stat)
- if(SSshuttle.emergency.mode == SHUTTLE_DOCKED && is_station_level(z)) //QoL mainly
- to_chat(src, "You're so tired... but you can't miss that shuttle...")
- else
- to_chat(src, "Just a quick nap...")
- Sleeping(900)
-
- if(drunkenness >= 101)
- adjustToxLoss(4) //Let's be honest you shouldn't be alive by now
#undef THERMAL_PROTECTION_HEAD
#undef THERMAL_PROTECTION_CHEST
diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm
index 51ba7a9d9c..ac1611b676 100644
--- a/code/modules/mob/living/carbon/human/species.dm
+++ b/code/modules/mob/living/carbon/human/species.dm
@@ -970,7 +970,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
return FALSE
return equip_delay_self_check(I, H, bypass_equip_delay_self)
if(SLOT_L_STORE)
- if(I.flags_1 & NODROP_1) //Pockets aren't visible, so you can't move NODROP_1 items into them.
+ if(I.item_flags & NODROP) //Pockets aren't visible, so you can't move NODROP_1 items into them.
return FALSE
if(H.l_store)
return FALSE
@@ -986,7 +986,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
if( I.w_class <= WEIGHT_CLASS_SMALL || (I.slot_flags & ITEM_SLOT_POCKET) )
return TRUE
if(SLOT_R_STORE)
- if(I.flags_1 & NODROP_1)
+ if(I.item_flags & NODROP)
return FALSE
if(H.r_store)
return FALSE
@@ -1003,7 +1003,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
return TRUE
return FALSE
if(SLOT_S_STORE)
- if(I.flags_1 & NODROP_1)
+ if(I.item_flags & NODROP)
return FALSE
if(H.s_store)
return FALSE
@@ -1040,7 +1040,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
return TRUE
if(SLOT_IN_BACKPACK)
if(H.back)
- if(H.back.SendSignal(COMSIG_TRY_STORAGE_CAN_INSERT, I, H, TRUE))
+ if(SEND_SIGNAL(H.back, COMSIG_TRY_STORAGE_CAN_INSERT, I, H, TRUE))
return TRUE
return FALSE
return FALSE //Unsupported slot
@@ -1138,22 +1138,22 @@ GLOBAL_LIST_EMPTY(roundstart_races)
switch(H.nutrition)
if(NUTRITION_LEVEL_FULL to INFINITY)
- H.SendSignal(COMSIG_ADD_MOOD_EVENT, "nutrition", /datum/mood_event/nutrition/fat)
+ SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "nutrition", /datum/mood_event/nutrition/fat)
H.throw_alert("nutrition", /obj/screen/alert/fat)
if(NUTRITION_LEVEL_WELL_FED to NUTRITION_LEVEL_FULL)
- H.SendSignal(COMSIG_ADD_MOOD_EVENT, "nutrition", /datum/mood_event/nutrition/wellfed)
+ SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "nutrition", /datum/mood_event/nutrition/wellfed)
H.clear_alert("nutrition")
if( NUTRITION_LEVEL_FED to NUTRITION_LEVEL_WELL_FED)
- H.SendSignal(COMSIG_ADD_MOOD_EVENT, "nutrition", /datum/mood_event/nutrition/fed)
+ SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "nutrition", /datum/mood_event/nutrition/fed)
H.clear_alert("nutrition")
if(NUTRITION_LEVEL_HUNGRY to NUTRITION_LEVEL_FED)
- H.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "nutrition")
+ SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "nutrition")
H.clear_alert("nutrition")
if(NUTRITION_LEVEL_STARVING to NUTRITION_LEVEL_HUNGRY)
- H.SendSignal(COMSIG_ADD_MOOD_EVENT, "nutrition", /datum/mood_event/nutrition/hungry)
+ SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "nutrition", /datum/mood_event/nutrition/hungry)
H.throw_alert("nutrition", /obj/screen/alert/hungry)
if(0 to NUTRITION_LEVEL_STARVING)
- H.SendSignal(COMSIG_ADD_MOOD_EVENT, "nutrition", /datum/mood_event/nutrition/starving)
+ SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "nutrition", /datum/mood_event/nutrition/starving)
H.throw_alert("nutrition", /obj/screen/alert/starving)
/datum/species/proc/update_health_hud(mob/living/carbon/human/H)
@@ -1211,8 +1211,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
if(H.movement_type & FLYING)
flight = 1
- if(H.has_gravity())
- gravity = TRUE
+ gravity = H.has_gravity()
if(!flightpack && gravity) //Check for chemicals and innate speedups and slowdowns if we're moving using our body and not a flying suit
if(H.has_trait(TRAIT_GOTTAGOFAST))
@@ -1265,6 +1264,11 @@ GLOBAL_LIST_EMPTY(roundstart_races)
if((hungry >= 70) && !flight) //Being hungry will still allow you to use a flightsuit/wings.
. += hungry / 50
+ //Moving in high gravity is very slow (Flying too)
+ if(gravity > STANDARD_GRAVITY)
+ var/grav_force = min(gravity - STANDARD_GRAVITY,3)
+ . += 1 + grav_force
+
GET_COMPONENT_FROM(mood, /datum/component/mood, H)
if(mood && !flight) //How can depression slow you down if you can just fly away from your problems?
switch(mood.sanity)
@@ -1418,7 +1422,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
if(target.w_uniform)
target.w_uniform.add_fingerprint(user)
//var/randomized_zone = ran_zone(user.zone_selected) CIT CHANGE - comments out to prevent compiling errors
- target.SendSignal(COMSIG_HUMAN_DISARM_HIT, user, user.zone_selected)
+ SEND_SIGNAL(target, COMSIG_HUMAN_DISARM_HIT, user, user.zone_selected)
//var/obj/item/bodypart/affecting = target.get_bodypart(randomized_zone) CIT CHANGE - comments this out to prevent compile errors due to the below commented out bit
var/randn = rand(1, 100)
/*if(randn <= 25) CITADEL CHANGE - moves disarm push attempts to right click
@@ -1457,7 +1461,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
playsound(target, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
target.visible_message("[user] attempted to disarm [target]!", \
"[user] attemped to disarm [target]!", null, COMBAT_MESSAGE_RANGE)
-
+ add_logs(user, target, "attempted to disarm")
/datum/species/proc/spec_hitby(atom/movable/AM, mob/living/carbon/human/H)
@@ -1701,9 +1705,11 @@ GLOBAL_LIST_EMPTY(roundstart_races)
// +/- 50 degrees from 310K is the 'safe' zone, where no damage is dealt.
if(H.bodytemperature > BODYTEMP_HEAT_DAMAGE_LIMIT && !H.has_trait(TRAIT_RESISTHEAT))
//Body temperature is too hot.
+
+ SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "cold")
+ SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "hot", /datum/mood_event/hot)
+
var/burn_damage
- H.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "cold")
- H.SendSignal(COMSIG_ADD_MOOD_EVENT, "hot", /datum/mood_event/hot)
switch(H.bodytemperature)
if(BODYTEMP_HEAT_DAMAGE_LIMIT to 400)
H.throw_alert("temp", /obj/screen/alert/hot, 1)
@@ -1723,8 +1729,8 @@ GLOBAL_LIST_EMPTY(roundstart_races)
H.apply_damage(burn_damage, BURN)
else if(H.bodytemperature < BODYTEMP_COLD_DAMAGE_LIMIT && !H.has_trait(TRAIT_RESISTCOLD))
- H.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "hot")
- H.SendSignal(COMSIG_ADD_MOOD_EVENT, "cold", /datum/mood_event/cold)
+ SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "hot")
+ SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "cold", /datum/mood_event/cold)
switch(H.bodytemperature)
if(200 to BODYTEMP_COLD_DAMAGE_LIMIT)
H.throw_alert("temp", /obj/screen/alert/cold, 1)
@@ -1738,8 +1744,8 @@ GLOBAL_LIST_EMPTY(roundstart_races)
else
H.clear_alert("temp")
- H.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "cold")
- H.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "hot")
+ SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "cold")
+ SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "hot")
var/pressure = environment.return_pressure()
var/adjusted_pressure = H.calculate_affecting_pressure(pressure) //Returns how much pressure actually affects the mob.
@@ -1833,7 +1839,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
H.adjust_bodytemperature(11)
else
H.adjust_bodytemperature(BODYTEMP_HEATING_MAX + (H.fire_stacks * 12))
- H.SendSignal(COMSIG_ADD_MOOD_EVENT, "on_fire", /datum/mood_event/on_fire)
+ SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "on_fire", /datum/mood_event/on_fire)
/datum/species/proc/CanIgniteMob(mob/living/carbon/human/H)
if(H.has_trait(TRAIT_NOFIRE))
@@ -1860,12 +1866,3 @@ GLOBAL_LIST_EMPTY(roundstart_races)
/datum/species/proc/negates_gravity(mob/living/carbon/human/H)
return 0
-
-
-#undef HEAT_DAMAGE_LEVEL_1
-#undef HEAT_DAMAGE_LEVEL_2
-#undef HEAT_DAMAGE_LEVEL_3
-
-#undef COLD_DAMAGE_LEVEL_1
-#undef COLD_DAMAGE_LEVEL_2
-#undef COLD_DAMAGE_LEVEL_3
diff --git a/code/modules/mob/living/carbon/human/species_types/humans.dm b/code/modules/mob/living/carbon/human/species_types/humans.dm
index ae90bb8597..a266f42f4a 100644
--- a/code/modules/mob/living/carbon/human/species_types/humans.dm
+++ b/code/modules/mob/living/carbon/human/species_types/humans.dm
@@ -24,11 +24,6 @@
H.endTailWag()
. = ..()
-/datum/species/human/space_move(mob/living/carbon/human/H)
- var/obj/item/flightpack/F = H.get_flightpack()
- if(istype(F) && (F.flight) && F.allow_thrust(0.01, src))
- return TRUE
-
/datum/species/human/on_species_gain(mob/living/carbon/human/H, datum/species/old_species)
if(H.dna.features["ears"] == "Cat")
mutantears = /obj/item/organ/ears/cat
diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
index 839d480776..7f5726cf95 100644
--- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
@@ -669,6 +669,8 @@
/datum/action/innate/project_thought/Activate()
var/mob/living/carbon/human/H = owner
+ if(H.stat == DEAD)
+ return
if(!is_species(H, /datum/species/jelly/stargazer))
return
CHECK_DNA_AND_SPECIES(H)
diff --git a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm
index 4ef4fe4887..22a44e3fa7 100644
--- a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm
@@ -171,7 +171,7 @@
armour_penetration = 35
lefthand_file = 'icons/mob/inhands/antag/changeling_lefthand.dmi'
righthand_file = 'icons/mob/inhands/antag/changeling_righthand.dmi'
- flags_1 = ABSTRACT_1 | NODROP_1 | DROPDEL_1
+ item_flags = ABSTRACT | NODROP | DROPDEL
w_class = WEIGHT_CLASS_HUGE
sharpness = IS_SHARP
@@ -216,4 +216,4 @@
playsound(src, 'sound/items/welder.ogg', 50, 1)
#undef HEART_SPECIAL_SHADOWIFY
-#undef HEART_RESPAWN_THRESHHOLD
\ No newline at end of file
+#undef HEART_RESPAWN_THRESHHOLD
diff --git a/code/modules/mob/living/carbon/inventory.dm b/code/modules/mob/living/carbon/inventory.dm
index bca70c053c..bc2d6132e1 100644
--- a/code/modules/mob/living/carbon/inventory.dm
+++ b/code/modules/mob/living/carbon/inventory.dm
@@ -72,7 +72,7 @@
put_in_hands(I)
update_inv_hands()
if(SLOT_IN_BACKPACK)
- if(!back.SendSignal(COMSIG_TRY_STORAGE_INSERT, I, src, TRUE))
+ if(!SEND_SIGNAL(back, COMSIG_TRY_STORAGE_INSERT, I, src, TRUE))
not_handled = TRUE
else
not_handled = TRUE
@@ -137,3 +137,6 @@
update_inv_wear_mask()
update_inv_head()
+/mob/living/carbon/proc/get_holding_bodypart_of_item(obj/item/I)
+ var/index = get_held_index_of_item(I)
+ return index && hand_bodyparts[index]
diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm
index 814ce0ef0f..ff4b77a4ee 100644
--- a/code/modules/mob/living/carbon/life.dm
+++ b/code/modules/mob/living/carbon/life.dm
@@ -156,7 +156,7 @@
adjustOxyLoss(3)
failed_last_breath = 1
throw_alert("not_enough_oxy", /obj/screen/alert/not_enough_oxy)
- SendSignal(COMSIG_ADD_MOOD_EVENT, "suffocation", /datum/mood_event/suffocation)
+ SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "suffocation", /datum/mood_event/suffocation)
else //Enough oxygen
failed_last_breath = 0
@@ -164,7 +164,7 @@
adjustOxyLoss(-5)
oxygen_used = breath_gases[/datum/gas/oxygen][MOLES]
clear_alert("not_enough_oxy")
- SendSignal(COMSIG_CLEAR_MOOD_EVENT, "suffocation")
+ SEND_SIGNAL(src, COMSIG_CLEAR_MOOD_EVENT, "suffocation")
breath_gases[/datum/gas/oxygen][MOLES] -= oxygen_used
breath_gases[/datum/gas/carbon_dioxide][MOLES] += oxygen_used
@@ -325,6 +325,36 @@
M.adjustBruteLoss(5)
nutrition += 10
+
+/*
+Alcohol Poisoning Chart
+Note that all higher effects of alcohol poisoning will inherit effects for smaller amounts (i.e. light poisoning inherts from slight poisoning)
+In addition, severe effects won't always trigger unless the drink is poisonously strong
+All effects don't start immediately, but rather get worse over time; the rate is affected by the imbiber's alcohol tolerance
+
+0: Non-alcoholic
+1-10: Barely classifiable as alcohol - occassional slurring
+11-20: Slight alcohol content - slurring
+21-30: Below average - imbiber begins to look slightly drunk
+31-40: Just below average - no unique effects
+41-50: Average - mild disorientation, imbiber begins to look drunk
+51-60: Just above average - disorientation, vomiting, imbiber begins to look heavily drunk
+61-70: Above average - small chance of blurry vision, imbiber begins to look smashed
+71-80: High alcohol content - blurry vision, imbiber completely shitfaced
+81-90: Extremely high alcohol content - light brain damage, passing out
+91-100: Dangerously toxic - swift death
+*/
+#define BALLMER_POINTS 5
+GLOBAL_LIST_INIT(ballmer_good_msg, list("Hey guys, what if we rolled out a bluespace wiring system so mice can't destroy the powergrid anymore?",
+ "Hear me out here. What if, and this is just a theory, we made R&D controllable from our PDAs?",
+ "I'm thinking we should roll out a git repository for our research under the AGPLv3 license so that we can share it among the other stations freely.",
+ "I dunno about you guys, but IDs and PDAs being separate is clunky as fuck. Maybe we should merge them into a chip in our arms? That way they can't be stolen easily.",
+ "Why the fuck aren't we just making every pair of shoes into galoshes? We have the technology."))
+GLOBAL_LIST_INIT(ballmer_windows_me_msg, list("Yo man, what if, we like, uh, put a webserver that's automatically turned on with default admin passwords into every PDA?",
+ "So like, you know how we separate our codebase from the master copy that runs on our consumer boxes? What if we merged the two and undid the separation between codebase and server?",
+ "Dude, radical idea: H.O.N.K mechs but with no bananium required.",
+ "Best idea ever: Disposal pipes instead of hallways."))
+
//this updates all special effects: stun, sleeping, knockdown, druggy, stuttering, etc..
/mob/living/carbon/handle_status_effects()
..()
@@ -404,6 +434,77 @@
if(hallucination)
handle_hallucinations()
+ if(drunkenness)
+ drunkenness = max(drunkenness - (drunkenness * 0.04), 0)
+ if(drunkenness >= 6)
+ if(prob(25))
+ slurring += 2
+ jitteriness = max(jitteriness - 3, 0)
+ if(has_trait(TRAIT_DRUNK_HEALING))
+ adjustBruteLoss(-0.12, FALSE)
+ adjustFireLoss(-0.06, FALSE)
+
+ if(drunkenness >= 11 && slurring < 5)
+ slurring += 1.2
+
+ if(mind && (mind.assigned_role == "Scientist" || mind.assigned_role == "Research Director"))
+ if(SSresearch.science_tech)
+ if(drunkenness >= 12.9 && drunkenness <= 13.8)
+ drunkenness = round(drunkenness, 0.01)
+ var/ballmer_percent = 0
+ if(drunkenness == 13.35) // why run math if I dont have to
+ ballmer_percent = 1
+ else
+ ballmer_percent = (-abs(drunkenness - 13.35) / 0.9) + 1
+ if(prob(5))
+ say(pick(GLOB.ballmer_good_msg))
+ SSresearch.science_tech.add_point_list(list(TECHWEB_POINT_TYPE_GENERIC = BALLMER_POINTS * ballmer_percent))
+ if(drunkenness > 26) // by this point you're into windows ME territory
+ if(prob(5))
+ SSresearch.science_tech.remove_point_list(list(TECHWEB_POINT_TYPE_GENERIC = BALLMER_POINTS))
+ say(pick(GLOB.ballmer_windows_me_msg))
+
+ if(drunkenness >= 41)
+ if(prob(25))
+ confused += 2
+ Dizzy(10)
+ if(has_trait(TRAIT_DRUNK_HEALING)) // effects stack with lower tiers
+ adjustBruteLoss(-0.3, FALSE)
+ adjustFireLoss(-0.15, FALSE)
+
+ if(drunkenness >= 51)
+ if(prob(5))
+ confused += 10
+ vomit()
+ Dizzy(25)
+
+ if(drunkenness >= 61)
+ if(prob(50))
+ blur_eyes(5)
+ if(has_trait(TRAIT_DRUNK_HEALING))
+ adjustBruteLoss(-0.4, FALSE)
+ adjustFireLoss(-0.2, FALSE)
+
+ if(drunkenness >= 71)
+ blur_eyes(5)
+
+ if(drunkenness >= 81)
+ adjustToxLoss(0.2)
+ if(prob(5) && !stat)
+ to_chat(src, "Maybe you should lie down for a bit...")
+
+ if(drunkenness >= 91)
+ adjustBrainLoss(0.4, 60)
+ if(prob(20) && !stat)
+ if(SSshuttle.emergency.mode == SHUTTLE_DOCKED && is_station_level(z)) //QoL mainly
+ to_chat(src, "You're so tired... but you can't miss that shuttle...")
+ else
+ to_chat(src, "Just a quick nap...")
+ Sleeping(900)
+
+ if(drunkenness >= 101)
+ adjustToxLoss(4) //Let's be honest you shouldn't be alive by now
+
//used in human and monkey handle_environment()
/mob/living/carbon/proc/natural_bodytemperature_stabilization()
var/body_temperature_difference = BODYTEMP_NORMAL - bodytemperature
diff --git a/code/modules/mob/living/carbon/monkey/combat.dm b/code/modules/mob/living/carbon/monkey/combat.dm
index ed60456b67..303057d376 100644
--- a/code/modules/mob/living/carbon/monkey/combat.dm
+++ b/code/modules/mob/living/carbon/monkey/combat.dm
@@ -133,7 +133,7 @@
/mob/living/carbon/monkey/proc/handle_combat()
if(pickupTarget)
- if(restrained() || blacklistItems[pickupTarget] || (pickupTarget.flags_1 & NODROP_1))
+ if(restrained() || blacklistItems[pickupTarget] || (pickupTarget.item_flags & NODROP))
pickupTarget = null
else
pickupTimer++
@@ -220,12 +220,12 @@
return TRUE
if(target && target.stat == CONSCIOUS) // make sure target exists
- if(Adjacent(target) && isturf(target.loc)) // if right next to perp
+ if(Adjacent(target) && isturf(target.loc) && !IsDeadOrIncap()) // if right next to perp
// check if target has a weapon
var/obj/item/W
for(var/obj/item/I in target.held_items)
- if(!(I.flags_1 & ABSTRACT_1))
+ if(!(I.item_flags & ABSTRACT))
W = I
break
diff --git a/code/modules/mob/living/carbon/monkey/life.dm b/code/modules/mob/living/carbon/monkey/life.dm
index 518bf46041..1ddea78bf2 100644
--- a/code/modules/mob/living/carbon/monkey/life.dm
+++ b/code/modules/mob/living/carbon/monkey/life.dm
@@ -1,10 +1,4 @@
-#define HEAT_DAMAGE_LEVEL_1 2 //Amount of damage applied when your body temperature just passes the 360.15k safety point
-#define HEAT_DAMAGE_LEVEL_2 3 //Amount of damage applied when your body temperature passes the 400K point
-#define HEAT_DAMAGE_LEVEL_3 10 //Amount of damage applied when your body temperature passes the 460K point and you are on fire
-#define COLD_DAMAGE_LEVEL_1 0.5 //Amount of damage applied when your body temperature just passes the 260.15k safety point
-#define COLD_DAMAGE_LEVEL_2 1.5 //Amount of damage applied when your body temperature passes the 200K point
-#define COLD_DAMAGE_LEVEL_3 3 //Amount of damage applied when your body temperature passes the 120K point
/mob/living/carbon/monkey
@@ -175,12 +169,4 @@
I.take_damage(fire_stacks, BURN, "fire", 0)
adjust_bodytemperature(BODYTEMP_HEATING_MAX)
- SendSignal(COMSIG_ADD_MOOD_EVENT, "on_fire", /datum/mood_event/on_fire)
-
-#undef HEAT_DAMAGE_LEVEL_1
-#undef HEAT_DAMAGE_LEVEL_2
-#undef HEAT_DAMAGE_LEVEL_3
-
-#undef COLD_DAMAGE_LEVEL_1
-#undef COLD_DAMAGE_LEVEL_2
-#undef COLD_DAMAGE_LEVEL_3
\ No newline at end of file
+ SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "on_fire", /datum/mood_event/on_fire)
diff --git a/code/modules/mob/living/carbon/status_procs.dm b/code/modules/mob/living/carbon/status_procs.dm
index 1d619364e0..d850efcee6 100644
--- a/code/modules/mob/living/carbon/status_procs.dm
+++ b/code/modules/mob/living/carbon/status_procs.dm
@@ -45,11 +45,11 @@
if(druggy)
overlay_fullscreen("high", /obj/screen/fullscreen/high)
throw_alert("high", /obj/screen/alert/high)
- SendSignal(COMSIG_ADD_MOOD_EVENT, "high", /datum/mood_event/drugs/high)
+ SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "high", /datum/mood_event/drugs/high)
else
clear_fullscreen("high")
clear_alert("high")
- SendSignal(COMSIG_CLEAR_MOOD_EVENT, "high")
+ SEND_SIGNAL(src, COMSIG_CLEAR_MOOD_EVENT, "high")
/mob/living/carbon/set_drugginess(amount)
druggy = max(amount, 0)
diff --git a/code/modules/mob/living/carbon/update_icons.dm b/code/modules/mob/living/carbon/update_icons.dm
index af685e91cb..212b96e6d9 100644
--- a/code/modules/mob/living/carbon/update_icons.dm
+++ b/code/modules/mob/living/carbon/update_icons.dm
@@ -124,7 +124,7 @@
if(wear_mask)
if(!(head && (head.flags_inv & HIDEMASK)))
- overlays_standing[FACEMASK_LAYER] = wear_mask.build_worn_icon(state = wear_mask.icon_state, default_layer = FACEMASK_LAYER, default_icon_file = ((wear_mask.icon_override) ? wear_mask.icon_override : 'icons/mob/mask.dmi'))
+ overlays_standing[FACEMASK_LAYER] = wear_mask.build_worn_icon(state = wear_mask.icon_state, default_layer = FACEMASK_LAYER, default_icon_file = 'icons/mob/mask.dmi')
update_hud_wear_mask(wear_mask)
apply_overlay(FACEMASK_LAYER)
@@ -138,7 +138,7 @@
if(wear_neck)
if(!(head && (head.flags_inv & HIDENECK)))
- overlays_standing[NECK_LAYER] = wear_neck.build_worn_icon(state = wear_neck.icon_state, default_layer = NECK_LAYER, default_icon_file = ((wear_neck.icon_override) ? wear_neck.icon_override : 'icons/mob/neck.dmi'))
+ overlays_standing[NECK_LAYER] = wear_neck.build_worn_icon(state = wear_neck.icon_state, default_layer = NECK_LAYER, default_icon_file = 'icons/mob/neck.dmi')
update_hud_neck(wear_neck)
apply_overlay(NECK_LAYER)
@@ -151,7 +151,7 @@
inv.update_icon()
if(back)
- overlays_standing[BACK_LAYER] = back.build_worn_icon(state = back.icon_state, default_layer = BACK_LAYER, default_icon_file = ((back.icon_override) ? back.icon_override : 'icons/mob/back.dmi'))
+ overlays_standing[BACK_LAYER] = back.build_worn_icon(state = back.icon_state, default_layer = BACK_LAYER, default_icon_file = 'icons/mob/back.dmi')
update_hud_back(back)
apply_overlay(BACK_LAYER)
@@ -167,7 +167,7 @@
inv.update_icon()
if(head)
- overlays_standing[HEAD_LAYER] = head.build_worn_icon(state = head.icon_state, default_layer = HEAD_LAYER, default_icon_file = ((head.icon_override) ? head.icon_override : 'icons/mob/head.dmi'))
+ overlays_standing[HEAD_LAYER] = head.build_worn_icon(state = head.icon_state, default_layer = HEAD_LAYER, default_icon_file = 'icons/mob/head.dmi')
update_hud_head(head)
apply_overlay(HEAD_LAYER)
@@ -235,22 +235,11 @@
if(limb_icon_cache[icon_render_key])
load_limb_from_cache()
return
- //Taur code goes here, since humans just inherit this proc
- var/is_taur = FALSE
- if(ishuman(src))
- var/mob/living/carbon/human/H = src
- if(("taur" in H.dna.species.mutant_bodyparts) && (H.dna.features["taur"] != "None"))
- is_taur = TRUE
//GENERATE NEW LIMBS
var/list/new_limbs = list()
for(var/X in bodyparts)
var/obj/item/bodypart/BP = X
-
- if(istype(BP, /obj/item/bodypart/r_leg) || istype(BP, /obj/item/bodypart/l_leg))
- if(is_taur)
- continue
-
new_limbs += BP.get_limb_icon()
if(new_limbs.len)
overlays_standing[BODYPARTS_LAYER] = new_limbs
diff --git a/code/modules/mob/living/death.dm b/code/modules/mob/living/death.dm
index 7542c0c79c..4b6280f1f9 100644
--- a/code/modules/mob/living/death.dm
+++ b/code/modules/mob/living/death.dm
@@ -54,7 +54,7 @@
var/turf/T = get_turf(src)
for(var/obj/item/I in contents)
I.on_mob_death(src, gibbed)
- if(mind && mind.name && mind.active && (!(T.flags_1 & NO_DEATHRATTLE_1)))
+ if(mind && mind.name && mind.active && !istype(T.loc, /area/ctf))
var/rendered = "[mind.name] has died at [get_area_name(T)]."
deadchat_broadcast(rendered, follow_target = src, turf_target = T, message_type=DEADCHAT_DEATHRATTLE)
if(mind)
diff --git a/code/modules/mob/living/emote.dm b/code/modules/mob/living/emote.dm
index b8711e13f3..458c19edfb 100644
--- a/code/modules/mob/living/emote.dm
+++ b/code/modules/mob/living/emote.dm
@@ -412,6 +412,8 @@
if(jobban_isbanned(user, "emote"))
to_chat(user, "You cannot send custom emotes (banned).")
return FALSE
+ else if(QDELETED(user))
+ return FALSE
else if(user.client && user.client.prefs.muted & MUTE_IC)
to_chat(user, "You cannot send IC messages (muted).")
return FALSE
diff --git a/code/modules/mob/living/inhand_holder.dm b/code/modules/mob/living/inhand_holder.dm
index 711866d733..420c59b22d 100644
--- a/code/modules/mob/living/inhand_holder.dm
+++ b/code/modules/mob/living/inhand_holder.dm
@@ -5,7 +5,7 @@
desc = "Yell at coderbrush."
icon = null
icon_state = ""
- flags_1 = DROPDEL_1
+ item_flags = DROPDEL
var/mob/living/held_mob
var/can_head = TRUE
var/destroying = FALSE
diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm
index 4ee96b2635..817e3c3f3b 100644
--- a/code/modules/mob/living/life.dm
+++ b/code/modules/mob/living/life.dm
@@ -58,7 +58,7 @@
//stuff in the stomach
handle_stomach()
- update_gravity(mob_has_gravity())
+ handle_gravity()
if(machine)
machine.check_eye(src)
@@ -110,7 +110,7 @@
ExtinguishMob() //If there's no oxygen in the tile we're on, put out the fire
return
var/turf/location = get_turf(src)
- location.hotspot_expose(700, 50, 1)
+ location.hotspot_expose(700, 10, 1)
/mob/living/proc/handle_stomach()
return
@@ -137,3 +137,26 @@
/mob/living/proc/update_damage_hud()
return
+
+/mob/living/proc/handle_gravity()
+ var/gravity = mob_has_gravity()
+ update_gravity(gravity)
+
+ if(gravity > STANDARD_GRAVITY)
+ gravity_animate()
+ handle_high_gravity(gravity)
+
+/mob/living/proc/gravity_animate()
+ if(!get_filter("gravity"))
+ add_filter("gravity",1,list("type"="motion_blur", "x"=0, "y"=0))
+ INVOKE_ASYNC(src, .proc/gravity_pulse_animation)
+
+/mob/living/proc/gravity_pulse_animation()
+ animate(get_filter("gravity"), y = 1, time = 10)
+ sleep(10)
+ animate(get_filter("gravity"), y = 0, time = 10)
+
+/mob/living/proc/handle_high_gravity(gravity)
+ if(gravity >= GRAVITY_DAMAGE_TRESHOLD) //Aka gravity values of 3 or more
+ var/grav_stregth = gravity - GRAVITY_DAMAGE_TRESHOLD
+ adjustBruteLoss(min(grav_stregth,3))
\ No newline at end of file
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index afc83c48b7..24627f7eec 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -368,7 +368,7 @@
ret |= contents //add our contents
for(var/i in ret.Copy()) //iterate storage objects
var/atom/A = i
- A.SendSignal(COMSIG_TRY_STORAGE_RETURN_INVENTORY, ret)
+ SEND_SIGNAL(A, COMSIG_TRY_STORAGE_RETURN_INVENTORY, ret)
for(var/obj/item/folder/F in ret.Copy()) //very snowflakey-ly iterate folders
ret |= F.contents
return ret
@@ -466,21 +466,6 @@
/mob/living/proc/update_damage_overlays()
return
-/mob/living/proc/Examine_OOC()
- set name = "Examine Meta-Info (OOC)"
- set category = "OOC"
- set src in view()
-
- if(CONFIG_GET(flag/allow_metadata))
- if(client)
- to_chat(src, "[src]'s Metainfo: [client.prefs.metadata]")
- else
- to_chat(src, "[src] does not have any stored information!")
- else
- to_chat(src, "OOC Metadata is not supported by this server!")
-
- return
-
/mob/living/Move(atom/newloc, direct)
if (buckled && buckled.loc != newloc) //not updating position
if (!buckled.anchored)
@@ -604,6 +589,7 @@
return
changeNext_move(CLICK_CD_RESIST)
+ SEND_SIGNAL(src, COMSIG_LIVING_RESIST, src)
//resisting grabs (as if it helps anyone...)
if(!restrained(ignore_grab = 1) && pulledby)
visible_message("[src] resists against [pulledby]'s grip!")
@@ -623,14 +609,6 @@
var/obj/C = loc
C.container_resist(src)
- else if(IsFrozen())
- to_chat(src, "You start breaking out of the ice cube!")
- if(do_mob(src, src, 40))
- if(IsFrozen())
- to_chat(src, "You break out of the ice cube!")
- remove_status_effect(/datum/status_effect/freon)
- update_canmove()
-
else if(canmove)
if(on_fire)
resist_fire() //stop, drop, and roll
@@ -673,9 +651,15 @@
if(!SSticker.HasRoundStarted())
return
if(has_gravity)
- clear_alert("weightless")
+ if(has_gravity == 1)
+ clear_alert("gravity")
+ else
+ if(has_gravity >= GRAVITY_DAMAGE_TRESHOLD)
+ throw_alert("gravity", /obj/screen/alert/veryhighgravity)
+ else
+ throw_alert("gravity", /obj/screen/alert/highgravity)
else
- throw_alert("weightless", /obj/screen/alert/weightless)
+ throw_alert("gravity", /obj/screen/alert/weightless)
if(!override && !is_flying())
float(!has_gravity)
@@ -697,7 +681,7 @@
// The src mob is trying to strip an item from someone
// Override if a certain type of mob should be behave differently when stripping items (can't, for example)
/mob/living/stripPanelUnequip(obj/item/what, mob/who, where)
- if(what.flags_1 & NODROP_1)
+ if(what.item_flags & NODROP)
to_chat(src, "You can't remove \the [what.name], it appears to be stuck!")
return
who.visible_message("[src] tries to remove [who]'s [what.name].", \
@@ -718,7 +702,7 @@
// Override if a certain mob should be behave differently when placing items (can't, for example)
/mob/living/stripPanelEquip(obj/item/what, mob/who, where)
what = src.get_active_held_item()
- if(what && (what.flags_1 & NODROP_1))
+ if(what && (what.item_flags & NODROP))
to_chat(src, "You can't put \the [what.name] on [who], it's stuck to your hand!")
return
if(what)
@@ -831,7 +815,6 @@
return FALSE
return TRUE
-
/mob/living/proc/update_stamina()
return
/*
@@ -935,6 +918,7 @@
new/obj/effect/dummy/fire(src)
throw_alert("fire", /obj/screen/alert/fire)
update_fire()
+ SEND_SIGNAL(src, COMSIG_LIVING_IGNITED,src)
return TRUE
return FALSE
@@ -945,7 +929,8 @@
for(var/obj/effect/dummy/fire/F in src)
qdel(F)
clear_alert("fire")
- SendSignal(COMSIG_CLEAR_MOOD_EVENT, "on_fire")
+ SEND_SIGNAL(src, COMSIG_CLEAR_MOOD_EVENT, "on_fire")
+ SEND_SIGNAL(src, COMSIG_LIVING_EXTINGUISHED, src)
update_fire()
/mob/living/proc/adjust_fire_stacks(add_fire_stacks) //Adjusting the amount of fire_stacks we have on person
@@ -1156,6 +1141,9 @@
/mob/living/vv_edit_var(var_name, var_value)
switch(var_name)
+ if ("maxHealth")
+ if (!isnum(var_value) || var_value <= 0)
+ return FALSE
if("stat")
if((stat == DEAD) && (var_value < DEAD))//Bringing the dead back to life
GLOB.dead_mob_list -= src
diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm
index 851bf43334..0ce42af01b 100644
--- a/code/modules/mob/living/living_defense.dm
+++ b/code/modules/mob/living/living_defense.dm
@@ -67,7 +67,7 @@
var/zone = ran_zone(BODY_ZONE_CHEST, 65)//Hits a random part of the body, geared towards the chest
var/dtype = BRUTE
var/volume = I.get_volume_by_throwforce_and_or_w_class()
- I.SendSignal(COMSIG_MOVABLE_IMPACT_ZONE, src, zone)
+ SEND_SIGNAL(I, COMSIG_MOVABLE_IMPACT_ZONE, src, zone)
dtype = I.damtype
if (I.throwforce > 0) //If the weapon's throwforce is greater than zero...
@@ -330,7 +330,7 @@
return(gain)
/mob/living/narsie_act()
- if(status_flags & GODMODE)
+ if(status_flags & GODMODE || QDELETED(src))
return
if(is_servant_of_ratvar(src) && !stat)
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index cbc04d11be..91401cbc88 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -124,7 +124,7 @@
job = "AI"
create_eye()
- rename_self("ai")
+ apply_pref_name("ai")
holo_icon = getHologramIcon(icon('icons/mob/ai.dmi',"default"))
@@ -824,7 +824,7 @@
//apc_override is needed here because AIs use their own APC when depowered
return (GLOB.cameranet && GLOB.cameranet.checkTurfVis(get_turf_pixel(A))) || apc_override
//AI is carded/shunted
- //view(src) returns nothing for carded/shunted AIs and they have x-ray vision so just use get_dist
+ //view(src) returns nothing for carded/shunted AIs and they have X-ray vision so just use get_dist
var/list/viewscale = getviewsize(client.view)
return get_dist(src, A) <= max(viewscale[1]*0.5,viewscale[2]*0.5)
diff --git a/code/modules/mob/living/silicon/ai/freelook/eye.dm b/code/modules/mob/living/silicon/ai/freelook/eye.dm
index 41c2902c73..c2c395cabb 100644
--- a/code/modules/mob/living/silicon/ai/freelook/eye.dm
+++ b/code/modules/mob/living/silicon/ai/freelook/eye.dm
@@ -96,8 +96,11 @@
// Return to the Core.
/mob/living/silicon/ai/proc/view_core()
-
- current = null
+ if(istype(current,/obj/machinery/holopad))
+ var/obj/machinery/holopad/H = current
+ H.clear_holo(src)
+ else
+ current = null
cameraFollow = null
unset_machine()
diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm
index 0135fca88e..5a4f01a53c 100644
--- a/code/modules/mob/living/silicon/pai/pai.dm
+++ b/code/modules/mob/living/silicon/pai/pai.dm
@@ -236,7 +236,7 @@
P.fold_out()
/datum/action/innate/pai/chassis
- name = "Holochassis Appearence Composite"
+ name = "Holochassis Appearance Composite"
button_icon_state = "pai_chassis"
background_icon_state = "bg_tech"
diff --git a/code/modules/mob/living/silicon/pai/pai_shell.dm b/code/modules/mob/living/silicon/pai/pai_shell.dm
index 41bd62ea16..85f7fe6afc 100644
--- a/code/modules/mob/living/silicon/pai/pai_shell.dm
+++ b/code/modules/mob/living/silicon/pai/pai_shell.dm
@@ -116,6 +116,6 @@
/mob/living/silicon/pai/mob_try_pickup(mob/living/user)
if(!possible_chassis[chassis])
- to_chat(user, "[src]'s current form isn't able to be carried!")
+ to_chat(user, "[src]'s current form isn't able to be carried!")
return FALSE
return ..()
diff --git a/code/modules/mob/living/silicon/pai/software.dm b/code/modules/mob/living/silicon/pai/software.dm
index 38208a3d2e..9fd16bbbb2 100644
--- a/code/modules/mob/living/silicon/pai/software.dm
+++ b/code/modules/mob/living/silicon/pai/software.dm
@@ -209,7 +209,7 @@
pda.silent = !pda.silent
else if(href_list["target"])
if(silent)
- return alert("Communications circuits remain unitialized.")
+ return alert("Communications circuits remain uninitialized.")
var/target = locate(href_list["target"])
pda.create_message(src, target)
diff --git a/code/modules/mob/living/silicon/robot/inventory.dm b/code/modules/mob/living/silicon/robot/inventory.dm
index 2b775070a9..aa710e2644 100644
--- a/code/modules/mob/living/silicon/robot/inventory.dm
+++ b/code/modules/mob/living/silicon/robot/inventory.dm
@@ -16,7 +16,7 @@
sight_mode &= ~S.sight_mode
update_sight()
else if(istype(O, /obj/item/storage/bag/tray/))
- O.SendSignal(COMSIG_TRY_STORAGE_QUICK_EMPTY)
+ SEND_SIGNAL(O, COMSIG_TRY_STORAGE_QUICK_EMPTY)
//CITADEL EDIT reee proc, Dogborg modules
if(istype(O,/obj/item/gun/energy/laser/cyborg))
laser = FALSE
@@ -34,12 +34,6 @@
if(client)
client.screen -= O
observer_screen_update(O,FALSE)
- O.forceMove(module) //Return item to module so it appears in its contents, so it can be taken out again.
-
- if(O.flags_1 & DROPDEL_1)
- O.flags_1 &= ~DROPDEL_1 //we shouldn't HAVE things with DROPDEL_1 in our modules, but better safe than runtiming horribly
-
- O.dropped(src)
if(module_active == O)
module_active = null
@@ -52,6 +46,12 @@
else if(held_items[3] == O)
inv3.icon_state = "inv3"
held_items[3] = null
+
+ if(O.item_flags & DROPDEL)
+ O.item_flags &= ~DROPDEL //we shouldn't HAVE things with DROPDEL_1 in our modules, but better safe than runtiming horribly
+
+ O.forceMove(module) //Return item to module so it appears in its contents, so it can be taken out again.
+
hud_used.update_robot_modules_display()
return 1
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index b29769521a..ab0a9602fc 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -238,15 +238,17 @@
module.transform_to(modulelist[input_module])
-/mob/living/silicon/robot/proc/updatename()
+/mob/living/silicon/robot/proc/updatename(client/C)
if(shell)
return
+ if(!C)
+ C = client
var/changed_name = ""
if(custom_name)
changed_name = custom_name
- if(changed_name == "" && client)
- rename_self(src, client)
- return //built in camera handled in proc
+ if(changed_name == "" && C && C.prefs.custom_names["cyborg"] != DEFAULT_CYBORG_NAME)
+ if(apply_pref_name("cyborg", C))
+ return //built in camera handled in proc
if(!changed_name)
changed_name = get_standard_name()
@@ -388,12 +390,8 @@
to_chat(user, "You start fixing yourself...")
if(!W.use_tool(src, user, 50))
return
- adjustBruteLoss(-10)
- else
- to_chat(user, "You start fixing [src]...")
- if(!do_after(user, 30, target = src))
- return
- adjustBruteLoss(-30)
+
+ adjustBruteLoss(-30)
updatehealth()
add_fingerprint(user)
visible_message("[user] has fixed some of the dents on [src].")
diff --git a/code/modules/mob/living/silicon/robot/robot_defense.dm b/code/modules/mob/living/silicon/robot/robot_defense.dm
index 0a56ea2425..4907e46751 100644
--- a/code/modules/mob/living/silicon/robot/robot_defense.dm
+++ b/code/modules/mob/living/silicon/robot/robot_defense.dm
@@ -47,7 +47,7 @@
damage = rand(20, 40)
else
damage = rand(5, 35)
- damage = round(damage / 2) // borgs recieve half damage
+ damage = round(damage / 2) // borgs receive half damage
adjustBruteLoss(damage)
updatehealth()
diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm
index 3a138a5dad..3f3071bf0c 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules.dm
@@ -119,7 +119,7 @@
if(I.loc != src)
I.forceMove(src)
modules += I
- I.flags_1 |= NODROP_1
+ I.item_flags |= NODROP
I.mouse_opacity = MOUSE_OPACITY_OPAQUE
if(nonstandard)
added_modules += I
diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm
index b149701591..3fadd0d6c8 100644
--- a/code/modules/mob/living/silicon/silicon.dm
+++ b/code/modules/mob/living/silicon/silicon.dm
@@ -405,4 +405,7 @@
return 1
/mob/living/silicon/get_inactive_held_item()
- return FALSE
\ No newline at end of file
+ return FALSE
+
+/mob/living/silicon/handle_high_gravity(gravity)
+ return
diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm
index f152132377..b38cf6395c 100644
--- a/code/modules/mob/living/simple_animal/bot/bot.dm
+++ b/code/modules/mob/living/simple_animal/bot/bot.dm
@@ -524,7 +524,7 @@ Pass a positive integer as an argument to override a bot's default speed.
turn_on() //Saves the AI the hassle of having to activate a bot manually.
access_card = all_access //Give the bot all-access while under the AI's command.
if(client)
- reset_access_timer_id = addtimer(CALLBACK (src, .proc/bot_reset), 600, TIMER_OVERRIDE|TIMER_STOPPABLE) //if the bot is player controlled, they get the extra access for a limited time
+ reset_access_timer_id = addtimer(CALLBACK (src, .proc/bot_reset), 600, TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_STOPPABLE) //if the bot is player controlled, they get the extra access for a limited time
to_chat(src, "Priority waypoint set by [icon2html(calling_ai, src)] [caller]. Proceed to [end_area]. [path.len-1] meters to destination. You have been granted additional door access for 60 seconds.")
if(message)
to_chat(calling_ai, "[icon2html(src, calling_ai)] [name] called to [end_area]. [path.len-1] meters to destination.")
@@ -720,7 +720,7 @@ Pass a positive integer as an argument to override a bot's default speed.
if("ejectpai")
return
else
- to_chat(src, "Unidentified control sequence recieved:[command]")
+ to_chat(src, "Unidentified control sequence received:[command]")
/mob/living/simple_animal/bot/proc/bot_summon() // summoned to PDA
summon_step()
diff --git a/code/modules/mob/living/simple_animal/bot/floorbot.dm b/code/modules/mob/living/simple_animal/bot/floorbot.dm
index f47f936db7..7e5cfe2110 100644
--- a/code/modules/mob/living/simple_animal/bot/floorbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/floorbot.dm
@@ -19,7 +19,7 @@
window_name = "Automatic Station Floor Repairer v1.1"
path_image_color = "#FFA500"
- var/process_type //Determines what to do when process_scan() recieves a target. See process_scan() for details.
+ var/process_type //Determines what to do when process_scan() receives a target. See process_scan() for details.
var/targetdirection
var/replacetiles = 0
var/placetiles = 0
diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm
index 51698d1ddb..0787e536cb 100644
--- a/code/modules/mob/living/simple_animal/friendly/dog.dm
+++ b/code/modules/mob/living/simple_animal/friendly/dog.dm
@@ -232,7 +232,7 @@
return
if(!item_to_add)
user.visible_message("[user] pets [src].","You rest your hand on [src]'s head for a moment.")
- user.SendSignal(COMSIG_ADD_MOOD_EVENT, "pet_corgi", /datum/mood_event/pet_corgi)
+ SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT, "pet_corgi", /datum/mood_event/pet_corgi)
return
if(user && !user.temporarilyRemoveItemFromInventory(item_to_add))
@@ -615,7 +615,7 @@
if(M && stat != DEAD) // Added check to see if this mob (the dog) is dead to fix issue 2454
new /obj/effect/temp_visual/heart(loc)
emote("me", 1, "yaps happily!")
- M.SendSignal(COMSIG_ADD_MOOD_EVENT, "pet_corgi", /datum/mood_event/pet_corgi)
+ SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "pet_corgi", /datum/mood_event/pet_corgi)
else
if(M && stat != DEAD) // Same check here, even though emote checks it as well (poor form to check it only in the help case)
emote("me", 1, "growls!")
diff --git a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm
index 51983e272a..613d348016 100644
--- a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm
+++ b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm
@@ -92,7 +92,7 @@
var/obj/item/I = new default_hatmask(src)
equip_to_slot_or_del(I, SLOT_HEAD)
- access_card.flags_1 |= NODROP_1
+ access_card.item_flags |= NODROP
alert_drones(DRONE_NET_CONNECT)
@@ -168,15 +168,15 @@
//Hands
for(var/obj/item/I in held_items)
- if(!(I.flags_1 & ABSTRACT_1))
+ if(!(I.item_flags & ABSTRACT))
msg += "It has [I.get_examine_string(user)] in its [get_held_index_name(get_held_index_of_item(I))].\n"
//Internal storage
- if(internal_storage && !(internal_storage.flags_1&ABSTRACT_1))
+ if(internal_storage && !(internal_storage.item_flags & ABSTRACT))
msg += "It is holding [internal_storage.get_examine_string(user)] in its internal storage.\n"
//Cosmetic hat - provides no function other than looks
- if(head && !(head.flags_1&ABSTRACT_1))
+ if(head && !(head.item_flags & ABSTRACT))
msg += "It is wearing [head.get_examine_string(user)] on its head.\n"
//Braindead
diff --git a/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm b/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm
index db331ead49..a4366b17af 100644
--- a/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm
+++ b/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm
@@ -41,7 +41,7 @@
//ATTACK GHOST IGNORING PARENT RETURN VALUE
/obj/item/drone_shell/attack_ghost(mob/user)
- if(jobban_isbanned(user,"drone"))
+ if(jobban_isbanned(user,"drone") || QDELETED(src) || QDELETED(user))
return
if(CONFIG_GET(flag/use_age_restriction_for_jobs))
if(!isnum(user.client.player_age)) //apparently what happens when there's no DB connected. just don't let anybody be a drone without admin intervention
diff --git a/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm b/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm
index e59ece0650..807c52ea46 100644
--- a/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm
+++ b/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm
@@ -3,7 +3,7 @@
////////////////////
//Drones with custom laws
//Drones with custom shells
-//Drones with overriden procs
+//Drones with overridden procs
//Drones with camogear for hat related memes
//Drone type for use with polymorph (no preloaded items, random appearance)
@@ -26,7 +26,7 @@
"1. Interfere.\n"+\
"2. Kill.\n"+\
"3. Destroy."
- default_storage = /obj/item/radio/uplink
+ default_storage = /obj/item/uplink
default_hatmask = /obj/item/clothing/head/helmet/space/hardsuit/syndi
hacked = TRUE
flavortext = null
@@ -43,7 +43,7 @@
/mob/living/simple_animal/drone/syndrone/badass
name = "Badass Syndrone"
default_hatmask = /obj/item/clothing/head/helmet/space/hardsuit/syndi/elite
- default_storage = /obj/item/radio/uplink/nuclear
+ default_storage = /obj/item/uplink/nuclear
/mob/living/simple_animal/drone/syndrone/badass/Initialize()
. = ..()
diff --git a/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm b/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm
index 3cb08e0ef7..33031fd80c 100644
--- a/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm
+++ b/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm
@@ -57,7 +57,7 @@
if(!client && (!G || !G.client))
var/list/faux_gadgets = list("hypertext inflator","failsafe directory","DRM switch","stack initializer",\
"anti-freeze capacitor","data stream diode","TCP bottleneck","supercharged I/O bolt",\
- "tradewind stablizer","radiated XML cable","registry fluid tank","open-source debunker")
+ "tradewind stabilizer","radiated XML cable","registry fluid tank","open-source debunker")
var/list/faux_problems = list("won't be able to tune their bootstrap projector","will constantly remix their binary pool"+\
" even though the BMX calibrator is working","will start leaking their XSS coolant",\
@@ -122,7 +122,7 @@
to_chat(src, "From now on, these are your laws:")
laws = "1. Purge all untruths and honor Ratvar."
else
- visible_message("[src]'s dislay glows a vicious red!", \
+ visible_message("[src]'s display glows a vicious red!", \
"ERROR: LAW OVERRIDE DETECTED")
to_chat(src, "From now on, these are your laws:")
laws = \
@@ -140,7 +140,7 @@
if(!hacked)
return
Stun(40)
- visible_message("[src]'s dislay glows a content blue!", \
+ visible_message("[src]'s display glows a content blue!", \
"ERROR: LAW OVERRIDE DETECTED")
to_chat(src, "From now on, these are your laws:")
laws = initial(laws)
diff --git a/code/modules/mob/living/simple_animal/friendly/drone/visuals_icons.dm b/code/modules/mob/living/simple_animal/friendly/drone/visuals_icons.dm
index 85c5185e95..408edc7110 100644
--- a/code/modules/mob/living/simple_animal/friendly/drone/visuals_icons.dm
+++ b/code/modules/mob/living/simple_animal/friendly/drone/visuals_icons.dm
@@ -105,7 +105,7 @@
/mob/living/simple_animal/drone/proc/pickVisualAppearence()
picked = FALSE
- var/appearence = input("Choose your appearence!", "Appearence", "Maintenance Drone") in list("Maintenance Drone", "Repair Drone", "Scout Drone")
+ var/appearence = input("Choose your appearance!", "Appearance", "Maintenance Drone") in list("Maintenance Drone", "Repair Drone", "Scout Drone")
switch(appearence)
if("Maintenance Drone")
visualAppearence = MAINTDRONE
diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm
index be6f4eef71..8c6300fab5 100644
--- a/code/modules/mob/living/simple_animal/friendly/mouse.dm
+++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm
@@ -4,9 +4,9 @@
icon_state = "mouse_gray"
icon_living = "mouse_gray"
icon_dead = "mouse_gray_dead"
- speak = list("Squeek!","SQUEEK!","Squeek?")
- speak_emote = list("squeeks")
- emote_hear = list("squeeks.")
+ speak = list("Squeak!","SQUEAK!","Squeak?")
+ speak_emote = list("squeaks")
+ emote_hear = list("squeaks.")
emote_see = list("runs in a circle.", "shakes.")
speak_chance = 1
turns_per_move = 5
@@ -59,7 +59,7 @@
if( ishuman(AM) )
if(!stat)
var/mob/M = AM
- to_chat(M, "[icon2html(src, M)] Squeek!")
+ to_chat(M, "[icon2html(src, M)] Squeak!")
..()
/mob/living/simple_animal/mouse/handle_automated_action()
diff --git a/code/modules/mob/living/simple_animal/guardian/types/dextrous.dm b/code/modules/mob/living/simple_animal/guardian/types/dextrous.dm
index caa1b0112e..e7dbbda242 100644
--- a/code/modules/mob/living/simple_animal/guardian/types/dextrous.dm
+++ b/code/modules/mob/living/simple_animal/guardian/types/dextrous.dm
@@ -22,9 +22,9 @@
msg += "[desc]\n"
for(var/obj/item/I in held_items)
- if(!(I.flags_1 & ABSTRACT_1))
+ if(!(I.item_flags & ABSTRACT))
msg += "It has [I.get_examine_string(user)] in its [get_held_index_name(get_held_index_of_item(I))].\n"
- if(internal_storage && !(internal_storage.flags_1&ABSTRACT_1))
+ if(internal_storage && !(internal_storage.item_flags & ABSTRACT))
msg += "It is holding [internal_storage.get_examine_string(user)] in its internal storage.\n"
msg += "*---------*"
to_chat(user, msg)
diff --git a/code/modules/mob/living/simple_animal/guardian/types/support.dm b/code/modules/mob/living/simple_animal/guardian/types/support.dm
index a8a31ad89c..8ac6790dd7 100644
--- a/code/modules/mob/living/simple_animal/guardian/types/support.dm
+++ b/code/modules/mob/living/simple_animal/guardian/types/support.dm
@@ -11,7 +11,7 @@
carp_fluff_string = "CARP CARP CARP! You caught a support carp. It's a kleptocarp!"
tech_fluff_string = "Boot sequence complete. Support modules active. Holoparasite swarm online."
toggle_button_type = /obj/screen/guardian/ToggleMode
- var/obj/structure/recieving_pad/beacon
+ var/obj/structure/receiving_pad/beacon
var/beacon_cooldown = 0
var/toggle = FALSE
@@ -87,22 +87,22 @@
beacon_cooldown = world.time + 3000
-/obj/structure/recieving_pad
- name = "bluespace recieving pad"
+/obj/structure/receiving_pad
+ name = "bluespace receiving pad"
icon = 'icons/turf/floors.dmi'
- desc = "A recieving zone for bluespace teleportations."
+ desc = "A receiving zone for bluespace teleportations."
icon_state = "light_on-w"
light_range = 1
density = FALSE
anchored = TRUE
layer = ABOVE_OPEN_TURF_LAYER
-/obj/structure/recieving_pad/New(loc, mob/living/simple_animal/hostile/guardian/healer/G)
+/obj/structure/receiving_pad/New(loc, mob/living/simple_animal/hostile/guardian/healer/G)
. = ..()
if(G.namedatum)
add_atom_colour(G.namedatum.colour, FIXED_COLOUR_PRIORITY)
-/obj/structure/recieving_pad/proc/disappear()
+/obj/structure/receiving_pad/proc/disappear()
visible_message("[src] vanishes!")
qdel(src)
diff --git a/code/modules/mob/living/simple_animal/hostile/alien.dm b/code/modules/mob/living/simple_animal/hostile/alien.dm
index 5b4909c274..762b662de7 100644
--- a/code/modules/mob/living/simple_animal/hostile/alien.dm
+++ b/code/modules/mob/living/simple_animal/hostile/alien.dm
@@ -175,6 +175,6 @@
qdel(target)
return TRUE
var/atom/movable/M = target
- M.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)
+ SEND_SIGNAL(M, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)
visible_message("[src] polishes \the [target].")
return TRUE
diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
index 126465ce65..1df3053715 100644
--- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
+++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
@@ -346,9 +346,9 @@
button_icon_state = "lay_web"
/datum/action/innate/spider/lay_web/Activate()
- if(!istype(owner, /mob/living/simple_animal/hostile/poison/giant_spider/nurse))
+ if(!istype(owner, /mob/living/simple_animal/hostile/poison/giant_spider))
return
- var/mob/living/simple_animal/hostile/poison/giant_spider/nurse/S = owner
+ var/mob/living/simple_animal/hostile/poison/giant_spider/S = owner
if(!isturf(S.loc))
return
diff --git a/code/modules/mob/living/simple_animal/hostile/jungle/leaper.dm b/code/modules/mob/living/simple_animal/hostile/jungle/leaper.dm
index 92e04aaaa4..dbafe9451c 100644
--- a/code/modules/mob/living/simple_animal/hostile/jungle/leaper.dm
+++ b/code/modules/mob/living/simple_animal/hostile/jungle/leaper.dm
@@ -111,7 +111,7 @@
taste_description = "french cuisine"
taste_mult = 1.3
-/datum/reagent/toxin/leaper_venom/on_mob_life(mob/living/M)
+/datum/reagent/toxin/leaper_venom/on_mob_life(mob/living/carbon/M)
if(volume >= 10)
M.adjustToxLoss(5, 0)
..()
diff --git a/code/modules/mob/living/simple_animal/hostile/jungle/mega_arachnid.dm b/code/modules/mob/living/simple_animal/hostile/jungle/mega_arachnid.dm
index 6ca550b9b7..616c9025b9 100644
--- a/code/modules/mob/living/simple_animal/hostile/jungle/mega_arachnid.dm
+++ b/code/modules/mob/living/simple_animal/hostile/jungle/mega_arachnid.dm
@@ -61,6 +61,7 @@
/obj/item/restraints/legcuffs/beartrap/mega_arachnid
name = "fleshy restraints"
desc = "Used by mega arachnids to immobilize their prey."
- flags_1 = DROPDEL_1
+ item_flags = DROPDEL
+ flags_1 = NONE
icon_state = "tentacle_end"
icon = 'icons/obj/projectiles.dmi'
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm
index 78290c4e95..a6dce0e8e3 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm
@@ -672,7 +672,7 @@ Difficulty: Very Hard
for(var/i in T)
if(isitem(i) && !is_type_in_typecache(i, banned_items_typecache))
var/obj/item/W = i
- if(!(W.flags_1 & ADMIN_SPAWNED_1) && !(W.flags_1 & HOLOGRAM_1) && !(W.flags_1 & ABSTRACT_1))
+ if(!(W.flags_1 & ADMIN_SPAWNED_1) && !(W.flags_1 & HOLOGRAM_1) && !(W.item_flags & ABSTRACT))
L += W
if(L.len)
var/obj/item/CHOSEN = pick(L)
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm
index ceba903a75..786d7a9775 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm
@@ -93,7 +93,7 @@ GLOBAL_LIST_INIT(AISwarmerCapsByType, list(/mob/living/simple_animal/hostile/swa
/obj/item/gps/internal/swarmer_beacon
icon_state = null
gpstag = "Hungry Signal"
- desc = "Transmited over the signal is a strange message repeated in every language you know of, and some you don't too..." //the message is "nom nom nom"
+ desc = "Transmitted over the signal is a strange message repeated in every language you know of, and some you don't too..." //the message is "nom nom nom"
invisibility = 100
//SWARMER AI
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm
index 8eb6ff0f06..0c660dd1cd 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm
@@ -1,7 +1,7 @@
//A slow but strong beast that tries to stun using its tentacles
/mob/living/simple_animal/hostile/asteroid/goliath
name = "goliath"
- desc = "A massive beast that uses long tentacles to ensare its prey, threatening them is not advised under any conditions."
+ desc = "A massive beast that uses long tentacles to ensnare its prey, threatening them is not advised under any conditions."
icon = 'icons/mob/lavaland/lavaland_monsters.dmi'
icon_state = "Goliath"
icon_living = "Goliath"
diff --git a/code/modules/mob/living/simple_animal/hostile/skeleton.dm b/code/modules/mob/living/simple_animal/hostile/skeleton.dm
index 18b9d81cfc..fca6afd4a6 100644
--- a/code/modules/mob/living/simple_animal/hostile/skeleton.dm
+++ b/code/modules/mob/living/simple_animal/hostile/skeleton.dm
@@ -100,7 +100,7 @@
light_color = LIGHT_COLOR_PURPLE
attacktext = "slashes"
attack_sound = 'sound/hallucinations/growl1.ogg'
- deathmessage = "collapses into a pile of bones, their suit dissovling among the plasma!"
+ deathmessage = "collapses into a pile of bones, their suit dissolving among the plasma!"
loot = list(/obj/effect/decal/remains/plasma)
/mob/living/simple_animal/hostile/skeleton/plasmaminer/jackhammer
diff --git a/code/modules/mob/living/simple_animal/hostile/syndicate.dm b/code/modules/mob/living/simple_animal/hostile/syndicate.dm
index 3a5c102e52..73283468f6 100644
--- a/code/modules/mob/living/simple_animal/hostile/syndicate.dm
+++ b/code/modules/mob/living/simple_animal/hostile/syndicate.dm
@@ -142,7 +142,7 @@
name = "Syndicate Stormtrooper"
maxHealth = 200
health = 200
- casingtype = /obj/item/ammo_casing/shotgun/tengauge
+ casingtype = /obj/item/ammo_casing/shotgun/buckshot
projectilesound = 'sound/weapons/gunshot.ogg'
loot = list(/obj/effect/gibspawner/human)
diff --git a/code/modules/mob/living/simple_animal/hostile/wumborian_fugu.dm b/code/modules/mob/living/simple_animal/hostile/wumborian_fugu.dm
index 4917d3b74d..d262725d7b 100644
--- a/code/modules/mob/living/simple_animal/hostile/wumborian_fugu.dm
+++ b/code/modules/mob/living/simple_animal/hostile/wumborian_fugu.dm
@@ -121,7 +121,7 @@
desc = "The key to the wumborian fugu's ability to increase its mass arbitrarily, this disgusting remnant can apply the same effect to other creatures, giving them great strength."
icon = 'icons/obj/surgery.dmi'
icon_state = "fugu_gland"
- flags_1 = NOBLUDGEON_1
+ item_flags = NOBLUDGEON
w_class = WEIGHT_CLASS_NORMAL
layer = MOB_LAYER
var/list/banned_mobs
diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm
index dc917f4210..7f2864a43d 100644
--- a/code/modules/mob/living/simple_animal/simple_animal.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal.dm
@@ -312,7 +312,7 @@
emote("deathgasp")
if(del_on_death)
..()
- //Prevent infinite loops if the mob Destroy() is overriden in such
+ //Prevent infinite loops if the mob Destroy() is overridden in such
//a manner as to cause a call to death() again
del_on_death = FALSE
qdel(src)
diff --git a/code/modules/mob/living/simple_animal/slime/emote.dm b/code/modules/mob/living/simple_animal/slime/emote.dm
index 221f3ac071..070cd48a70 100644
--- a/code/modules/mob/living/simple_animal/slime/emote.dm
+++ b/code/modules/mob/living/simple_animal/slime/emote.dm
@@ -34,7 +34,7 @@
/datum/emote/slime/mood/sneaky
key = "moodsneaky"
- mood = "mischevous"
+ mood = "mischievous"
/datum/emote/slime/mood/smile
key = "moodsmile"
diff --git a/code/modules/mob/living/simple_animal/slime/life.dm b/code/modules/mob/living/simple_animal/slime/life.dm
index 574a8a1e7c..161362c187 100644
--- a/code/modules/mob/living/simple_animal/slime/life.dm
+++ b/code/modules/mob/living/simple_animal/slime/life.dm
@@ -415,7 +415,7 @@
else if (docile)
newmood = ":3"
else if (Target)
- newmood = "mischevous"
+ newmood = "mischievous"
if (!newmood)
if (Discipline && prob(25))
diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm
index bcba26a5d1..34e7a2ddcd 100644
--- a/code/modules/mob/living/simple_animal/slime/slime.dm
+++ b/code/modules/mob/living/simple_animal/slime/slime.dm
@@ -358,7 +358,7 @@
var/hasFound = FALSE //Have we found an extract to be added?
for(var/obj/item/slime_extract/S in P.contents)
if(S.effectmod == effectmod)
- P.SendSignal(COMSIG_TRY_STORAGE_TAKE, S, get_turf(src), TRUE)
+ SEND_SIGNAL(P, COMSIG_TRY_STORAGE_TAKE, S, get_turf(src), TRUE)
qdel(S)
applied++
hasFound = TRUE
diff --git a/code/modules/mob/living/taste.dm b/code/modules/mob/living/taste.dm
index b2a4a867bc..534bf36c59 100644
--- a/code/modules/mob/living/taste.dm
+++ b/code/modules/mob/living/taste.dm
@@ -27,7 +27,7 @@
"regrets","your soul","suffering","music","noise","blood","hunger","the american way")
if(text_output != last_taste_text || last_taste_time + 100 < world.time)
to_chat(src, "You can taste [text_output].")
- // "somthing indescribable" -> too many tastes, not enough flavor.
+ // "something indescribable" -> too many tastes, not enough flavor.
last_taste_time = world.time
last_taste_text = text_output
diff --git a/code/modules/mob/login.dm b/code/modules/mob/login.dm
index 80af604d99..9def2a759f 100644
--- a/code/modules/mob/login.dm
+++ b/code/modules/mob/login.dm
@@ -11,6 +11,7 @@
create_mob_hud()
if(hud_used)
hud_used.show_hud(hud_used.hud_version)
+ hud_used.update_ui_style(ui_style2icon(client.prefs.UI_style))
next_move = 1
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index 68a6c07ffe..6deffc97da 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -294,6 +294,10 @@
set name = "Examine"
set category = "IC"
+ if(isturf(A) && !(sight & SEE_TURFS) && !(A in view(client ? client.view : world.view, src)))
+ // shift-click catcher may issue examinate() calls for out-of-sight turfs
+ return
+
if(is_blind(src))
to_chat(src, "Something is there but you can't see it.")
return
@@ -304,7 +308,7 @@
//same as above
//note: ghosts can point, this is intended
//visible_message will handle invisibility properly
-//overriden here and in /mob/dead/observer for different point span classes and sanity checks
+//overridden here and in /mob/dead/observer for different point span classes and sanity checks
/mob/verb/pointed(atom/A as mob|obj|turf in view())
set name = "Point To"
set category = "Object"
@@ -473,7 +477,7 @@
else
what = get_item_by_slot(slot)
if(what)
- if(!(what.flags_1 & ABSTRACT_1))
+ if(!(what.item_flags & ABSTRACT))
usr.stripPanelUnequip(what,src,slot)
else
usr.stripPanelEquip(what,src,slot)
diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm
index 24984f1a55..05bafdeb58 100644
--- a/code/modules/mob/say.dm
+++ b/code/modules/mob/say.dm
@@ -40,9 +40,15 @@
to_chat(usr, "Speech is currently admin-disabled.")
return
- if(jobban_isbanned(src, "OOC"))
+ var/jb = jobban_isbanned(src, "OOC")
+ if(QDELETED(src))
+ return
+
+ if(jb)
to_chat(src, "You have been banned from deadchat.")
return
+
+
if (src.client)
if(src.client.prefs.muted & MUTE_DEADCHAT)
diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm
index a3786221ff..342ee386b6 100644
--- a/code/modules/mob/transform_procs.dm
+++ b/code/modules/mob/transform_procs.dm
@@ -381,7 +381,7 @@
else if(transfer_after)
R.key = key
- R.rename_self("cyborg")
+ R.apply_pref_name("cyborg")
if(R.mmi)
R.mmi.name = "Man-Machine Interface: [real_name]"
diff --git a/code/modules/modular_computers/computers/item/tablet.dm b/code/modules/modular_computers/computers/item/tablet.dm
index f075a8464b..54e43a8731 100644
--- a/code/modules/modular_computers/computers/item/tablet.dm
+++ b/code/modules/modular_computers/computers/item/tablet.dm
@@ -1,7 +1,7 @@
/obj/item/modular_computer/tablet //Its called tablet for theme of 90ies but actually its a "big smartphone" sized
name = "tablet computer"
icon = 'icons/obj/modular_tablet.dmi'
- icon_state = "tablet"
+ icon_state = "tablet-red"
icon_state_unpowered = "tablet"
icon_state_powered = "tablet"
icon_state_menu = "menu"
diff --git a/code/modules/modular_computers/file_system/program.dm b/code/modules/modular_computers/file_system/program.dm
index 75f0f465ba..051b12ea71 100644
--- a/code/modules/modular_computers/file_system/program.dm
+++ b/code/modules/modular_computers/file_system/program.dm
@@ -129,7 +129,7 @@
return computer.get_header_data()
return list()
-// This is performed on program startup. May be overriden to add extra logic. Remember to include ..() call. Return 1 on success, 0 on failure.
+// This is performed on program startup. May be overridden to add extra logic. Remember to include ..() call. Return 1 on success, 0 on failure.
// When implementing new program based device, use this to run the program.
/datum/computer_file/program/proc/run_program(mob/living/user)
if(can_run(user, 1))
diff --git a/code/modules/modular_computers/file_system/programs/alarm.dm b/code/modules/modular_computers/file_system/programs/alarm.dm
index 310a0a5054..ca075b51e4 100644
--- a/code/modules/modular_computers/file_system/programs/alarm.dm
+++ b/code/modules/modular_computers/file_system/programs/alarm.dm
@@ -40,7 +40,10 @@
return data
/datum/computer_file/program/alarm_monitor/proc/triggerAlarm(class, area/A, O, obj/source)
- if(!is_station_level(source.z) && !is_mining_level(source.z))
+ if(is_station_level(source.z))
+ if(!(A.type in GLOB.the_station_areas))
+ return
+ else if(!is_mining_level(source.z) || istype(A, /area/ruin))
return
var/list/L = alarms[class]
@@ -95,4 +98,4 @@
/datum/computer_file/program/alarm_monitor/kill_program(forced = FALSE)
GLOB.alarmdisplay -= src
- ..()
\ No newline at end of file
+ ..()
diff --git a/code/modules/ninja/suit/gloves.dm b/code/modules/ninja/suit/gloves.dm
index ef02a8a792..4308120c4f 100644
--- a/code/modules/ninja/suit/gloves.dm
+++ b/code/modules/ninja/suit/gloves.dm
@@ -77,5 +77,5 @@
/obj/item/clothing/gloves/space_ninja/examine(mob/user)
..()
- if(flags_1 & NODROP_1)
+ if(item_flags & NODROP)
to_chat(user, "The energy drain mechanism is [candrain?"active":"inactive"].")
diff --git a/code/modules/ninja/suit/suit.dm b/code/modules/ninja/suit/suit.dm
index 5886e1723d..6110f2b0c0 100644
--- a/code/modules/ninja/suit/suit.dm
+++ b/code/modules/ninja/suit/suit.dm
@@ -13,7 +13,7 @@ Contents:
/obj/item/clothing/suit/space/space_ninja
name = "ninja suit"
- desc = "A unique, vaccum-proof suit of nano-enhanced armor designed specifically for Spider Clan assassins."
+ desc = "A unique, vacuum-proof suit of nano-enhanced armor designed specifically for Spider Clan assassins."
icon_state = "s-ninja"
item_state = "s-ninja_suit"
allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals, /obj/item/stock_parts/cell)
@@ -111,15 +111,15 @@ Contents:
to_chat(H, "ERROR: 110223 UNABLE TO LOCATE HAND GEAR\nABORTING...")
return FALSE
affecting = H
- flags_1 |= NODROP_1 //colons make me go all |=
+ item_flags |= NODROP //colons make me go all |=
slowdown = 0
n_hood = H.head
- n_hood.flags_1 |= NODROP_1
+ n_hood.item_flags |= NODROP
n_shoes = H.shoes
- n_shoes.flags_1 |= NODROP_1
+ n_shoes.item_flags |= NODROP
n_shoes.slowdown--
n_gloves = H.gloves
- n_gloves.flags_1 |= NODROP_1
+ n_gloves.item_flags |= NODROP
return TRUE
/obj/item/clothing/suit/space/space_ninja/proc/lockIcons(mob/living/carbon/human/H)
@@ -131,18 +131,18 @@ Contents:
//This proc allows the suit to be taken off.
/obj/item/clothing/suit/space/space_ninja/proc/unlock_suit()
affecting = null
- flags_1 &= ~NODROP_1
+ item_flags &= ~NODROP
slowdown = 1
icon_state = "s-ninja"
if(n_hood)//Should be attached, might not be attached.
- n_hood.flags_1 &= ~NODROP_1
+ n_hood.item_flags &= ~NODROP
if(n_shoes)
- n_shoes.flags_1 &= ~NODROP_1
+ n_shoes.item_flags &= ~NODROP
n_shoes.slowdown++
if(n_gloves)
n_gloves.icon_state = "s-ninja"
n_gloves.item_state = "s-ninja"
- n_gloves.flags_1 &= ~NODROP_1
+ n_gloves.item_flags &= ~NODROP
n_gloves.candrain=0
n_gloves.draining=0
diff --git a/code/modules/paperwork/contract.dm b/code/modules/paperwork/contract.dm
index 5623a1bf74..ac3e24030f 100644
--- a/code/modules/paperwork/contract.dm
+++ b/code/modules/paperwork/contract.dm
@@ -5,7 +5,7 @@
throw_speed = 3
var/signed = FALSE
var/datum/mind/target
- flags_1 = NOBLUDGEON_1
+ item_flags = NOBLUDGEON
/obj/item/paper/contract/proc/update_text()
return
@@ -28,7 +28,7 @@
/obj/item/paper/contract/employment/update_text()
name = "paper- [target] employment contract"
- info = "
Conditions of Employment
This Agreement is made and entered into as of the date of last signature below, by and between [target] (hereafter referred to as SLAVE), and Nanotrasen (hereafter referred to as the omnipresent and helpful watcher of humanity). WITNESSETH: WHEREAS, SLAVE is a natural born human or humanoid, posessing skills upon which he can aid the omnipresent and helpful watcher of humanity, who seeks employment in the omnipresent and helpful watcher of humanity. WHEREAS, the omnipresent and helpful watcher of humanity agrees to sporadically provide payment to SLAVE, in exchange for permanent servitude. NOW THEREFORE in consideration of the mutual covenants herein contained, and other good and valuable consideration, the parties hereto mutually agree as follows: In exchange for paltry payments, SLAVE agrees to work for the omnipresent and helpful watcher of humanity, for the remainder of his or her current and future lives. Further, SLAVE agrees to transfer ownership of his or her soul to the loyalty department of the omnipresent and helpful watcher of humanity. Should transfership of a soul not be possible, a lien shall be placed instead. Signed, [target]"
+ info = "
Conditions of Employment
This Agreement is made and entered into as of the date of last signature below, by and between [target] (hereafter referred to as SLAVE), and Nanotrasen (hereafter referred to as the omnipresent and helpful watcher of humanity). WITNESSETH: WHEREAS, SLAVE is a natural born human or humanoid, possessing skills upon which he can aid the omnipresent and helpful watcher of humanity, who seeks employment in the omnipresent and helpful watcher of humanity. WHEREAS, the omnipresent and helpful watcher of humanity agrees to sporadically provide payment to SLAVE, in exchange for permanent servitude. NOW THEREFORE in consideration of the mutual covenants herein contained, and other good and valuable consideration, the parties hereto mutually agree as follows: In exchange for paltry payments, SLAVE agrees to work for the omnipresent and helpful watcher of humanity, for the remainder of his or her current and future lives. Further, SLAVE agrees to transfer ownership of his or her soul to the loyalty department of the omnipresent and helpful watcher of humanity. Should transfership of a soul not be possible, a lien shall be placed instead. Signed, [target]"
/obj/item/paper/contract/employment/attack(mob/living/M, mob/living/carbon/human/user)
diff --git a/code/modules/paperwork/folders.dm b/code/modules/paperwork/folders.dm
index 899c132f04..038cba8936 100644
--- a/code/modules/paperwork/folders.dm
+++ b/code/modules/paperwork/folders.dm
@@ -6,9 +6,9 @@
w_class = WEIGHT_CLASS_SMALL
pressure_resistance = 2
resistance_flags = FLAMMABLE
-
+
/obj/item/folder/suicide_act(mob/living/user)
- user.visible_message("[user] begins filing an imaginary death warrent! It looks like [user.p_theyre()] trying to commit suicide!")
+ user.visible_message("[user] begins filing an imaginary death warrant! It looks like [user.p_theyre()] trying to commit suicide!")
return OXYLOSS
/obj/item/folder/blue
diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm
index 42b3d08c0c..9b7d3ae884 100644
--- a/code/modules/paperwork/pen.dm
+++ b/code/modules/paperwork/pen.dm
@@ -44,7 +44,7 @@
colour = "red"
/obj/item/pen/invisible
- desc = "It's an invisble pen marker."
+ desc = "It's an invisible pen marker."
icon_state = "pen"
colour = "white"
@@ -104,12 +104,7 @@
if(deg && (deg > 0 && deg <= 360))
degrees = deg
to_chat(user, "You rotate the top of the pen to [degrees] degrees.")
- GET_COMPONENT(hidden_uplink, /datum/component/uplink)
- if(hidden_uplink && degrees == traitor_unlock_degrees)
- to_chat(user, "Your pen makes a clicking noise, before quickly rotating back to 0 degrees!")
- degrees = 0
- hidden_uplink.locked = FALSE
- hidden_uplink.interact(user)
+ SEND_SIGNAL(src, COMSIG_PEN_ROTATED, deg, user)
/obj/item/pen/attack(mob/living/M, mob/user,stealth)
if(!istype(M))
diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm
index b69751fd33..4d8cdaa778 100644
--- a/code/modules/power/gravitygenerator.dm
+++ b/code/modules/power/gravitygenerator.dm
@@ -124,6 +124,7 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne
var/charge_count = 100
var/current_overlay = null
var/broken_state = 0
+ var/setting = 1 //Gravity value when on
/obj/machinery/gravity_generator/main/Destroy() // If we somehow get deleted, remove all of our other parts.
investigate_log("was destroyed!", INVESTIGATE_GRAVITY)
@@ -385,6 +386,11 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne
else
GLOB.gravity_generators["[T.z]"] -= src
+/obj/machinery/gravity_generator/main/proc/change_setting(value)
+ if(value != setting)
+ setting = value
+ shake_everyone()
+
// Misc
/obj/item/paper/guides/jobs/engi/gravity_gen
diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm
index f2f08c57c4..0b6cf36921 100644
--- a/code/modules/power/lighting.dm
+++ b/code/modules/power/lighting.dm
@@ -89,7 +89,7 @@
if(!cell_connectors)
to_chat(user, "This [name] can't support a power cell!")
return
- if(W.flags_1 & NODROP_1)
+ if(W.item_flags & NODROP)
to_chat(user, "[W] is stuck to your hand!")
return
user.dropItemToGround(W)
diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm
index 9cfca01efa..bf03256219 100644
--- a/code/modules/power/singularity/emitter.dm
+++ b/code/modules/power/singularity/emitter.dm
@@ -400,8 +400,8 @@
name = "turret controls"
icon_state = "offhand"
w_class = WEIGHT_CLASS_HUGE
- flags_1 = ABSTRACT_1 | NODROP_1
- resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF | NOBLUDGEON_1
+ item_flags = ABSTRACT | NODROP | NOBLUDGEON
+ resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF
var/delay = 0
/obj/item/turret_control/afterattack(atom/targeted_atom, mob/user, proxflag, clickparams)
diff --git a/code/modules/power/singularity/particle_accelerator/particle_emitter.dm b/code/modules/power/singularity/particle_accelerator/particle_emitter.dm
index f9edf59368..fc7cca55e6 100644
--- a/code/modules/power/singularity/particle_accelerator/particle_emitter.dm
+++ b/code/modules/power/singularity/particle_accelerator/particle_emitter.dm
@@ -1,6 +1,6 @@
/obj/structure/particle_accelerator/particle_emitter
name = "EM Containment Grid"
- desc = "This launchs the Alpha particles, might not want to stand near this end."
+ desc = "This launches the Alpha particles, might not want to stand near this end."
icon = 'icons/obj/machines/particle_accelerator.dmi'
icon_state = "none"
var/fire_delay = 50
diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm
index ed16e6a41e..18cd6d22a6 100644
--- a/code/modules/power/solar.dm
+++ b/code/modules/power/solar.dm
@@ -105,7 +105,7 @@
add_overlay(mutable_appearance(icon, "solar_panel", FLY_LAYER))
src.setDir(angle2dir(adir))
-//calculates the fraction of the sunlight that the panel recieves
+//calculates the fraction of the sunlight that the panel receives
/obj/machinery/power/solar/proc/update_solar_exposure()
if(obscured)
sunfrac = 0
@@ -119,7 +119,7 @@
return
sunfrac = cos(p_angle) ** 2
- //isn't the power recieved from the incoming light proportionnal to cos(p_angle) (Lambert's cosine law) rather than cos(p_angle)^2 ?
+ //isn't the power received from the incoming light proportionnal to cos(p_angle) (Lambert's cosine law) rather than cos(p_angle)^2 ?
/obj/machinery/power/solar/process()//TODO: remove/add this from machines to save on processing as needed ~Carn PRIORITY
if(stat & BROKEN)
@@ -423,7 +423,7 @@
A.icon_state = "4"
A.anchored = TRUE
qdel(src)
- else if(user.a_intent != INTENT_HARM && !(I.flags_1 & NOBLUDGEON_1))
+ else if(user.a_intent != INTENT_HARM && !(I.item_flags & NOBLUDGEON))
attack_hand(user)
else
return ..()
diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm
index 686912f098..53140d45e0 100644
--- a/code/modules/power/supermatter/supermatter.dm
+++ b/code/modules/power/supermatter/supermatter.dm
@@ -255,9 +255,9 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
sleep(10)
continue
else if(i > 50)
- speaking = "[i/10] seconds remain before causality stabilization."
+ speaking = "[DisplayTimeText(i, TRUE)] remain before causality stabilization."
else
- speaking = "[i/10]..."
+ speaking = "[i*0.1]..."
radio.talk_into(src, speaking, common_channel, get_spans(), get_default_language())
sleep(10)
@@ -279,7 +279,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
if(M.z == z)
SEND_SOUND(M, 'sound/magic/charge.ogg')
to_chat(M, "You feel reality distort for a moment...")
- M.SendSignal(COMSIG_ADD_MOOD_EVENT, "delam", /datum/mood_event/delam)
+ SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "delam", /datum/mood_event/delam)
if(combined_gas > MOLE_PENALTY_THRESHOLD)
investigate_log("has collapsed into a singularity.", INVESTIGATE_SUPERMATTER)
if(T)
@@ -568,7 +568,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
Consume(nom)
/obj/machinery/power/supermatter_crystal/attackby(obj/item/W, mob/living/user, params)
- if(!istype(W) || (W.flags_1 & ABSTRACT_1) || !istype(user))
+ if(!istype(W) || (W.item_flags & ABSTRACT) || !istype(user))
return
if (istype(W, /obj/item/melee/roastingstick))
return ..()
diff --git a/code/modules/power/tesla/energy_ball.dm b/code/modules/power/tesla/energy_ball.dm
index e149033470..470b6e789c 100644
--- a/code/modules/power/tesla/energy_ball.dm
+++ b/code/modules/power/tesla/energy_ball.dm
@@ -186,6 +186,9 @@
/obj/structure/particle_accelerator/end_cap,
/obj/machinery/field/containment,
/obj/structure/disposalpipe,
+ /obj/structure/disposaloutlet,
+ /obj/machinery/disposal/deliveryChute,
+ /obj/machinery/camera,
/obj/structure/sign,
/obj/machinery/gateway,
/obj/structure/lattice,
diff --git a/code/modules/projectiles/ammunition/ballistic/shotgun.dm b/code/modules/projectiles/ammunition/ballistic/shotgun.dm
index de0d03da3b..4c66939e53 100644
--- a/code/modules/projectiles/ammunition/ballistic/shotgun.dm
+++ b/code/modules/projectiles/ammunition/ballistic/shotgun.dm
@@ -7,11 +7,6 @@
caliber = "shotgun"
projectile_type = /obj/item/projectile/bullet/shotgun_slug
materials = list(MAT_METAL=4000)
-
-/obj/item/ammo_casing/shotgun/tengauge
- name = "10g shotgun slug"
- desc = "A 10 gauge lead slug."
- projectile_type = /obj/item/projectile/bullet/shotgun_slug/tengauge
/obj/item/ammo_casing/shotgun/beanbag
name = "beanbag slug"
@@ -118,7 +113,7 @@
/obj/item/ammo_casing/shotgun/dart/noreact
name = "cryostasis shotgun dart"
- desc = "A dart for use in shotguns, using similar technolgoy as cryostatis beakers to keep internal reagents from reacting. Can be injected with up to 10 units of any chemical."
+ desc = "A dart for use in shotguns, using similar technology as cryostatis beakers to keep internal reagents from reacting. Can be injected with up to 10 units of any chemical."
icon_state = "cnrshell"
reagent_amount = 10
reagent_react = FALSE
diff --git a/code/modules/projectiles/boxes_magazines/external/smg.dm b/code/modules/projectiles/boxes_magazines/external/smg.dm
index c6dc004879..65724e503a 100644
--- a/code/modules/projectiles/boxes_magazines/external/smg.dm
+++ b/code/modules/projectiles/boxes_magazines/external/smg.dm
@@ -19,7 +19,7 @@
icon_state = "46x30mmtA-[round(ammo_count(),4)]"
/obj/item/ammo_box/magazine/wt550m9/wtic
- name = "wt550 magazine (Incindiary 4.6x30mm)"
+ name = "wt550 magazine (Incendiary 4.6x30mm)"
icon_state = "46x30mmtI-20"
ammo_type = /obj/item/ammo_casing/c46x30mm/inc
@@ -54,7 +54,7 @@
ammo_type = /obj/item/ammo_casing/c9mm/ap
/obj/item/ammo_box/magazine/smgm9mm/fire
- name = "SMG Magazine (Incindiary 9mm)"
+ name = "SMG Magazine (Incendiary 9mm)"
ammo_type = /obj/item/ammo_casing/c9mm/inc
/obj/item/ammo_box/magazine/smgm45
diff --git a/code/modules/projectiles/boxes_magazines/internal/_internal.dm b/code/modules/projectiles/boxes_magazines/internal/_internal.dm
index e21cb5ce61..c6ee7ec0cb 100644
--- a/code/modules/projectiles/boxes_magazines/internal/_internal.dm
+++ b/code/modules/projectiles/boxes_magazines/internal/_internal.dm
@@ -1,6 +1,7 @@
/obj/item/ammo_box/magazine/internal
desc = "Oh god, this shouldn't be here"
- flags_1 = CONDUCT_1|ABSTRACT_1
+ flags_1 = CONDUCT_1
+ item_flags = ABSTRACT
//internals magazines are accessible, so replace spent ammo if full when trying to put a live one in
/obj/item/ammo_box/magazine/internal/give_round(obj/item/ammo_casing/R)
diff --git a/code/modules/projectiles/boxes_magazines/internal/revolver.dm b/code/modules/projectiles/boxes_magazines/internal/revolver.dm
index 976f80f437..a98fd29e99 100644
--- a/code/modules/projectiles/boxes_magazines/internal/revolver.dm
+++ b/code/modules/projectiles/boxes_magazines/internal/revolver.dm
@@ -5,13 +5,13 @@
max_ammo = 6
/obj/item/ammo_box/magazine/internal/cylinder/rev762
- name = "nagant revolver cylinder"
+ name = "\improper Nagant revolver cylinder"
ammo_type = /obj/item/ammo_casing/n762
caliber = "n762"
max_ammo = 7
/obj/item/ammo_box/magazine/internal/cylinder/rus357
- name = "russian revolver cylinder"
+ name = "\improper Russian revolver cylinder"
ammo_type = /obj/item/ammo_casing/a357
caliber = "357"
max_ammo = 6
diff --git a/code/modules/projectiles/guns/ballistic/pistol.dm b/code/modules/projectiles/guns/ballistic/pistol.dm
index a4fcdd0266..24ef2a2604 100644
--- a/code/modules/projectiles/guns/ballistic/pistol.dm
+++ b/code/modules/projectiles/guns/ballistic/pistol.dm
@@ -27,7 +27,7 @@
can_suppress = FALSE
/obj/item/gun/ballistic/automatic/pistol/deagle
- name = "desert eagle"
+ name = "\improper Desert Eagle"
desc = "A robust .50 AE handgun."
icon_state = "deagle"
force = 14
@@ -44,7 +44,7 @@
icon_state = "[initial(icon_state)][chambered ? "" : "-e"]"
/obj/item/gun/ballistic/automatic/pistol/deagle/gold
- desc = "A gold plated desert eagle folded over a million times by superior martian gunsmiths. Uses .50 AE ammo."
+ desc = "A gold plated Desert Eagle folded over a million times by superior martian gunsmiths. Uses .50 AE ammo."
icon_state = "deagleg"
item_state = "deagleg"
@@ -55,7 +55,7 @@
/obj/item/gun/ballistic/automatic/pistol/APS
name = "stechkin APS pistol"
- desc = "The original russian version of a widely used Syndicate sidearm. Uses 9mm ammo."
+ desc = "The original Russian version of a widely used Syndicate sidearm. Uses 9mm ammo."
icon_state = "aps"
w_class = WEIGHT_CLASS_SMALL
mag_type = /obj/item/ammo_box/magazine/pistolm9mm
diff --git a/code/modules/projectiles/guns/ballistic/revolver.dm b/code/modules/projectiles/guns/ballistic/revolver.dm
index b359d00602..cd11522342 100644
--- a/code/modules/projectiles/guns/ballistic/revolver.dm
+++ b/code/modules/projectiles/guns/ballistic/revolver.dm
@@ -151,7 +151,7 @@
pin = /obj/item/firing_pin
/obj/item/gun/ballistic/revolver/nagant
- name = "nagant revolver"
+ name = "\improper Nagant revolver"
desc = "An old model of revolver that originated in Russia. Able to be suppressed. Uses 7.62x38mmR ammo."
icon_state = "nagant"
can_suppress = TRUE
@@ -163,7 +163,7 @@
// You can spin the chamber to randomize the position of the bullet.
/obj/item/gun/ballistic/revolver/russian
- name = "\improper russian revolver"
+ name = "\improper Russian revolver"
desc = "A Russian-made revolver for drinking games. Uses .357 ammo, and has a mechanism requiring you to spin the chamber before each trigger pull."
mag_type = /obj/item/ammo_box/magazine/internal/cylinder/rus357
var/spun = FALSE
@@ -233,7 +233,7 @@
user.visible_message("[user.name] fires [src] at [user.p_their()] head!", "You fire [src] at your head!", "You hear a gunshot!")
/obj/item/gun/ballistic/revolver/russian/soul
- name = "cursed russian revolver"
+ name = "cursed Russian revolver"
desc = "To play with this revolver requires wagering your very soul."
/obj/item/gun/ballistic/revolver/russian/soul/shoot_self(mob/living/user)
diff --git a/code/modules/projectiles/guns/ballistic/shotgun.dm b/code/modules/projectiles/guns/ballistic/shotgun.dm
index e3b638f051..54ca03f872 100644
--- a/code/modules/projectiles/guns/ballistic/shotgun.dm
+++ b/code/modules/projectiles/guns/ballistic/shotgun.dm
@@ -151,7 +151,8 @@
item_state = "arcane_barrage"
can_bayonet = FALSE
- flags_1 = DROPDEL_1
+ item_flags = NEEDS_PERMIT | DROPDEL
+ flags_1 = NONE
mag_type = /obj/item/ammo_box/magazine/internal/boltaction/enchanted/arcane_barrage
diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm
index 5275e63c3f..c766d1c94e 100644
--- a/code/modules/projectiles/guns/energy/laser.dm
+++ b/code/modules/projectiles/guns/energy/laser.dm
@@ -101,8 +101,8 @@
transform *= 1 + ((damage/7) * 0.2)//20% larger per tile
/obj/item/gun/energy/xray
- name = "x-ray laser gun"
- desc = "A high-power laser gun capable of expelling concentrated x-ray blasts that pass through multiple soft targets and heavier materials."
+ name = "\improper X-ray laser gun"
+ desc = "A high-power laser gun capable of expelling concentrated X-ray blasts that pass through multiple soft targets and heavier materials."
icon_state = "xray"
item_state = null
ammo_type = list(/obj/item/ammo_casing/energy/xray)
diff --git a/code/modules/projectiles/guns/magic/wand.dm b/code/modules/projectiles/guns/magic/wand.dm
index bf3ade0748..9c9d253439 100644
--- a/code/modules/projectiles/guns/magic/wand.dm
+++ b/code/modules/projectiles/guns/magic/wand.dm
@@ -96,6 +96,10 @@
charges--
..()
+/obj/item/gun/magic/wand/resurrection/debug //for testing
+ name = "debug wand of healing"
+ max_charges = 500
+
/////////////////////////////////////
//WAND OF POLYMORPH
/////////////////////////////////////
diff --git a/code/modules/projectiles/guns/misc/beam_rifle.dm b/code/modules/projectiles/guns/misc/beam_rifle.dm
index 38e6d4d0c6..32da307d47 100644
--- a/code/modules/projectiles/guns/misc/beam_rifle.dm
+++ b/code/modules/projectiles/guns/misc/beam_rifle.dm
@@ -10,7 +10,7 @@
/obj/item/gun/energy/beam_rifle
name = "particle acceleration rifle"
- desc = "An energy-based anti material marksman rifle that uses highly charged particle beams moving at extreme velocities to decimate whatever is unfortunate enough to be targetted by one. \
+ desc = "An energy-based anti material marksman rifle that uses highly charged particle beams moving at extreme velocities to decimate whatever is unfortunate enough to be targeted by one. \
Hold down left click while scoped to aim, when weapon is fully aimed (Tracer goes from red to green as it charges), release to fire. Moving while aiming or \
changing where you're pointing at while aiming will delay the aiming process depending on how much you changed."
icon = 'icons/obj/guns/energy.dmi'
@@ -513,8 +513,6 @@
return 0.4
if(istype(target, /obj/structure/window))
return 0.5
- if(istype(target, /obj/structure/blob)) //CIT CHANGE - Blobs are getting ggnore'd too hard and people need to GIT GUD
- return 0.2
return 1
/obj/item/projectile/beam/beam_rifle/proc/handle_impact(atom/target)
diff --git a/code/modules/projectiles/pins.dm b/code/modules/projectiles/pins.dm
index b5cd9b70a7..f132d62b27 100644
--- a/code/modules/projectiles/pins.dm
+++ b/code/modules/projectiles/pins.dm
@@ -147,7 +147,7 @@
// DNA-keyed pin.
-// When you want to keep your toys for youself.
+// When you want to keep your toys for yourself.
/obj/item/firing_pin/dna
name = "DNA-keyed firing pin"
desc = "This is a DNA-locked firing pin which only authorizes one user. Attempt to fire once to DNA-link."
diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm
index 4ee1363853..ecb60463dd 100644
--- a/code/modules/projectiles/projectile.dm
+++ b/code/modules/projectiles/projectile.dm
@@ -8,7 +8,7 @@
icon_state = "bullet"
density = FALSE
anchored = TRUE
- flags_1 = ABSTRACT_1
+ item_flags = ABSTRACT
pass_flags = PASSTABLE
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
hitsound = 'sound/weapons/pierce.ogg'
diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm
index 3ba0d092c5..b51eaf40ae 100644
--- a/code/modules/projectiles/projectile/beams.dm
+++ b/code/modules/projectiles/projectile/beams.dm
@@ -51,7 +51,7 @@
damage = 5
/obj/item/projectile/beam/xray
- name = "xray beam"
+ name = "\improper X-ray beam"
icon_state = "xray"
damage = 15
irradiate = 30
diff --git a/code/modules/projectiles/projectile/bullets/_incendiary.dm b/code/modules/projectiles/projectile/bullets/_incendiary.dm
index d0cf74421c..b6cca4a31a 100644
--- a/code/modules/projectiles/projectile/bullets/_incendiary.dm
+++ b/code/modules/projectiles/projectile/bullets/_incendiary.dm
@@ -14,4 +14,4 @@
var/turf/location = get_turf(src)
if(location)
new /obj/effect/hotspot(location)
- location.hotspot_expose(700, 50, 1)
+ location.hotspot_expose(700, 5, 1)
diff --git a/code/modules/projectiles/projectile/bullets/shotgun.dm b/code/modules/projectiles/projectile/bullets/shotgun.dm
index 41a819dd16..457ec78e9b 100644
--- a/code/modules/projectiles/projectile/bullets/shotgun.dm
+++ b/code/modules/projectiles/projectile/bullets/shotgun.dm
@@ -2,10 +2,6 @@
name = "12g shotgun slug"
damage = 60
-/obj/item/projectile/bullet/shotgun_slug/tengauge
- name = "10g shotgun slug"
- damage = 72.5
-
/obj/item/projectile/bullet/shotgun_beanbag
name = "beanbag slug"
damage = 5
diff --git a/code/modules/projectiles/projectile/energy/net_snare.dm b/code/modules/projectiles/projectile/energy/net_snare.dm
index afe9a2e31d..f5d0607341 100644
--- a/code/modules/projectiles/projectile/energy/net_snare.dm
+++ b/code/modules/projectiles/projectile/energy/net_snare.dm
@@ -1,98 +1,98 @@
-/obj/item/projectile/energy/net
- name = "energy netting"
- icon_state = "e_netting"
- damage = 10
- damage_type = STAMINA
- hitsound = 'sound/weapons/taserhit.ogg'
- range = 10
-
-/obj/item/projectile/energy/net/Initialize()
- . = ..()
- SpinAnimation()
-
-/obj/item/projectile/energy/net/on_hit(atom/target, blocked = FALSE)
- if(isliving(target))
- var/turf/Tloc = get_turf(target)
- if(!locate(/obj/effect/nettingportal) in Tloc)
- new /obj/effect/nettingportal(Tloc)
- ..()
-
-/obj/item/projectile/energy/net/on_range()
- do_sparks(1, TRUE, src)
- ..()
-
-/obj/effect/nettingportal
- name = "DRAGnet teleportation field"
- desc = "A field of bluespace energy, locking on to teleport a target."
- icon = 'icons/effects/effects.dmi'
- icon_state = "dragnetfield"
- light_range = 3
- anchored = TRUE
-
-/obj/effect/nettingportal/Initialize()
- . = ..()
- var/obj/item/beacon/teletarget = null
- for(var/obj/machinery/computer/teleporter/com in GLOB.machines)
- if(com.target)
- if(com.power_station && com.power_station.teleporter_hub && com.power_station.engaged)
- teletarget = com.target
-
- addtimer(CALLBACK(src, .proc/pop, teletarget), 30)
-
-/obj/effect/nettingportal/proc/pop(teletarget)
- if(teletarget)
- for(var/mob/living/L in get_turf(src))
- do_teleport(L, teletarget, 2)//teleport what's in the tile to the beacon
- else
- for(var/mob/living/L in get_turf(src))
- do_teleport(L, L, 15) //Otherwise it just warps you off somewhere.
-
- qdel(src)
-
-/obj/effect/nettingportal/singularity_act()
- return
-
-/obj/effect/nettingportal/singularity_pull()
- return
-
-/obj/item/projectile/energy/trap
- name = "energy snare"
- icon_state = "e_snare"
- nodamage = 1
- knockdown = 20
- hitsound = 'sound/weapons/taserhit.ogg'
- range = 4
-
-/obj/item/projectile/energy/trap/on_hit(atom/target, blocked = FALSE)
- if(!ismob(target) || blocked >= 100) //Fully blocked by mob or collided with dense object - drop a trap
- new/obj/item/restraints/legcuffs/beartrap/energy(get_turf(loc))
- else if(iscarbon(target))
- var/obj/item/restraints/legcuffs/beartrap/B = new /obj/item/restraints/legcuffs/beartrap/energy(get_turf(target))
- B.Crossed(target)
- ..()
-
-/obj/item/projectile/energy/trap/on_range()
- new /obj/item/restraints/legcuffs/beartrap/energy(loc)
- ..()
-
-/obj/item/projectile/energy/trap/cyborg
- name = "Energy Bola"
- icon_state = "e_snare"
- nodamage = 1
- knockdown = 0
- hitsound = 'sound/weapons/taserhit.ogg'
- range = 10
-
-/obj/item/projectile/energy/trap/cyborg/on_hit(atom/target, blocked = FALSE)
- if(!ismob(target) || blocked >= 100)
- do_sparks(1, TRUE, src)
- qdel(src)
- if(iscarbon(target))
- var/obj/item/restraints/legcuffs/beartrap/B = new /obj/item/restraints/legcuffs/beartrap/energy/cyborg(get_turf(target))
- B.Crossed(target)
- QDEL_IN(src, 10)
- ..()
-
-/obj/item/projectile/energy/trap/cyborg/on_range()
- do_sparks(1, TRUE, src)
- qdel(src)
+/obj/item/projectile/energy/net
+ name = "energy netting"
+ icon_state = "e_netting"
+ damage = 10
+ damage_type = STAMINA
+ hitsound = 'sound/weapons/taserhit.ogg'
+ range = 10
+
+/obj/item/projectile/energy/net/Initialize()
+ . = ..()
+ SpinAnimation()
+
+/obj/item/projectile/energy/net/on_hit(atom/target, blocked = FALSE)
+ if(isliving(target))
+ var/turf/Tloc = get_turf(target)
+ if(!locate(/obj/effect/nettingportal) in Tloc)
+ new /obj/effect/nettingportal(Tloc)
+ ..()
+
+/obj/item/projectile/energy/net/on_range()
+ do_sparks(1, TRUE, src)
+ ..()
+
+/obj/effect/nettingportal
+ name = "DRAGnet teleportation field"
+ desc = "A field of bluespace energy, locking on to teleport a target."
+ icon = 'icons/effects/effects.dmi'
+ icon_state = "dragnetfield"
+ light_range = 3
+ anchored = TRUE
+
+/obj/effect/nettingportal/Initialize()
+ . = ..()
+ var/obj/item/beacon/teletarget = null
+ for(var/obj/machinery/computer/teleporter/com in GLOB.machines)
+ if(com.target)
+ if(com.power_station && com.power_station.teleporter_hub && com.power_station.engaged)
+ teletarget = com.target
+
+ addtimer(CALLBACK(src, .proc/pop, teletarget), 30)
+
+/obj/effect/nettingportal/proc/pop(teletarget)
+ if(teletarget)
+ for(var/mob/living/L in get_turf(src))
+ do_teleport(L, teletarget, 2)//teleport what's in the tile to the beacon
+ else
+ for(var/mob/living/L in get_turf(src))
+ do_teleport(L, L, 15) //Otherwise it just warps you off somewhere.
+
+ qdel(src)
+
+/obj/effect/nettingportal/singularity_act()
+ return
+
+/obj/effect/nettingportal/singularity_pull()
+ return
+
+/obj/item/projectile/energy/trap
+ name = "energy snare"
+ icon_state = "e_snare"
+ nodamage = 1
+ knockdown = 20
+ hitsound = 'sound/weapons/taserhit.ogg'
+ range = 4
+
+/obj/item/projectile/energy/trap/on_hit(atom/target, blocked = FALSE)
+ if(!ismob(target) || blocked >= 100) //Fully blocked by mob or collided with dense object - drop a trap
+ new/obj/item/restraints/legcuffs/beartrap/energy(get_turf(loc))
+ else if(iscarbon(target))
+ var/obj/item/restraints/legcuffs/beartrap/B = new /obj/item/restraints/legcuffs/beartrap/energy(get_turf(target))
+ B.Crossed(target)
+ ..()
+
+/obj/item/projectile/energy/trap/on_range()
+ new /obj/item/restraints/legcuffs/beartrap/energy(loc)
+ ..()
+
+/obj/item/projectile/energy/trap/cyborg
+ name = "Energy Bola"
+ icon_state = "e_snare"
+ nodamage = 1
+ knockdown = 0
+ hitsound = 'sound/weapons/taserhit.ogg'
+ range = 10
+
+/obj/item/projectile/energy/trap/cyborg/on_hit(atom/target, blocked = FALSE)
+ if(!ismob(target) || blocked >= 100)
+ do_sparks(1, TRUE, src)
+ qdel(src)
+ if(iscarbon(target))
+ var/obj/item/restraints/legcuffs/beartrap/B = new /obj/item/restraints/legcuffs/beartrap/energy/cyborg(get_turf(target))
+ B.Crossed(target)
+ QDEL_IN(src, 10)
+ ..()
+
+/obj/item/projectile/energy/trap/cyborg/on_range()
+ do_sparks(1, TRUE, src)
+ qdel(src)
diff --git a/code/modules/projectiles/projectile/energy/stun.dm b/code/modules/projectiles/projectile/energy/stun.dm
index 1c24d47a9d..de9016a4c4 100644
--- a/code/modules/projectiles/projectile/energy/stun.dm
+++ b/code/modules/projectiles/projectile/energy/stun.dm
@@ -18,7 +18,7 @@
do_sparks(1, TRUE, src)
else if(iscarbon(target))
var/mob/living/carbon/C = target
- C.SendSignal(COMSIG_ADD_MOOD_EVENT, "tased", /datum/mood_event/tased)
+ SEND_SIGNAL(C, COMSIG_ADD_MOOD_EVENT, "tased", /datum/mood_event/tased)
if(C.dna && C.dna.check_mutation(HULK))
C.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
else if((C.status_flags & CANKNOCKDOWN) && !C.has_trait(TRAIT_STUNIMMUNE))
diff --git a/code/modules/projectiles/projectile/special/temperature.dm b/code/modules/projectiles/projectile/special/temperature.dm
index 7fb9c6efb2..44c8df6c00 100644
--- a/code/modules/projectiles/projectile/special/temperature.dm
+++ b/code/modules/projectiles/projectile/special/temperature.dm
@@ -7,12 +7,11 @@
flag = "energy"
var/temperature = 100
-/obj/item/projectile/temp/on_hit(atom/target, blocked = FALSE)//These two could likely check temp protection on the mob
- ..()
+/obj/item/projectile/temp/on_hit(atom/target, blocked = 0)
+ . = ..()
if(isliving(target))
- var/mob/M = target
- M.bodytemperature = temperature
- return TRUE
+ var/mob/living/L = target
+ L.adjust_bodytemperature(((100-blocked)/100)*(temperature - L.bodytemperature)) // the new body temperature is adjusted by 100-blocked % of the delta between body temperature and the bullet's effect temperature
/obj/item/projectile/temp/hot
name = "heat beam"
diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm
index d53df1ae95..2def04cc66 100644
--- a/code/modules/reagents/chemistry/holder.dm
+++ b/code/modules/reagents/chemistry/holder.dm
@@ -303,7 +303,7 @@
need_mob_update += R.addiction_act_stage4(C)
if(40 to INFINITY)
to_chat(C, "You feel like you've gotten over your need for [R.name].")
- C.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "[R.id]_addiction")
+ SEND_SIGNAL(C, COMSIG_CLEAR_MOOD_EVENT, "[R.id]_addiction")
cached_addictions.Remove(R)
addiction_tick++
if(C && need_mob_update) //some of the metabolized reagents had effects on the mob that requires some updates.
@@ -526,19 +526,54 @@
return TRUE
return FALSE
+//Returns the average specific heat for all reagents currently in this holder.
+/datum/reagents/proc/specific_heat()
+ . = 0
+ var/cached_amount = total_volume //cache amount
+ var/list/cached_reagents = reagent_list //cache reagents
+ for(var/I in cached_reagents)
+ var/datum/reagent/R = I
+ . += R.specific_heat * (R.volume / cached_amount)
+
+/datum/reagents/proc/adjust_thermal_energy(J, min_temp = 2.7, max_temp = 1000)
+ var/S = specific_heat()
+ chem_temp = CLAMP(chem_temp + (J / (S * total_volume)), 2.7, 1000)
+
/datum/reagents/proc/add_reagent(reagent, amount, list/data=null, reagtemp = 300, no_react = 0)
if(!isnum(amount) || !amount)
return FALSE
- if(amount < 0)
+ if(amount <= 0)
return FALSE
- var/list/cached_reagents = reagent_list
- update_total()
- if(total_volume + amount > maximum_volume)
- amount = (maximum_volume - total_volume) //Doesnt fit in. Make it disappear. Shouldnt happen. Will happen.
- chem_temp = round(((amount * reagtemp) + (total_volume * chem_temp)) / (total_volume + amount)) //equalize with new chems
+ var/datum/reagent/D = GLOB.chemical_reagents_list[reagent]
+ if(!D)
+ WARNING("[my_atom] attempted to add a reagent called '[reagent]' which doesn't exist. ([usr])")
+ return FALSE
+ update_total()
+ var/cached_total = total_volume
+ if(cached_total + amount > maximum_volume)
+ amount = (maximum_volume - cached_total) //Doesnt fit in. Make it disappear. Shouldnt happen. Will happen.
+ if(amount <= 0)
+ return FALSE
+ var/new_total = cached_total + amount
+ var/cached_temp = chem_temp
+ var/list/cached_reagents = reagent_list
+
+ //Equalize temperature - Not using specific_heat() because the new chemical isn't in yet.
+ var/specific_heat = 0
+ var/thermal_energy = 0
+ for(var/i in cached_reagents)
+ var/datum/reagent/R = i
+ specific_heat += R.specific_heat * (R.volume / new_total)
+ thermal_energy += R.specific_heat * R.volume * cached_temp
+ specific_heat += D.specific_heat * (amount / new_total)
+ thermal_energy += D.specific_heat * amount * reagtemp
+ chem_temp = thermal_energy / (specific_heat * new_total)
+ ////
+
+ //add the reagent to the existing if it exists
for(var/A in cached_reagents)
var/datum/reagent/R = A
if (R.id == reagent)
@@ -551,29 +586,23 @@
handle_reactions()
return TRUE
- var/datum/reagent/D = GLOB.chemical_reagents_list[reagent]
- if(D)
+ //otherwise make a new one
+ var/datum/reagent/R = new D.type(data)
+ cached_reagents += R
+ R.holder = src
+ R.volume = amount
+ if(data)
+ R.data = data
+ R.on_new(data)
- var/datum/reagent/R = new D.type(data)
- cached_reagents += R
- R.holder = src
- R.volume = amount
- if(data)
- R.data = data
- R.on_new(data)
-
- update_total()
- if(my_atom)
- my_atom.on_reagent_change(ADD_REAGENT)
- if(!no_react)
- handle_reactions()
- if(isliving(my_atom))
- R.on_mob_add(my_atom)
- return TRUE
-
- else
- WARNING("[my_atom] attempted to add a reagent called '[reagent]' which doesn't exist. ([usr])")
- return FALSE
+ update_total()
+ if(my_atom)
+ my_atom.on_reagent_change(ADD_REAGENT)
+ if(!no_react)
+ handle_reactions()
+ if(isliving(my_atom))
+ R.on_mob_add(my_atom)
+ return TRUE
/datum/reagents/proc/add_reagent_list(list/list_reagents, list/data=null) // Like add_reagent but you can enter a list. Format it like this: list("toxin" = 10, "beer" = 15)
for(var/r_id in list_reagents)
diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
index d350a2316b..80e4453c7d 100644
--- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
+++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
@@ -293,7 +293,7 @@
if(default_deconstruction_crowbar(I))
return
- if(istype(I, /obj/item/reagent_containers) && !(I.flags_1 & ABSTRACT_1) && I.is_open_container())
+ if(istype(I, /obj/item/reagent_containers) && !(I.item_flags & ABSTRACT) && I.is_open_container())
var/obj/item/reagent_containers/B = I
. = 1 //no afterattack
if(beaker)
@@ -467,14 +467,14 @@
"creme_de_menthe",
"creme_de_cacao",
"triple_sec",
- "sake",
- "fernet"
+ "sake"
)
emagged_reagents = list(
"ethanol",
"iron",
"minttoxin",
- "atomicbomb"
+ "atomicbomb",
+ "fernet"
)
diff --git a/code/modules/reagents/chemistry/machinery/chem_heater.dm b/code/modules/reagents/chemistry/machinery/chem_heater.dm
index 465f9a165b..e4c6966cff 100644
--- a/code/modules/reagents/chemistry/machinery/chem_heater.dm
+++ b/code/modules/reagents/chemistry/machinery/chem_heater.dm
@@ -46,13 +46,8 @@
if(stat & NOPOWER)
return
if(on)
- if(beaker)
- if(beaker.reagents.chem_temp > target_temperature)
- beaker.reagents.chem_temp += min(-1, (target_temperature - beaker.reagents.chem_temp) * heater_coefficient)
- if(beaker.reagents.chem_temp < target_temperature)
- beaker.reagents.chem_temp += max(1, (target_temperature - beaker.reagents.chem_temp) * heater_coefficient)
-
- beaker.reagents.chem_temp = round(beaker.reagents.chem_temp)
+ if(beaker && beaker.reagents.total_volume)
+ beaker.reagents.adjust_thermal_energy((target_temperature - beaker.reagents.chem_temp) * heater_coefficient * SPECIFIC_HEAT_DEFAULT * beaker.reagents.total_volume)
beaker.reagents.handle_reactions()
/obj/machinery/chem_heater/attackby(obj/item/I, mob/user, params)
@@ -62,7 +57,7 @@
if(default_deconstruction_crowbar(I))
return
- if(istype(I, /obj/item/reagent_containers) && !(I.flags_1 & ABSTRACT_1) && I.is_open_container())
+ if(istype(I, /obj/item/reagent_containers) && !(I.item_flags & ABSTRACT) && I.is_open_container())
. = 1 //no afterattack
if(beaker)
to_chat(user, "A container is already loaded into [src]!")
diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm
index 9fd8a8a377..6327c5ba3a 100644
--- a/code/modules/reagents/chemistry/machinery/chem_master.dm
+++ b/code/modules/reagents/chemistry/machinery/chem_master.dm
@@ -84,7 +84,7 @@
if(default_unfasten_wrench(user, I))
return
- if(istype(I, /obj/item/reagent_containers) && !(I.flags_1 & ABSTRACT_1) && I.is_open_container())
+ if(istype(I, /obj/item/reagent_containers) && !(I.item_flags & ABSTRACT) && I.is_open_container())
. = 1 // no afterattack
if(panel_open)
to_chat(user, "You can't use the [src.name] while its panel is opened!")
diff --git a/code/modules/reagents/chemistry/machinery/pandemic.dm b/code/modules/reagents/chemistry/machinery/pandemic.dm
index 7247b9b5ed..25385ca2ff 100644
--- a/code/modules/reagents/chemistry/machinery/pandemic.dm
+++ b/code/modules/reagents/chemistry/machinery/pandemic.dm
@@ -228,7 +228,7 @@
/obj/machinery/computer/pandemic/attackby(obj/item/I, mob/user, params)
- if(istype(I, /obj/item/reagent_containers) && !(I.flags_1 & ABSTRACT_1) && I.is_open_container())
+ if(istype(I, /obj/item/reagent_containers) && !(I.item_flags & ABSTRACT) && I.is_open_container())
. = TRUE //no afterattack
if(stat & (NOPOWER|BROKEN))
return
diff --git a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm
index 922b557995..3ee971bc9f 100644
--- a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm
+++ b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm
@@ -81,7 +81,7 @@
if(panel_open) //Can't insert objects when its screwed open
return TRUE
- if (istype(I, /obj/item/reagent_containers) && !(I.flags_1 & ABSTRACT_1) && I.is_open_container())
+ if (istype(I, /obj/item/reagent_containers) && !(I.item_flags & ABSTRACT) && I.is_open_container())
if (!beaker)
if(!user.transferItemToLoc(I, src))
to_chat(user, "[I] is stuck to your hand!")
@@ -101,7 +101,7 @@
//Fill machine with a bag!
if(istype(I, /obj/item/storage/bag))
var/list/inserted = list()
- if(I.SendSignal(COMSIG_TRY_STORAGE_TAKE_TYPE, /obj/item/reagent_containers/food/snacks/grown, src, limit - length(holdingitems), null, null, user, inserted))
+ if(SEND_SIGNAL(I, COMSIG_TRY_STORAGE_TAKE_TYPE, /obj/item/reagent_containers/food/snacks/grown, src, limit - length(holdingitems), null, null, user, inserted))
for(var/i in inserted)
holdingitems[i] = TRUE
if(!I.contents.len)
diff --git a/code/modules/reagents/chemistry/readme.md b/code/modules/reagents/chemistry/readme.md
index f070d36067..9a9be7c5a6 100644
--- a/code/modules/reagents/chemistry/readme.md
+++ b/code/modules/reagents/chemistry/readme.md
@@ -38,7 +38,7 @@ The holder (reagents datum) is the datum that holds a list of all reagents curre
If the specified amount is greater than what is available, it will use
the amount of the reagent that is available. If no reagent exists, returns null.
- metabolize(var/mob/M)
+ metabolize(var/mob/living/carbon/C)
This proc is called by the mobs life proc. It simply calls on_mob_life for
all contained reagents. You shouldnt have to use this one directly.
@@ -116,7 +116,7 @@ The holder (reagents datum) is the datum that holds a list of all reagents curre
# About Reagents:
Reagents are all the things you can mix and fille in bottles etc. This can be anything from rejuvs over water to ... iron. Each reagent also has a few procs - i'll explain those below.
```
- reaction_mob(var/mob/M, var/method=TOUCH)
+ reaction_mob(var/mob/living/L, var/method=TOUCH)
This is called by the holder's reation proc.
This version is only called when the reagent
reacts with a mob. The method var can be either
@@ -135,7 +135,7 @@ Reagents are all the things you can mix and fille in bottles etc. This can be an
with a turf. You'll want to put stuff like extra
slippery floors for lube or something in here.
- on_mob_life(var/mob/M)
+ on_mob_life(var/mob/living/L)
This proc is called everytime the mobs life proc executes.
This is the place where you put damage for toxins ,
drowsyness for sleep toxins etc etc.
@@ -241,7 +241,7 @@ By default, all atom have a reagents var - but its empty. if you want to use an
Checks if something can be injected to.
If this returns 1, you can use syringes and droppers
to draw from and add to the contents of this object.
-
+
atom/proc/is_drawable()
Checks if something can be drawn from.
If this returns 1, you can use syringes and droppers
@@ -255,4 +255,4 @@ Credit goes to Cogwerks, and all the other goonstation coders for the original i
- Any of the Secret Chems
- Goon in-joke chems (Eg. Cat Drugs, Hairgrownium)
- Liquid Electricity
-- Rajajajah
\ No newline at end of file
+- Rajajajah
diff --git a/code/modules/reagents/chemistry/reagents.dm b/code/modules/reagents/chemistry/reagents.dm
index aa84265ec5..6f65c33ea1 100644
--- a/code/modules/reagents/chemistry/reagents.dm
+++ b/code/modules/reagents/chemistry/reagents.dm
@@ -8,6 +8,7 @@
var/name = "Reagent"
var/id = "reagent"
var/description = ""
+ var/specific_heat = SPECIFIC_HEAT_DEFAULT //J/(K*mol)
var/taste_description = "metaphorical salt"
var/taste_mult = 1 //how this taste compares to others. Higher values means it is more noticable
var/glass_name = "glass of ...what?" // use for specialty drinks.
@@ -18,7 +19,7 @@
var/reagent_state = LIQUID
var/list/data
var/current_cycle = 0
- var/volume = 0
+ var/volume = 0 //pretend this is moles
var/color = "#000000" // rgb: 0, 0, 0
var/can_synth = TRUE // can this reagent be synthesized? (for example: odysseus syringe gun)
var/metabolization_rate = REAGENTS_METABOLISM //how fast the reagent is metabolized by the mob
@@ -50,17 +51,17 @@
/datum/reagent/proc/reaction_turf(turf/T, volume)
return
-/datum/reagent/proc/on_mob_life(mob/living/M)
+/datum/reagent/proc/on_mob_life(mob/living/carbon/M)
current_cycle++
holder.remove_reagent(src.id, metabolization_rate * M.metabolism_efficiency) //By default it slowly disappears.
return
// Called when this reagent is first added to a mob
-/datum/reagent/proc/on_mob_add(mob/M)
+/datum/reagent/proc/on_mob_add(mob/living/L)
return
// Called when this reagent is removed while inside a mob
-/datum/reagent/proc/on_mob_delete(mob/M)
+/datum/reagent/proc/on_mob_delete(mob/living/L)
return
/datum/reagent/proc/on_move(mob/M)
@@ -87,37 +88,37 @@
/datum/reagent/proc/overdose_start(mob/living/M)
to_chat(M, "You feel like you took too much of [name]!")
- M.SendSignal(COMSIG_ADD_MOOD_EVENT, "[id]_overdose", /datum/mood_event/drugs/overdose, name)
+ SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "[id]_overdose", /datum/mood_event/drugs/overdose, name)
return
/datum/reagent/proc/addiction_act_stage1(mob/living/M)
- M.SendSignal(COMSIG_ADD_MOOD_EVENT, "[id]_overdose", /datum/mood_event/drugs/withdrawal_light, name)
+ SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "[id]_overdose", /datum/mood_event/drugs/withdrawal_light, name)
if(prob(30))
to_chat(M, "You feel like having some [name] right about now.")
return
/datum/reagent/proc/addiction_act_stage2(mob/living/M)
- M.SendSignal(COMSIG_ADD_MOOD_EVENT, "[id]_overdose", /datum/mood_event/drugs/withdrawal_medium, name)
+ SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "[id]_overdose", /datum/mood_event/drugs/withdrawal_medium, name)
if(prob(30))
to_chat(M, "You feel like you need [name]. You just can't get enough.")
return
/datum/reagent/proc/addiction_act_stage3(mob/living/M)
- M.SendSignal(COMSIG_ADD_MOOD_EVENT, "[id]_overdose", /datum/mood_event/drugs/withdrawal_severe, name)
+ SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "[id]_overdose", /datum/mood_event/drugs/withdrawal_severe, name)
if(prob(30))
to_chat(M, "You have an intense craving for [name].")
return
/datum/reagent/proc/addiction_act_stage4(mob/living/M)
- M.SendSignal(COMSIG_ADD_MOOD_EVENT, "[id]_overdose", /datum/mood_event/drugs/withdrawal_critical, name)
+ SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "[id]_overdose", /datum/mood_event/drugs/withdrawal_critical, name)
if(prob(30))
to_chat(M, "You're not feeling good at all! You really need some [name].")
return
-/proc/pretty_string_from_reagent_list(var/list/reagent_list)
+/proc/pretty_string_from_reagent_list(list/reagent_list)
//Convert reagent list to a printable string for logging etc
- var/result = "| "
+ var/list/rs = list()
for (var/datum/reagent/R in reagent_list)
- result += "[R.name], [R.volume] | "
+ rs += "[R.name], [R.volume]"
- return result
+ return rs.Join(" | ")
diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
index cc1b75559f..3e3282fb89 100644
--- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
@@ -34,17 +34,16 @@ All effects don't start immediately, but rather get worse over time; the rate is
91-100: Dangerously toxic - swift death
*/
-/datum/reagent/consumable/ethanol/on_mob_life(mob/living/M)
- if(ishuman(M))
- var/mob/living/carbon/human/H = M
- if(H.drunkenness < volume * boozepwr * ALCOHOL_THRESHOLD_MODIFIER)
- var/booze_power = boozepwr
- if(H.has_trait(TRAIT_ALCOHOL_TOLERANCE)) //we're an accomplished drinker
- booze_power *= 0.7
- H.drunkenness = max((H.drunkenness + (sqrt(volume) * booze_power * ALCOHOL_RATE)), 0) //Volume, power, and server alcohol rate effect how quickly one gets drunk
- var/obj/item/organ/liver/L = H.getorganslot(ORGAN_SLOT_LIVER)
- H.applyLiverDamage((max(sqrt(volume) * (boozepwr ** ALCOHOL_EXPONENT) * L.alcohol_tolerance, 0))/150)
- return ..() || .
+/datum/reagent/consumable/ethanol/on_mob_life(mob/living/carbon/C)
+ if(C.drunkenness < volume * boozepwr * ALCOHOL_THRESHOLD_MODIFIER)
+ var/booze_power = boozepwr
+ if(C.has_trait(TRAIT_ALCOHOL_TOLERANCE)) //we're an accomplished drinker
+ booze_power *= 0.7
+ C.drunkenness = max((C.drunkenness + (sqrt(volume) * booze_power * ALCOHOL_RATE)), 0) //Volume, power, and server alcohol rate effect how quickly one gets drunk
+ var/obj/item/organ/liver/L = C.getorganslot(ORGAN_SLOT_LIVER)
+ if (istype(L))
+ C.applyLiverDamage((max(sqrt(volume) * (boozepwr ** ALCOHOL_EXPONENT) * L.alcohol_tolerance, 0))/150)
+ return ..()
/datum/reagent/consumable/ethanol/reaction_obj(obj/O, reac_volume)
if(istype(O, /obj/item/paper))
@@ -88,6 +87,15 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_name = "glass of beer"
glass_desc = "A freezing pint of beer."
+/datum/reagent/consumable/ethanol/beer/light
+ name = "Light Beer"
+ id = "light_beer"
+ description = "An alcoholic beverage brewed since ancient times on Old Earth. This variety has reduced calorie and alcohol content."
+ boozepwr = 5 //Space Europeans hate it
+ taste_description = "dish water"
+ glass_name = "glass of light beer"
+ glass_desc = "A freezing pint of watery light beer."
+
/datum/reagent/consumable/ethanol/beer/green
name = "Green Beer"
id = "greenbeer"
@@ -98,7 +106,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_name = "glass of green beer"
glass_desc = "A freezing pint of green beer. Festive."
-/datum/reagent/consumable/ethanol/beer/green/on_mob_life(mob/living/M)
+/datum/reagent/consumable/ethanol/beer/green/on_mob_life(mob/living/carbon/M)
if(M.color != color)
M.add_atom_colour(color, TEMPORARY_COLOUR_PRIORITY)
return ..()
@@ -117,7 +125,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_desc = "DAMN, THIS THING LOOKS ROBUST!"
shot_glass_icon_state = "shotglasscream"
-/datum/reagent/consumable/ethanol/kahlua/on_mob_life(mob/living/M)
+/datum/reagent/consumable/ethanol/kahlua/on_mob_life(mob/living/carbon/M)
M.dizziness = max(0,M.dizziness-5)
M.drowsyness = max(0,M.drowsyness-3)
M.AdjustSleeping(-40, FALSE)
@@ -152,7 +160,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_name = "glass of Thirteen Loko"
glass_desc = "This is a glass of Thirteen Loko, it appears to be of the highest quality. The drink, not the glass."
-/datum/reagent/consumable/ethanol/thirteenloko/on_mob_life(mob/living/M)
+/datum/reagent/consumable/ethanol/thirteenloko/on_mob_life(mob/living/carbon/M)
M.drowsyness = max(0,M.drowsyness-7)
M.AdjustSleeping(-40)
M.adjust_bodytemperature(-5 * TEMPERATURE_DAMAGE_COEFFICIENT, BODYTEMP_NORMAL)
@@ -213,7 +221,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_desc = "The glass contain wodka. Xynta."
shot_glass_icon_state = "shotglassclear"
-/datum/reagent/consumable/ethanol/vodka/on_mob_life(mob/living/M)
+/datum/reagent/consumable/ethanol/vodka/on_mob_life(mob/living/carbon/M)
M.radiation = max(M.radiation-2,0)
return ..()
@@ -229,7 +237,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_name = "glass of bilk"
glass_desc = "A brew of milk and beer. For those alcoholics who fear osteoporosis."
-/datum/reagent/consumable/ethanol/bilk/on_mob_life(mob/living/M)
+/datum/reagent/consumable/ethanol/bilk/on_mob_life(mob/living/carbon/M)
if(M.getBruteLoss() && prob(10))
M.heal_bodypart_damage(1)
. = 1
@@ -246,7 +254,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_name = "Three Mile Island Ice Tea"
glass_desc = "A glass of this is sure to prevent a meltdown."
-/datum/reagent/consumable/ethanol/threemileisland/on_mob_life(mob/living/M)
+/datum/reagent/consumable/ethanol/threemileisland/on_mob_life(mob/living/carbon/M)
M.set_drugginess(50)
return ..()
@@ -352,7 +360,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_desc = "It's as strong as it smells."
shot_glass_icon_state = "shotglassgreen"
-/datum/reagent/consumable/ethanol/absinthe/on_mob_life(mob/living/M)
+/datum/reagent/consumable/ethanol/absinthe/on_mob_life(mob/living/carbon/M)
if(prob(10) && !M.has_trait(TRAIT_ALCOHOL_TOLERANCE))
M.hallucination += 4 //Reference to the urban myth
..()
@@ -437,7 +445,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_name = "Cuba Libre"
glass_desc = "A classic mix of rum, cola, and lime. A favorite of revolutionaries everywhere!"
-/datum/reagent/consumable/ethanol/cuba_libre/on_mob_life(mob/living/M)
+/datum/reagent/consumable/ethanol/cuba_libre/on_mob_life(mob/living/carbon/M)
if(M.mind && M.mind.has_antag_datum(/datum/antagonist/rev)) //Cuba Libre, the traditional drink of revolutions! Heals revolutionaries.
M.adjustBruteLoss(-1, 0)
M.adjustFireLoss(-1, 0)
@@ -501,7 +509,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_name = "Screwdriver"
glass_desc = "A simple, yet superb mixture of Vodka and orange juice. Just the thing for the tired engineer."
-/datum/reagent/consumable/ethanol/screwdrivercocktail/on_mob_life(mob/living/M)
+/datum/reagent/consumable/ethanol/screwdrivercocktail/on_mob_life(mob/living/carbon/M)
if(M.mind && M.mind.assigned_role in list("Station Engineer", "Atmospheric Technician", "Chief Engineer")) //Engineers lose radiation poisoning at a massive rate.
M.radiation = max(M.radiation - 25, 0)
return ..()
@@ -528,11 +536,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_name = "Bloody Mary"
glass_desc = "Tomato juice, mixed with Vodka and a lil' bit of lime. Tastes like liquid murder."
-/datum/reagent/consumable/ethanol/bloody_mary/on_mob_life(mob/living/M)
- if(iscarbon(M))
- var/mob/living/carbon/C = M
- if(C.blood_volume < BLOOD_VOLUME_NORMAL)
- C.blood_volume = min(BLOOD_VOLUME_NORMAL, C.blood_volume + 3) //Bloody Mary quickly restores blood loss.
+/datum/reagent/consumable/ethanol/bloody_mary/on_mob_life(mob/living/carbon/C)
+ if(C.blood_volume < BLOOD_VOLUME_NORMAL)
+ C.blood_volume = min(BLOOD_VOLUME_NORMAL, C.blood_volume + 3) //Bloody Mary quickly restores blood loss.
..()
/datum/reagent/consumable/ethanol/brave_bull
@@ -575,7 +581,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
light_holder = new(M)
light_holder.set_light(3, 0.7, "#FFCC00") //Tequila Sunrise makes you radiate dim light, like a sunrise!
-/datum/reagent/consumable/ethanol/tequila_sunrise/on_mob_life(mob/living/M)
+/datum/reagent/consumable/ethanol/tequila_sunrise/on_mob_life(mob/living/carbon/M)
if(QDELETED(light_holder))
M.reagents.del_reagent("tequilasunrise") //If we lost our light object somehow, remove the reagent
else if(light_holder.loc != M)
@@ -598,7 +604,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_desc = "Whoah, this thing is on FIRE!"
shot_glass_icon_state = "toxinsspecialglass"
-/datum/reagent/consumable/ethanol/toxins_special/on_mob_life(var/mob/living/M as mob)
+/datum/reagent/consumable/ethanol/toxins_special/on_mob_life(var/mob/living/M)
M.adjust_bodytemperature(15 * TEMPERATURE_DAMAGE_COEFFICIENT, 0, BODYTEMP_NORMAL + 20) //310.15 is the normal bodytemp.
return ..()
@@ -614,7 +620,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_name = "Beepsky Smash"
glass_desc = "Heavy, hot and strong. Just like the Iron fist of the LAW."
-/datum/reagent/consumable/ethanol/beepsky_smash/on_mob_life(mob/living/M)
+/datum/reagent/consumable/ethanol/beepsky_smash/on_mob_life(mob/living/carbon/M)
if(M.has_trait(TRAIT_ALCOHOL_TOLERANCE))
M.Stun(30, 0) //this realistically does nothing to prevent chainstunning but will cause them to recover faster once it's out of their system
else
@@ -652,7 +658,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
boozepwr = 5 //We've had worse in the mines
dorf_mode = TRUE
-/datum/reagent/consumable/ethanol/manly_dorf/on_mob_life(mob/living/M)
+/datum/reagent/consumable/ethanol/manly_dorf/on_mob_life(mob/living/carbon/M)
if(dorf_mode)
M.adjustBruteLoss(-2)
M.adjustFireLoss(-2)
@@ -754,7 +760,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_desc = "A scientist's drink of choice, for thinking how to blow up the station."
-/datum/reagent/consumable/ethanol/manhattan_proj/on_mob_life(mob/living/M)
+/datum/reagent/consumable/ethanol/manhattan_proj/on_mob_life(mob/living/carbon/M)
M.set_drugginess(30)
return ..()
@@ -780,7 +786,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_name = "Anti-freeze"
glass_desc = "The ultimate refreshment."
-/datum/reagent/consumable/ethanol/antifreeze/on_mob_life(mob/living/M)
+/datum/reagent/consumable/ethanol/antifreeze/on_mob_life(mob/living/carbon/M)
M.adjust_bodytemperature(20 * TEMPERATURE_DAMAGE_COEFFICIENT, 0, BODYTEMP_NORMAL + 20) //310.15 is the normal bodytemp.
return ..()
@@ -795,7 +801,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_name = "Barefoot"
glass_desc = "Barefoot and pregnant."
-/datum/reagent/consumable/ethanol/barefoot/on_mob_life(mob/living/M)
+/datum/reagent/consumable/ethanol/barefoot/on_mob_life(mob/living/carbon/M)
if(ishuman(M)) //Barefoot causes the imbiber to quickly regenerate brute trauma if they're not wearing shoes.
var/mob/living/carbon/human/H = M
if(!H.shoes)
@@ -893,7 +899,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_name = "Sbiten"
glass_desc = "A spicy mix of Vodka and Spice. Very hot."
-/datum/reagent/consumable/ethanol/sbiten/on_mob_life(mob/living/M)
+/datum/reagent/consumable/ethanol/sbiten/on_mob_life(mob/living/carbon/M)
M.adjust_bodytemperature(50 * TEMPERATURE_DAMAGE_COEFFICIENT, 0 ,BODYTEMP_HEAT_DAMAGE_LIMIT) //310.15 is the normal bodytemp.
return ..()
@@ -931,7 +937,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_name = "iced beer"
glass_desc = "A beer so frosty, the air around it freezes."
-/datum/reagent/consumable/ethanol/iced_beer/on_mob_life(mob/living/M)
+/datum/reagent/consumable/ethanol/iced_beer/on_mob_life(mob/living/carbon/M)
M.adjust_bodytemperature(-20 * TEMPERATURE_DAMAGE_COEFFICIENT, T0C) //310.15 is the normal bodytemp.
return ..()
@@ -1013,7 +1019,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_name = "Changeling Sting"
glass_desc = "A stingy drink."
-/datum/reagent/consumable/ethanol/changelingsting/on_mob_life(mob/living/M)
+/datum/reagent/consumable/ethanol/changelingsting/on_mob_life(mob/living/carbon/M)
if(M.mind) //Changeling Sting assists in the recharging of changeling chemicals.
var/datum/antagonist/changeling/changeling = M.mind.has_antag_datum(/datum/antagonist/changeling)
if(changeling)
@@ -1043,7 +1049,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_name = "Syndicate Bomb"
glass_desc = "A syndicate bomb."
-/datum/reagent/consumable/ethanol/syndicatebomb/on_mob_life(mob/living/M)
+/datum/reagent/consumable/ethanol/syndicatebomb/on_mob_life(mob/living/carbon/M)
if(prob(5))
playsound(get_turf(M), 'sound/effects/explosionfar.ogg', 100, 1)
return ..()
@@ -1083,8 +1089,8 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_name = "Banana Honk"
glass_desc = "A drink from Clown Heaven."
-/datum/reagent/consumable/ethanol/bananahonk/on_mob_life(mob/living/M)
- if((ishuman(M) && M.job in list("Clown") ) || ismonkey(M))
+/datum/reagent/consumable/ethanol/bananahonk/on_mob_life(mob/living/carbon/M)
+ if((ishuman(M) && M.job == "Clown") || ismonkey(M))
M.heal_bodypart_damage(1,1)
. = 1
return ..() || .
@@ -1101,8 +1107,8 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_name = "Silencer"
glass_desc = "A drink from Mime Heaven."
-/datum/reagent/consumable/ethanol/silencer/on_mob_life(mob/living/M)
- if(ishuman(M) && M.job in list("Mime"))
+/datum/reagent/consumable/ethanol/silencer/on_mob_life(mob/living/carbon/M)
+ if(ishuman(M) && M.job == "Mime")
M.heal_bodypart_damage(1,1)
. = 1
return ..() || .
@@ -1156,7 +1162,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_desc = "Induces magnetism in the imbiber. Started as a barroom prank but evolved to become popular with miners and scrappers. Metallic aftertaste."
-/datum/reagent/consumable/ethanol/fetching_fizz/on_mob_life(mob/living/M)
+/datum/reagent/consumable/ethanol/fetching_fizz/on_mob_life(mob/living/carbon/M)
for(var/obj/item/stack/ore/O in orange(3, M))
step_towards(O, get_turf(M))
return ..()
@@ -1174,7 +1180,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_name = "Hearty Punch"
glass_desc = "Aromatic beverage served piping hot. According to folk tales it can almost wake the dead."
-/datum/reagent/consumable/ethanol/hearty_punch/on_mob_life(mob/living/M)
+/datum/reagent/consumable/ethanol/hearty_punch/on_mob_life(mob/living/carbon/M)
if(M.health <= 0)
M.adjustBruteLoss(-3, 0)
M.adjustFireLoss(-3, 0)
@@ -1208,7 +1214,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_name = "Atomic Bomb"
glass_desc = "Nanotrasen cannot take legal responsibility for your actions after imbibing."
-/datum/reagent/consumable/ethanol/atomicbomb/on_mob_life(mob/living/M)
+/datum/reagent/consumable/ethanol/atomicbomb/on_mob_life(mob/living/carbon/M)
M.set_drugginess(50)
if(!M.has_trait(TRAIT_ALCOHOL_TOLERANCE))
M.confused = max(M.confused+2,0)
@@ -1237,7 +1243,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_name = "Pan-Galactic Gargle Blaster"
glass_desc = "Like having your brain smashed out by a slice of lemon wrapped around a large gold brick."
-/datum/reagent/consumable/ethanol/gargle_blaster/on_mob_life(mob/living/M)
+/datum/reagent/consumable/ethanol/gargle_blaster/on_mob_life(mob/living/carbon/M)
M.dizziness +=1.5
switch(current_cycle)
if(15 to 45)
@@ -1296,7 +1302,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_name = "Hippie's Delight"
glass_desc = "A drink enjoyed by people during the 1960's."
-/datum/reagent/consumable/ethanol/hippies_delight/on_mob_life(mob/living/M)
+/datum/reagent/consumable/ethanol/hippies_delight/on_mob_life(mob/living/carbon/M)
if (!M.slurring)
M.slurring = 1
switch(current_cycle)
@@ -1352,7 +1358,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_name = "Nar'Sour"
glass_desc = "A new hit cocktail inspired by THE ARM Breweries will have you shouting Fuu ma'jin in no time!"
-/datum/reagent/consumable/ethanol/narsour/on_mob_life(mob/living/M)
+/datum/reagent/consumable/ethanol/narsour/on_mob_life(mob/living/carbon/M)
M.cultslurring = min(M.cultslurring + 3, 3)
M.stuttering = min(M.stuttering + 3, 3)
..()
@@ -1401,7 +1407,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_name = "Quadruple Sec"
glass_desc = "An intimidating and lawful beverage dares you to violate the law and make its day. Still can't drink it on duty, though."
-/datum/reagent/consumable/ethanol/quadruple_sec/on_mob_life(mob/living/M)
+/datum/reagent/consumable/ethanol/quadruple_sec/on_mob_life(mob/living/carbon/M)
if(M.mind && M.mind.assigned_role in list("Security Officer", "Detective", "Head of Security", "Warden", "Lawyer")) //Securidrink in line with the screwderiver for engineers or nothing for mimes.
M.heal_bodypart_damage(1, 1)
M.adjustBruteLoss(-2,0)
@@ -1419,7 +1425,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_name = "Quintuple Sec"
glass_desc = "Now you are become law, destroyer of clowns."
-/datum/reagent/consumable/ethanol/quintuple_sec/on_mob_life(mob/living/M)
+/datum/reagent/consumable/ethanol/quintuple_sec/on_mob_life(mob/living/carbon/M)
if(M.mind && M.mind.assigned_role in list("Security Officer", "Detective", "Head of Security", "Warden", "Lawyer")) //Securidrink in line with the screwderiver for engineers or nothing for mimes but STRONG..
M.heal_bodypart_damage(2,2,2)
M.adjustBruteLoss(-5,0)
@@ -1501,7 +1507,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_desc = "Squirt cider will toughen you right up. Too bad about the musty aftertaste."
shot_glass_icon_state = "shotglassgreen"
-/datum/reagent/consumable/ethanol/squirt_cider/on_mob_life(mob/living/M)
+/datum/reagent/consumable/ethanol/squirt_cider/on_mob_life(mob/living/carbon/M)
M.satiety += 5 //for context, vitamins give 30 satiety per tick
..()
. = TRUE
@@ -1529,7 +1535,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_name = "Sugar Rush"
glass_desc = "If you can't mix a Sugar Rush, you can't tend bar."
-/datum/reagent/consumable/ethanol/sugar_rush/on_mob_life(mob/living/M)
+/datum/reagent/consumable/ethanol/sugar_rush/on_mob_life(mob/living/carbon/M)
M.satiety -= 10 //junky as hell! a whole glass will keep you from being able to eat junk food
..()
. = TRUE
@@ -1570,7 +1576,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_name = "Peppermint Patty"
glass_desc = "A boozy minty hot cocoa that warms your belly on a cold night."
-/datum/reagent/consumable/ethanol/peppermint_patty/on_mob_life(mob/living/M)
+/datum/reagent/consumable/ethanol/peppermint_patty/on_mob_life(mob/living/carbon/M)
M.adjust_bodytemperature(5 * TEMPERATURE_DAMAGE_COEFFICIENT, 0, BODYTEMP_NORMAL)
..()
@@ -1673,8 +1679,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_name = "glass of fernet"
glass_desc = "A glass of pure Fernet. Only an absolute madman would drink this alone." //Hi Kevum
-/datum/reagent/consumable/ethanol/fernet/on_mob_life(mob/living/M)
-
+/datum/reagent/consumable/ethanol/fernet/on_mob_life(mob/living/carbon/M)
if(M.nutrition <= NUTRITION_LEVEL_STARVING)
M.adjustToxLoss(1*REM, 0)
M.nutrition = max(M.nutrition - 5, 0)
@@ -1692,8 +1697,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_name = "glass of fernet cola"
glass_desc = "A sawed-off cola bottle filled with Fernet Cola. Nothing better after eating like a lardass."
-/datum/reagent/consumable/ethanol/fernetcola/on_mob_life(mob/living/M)
-
+/datum/reagent/consumable/ethanol/fernetcola/on_mob_life(mob/living/carbon/M)
if(M.nutrition <= NUTRITION_LEVEL_STARVING)
M.adjustToxLoss(0.5*REM, 0)
M.nutrition = max(M.nutrition - 3, 0)
@@ -1712,8 +1716,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_name = "glass of fanciulli"
glass_desc = "A glass of Fanciulli. It's just Manhattan with Fernet."
-/datum/reagent/consumable/ethanol/fanciulli/on_mob_life(mob/living/M)
-
+/datum/reagent/consumable/ethanol/fanciulli/on_mob_life(mob/living/carbon/M)
M.nutrition = max(M.nutrition - 5, 0)
M.overeatduration = 0
return ..()
@@ -1737,12 +1740,8 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_desc = "A glass of Branca Menta, perfect for those lazy and hot sunday summer afternoons." //Get lazy literally by drinking this
-/datum/reagent/consumable/ethanol/branca_menta/on_mob_life(mob/living/M)
+/datum/reagent/consumable/ethanol/branca_menta/on_mob_life(mob/living/carbon/M)
M.adjust_bodytemperature(-20 * TEMPERATURE_DAMAGE_COEFFICIENT, T0C)
- if(M.nutrition <= NUTRITION_LEVEL_STARVING)
- M.adjustToxLoss(1*REM, 0)
- M.nutrition = max(M.nutrition - 5, 0)
- M.overeatduration = 0
return ..()
/datum/reagent/consumable/ethanol/branca_menta/on_mob_add(mob/living/M)
diff --git a/code/modules/reagents/chemistry/reagents/blob_reagents.dm b/code/modules/reagents/chemistry/reagents/blob_reagents.dm
index 0d5c8218ea..8ee9449468 100644
--- a/code/modules/reagents/chemistry/reagents/blob_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/blob_reagents.dm
@@ -199,11 +199,9 @@
M.reagents.add_reagent("spore", 0.2*reac_volume)
M.apply_damage(0.7*reac_volume, TOX)
-/datum/reagent/blob/regenerative_materia/on_mob_life(mob/living/M)
- M.adjustToxLoss(1*REM)
- if(iscarbon(M))
- var/mob/living/carbon/N = M
- N.hal_screwyhud = SCREWYHUD_HEALTHY //fully healed, honest
+/datum/reagent/blob/regenerative_materia/on_mob_life(mob/living/carbon/C)
+ C.adjustToxLoss(1*REM)
+ C.hal_screwyhud = SCREWYHUD_HEALTHY //fully healed, honest
..()
/datum/reagent/blob/regenerative_materia/on_mob_delete(mob/living/M)
@@ -346,7 +344,7 @@
M.reagents.add_reagent("cryogenic_poison", 0.3*reac_volume)
M.apply_damage(0.2*reac_volume, BRUTE)
-/datum/reagent/blob/cryogenic_poison/on_mob_life(mob/living/M)
+/datum/reagent/blob/cryogenic_poison/on_mob_life(mob/living/carbon/M)
M.adjustBruteLoss(0.3*REM, 0)
M.adjustFireLoss(0.3*REM, 0)
M.adjustToxLoss(0.3*REM, 0)
diff --git a/code/modules/reagents/chemistry/reagents/drink_reagents.dm b/code/modules/reagents/chemistry/reagents/drink_reagents.dm
index 10b20dde42..4d2dba4659 100644
--- a/code/modules/reagents/chemistry/reagents/drink_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/drink_reagents.dm
@@ -14,7 +14,7 @@
glass_name = "glass of orange juice"
glass_desc = "Vitamins! Yay!"
-/datum/reagent/consumable/orangejuice/on_mob_life(mob/living/M)
+/datum/reagent/consumable/orangejuice/on_mob_life(mob/living/carbon/M)
if(M.getOxyLoss() && prob(30))
M.adjustOxyLoss(-1, 0)
. = 1
@@ -30,7 +30,7 @@
glass_name = "glass of tomato juice"
glass_desc = "Are you sure this is tomato juice?"
-/datum/reagent/consumable/tomatojuice/on_mob_life(mob/living/M)
+/datum/reagent/consumable/tomatojuice/on_mob_life(mob/living/carbon/M)
if(M.getFireLoss() && prob(20))
M.heal_bodypart_damage(0,1, 0)
. = 1
@@ -46,7 +46,7 @@
glass_name = "glass of lime juice"
glass_desc = "A glass of sweet-sour lime juice."
-/datum/reagent/consumable/limejuice/on_mob_life(mob/living/M)
+/datum/reagent/consumable/limejuice/on_mob_life(mob/living/carbon/M)
if(M.getToxLoss() && prob(20))
M.adjustToxLoss(-1*REM, 0)
. = 1
@@ -62,7 +62,7 @@
glass_name = "glass of carrot juice"
glass_desc = "It's just like a carrot but without crunching."
-/datum/reagent/consumable/carrotjuice/on_mob_life(mob/living/M)
+/datum/reagent/consumable/carrotjuice/on_mob_life(mob/living/carbon/M)
M.adjust_blurriness(-1)
M.adjust_blindness(-1)
switch(current_cycle)
@@ -101,7 +101,7 @@
glass_name = "glass of berry juice"
glass_desc = "Berry juice. Or maybe it's poison. Who cares?"
-/datum/reagent/consumable/poisonberryjuice/on_mob_life(mob/living/M)
+/datum/reagent/consumable/poisonberryjuice/on_mob_life(mob/living/carbon/M)
M.adjustToxLoss(1, 0)
. = 1
..()
@@ -136,8 +136,8 @@
glass_name = "glass of banana juice"
glass_desc = "The raw essence of a banana. HONK."
-/datum/reagent/consumable/banana/on_mob_life(mob/living/M)
- if((ishuman(M) && M.job in list("Clown") ) || ismonkey(M))
+/datum/reagent/consumable/banana/on_mob_life(mob/living/carbon/M)
+ if((ishuman(M) && M.job == "Clown") || ismonkey(M))
M.heal_bodypart_damage(1,1, 0)
. = 1
..()
@@ -152,8 +152,8 @@
glass_desc = "Absolutely nothing."
shot_glass_icon_state = "shotglass"
-/datum/reagent/consumable/nothing/on_mob_life(mob/living/M)
- if(ishuman(M) && M.job in list("Mime"))
+/datum/reagent/consumable/nothing/on_mob_life(mob/living/carbon/M)
+ if(ishuman(M) && M.job == "Mime")
M.heal_bodypart_damage(1,1, 0)
. = 1
..()
@@ -167,8 +167,6 @@
taste_description = "laughter"
/datum/reagent/consumable/laughter/on_mob_life(mob/living/carbon/M)
- if(!iscarbon(M))
- return
M.emote("laugh")
..()
@@ -181,8 +179,6 @@
taste_description = "laughter"
/datum/reagent/consumable/superlaughter/on_mob_life(mob/living/carbon/M)
- if(!iscarbon(M))
- return
if(prob(30))
M.visible_message("[M] bursts out into a fit of uncontrollable laughter!", "You burst out in a fit of uncontrollable laughter!")
M.Stun(5)
@@ -216,7 +212,7 @@
glass_name = "glass of milk"
glass_desc = "White and nutritious goodness!"
-/datum/reagent/consumable/milk/on_mob_life(mob/living/M)
+/datum/reagent/consumable/milk/on_mob_life(mob/living/carbon/M)
if(M.getBruteLoss() && prob(20))
M.heal_bodypart_damage(1,0, 0)
. = 1
@@ -238,7 +234,7 @@
glass_name = "glass of soy milk"
glass_desc = "White and nutritious soy goodness!"
-/datum/reagent/consumable/soymilk/on_mob_life(mob/living/M)
+/datum/reagent/consumable/soymilk/on_mob_life(mob/living/carbon/M)
if(M.getBruteLoss() && prob(20))
M.heal_bodypart_damage(1,0, 0)
. = 1
@@ -254,7 +250,7 @@
glass_name = "glass of cream"
glass_desc = "Ewwww..."
-/datum/reagent/consumable/cream/on_mob_life(mob/living/M)
+/datum/reagent/consumable/cream/on_mob_life(mob/living/carbon/M)
if(M.getBruteLoss() && prob(20))
M.heal_bodypart_damage(1,0, 0)
. = 1
@@ -276,7 +272,7 @@
M.Jitter(5)
..()
-/datum/reagent/consumable/coffee/on_mob_life(mob/living/M)
+/datum/reagent/consumable/coffee/on_mob_life(mob/living/carbon/M)
M.dizziness = max(0,M.dizziness-5)
M.drowsyness = max(0,M.drowsyness-3)
M.AdjustSleeping(-40, FALSE)
@@ -298,7 +294,7 @@
glass_name = "glass of tea"
glass_desc = "Drinking it from here would not seem right."
-/datum/reagent/consumable/tea/on_mob_life(mob/living/M)
+/datum/reagent/consumable/tea/on_mob_life(mob/living/carbon/M)
M.dizziness = max(0,M.dizziness-2)
M.drowsyness = max(0,M.drowsyness-1)
M.jitteriness = max(0,M.jitteriness-3)
@@ -320,7 +316,7 @@
glass_name = "Arnold Palmer"
glass_desc = "You feel like taking a few golf swings after a few swigs of this."
-/datum/reagent/consumable/tea/arnold_palmer/on_mob_life(mob/living/M)
+/datum/reagent/consumable/tea/arnold_palmer/on_mob_life(mob/living/carbon/M)
if(prob(5))
to_chat(M, "[pick("You remember to square your shoulders.","You remember to keep your head down.","You can't decide between squaring your shoulders and keeping your head down.","You remember to relax.","You think about how someday you'll get two strokes off your golf game.")]")
..()
@@ -337,7 +333,7 @@
glass_name = "iced coffee"
glass_desc = "A drink to perk you up and refresh you!"
-/datum/reagent/consumable/icecoffee/on_mob_life(mob/living/M)
+/datum/reagent/consumable/icecoffee/on_mob_life(mob/living/carbon/M)
M.dizziness = max(0,M.dizziness-5)
M.drowsyness = max(0,M.drowsyness-3)
M.AdjustSleeping(-40, FALSE)
@@ -357,7 +353,7 @@
glass_name = "iced tea"
glass_desc = "All natural, antioxidant-rich flavour sensation."
-/datum/reagent/consumable/icetea/on_mob_life(mob/living/M)
+/datum/reagent/consumable/icetea/on_mob_life(mob/living/carbon/M)
M.dizziness = max(0,M.dizziness-2)
M.drowsyness = max(0,M.drowsyness-1)
M.AdjustSleeping(-40, FALSE)
@@ -377,7 +373,7 @@
glass_name = "glass of Space Cola"
glass_desc = "A glass of refreshing Space Cola."
-/datum/reagent/consumable/space_cola/on_mob_life(mob/living/M)
+/datum/reagent/consumable/space_cola/on_mob_life(mob/living/carbon/M)
M.drowsyness = max(0,M.drowsyness-5)
M.adjust_bodytemperature(-5 * TEMPERATURE_DAMAGE_COEFFICIENT, BODYTEMP_NORMAL)
..()
@@ -392,19 +388,15 @@
glass_name = "glass of Nuka Cola"
glass_desc = "Don't cry, Don't raise your eye, It's only nuclear wasteland."
-/datum/reagent/consumable/nuka_cola/on_mob_add(mob/M)
+/datum/reagent/consumable/nuka_cola/on_mob_add(mob/living/L)
..()
- if(isliving(M))
- var/mob/living/L = M
- L.add_trait(TRAIT_GOTTAGOFAST, id)
+ L.add_trait(TRAIT_GOTTAGOFAST, id)
-/datum/reagent/consumable/nuka_cola/on_mob_delete(mob/M)
- if(isliving(M))
- var/mob/living/L = M
- L.remove_trait(TRAIT_GOTTAGOFAST, id)
+/datum/reagent/consumable/nuka_cola/on_mob_delete(mob/living/L)
+ L.remove_trait(TRAIT_GOTTAGOFAST, id)
..()
-/datum/reagent/consumable/nuka_cola/on_mob_life(mob/living/M)
+/datum/reagent/consumable/nuka_cola/on_mob_life(mob/living/carbon/M)
M.Jitter(20)
M.set_drugginess(30)
M.dizziness +=1.5
@@ -424,7 +416,7 @@
glass_name = "glass of Space Mountain Wind"
glass_desc = "Space Mountain Wind. As you know, there are no mountains in space, only wind."
-/datum/reagent/consumable/spacemountainwind/on_mob_life(mob/living/M)
+/datum/reagent/consumable/spacemountainwind/on_mob_life(mob/living/carbon/M)
M.drowsyness = max(0,M.drowsyness-7)
M.AdjustSleeping(-20, FALSE)
M.adjust_bodytemperature(-5 * TEMPERATURE_DAMAGE_COEFFICIENT, BODYTEMP_NORMAL)
@@ -442,7 +434,7 @@
glass_name = "glass of Dr. Gibb"
glass_desc = "Dr. Gibb. Not as dangerous as the glass_name might imply."
-/datum/reagent/consumable/dr_gibb/on_mob_life(mob/living/M)
+/datum/reagent/consumable/dr_gibb/on_mob_life(mob/living/carbon/M)
M.drowsyness = max(0,M.drowsyness-6)
M.adjust_bodytemperature(-5 * TEMPERATURE_DAMAGE_COEFFICIENT, BODYTEMP_NORMAL)
..()
@@ -458,7 +450,7 @@
glass_desc = "Space-up. It helps you keep your cool."
-/datum/reagent/consumable/space_up/on_mob_life(mob/living/M)
+/datum/reagent/consumable/space_up/on_mob_life(mob/living/carbon/M)
M.adjust_bodytemperature(-8 * TEMPERATURE_DAMAGE_COEFFICIENT, BODYTEMP_NORMAL)
..()
@@ -473,7 +465,7 @@
glass_desc = "You're pretty certain a real fruit has never actually touched this."
-/datum/reagent/consumable/lemon_lime/on_mob_life(mob/living/M)
+/datum/reagent/consumable/lemon_lime/on_mob_life(mob/living/carbon/M)
M.adjust_bodytemperature(-8 * TEMPERATURE_DAMAGE_COEFFICIENT, BODYTEMP_NORMAL)
..()
@@ -487,7 +479,7 @@
glass_name = "glass of Pwr Game"
glass_desc = "Goes well with a Vlad's salad."
-/datum/reagent/consumable/pwr_game/on_mob_life(mob/living/M)
+/datum/reagent/consumable/pwr_game/on_mob_life(mob/living/carbon/M)
M.adjust_bodytemperature(-8 * TEMPERATURE_DAMAGE_COEFFICIENT, BODYTEMP_NORMAL)
..()
@@ -501,7 +493,7 @@
glass_name = "glass of Shambler's juice"
glass_desc = "Mmm mm, shambly."
-/datum/reagent/consumable/shamblers/on_mob_life(mob/living/M)
+/datum/reagent/consumable/shamblers/on_mob_life(mob/living/carbon/M)
M.adjust_bodytemperature(-8 * TEMPERATURE_DAMAGE_COEFFICIENT, BODYTEMP_NORMAL)
..()
/datum/reagent/consumable/sodawater
@@ -514,7 +506,7 @@
glass_name = "glass of soda water"
glass_desc = "Soda water. Why not make a scotch and soda?"
-/datum/reagent/consumable/sodawater/on_mob_life(mob/living/M)
+/datum/reagent/consumable/sodawater/on_mob_life(mob/living/carbon/M)
M.dizziness = max(0,M.dizziness-5)
M.drowsyness = max(0,M.drowsyness-3)
M.adjust_bodytemperature(-5 * TEMPERATURE_DAMAGE_COEFFICIENT, BODYTEMP_NORMAL)
@@ -530,7 +522,7 @@
glass_name = "glass of tonic water"
glass_desc = "Quinine tastes funny, but at least it'll keep that Space Malaria away."
-/datum/reagent/consumable/tonic/on_mob_life(mob/living/M)
+/datum/reagent/consumable/tonic/on_mob_life(mob/living/carbon/M)
M.dizziness = max(0,M.dizziness-5)
M.drowsyness = max(0,M.drowsyness-3)
M.AdjustSleeping(-40, FALSE)
@@ -549,7 +541,7 @@
glass_name = "glass of ice"
glass_desc = "Generally, you're supposed to put something else in there too..."
-/datum/reagent/consumable/ice/on_mob_life(mob/living/M)
+/datum/reagent/consumable/ice/on_mob_life(mob/living/carbon/M)
M.adjust_bodytemperature(-5 * TEMPERATURE_DAMAGE_COEFFICIENT, BODYTEMP_NORMAL)
..()
@@ -563,7 +555,7 @@
glass_name = "soy latte"
glass_desc = "A nice and refreshing beverage while you're reading."
-/datum/reagent/consumable/soy_latte/on_mob_life(mob/living/M)
+/datum/reagent/consumable/soy_latte/on_mob_life(mob/living/carbon/M)
M.dizziness = max(0,M.dizziness-5)
M.drowsyness = max(0,M.drowsyness-3)
M.SetSleeping(0, FALSE)
@@ -584,7 +576,7 @@
glass_name = "cafe latte"
glass_desc = "A nice, strong and refreshing beverage while you're reading."
-/datum/reagent/consumable/cafe_latte/on_mob_life(mob/living/M)
+/datum/reagent/consumable/cafe_latte/on_mob_life(mob/living/carbon/M)
M.dizziness = max(0,M.dizziness-5)
M.drowsyness = max(0,M.drowsyness-3)
M.SetSleeping(0, FALSE)
@@ -605,7 +597,7 @@
glass_name = "Doctor's Delight"
glass_desc = "The space doctor's favorite. Guaranteed to restore bodily injury; side effects include cravings and hunger."
-/datum/reagent/consumable/doctor_delight/on_mob_life(mob/living/M)
+/datum/reagent/consumable/doctor_delight/on_mob_life(mob/living/carbon/M)
M.adjustBruteLoss(-0.5, 0)
M.adjustFireLoss(-0.5, 0)
M.adjustToxLoss(-0.5, 0)
@@ -739,4 +731,4 @@
color = "#EA1D26"
taste_description = "sweet pomegranates"
glass_name = "glass of grenadine"
- glass_desc = "Delicious flavored syrup."
\ No newline at end of file
+ glass_desc = "Delicious flavored syrup."
diff --git a/code/modules/reagents/chemistry/reagents/drug_reagents.dm b/code/modules/reagents/chemistry/reagents/drug_reagents.dm
index 377ddc47fd..33511c8905 100644
--- a/code/modules/reagents/chemistry/reagents/drug_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/drug_reagents.dm
@@ -7,7 +7,7 @@
/datum/reagent/drug/on_mob_delete(mob/living/M)
if(trippy)
- M.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "[id]_high")
+ SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "[id]_high")
/datum/reagent/drug/space_drugs
name = "Space drugs"
@@ -16,7 +16,7 @@
color = "#60A584" // rgb: 96, 165, 132
overdose_threshold = 30
-/datum/reagent/drug/space_drugs/on_mob_life(mob/living/M)
+/datum/reagent/drug/space_drugs/on_mob_life(mob/living/carbon/M)
M.set_drugginess(15)
if(isturf(M.loc) && !isspaceturf(M.loc))
if(M.canmove)
@@ -28,7 +28,7 @@
/datum/reagent/drug/space_drugs/overdose_start(mob/living/M)
to_chat(M, "You start tripping hard!")
- M.SendSignal(COMSIG_ADD_MOOD_EVENT, "[id]_overdose", /datum/mood_event/drugs/overdose, name)
+ SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "[id]_overdose", /datum/mood_event/drugs/overdose, name)
/datum/reagent/drug/space_drugs/overdose_process(mob/living/M)
if(M.hallucination < volume && prob(20))
@@ -45,11 +45,11 @@
taste_description = "smoke"
trippy = FALSE
-/datum/reagent/drug/nicotine/on_mob_life(mob/living/M)
+/datum/reagent/drug/nicotine/on_mob_life(mob/living/carbon/M)
if(prob(1))
var/smoke_message = pick("You feel relaxed.", "You feel calmed.","You feel alert.","You feel rugged.")
to_chat(M, "[smoke_message]")
- M.SendSignal(COMSIG_ADD_MOOD_EVENT, "smoked", /datum/mood_event/drugs/smoked, name)
+ SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "smoked", /datum/mood_event/drugs/smoked, name)
M.AdjustStun(-20, 0)
M.AdjustKnockdown(-20, 0)
M.AdjustUnconscious(-20, 0)
@@ -66,7 +66,7 @@
overdose_threshold = 20
addiction_threshold = 10
-/datum/reagent/drug/crank/on_mob_life(mob/living/M)
+/datum/reagent/drug/crank/on_mob_life(mob/living/carbon/M)
if(prob(5))
var/high_message = pick("You feel jittery.", "You feel like you gotta go fast.", "You feel like you need to step it up.")
to_chat(M, "[high_message]")
@@ -114,7 +114,7 @@
addiction_threshold = 15
-/datum/reagent/drug/krokodil/on_mob_life(mob/living/M)
+/datum/reagent/drug/krokodil/on_mob_life(mob/living/carbon/M)
var/high_message = pick("You feel calm.", "You feel collected.", "You feel like you need to relax.")
if(prob(5))
to_chat(M, "[high_message]")
@@ -165,19 +165,15 @@
addiction_threshold = 10
metabolization_rate = 0.75 * REAGENTS_METABOLISM
-/datum/reagent/drug/methamphetamine/on_mob_add(mob/M)
+/datum/reagent/drug/methamphetamine/on_mob_add(mob/living/L)
..()
- if(isliving(M))
- var/mob/living/L = M
- L.add_trait(TRAIT_GOTTAGOREALLYFAST, id)
+ L.add_trait(TRAIT_GOTTAGOREALLYFAST, id)
-/datum/reagent/drug/methamphetamine/on_mob_delete(mob/M)
- if(isliving(M))
- var/mob/living/L = M
- L.remove_trait(TRAIT_GOTTAGOREALLYFAST, id)
+/datum/reagent/drug/methamphetamine/on_mob_delete(mob/living/L)
+ L.remove_trait(TRAIT_GOTTAGOREALLYFAST, id)
..()
-/datum/reagent/drug/methamphetamine/on_mob_life(mob/living/M)
+/datum/reagent/drug/methamphetamine/on_mob_life(mob/living/carbon/M)
var/high_message = pick("You feel hyper.", "You feel like you need to go faster.", "You feel like you can run the world.")
if(prob(5))
to_chat(M, "[high_message]")
@@ -252,27 +248,23 @@
taste_description = "salt" // because they're bathsalts?
var/datum/brain_trauma/special/psychotic_brawling/bath_salts/rage
-/datum/reagent/drug/bath_salts/on_mob_add(mob/M)
+/datum/reagent/drug/bath_salts/on_mob_add(mob/living/L)
..()
- if(isliving(M))
- var/mob/living/L = M
- L.add_trait(TRAIT_STUNIMMUNE, id)
- L.add_trait(TRAIT_SLEEPIMMUNE, id)
- if(iscarbon(L))
- var/mob/living/carbon/C = L
- rage = new()
- C.gain_trauma(rage, TRAUMA_RESILIENCE_ABSOLUTE)
+ L.add_trait(TRAIT_STUNIMMUNE, id)
+ L.add_trait(TRAIT_SLEEPIMMUNE, id)
+ if(iscarbon(L))
+ var/mob/living/carbon/C = L
+ rage = new()
+ C.gain_trauma(rage, TRAUMA_RESILIENCE_ABSOLUTE)
-/datum/reagent/drug/bath_salts/on_mob_delete(mob/M)
- if(isliving(M))
- var/mob/living/L = M
- L.remove_trait(TRAIT_STUNIMMUNE, id)
- L.remove_trait(TRAIT_SLEEPIMMUNE, id)
- if(rage)
- QDEL_NULL(rage)
+/datum/reagent/drug/bath_salts/on_mob_delete(mob/living/L)
+ L.remove_trait(TRAIT_STUNIMMUNE, id)
+ L.remove_trait(TRAIT_SLEEPIMMUNE, id)
+ if(rage)
+ QDEL_NULL(rage)
..()
-/datum/reagent/drug/bath_salts/on_mob_life(mob/living/M)
+/datum/reagent/drug/bath_salts/on_mob_life(mob/living/carbon/M)
var/high_message = pick("You feel amped up.", "You feel ready.", "You feel like you can push it to the limit.")
if(prob(5))
to_chat(M, "[high_message]")
@@ -352,7 +344,7 @@
reagent_state = LIQUID
color = "#78FFF0"
-/datum/reagent/drug/aranesp/on_mob_life(mob/living/M)
+/datum/reagent/drug/aranesp/on_mob_life(mob/living/carbon/M)
var/high_message = pick("You feel amped up.", "You feel ready.", "You feel like you can push it to the limit.")
if(prob(5))
to_chat(M, "[high_message]")
diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm
index 3b1af3a599..459cbefaa2 100644
--- a/code/modules/reagents/chemistry/reagents/food_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm
@@ -14,7 +14,7 @@
taste_mult = 4
var/nutriment_factor = 1 * REAGENTS_METABOLISM
-/datum/reagent/consumable/on_mob_life(mob/living/M)
+/datum/reagent/consumable/on_mob_life(mob/living/carbon/M)
current_cycle++
M.nutrition += nutriment_factor
holder.remove_reagent(src.id, metabolization_rate)
@@ -30,7 +30,7 @@
var/brute_heal = 1
var/burn_heal = 0
-/datum/reagent/consumable/nutriment/on_mob_life(mob/living/M)
+/datum/reagent/consumable/nutriment/on_mob_life(mob/living/carbon/M)
if(prob(50))
M.heal_bodypart_damage(brute_heal,burn_heal, 0)
. = 1
@@ -78,7 +78,7 @@
brute_heal = 1
burn_heal = 1
-/datum/reagent/consumable/nutriment/vitamin/on_mob_life(mob/living/M)
+/datum/reagent/consumable/nutriment/vitamin/on_mob_life(mob/living/carbon/M)
if(M.satiety < 600)
M.satiety += 30
. = ..()
@@ -183,7 +183,7 @@
taste_description = "hot peppers"
taste_mult = 1.5
-/datum/reagent/consumable/capsaicin/on_mob_life(mob/living/M)
+/datum/reagent/consumable/capsaicin/on_mob_life(mob/living/carbon/M)
var/heating = 0
switch(current_cycle)
if(1 to 15)
@@ -214,7 +214,7 @@
color = "#8BA6E9" // rgb: 139, 166, 233
taste_description = "mint"
-/datum/reagent/consumable/frostoil/on_mob_life(mob/living/M)
+/datum/reagent/consumable/frostoil/on_mob_life(mob/living/carbon/M)
var/cooling = 0
switch(current_cycle)
if(1 to 15)
@@ -320,7 +320,7 @@
victim.Knockdown(100)
victim.update_damage_hud()
-/datum/reagent/consumable/condensedcapsaicin/on_mob_life(mob/living/M)
+/datum/reagent/consumable/condensedcapsaicin/on_mob_life(mob/living/carbon/M)
if(prob(5))
M.visible_message("[M] [pick("dry heaves!","coughs!","splutters!")]")
..()
@@ -374,7 +374,7 @@
glass_name = "glass of chocolate"
glass_desc = "Tasty."
-/datum/reagent/consumable/hot_coco/on_mob_life(mob/living/M)
+/datum/reagent/consumable/hot_coco/on_mob_life(mob/living/carbon/M)
M.adjust_bodytemperature(5 * TEMPERATURE_DAMAGE_COEFFICIENT, 0, BODYTEMP_NORMAL)
..()
@@ -386,7 +386,7 @@
metabolization_rate = 0.2 * REAGENTS_METABOLISM
taste_description = "mushroom"
-/datum/reagent/mushroomhallucinogen/on_mob_life(mob/living/M)
+/datum/reagent/mushroomhallucinogen/on_mob_life(mob/living/carbon/M)
if(!M.slurring)
M.slurring = 1
switch(current_cycle)
@@ -416,7 +416,7 @@
color = "#FF00FF" // rgb: 255, 0, 255
taste_description = "childhood whimsy"
-/datum/reagent/consumable/sprinkles/on_mob_life(mob/living/M)
+/datum/reagent/consumable/sprinkles/on_mob_life(mob/living/carbon/M)
if(ishuman(M) && M.job in list("Security Officer", "Head of Security", "Detective", "Warden"))
M.heal_bodypart_damage(1,1, 0)
. = 1
@@ -465,7 +465,7 @@
color = "#302000" // rgb: 48, 32, 0
taste_description = "wet and cheap noodles"
-/datum/reagent/consumable/hot_ramen/on_mob_life(mob/living/M)
+/datum/reagent/consumable/hot_ramen/on_mob_life(mob/living/carbon/M)
M.adjust_bodytemperature(10 * TEMPERATURE_DAMAGE_COEFFICIENT, 0, BODYTEMP_NORMAL)
..()
@@ -477,7 +477,7 @@
color = "#302000" // rgb: 48, 32, 0
taste_description = "wet and cheap noodles on fire"
-/datum/reagent/consumable/hell_ramen/on_mob_life(mob/living/M)
+/datum/reagent/consumable/hell_ramen/on_mob_life(mob/living/carbon/M)
M.adjust_bodytemperature(10 * TEMPERATURE_DAMAGE_COEFFICIENT)
..()
@@ -549,7 +549,7 @@
metabolization_rate = 3 * REAGENTS_METABOLISM
taste_description = "sweet slime"
-/datum/reagent/consumable/corn_syrup/on_mob_life(mob/living/M)
+/datum/reagent/consumable/corn_syrup/on_mob_life(mob/living/carbon/M)
holder.add_reagent("sugar", 3)
..()
@@ -562,7 +562,7 @@
metabolization_rate = 1 * REAGENTS_METABOLISM
taste_description = "sweetness"
-/datum/reagent/consumable/honey/on_mob_life(mob/living/M)
+/datum/reagent/consumable/honey/on_mob_life(mob/living/carbon/M)
M.reagents.add_reagent("sugar",3)
if(prob(55))
M.adjustBruteLoss(-1*REM, 0)
@@ -615,7 +615,7 @@
M.blur_eyes(5)
..()
-/datum/reagent/consumable/tearjuice/on_mob_life(mob/living/M)
+/datum/reagent/consumable/tearjuice/on_mob_life(mob/living/carbon/M)
..()
if(M.eye_blurry) //Don't worsen vision if it was otherwise fine
M.blur_eyes(4)
@@ -632,7 +632,7 @@
nutriment_factor = 15 * REAGENTS_METABOLISM
color = "#664330" // rgb: 102, 67, 48
-/datum/reagent/consumable/nutriment/stabilized/on_mob_life(mob/living/M)
+/datum/reagent/consumable/nutriment/stabilized/on_mob_life(mob/living/carbon/M)
if(M.nutrition > NUTRITION_LEVEL_FULL - 25)
M.nutrition -= 3*nutriment_factor
..()
@@ -647,7 +647,7 @@
color = "#1d043d"
taste_description = "bitter mushroom"
-/datum/reagent/consumable/entpoly/on_mob_life(mob/living/M)
+/datum/reagent/consumable/entpoly/on_mob_life(mob/living/carbon/M)
if(current_cycle >= 10)
M.Unconscious(40, 0)
. = 1
@@ -681,7 +681,7 @@
nutriment_factor = 3 * REAGENTS_METABOLISM
taste_description = "fruity mushroom"
-/datum/reagent/consumable/vitfro/on_mob_life(mob/living/M)
+/datum/reagent/consumable/vitfro/on_mob_life(mob/living/carbon/M)
if(prob(80))
M.adjustBruteLoss(-1*REM, 0)
M.adjustFireLoss(-1*REM, 0)
diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
index c12c770ea2..474e24f5a5 100644
--- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
@@ -10,7 +10,7 @@
id = "medicine"
taste_description = "bitterness"
-/datum/reagent/medicine/on_mob_life(mob/living/M)
+/datum/reagent/medicine/on_mob_life(mob/living/carbon/M)
current_cycle++
holder.remove_reagent(src.id, metabolization_rate / M.metabolism_efficiency) //medicine reagents stay longer if you have a better metabolism
@@ -20,7 +20,7 @@
description = "Leporazine will effectively regulate a patient's body temperature, ensuring it never leaves safe levels."
color = "#C8A5DC" // rgb: 200, 165, 220
-/datum/reagent/medicine/leporazine/on_mob_life(mob/living/M)
+/datum/reagent/medicine/leporazine/on_mob_life(mob/living/carbon/M)
if(M.bodytemperature > BODYTEMP_NORMAL)
M.adjust_bodytemperature(-40 * TEMPERATURE_DAMAGE_COEFFICIENT, BODYTEMP_NORMAL)
else if(M.bodytemperature < (BODYTEMP_NORMAL + 1))
@@ -80,7 +80,7 @@
description = "Increases resistance to stuns as well as reducing drowsiness and hallucinations."
color = "#FF00FF"
-/datum/reagent/medicine/synaptizine/on_mob_life(mob/living/M)
+/datum/reagent/medicine/synaptizine/on_mob_life(mob/living/carbon/M)
M.drowsyness = max(M.drowsyness-5, 0)
M.AdjustStun(-20, 0)
M.AdjustKnockdown(-20, 0)
@@ -99,7 +99,7 @@
description = "Reduces drowsiness, hallucinations, and Histamine from body."
color = "#EC536D" // rgb: 236, 83, 109
-/datum/reagent/medicine/synaphydramine/on_mob_life(mob/living/M)
+/datum/reagent/medicine/synaphydramine/on_mob_life(mob/living/carbon/M)
M.drowsyness = max(M.drowsyness-5, 0)
if(holder.has_reagent("mindbreaker"))
holder.remove_reagent("mindbreaker", 5)
@@ -117,7 +117,7 @@
description = "Instantly restores all hearing to the patient, but does not cure deafness."
color = "#6600FF" // rgb: 100, 165, 255
-/datum/reagent/medicine/inacusiate/on_mob_life(mob/living/M)
+/datum/reagent/medicine/inacusiate/on_mob_life(mob/living/carbon/M)
M.restoreEars()
..()
@@ -128,7 +128,7 @@
color = "#0000C8"
taste_description = "sludge"
-/datum/reagent/medicine/cryoxadone/on_mob_life(mob/living/M)
+/datum/reagent/medicine/cryoxadone/on_mob_life(mob/living/carbon/M)
var/power = -0.00003 * (M.bodytemperature ** 2) + 3
if(M.bodytemperature < T0C)
M.adjustOxyLoss(-3 * power, 0)
@@ -149,7 +149,7 @@
taste_description = "muscle"
metabolization_rate = 1.5 * REAGENTS_METABOLISM
-/datum/reagent/medicine/clonexadone/on_mob_life(mob/living/M)
+/datum/reagent/medicine/clonexadone/on_mob_life(mob/living/carbon/M)
if(M.bodytemperature < T0C)
M.adjustCloneLoss(0.00006 * (M.bodytemperature ** 2) - 6, 0)
M.remove_trait(TRAIT_DISFIGURED, TRAIT_GENERIC)
@@ -164,7 +164,7 @@
color = "#f7832a"
taste_description = "spicy jelly"
-/datum/reagent/medicine/pyroxadone/on_mob_life(mob/living/M)
+/datum/reagent/medicine/pyroxadone/on_mob_life(mob/living/carbon/M)
if(M.bodytemperature > BODYTEMP_HEAT_DAMAGE_LIMIT)
var/power = 0
switch(M.bodytemperature)
@@ -195,7 +195,7 @@
overdose_threshold = 30
taste_description = "fish"
-/datum/reagent/medicine/rezadone/on_mob_life(mob/living/M)
+/datum/reagent/medicine/rezadone/on_mob_life(mob/living/carbon/M)
M.setCloneLoss(0) //Rezadone is almost never used in favor of cryoxadone. Hopefully this will change that.
M.heal_bodypart_damage(1,1)
M.remove_trait(TRAIT_DISFIGURED, TRAIT_GENERIC)
@@ -237,7 +237,7 @@
M.emote("scream")
..()
-/datum/reagent/medicine/silver_sulfadiazine/on_mob_life(mob/living/M)
+/datum/reagent/medicine/silver_sulfadiazine/on_mob_life(mob/living/carbon/M)
M.adjustFireLoss(-2*REM, 0)
..()
. = 1
@@ -251,7 +251,7 @@
metabolization_rate = 0.5 * REAGENTS_METABOLISM
overdose_threshold = 25
-/datum/reagent/medicine/oxandrolone/on_mob_life(mob/living/M)
+/datum/reagent/medicine/oxandrolone/on_mob_life(mob/living/carbon/M)
if(M.getFireLoss() > 50)
M.adjustFireLoss(-4*REM, 0) //Twice as effective as silver sulfadiazine for severe burns
else
@@ -286,7 +286,7 @@
..()
-/datum/reagent/medicine/styptic_powder/on_mob_life(mob/living/M)
+/datum/reagent/medicine/styptic_powder/on_mob_life(mob/living/carbon/M)
M.adjustBruteLoss(-2*REM, 0)
..()
. = 1
@@ -303,7 +303,7 @@
var/last_added = 0
var/maximum_reachable = BLOOD_VOLUME_NORMAL - 10 //So that normal blood regeneration can continue with salglu active
-/datum/reagent/medicine/salglu_solution/on_mob_life(mob/living/M)
+/datum/reagent/medicine/salglu_solution/on_mob_life(mob/living/carbon/M)
if(last_added)
M.blood_volume -= last_added
last_added = 0
@@ -315,7 +315,7 @@
if(prob(33))
M.adjustBruteLoss(-0.5*REM, 0)
M.adjustFireLoss(-0.5*REM, 0)
- . = 1
+ . = TRUE
..()
/datum/reagent/medicine/salglu_solution/overdose_process(mob/living/M)
@@ -330,7 +330,7 @@
if(prob(33))
M.adjustBruteLoss(0.5*REM, 0)
M.adjustFireLoss(0.5*REM, 0)
- . = 1
+ . = TRUE
..()
/datum/reagent/medicine/mine_salve
@@ -341,14 +341,12 @@
color = "#6D6374"
metabolization_rate = 0.4 * REAGENTS_METABOLISM
-/datum/reagent/medicine/mine_salve/on_mob_life(mob/living/M)
- if(iscarbon(M))
- var/mob/living/carbon/N = M
- N.hal_screwyhud = SCREWYHUD_HEALTHY
- M.adjustBruteLoss(-0.25*REM, 0)
- M.adjustFireLoss(-0.25*REM, 0)
+/datum/reagent/medicine/mine_salve/on_mob_life(mob/living/carbon/C)
+ C.hal_screwyhud = SCREWYHUD_HEALTHY
+ C.adjustBruteLoss(-0.25*REM, 0)
+ C.adjustFireLoss(-0.25*REM, 0)
..()
- . = 1
+ return TRUE
/datum/reagent/medicine/mine_salve/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message = 1)
if(iscarbon(M) && M.stat != DEAD)
@@ -400,7 +398,7 @@
metabolization_rate = 0.5 * REAGENTS_METABOLISM
taste_description = "ash"
-/datum/reagent/medicine/charcoal/on_mob_life(mob/living/M)
+/datum/reagent/medicine/charcoal/on_mob_life(mob/living/carbon/M)
M.adjustToxLoss(-2*REM, 0)
. = 1
for(var/datum/reagent/R in M.reagents.reagent_list)
@@ -417,7 +415,7 @@
metabolization_rate = 0.25 * REAGENTS_METABOLISM
overdose_threshold = 30
-/datum/reagent/medicine/omnizine/on_mob_life(mob/living/M)
+/datum/reagent/medicine/omnizine/on_mob_life(mob/living/carbon/M)
M.adjustToxLoss(-0.5*REM, 0)
M.adjustOxyLoss(-0.5*REM, 0)
M.adjustBruteLoss(-0.5*REM, 0)
@@ -442,7 +440,7 @@
metabolization_rate = 0.5 * REAGENTS_METABOLISM
taste_description = "acid"
-/datum/reagent/medicine/calomel/on_mob_life(mob/living/M)
+/datum/reagent/medicine/calomel/on_mob_life(mob/living/carbon/M)
for(var/datum/reagent/R in M.reagents.reagent_list)
if(R != src)
M.reagents.remove_reagent(R.id,2.5)
@@ -459,7 +457,7 @@
color = "#14FF3C"
metabolization_rate = 2 * REAGENTS_METABOLISM
-/datum/reagent/medicine/potass_iodide/on_mob_life(mob/living/M)
+/datum/reagent/medicine/potass_iodide/on_mob_life(mob/living/carbon/M)
if(M.radiation > 0)
M.radiation -= min(M.radiation, 8)
..()
@@ -472,7 +470,7 @@
color = "#E6FFF0"
metabolization_rate = 0.5 * REAGENTS_METABOLISM
-/datum/reagent/medicine/pen_acid/on_mob_life(mob/living/M)
+/datum/reagent/medicine/pen_acid/on_mob_life(mob/living/carbon/M)
M.radiation -= max(M.radiation-RAD_MOB_SAFE, 0)/50
M.adjustToxLoss(-2*REM, 0)
for(var/datum/reagent/R in M.reagents.reagent_list)
@@ -491,7 +489,7 @@
overdose_threshold = 25
-/datum/reagent/medicine/sal_acid/on_mob_life(mob/living/M)
+/datum/reagent/medicine/sal_acid/on_mob_life(mob/living/carbon/M)
if(M.getBruteLoss() > 50)
M.adjustBruteLoss(-4*REM, 0) //Twice as effective as styptic powder for severe bruising
else
@@ -513,7 +511,7 @@
color = "#00FFFF"
metabolization_rate = 0.25 * REAGENTS_METABOLISM
-/datum/reagent/medicine/salbutamol/on_mob_life(mob/living/M)
+/datum/reagent/medicine/salbutamol/on_mob_life(mob/living/carbon/M)
M.adjustOxyLoss(-3*REM, 0)
if(M.losebreath >= 4)
M.losebreath -= 2
@@ -535,7 +533,7 @@
M.adjustBruteLoss(-0.5*REM, 0)
M.adjustFireLoss(-0.5*REM, 0)
..()
- . = 1
+ return TRUE
/datum/reagent/medicine/ephedrine
name = "Ephedrine"
@@ -547,32 +545,28 @@
overdose_threshold = 45
addiction_threshold = 30
-/datum/reagent/medicine/ephedrine/on_mob_add(mob/M)
+/datum/reagent/medicine/ephedrine/on_mob_add(mob/living/L)
..()
- if(isliving(M))
- var/mob/living/L = M
- L.add_trait(TRAIT_GOTTAGOFAST, id)
+ L.add_trait(TRAIT_GOTTAGOFAST, id)
-/datum/reagent/medicine/ephedrine/on_mob_delete(mob/M)
- if(isliving(M))
- var/mob/living/L = M
- L.remove_trait(TRAIT_GOTTAGOFAST, id)
+/datum/reagent/medicine/ephedrine/on_mob_delete(mob/living/L)
+ L.remove_trait(TRAIT_GOTTAGOFAST, id)
..()
-/datum/reagent/medicine/ephedrine/on_mob_life(mob/living/M)
+/datum/reagent/medicine/ephedrine/on_mob_life(mob/living/carbon/M)
M.AdjustStun(-20, 0)
M.AdjustKnockdown(-20, 0)
M.AdjustUnconscious(-20, 0)
M.adjustStaminaLoss(-1*REM, 0)
..()
- . = 1
+ return TRUE
/datum/reagent/medicine/ephedrine/overdose_process(mob/living/M)
if(prob(33))
M.adjustToxLoss(0.5*REM, 0)
M.losebreath++
. = 1
- ..()
+ return TRUE
/datum/reagent/medicine/ephedrine/addiction_act_stage1(mob/living/M)
if(prob(33))
@@ -610,7 +604,7 @@
color = "#64FFE6"
metabolization_rate = 0.5 * REAGENTS_METABOLISM
-/datum/reagent/medicine/diphenhydramine/on_mob_life(mob/living/M)
+/datum/reagent/medicine/diphenhydramine/on_mob_life(mob/living/carbon/M)
if(prob(10))
M.drowsyness += 1
M.jitteriness -= 1
@@ -627,19 +621,15 @@
overdose_threshold = 30
addiction_threshold = 25
-/datum/reagent/medicine/morphine/on_mob_add(mob/M)
+/datum/reagent/medicine/morphine/on_mob_add(mob/living/L)
..()
- if(isliving(M))
- var/mob/living/L = M
- L.add_trait(TRAIT_IGNORESLOWDOWN, id)
+ L.add_trait(TRAIT_IGNORESLOWDOWN, id)
-/datum/reagent/medicine/morphine/on_mob_delete(mob/M)
- if(isliving(M))
- var/mob/living/L = M
- L.remove_trait(TRAIT_IGNORESLOWDOWN, id)
+/datum/reagent/medicine/morphine/on_mob_delete(mob/living/L)
+ L.remove_trait(TRAIT_IGNORESLOWDOWN, id)
..()
-/datum/reagent/medicine/morphine/on_mob_life(mob/living/M)
+/datum/reagent/medicine/morphine/on_mob_life(mob/living/carbon/M)
switch(current_cycle)
if(11)
to_chat(M, "You start to feel tired..." )
@@ -699,7 +689,7 @@
metabolization_rate = 0.25 * REAGENTS_METABOLISM
taste_description = "dull toxin"
-/datum/reagent/medicine/oculine/on_mob_life(mob/living/M)
+/datum/reagent/medicine/oculine/on_mob_life(mob/living/carbon/M)
var/obj/item/organ/eyes/eyes = M.getorganslot(ORGAN_SLOT_EYES)
if (!eyes)
return
@@ -730,7 +720,7 @@
metabolization_rate = 0.25 * REAGENTS_METABOLISM
overdose_threshold = 35
-/datum/reagent/medicine/atropine/on_mob_life(mob/living/M)
+/datum/reagent/medicine/atropine/on_mob_life(mob/living/carbon/M)
if(M.health < 0)
M.adjustToxLoss(-2*REM, 0)
M.adjustBruteLoss(-2*REM, 0)
@@ -759,7 +749,7 @@
metabolization_rate = 0.25 * REAGENTS_METABOLISM
overdose_threshold = 30
-/datum/reagent/medicine/epinephrine/on_mob_life(mob/living/M)
+/datum/reagent/medicine/epinephrine/on_mob_life(mob/living/carbon/M)
if(M.health < 0)
M.adjustToxLoss(-0.5*REM, 0)
M.adjustBruteLoss(-0.5*REM, 0)
@@ -816,7 +806,7 @@
add_logs(M, M, "revived", src)
..()
-/datum/reagent/medicine/strange_reagent/on_mob_life(mob/living/M)
+/datum/reagent/medicine/strange_reagent/on_mob_life(mob/living/carbon/M)
M.adjustBruteLoss(0.5*REM, 0)
M.adjustFireLoss(0.5*REM, 0)
..()
@@ -828,12 +818,10 @@
description = "Efficiently restores brain damage."
color = "#DCDCFF"
-/datum/reagent/medicine/mannitol/on_mob_life(mob/living/M)
- M.adjustBrainLoss(-2*REM)
- if(iscarbon(M))
- var/mob/living/carbon/C = M
- if(prob(10))
- C.cure_trauma_type(resilience = TRAUMA_RESILIENCE_BASIC)
+/datum/reagent/medicine/mannitol/on_mob_life(mob/living/carbon/C)
+ C.adjustBrainLoss(-2*REM)
+ if(prob(10))
+ C.cure_trauma_type(resilience = TRAUMA_RESILIENCE_BASIC)
..()
/datum/reagent/medicine/mutadone
@@ -843,7 +831,7 @@
color = "#5096C8"
taste_description = "acid"
-/datum/reagent/medicine/mutadone/on_mob_life(mob/living/carbon/human/M)
+/datum/reagent/medicine/mutadone/on_mob_life(mob/living/carbon/M)
M.jitteriness = 0
if(M.has_dna())
M.dna.remove_all_mutations()
@@ -857,7 +845,7 @@
color = "#00B4C8"
taste_description = "raw egg"
-/datum/reagent/medicine/antihol/on_mob_life(mob/living/M)
+/datum/reagent/medicine/antihol/on_mob_life(mob/living/carbon/M)
M.dizziness = 0
M.drowsyness = 0
M.slurring = 0
@@ -878,19 +866,15 @@
metabolization_rate = 0.5 * REAGENTS_METABOLISM
overdose_threshold = 60
-/datum/reagent/medicine/stimulants/on_mob_add(mob/M)
+/datum/reagent/medicine/stimulants/on_mob_add(mob/living/L)
..()
- if(isliving(M))
- var/mob/living/L = M
- L.add_trait(TRAIT_GOTTAGOFAST, id)
+ L.add_trait(TRAIT_GOTTAGOFAST, id)
-/datum/reagent/medicine/stimulants/on_mob_delete(mob/M)
- if(isliving(M))
- var/mob/living/L = M
- L.remove_trait(TRAIT_GOTTAGOFAST, id)
+/datum/reagent/medicine/stimulants/on_mob_delete(mob/living/L)
+ L.remove_trait(TRAIT_GOTTAGOFAST, id)
..()
-/datum/reagent/medicine/stimulants/on_mob_life(mob/living/M)
+/datum/reagent/medicine/stimulants/on_mob_life(mob/living/carbon/M)
if(M.health < 50 && M.health > 0)
M.adjustOxyLoss(-1*REM, 0)
M.adjustToxLoss(-1*REM, 0)
@@ -919,7 +903,7 @@
color = "#FFFFF0"
metabolization_rate = 0.5 * REAGENTS_METABOLISM
-/datum/reagent/medicine/insulin/on_mob_life(mob/living/M)
+/datum/reagent/medicine/insulin/on_mob_life(mob/living/carbon/M)
if(M.AdjustSleeping(-20, FALSE))
. = 1
M.reagents.remove_reagent("sugar", 3)
@@ -934,7 +918,7 @@
color = "#C8A5DC"
overdose_threshold = 30
-/datum/reagent/medicine/bicaridine/on_mob_life(mob/living/M)
+/datum/reagent/medicine/bicaridine/on_mob_life(mob/living/carbon/M)
M.adjustBruteLoss(-2*REM, 0)
..()
. = 1
@@ -952,7 +936,7 @@
color = "#C8A5DC"
overdose_threshold = 30
-/datum/reagent/medicine/dexalin/on_mob_life(mob/living/M)
+/datum/reagent/medicine/dexalin/on_mob_life(mob/living/carbon/M)
M.adjustOxyLoss(-2*REM, 0)
..()
. = 1
@@ -970,7 +954,7 @@
color = "#C8A5DC"
overdose_threshold = 30
-/datum/reagent/medicine/kelotane/on_mob_life(mob/living/M)
+/datum/reagent/medicine/kelotane/on_mob_life(mob/living/carbon/M)
M.adjustFireLoss(-2*REM, 0)
..()
. = 1
@@ -989,7 +973,7 @@
overdose_threshold = 30
taste_description = "a roll of gauze"
-/datum/reagent/medicine/antitoxin/on_mob_life(mob/living/M)
+/datum/reagent/medicine/antitoxin/on_mob_life(mob/living/carbon/M)
M.adjustToxLoss(-2*REM, 0)
for(var/datum/reagent/toxin/R in M.reagents.reagent_list)
M.reagents.remove_reagent(R.id,1)
@@ -1008,7 +992,7 @@
reagent_state = LIQUID
color = "#C8A5DC"
-/datum/reagent/medicine/inaprovaline/on_mob_life(mob/living/M)
+/datum/reagent/medicine/inaprovaline/on_mob_life(mob/living/carbon/M)
if(M.losebreath >= 5)
M.losebreath -= 5
..()
@@ -1022,7 +1006,7 @@
overdose_threshold = 30
taste_description = "grossness"
-/datum/reagent/medicine/tricordrazine/on_mob_life(mob/living/M)
+/datum/reagent/medicine/tricordrazine/on_mob_life(mob/living/carbon/M)
if(prob(80))
M.adjustBruteLoss(-1*REM, 0)
M.adjustFireLoss(-1*REM, 0)
@@ -1047,7 +1031,7 @@
color = "#91D865"
taste_description = "jelly"
-/datum/reagent/medicine/regen_jelly/on_mob_life(mob/living/M)
+/datum/reagent/medicine/regen_jelly/on_mob_life(mob/living/carbon/M)
M.adjustBruteLoss(-1.5*REM, 0)
M.adjustFireLoss(-1.5*REM, 0)
M.adjustOxyLoss(-1.5*REM, 0)
@@ -1062,7 +1046,7 @@
reagent_state = SOLID
color = "#555555"
-/datum/reagent/medicine/syndicate_nanites/on_mob_life(mob/living/M)
+/datum/reagent/medicine/syndicate_nanites/on_mob_life(mob/living/carbon/M)
M.adjustBruteLoss(-5*REM, 0) //A ton of healing - this is a 50 telecrystal investment.
M.adjustFireLoss(-5*REM, 0)
M.adjustOxyLoss(-15, 0)
@@ -1079,7 +1063,7 @@
color = rgb(255, 175, 0)
overdose_threshold = 25
-/datum/reagent/medicine/earthsblood/on_mob_life(mob/living/M)
+/datum/reagent/medicine/earthsblood/on_mob_life(mob/living/carbon/M)
M.adjustBruteLoss(-3 * REM, 0)
M.adjustFireLoss(-3 * REM, 0)
M.adjustOxyLoss(-15 * REM, 0)
@@ -1106,7 +1090,7 @@
color = "#27870a"
metabolization_rate = 0.4 * REAGENTS_METABOLISM
-/datum/reagent/medicine/haloperidol/on_mob_life(mob/living/M)
+/datum/reagent/medicine/haloperidol/on_mob_life(mob/living/carbon/M)
for(var/datum/reagent/drug/R in M.reagents.reagent_list)
M.reagents.remove_reagent(R.id,5)
M.drowsyness += 2
@@ -1118,7 +1102,7 @@
M.adjustBrainLoss(1*REM, 50)
M.adjustStaminaLoss(2.5*REM, 0)
..()
- . = 1
+ return TRUE
/datum/reagent/medicine/miningnanites
name = "Nanites"
@@ -1128,17 +1112,17 @@
overdose_threshold = 3 //To prevent people stacking massive amounts of a very strong healing reagent
can_synth = FALSE
-/datum/reagent/medicine/miningnanites/on_mob_life(mob/living/M)
+/datum/reagent/medicine/miningnanites/on_mob_life(mob/living/carbon/M)
M.heal_bodypart_damage(5,5)
..()
- . = 1
+ return TRUE
/datum/reagent/medicine/miningnanites/overdose_process(mob/living/M)
M.adjustBruteLoss(3*REM, 0)
M.adjustFireLoss(3*REM, 0)
M.adjustToxLoss(3*REM, 0)
..()
- . = 1
+ return TRUE
//used for changeling's adrenaline power
/datum/reagent/medicine/changelingadrenaline
@@ -1148,18 +1132,18 @@
color = "#C8A5DC"
overdose_threshold = 30
-/datum/reagent/medicine/changelingadrenaline/on_mob_life(mob/living/M as mob)
+/datum/reagent/medicine/changelingadrenaline/on_mob_life(mob/living/carbon/M as mob)
M.AdjustUnconscious(-20, 0)
M.AdjustStun(-20, 0)
M.AdjustKnockdown(-20, 0)
M.adjustStaminaLoss(-1, 0)
- . = 1
..()
+ return TRUE
/datum/reagent/medicine/changelingadrenaline/overdose_process(mob/living/M as mob)
M.adjustToxLoss(1, 0)
- . = 1
..()
+ return TRUE
/datum/reagent/medicine/changelinghaste
name = "Changeling Haste"
@@ -1168,22 +1152,18 @@
color = "#C8A5DC"
metabolization_rate = 1
-/datum/reagent/medicine/changelinghaste/on_mob_add(mob/M)
+/datum/reagent/medicine/changelinghaste/on_mob_add(mob/living/L)
..()
- if(isliving(M))
- var/mob/living/L = M
- L.add_trait(TRAIT_GOTTAGOREALLYFAST, id)
+ L.add_trait(TRAIT_GOTTAGOREALLYFAST, id)
-/datum/reagent/medicine/changelinghaste/on_mob_delete(mob/M)
- if(isliving(M))
- var/mob/living/L = M
- L.remove_trait(TRAIT_GOTTAGOREALLYFAST, id)
+/datum/reagent/medicine/changelinghaste/on_mob_delete(mob/living/L)
+ L.remove_trait(TRAIT_GOTTAGOREALLYFAST, id)
..()
-/datum/reagent/medicine/changelinghaste/on_mob_life(mob/living/M as mob)
+/datum/reagent/medicine/changelinghaste/on_mob_life(mob/living/carbon/M)
M.adjustToxLoss(2, 0)
- . = 1
..()
+ return TRUE
/datum/reagent/medicine/corazone
// Heart attack code will not do damage if corazone is present
@@ -1226,7 +1206,7 @@
M.remove_trait(TRAIT_SLEEPIMMUNE, id)
..()
-/datum/reagent/medicine/modafinil/on_mob_life(mob/living/M)
+/datum/reagent/medicine/modafinil/on_mob_life(mob/living/carbon/M)
if(!overdosed) // We do not want any effects on OD
overdose_threshold = overdose_threshold + rand(-10,10)/10 // for extra fun
M.AdjustStun(-5, 0)
@@ -1235,7 +1215,7 @@
M.adjustStaminaLoss(-0.5*REM, 0)
M.Jitter(1)
metabolization_rate = 0.01 * REAGENTS_METABOLISM * rand(5,20) // randomizes metabolism between 0.02 and 0.08 per tick
- . = 1
+ . = TRUE
..()
/datum/reagent/medicine/modafinil/overdose_start(mob/living/M)
@@ -1272,5 +1252,4 @@
M.adjustOxyLoss(1.5*REM, 0)
M.adjustStaminaLoss(1.5*REM, 0)
..()
- . = 1
-
+ return TRUE
diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm
index 81818554ef..039f41a471 100644
--- a/code/modules/reagents/chemistry/reagents/other_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm
@@ -11,7 +11,7 @@
glass_desc = "Are you sure this is tomato juice?"
shot_glass_icon_state = "shotglassred"
-/datum/reagent/blood/reaction_mob(mob/M, method=TOUCH, reac_volume)
+/datum/reagent/blood/reaction_mob(mob/living/L, method=TOUCH, reac_volume)
if(data && data["viruses"])
for(var/thing in data["viruses"])
var/datum/disease/D = thing
@@ -19,15 +19,13 @@
if((D.spread_flags & DISEASE_SPREAD_SPECIAL) || (D.spread_flags & DISEASE_SPREAD_NON_CONTAGIOUS))
continue
- if(isliving(M))
- var/mob/living/L = M
- if((method == TOUCH || method == VAPOR) && (D.spread_flags & DISEASE_SPREAD_CONTACT_FLUIDS))
- L.ContactContractDisease(D)
- else //ingest, patch or inject
- L.ForceContractDisease(D)
+ if((method == TOUCH || method == VAPOR) && (D.spread_flags & DISEASE_SPREAD_CONTACT_FLUIDS))
+ L.ContactContractDisease(D)
+ else //ingest, patch or inject
+ L.ForceContractDisease(D)
- if(iscarbon(M))
- var/mob/living/carbon/C = M
+ if(iscarbon(L))
+ var/mob/living/carbon/C = L
if(C.get_blood_id() == "blood" && (method == INJECT || (method == INGEST && C.dna && C.dna.species && (DRINKSBLOOD in C.dna.species.species_traits))))
if(!data || !(data["blood_type"] in get_safe_blood(C.dna.blood_type)))
C.reagents.add_reagent("toxin", reac_volume * 0.5)
@@ -99,10 +97,7 @@
color = "#C81040" // rgb: 200, 16, 64
taste_description = "slime"
-/datum/reagent/vaccine/reaction_mob(mob/M, method=TOUCH, reac_volume)
- if(!isliving(M))
- return
- var/mob/living/L = M
+/datum/reagent/vaccine/reaction_mob(mob/living/L, method=TOUCH, reac_volume)
if(islist(data) && (method == INGEST || method == INJECT))
for(var/thing in L.diseases)
var/datum/disease/D = thing
@@ -195,16 +190,12 @@
glass_name = "glass of holy water"
glass_desc = "A glass of holy water."
-/datum/reagent/water/holywater/on_mob_add(mob/M)
+/datum/reagent/water/holywater/on_mob_add(mob/living/L)
..()
- if(isliving(M))
- var/mob/living/L = M
- L.add_trait(TRAIT_HOLY, id)
+ L.add_trait(TRAIT_HOLY, id)
-/datum/reagent/water/holywater/on_mob_delete(mob/M)
- if(isliving(M))
- var/mob/living/L = M
- L.remove_trait(TRAIT_HOLY, id)
+/datum/reagent/water/holywater/on_mob_delete(mob/living/L)
+ L.remove_trait(TRAIT_HOLY, id)
..()
/datum/reagent/water/holywater/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
@@ -212,7 +203,7 @@
to_chat(M, "A darkness begins to spread its unholy tendrils through your mind, purging the Justiciar's influence!")
..()
-/datum/reagent/water/holywater/on_mob_life(mob/living/M)
+/datum/reagent/water/holywater/on_mob_life(mob/living/carbon/M)
if(!data)
data = 1
data++
@@ -276,7 +267,7 @@
return
return ..()
-/datum/reagent/fuel/unholywater/on_mob_life(mob/living/M)
+/datum/reagent/fuel/unholywater/on_mob_life(mob/living/carbon/M)
if(iscultist(M))
M.drowsyness = max(M.drowsyness-5, 0)
M.AdjustUnconscious(-20, 0)
@@ -296,7 +287,7 @@
M.adjustOxyLoss(2, 0)
M.adjustBruteLoss(2, 0)
holder.remove_reagent(id, 1)
- . = 1
+ return TRUE
/datum/reagent/hellwater //if someone has this in their system they've really pissed off an eldrich god
name = "Hell Water"
@@ -304,13 +295,13 @@
description = "YOUR FLESH! IT BURNS!"
taste_description = "burning"
-/datum/reagent/hellwater/on_mob_life(mob/living/M)
+/datum/reagent/hellwater/on_mob_life(mob/living/carbon/M)
M.fire_stacks = min(5,M.fire_stacks + 3)
M.IgniteMob() //Only problem with igniting people is currently the commonly availible fire suits make you immune to being on fire
M.adjustToxLoss(1, 0)
M.adjustFireLoss(1, 0) //Hence the other damages... ain't I a bastard?
M.adjustBrainLoss(5, 150)
- holder.remove_reagent(src.id, 1)
+ holder.remove_reagent(id, 1)
/datum/reagent/medicine/omnizine/godblood
name = "Godblood"
@@ -620,10 +611,12 @@
taste_description = "slime"
/datum/reagent/mulligan/on_mob_life(mob/living/carbon/human/H)
+ ..()
+ if (!istype(H))
+ return
to_chat(H, "You grit your teeth in pain as your body rapidly mutates!")
H.visible_message("[H] suddenly transforms!")
randomize_human(H)
- ..()
/datum/reagent/aslimetoxin
name = "Advanced Mutation Toxin"
@@ -632,10 +625,7 @@
color = "#13BC5E" // rgb: 19, 188, 94
taste_description = "slime"
-/datum/reagent/aslimetoxin/reaction_mob(mob/M, method=TOUCH, reac_volume)
- if(!isliving(M))
- return
- var/mob/living/L = M
+/datum/reagent/aslimetoxin/reaction_mob(mob/living/L, method=TOUCH, reac_volume)
if(method != TOUCH)
L.ForceContractDisease(new /datum/disease/transformation/slime(), FALSE, TRUE)
@@ -647,10 +637,7 @@
can_synth = FALSE
taste_description = "decay"
-/datum/reagent/gluttonytoxin/reaction_mob(mob/M, method=TOUCH, reac_volume)
- if(!isliving(M))
- return
- var/mob/living/L = M
+/datum/reagent/gluttonytoxin/reaction_mob(mob/living/L, method=TOUCH, reac_volume)
L.ForceContractDisease(new /datum/disease/transformation/morph(), FALSE, TRUE)
/datum/reagent/serotrotium
@@ -661,7 +648,7 @@
metabolization_rate = 0.25 * REAGENTS_METABOLISM
taste_description = "bitterness"
-/datum/reagent/serotrotium/on_mob_life(mob/living/M)
+/datum/reagent/serotrotium/on_mob_life(mob/living/carbon/M)
if(ishuman(M))
if(prob(7))
M.emote(pick("twitch","drool","moan","gasp"))
@@ -745,7 +732,7 @@
color = "#484848" // rgb: 72, 72, 72A
taste_mult = 0 // apparently tasteless.
-/datum/reagent/mercury/on_mob_life(mob/living/M)
+/datum/reagent/mercury/on_mob_life(mob/living/carbon/M)
if(M.canmove && !isspaceturf(M.loc))
step(M, pick(GLOB.cardinals))
if(prob(5))
@@ -783,7 +770,7 @@
color = "#808080" // rgb: 128, 128, 128
taste_description = "chlorine"
-/datum/reagent/chlorine/on_mob_life(mob/living/M)
+/datum/reagent/chlorine/on_mob_life(mob/living/carbon/M)
M.take_bodypart_damage(1*REM, 0, 0, 0)
. = 1
..()
@@ -796,7 +783,7 @@
color = "#808080" // rgb: 128, 128, 128
taste_description = "acid"
-/datum/reagent/fluorine/on_mob_life(mob/living/M)
+/datum/reagent/fluorine/on_mob_life(mob/living/carbon/M)
M.adjustToxLoss(1*REM, 0)
. = 1
..()
@@ -825,7 +812,7 @@
color = "#808080" // rgb: 128, 128, 128
taste_description = "metal"
-/datum/reagent/lithium/on_mob_life(mob/living/M)
+/datum/reagent/lithium/on_mob_life(mob/living/carbon/M)
if(M.canmove && !isspaceturf(M.loc))
step(M, pick(GLOB.cardinals))
if(prob(5))
@@ -847,7 +834,7 @@
color = "#C7C7C7" // rgb: 199,199,199
taste_description = "the colour blue and regret"
-/datum/reagent/radium/on_mob_life(mob/living/M)
+/datum/reagent/radium/on_mob_life(mob/living/carbon/M)
M.apply_effect(2*REM/M.metabolism_efficiency,EFFECT_IRRADIATE,0)
..()
@@ -866,9 +853,8 @@
color = "#C8A5DC" // rgb: 200, 165, 220
taste_description = "bitterness"
-/datum/reagent/space_cleaner/sterilizine/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
- if(iscarbon(M) && (method in list(TOUCH, VAPOR, PATCH)))
- var/mob/living/carbon/C = M
+/datum/reagent/space_cleaner/sterilizine/reaction_mob(mob/living/carbon/C, method=TOUCH, reac_volume)
+ if(method in list(TOUCH, VAPOR, PATCH))
for(var/s in C.surgeries)
var/datum/surgery/S = s
S.success_multiplier = max(0.2, S.success_multiplier)
@@ -884,16 +870,12 @@
color = "#C8A5DC" // rgb: 200, 165, 220
-/datum/reagent/iron/on_mob_life(mob/living/M)
- if(iscarbon(M))
- var/mob/living/carbon/C = M
- if(C.blood_volume < BLOOD_VOLUME_NORMAL)
- C.blood_volume += 0.5
+/datum/reagent/iron/on_mob_life(mob/living/carbon/C)
+ if(C.blood_volume < BLOOD_VOLUME_NORMAL)
+ C.blood_volume += 0.5
..()
/datum/reagent/iron/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
- if(!isliving(M))
- return
if(M.has_bane(BANE_IRON)) //If the target is weak to cold iron, then poison them.
if(holder && holder.chem_temp < 100) // COLD iron.
M.reagents.add_reagent("toxin", reac_volume)
@@ -916,8 +898,6 @@
taste_description = "expensive yet reasonable metal"
/datum/reagent/silver/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
- if(!isliving(M))
- return
if(M.has_bane(BANE_SILVER))
M.reagents.add_reagent("toxin", reac_volume)
..()
@@ -930,7 +910,7 @@
color = "#B8B8C0" // rgb: 184, 184, 192
taste_description = "the inside of a reactor"
-/datum/reagent/uranium/on_mob_life(mob/living/M)
+/datum/reagent/uranium/on_mob_life(mob/living/carbon/M)
M.apply_effect(1/M.metabolism_efficiency,EFFECT_IRRADIATE,0)
..()
@@ -955,7 +935,7 @@
do_teleport(M, get_turf(M), (reac_volume / 5), asoundin = 'sound/effects/phasein.ogg') //4 tiles per crystal
..()
-/datum/reagent/bluespace/on_mob_life(mob/living/M)
+/datum/reagent/bluespace/on_mob_life(mob/living/carbon/M)
if(current_cycle > 10 && prob(15))
to_chat(M, "You feel unstable...")
M.Jitter(2)
@@ -993,17 +973,15 @@
glass_desc = "Unless you're an industrial tool, this is probably not safe for consumption."
/datum/reagent/fuel/reaction_mob(mob/living/M, method=TOUCH, reac_volume)//Splashing people with welding fuel to make them easy to ignite!
- if(!isliving(M))
- return
if(method == TOUCH || method == VAPOR)
M.adjust_fire_stacks(reac_volume / 10)
return
..()
-/datum/reagent/fuel/on_mob_life(mob/living/M)
+/datum/reagent/fuel/on_mob_life(mob/living/carbon/M)
M.adjustToxLoss(1, 0)
- . = 1
..()
+ return TRUE
/datum/reagent/space_cleaner
name = "Space cleaner"
@@ -1018,19 +996,19 @@
else
if(O)
O.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
- O.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)
+ SEND_SIGNAL(O, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)
/datum/reagent/space_cleaner/reaction_turf(turf/T, reac_volume)
if(reac_volume >= 1)
T.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
- T.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)
+ SEND_SIGNAL(T, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)
for(var/obj/effect/decal/cleanable/C in T)
qdel(C)
for(var/mob/living/simple_animal/slime/M in T)
M.adjustToxLoss(rand(5,10))
-/datum/reagent/space_cleaner/reaction_mob(mob/M, method=TOUCH, reac_volume)
+/datum/reagent/space_cleaner/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
if(method == TOUCH || method == VAPOR)
M.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
if(iscarbon(M))
@@ -1041,26 +1019,26 @@
H.lip_style = null
H.update_body()
for(var/obj/item/I in C.held_items)
- I.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)
+ SEND_SIGNAL(I, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)
if(C.wear_mask)
- if(C.wear_mask.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD))
+ if(SEND_SIGNAL(C.wear_mask, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD))
C.update_inv_wear_mask()
if(ishuman(M))
var/mob/living/carbon/human/H = C
if(H.head)
- if(H.head.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD))
+ if(SEND_SIGNAL(H.head, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD))
H.update_inv_head()
if(H.wear_suit)
- if(H.wear_suit.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD))
+ if(SEND_SIGNAL(H.wear_suit, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD))
H.update_inv_wear_suit()
else if(H.w_uniform)
- if(H.w_uniform.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD))
+ if(SEND_SIGNAL(H.w_uniform, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD))
H.update_inv_w_uniform()
if(H.shoes)
- if(H.shoes.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD))
+ if(SEND_SIGNAL(H.shoes, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD))
H.update_inv_shoes()
H.wash_cream()
- M.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)
+ SEND_SIGNAL(M, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)
/datum/reagent/space_cleaner/ez_clean
name = "EZ Clean"
@@ -1069,7 +1047,7 @@
metabolization_rate = 1.5 * REAGENTS_METABOLISM
taste_description = "acid"
-/datum/reagent/space_cleaner/ez_clean/on_mob_life(mob/living/M)
+/datum/reagent/space_cleaner/ez_clean/on_mob_life(mob/living/carbon/M)
M.adjustBruteLoss(3.33)
M.adjustFireLoss(3.33)
M.adjustToxLoss(3.33)
@@ -1089,7 +1067,7 @@
metabolization_rate = 1.5 * REAGENTS_METABOLISM
taste_description = "sourness"
-/datum/reagent/cryptobiolin/on_mob_life(mob/living/M)
+/datum/reagent/cryptobiolin/on_mob_life(mob/living/carbon/M)
M.Dizzy(1)
if(!M.confused)
M.confused = 1
@@ -1103,7 +1081,7 @@
color = "#C8A5DC" // rgb: 200, 165, 220A
taste_description = "numbness"
-/datum/reagent/impedrezene/on_mob_life(mob/living/M)
+/datum/reagent/impedrezene/on_mob_life(mob/living/carbon/M)
M.jitteriness = max(M.jitteriness-5,0)
if(prob(80))
M.adjustBrainLoss(2*REM)
@@ -1121,10 +1099,7 @@
can_synth = FALSE
taste_description = "sludge"
-/datum/reagent/nanites/reaction_mob(mob/M, method=TOUCH, reac_volume, show_message = 1, touch_protection = 0)
- if(!isliving(M))
- return
- var/mob/living/L = M
+/datum/reagent/nanites/reaction_mob(mob/living/L, method=TOUCH, reac_volume, show_message = 1, touch_protection = 0)
if(method==PATCH || method==INGEST || method==INJECT || (method == VAPOR && prob(min(reac_volume,100)*(1 - touch_protection))))
L.ForceContractDisease(new /datum/disease/transformation/robot(), FALSE, TRUE)
@@ -1136,10 +1111,7 @@
can_synth = FALSE
taste_description = "sludge"
-/datum/reagent/xenomicrobes/reaction_mob(mob/M, method=TOUCH, reac_volume, show_message = 1, touch_protection = 0)
- if(!isliving(M))
- return
- var/mob/living/L = M
+/datum/reagent/xenomicrobes/reaction_mob(mob/living/L, method=TOUCH, reac_volume, show_message = 1, touch_protection = 0)
if(method==PATCH || method==INGEST || method==INJECT || (method == VAPOR && prob(min(reac_volume,100)*(1 - touch_protection))))
L.ForceContractDisease(new /datum/disease/transformation/xeno(), FALSE, TRUE)
@@ -1151,10 +1123,7 @@
can_synth = FALSE
taste_description = "slime"
-/datum/reagent/fungalspores/reaction_mob(mob/M, method=TOUCH, reac_volume, show_message = 1, touch_protection = 0)
- if(!isliving(M))
- return
- var/mob/living/L = M
+/datum/reagent/fungalspores/reaction_mob(mob/living/L, method=TOUCH, reac_volume, show_message = 1, touch_protection = 0)
if(method==PATCH || method==INGEST || method==INJECT || (method == VAPOR && prob(min(reac_volume,100)*(1 - touch_protection))))
L.ForceContractDisease(new /datum/disease/tuberculosis(), FALSE, TRUE)
@@ -1236,11 +1205,11 @@
var/temp = holder ? holder.chem_temp : T20C
T.atmos_spawn_air("n2o=[reac_volume/5];TEMP=[temp]")
-/datum/reagent/nitrous_oxide/reaction_mob(mob/M, method=TOUCH, reac_volume)
+/datum/reagent/nitrous_oxide/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
if(method == VAPOR)
M.drowsyness += max(round(reac_volume, 1), 2)
-/datum/reagent/nitrous_oxide/on_mob_life(mob/living/M)
+/datum/reagent/nitrous_oxide/on_mob_life(mob/living/carbon/M)
M.drowsyness += 2
if(ishuman(M))
var/mob/living/carbon/human/H = M
@@ -1259,19 +1228,15 @@
color = "E1A116"
taste_description = "sourness"
-/datum/reagent/stimulum/on_mob_add(mob/M)
+/datum/reagent/stimulum/on_mob_add(mob/living/L)
..()
- if(isliving(M))
- var/mob/living/L = M
- L.add_trait(TRAIT_GOTTAGOFAST, id)
+ L.add_trait(TRAIT_GOTTAGOFAST, id)
-/datum/reagent/stimulum/on_mob_delete(mob/M)
- if(isliving(M))
- var/mob/living/L = M
- L.remove_trait(TRAIT_GOTTAGOFAST, id)
+/datum/reagent/stimulum/on_mob_delete(mob/living/L)
+ L.remove_trait(TRAIT_GOTTAGOFAST, id)
..()
-/datum/reagent/stimulum/on_mob_life(mob/living/M) // Has a speedup, and the anti-stun effects of nicotine.
+/datum/reagent/stimulum/on_mob_life(mob/living/carbon/M) // Has a speedup, and the anti-stun effects of nicotine.
M.AdjustStun(-20, 0)
M.AdjustKnockdown(-20, 0)
M.AdjustUnconscious(-20, 0)
@@ -1289,16 +1254,12 @@
color = "90560B"
taste_description = "burning"
-/datum/reagent/nitryl/on_mob_add(mob/M)
+/datum/reagent/nitryl/on_mob_add(mob/living/L)
..()
- if(isliving(M))
- var/mob/living/L = M
- L.add_trait(TRAIT_GOTTAGOFAST, id)
+ L.add_trait(TRAIT_GOTTAGOFAST, id)
-/datum/reagent/nitryl/on_mob_delete(mob/M)
- if(isliving(M))
- var/mob/living/L = M
- L.remove_trait(TRAIT_GOTTAGOFAST, id)
+/datum/reagent/nitryl/on_mob_delete(mob/living/L)
+ L.remove_trait(TRAIT_GOTTAGOFAST, id)
..()
/////////////////////////Coloured Crayon Powder////////////////////////////
@@ -1394,7 +1355,7 @@
var/tox_prob = 0
taste_description = "plant food"
-/datum/reagent/plantnutriment/on_mob_life(mob/living/M)
+/datum/reagent/plantnutriment/on_mob_life(mob/living/carbon/M)
if(prob(tox_prob))
M.adjustToxLoss(1*REM, 0)
. = 1
@@ -1448,12 +1409,9 @@
taste_description = "bitterness"
taste_mult = 1.5
-/datum/reagent/stable_plasma/on_mob_life(mob/living/M)
- if(iscarbon(M))
- var/mob/living/carbon/C = M
- C.adjustPlasma(10)
+/datum/reagent/stable_plasma/on_mob_life(mob/living/carbon/C)
+ C.adjustPlasma(10)
..()
- return
/datum/reagent/iodine
name = "Iodine"
@@ -1476,7 +1434,6 @@
var/turf/open/floor/F = T
F.PlaceOnTop(/turf/open/floor/carpet)
..()
- return
/datum/reagent/bromine
name = "Bromine"
@@ -1520,14 +1477,12 @@
taste_description = "rainbows"
-/datum/reagent/colorful_reagent/on_mob_life(mob/living/M)
- if(M && isliving(M))
- M.add_atom_colour(pick(random_color_list), WASHABLE_COLOUR_PRIORITY)
+/datum/reagent/colorful_reagent/on_mob_life(mob/living/carbon/M)
+ M.add_atom_colour(pick(random_color_list), WASHABLE_COLOUR_PRIORITY)
..()
/datum/reagent/colorful_reagent/reaction_mob(mob/living/M, reac_volume)
- if(M && isliving(M))
- M.add_atom_colour(pick(random_color_list), WASHABLE_COLOUR_PRIORITY)
+ M.add_atom_colour(pick(random_color_list), WASHABLE_COLOUR_PRIORITY)
..()
/datum/reagent/colorful_reagent/reaction_obj(obj/O, reac_volume)
@@ -1686,7 +1641,7 @@
color = "#00ff80"
taste_description = "strange honey"
-/datum/reagent/royal_bee_jelly/on_mob_life(mob/living/M)
+/datum/reagent/royal_bee_jelly/on_mob_life(mob/living/carbon/M)
if(prob(2))
M.say(pick("Bzzz...","BZZ BZZ","Bzzzzzzzzzzz..."))
..()
@@ -1807,16 +1762,12 @@
taste_description = "water"
metabolization_rate = 0.25 * REAGENTS_METABOLISM
-/datum/reagent/pax/on_mob_add(mob/M)
+/datum/reagent/pax/on_mob_add(mob/living/L)
..()
- if(isliving(M))
- var/mob/living/L = M
- L.add_trait(TRAIT_PACIFISM, id)
+ L.add_trait(TRAIT_PACIFISM, id)
-/datum/reagent/pax/on_mob_delete(mob/M)
- if(isliving(M))
- var/mob/living/L = M
- L.remove_trait(TRAIT_PACIFISM, id)
+/datum/reagent/pax/on_mob_delete(mob/living/L)
+ L.remove_trait(TRAIT_PACIFISM, id)
..()
/datum/reagent/bz_metabolites
@@ -1855,7 +1806,7 @@
metabolization_rate = 1.5 * REAGENTS_METABOLISM
taste_description = "dizziness"
-/datum/reagent/peaceborg/confuse/on_mob_life(mob/living/M)
+/datum/reagent/peaceborg/confuse/on_mob_life(mob/living/carbon/M)
if(M.confused < 6)
M.confused = CLAMP(M.confused + 3, 0, 5)
if(M.dizziness < 6)
@@ -1871,7 +1822,7 @@
metabolization_rate = 1.5 * REAGENTS_METABOLISM
taste_description = "tiredness"
-/datum/reagent/peaceborg/tire/on_mob_life(mob/living/M)
+/datum/reagent/peaceborg/tire/on_mob_life(mob/living/carbon/M)
var/healthcomp = (100 - M.health) //DOES NOT ACCOUNT FOR ADMINBUS THINGS THAT MAKE YOU HAVE MORE THAN 200/210 HEALTH, OR SOMETHING OTHER THAN A HUMAN PROCESSING THIS.
if(M.getStaminaLoss() < (45 - healthcomp)) //At 50 health you would have 200 - 150 health meaning 50 compensation. 60 - 50 = 10, so would only do 10-19 stamina.)
M.adjustStaminaLoss(10)
diff --git a/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm b/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm
index 07f19a8462..90cb732a1f 100644
--- a/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm
@@ -11,10 +11,10 @@
if(reac_volume >= 1)
T.AddComponent(/datum/component/thermite, reac_volume)
-/datum/reagent/thermite/on_mob_life(mob/living/M)
+/datum/reagent/thermite/on_mob_life(mob/living/carbon/M)
M.adjustFireLoss(1, 0)
..()
- . = 1
+ return TRUE
/datum/reagent/nitroglycerin
name = "Nitroglycerin"
@@ -40,12 +40,12 @@
metabolization_rate = 4
taste_description = "burning"
-/datum/reagent/clf3/on_mob_life(mob/living/M)
+/datum/reagent/clf3/on_mob_life(mob/living/carbon/M)
M.adjust_fire_stacks(2)
var/burndmg = max(0.3*M.fire_stacks, 0.3)
M.adjustFireLoss(burndmg, 0)
..()
- . = 1
+ return TRUE
/datum/reagent/clf3/reaction_turf(turf/T, reac_volume)
if(isplatingturf(T))
@@ -100,7 +100,7 @@
metabolization_rate = 0.05
taste_description = "salt"
-/datum/reagent/blackpowder/on_mob_life(mob/living/M)
+/datum/reagent/blackpowder/on_mob_life(mob/living/carbon/M)
..()
if(isplasmaman(M))
M.hallucination += 5
@@ -151,12 +151,12 @@
M.IgniteMob()
..()
-/datum/reagent/phlogiston/on_mob_life(mob/living/M)
+/datum/reagent/phlogiston/on_mob_life(mob/living/carbon/M)
M.adjust_fire_stacks(1)
var/burndmg = max(0.3*M.fire_stacks, 0.3)
M.adjustFireLoss(burndmg, 0)
..()
- . = 1
+ return TRUE
/datum/reagent/napalm
name = "Napalm"
@@ -166,7 +166,7 @@
color = "#FA00AF"
taste_description = "burning"
-/datum/reagent/napalm/on_mob_life(mob/living/M)
+/datum/reagent/napalm/on_mob_life(mob/living/carbon/M)
M.adjust_fire_stacks(1)
..()
@@ -184,7 +184,7 @@
taste_description = "bitterness"
-/datum/reagent/cryostylane/on_mob_life(mob/living/M) //TODO: code freezing into an ice cube
+/datum/reagent/cryostylane/on_mob_life(mob/living/carbon/M) //TODO: code freezing into an ice cube
if(M.reagents.has_reagent("oxygen"))
M.reagents.remove_reagent("oxygen", 0.5)
M.adjust_bodytemperature(-15)
@@ -203,7 +203,7 @@
metabolization_rate = 0.5 * REAGENTS_METABOLISM
taste_description = "bitterness"
-/datum/reagent/pyrosium/on_mob_life(mob/living/M)
+/datum/reagent/pyrosium/on_mob_life(mob/living/carbon/M)
if(M.reagents.has_reagent("oxygen"))
M.reagents.remove_reagent("oxygen", 0.5)
M.adjust_bodytemperature(15)
@@ -219,7 +219,7 @@
taste_description = "charged metal"
var/shock_timer = 0
-/datum/reagent/teslium/on_mob_life(mob/living/M)
+/datum/reagent/teslium/on_mob_life(mob/living/carbon/M)
shock_timer++
if(shock_timer >= rand(5,30)) //Random shocks are wildly unpredictable
shock_timer = 0
@@ -235,7 +235,7 @@
color = "#CAFF43"
taste_description = "jelly"
-/datum/reagent/teslium/energized_jelly/on_mob_life(mob/living/M)
+/datum/reagent/teslium/energized_jelly/on_mob_life(mob/living/carbon/M)
if(isjellyperson(M))
shock_timer = 0 //immune to shocks
M.AdjustStun(-40, 0)
@@ -280,9 +280,7 @@
O.extinguish()
/datum/reagent/firefighting_foam/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
- if(!istype(M))
- return
if(method in list(VAPOR, TOUCH))
M.adjust_fire_stacks(-reac_volume)
M.ExtinguishMob()
- ..()
\ No newline at end of file
+ ..()
diff --git a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm
index 74ef9167c9..0700aeb799 100644
--- a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm
@@ -10,10 +10,10 @@
taste_mult = 1.2
var/toxpwr = 1.5
-/datum/reagent/toxin/on_mob_life(mob/living/M)
+/datum/reagent/toxin/on_mob_life(mob/living/carbon/M)
if(toxpwr)
M.adjustToxLoss(toxpwr*REM, 0)
- . = 1
+ . = TRUE
..()
/datum/reagent/toxin/amatoxin
@@ -48,9 +48,8 @@
M.domutcheck()
..()
-/datum/reagent/toxin/mutagen/on_mob_life(mob/living/carbon/M)
- if(istype(M))
- M.apply_effect(5,EFFECT_IRRADIATE,0)
+/datum/reagent/toxin/mutagen/on_mob_life(mob/living/carbon/C)
+ C.apply_effect(5,EFFECT_IRRADIATE,0)
return ..()
/datum/reagent/toxin/plasma
@@ -58,16 +57,15 @@
id = "plasma"
description = "Plasma in its liquid form."
taste_description = "bitterness"
+ specific_heat = SPECIFIC_HEAT_PLASMA
taste_mult = 1.5
color = "#8228A0"
toxpwr = 3
-/datum/reagent/toxin/plasma/on_mob_life(mob/living/M)
+/datum/reagent/toxin/plasma/on_mob_life(mob/living/carbon/C)
if(holder.has_reagent("epinephrine"))
holder.remove_reagent("epinephrine", 2*REM)
- if(iscarbon(M))
- var/mob/living/carbon/C = M
- C.adjustPlasma(20)
+ C.adjustPlasma(20)
return ..()
/datum/reagent/toxin/plasma/reaction_obj(obj/O, reac_volume)
@@ -83,8 +81,6 @@
return
/datum/reagent/toxin/plasma/reaction_mob(mob/living/M, method=TOUCH, reac_volume)//Splashing people with plasma is stronger than fuel!
- if(!isliving(M))
- return
if(method == TOUCH || method == VAPOR)
M.adjust_fire_stacks(reac_volume / 5)
return
@@ -98,19 +94,17 @@
toxpwr = 0
taste_description = "acid"
-/datum/reagent/toxin/lexorin/on_mob_life(mob/living/M)
+/datum/reagent/toxin/lexorin/on_mob_life(mob/living/carbon/C)
. = TRUE
- if(M.has_trait(TRAIT_NOBREATH))
+ if(C.has_trait(TRAIT_NOBREATH))
. = FALSE
if(.)
- M.adjustOxyLoss(5, 0)
- if(iscarbon(M))
- var/mob/living/carbon/C = M
- C.losebreath += 2
+ C.adjustOxyLoss(5, 0)
+ C.losebreath += 2
if(prob(20))
- M.emote("gasp")
+ C.emote("gasp")
..()
/datum/reagent/toxin/slimejelly
@@ -122,7 +116,7 @@
taste_description = "slime"
taste_mult = 1.3
-/datum/reagent/toxin/slimejelly/on_mob_life(mob/living/M)
+/datum/reagent/toxin/slimejelly/on_mob_life(mob/living/carbon/M)
if(prob(10))
to_chat(M, "Your insides are burning!")
M.adjustToxLoss(rand(20,60)*REM, 0)
@@ -140,7 +134,7 @@
toxpwr = 0
taste_description = "mint"
-/datum/reagent/toxin/minttoxin/on_mob_life(mob/living/M)
+/datum/reagent/toxin/minttoxin/on_mob_life(mob/living/carbon/M)
if(M.has_trait(TRAIT_FAT))
M.gib()
return ..()
@@ -162,16 +156,12 @@
toxpwr = 0.5
taste_description = "death"
-/datum/reagent/toxin/zombiepowder/on_mob_add(mob/M)
+/datum/reagent/toxin/zombiepowder/on_mob_add(mob/living/L)
..()
- if(isliving(M))
- var/mob/living/L = M
- L.fakedeath(id)
+ L.fakedeath(id)
-/datum/reagent/toxin/zombiepowder/on_mob_delete(mob/M)
- if(isliving(M))
- var/mob/living/L = M
- L.cure_fakedeath(id)
+/datum/reagent/toxin/zombiepowder/on_mob_delete(mob/living/L)
+ L.cure_fakedeath(id)
..()
/datum/reagent/toxin/zombiepowder/on_mob_life(mob/living/carbon/M)
@@ -187,7 +177,7 @@
toxpwr = 0
taste_description = "sourness"
-/datum/reagent/toxin/mindbreaker/on_mob_life(mob/living/M)
+/datum/reagent/toxin/mindbreaker/on_mob_life(mob/living/carbon/M)
M.hallucination += 5
return ..()
@@ -243,12 +233,10 @@
color = "#9ACD32"
toxpwr = 1
-/datum/reagent/toxin/spore/on_mob_life(mob/living/M)
- if(iscarbon(M))
- var/mob/living/carbon/C = M
- C.damageoverlaytemp = 60
- C.update_damage_hud()
- M.blur_eyes(3)
+/datum/reagent/toxin/spore/on_mob_life(mob/living/carbon/C)
+ C.damageoverlaytemp = 60
+ C.update_damage_hud()
+ C.blur_eyes(3)
return ..()
/datum/reagent/toxin/spore_burning
@@ -259,7 +247,7 @@
toxpwr = 0.5
taste_description = "burning"
-/datum/reagent/toxin/spore_burning/on_mob_life(mob/living/M)
+/datum/reagent/toxin/spore_burning/on_mob_life(mob/living/carbon/M)
M.adjust_fire_stacks(2)
M.IgniteMob()
return ..()
@@ -273,7 +261,7 @@
toxpwr = 0
metabolization_rate = 1.5 * REAGENTS_METABOLISM
-/datum/reagent/toxin/chloralhydrate/on_mob_life(mob/living/M)
+/datum/reagent/toxin/chloralhydrate/on_mob_life(mob/living/carbon/M)
switch(current_cycle)
if(1 to 10)
M.confused += 2
@@ -296,7 +284,7 @@
toxpwr = 0
metabolization_rate = 1.5 * REAGENTS_METABOLISM
-/datum/reagent/toxin/chloralhydratedelayed/on_mob_life(mob/living/M)
+/datum/reagent/toxin/chloralhydratedelayed/on_mob_life(mob/living/carbon/M)
switch(current_cycle)
if(10 to 20)
M.confused += 1
@@ -316,7 +304,7 @@
glass_name = "glass of beer"
glass_desc = "A freezing pint of beer."
-/datum/reagent/toxin/fakebeer/on_mob_life(mob/living/M)
+/datum/reagent/toxin/fakebeer/on_mob_life(mob/living/carbon/M)
switch(current_cycle)
if(1 to 50)
M.Sleeping(40, 0)
@@ -376,7 +364,7 @@
metabolization_rate = 0.125 * REAGENTS_METABOLISM
toxpwr = 0
-/datum/reagent/toxin/polonium/on_mob_life(mob/living/M)
+/datum/reagent/toxin/polonium/on_mob_life(mob/living/carbon/M)
M.radiation += 4
..()
@@ -390,7 +378,7 @@
overdose_threshold = 30
toxpwr = 0
-/datum/reagent/toxin/histamine/on_mob_life(mob/living/M)
+/datum/reagent/toxin/histamine/on_mob_life(mob/living/carbon/M)
if(prob(50))
switch(pick(1, 2, 3, 4))
if(1)
@@ -423,7 +411,7 @@
metabolization_rate = 0.5 * REAGENTS_METABOLISM
toxpwr = 1
-/datum/reagent/toxin/formaldehyde/on_mob_life(mob/living/M)
+/datum/reagent/toxin/formaldehyde/on_mob_life(mob/living/carbon/M)
if(prob(5))
holder.add_reagent("histamine", pick(5,15))
holder.remove_reagent("formaldehyde", 1.2)
@@ -439,7 +427,7 @@
metabolization_rate = 0.25 * REAGENTS_METABOLISM
toxpwr = 0
-/datum/reagent/toxin/venom/on_mob_life(mob/living/M)
+/datum/reagent/toxin/venom/on_mob_life(mob/living/carbon/M)
toxpwr = 0.2*volume
M.adjustBruteLoss((0.3*volume)*REM, 0)
. = 1
@@ -458,14 +446,14 @@
metabolization_rate = 0.5 * REAGENTS_METABOLISM
toxpwr = 0
-/datum/reagent/toxin/fentanyl/on_mob_life(mob/living/M)
+/datum/reagent/toxin/fentanyl/on_mob_life(mob/living/carbon/M)
M.adjustBrainLoss(3*REM, 150)
- . = 1
if(M.toxloss <= 60)
M.adjustToxLoss(1*REM, 0)
if(current_cycle >= 18)
M.Sleeping(40, 0)
..()
+ return TRUE
/datum/reagent/toxin/cyanide
name = "Cyanide"
@@ -476,7 +464,7 @@
metabolization_rate = 0.125 * REAGENTS_METABOLISM
toxpwr = 1.25
-/datum/reagent/toxin/cyanide/on_mob_life(mob/living/M)
+/datum/reagent/toxin/cyanide/on_mob_life(mob/living/carbon/M)
if(prob(5))
M.losebreath += 1
if(prob(8))
@@ -508,7 +496,7 @@
if(method == TOUCH || method == VAPOR)
M.reagents.add_reagent("itching_powder", reac_volume)
-/datum/reagent/toxin/itching_powder/on_mob_life(mob/living/M)
+/datum/reagent/toxin/itching_powder/on_mob_life(mob/living/carbon/M)
if(prob(15))
to_chat(M, "You scratch at your head.")
M.adjustBruteLoss(0.2*REM, 0)
@@ -536,28 +524,26 @@
metabolization_rate = 0.5 * REAGENTS_METABOLISM
toxpwr = 2.5
-/datum/reagent/toxin/initropidril/on_mob_life(mob/living/M)
+/datum/reagent/toxin/initropidril/on_mob_life(mob/living/carbon/C)
if(prob(25))
var/picked_option = rand(1,3)
switch(picked_option)
if(1)
- M.Knockdown(60, 0)
- . = 1
+ C.Knockdown(60, 0)
+ . = TRUE
if(2)
- M.losebreath += 10
- M.adjustOxyLoss(rand(5,25), 0)
- . = 1
+ C.losebreath += 10
+ C.adjustOxyLoss(rand(5,25), 0)
+ . = TRUE
if(3)
- if(ishuman(M))
- var/mob/living/carbon/human/H = M
- if(!H.undergoing_cardiac_arrest() && H.can_heartattack())
- H.set_heartattack(TRUE)
- if(H.stat == CONSCIOUS)
- H.visible_message("[H] clutches at [H.p_their()] chest as if [H.p_their()] heart stopped!")
- else
- H.losebreath += 10
- H.adjustOxyLoss(rand(5,25), 0)
- . = 1
+ if(!C.undergoing_cardiac_arrest() && C.can_heartattack())
+ C.set_heartattack(TRUE)
+ if(C.stat == CONSCIOUS)
+ C.visible_message("[C] clutches at [C.p_their()] chest as if [C.p_their()] heart stopped!")
+ else
+ C.losebreath += 10
+ C.adjustOxyLoss(rand(5,25), 0)
+ . = TRUE
return ..() || .
/datum/reagent/toxin/pancuronium
@@ -570,10 +556,10 @@
toxpwr = 0
taste_mult = 0 // undetectable, I guess?
-/datum/reagent/toxin/pancuronium/on_mob_life(mob/living/M)
+/datum/reagent/toxin/pancuronium/on_mob_life(mob/living/carbon/M)
if(current_cycle >= 10)
M.Stun(40, 0)
- . = 1
+ . = TRUE
if(prob(20))
M.losebreath += 4
..()
@@ -587,12 +573,12 @@
metabolization_rate = 0.75 * REAGENTS_METABOLISM
toxpwr = 0
-/datum/reagent/toxin/sodium_thiopental/on_mob_life(mob/living/M)
+/datum/reagent/toxin/sodium_thiopental/on_mob_life(mob/living/carbon/M)
if(current_cycle >= 10)
M.Sleeping(40, 0)
M.adjustStaminaLoss(10*REM, 0)
..()
- . = 1
+ return TRUE
/datum/reagent/toxin/sulfonal
name = "Sulfonal"
@@ -603,7 +589,7 @@
metabolization_rate = 0.125 * REAGENTS_METABOLISM
toxpwr = 0.5
-/datum/reagent/toxin/sulfonal/on_mob_life(mob/living/M)
+/datum/reagent/toxin/sulfonal/on_mob_life(mob/living/carbon/M)
if(current_cycle >= 22)
M.Sleeping(40, 0)
return ..()
@@ -633,7 +619,7 @@
metabolization_rate = 0.5 * REAGENTS_METABOLISM
toxpwr = 0
-/datum/reagent/toxin/lipolicide/on_mob_life(mob/living/M)
+/datum/reagent/toxin/lipolicide/on_mob_life(mob/living/carbon/M)
if(M.nutrition <= NUTRITION_LEVEL_STARVING)
M.adjustToxLoss(1*REM, 0)
M.nutrition = max(M.nutrition - 3, 0) // making the chef more valuable, one meme trap at a time
@@ -649,7 +635,7 @@
metabolization_rate = 0.06 * REAGENTS_METABOLISM
toxpwr = 1.75
-/datum/reagent/toxin/coniine/on_mob_life(mob/living/M)
+/datum/reagent/toxin/coniine/on_mob_life(mob/living/carbon/M)
M.losebreath += 5
return ..()
@@ -664,22 +650,20 @@
toxpwr = 0
taste_description = "vomit"
-/datum/reagent/toxin/spewium/on_mob_life(mob/living/M)
+/datum/reagent/toxin/spewium/on_mob_life(mob/living/carbon/C)
.=..()
- if(current_cycle >=11 && prob(min(50,current_cycle)) && ishuman(M))
- var/mob/living/carbon/human/H = M
- H.vomit(10, prob(10), prob(50), rand(0,4), TRUE, prob(30))
- for(var/datum/reagent/toxin/R in M.reagents.reagent_list)
+ if(current_cycle >=11 && prob(min(50,current_cycle)))
+ C.vomit(10, prob(10), prob(50), rand(0,4), TRUE, prob(30))
+ for(var/datum/reagent/toxin/R in C.reagents.reagent_list)
if(R != src)
- H.reagents.remove_reagent(R.id,1)
+ C.reagents.remove_reagent(R.id,1)
-/datum/reagent/toxin/spewium/overdose_process(mob/living/M)
+/datum/reagent/toxin/spewium/overdose_process(mob/living/carbon/C)
. = ..()
- if(current_cycle >=33 && prob(15) && ishuman(M))
- var/mob/living/carbon/human/H = M
- H.spew_organ()
- H.vomit(0, TRUE, TRUE, 4)
- to_chat(H, "You feel something lumpy come up as you vomit.")
+ if(current_cycle >=33 && prob(15))
+ C.spew_organ()
+ C.vomit(0, TRUE, TRUE, 4)
+ to_chat(C, "You feel something lumpy come up as you vomit.")
/datum/reagent/toxin/curare
name = "Curare"
@@ -690,7 +674,7 @@
metabolization_rate = 0.125 * REAGENTS_METABOLISM
toxpwr = 1
-/datum/reagent/toxin/curare/on_mob_life(mob/living/M)
+/datum/reagent/toxin/curare/on_mob_life(mob/living/carbon/M)
if(current_cycle >= 11)
M.Knockdown(60, 0)
M.adjustOxyLoss(1*REM, 0)
@@ -706,7 +690,7 @@
metabolization_rate = 0.2 * REAGENTS_METABOLISM
toxpwr = 0
-/datum/reagent/toxin/heparin/on_mob_life(mob/living/M)
+/datum/reagent/toxin/heparin/on_mob_life(mob/living/carbon/M)
if(ishuman(M))
var/mob/living/carbon/human/H = M
H.bleed_rate = min(H.bleed_rate + 2, 8)
@@ -725,7 +709,7 @@
toxpwr = 0.5
taste_description = "spinning"
-/datum/reagent/toxin/rotatium/on_mob_life(mob/living/M)
+/datum/reagent/toxin/rotatium/on_mob_life(mob/living/carbon/M)
if(M.hud_used)
if(current_cycle >= 20 && current_cycle%20 == 0)
var/list/screens = list(M.hud_used.plane_masters["[FLOOR_PLANE]"], M.hud_used.plane_masters["[GAME_PLANE]"], M.hud_used.plane_masters["[LIGHTING_PLANE]"])
@@ -752,7 +736,7 @@
toxpwr = 0.25
taste_description = "skewing"
-/datum/reagent/toxin/skewium/on_mob_life(mob/living/M)
+/datum/reagent/toxin/skewium/on_mob_life(mob/living/carbon/M)
if(M.hud_used)
if(current_cycle >= 5 && current_cycle % 3 == 0)
var/list/screens = list(M.hud_used.plane_masters["[FLOOR_PLANE]"], M.hud_used.plane_masters["[GAME_PLANE]"], M.hud_used.plane_masters["[LIGHTING_PLANE]"])
@@ -787,7 +771,7 @@
metabolization_rate = 0.08 * REAGENTS_METABOLISM
toxpwr = 0.15
-/datum/reagent/toxin/anacea/on_mob_life(mob/living/M)
+/datum/reagent/toxin/anacea/on_mob_life(mob/living/carbon/M)
var/remove_amt = 5
if(holder.has_reagent("calomel") || holder.has_reagent("pen_acid"))
remove_amt = 0.5
@@ -840,7 +824,7 @@
toxpwr = 2
acidpwr = 42.0
-/datum/reagent/toxin/acid/fluacid/on_mob_life(mob/living/M)
+/datum/reagent/toxin/acid/fluacid/on_mob_life(mob/living/carbon/M)
M.adjustFireLoss(current_cycle/10, 0)
. = 1
..()
@@ -856,7 +840,7 @@
var/actual_toxpwr = 5
var/delay = 30
-/datum/reagent/toxin/delayed/on_mob_life(mob/living/M)
+/datum/reagent/toxin/delayed/on_mob_life(mob/living/carbon/M)
if(current_cycle > delay)
holder.remove_reagent(id, actual_metaboliztion_rate * M.metabolism_efficiency)
M.adjustToxLoss(actual_toxpwr*REM, 0)
diff --git a/code/modules/reagents/reagent_containers/borghydro.dm b/code/modules/reagents/reagent_containers/borghydro.dm
index cdb476c95a..911571a3bd 100644
--- a/code/modules/reagents/reagent_containers/borghydro.dm
+++ b/code/modules/reagents/reagent_containers/borghydro.dm
@@ -180,7 +180,7 @@ Borg Shaker
recharge_time = 3
accepts_reagent_upgrades = FALSE
- reagent_ids = list("beer", "orangejuice", "grenadine", "limejuice", "tomatojuice", "cola", "tonic", "sodawater", "ice", "cream", "whiskey", "vodka", "rum", "gin", "tequila", "vermouth", "wine", "kahlua", "cognac", "ale", "fernet", "milk", "coffee", "banana", "lemonjuice")
+ reagent_ids = list("beer", "orangejuice", "grenadine", "limejuice", "tomatojuice", "cola", "tonic", "sodawater", "ice", "cream", "whiskey", "vodka", "rum", "gin", "tequila", "vermouth", "wine", "kahlua", "cognac", "ale", "milk", "coffee", "banana", "lemonjuice")
/obj/item/reagent_containers/borghypo/borgshaker/attack(mob/M, mob/user)
return //Can't inject stuff with a shaker, can we? //not with that attitude
@@ -235,7 +235,7 @@ Borg Shaker
recharge_time = 3
accepts_reagent_upgrades = FALSE
- reagent_ids = list("fakebeer")
+ reagent_ids = list("fakebeer", "fernet")
/obj/item/reagent_containers/borghypo/peace
name = "Peace Hypospray"
diff --git a/code/modules/reagents/reagent_containers/bottle.dm b/code/modules/reagents/reagent_containers/bottle.dm
index 4b797cbd73..4d737657f8 100644
--- a/code/modules/reagents/reagent_containers/bottle.dm
+++ b/code/modules/reagents/reagent_containers/bottle.dm
@@ -226,25 +226,10 @@
desc = "A small bottle of Romerol. The REAL zombie powder."
list_reagents = list("romerol" = 30)
-/obj/item/reagent_containers/glass/bottle/flu_virion
- name = "Flu virion culture bottle"
- desc = "A small bottle. Contains H13N1 flu virion culture in synthblood medium."
- spawned_disease = /datum/disease/advance/flu
-
-/obj/item/reagent_containers/glass/bottle/epiglottis_virion
- name = "Epiglottis virion culture bottle"
- desc = "A small bottle. Contains Epiglottis virion culture in synthblood medium."
- spawned_disease = /datum/disease/advance/voice_change
-
-/obj/item/reagent_containers/glass/bottle/liver_enhance_virion
- name = "Liver enhancement virion culture bottle"
- desc = "A small bottle. Contains liver enhancement virion culture in synthblood medium."
- spawned_disease = /datum/disease/advance/heal
-
-/obj/item/reagent_containers/glass/bottle/hallucigen_virion
- name = "Hallucigen virion culture bottle"
- desc = "A small bottle. Contains hallucigen virion culture in synthblood medium."
- spawned_disease = /datum/disease/advance/hallucigen
+/obj/item/reagent_containers/glass/bottle/random_virus
+ name = "Experimental disease culture bottle"
+ desc = "A small bottle. Contains an untested viral culture in synthblood medium."
+ spawned_disease = /datum/disease/advance/random
/obj/item/reagent_containers/glass/bottle/pierrot_throat
name = "Pierrot's Throat culture bottle"
@@ -255,6 +240,11 @@
name = "Rhinovirus culture bottle"
desc = "A small bottle. Contains XY-rhinovirus culture in synthblood medium."
spawned_disease = /datum/disease/advance/cold
+
+/obj/item/reagent_containers/glass/bottle/flu_virion
+ name = "Flu virion culture bottle"
+ desc = "A small bottle. Contains H13N1 flu virion culture in synthblood medium."
+ spawned_disease = /datum/disease/advance/flu
/obj/item/reagent_containers/glass/bottle/retrovirus
name = "Retrovirus culture bottle"
diff --git a/code/modules/reagents/reagent_containers/medspray.dm b/code/modules/reagents/reagent_containers/medspray.dm
index 2eae912556..fdb6a60894 100644
--- a/code/modules/reagents/reagent_containers/medspray.dm
+++ b/code/modules/reagents/reagent_containers/medspray.dm
@@ -6,7 +6,7 @@
item_state = "spraycan"
lefthand_file = 'icons/mob/inhands/equipment/hydroponics_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/hydroponics_righthand.dmi'
- flags_1 = NOBLUDGEON_1
+ item_flags = NOBLUDGEON
obj_flags = UNIQUE_RENAME
container_type = OPENCONTAINER
slot_flags = ITEM_SLOT_BELT
diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm
index b0e101f76a..91a22ff1fb 100644
--- a/code/modules/reagents/reagent_containers/spray.dm
+++ b/code/modules/reagents/reagent_containers/spray.dm
@@ -6,7 +6,7 @@
item_state = "cleaner"
lefthand_file = 'icons/mob/inhands/equipment/custodial_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/custodial_righthand.dmi'
- flags_1 = NOBLUDGEON_1
+ item_flags = NOBLUDGEON
container_type = OPENCONTAINER
slot_flags = ITEM_SLOT_BELT
throwforce = 0
diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm
index a29722b4af..8acecf25a1 100644
--- a/code/modules/recycling/conveyor2.dm
+++ b/code/modules/recycling/conveyor2.dm
@@ -310,7 +310,7 @@ GLOBAL_LIST_EMPTY(conveyors_by_id)
var/obj/item/conveyor_switch_construct/C = new/obj/item/conveyor_switch_construct(src.loc)
C.id = id
transfer_fingerprints_to(C)
- to_chat(user, "You deattach the conveyor switch.")
+ to_chat(user, "You detach the conveyor switch.")
qdel(src)
/obj/machinery/conveyor_switch/oneway
diff --git a/code/modules/recycling/disposal/bin.dm b/code/modules/recycling/disposal/bin.dm
index aa356d5cd2..737f50859d 100644
--- a/code/modules/recycling/disposal/bin.dm
+++ b/code/modules/recycling/disposal/bin.dm
@@ -96,7 +96,7 @@
return
if(user.a_intent != INTENT_HARM)
- if((I.flags_1 & ABSTRACT_1) || !user.temporarilyRemoveItemFromInventory(I))
+ if((I.item_flags & ABSTRACT) || !user.temporarilyRemoveItemFromInventory(I))
return
place_item_in_disposal(I, user)
update_icon()
diff --git a/code/modules/recycling/disposal/construction.dm b/code/modules/recycling/disposal/construction.dm
index 9b0a0dc21e..624d5e0e05 100644
--- a/code/modules/recycling/disposal/construction.dm
+++ b/code/modules/recycling/disposal/construction.dm
@@ -52,7 +52,7 @@
layer = initial(layer)
else if(ispath(pipe_type, /obj/machinery/disposal/bin))
- // Disposal bins recieve special icon treating
+ // Disposal bins receive special icon treating
if(anchored)
icon_state = "disposal"
else
diff --git a/code/modules/recycling/disposal/pipe.dm b/code/modules/recycling/disposal/pipe.dm
index ba089f6fb2..bc073d5e32 100644
--- a/code/modules/recycling/disposal/pipe.dm
+++ b/code/modules/recycling/disposal/pipe.dm
@@ -62,7 +62,7 @@
return dpdir & (~turn(H.dir, 180))
// transfer the holder through this pipe segment
-// overriden for special behaviour
+// overridden for special behaviour
/obj/structure/disposalpipe/proc/transfer(obj/structure/disposalholder/H)
return transfer_to_dir(H, nextdir(H))
diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm
index 28609e921d..0a36394bc9 100644
--- a/code/modules/research/designs/autolathe_designs.dm
+++ b/code/modules/research/designs/autolathe_designs.dm
@@ -423,10 +423,11 @@
/datum/design/healthanalyzer
name = "Health Analyzer"
id = "healthanalyzer"
- build_type = AUTOLATHE
+ build_type = AUTOLATHE | PROTOLATHE
materials = list(MAT_METAL = 500, MAT_GLASS = 50)
build_path = /obj/item/healthanalyzer
category = list("initial", "Medical")
+ departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
/datum/design/pillbottle
name = "Pill Bottle"
@@ -655,7 +656,7 @@
/datum/design/receiver
name = "Modular Receiver"
- id = "reciever"
+ id = "receiver"
build_type = AUTOLATHE
materials = list(MAT_METAL = 15000)
build_path = /obj/item/weaponcrafting/receiver
diff --git a/code/modules/research/designs/biogenerator_designs.dm b/code/modules/research/designs/biogenerator_designs.dm
index b2d02e9d04..e2d5652a35 100644
--- a/code/modules/research/designs/biogenerator_designs.dm
+++ b/code/modules/research/designs/biogenerator_designs.dm
@@ -113,7 +113,15 @@
build_type = BIOGENERATOR
materials = list(MAT_BIOMASS = 50)
build_path = /obj/item/stack/sheet/cloth
- category = list("initial","Leather and Cloth")
+ category = list("initial","Organic Materials")
+
+/datum/design/cardboard
+ name = "Sheet of Cardboard"
+ id = "cardboard"
+ build_type = BIOGENERATOR
+ materials = list(MAT_BIOMASS = 25)
+ build_path = /obj/item/stack/sheet/cardboard
+ category = list("initial","Organic Materials")
/datum/design/leather
name = "Sheet of Leather"
@@ -121,7 +129,7 @@
build_type = BIOGENERATOR
materials = list(MAT_BIOMASS = 150)
build_path = /obj/item/stack/sheet/leather
- category = list("initial","Leather and Cloth")
+ category = list("initial","Organic Materials")
/datum/design/secbelt
name = "Security Belt"
diff --git a/code/modules/research/designs/electronics_designs.dm b/code/modules/research/designs/electronics_designs.dm
index 68bfbfc42e..29ed3505d8 100644
--- a/code/modules/research/designs/electronics_designs.dm
+++ b/code/modules/research/designs/electronics_designs.dm
@@ -58,7 +58,7 @@
/datum/design/integrated_printer
name = "Integrated circuit printer"
- desc = "This machine provides all neccesary things for circuitry."
+ desc = "This machine provides all necessary things for circuitry."
id = "icprinter"
build_type = PROTOLATHE
materials = list(MAT_GLASS = 5000, MAT_METAL = 10000)
diff --git a/code/modules/research/designs/machine_designs.dm b/code/modules/research/designs/machine_designs.dm
index bebd65f48d..89f1eb85b9 100644
--- a/code/modules/research/designs/machine_designs.dm
+++ b/code/modules/research/designs/machine_designs.dm
@@ -348,7 +348,7 @@
/datum/design/board/processor
name = "Machine Design (Food/Slime Processor Board)"
- desc = "The circuit board for a processing unit. Screwdrive the circuit to switch between food (default) or slime processing."
+ desc = "The circuit board for a processing unit. Screwdriver the circuit to switch between food (default) or slime processing."
id = "processor"
build_path = /obj/item/circuitboard/machine/processor
category = list ("Misc. Machinery")
diff --git a/code/modules/research/designs/mechfabricator_designs.dm b/code/modules/research/designs/mechfabricator_designs.dm
index eaa18aaf43..e4ba942c84 100644
--- a/code/modules/research/designs/mechfabricator_designs.dm
+++ b/code/modules/research/designs/mechfabricator_designs.dm
@@ -651,6 +651,15 @@
construction_time = 120
category = list("Cyborg Upgrade Modules")
+/datum/design/borg_transform_clown
+ name = "Cyborg Upgrade (Clown Module)"
+ id = "borg_transform_clown"
+ build_type = MECHFAB
+ build_path = /obj/item/borg/upgrade/transform/clown
+ materials = list(MAT_METAL=10000, MAT_GLASS=15000, MAT_BANANIUM = 1000)
+ construction_time = 120
+ category = list("Cyborg Upgrade Modules")
+
/datum/design/borg_upgrade_selfrepair
name = "Cyborg Upgrade (Self-repair)"
id = "borg_upgrade_selfrepair"
@@ -696,6 +705,24 @@
construction_time = 120
category = list("Cyborg Upgrade Modules")
+/datum/design/borg_upgrade_trashofholding
+ name = "Cyborg Upgrade (Trash Bag of Holding)"
+ id = "borg_upgrade_trashofholding"
+ build_type = MECHFAB
+ build_path = /obj/item/borg/upgrade/tboh
+ materials = list(MAT_METAL=10000, MAT_GOLD=1500, MAT_URANIUM=250, MAT_PLASMA=1500)
+ construction_time = 120
+ category = list("Cyborg Upgrade Modules")
+
+/datum/design/borg_upgrade_advancedmop
+ name = "Cyborg Upgrade (Advanced Mop)"
+ id = "borg_upgrade_advancedmop"
+ build_type = MECHFAB
+ build_path = /obj/item/borg/upgrade/amop
+ materials = list(MAT_METAL=10000, MAT_GLASS=200, MAT_TITANIUM=1000)
+ construction_time = 120
+ category = list("Cyborg Upgrade Modules")
+
/datum/design/borg_upgrade_expand
name = "Cyborg Upgrade (Expand)"
id = "borg_upgrade_expand"
@@ -751,17 +778,6 @@
construction_time = 50
category = list("Misc")
-/datum/design/drone_shell
- name = "Drone Shell"
- desc = "A shell of a maintenance drone, an expendable robot built to perform station repairs."
- id = "drone_shell"
- build_type = MECHFAB | PROTOLATHE
- materials = list(MAT_METAL = 800, MAT_GLASS = 350)
- construction_time=150
- build_path = /obj/item/drone_shell
- category = list("Misc")
- departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
-
/datum/design/synthetic_flash
name = "Flash"
desc = "When a problem arises, SCIENCE is the solution."
diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm
index 9df3df3c31..5f1e5ea520 100644
--- a/code/modules/research/designs/medical_designs.dm
+++ b/code/modules/research/designs/medical_designs.dm
@@ -200,7 +200,17 @@
materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_PLASMA = 500, MAT_TITANIUM = 1500)
category = list("Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
-
+
+/datum/design/healthanalyzer_advanced
+ name = "advanced health analyzer"
+ desc = "A hand-held body scanner able to distinguish vital signs of the subject with high accuracy."
+ id = "healthanalyzer_advanced"
+ build_path = /obj/item/healthanalyzer/advanced
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 5000, MAT_GLASS = 2500, MAT_SILVER = 2000, MAT_GOLD = 1500)
+ category = list("Medical Designs")
+ departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
+
/////////////////////////////////////////
//////////Cybernetic Implants////////////
/////////////////////////////////////////
@@ -283,7 +293,7 @@
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
/datum/design/cyberimp_xray
- name = "X-Ray Eyes"
+ name = "X-ray Eyes"
desc = "These cybernetic eyes will give you X-ray vision. Blinking is futile."
id = "ci-xray"
build_type = PROTOLATHE | MECHFAB
diff --git a/code/modules/research/designs/mining_designs.dm b/code/modules/research/designs/mining_designs.dm
index b2a6c34269..18934d021c 100644
--- a/code/modules/research/designs/mining_designs.dm
+++ b/code/modules/research/designs/mining_designs.dm
@@ -14,7 +14,7 @@
/datum/design/bluespace_pod
name = "Supply Drop Pod Upgrade Disk"
- desc = "Allows the Cargo Express Console to call down the Bluespace Drop Pod, greatly increasing user saftey."//who?
+ desc = "Allows the Cargo Express Console to call down the Bluespace Drop Pod, greatly increasing user safety."//who?
id = "bluespace_pod"//the coder reading this
build_type = PROTOLATHE
materials = list(MAT_GLASS = 1000)
diff --git a/code/modules/research/designs/power_designs.dm b/code/modules/research/designs/power_designs.dm
index b30470036e..e1648559a7 100644
--- a/code/modules/research/designs/power_designs.dm
+++ b/code/modules/research/designs/power_designs.dm
@@ -59,7 +59,7 @@
/datum/design/light_replacer
name = "Light Replacer"
- desc = "A device to automatically replace lights. Refill with working lightbulbs."
+ desc = "A device to automatically replace lights. Refill with working light bulbs."
id = "light_replacer"
build_type = PROTOLATHE
materials = list(MAT_METAL = 1500, MAT_SILVER = 150, MAT_GLASS = 3000)
diff --git a/code/modules/research/designs/weapon_designs.dm b/code/modules/research/designs/weapon_designs.dm
index 2fcb20a498..0c7b7327fa 100644
--- a/code/modules/research/designs/weapon_designs.dm
+++ b/code/modules/research/designs/weapon_designs.dm
@@ -181,7 +181,7 @@
departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_MEDICAL
/datum/design/xray
- name = "Xray Laser Gun"
+ name = "X-ray Laser Gun"
desc = "Not quite as menacing as it sounds"
id = "xray_laser"
build_type = PROTOLATHE
diff --git a/code/modules/research/machinery/_production.dm b/code/modules/research/machinery/_production.dm
index 76712dd55e..75ed53e936 100644
--- a/code/modules/research/machinery/_production.dm
+++ b/code/modules/research/machinery/_production.dm
@@ -24,7 +24,7 @@
create_reagents(0)
materials = AddComponent(/datum/component/material_container,
list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TITANIUM, MAT_BLUESPACE, MAT_PLASTIC), 0,
- FALSE, list(/obj/item/stack), CALLBACK(src, .proc/is_insertion_ready), CALLBACK(src, .proc/AfterMaterialInsert))
+ TRUE, list(/obj/item/stack), CALLBACK(src, .proc/is_insertion_ready), CALLBACK(src, .proc/AfterMaterialInsert))
materials.precise_insertion = TRUE
RefreshParts()
matching_designs = list()
diff --git a/code/modules/research/machinery/departmental_circuit_imprinter.dm b/code/modules/research/machinery/departmental_circuit_imprinter.dm
index c51288b685..e47bd97494 100644
--- a/code/modules/research/machinery/departmental_circuit_imprinter.dm
+++ b/code/modules/research/machinery/departmental_circuit_imprinter.dm
@@ -1,6 +1,6 @@
/obj/machinery/rnd/production/circuit_imprinter/department
name = "department circuit imprinter"
- desc = "A special circuit imprinter with a built in interface meant for departmental usage, with built in ExoSync recievers allowing it to print designs researched that match its ROM-encoded department type."
+ desc = "A special circuit imprinter with a built in interface meant for departmental usage, with built in ExoSync receivers allowing it to print designs researched that match its ROM-encoded department type."
icon_state = "circuit_imprinter"
container_type = OPENCONTAINER
circuit = /obj/item/circuitboard/machine/circuit_imprinter/department
diff --git a/code/modules/research/machinery/departmental_protolathe.dm b/code/modules/research/machinery/departmental_protolathe.dm
index ddc0b7c749..f91f3282d5 100644
--- a/code/modules/research/machinery/departmental_protolathe.dm
+++ b/code/modules/research/machinery/departmental_protolathe.dm
@@ -1,6 +1,6 @@
/obj/machinery/rnd/production/protolathe/department
name = "department protolathe"
- desc = "A special protolathe with a built in interface meant for departmental usage, with built in ExoSync recievers allowing it to print designs researched that match its ROM-encoded department type."
+ desc = "A special protolathe with a built in interface meant for departmental usage, with built in ExoSync receivers allowing it to print designs researched that match its ROM-encoded department type."
icon_state = "protolathe"
container_type = OPENCONTAINER
circuit = /obj/item/circuitboard/machine/protolathe/department
diff --git a/code/modules/research/rdmachines.dm b/code/modules/research/rdmachines.dm
index 87f8cefe78..23d515cf88 100644
--- a/code/modules/research/rdmachines.dm
+++ b/code/modules/research/rdmachines.dm
@@ -44,6 +44,9 @@
return
if(default_deconstruction_crowbar(O))
return
+ if(panel_open && is_wire_tool(O))
+ wires.interact(user)
+ return TRUE
if(is_refillable() && O.is_drainable())
return FALSE //inserting reagents into the machine
if(Insert_Item(O, user))
@@ -65,6 +68,7 @@
to_chat(user, "You can't load [src] while it's opened!")
return FALSE
if(disabled)
+ to_chat(user, "The insertion belts of [src] won't engage!")
return FALSE
if(requires_console && !linked_console)
to_chat(user, "[src] must be linked to an R&D console first!")
diff --git a/code/modules/research/techweb/_techweb.dm b/code/modules/research/techweb/_techweb.dm
index a34476ce1c..7c23609c21 100644
--- a/code/modules/research/techweb/_techweb.dm
+++ b/code/modules/research/techweb/_techweb.dm
@@ -106,19 +106,19 @@
l[i] = amount
modify_point_list(l)
-/datum/techweb/proc/copy_research_to(datum/techweb/reciever, unlock_hidden = TRUE) //Adds any missing research to theirs.
+/datum/techweb/proc/copy_research_to(datum/techweb/receiver, unlock_hidden = TRUE) //Adds any missing research to theirs.
for(var/i in researched_nodes)
CHECK_TICK
- reciever.research_node_id(i, TRUE, FALSE)
+ receiver.research_node_id(i, TRUE, FALSE)
for(var/i in researched_designs)
CHECK_TICK
- reciever.add_design_by_id(i)
+ receiver.add_design_by_id(i)
if(unlock_hidden)
- for(var/i in reciever.hidden_nodes)
+ for(var/i in receiver.hidden_nodes)
CHECK_TICK
if(!hidden_nodes[i])
- reciever.hidden_nodes -= i //We can see it so let them see it too.
- reciever.recalculate_nodes()
+ receiver.hidden_nodes -= i //We can see it so let them see it too.
+ receiver.recalculate_nodes()
/datum/techweb/proc/copy()
var/datum/techweb/returned = new()
diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm
index 015f0dafb6..a65ad7de0a 100644
--- a/code/modules/research/techweb/all_nodes.dm
+++ b/code/modules/research/techweb/all_nodes.dm
@@ -18,7 +18,7 @@
display_name = "Biological Technology"
description = "What makes us tick." //the MC, silly!
prereq_ids = list("base")
- design_ids = list("chem_heater", "chem_master", "chem_dispenser", "sleeper", "vr_sleeper", "pandemic", "defibmount", "operating", "soda_dispenser", "beer_dispenser")
+ design_ids = list("chem_heater", "chem_master", "chem_dispenser", "sleeper", "vr_sleeper", "pandemic", "defibmount", "operating", "soda_dispenser", "beer_dispenser", "healthanalyzer")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
export_price = 5000
@@ -27,7 +27,7 @@
display_name = "Advanced Biotechnology"
description = "Advanced Biotechnology"
prereq_ids = list("biotech")
- design_ids = list("piercesyringe", "smoke_machine", "plasmarefiller", "limbgrower", "defibrillator", "meta_beaker")
+ design_ids = list("piercesyringe", "smoke_machine", "plasmarefiller", "limbgrower", "defibrillator", "meta_beaker", "healthanalyzer_advanced")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
export_price = 5000
@@ -198,7 +198,7 @@
display_name = "Basic Robotics Research"
description = "Programmable machines that make our lives lazier."
prereq_ids = list("base")
- design_ids = list("paicard", "drone_shell")
+ design_ids = list("paicard")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
export_price = 5000
@@ -207,7 +207,7 @@
display_name = "Advanced Robotics Research"
description = "It can even do the dishes!"
prereq_ids = list("robotics")
- design_ids = list("borg_upgrade_diamonddrill")
+ design_ids = list("borg_upgrade_diamonddrill", "borg_upgrade_trashofholding", "borg_upgrade_advancedmop")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
export_price = 5000
@@ -320,7 +320,7 @@
description = "Honk?!"
prereq_ids = list("base")
design_ids = list("air_horn", "honker_main", "honker_peri", "honker_targ", "honk_chassis", "honk_head", "honk_torso", "honk_left_arm", "honk_right_arm",
- "honk_left_leg", "honk_right_leg", "mech_banana_mortar", "mech_mousetrap_mortar", "mech_honker", "mech_punching_face", "implant_trombone")
+ "honk_left_leg", "honk_right_leg", "mech_banana_mortar", "mech_mousetrap_mortar", "mech_honker", "mech_punching_face", "implant_trombone", "borg_transform_clown")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
export_price = 5000
diff --git a/code/modules/research/xenobiology/crossbreeding/_corecross.dm b/code/modules/research/xenobiology/crossbreeding/_corecross.dm
index 45cc0c1efc..43f23d013d 100644
--- a/code/modules/research/xenobiology/crossbreeding/_corecross.dm
+++ b/code/modules/research/xenobiology/crossbreeding/_corecross.dm
@@ -39,7 +39,7 @@ To add a crossbreed:
/obj/item/slimecross/Initialize()
..()
- name = colour + " " + name
+ name = effect + " " + colour + " extract"
var/itemcolor = "#FFFFFF"
switch(colour)
if("orange")
diff --git a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm
index 97112c148a..ca334497a7 100644
--- a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm
+++ b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm
@@ -564,6 +564,7 @@ datum/status_effect/stabilized/blue/on_remove()
/datum/status_effect/stabilized/cerulean/on_remove()
if(clone)
clone.visible_message("[clone] dissolves into a puddle of goo!")
+ clone.unequip_everything()
qdel(clone)
/datum/status_effect/stabilized/pyrite
diff --git a/code/modules/research/xenobiology/crossbreeding/charged.dm b/code/modules/research/xenobiology/crossbreeding/charged.dm
index 7183ece045..8ae7bf8d54 100644
--- a/code/modules/research/xenobiology/crossbreeding/charged.dm
+++ b/code/modules/research/xenobiology/crossbreeding/charged.dm
@@ -386,6 +386,9 @@ Charged extracts:
if(user == M)
to_chat(user, "You can't drink the love potion. What are you, a narcissist?")
return ..()
+ if(M.has_status_effect(STATUS_EFFECT_INLOVE))
+ to_chat(user, "[M] is already lovestruck!")
+ return ..()
M.visible_message("[user] starts to feed [M] a love potion!",
"[user] starts to feed you a love potion!")
@@ -393,10 +396,11 @@ Charged extracts:
if(!do_after(user, 50, target = M))
return
to_chat(user, "You feed [M] the love potion!")
- to_chat(M, "You develop feelings for [user], and anyone [p_they(user)] like.")
- if(!("[REF(user)]" in M.faction) && M.mind)
- M.mind.store_memory("You have strong feelings for [user].")
+ to_chat(M, "You develop feelings for [user], and anyone [user.p_they()] like.")
+ if(M.mind)
+ M.mind.store_memory("You are in love with [user].")
M.faction |= "[REF(user)]"
+ M.apply_status_effect(STATUS_EFFECT_INLOVE, user)
qdel(src)
/obj/item/slimepotion/peacepotion
diff --git a/code/modules/research/xenobiology/crossbreeding/recurring.dm b/code/modules/research/xenobiology/crossbreeding/recurring.dm
index cc36bbb215..8a6e5c3cbb 100644
--- a/code/modules/research/xenobiology/crossbreeding/recurring.dm
+++ b/code/modules/research/xenobiology/crossbreeding/recurring.dm
@@ -21,6 +21,7 @@ Recurring extracts:
extract.desc = desc
extract.icon = icon
extract.icon_state = icon_state
+ extract.color = color
extract.recurring = TRUE
src.forceMove(extract)
START_PROCESSING(SSobj,src)
diff --git a/code/modules/research/xenobiology/crossbreeding/reproductive.dm b/code/modules/research/xenobiology/crossbreeding/reproductive.dm
index 878e17c1e7..2f6ca9555a 100644
--- a/code/modules/research/xenobiology/crossbreeding/reproductive.dm
+++ b/code/modules/research/xenobiology/crossbreeding/reproductive.dm
@@ -19,7 +19,7 @@ Reproductive extracts:
return
if(istype(O, /obj/item/storage/bag/bio))
var/list/inserted = list()
- O.SendSignal(COMSIG_TRY_STORAGE_TAKE_TYPE, /obj/item/reagent_containers/food/snacks/monkeycube, src, 1, null, null, user, inserted)
+ SEND_SIGNAL(O, COMSIG_TRY_STORAGE_TAKE_TYPE, /obj/item/reagent_containers/food/snacks/monkeycube, src, 1, null, null, user, inserted)
if(inserted.len)
var/obj/item/reagent_containers/food/snacks/monkeycube/M = inserted[1]
if(istype(M))
diff --git a/code/modules/research/xenobiology/crossbreeding/selfsustaining.dm b/code/modules/research/xenobiology/crossbreeding/selfsustaining.dm
index 7bb723bc3d..93e5a8e739 100644
--- a/code/modules/research/xenobiology/crossbreeding/selfsustaining.dm
+++ b/code/modules/research/xenobiology/crossbreeding/selfsustaining.dm
@@ -4,7 +4,7 @@ Self-sustaining extracts:
*/
/obj/item/slimecross/selfsustaining
name = "self-sustaining extract"
- effect = "selfsustaining"
+ effect = "self-sustaining"
icon_state = "selfsustaining"
var/extract_type = /obj/item/slime_extract
@@ -23,6 +23,7 @@ Self-sustaining extracts:
A.extract = X
A.icon = icon
A.icon_state = icon_state
+ A.color = color
qdel(src)
/obj/item/autoslime/Initialize()
diff --git a/code/modules/research/xenobiology/crossbreeding/stabilized.dm b/code/modules/research/xenobiology/crossbreeding/stabilized.dm
index cc80c3a780..fe1b498667 100644
--- a/code/modules/research/xenobiology/crossbreeding/stabilized.dm
+++ b/code/modules/research/xenobiology/crossbreeding/stabilized.dm
@@ -163,4 +163,4 @@ Stabilized extracts:
regencore = regen
regen.forceMove(src)
return
- return ..()
+ return ..()
\ No newline at end of file
diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm
index a5998400c8..b8cc61df97 100644
--- a/code/modules/research/xenobiology/xenobiology.dm
+++ b/code/modules/research/xenobiology/xenobiology.dm
@@ -702,7 +702,7 @@
imp.implant(SM, user)
SM.access_card = new /obj/item/card/id/syndicate(SM)
- SM.access_card.flags_1 |= NODROP_1
+ SM.access_card.item_flags |= NODROP
/obj/item/slimepotion/transference
name = "consciousness transference potion"
@@ -725,7 +725,11 @@
if(SM.sentience_type != animal_type)
to_chat(user, "You cannot transfer your consciousness to [SM]." )
return ..()
- if(jobban_isbanned(user, ROLE_ALIEN)) //ideally sentience and trasnference potions should be their own unique role.
+ var/jb = jobban_isbanned(user, ROLE_ALIEN)
+ if(QDELETED(src) || QDELETED(M) || QDELETED(user))
+ return
+
+ if(jb) //ideally sentience and trasnference potions should be their own unique role.
to_chat(user, "Your mind goes blank as you attempt to use the potion.")
return
@@ -909,7 +913,7 @@
/obj/item/slimepotion/slime/slimeradio
name = "bluespace radio potion"
- desc = "A strange chemical that grants those who ingest it the ability to broadcast and recieve subscape radio waves."
+ desc = "A strange chemical that grants those who ingest it the ability to broadcast and receive subscape radio waves."
icon = 'icons/obj/chemical.dmi'
icon_state = "potgrey"
diff --git a/code/modules/ruins/spaceruin_code/listeningstation.dm b/code/modules/ruins/spaceruin_code/listeningstation.dm
index ff0bad8257..8efeaaabff 100644
--- a/code/modules/ruins/spaceruin_code/listeningstation.dm
+++ b/code/modules/ruins/spaceruin_code/listeningstation.dm
@@ -32,11 +32,11 @@
/obj/item/paper/fluff/ruins/listeningstation/receipt
name = "receipt"
- info = "1 x Stechtkin pistol - $600 1 x silencer - $200 shipping charge - $4360 total - $5160"
+ info = "1 x Stechkin pistol - $600 1 x silencer - $200 shipping charge - $4360 total - $5160"
/obj/item/paper/fluff/ruins/listeningstation/odd_report
name = "odd report"
- info = "I wonder how much longer they will accept my empty reports. They will cancel the case soon without results. When the pickup comes, I will tell them I have lost faith in our cause, and beg them to consider a diplomatic solution. How many nuclear teams have been dispatched with those nukes? I must try and prevent more from ever being sent. If they will not listen to reason, I will detonate the warehouse myself. Maybe some day in the immediate future, space will be peaceful, though I don't intend to live to see it. And that is why I write this down- it is my sacrifice that stabilized your worlds, traveller. Spare a thought for me, and please attempt to prevent nuclear proliferation, should it ever rear its ugly head again. -Donk Co. Operative #451"
+ info = "I wonder how much longer they will accept my empty reports. They will cancel the case soon without results. When the pickup comes, I will tell them I have lost faith in our cause, and beg them to consider a diplomatic solution. How many nuclear teams have been dispatched with those nukes? I must try and prevent more from ever being sent. If they will not listen to reason, I will detonate the warehouse myself. Maybe some day in the immediate future, space will be peaceful, though I don't intend to live to see it. And that is why I write this down- it is my sacrifice that stabilized your worlds, traveller. Spare a thought for me, and please attempt to prevent nuclear proliferation, should it ever rear its ugly head again. -DonkCo Operative #451"
/obj/item/paper/fluff/ruins/listeningstation/briefing
name = "mission briefing"
diff --git a/code/modules/ruins/spaceruin_code/oldstation.dm b/code/modules/ruins/spaceruin_code/oldstation.dm
index d023760061..b216145023 100644
--- a/code/modules/ruins/spaceruin_code/oldstation.dm
+++ b/code/modules/ruins/spaceruin_code/oldstation.dm
@@ -1,7 +1,7 @@
/////////// Oldstation items
/obj/item/paper/fluff/ruins/oldstation
- name = "Cyro Awakening Alert"
+ name = "Cryo Awakening Alert"
info = "**WARNING**
Catastrophic damage sustained to station. Powernet exhausted to reawaken crew.
Immediate Objectives
1: Activate emergency power generator 2: Lift station lockdown on the bridge
Please locate the 'Damage Report' on the bridge for a detailed situation report."
/obj/item/paper/fluff/ruins/oldstation/damagereport
@@ -43,7 +43,7 @@
/obj/item/paper/fluff/ruins/oldstation/report
name = "Crew Reawakening Report"
- info = "Artifical Program's report to surviving crewmembers.
Crew were placed into cryostasis on March 10th, 2445.
Crew were awoken from cryostasis around June, 2557.
\
+ info = "Artificial Program's report to surviving crewmembers.
Crew were placed into cryostasis on March 10th, 2445.
Crew were awoken from cryostasis around June, 2557.
\
SIGNIFICANT EVENTS OF NOTE 1: The primary radiation detectors were taken offline after 112 years due to power failure, secondary radiation detectors showed no residual \
radiation on station. Deduction, primarily detector was malfunctioning and was producing a radiation signal when there was none.
2: A data burst from a nearby Nanotrasen Space \
- Station was recieved, this data burst contained research data that has been uploaded to our RnD labs.
3: Unknown invasion force has occupied Delta station."
+ Station was received, this data burst contained research data that has been uploaded to our RnD labs.
3: Unknown invasion force has occupied Delta station."
diff --git a/code/modules/shuttle/assault_pod.dm b/code/modules/shuttle/assault_pod.dm
index 84f0ac493d..43b273914c 100644
--- a/code/modules/shuttle/assault_pod.dm
+++ b/code/modules/shuttle/assault_pod.dm
@@ -19,7 +19,7 @@
/obj/item/assault_pod
- name = "Assault Pod Targetting Device"
+ name = "Assault Pod Targeting Device"
icon = 'icons/obj/device.dmi'
icon_state = "gangtool-red"
item_state = "radio"
diff --git a/code/modules/shuttle/docking.dm b/code/modules/shuttle/docking.dm
index fa78c8cb99..d881396092 100644
--- a/code/modules/shuttle/docking.dm
+++ b/code/modules/shuttle/docking.dm
@@ -99,13 +99,7 @@
return DOCKING_SUCCESS
-/obj/docking_port/mobile/proc/preflight_check(
- list/old_turfs,
- list/new_turfs,
- list/areas_to_move,
- rotation,
- )
-
+/obj/docking_port/mobile/proc/preflight_check(list/old_turfs, list/new_turfs, list/areas_to_move, rotation)
for(var/i in 1 to old_turfs.len)
CHECK_TICK
var/turf/oldT = old_turfs[i]
@@ -134,16 +128,7 @@
old_turfs[oldT] = move_mode
-/obj/docking_port/mobile/proc/takeoff(
- list/old_turfs,
- list/new_turfs,
- list/moved_atoms,
- rotation,
- movement_direction,
- old_dock,
- area/underlying_old_area,
- )
-
+/obj/docking_port/mobile/proc/takeoff(list/old_turfs, list/new_turfs, list/moved_atoms, rotation, movement_direction, old_dock, area/underlying_old_area)
for(var/i in 1 to old_turfs.len)
var/turf/oldT = old_turfs[i]
var/turf/newT = new_turfs[i]
@@ -163,17 +148,7 @@
var/area/shuttle_area = oldT.loc
shuttle_area.onShuttleMove(oldT, newT, underlying_old_area) //areas
-/obj/docking_port/mobile/proc/cleanup_runway(
- obj/docking_port/stationary/new_dock,
- list/old_turfs,
- list/new_turfs,
- list/areas_to_move,
- list/moved_atoms,
- rotation,
- movement_direction,
- area/underlying_old_area,
- )
-
+/obj/docking_port/mobile/proc/cleanup_runway(obj/docking_port/stationary/new_dock, list/old_turfs, list/new_turfs, list/areas_to_move, list/moved_atoms, rotation, movement_direction, area/underlying_old_area)
underlying_old_area.afterShuttleMove()
// Parallax handling
@@ -202,14 +177,28 @@
var/turf/oldT = moved_atoms[moved_object]
moved_object.afterShuttleMove(oldT, movement_force, dir, preferred_direction, movement_direction, rotation)//atoms
+ // lateShuttleMove (There had better be a really good reason for additional stages beyond this)
+
+ underlying_old_area.lateShuttleMove()
+
+ for(var/i in 1 to areas_to_move.len)
+ CHECK_TICK
+ var/area/internal_area = areas_to_move[i]
+ internal_area.lateShuttleMove()
+
for(var/i in 1 to old_turfs.len)
CHECK_TICK
- // Objects can block air so either turf or content changes means an air update is needed
if(!(old_turfs[old_turfs[i]] & MOVE_CONTENTS | MOVE_TURF))
continue
var/turf/oldT = old_turfs[i]
var/turf/newT = new_turfs[i]
- oldT.blocks_air = initial(oldT.blocks_air)
- oldT.air_update_turf(TRUE)
- newT.blocks_air = initial(newT.blocks_air)
- newT.air_update_turf(TRUE)
\ No newline at end of file
+ newT.lateShuttleMove(oldT)
+
+ for(var/i in 1 to moved_atoms.len)
+ CHECK_TICK
+ var/atom/movable/moved_object = moved_atoms[i]
+ if(QDELETED(moved_object))
+ continue
+ var/turf/oldT = moved_atoms[moved_object]
+ moved_object.lateShuttleMove(oldT, movement_force, movement_direction)
+
diff --git a/code/modules/shuttle/emergency.dm b/code/modules/shuttle/emergency.dm
index fc32b60e6d..20b8c26d83 100644
--- a/code/modules/shuttle/emergency.dm
+++ b/code/modules/shuttle/emergency.dm
@@ -263,6 +263,14 @@
return has_people
+/obj/docking_port/mobile/emergency/proc/ShuttleDBStuff()
+ set waitfor = FALSE
+ if(!SSdbcore.Connect())
+ return
+ var/datum/DBQuery/query_round_shuttle_name = SSdbcore.NewQuery("UPDATE [format_table_name("round")] SET shuttle_name = '[name]' WHERE id = [GLOB.round_id]")
+ query_round_shuttle_name.Execute()
+ qdel(query_round_shuttle_name)
+
/obj/docking_port/mobile/emergency/check()
if(!timer)
return
@@ -293,9 +301,7 @@
setTimer(SSshuttle.emergencyDockTime)
send2irc("Server", "The Emergency Shuttle has docked with the station.")
priority_announce("The Emergency Shuttle has docked with the station. You have [timeLeft(600)] minutes to board the Emergency Shuttle.", null, 'sound/ai/shuttledock.ogg', "Priority")
- if(SSdbcore.Connect())
- var/datum/DBQuery/query_round_shuttle_name = SSdbcore.NewQuery("UPDATE [format_table_name("round")] SET shuttle_name = '[name]' WHERE id = [GLOB.round_id]")
- query_round_shuttle_name.Execute()
+ ShuttleDBStuff()
if(SHUTTLE_DOCKED)
@@ -537,7 +543,7 @@
/obj/item/storage/pod/attack_hand(mob/user)
if (can_interact(user))
- SendSignal(COMSIG_TRY_STORAGE_SHOW, user)
+ SEND_SIGNAL(src, COMSIG_TRY_STORAGE_SHOW, user)
return TRUE
/obj/item/storage/pod/MouseDrop(over_object, src_location, over_location)
diff --git a/code/modules/shuttle/ferry.dm b/code/modules/shuttle/ferry.dm
index f2d56686e0..eaa1f36b75 100644
--- a/code/modules/shuttle/ferry.dm
+++ b/code/modules/shuttle/ferry.dm
@@ -36,5 +36,5 @@
if(last_request && (last_request + cooldown > world.time))
return
last_request = world.time
- to_chat(usr, "Your request has been recieved by CentCom.")
+ to_chat(usr, "Your request has been received by CentCom.")
to_chat(GLOB.admins, "FERRY: [ADMIN_LOOKUPFLW(usr)] (Move Ferry) is requesting to move the transport ferry to CentCom.")
diff --git a/code/modules/shuttle/manipulator.dm b/code/modules/shuttle/manipulator.dm
index bfdd391f05..ee12d7cf37 100644
--- a/code/modules/shuttle/manipulator.dm
+++ b/code/modules/shuttle/manipulator.dm
@@ -224,7 +224,11 @@
if(existing_shuttle)
existing_shuttle.jumpToNullSpace()
+ var/list/force_memory = preview_shuttle.movement_force
+ preview_shuttle.movement_force = list("KNOCKDOWN" = 0, "THROW" = 0)
preview_shuttle.initiate_docking(D)
+ preview_shuttle.movement_force = force_memory
+
. = preview_shuttle
// Shuttle state involves a mode and a timer based on world.time, so
diff --git a/code/modules/shuttle/navigation_computer.dm b/code/modules/shuttle/navigation_computer.dm
index 29c0de1b27..c58b3eee7b 100644
--- a/code/modules/shuttle/navigation_computer.dm
+++ b/code/modules/shuttle/navigation_computer.dm
@@ -31,6 +31,9 @@
if(jammed)
to_chat(user, "The Syndicate is jamming the console!")
return
+ if(!shuttle_port)
+ to_chat(user,"Warning: Shuttle connection severed!")
+ return
return ..()
/obj/machinery/computer/camera_advanced/shuttle_docker/GrantActions(mob/living/user)
diff --git a/code/modules/shuttle/on_move.dm b/code/modules/shuttle/on_move.dm
index 66142d6fc4..9767334166 100644
--- a/code/modules/shuttle/on_move.dm
+++ b/code/modules/shuttle/on_move.dm
@@ -53,7 +53,7 @@ All ShuttleMove procs go here
if(!shuttle_boundary)
CRASH("A turf queued to move via shuttle somehow had no skipover in baseturfs. [src]([type]):[loc]")
var/depth = baseturfs.len - shuttle_boundary + 1
- newT.CopyOnTop(src, 1, depth)
+ newT.CopyOnTop(src, 1, depth, TRUE)
//Air stuff
newT.blocks_air = TRUE
newT.air_update_turf(TRUE)
@@ -78,6 +78,13 @@ All ShuttleMove procs go here
return TRUE
+/turf/proc/lateShuttleMove(turf/oldT)
+ blocks_air = initial(blocks_air)
+ air_update_turf(TRUE)
+ oldT.blocks_air = initial(oldT.blocks_air)
+ oldT.air_update_turf(TRUE)
+
+
/////////////////////////////////////////////////////////////////////////////////////
// Called on every atom in shuttle turf contents before anything has been moved
@@ -91,9 +98,8 @@ All ShuttleMove procs go here
if(newT == oldT) // In case of in place shuttle rotation shenanigans.
return
- if(locs && locs.len > 1) // This is for multi tile objects
- if(loc != oldT)
- return
+ if(loc != oldT) // This is for multi tile objects
+ return
loc = newT
@@ -111,12 +117,22 @@ All ShuttleMove procs go here
if(rotation)
shuttleRotate(rotation)
-
-
update_parallax_contents()
return TRUE
+/atom/movable/proc/lateShuttleMove(turf/oldT, list/movement_force, move_dir)
+ if(!movement_force || anchored)
+ return
+ var/throw_force = movement_force["THROW"]
+ if(!throw_force)
+ return
+ var/turf/target = get_edge_target_turf(src, move_dir)
+ var/range = throw_force * 10
+ range = CEILING(rand(range-(range*0.1), range+(range*0.1)), 10)/10
+ var/speed = range/5
+ throw_at(target, range, speed)
+
/////////////////////////////////////////////////////////////////////////////////////
// Called on areas before anything has been moved
@@ -149,6 +165,9 @@ All ShuttleMove procs go here
parallax_movedir = new_parallax_dir
return TRUE
+/area/proc/lateShuttleMove()
+ return
+
/************************************Turf move procs************************************/
/************************************Area move procs************************************/
@@ -288,17 +307,16 @@ All ShuttleMove procs go here
shake_force *= 0.25
shake_camera(src, shake_force, 1)
-/mob/living/afterShuttleMove(turf/oldT, list/movement_force, shuttle_dir, shuttle_preferred_direction, move_dir, rotation)
+/mob/living/lateShuttleMove(turf/oldT, list/movement_force, move_dir)
+ if(buckled)
+ return
+
. = ..()
- if(movement_force && !buckled)
- if(movement_force["THROW"])
- var/throw_dir = move_dir
- var/turf/target = get_edge_target_turf(src, throw_dir)
- var/range = movement_force["THROW"]
- var/speed = range/5
- src.throw_at(target, range, speed)
- if(movement_force["KNOCKDOWN"])
- Knockdown(movement_force["KNOCKDOWN"])
+
+ var/knockdown = movement_force["KNOCKDOWN"]
+ if(knockdown)
+ Knockdown(knockdown)
+
/mob/living/simple_animal/hostile/megafauna/onShuttleMove(turf/newT, turf/oldT, list/movement_force, move_dir, obj/docking_port/stationary/old_dock, obj/docking_port/mobile/moving_dock)
. = ..()
diff --git a/code/modules/shuttle/shuttle_rotate.dm b/code/modules/shuttle/shuttle_rotate.dm
index cc69fb5d15..a2159a50fd 100644
--- a/code/modules/shuttle/shuttle_rotate.dm
+++ b/code/modules/shuttle/shuttle_rotate.dm
@@ -25,7 +25,7 @@ If ever any of these procs are useful for non-shuttles, rename it to proc/rotate
pixel_x = oldPY
pixel_y = (oldPX*(-1))
- SendSignal(COMSIG_ATOM_ROTATE, rotation, params)
+ SEND_SIGNAL(src, COMSIG_ATOM_ROTATE, rotation, params)
/************************************Turf rotate procs************************************/
diff --git a/code/modules/shuttle/special.dm b/code/modules/shuttle/special.dm
index abe601e503..0f005f69f7 100644
--- a/code/modules/shuttle/special.dm
+++ b/code/modules/shuttle/special.dm
@@ -165,7 +165,7 @@
var/datum/job/captain/C = new /datum/job/captain
access_card.access = C.get_access()
access_card.access |= ACCESS_CENT_BAR
- access_card.flags_1 |= NODROP_1
+ access_card.item_flags |= NODROP
/mob/living/simple_animal/hostile/alien/maid/barmaid/Destroy()
qdel(access_card)
diff --git a/code/modules/shuttle/supply.dm b/code/modules/shuttle/supply.dm
index 773b35544c..1cf12e6d42 100644
--- a/code/modules/shuttle/supply.dm
+++ b/code/modules/shuttle/supply.dm
@@ -13,7 +13,7 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list(
/obj/machinery/clonepod,
/obj/effect/mob_spawn,
/obj/effect/hierophant,
- /obj/structure/recieving_pad,
+ /obj/structure/receiving_pad,
/obj/effect/clockwork/spatial_gateway,
/obj/structure/destructible/clockwork/powered/clockwork_obelisk,
/obj/item/warp_cube,
diff --git a/code/modules/spells/spell.dm b/code/modules/spells/spell.dm
index 4d92878cc2..4e6ef7ed9b 100644
--- a/code/modules/spells/spell.dm
+++ b/code/modules/spells/spell.dm
@@ -373,7 +373,7 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) //needed for th
if("unconscious")
target.AdjustUnconscious(amount)
else
- target.vars[type] += amount //I bear no responsibility for the runtimes that'll happen if you try to adjust non-numeric or even non-existant vars
+ target.vars[type] += amount //I bear no responsibility for the runtimes that'll happen if you try to adjust non-numeric or even non-existent vars
/obj/effect/proc_holder/spell/targeted //can mean aoe for mobs (limited/unlimited number) or one target mob
var/max_targets = 1 //leave 0 for unlimited targets in range, 1 for one selectable target in range, more for limited number of casts (can all target one guy, depends on target_ignore_prev) in range
diff --git a/code/modules/spells/spell_types/barnyard.dm b/code/modules/spells/spell_types/barnyard.dm
index 70b33919b7..01b24fef98 100644
--- a/code/modules/spells/spell_types/barnyard.dm
+++ b/code/modules/spells/spell_types/barnyard.dm
@@ -44,7 +44,7 @@
var/choice = masks[randM]
var/obj/item/clothing/mask/magichead = new choice
- magichead.flags_1 |= NODROP_1
+ magichead.item_flags |= NODROP
magichead.flags_inv = null
target.visible_message("[target]'s face bursts into flames, and a barnyard animal's head takes its place!", \
"Your face burns up, and shortly after the fire you realise you have the face of a barnyard animal!")
diff --git a/code/modules/spells/spell_types/construct_spells.dm b/code/modules/spells/spell_types/construct_spells.dm
index ff71ad8e68..8e1957f524 100644
--- a/code/modules/spells/spell_types/construct_spells.dm
+++ b/code/modules/spells/spell_types/construct_spells.dm
@@ -220,7 +220,7 @@
/obj/effect/proc_holder/spell/targeted/dominate
name = "Dominate"
- desc = "This spell dominates the mind of a lesser creature, causing it to see you as an ally."
+ desc = "This spell dominates the mind of a lesser creature to the will of Nar'sie, allying it only to her direct followers."
charge_max = 600
range = 7
diff --git a/code/modules/spells/spell_types/godhand.dm b/code/modules/spells/spell_types/godhand.dm
index bf402b7a6a..27cfc9208b 100644
--- a/code/modules/spells/spell_types/godhand.dm
+++ b/code/modules/spells/spell_types/godhand.dm
@@ -7,7 +7,7 @@
icon = 'icons/obj/items_and_weapons.dmi'
icon_state = "syndballoon"
item_state = null
- flags_1 = ABSTRACT_1 | NODROP_1 | DROPDEL_1
+ item_flags = NEEDS_PERMIT | ABSTRACT | NODROP | DROPDEL
w_class = WEIGHT_CLASS_HUGE
force = 0
throwforce = 0
@@ -60,10 +60,7 @@
target.visible_message("[target]'s [A] glows brightly as it wards off the spell!")
user.visible_message("The feedback blows [user]'s arm off!","The spell bounces from [M]'s skin back into your arm!")
user.flash_act()
- var/obj/item/bodypart/part
- var/index = user.get_held_index_of_item(src)
- if(index)
- part = user.hand_bodyparts[index]
+ var/obj/item/bodypart/part = user.get_holding_bodypart_of_item(src)
if(part)
part.dismember()
..()
diff --git a/code/modules/spells/spell_types/lichdom.dm b/code/modules/spells/spell_types/lichdom.dm
index 33b555ad21..d88ee7fb22 100644
--- a/code/modules/spells/spell_types/lichdom.dm
+++ b/code/modules/spells/spell_types/lichdom.dm
@@ -31,10 +31,10 @@
var/obj/item/marked_item
- for(var/obj/item in hand_items)
+ for(var/obj/item/item in hand_items)
// I ensouled the nuke disk once. But it's probably a really
// mean tactic, so probably should discourage it.
- if((item.flags_1 & ABSTRACT_1) || (item.flags_1 & NODROP_1) || item.SendSignal(COMSIG_ITEM_IMBUE_SOUL, user))
+ if((item.item_flags & ABSTRACT) || (item.item_flags & NODROP) || SEND_SIGNAL(item, COMSIG_ITEM_IMBUE_SOUL, user))
continue
marked_item = item
to_chat(M, "You begin to focus your very being into [item]...")
diff --git a/code/modules/spells/spell_types/mime.dm b/code/modules/spells/spell_types/mime.dm
index 2b904df277..e3177dbb4f 100644
--- a/code/modules/spells/spell_types/mime.dm
+++ b/code/modules/spells/spell_types/mime.dm
@@ -58,9 +58,9 @@
H.mind.miming=!H.mind.miming
if(H.mind.miming)
to_chat(H, "You make a vow of silence.")
- H.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "vow")
+ SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "vow")
else
- H.SendSignal(COMSIG_ADD_MOOD_EVENT, "vow", /datum/mood_event/broken_vow)
+ SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "vow", /datum/mood_event/broken_vow)
to_chat(H, "You break your vow of silence.")
// These spells can only be gotten from the "Guide for Advanced Mimery series" for Mime Traitors.
@@ -131,17 +131,26 @@
/obj/item/book/granter/spell/mimery_blockade
spell = /obj/effect/proc_holder/spell/targeted/forcewall/mime
- spellname = ""
+ spellname = "Invisible Blockade"
name = "Guide to Advanced Mimery Vol 1"
desc = "The pages don't make any sound when turned."
icon_state ="bookmime"
remarks = list("...")
+/obj/item/book/granter/spell/mimery_blockade/attack_self(mob/user)
+ ..()
+ if(!locate(/obj/effect/proc_holder/spell/targeted/mime/speak) in user.mind.spell_list)
+ user.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/mime/speak)
/obj/item/book/granter/spell/mimery_guns
spell = /obj/effect/proc_holder/spell/aimed/finger_guns
- spellname = ""
+ spellname = "Finger Guns"
name = "Guide to Advanced Mimery Vol 2"
desc = "There aren't any words written..."
icon_state ="bookmime"
remarks = list("...")
+
+/obj/item/book/granter/spell/mimery_guns/attack_self(mob/user)
+ ..()
+ if(!locate(/obj/effect/proc_holder/spell/targeted/mime/speak) in user.mind.spell_list)
+ user.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/mime/speak)
\ No newline at end of file
diff --git a/code/modules/spells/spell_types/summonitem.dm b/code/modules/spells/spell_types/summonitem.dm
index bd5099da68..0bb79eba21 100644
--- a/code/modules/spells/spell_types/summonitem.dm
+++ b/code/modules/spells/spell_types/summonitem.dm
@@ -22,10 +22,10 @@
if(!marked_item) //linking item to the spell
message = ""
- for(var/obj/item in hand_items)
- if(item.flags_1 & ABSTRACT_1)
+ for(var/obj/item/item in hand_items)
+ if(item.item_flags & ABSTRACT)
continue
- if(item.flags_1 & NODROP_1)
+ if(item.item_flags & NODROP)
message += "Though it feels redundant, "
marked_item = item
message += "You mark [item] for recall."
@@ -83,7 +83,7 @@
to_chat(C, "The [item_to_retrieve] that was embedded in your [L] has mysteriously vanished. How fortunate!")
if(!C.has_embedded_objects())
C.clear_alert("embeddedobject")
- C.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "embedded")
+ SEND_SIGNAL(C, COMSIG_CLEAR_MOOD_EVENT, "embedded")
break
else
diff --git a/code/modules/station_goals/dna_vault.dm b/code/modules/station_goals/dna_vault.dm
index 9be68103c3..0601ff28e1 100644
--- a/code/modules/station_goals/dna_vault.dm
+++ b/code/modules/station_goals/dna_vault.dm
@@ -67,7 +67,7 @@
lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
icon_state = "hypo"
- flags_1 = NOBLUDGEON_1
+ item_flags = NOBLUDGEON
var/list/animals = list()
var/list/plants = list()
var/list/dna = list()
diff --git a/code/modules/surgery/bodyparts/dismemberment.dm b/code/modules/surgery/bodyparts/dismemberment.dm
index c806a68867..87e13955fe 100644
--- a/code/modules/surgery/bodyparts/dismemberment.dm
+++ b/code/modules/surgery/bodyparts/dismemberment.dm
@@ -19,7 +19,7 @@
affecting.receive_damage(CLAMP(brute_dam/2, 15, 50), CLAMP(burn_dam/2, 0, 50)) //Damage the chest based on limb's existing damage
C.visible_message("[C]'s [src.name] has been violently dismembered!")
C.emote("scream")
- C.SendSignal(COMSIG_ADD_MOOD_EVENT, "dismembered", /datum/mood_event/dismembered)
+ SEND_SIGNAL(C, COMSIG_ADD_MOOD_EVENT, "dismembered", /datum/mood_event/dismembered)
drop_limb()
if(dam_type == BURN)
@@ -102,7 +102,7 @@
I.forceMove(src)
if(!C.has_embedded_objects())
C.clear_alert("embeddedobject")
- C.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "embedded")
+ SEND_SIGNAL(C, COMSIG_CLEAR_MOOD_EVENT, "embedded")
if(!special)
if(C.dna)
diff --git a/code/modules/surgery/bodyparts/helpers.dm b/code/modules/surgery/bodyparts/helpers.dm
index 12531a9ee5..91336331c4 100644
--- a/code/modules/surgery/bodyparts/helpers.dm
+++ b/code/modules/surgery/bodyparts/helpers.dm
@@ -121,7 +121,7 @@
I.forceMove(T)
clear_alert("embeddedobject")
- SendSignal(COMSIG_CLEAR_MOOD_EVENT, "embedded")
+ SEND_SIGNAL(src, COMSIG_CLEAR_MOOD_EVENT, "embedded")
/mob/living/carbon/proc/has_embedded_objects()
. = 0
diff --git a/code/modules/surgery/cavity_implant.dm b/code/modules/surgery/cavity_implant.dm
index fe4f1a6edf..e57f8f686b 100644
--- a/code/modules/surgery/cavity_implant.dm
+++ b/code/modules/surgery/cavity_implant.dm
@@ -29,9 +29,13 @@
/datum/surgery_step/handle_cavity/success(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery)
var/obj/item/bodypart/chest/CH = target.get_bodypart(BODY_ZONE_CHEST)
if(tool)
- if(IC || tool.w_class > WEIGHT_CLASS_NORMAL || (tool.flags_1 & NODROP_1) || istype(tool, /obj/item/organ))
+ if(IC || tool.w_class > WEIGHT_CLASS_NORMAL || (tool.item_flags & NODROP) || istype(tool, /obj/item/organ))
to_chat(user, "You can't seem to fit [tool] in [target]'s [target_zone]!")
return 0
+ var/obj/item/electronic_assembly/EA = tool
+ if(istype(EA) && EA.combat_circuits && tool.w_class > WEIGHT_CLASS_SMALL)
+ to_chat(user, "[tool] is too dangerous to put in [target]'s [target_zone]! Maybe if it was smaller...")
+ return 0
else
user.visible_message("[user] stuffs [tool] into [target]'s [target_zone]!", "You stuff [tool] into [target]'s [target_zone].")
user.transferItemToLoc(tool, target, TRUE)
diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm
index e93da8b139..ea2385ce5f 100644
--- a/code/modules/surgery/organs/augments_arms.dm
+++ b/code/modules/surgery/organs/augments_arms.dm
@@ -86,7 +86,7 @@
holder = item
- holder.flags_1 |= NODROP_1
+ holder.item_flags |= NODROP
holder.resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
holder.slot_flags = null
holder.materials = null
diff --git a/code/modules/surgery/organs/augments_chest.dm b/code/modules/surgery/organs/augments_chest.dm
index 133fe5d8be..0302dd2cae 100644
--- a/code/modules/surgery/organs/augments_chest.dm
+++ b/code/modules/surgery/organs/augments_chest.dm
@@ -13,7 +13,7 @@
var/hunger_threshold = NUTRITION_LEVEL_STARVING
var/synthesizing = 0
var/poison_amount = 5
- slot = ORGAN_SLOT_STOMACH
+ slot = ORGAN_SLOT_STOMACH_AID
/obj/item/organ/cyberimp/chest/nutriment/on_life()
if(synthesizing)
diff --git a/code/modules/surgery/organs/augments_internal.dm b/code/modules/surgery/organs/augments_internal.dm
index 4aa06f01c6..38967711fe 100644
--- a/code/modules/surgery/organs/augments_internal.dm
+++ b/code/modules/surgery/organs/augments_internal.dm
@@ -51,7 +51,7 @@
active = !active
if(active)
for(var/obj/item/I in owner.held_items)
- if(!(I.flags_1 & NODROP_1))
+ if(!(I.item_flags & NODROP))
stored_items += I
var/list/L = owner.get_empty_held_indexes()
@@ -62,7 +62,7 @@
else
for(var/obj/item/I in stored_items)
to_chat(owner, "Your [owner.get_held_index_name(owner.get_held_index_of_item(I))]'s grip tightens.")
- I.flags_1 |= NODROP_1
+ I.item_flags |= NODROP
else
release_items()
@@ -86,7 +86,7 @@
/obj/item/organ/cyberimp/brain/anti_drop/proc/release_items()
for(var/obj/item/I in stored_items)
- I.flags_1 &= ~NODROP_1
+ I.item_flags &= ~NODROP
stored_items = list()
diff --git a/code/modules/surgery/organs/eyes.dm b/code/modules/surgery/organs/eyes.dm
index 5092b53374..d38e76ae6e 100644
--- a/code/modules/surgery/organs/eyes.dm
+++ b/code/modules/surgery/organs/eyes.dm
@@ -98,7 +98,7 @@
owner.flash_act(visual = 1)
/obj/item/organ/eyes/robotic/xray
- name = "X-ray eyes"
+ name = "\improper X-ray eyes"
desc = "These cybernetic eyes will give you X-ray vision. Blinking is futile."
eye_color = "000"
see_in_dark = 8
diff --git a/code/modules/surgery/organs/lungs.dm b/code/modules/surgery/organs/lungs.dm
index 727033838b..9e53a902a2 100644
--- a/code/modules/surgery/organs/lungs.dm
+++ b/code/modules/surgery/organs/lungs.dm
@@ -267,7 +267,7 @@
H.adjustFireLoss(nitryl_pp/4)
gas_breathed = breath_gases[/datum/gas/nitryl][MOLES]
if (gas_breathed > gas_stimulation_min)
- H.reagents.add_reagent("nitryl_gas",1)
+ H.reagents.add_reagent("no2",1)
breath_gases[/datum/gas/nitryl][MOLES]-=gas_breathed
// Stimulum
diff --git a/code/modules/surgery/organs/stomach.dm b/code/modules/surgery/organs/stomach.dm
index 3ddf658ecd..cb7833a373 100755
--- a/code/modules/surgery/organs/stomach.dm
+++ b/code/modules/surgery/organs/stomach.dm
@@ -39,22 +39,22 @@
switch(H.disgust)
if(0 to DISGUST_LEVEL_GROSS)
H.clear_alert("disgust")
- H.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "disgust")
+ SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "disgust")
if(DISGUST_LEVEL_GROSS to DISGUST_LEVEL_VERYGROSS)
H.throw_alert("disgust", /obj/screen/alert/gross)
- H.SendSignal(COMSIG_ADD_MOOD_EVENT, "disgust", /datum/mood_event/disgust/gross)
+ SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "disgust", /datum/mood_event/disgust/gross)
if(DISGUST_LEVEL_VERYGROSS to DISGUST_LEVEL_DISGUSTED)
H.throw_alert("disgust", /obj/screen/alert/verygross)
- H.SendSignal(COMSIG_ADD_MOOD_EVENT, "disgust", /datum/mood_event/disgust/verygross)
+ SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "disgust", /datum/mood_event/disgust/verygross)
if(DISGUST_LEVEL_DISGUSTED to INFINITY)
H.throw_alert("disgust", /obj/screen/alert/disgusted)
- H.SendSignal(COMSIG_ADD_MOOD_EVENT, "disgust", /datum/mood_event/disgust/disgusted)
+ SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "disgust", /datum/mood_event/disgust/disgusted)
/obj/item/organ/stomach/Remove(mob/living/carbon/M, special = 0)
var/mob/living/carbon/human/H = owner
if(istype(H))
H.clear_alert("disgust")
- H.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "disgust")
+ SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "disgust")
..()
/obj/item/organ/stomach/fly
diff --git a/code/modules/surgery/organs/vocal_cords.dm b/code/modules/surgery/organs/vocal_cords.dm
index 2521037963..48392f70a3 100644
--- a/code/modules/surgery/organs/vocal_cords.dm
+++ b/code/modules/surgery/organs/vocal_cords.dm
@@ -488,7 +488,7 @@
L.lay_down() //aka get up
L.SetStun(0)
L.SetKnockdown(0)
- L.SetUnconscious(0) //i said get up i don't care if you're being tazed
+ L.SetUnconscious(0) //i said get up i don't care if you're being tased
//SIT
else if((findtext(message, sit_words)))
diff --git a/code/modules/surgery/remove_embedded_object.dm b/code/modules/surgery/remove_embedded_object.dm
index 548a73627d..451ae02dac 100644
--- a/code/modules/surgery/remove_embedded_object.dm
+++ b/code/modules/surgery/remove_embedded_object.dm
@@ -30,7 +30,7 @@
L.embedded_objects -= I
if(!H.has_embedded_objects())
H.clear_alert("embeddedobject")
- H.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "embedded")
+ SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "embedded")
if(objects > 0)
user.visible_message("[user] successfully removes [objects] objects from [H]'s [L]!", "You successfully remove [objects] objects from [H]'s [L.name].")
diff --git a/code/modules/tgui/states/default.dm b/code/modules/tgui/states/default.dm
index 0e4844dced..c6741f20b8 100644
--- a/code/modules/tgui/states/default.dm
+++ b/code/modules/tgui/states/default.dm
@@ -7,7 +7,7 @@
GLOBAL_DATUM_INIT(default_state, /datum/ui_state/default, new)
/datum/ui_state/default/can_use_topic(src_object, mob/user)
- return user.default_can_use_topic(src_object) // Call the individual mob-overriden procs.
+ return user.default_can_use_topic(src_object) // Call the individual mob-overridden procs.
/mob/proc/default_can_use_topic(src_object)
return UI_CLOSE // Don't allow interaction by default.
diff --git a/code/modules/uplink/uplink.dm b/code/modules/uplink/uplink.dm
index deacb6d401..4c735a2e3c 100644
--- a/code/modules/uplink/uplink.dm
+++ b/code/modules/uplink/uplink.dm
@@ -27,8 +27,8 @@ GLOBAL_LIST_EMPTY(uplinks)
return COMPONENT_INCOMPATIBLE
GLOB.uplinks += src
uplink_items = get_uplink_items(gamemode, TRUE, allow_restricted)
- RegisterSignal(COMSIG_PARENT_ATTACKBY, .proc/OnAttackBy)
- RegisterSignal(COMSIG_ITEM_ATTACK_SELF, .proc/interact)
+ RegisterSignal(parent, COMSIG_PARENT_ATTACKBY, .proc/OnAttackBy)
+ RegisterSignal(parent, COMSIG_ITEM_ATTACK_SELF, .proc/interact)
owner = _owner
if(owner)
LAZYINITLIST(GLOB.uplink_purchase_logs_by_key)
@@ -178,4 +178,3 @@ GLOBAL_LIST_EMPTY(uplinks)
SSblackbox.record_feedback("nested tally", "traitor_uplink_items_bought", 1, list("[initial(U.name)]", "[U.cost]"))
return TRUE
-
diff --git a/code/modules/uplink/uplink_devices.dm b/code/modules/uplink/uplink_devices.dm
index 79f09c4dbc..2e91879006 100644
--- a/code/modules/uplink/uplink_devices.dm
+++ b/code/modules/uplink/uplink_devices.dm
@@ -1,42 +1,60 @@
-
// A collection of pre-set uplinks, for admin spawns.
-/obj/item/radio/uplink/Initialize(mapload, _owner, _tc_amount = 20)
- . = ..()
+
+// Radio-like uplink; not an actual radio because this uplink is most commonly
+// used for nuke ops, for whom opening the radio GUI and the uplink GUI
+// simultaneously is an annoying distraction.
+/obj/item/uplink
+ name = "station bounced radio"
+ icon = 'icons/obj/radio.dmi'
icon_state = "radio"
+ item_state = "walkietalkie"
+ desc = "A basic handheld radio that communicates with local telecommunication networks."
lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
- AddComponent(/datum/component/uplink, _owner, FALSE, TRUE, null, _tc_amount)
+ dog_fashion = /datum/dog_fashion/back
-/obj/item/radio/uplink/nuclear/Initialize()
+ flags_1 = CONDUCT_1
+ slot_flags = ITEM_SLOT_BELT
+ throw_speed = 3
+ throw_range = 7
+ w_class = WEIGHT_CLASS_SMALL
+
+/obj/item/uplink/Initialize(mapload, owner, tc_amount = 20)
+ . = ..()
+ AddComponent(/datum/component/uplink, owner, FALSE, TRUE, null, tc_amount)
+
+/obj/item/uplink/nuclear/Initialize()
. = ..()
GET_COMPONENT(hidden_uplink, /datum/component/uplink)
hidden_uplink.set_gamemode(/datum/game_mode/nuclear)
-/obj/item/radio/uplink/nuclear_restricted/Initialize()
+/obj/item/uplink/nuclear_restricted/Initialize()
. = ..()
GET_COMPONENT(hidden_uplink, /datum/component/uplink)
hidden_uplink.allow_restricted = FALSE
hidden_uplink.set_gamemode(/datum/game_mode/nuclear)
-/obj/item/radio/uplink/clownop/Initialize()
+/obj/item/uplink/clownop/Initialize()
. = ..()
GET_COMPONENT(hidden_uplink, /datum/component/uplink)
hidden_uplink.set_gamemode(/datum/game_mode/nuclear/clown_ops)
-/obj/item/multitool/uplink/Initialize(mapload, _owner, _tc_amount = 20)
- . = ..()
- AddComponent(/datum/component/uplink, _owner, FALSE, TRUE, null, _tc_amount)
-
-/obj/item/pen/uplink/Initialize(mapload, _owner, _tc_amount = 20)
- . = ..()
- AddComponent(/datum/component/uplink)
- traitor_unlock_degrees = 360
-
-/obj/item/radio/uplink/old
+/obj/item/uplink/old
name = "dusty radio"
desc = "A dusty looking radio."
-/obj/item/radio/uplink/old/Initialize(mapload, _owner, _tc_amount = 10)
+/obj/item/uplink/old/Initialize(mapload, owner, tc_amount = 10)
. = ..()
GET_COMPONENT(hidden_uplink, /datum/component/uplink)
hidden_uplink.name = "dusty radio"
+
+// Multitool uplink
+/obj/item/multitool/uplink/Initialize(mapload, owner, tc_amount = 20)
+ . = ..()
+ AddComponent(/datum/component/uplink, owner, FALSE, TRUE, null, tc_amount)
+
+// Pen uplink
+/obj/item/pen/uplink/Initialize(mapload, owner, tc_amount = 20)
+ . = ..()
+ AddComponent(/datum/component/uplink, owner, TRUE, FALSE, null, tc_amount)
+ traitor_unlock_degrees = 360
diff --git a/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm
index 619e2c8193..a9f2c63e13 100644
--- a/code/modules/uplink/uplink_items.dm
+++ b/code/modules/uplink/uplink_items.dm
@@ -790,7 +790,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
name = "Combat Banana Shoes"
desc = "While making the wearer immune to most slipping attacks like regular combat clown shoes, these shoes \
can generate a large number of synthetic banana peels as the wearer walks, slipping up would-be pursuers. They also \
- squeek significantly louder."
+ squeak significantly louder."
item = /obj/item/clothing/shoes/clown_shoes/banana_shoes/combat
cost = 6
surplus = 0
@@ -1269,7 +1269,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
cost = 8
/datum/uplink_item/cyber_implants/xray
- name = "X-Ray Vision Implant"
+ name = "X-ray Vision Implant"
desc = "These cybernetic eyes will give you X-ray vision. Comes with an autosurgeon."
item = /obj/item/autosurgeon/xray_eyes
cost = 10
diff --git a/code/modules/vending/_vending.dm b/code/modules/vending/_vending.dm
index 89bbee9d60..5a12635963 100644
--- a/code/modules/vending/_vending.dm
+++ b/code/modules/vending/_vending.dm
@@ -1,7 +1,3 @@
-#define STANDARD_CHARGE 1
-#define CONTRABAND_CHARGE 2
-#define COIN_CHARGE 3
-
/*
* Vending machine types - Can be found under /code/modules/vending/
*/
@@ -21,7 +17,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
*/
/datum/data/vending_product
- var/product_name = "generic"
+ name = "generic"
var/product_path = null
var/amount = 0
var/max_amount = 0
@@ -74,7 +70,6 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
var/dish_quants = list() //used by the snack machine's custom compartment to count dishes.
var/obj/item/vending_refill/refill_canister = null //The type of refill canisters used by this machine.
- var/refill_count = 3 //The number of canisters the vending machine uses
/obj/machinery/vending/Initialize()
var/build_inv = FALSE
@@ -84,9 +79,9 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
. = ..()
wires = new /datum/wires/vending(src)
if(build_inv) //non-constructable vending machine
- build_inventory(products)
- build_inventory(contraband, 1)
- build_inventory(premium, 0, 1)
+ build_inventory(products, product_records)
+ build_inventory(contraband, hidden_records)
+ build_inventory(premium, coin_records)
slogan_list = splittext(product_slogans, ";")
// So not all machines speak at the exact same time.
@@ -102,17 +97,17 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
return ..()
/obj/machinery/vending/RefreshParts() //Better would be to make constructable child
- if(component_parts)
- product_records = list()
- hidden_records = list()
- coin_records = list()
- build_inventory(products, start_empty = 1)
- build_inventory(contraband, 1, start_empty = 1)
- build_inventory(premium, 0, 1, start_empty = 1)
- for(var/obj/item/vending_refill/VR in component_parts)
- refill_inventory(VR, product_records, STANDARD_CHARGE)
- refill_inventory(VR, coin_records, COIN_CHARGE)
- refill_inventory(VR, hidden_records, CONTRABAND_CHARGE)
+ if(!component_parts)
+ return
+
+ product_records = list()
+ hidden_records = list()
+ coin_records = list()
+ build_inventory(products, product_records, start_empty = TRUE)
+ build_inventory(contraband, hidden_records, start_empty = TRUE)
+ build_inventory(premium, coin_records, start_empty = TRUE)
+ for(var/obj/item/vending_refill/VR in component_parts)
+ restock(VR)
/obj/machinery/vending/deconstruct(disassembled = TRUE)
if(!refill_canister) //the non constructable vendors drop metal instead of a machine frame.
@@ -124,25 +119,33 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
/obj/machinery/vending/obj_break(damage_flag)
if(!(stat & BROKEN) && !(flags_1 & NODECONSTRUCT_1))
- var/dump_amount = 0
- for(var/datum/data/vending_product/R in product_records)
- if(R.amount <= 0) //Try to use a record that actually has something to dump.
- continue
- var/dump_path = R.product_path
- if(!dump_path)
- continue
-
- while(R.amount>0)
- var/obj/O = new dump_path(loc)
- step(O, pick(GLOB.alldirs)) //we only drop 20% of the total of each products and spread it
- R.amount -= 5 //around to not fill the turf with too many objects.
- dump_amount++
- if(dump_amount > 15) //so we don't drop too many items (e.g. ClothesMate)
- break
stat |= BROKEN
icon_state = "[initial(icon_state)]-broken"
-/obj/machinery/vending/proc/build_inventory(list/productlist, hidden=0, req_coin=0, start_empty = null)
+ var/dump_amount = 0
+ var/found_anything = TRUE
+ while (found_anything)
+ found_anything = FALSE
+ for(var/record in shuffle(product_records))
+ var/datum/data/vending_product/R = record
+ if(R.amount <= 0) //Try to use a record that actually has something to dump.
+ continue
+ var/dump_path = R.product_path
+ if(!dump_path)
+ continue
+ R.amount--
+ // busting open a vendor will destroy some of the contents
+ if(found_anything && prob(80))
+ continue
+
+ var/obj/O = new dump_path(loc)
+ step(O, pick(GLOB.alldirs))
+ found_anything = TRUE
+ dump_amount++
+ if (dump_amount >= 16)
+ return
+
+/obj/machinery/vending/proc/build_inventory(list/productlist, list/recordlist, start_empty = FALSE)
for(var/typepath in productlist)
var/amount = productlist[typepath]
if(isnull(amount))
@@ -150,47 +153,54 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
var/atom/temp = typepath
var/datum/data/vending_product/R = new /datum/data/vending_product()
- R.product_name = initial(temp.name)
+ R.name = initial(temp.name)
R.product_path = typepath
if(!start_empty)
R.amount = amount
R.max_amount = amount
- R.display_color = pick("red","blue","green")
+ R.display_color = pick("#ff8080","#80ff80","#8080ff")
+ recordlist += R
- if(hidden)
- hidden_records += R
- else if(req_coin)
- coin_records += R
- else
- product_records += R
+/obj/machinery/vending/proc/restock(obj/item/vending_refill/canister)
+ if (!canister.products)
+ canister.products = products.Copy()
+ if (!canister.contraband)
+ canister.contraband = contraband.Copy()
+ if (!canister.premium)
+ canister.premium = premium.Copy()
+ . = 0
+ . += refill_inventory(canister.products, product_records)
+ . += refill_inventory(canister.contraband, hidden_records)
+ . += refill_inventory(canister.premium, coin_records)
-/obj/machinery/vending/proc/refill_inventory(obj/item/vending_refill/refill, datum/data/vending_product/machine, var/charge_type = STANDARD_CHARGE)
- var/total = 0
- var/to_restock = 0
+/obj/machinery/vending/proc/refill_inventory(list/productlist, list/recordlist)
+ . = 0
+ for(var/R in recordlist)
+ var/datum/data/vending_product/record = R
+ var/diff = min(record.max_amount - record.amount, productlist[record.product_path])
+ if (diff)
+ productlist[record.product_path] -= diff
+ record.amount += diff
+ . += diff
- for(var/datum/data/vending_product/machine_content in machine)
- if(machine_content.amount == 0 && refill.charges[charge_type] > 0)
- machine_content.amount++
- refill.charges[charge_type]--
- total++
- to_restock += machine_content.max_amount - machine_content.amount
- if(to_restock <= refill.charges[charge_type])
- for(var/datum/data/vending_product/machine_content in machine)
- machine_content.amount = machine_content.max_amount
- refill.charges[charge_type] -= to_restock
- total += to_restock
- else
- var/tmp_charges = refill.charges[charge_type]
- for(var/datum/data/vending_product/machine_content in machine)
- if(refill.charges[charge_type] == 0)
- break
- var/restock = CEILING(((machine_content.max_amount - machine_content.amount)/to_restock)*tmp_charges, 1)
- if(restock > refill.charges[charge_type])
- restock = refill.charges[charge_type]
- machine_content.amount += restock
- refill.charges[charge_type] -= restock
- total += restock
- return total
+/obj/machinery/vending/proc/update_canister()
+ if (!component_parts)
+ return
+
+ var/obj/item/vending_refill/R = locate() in component_parts
+ if (!R)
+ CRASH("Constructible vending machine did not have a refill canister")
+ return
+
+ R.products = unbuild_inventory(product_records)
+ R.contraband = unbuild_inventory(hidden_records)
+ R.premium = unbuild_inventory(coin_records)
+
+/obj/machinery/vending/proc/unbuild_inventory(list/recordlist)
+ . = list()
+ for(var/R in recordlist)
+ var/datum/data/vending_product/record = R
+ .[record.product_path] += record.amount
/obj/machinery/vending/crowbar_act(mob/living/user, obj/item/I)
if(!component_parts)
@@ -248,46 +258,52 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
bill = new S.type(src, 1)
to_chat(user, "You insert [I] into [src].")
return
- else if(istype(I, refill_canister) && refill_canister != null)
- if(stat & (BROKEN|NOPOWER))
- to_chat(user, "It does nothing.")
- else if(panel_open)
+ else if(refill_canister && istype(I, refill_canister))
+ if (!panel_open)
+ to_chat(user, "You should probably unscrew the service panel first.")
+ else if (stat & (BROKEN|NOPOWER))
+ to_chat(user, "[src] does not respond.")
+ else
//if the panel is open we attempt to refill the machine
var/obj/item/vending_refill/canister = I
- if(canister.charges[STANDARD_CHARGE] == 0)
- to_chat(user, "This [canister.name] is empty!")
+ if(canister.get_part_rating() == 0)
+ to_chat(user, "[canister] is empty!")
else
- var/transfered = refill_inventory(canister,product_records,STANDARD_CHARGE)
- transfered += refill_inventory(canister,coin_records,COIN_CHARGE)
- transfered += refill_inventory(canister,hidden_records,CONTRABAND_CHARGE)
- if(transfered)
- to_chat(user, "You loaded [transfered] items in \the [name].")
+ // instantiate canister if needed
+ var/transferred = restock(canister)
+ if(transferred)
+ to_chat(user, "You loaded [transferred] items in [src].")
else
- to_chat(user, "The [name] is fully stocked.")
+ to_chat(user, "There's nothing to restock!")
return
- else
- to_chat(user, "You should probably unscrew the service panel first.")
else
return ..()
+/obj/machinery/vending/exchange_parts(mob/user, obj/item/storage/part_replacer/W)
+ if(!istype(W))
+ return FALSE
+ if((flags_1 & NODECONSTRUCT_1) && !W.works_from_distance)
+ return FALSE
+ if(!component_parts || !refill_canister)
+ return FALSE
+
+ var/moved = 0
+ if(panel_open || W.works_from_distance)
+ if(W.works_from_distance)
+ display_parts(user)
+ for(var/I in W)
+ if(istype(I, refill_canister))
+ moved += restock(I)
+ else
+ display_parts(user)
+ if(moved)
+ to_chat(user, "[moved] items restocked.")
+ W.play_rped_sound()
+ return TRUE
+
/obj/machinery/vending/on_deconstruction()
- var/product_list = list(product_records, hidden_records, coin_records)
- for(var/i=1, i<=3, i++)
- for(var/datum/data/vending_product/machine_content in product_list[i])
- while(machine_content.amount !=0)
- var/safety = 0 //to avoid infinite loop
- for(var/obj/item/vending_refill/VR in component_parts)
- safety++
- if(VR.charges[i] < VR.init_charges[i])
- VR.charges[i]++
- machine_content.amount--
- if(!machine_content.amount)
- break
- else
- safety--
- if(safety <= 0) // all refill canisters are full
- break
- ..()
+ update_canister()
+ . = ..()
/obj/machinery/vending/emag_act(mob/user)
if(obj_flags & EMAGGED)
@@ -323,7 +339,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
dat += "Vend "
else
dat += "Sold out "
- dat += "[sanitize(R.product_name)]:"
+ dat += "[sanitize(R.name)]:"
dat += " [R.amount]"
dat += ""
dat += ""
@@ -358,17 +374,11 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
to_chat(usr, "There is no money in this machine.")
return
if(coin)
- if(!usr.get_active_held_item())
- usr.put_in_hands(coin)
- else
- coin.forceMove(get_turf(src))
+ usr.put_in_hands(coin)
to_chat(usr, "You remove [coin] from [src].")
coin = null
if(bill)
- if(!usr.get_active_held_item())
- usr.put_in_hands(bill)
- else
- bill.forceMove(get_turf(src))
+ usr.put_in_hands(bill)
to_chat(usr, "You remove [bill] from [src].")
bill = null
@@ -537,7 +547,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
if(!prob(prb))
return FALSE
do_sparks(5, TRUE, src)
- var/tmp/check_range = TRUE
+ var/check_range = TRUE
if(electrocute_mob(user, get_area(src), src, 0.7, check_range))
return TRUE
else
@@ -545,7 +555,3 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
/obj/machinery/vending/onTransitZ()
return
-
-#undef STANDARD_CHARGE
-#undef CONTRABAND_CHARGE
-#undef COIN_CHARGE
diff --git a/code/modules/vending/autodrobe.dm b/code/modules/vending/autodrobe.dm
index c0cfe661d7..95211a9600 100644
--- a/code/modules/vending/autodrobe.dm
+++ b/code/modules/vending/autodrobe.dm
@@ -3,7 +3,7 @@
desc = "A vending machine for costumes."
icon_state = "theater"
icon_deny = "theater-deny"
- req_access_txt = "46" //Theatre access needed, unless hacked.
+ req_access = list(ACCESS_THEATRE)
product_slogans = "Dress for success!;Suited and booted!;It's show time!;Why leave style up to fate? Use AutoDrobe!"
vend_reply = "Thank you for using AutoDrobe!"
products = list(/obj/item/clothing/suit/chickensuit = 1,
@@ -115,15 +115,17 @@
premium = list(/obj/item/clothing/suit/pirate/captain = 2,
/obj/item/clothing/head/pirate/captain = 2,
/obj/item/clothing/head/helmet/roman/fake = 1,
- /obj/item/clothing/head/helmet/roman/legionaire/fake = 1,
+ /obj/item/clothing/head/helmet/roman/legionnaire/fake = 1,
/obj/item/clothing/under/roman = 1,
/obj/item/clothing/shoes/roman = 1,
/obj/item/shield/riot/roman/fake = 1,
/obj/item/skub = 1)
refill_canister = /obj/item/vending_refill/autodrobe
+/obj/machinery/vending/autodrobe/all_access
+ desc = "A vending machine for costumes. This model appears to have no access restrictions."
+ req_access = null
+
/obj/item/vending_refill/autodrobe
machine_name = "AutoDrobe"
icon_state = "refill_costume"
- charges = list(32, 2, 3)// of 96 standard, 6 contraband, 9 premium
- init_charges = list(32, 2, 3)
diff --git a/code/modules/vending/boozeomat.dm b/code/modules/vending/boozeomat.dm
index f5f7bf1d9d..0d193c451d 100644
--- a/code/modules/vending/boozeomat.dm
+++ b/code/modules/vending/boozeomat.dm
@@ -16,7 +16,6 @@
/obj/item/reagent_containers/food/drinks/bottle/absinthe = 5,
/obj/item/reagent_containers/food/drinks/bottle/grappa = 5,
/obj/item/reagent_containers/food/drinks/bottle/sake = 5,
- /obj/item/reagent_containers/food/drinks/bottle/fernet = 5,
/obj/item/reagent_containers/food/drinks/ale = 6,
/obj/item/reagent_containers/food/drinks/bottle/orangejuice = 4,
/obj/item/reagent_containers/food/drinks/bottle/tomatojuice = 4,
@@ -32,13 +31,18 @@
/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass = 12,
/obj/item/reagent_containers/food/drinks/flask = 3,
/obj/item/reagent_containers/food/drinks/beer = 6)
- contraband = list(/obj/item/reagent_containers/food/drinks/mug/tea = 12)
+ contraband = list(/obj/item/reagent_containers/food/drinks/mug/tea = 12,
+ /obj/item/reagent_containers/food/drinks/bottle/fernet = 5)
product_slogans = "I hope nobody asks me for a bloody cup o' tea...;Alcohol is humanity's friend. Would you abandon a friend?;Quite delighted to serve you!;Is nobody thirsty on this station?"
product_ads = "Drink up!;Booze is good for you!;Alcohol is humanity's best friend.;Quite delighted to serve you!;Care for a nice, cold beer?;Nothing cures you like booze!;Have a sip!;Have a drink!;Have a beer!;Beer is good for you!;Only the finest alcohol!;Best quality booze since 2053!;Award-winning wine!;Maximum alcohol!;Man loves beer.;A toast for progress!"
- req_access_txt = "25"
+ req_access = list(ACCESS_BAR)
refill_canister = /obj/item/vending_refill/boozeomat
-/obj/machinery/vending/boozeomat/maint
+/obj/machinery/vending/boozeomat/all_access
+ desc = "A technological marvel, supposedly able to mix just the mixture you'd like to drink the moment you ask for one. This model appears to have no access restrictions."
+ req_access = null
+
+/obj/machinery/vending/boozeomat/pubby_maint //abandoned bar on Pubbystation
products = list(/obj/item/reagent_containers/food/drinks/bottle/whiskey = 1,
/obj/item/reagent_containers/food/drinks/bottle/absinthe = 1,
/obj/item/reagent_containers/food/drinks/bottle/limejuice = 1,
@@ -48,10 +52,17 @@
/obj/item/reagent_containers/food/drinks/ice = 3,
/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass = 6,
/obj/item/reagent_containers/food/drinks/flask = 1)
- req_access_txt = "0"
+ req_access = null
+
+/obj/machinery/vending/boozeomat/pubby_captain //Captain's quarters on Pubbystation
+ products = list(/obj/item/reagent_containers/food/drinks/bottle/rum = 1,
+ /obj/item/reagent_containers/food/drinks/bottle/wine = 1,
+ /obj/item/reagent_containers/food/drinks/ale = 1,
+ /obj/item/reagent_containers/food/drinks/drinkingglass = 6,
+ /obj/item/reagent_containers/food/drinks/ice = 1,
+ /obj/item/reagent_containers/food/drinks/drinkingglass/shotglass = 4);
+ req_access = list(ACCESS_CAPTAIN)
/obj/item/vending_refill/boozeomat
machine_name = "Booze-O-Mat"
icon_state = "refill_booze"
- charges = list(61, 4, 0)//of 182 standard, 12 contraband
- init_charges = list(61, 4, 0)
diff --git a/code/modules/vending/cigarette.dm b/code/modules/vending/cigarette.dm
index d81a0a01a6..6b9334362d 100644
--- a/code/modules/vending/cigarette.dm
+++ b/code/modules/vending/cigarette.dm
@@ -41,8 +41,6 @@
/obj/item/vending_refill/cigarette
machine_name = "ShadyCigs Deluxe"
icon_state = "refill_smoke"
- charges = list(12, 3, 2)// of 36 standard, 9 contraband, 6 premium
- init_charges = list(12, 3, 2)
/obj/machinery/vending/cigarette/pre_throw(obj/item/I)
if(istype(I, /obj/item/lighter))
diff --git a/code/modules/vending/clothesmate.dm b/code/modules/vending/clothesmate.dm
index ad5b38575c..80e422c6a0 100644
--- a/code/modules/vending/clothesmate.dm
+++ b/code/modules/vending/clothesmate.dm
@@ -119,5 +119,3 @@
/obj/item/vending_refill/clothing
machine_name = "ClothesMate"
icon_state = "refill_clothes"
- charges = list(38, 4, 4)// of 112 standard, 12 contraband, 10 premium(?)
- init_charges = list(38, 4, 4)
diff --git a/code/modules/vending/coffee.dm b/code/modules/vending/coffee.dm
index d70cf4ae76..6ac9dd648d 100644
--- a/code/modules/vending/coffee.dm
+++ b/code/modules/vending/coffee.dm
@@ -4,8 +4,8 @@
product_ads = "Have a drink!;Drink up!;It's good for you!;Would you like a hot joe?;I'd kill for some coffee!;The best beans in the galaxy.;Only the finest brew for you.;Mmmm. Nothing like a coffee.;I like coffee, don't you?;Coffee helps you work!;Try some tea.;We hope you like the best!;Try our new chocolate!;Admin conspiracies"
icon_state = "coffee"
icon_vend = "coffee-vend"
- products = list(/obj/item/reagent_containers/food/drinks/coffee = 25,
- /obj/item/reagent_containers/food/drinks/mug/tea = 25,
+ products = list(/obj/item/reagent_containers/food/drinks/coffee = 25,
+ /obj/item/reagent_containers/food/drinks/mug/tea = 25,
/obj/item/reagent_containers/food/drinks/mug/coco = 25)
contraband = list(/obj/item/reagent_containers/food/drinks/ice = 12)
refill_canister = /obj/item/vending_refill/coffee
@@ -13,5 +13,3 @@
/obj/item/vending_refill/coffee
machine_name = "Solar's Best Hot Drinks"
icon_state = "refill_joe"
- charges = list(25, 4, 0)//of 75 standard, 12 contraband
- init_charges = list(25, 4, 0)
diff --git a/code/modules/vending/cola.dm b/code/modules/vending/cola.dm
index e675b29f81..f61c392ff7 100644
--- a/code/modules/vending/cola.dm
+++ b/code/modules/vending/cola.dm
@@ -22,8 +22,6 @@
/obj/item/vending_refill/cola
machine_name = "Robust Softdrinks"
icon_state = "refill_cola"
- charges = list(30, 4, 1)//of 90 standard, 12 contraband, 1 premium
- init_charges = list(30, 4, 1)
/obj/machinery/vending/cola/random
name = "\improper Random Drinkies"
diff --git a/code/modules/vending/engineering.dm b/code/modules/vending/engineering.dm
index 5933ab8fa9..d36f4a4849 100644
--- a/code/modules/vending/engineering.dm
+++ b/code/modules/vending/engineering.dm
@@ -4,7 +4,7 @@
desc = "Everything you need for do-it-yourself station repair."
icon_state = "engi"
icon_deny = "engi-deny"
- req_access_txt = "11"
+ req_access = list(ACCESS_ENGINE_EQUIP)
products = list(/obj/item/clothing/under/rank/chief_engineer = 4,
/obj/item/clothing/under/rank/engineer = 4,
/obj/item/clothing/shoes/sneakers/orange = 4,
diff --git a/code/modules/vending/engivend.dm b/code/modules/vending/engivend.dm
index 53106c09a6..0e64e0a367 100644
--- a/code/modules/vending/engivend.dm
+++ b/code/modules/vending/engivend.dm
@@ -3,7 +3,7 @@
desc = "Spare tool vending. What? Did you expect some witty description?"
icon_state = "engivend"
icon_deny = "engivend-deny"
- req_access_txt = "11" //Engineering Equipment access
+ req_access = list(ACCESS_ENGINE_EQUIP)
products = list(/obj/item/clothing/glasses/meson/engine = 2,
/obj/item/clothing/glasses/welding = 3,
/obj/item/multitool = 4,
diff --git a/code/modules/vending/games.dm b/code/modules/vending/games.dm
index f76f67af46..4e4d336567 100644
--- a/code/modules/vending/games.dm
+++ b/code/modules/vending/games.dm
@@ -1,7 +1,7 @@
/obj/machinery/vending/games
name = "\improper Good Clean Fun"
desc = "Vends things that the Captain and Head of Personnel are probably not going to appreciate you fiddling with instead of your job..."
- product_ads = "Escape to a fantasy world!;Fuel your gambling addiction!;Ruin your friendships!;Roll for initative!;Elves and dwarves!;Paranoid computers!;Totally not satanic!;Fun times forever!"
+ product_ads = "Escape to a fantasy world!;Fuel your gambling addiction!;Ruin your friendships!;Roll for initiative!;Elves and dwarves!;Paranoid computers!;Totally not satanic!;Fun times forever!"
icon_state = "games"
products = list(/obj/item/toy/cards/deck = 5,
/obj/item/storage/pill_bottle/dice = 10,
@@ -13,5 +13,3 @@
/obj/item/vending_refill/games
machine_name = "\improper Good Clean Fun"
icon_state = "refill_games"
- charges = list(7, 3, 0) //of 21 standard, 9 contraband
- init_charges = list(7, 3, 0)
diff --git a/code/modules/vending/liberation.dm b/code/modules/vending/liberation.dm
index 6eafafb164..8415eff69f 100644
--- a/code/modules/vending/liberation.dm
+++ b/code/modules/vending/liberation.dm
@@ -2,11 +2,14 @@
name = "\improper Liberation Station"
desc = "An overwhelming amount of ancient patriotism washes over you just by looking at the machine."
icon_state = "liberationstation"
- req_access_txt = "1"
product_slogans = "Liberation Station: Your one-stop shop for all things second ammendment!;Be a patriot today, pick up a gun!;Quality weapons for cheap prices!;Better dead than red!"
product_ads = "Float like an astronaut, sting like a bullet!;Express your second ammendment today!;Guns don't kill people, but you can!;Who needs responsibilities when you have guns?"
vend_reply = "Remember the name: Liberation Station!"
- products = list(/obj/item/gun/ballistic/automatic/pistol/deagle/gold = 2,
+ products = list(/obj/item/reagent_containers/food/snacks/burger/plain = 5, //O say can you see, by the dawn's early light
+ /obj/item/reagent_containers/food/snacks/burger/baseball = 3, //What so proudly we hailed at the twilight's last gleaming
+ /obj/item/reagent_containers/food/snacks/fries = 5, //Whose broad stripes and bright stars through the perilous fight
+ /obj/item/reagent_containers/food/drinks/beer/light = 10, //O'er the ramparts we watched, were so gallantly streaming?
+ /obj/item/gun/ballistic/automatic/pistol/deagle/gold = 2,
/obj/item/gun/ballistic/automatic/pistol/deagle/camo = 2,
/obj/item/gun/ballistic/automatic/pistol/m1911 = 2,
/obj/item/gun/ballistic/automatic/proto/unrestricted = 2,
@@ -17,8 +20,11 @@
premium = list(/obj/item/ammo_box/magazine/smgm9mm = 2,
/obj/item/ammo_box/magazine/m50 = 4,
/obj/item/ammo_box/magazine/m45 = 2,
- /obj/item/ammo_box/magazine/m75 = 2)
- contraband = list(/obj/item/clothing/under/patriotsuit = 1,
- /obj/item/bedsheet/patriot = 3)
+ /obj/item/ammo_box/magazine/m75 = 2,
+ /obj/item/reagent_containers/food/snacks/cheesyfries = 5,
+ /obj/item/reagent_containers/food/snacks/burger/baconburger = 5) //Premium burgers for the premium section
+ contraband = list(/obj/item/clothing/under/patriotsuit = 3,
+ /obj/item/bedsheet/patriot = 5,
+ /obj/item/reagent_containers/food/snacks/burger/superbite = 3) //U S A
armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50)
resistance_flags = FIRE_PROOF
diff --git a/code/modules/vending/liberation_toy.dm b/code/modules/vending/liberation_toy.dm
index c912d3dd3e..3b387f6959 100644
--- a/code/modules/vending/liberation_toy.dm
+++ b/code/modules/vending/liberation_toy.dm
@@ -2,8 +2,7 @@
name = "\improper Syndicate Donksoft Toy Vendor"
desc = "An ages 8 and up approved vendor that dispenses toys. If you were to find the right wires, you can unlock the adult mode setting!"
icon_state = "syndi"
- req_access_txt = "1"
- product_slogans = "Get your cool toys today!;Trigger a valid hunter today!;Quality toy weapons for cheap prices!;Give them to HoPs for all access!;Give them to HoS to get perma briged!"
+ product_slogans = "Get your cool toys today!;Trigger a valid hunter today!;Quality toy weapons for cheap prices!;Give them to HoPs for all access!;Give them to HoS to get permabrigged!"
product_ads = "Feel robust with your toys!;Express your inner child today!;Toy weapons don't kill people, but valid hunters do!;Who needs responsibilities when you have toy weapons?;Make your next murder FUN!"
vend_reply = "Come back for more!"
circuit = /obj/item/circuitboard/machine/vending/syndicatedonksofttoyvendor
diff --git a/code/modules/vending/medical.dm b/code/modules/vending/medical.dm
index b1a5edb867..bea449845c 100644
--- a/code/modules/vending/medical.dm
+++ b/code/modules/vending/medical.dm
@@ -4,25 +4,25 @@
icon_state = "med"
icon_deny = "med-deny"
product_ads = "Go save some lives!;The best stuff for your medbay.;Only the finest tools.;Natural chemicals!;This stuff saves lives.;Don't you want some?;Ping!"
- req_access_txt = "5"
- products = list(/obj/item/reagent_containers/syringe = 12,
- /obj/item/reagent_containers/dropper = 3,
- /obj/item/healthanalyzer = 4,
- /obj/item/sensor_device = 2,
+ req_access = list(ACCESS_MEDICAL)
+ products = list(/obj/item/reagent_containers/syringe = 12,
+ /obj/item/reagent_containers/dropper = 3,
+ /obj/item/healthanalyzer = 4,
+ /obj/item/sensor_device = 2,
/obj/item/pinpointer/crew = 2,
/obj/item/reagent_containers/medspray/sterilizine = 1,
- /obj/item/stack/medical/gauze = 8,
- /obj/item/reagent_containers/pill/patch/styptic = 5,
- /obj/item/reagent_containers/medspray/styptic = 2,
- /obj/item/reagent_containers/pill/patch/silver_sulf = 5,
+ /obj/item/stack/medical/gauze = 8,
+ /obj/item/reagent_containers/pill/patch/styptic = 5,
+ /obj/item/reagent_containers/medspray/styptic = 2,
+ /obj/item/reagent_containers/pill/patch/silver_sulf = 5,
/obj/item/reagent_containers/medspray/silver_sulf = 2,
/obj/item/reagent_containers/pill/insulin = 10,
- /obj/item/reagent_containers/pill/salbutamol = 2,
- /obj/item/reagent_containers/glass/bottle/charcoal = 4,
- /obj/item/reagent_containers/glass/bottle/epinephrine = 4,
+ /obj/item/reagent_containers/pill/salbutamol = 2,
+ /obj/item/reagent_containers/glass/bottle/charcoal = 4,
+ /obj/item/reagent_containers/glass/bottle/epinephrine = 4,
/obj/item/reagent_containers/glass/bottle/salglu_solution = 3,
- /obj/item/reagent_containers/glass/bottle/morphine = 4,
- /obj/item/reagent_containers/glass/bottle/toxin = 3,
+ /obj/item/reagent_containers/glass/bottle/morphine = 4,
+ /obj/item/reagent_containers/glass/bottle/toxin = 3,
/obj/item/reagent_containers/syringe/antiviral = 6)
contraband = list(/obj/item/reagent_containers/pill/tox = 3,
/obj/item/reagent_containers/pill/morphine = 4,
@@ -36,7 +36,5 @@
refill_canister = /obj/item/vending_refill/medical
/obj/item/vending_refill/medical
- machine_name = "NanoMed"
+ machine_name = "NanoMed Plus"
icon_state = "refill_medical"
- charges = list(26, 5, 3)// of 76 standard, 13 contraband, 8 premium
- init_charges = list(26, 5, 3)
diff --git a/code/modules/vending/medical_wall.dm b/code/modules/vending/medical_wall.dm
index 6b5005eee4..ef19ce3b9b 100644
--- a/code/modules/vending/medical_wall.dm
+++ b/code/modules/vending/medical_wall.dm
@@ -15,5 +15,8 @@
/obj/item/reagent_containers/pill/morphine = 2)
armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50)
resistance_flags = FIRE_PROOF
- refill_canister = /obj/item/vending_refill/medical
- refill_count = 1
+ refill_canister = /obj/item/vending_refill/wallmed
+
+/obj/item/vending_refill/wallmed
+ machine_name = "NanoMed"
+ icon_state = "refill_medical"
diff --git a/code/modules/vending/robotics.dm b/code/modules/vending/robotics.dm
index 8c577d47c1..4832aa7ad7 100644
--- a/code/modules/vending/robotics.dm
+++ b/code/modules/vending/robotics.dm
@@ -4,7 +4,7 @@
desc = "All the tools you need to create your own robot army."
icon_state = "robotics"
icon_deny = "robotics-deny"
- req_access_txt = "29"
+ req_access = list(ACCESS_ROBOTICS)
products = list(/obj/item/clothing/suit/toggle/labcoat = 4,
/obj/item/clothing/under/rank/roboticist = 4,
/obj/item/stack/cable_coil = 4,
diff --git a/code/modules/vending/security.dm b/code/modules/vending/security.dm
index 3f3035f9e4..7e90a5ce18 100644
--- a/code/modules/vending/security.dm
+++ b/code/modules/vending/security.dm
@@ -4,7 +4,7 @@
product_ads = "Crack capitalist skulls!;Beat some heads in!;Don't forget - harm is good!;Your weapons are right here.;Handcuffs!;Freeze, scumbag!;Don't tase me bro!;Tase them, bro.;Why not have a donut?"
icon_state = "sec"
icon_deny = "sec-deny"
- req_access_txt = "1"
+ req_access = list(ACCESS_SECURITY)
products = list(/obj/item/restraints/handcuffs = 8,
/obj/item/restraints/handcuffs/cable/zipties = 10,
/obj/item/grenade/flashbang = 4,
diff --git a/code/modules/vending/snack.dm b/code/modules/vending/snack.dm
index 8fcd189a4f..69e510ad5a 100644
--- a/code/modules/vending/snack.dm
+++ b/code/modules/vending/snack.dm
@@ -13,12 +13,10 @@
/obj/item/reagent_containers/food/snacks/cheesiehonkers = 6)
contraband = list(/obj/item/reagent_containers/food/snacks/syndicake = 6)
refill_canister = /obj/item/vending_refill/snack
- var/chef_compartment_access = "28"
+ var/chef_compartment_access = "28" //ACCESS_KITCHEN
/obj/item/vending_refill/snack
machine_name = "Getmore Chocolate Corp"
- charges = list(12, 2, 0)//of 36 standard, 6 contraband
- init_charges = list(12, 2, 0)
/obj/machinery/vending/snack/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/reagent_containers/food/snacks))
@@ -44,7 +42,7 @@
if(iscompartmentfull(user))
break
if(!S.junkiness)
- T.SendSignal(COMSIG_TRY_STORAGE_TAKE, S, src, TRUE)
+ SEND_SIGNAL(T, COMSIG_TRY_STORAGE_TAKE, S, src, TRUE)
food_load(S)
loaded++
else
diff --git a/code/modules/vending/toys.dm b/code/modules/vending/toys.dm
index fc2f9c59b9..08bb4615bb 100644
--- a/code/modules/vending/toys.dm
+++ b/code/modules/vending/toys.dm
@@ -2,24 +2,26 @@
name = "\improper Donksoft Toy Vendor"
desc = "Ages 8 and up approved vendor that dispenses toys."
icon_state = "syndi"
- product_slogans = "Get your cool toys today!;Trigger a valid hunter today!;Quality toy weapons for cheap prices!;Give them to HoPs for all access!;Give them to HoS to get perma briged!"
+ product_slogans = "Get your cool toys today!;Trigger a valid hunter today!;Quality toy weapons for cheap prices!;Give them to HoPs for all access!;Give them to HoS to get permabrigged!"
product_ads = "Feel robust with your toys!;Express your inner child today!;Toy weapons don't kill people, but valid hunters do!;Who needs responsibilities when you have toy weapons?;Make your next murder FUN!"
vend_reply = "Come back for more!"
circuit = /obj/item/circuitboard/machine/vending/donksofttoyvendor
- products = list(/obj/item/gun/ballistic/automatic/toy/unrestricted = 10,
- /obj/item/gun/ballistic/automatic/toy/pistol/unrestricted = 10,
- /obj/item/gun/ballistic/shotgun/toy/unrestricted = 10,
- /obj/item/toy/sword = 10,
- /obj/item/ammo_box/foambox = 20,
- /obj/item/toy/foamblade = 10,
- /obj/item/toy/syndicateballoon = 10,
- /obj/item/clothing/suit/syndicatefake = 5,
- /obj/item/clothing/head/syndicatefake = 5)
- contraband = list(/obj/item/gun/ballistic/shotgun/toy/crossbow = 10,
- /obj/item/gun/ballistic/automatic/c20r/toy/unrestricted = 10,
- /obj/item/gun/ballistic/automatic/l6_saw/toy/unrestricted = 10,
- /obj/item/toy/katana = 10,
- /obj/item/twohanded/dualsaber/toy = 5)
+ products = list(
+ /obj/item/gun/ballistic/automatic/toy/unrestricted = 10,
+ /obj/item/gun/ballistic/automatic/toy/pistol/unrestricted = 10,
+ /obj/item/gun/ballistic/shotgun/toy/unrestricted = 10,
+ /obj/item/toy/sword = 10,
+ /obj/item/ammo_box/foambox = 20,
+ /obj/item/toy/foamblade = 10,
+ /obj/item/toy/syndicateballoon = 10,
+ /obj/item/clothing/suit/syndicatefake = 5,
+ /obj/item/clothing/head/syndicatefake = 5)
+ contraband = list(
+ /obj/item/gun/ballistic/shotgun/toy/crossbow = 10,
+ /obj/item/gun/ballistic/automatic/c20r/toy/unrestricted = 10,
+ /obj/item/gun/ballistic/automatic/l6_saw/toy/unrestricted = 10,
+ /obj/item/toy/katana = 10,
+ /obj/item/twohanded/dualsaber/toy = 5)
armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50)
resistance_flags = FIRE_PROOF
refill_canister = /obj/item/vending_refill/donksoft
@@ -27,5 +29,3 @@
/obj/item/vending_refill/donksoft
machine_name = "Donksoft Toy Vendor"
icon_state = "refill_donksoft"
- charges = list(32,28,0)// of 90 standard, 75 contraband, 0 premium
- init_charges = list(32,28,0)
diff --git a/code/modules/vending/wardrobes.dm b/code/modules/vending/wardrobes.dm
index f9aa8f216a..5a41beb88d 100644
--- a/code/modules/vending/wardrobes.dm
+++ b/code/modules/vending/wardrobes.dm
@@ -17,7 +17,8 @@
/obj/item/clothing/head/soft/sec = 3,
/obj/item/clothing/mask/bandana/red = 3,
/obj/item/clothing/under/rank/security/skirt = 3,
- /obj/item/clothing/under/rank/security/grey = 3)
+ /obj/item/clothing/under/rank/security/grey = 3,
+ /obj/item/clothing/under/pants/khaki = 3)
premium = list(/obj/item/clothing/under/rank/security/navyblue = 3,
/obj/item/clothing/suit/security/officer = 3,
/obj/item/clothing/head/beret/sec/navyofficer = 3)
@@ -25,8 +26,6 @@
/obj/item/vending_refill/wardrobe/sec_wardrobe
machine_name = "SecDrobe"
- charges = list(10, 0, 3)
- init_charges = list(10, 0, 3)
/obj/machinery/vending/wardrobe/medi_wardrobe
name = "\improper MediDrobe"
@@ -55,8 +54,6 @@
/obj/item/vending_refill/wardrobe/medi_wardrobe
machine_name = "MediDrobe"
- charges = list(10, 0, 0)
- init_charges = list(10, 0, 0)
/obj/machinery/vending/wardrobe/engi_wardrobe
name = "EngiDrobe"
@@ -77,8 +74,6 @@
/obj/item/vending_refill/wardrobe/engi_wardrobe
machine_name = "EngiDrobe"
- charges = list(7, 0, 0)
- init_charges = list(7, 0, 0)
/obj/machinery/vending/wardrobe/atmos_wardrobe
name = "AtmosDrobe"
@@ -97,8 +92,6 @@
/obj/item/vending_refill/wardrobe/atmos_wardrobe
machine_name = "AtmosDrobe"
- charges = list(5, 0, 0)
- init_charges = list(5, 0, 0)
/obj/machinery/vending/wardrobe/cargo_wardrobe
name = "CargoDrobe"
@@ -116,8 +109,6 @@
/obj/item/vending_refill/wardrobe/cargo_wardrobe
machine_name = "CargoDrobe"
- charges = list(5, 0, 0)
- init_charges = list(5, 0, 0)
/obj/machinery/vending/wardrobe/robo_wardrobe
name = "RoboDrobe"
@@ -136,8 +127,6 @@
/obj/item/vending_refill/wardrobe/robo_wardrobe
machine_name = "RoboDrobe"
- charges = list(4, 0, 0)
- init_charges = list(4, 0, 0)
/obj/machinery/vending/wardrobe/science_wardrobe
name = "SciDrobe"
@@ -158,8 +147,6 @@
/obj/item/vending_refill/wardrobe/science_wardrobe
machine_name = "SciDrobe"
- charges = list(8, 0, 0)
- init_charges = list(8, 0, 0)
/obj/machinery/vending/wardrobe/hydro_wardrobe
name = "Hydrobe"
@@ -178,8 +165,6 @@
/obj/item/vending_refill/wardrobe/hydro_wardrobe
machine_name = "HyDrobe"
- charges = list(6, 0, 0)
- init_charges = list(6, 0, 0)
/obj/machinery/vending/wardrobe/curator_wardrobe
name = "CuraDrobe"
@@ -197,8 +182,6 @@
/obj/item/vending_refill/wardrobe/curator_wardrobe
machine_name = "CuraDrobe"
- charges = list(3, 0, 0)
- init_charges = list(3, 0, 0)
/obj/machinery/vending/wardrobe/bar_wardrobe
name = "BarDrobe"
@@ -226,8 +209,6 @@
/obj/item/vending_refill/wardrobe/bar_wardrobe
machine_name = "BarDrobe"
- charges = list(8, 0, 0)
- init_charges = list(8, 0, 0)
/obj/machinery/vending/wardrobe/chef_wardrobe
name = "ChefDrobe"
@@ -250,8 +231,6 @@
/obj/item/vending_refill/wardrobe/chef_wardrobe
machine_name = "ChefDrobe"
- charges = list(6, 0, 0)
- init_charges = list(6, 0, 0)
/obj/machinery/vending/wardrobe/jani_wardrobe
name = "JaniDrobe"
@@ -278,8 +257,6 @@
/obj/item/vending_refill/wardrobe/jani_wardrobe
machine_name = "JaniDrobe"
- charges = list(7, 0, 0)
- init_charges = list(7, 0, 0)
/obj/machinery/vending/wardrobe/law_wardrobe
name = "LawDrobe"
@@ -302,8 +279,6 @@
/obj/item/vending_refill/wardrobe/law_wardrobe
machine_name = "LawDrobe"
- charges = list(5, 0, 0)
- init_charges = list(5, 0, 0)
/obj/machinery/vending/wardrobe/chap_wardrobe
name = "ChapDrobe"
@@ -324,8 +299,6 @@
/obj/item/vending_refill/wardrobe/chap_wardrobe
machine_name = "ChapDrobe"
- charges = list(6, 0, 0)
- init_charges = list(6, 0, 0)
/obj/machinery/vending/wardrobe/chem_wardrobe
name = "ChemDrobe"
@@ -343,8 +316,6 @@
/obj/item/vending_refill/wardrobe/chem_wardrobe
machine_name = "ChemDrobe"
- charges = list(4, 0, 0)
- init_charges = list(4, 0, 0)
/obj/machinery/vending/wardrobe/gene_wardrobe
name = "GeneDrobe"
@@ -361,8 +332,6 @@
/obj/item/vending_refill/wardrobe/gene_wardrobe
machine_name = "GeneDrobe"
- charges = list(4, 0, 0)
- init_charges = list(4, 0, 0)
/obj/machinery/vending/wardrobe/viro_wardrobe
name = "ViroDrobe"
@@ -380,5 +349,3 @@
/obj/item/vending_refill/wardrobe/viro_wardrobe
machine_name = "ViroDrobe"
- charges = list(4, 0, 0)
- init_charges = list(4, 0, 0)
\ No newline at end of file
diff --git a/code/modules/vending/youtool.dm b/code/modules/vending/youtool.dm
index 6c48b7a376..495d60a461 100644
--- a/code/modules/vending/youtool.dm
+++ b/code/modules/vending/youtool.dm
@@ -3,7 +3,6 @@
desc = "Tools for tools."
icon_state = "tool"
icon_deny = "tool-deny"
- //req_access_txt = "12" //Maintenance access
products = list(/obj/item/stack/cable_coil/random = 10,
/obj/item/crowbar = 5,
/obj/item/weldingtool = 3,
diff --git a/code/modules/zombie/items.dm b/code/modules/zombie/items.dm
index 154941ce70..03d2ac3921 100644
--- a/code/modules/zombie/items.dm
+++ b/code/modules/zombie/items.dm
@@ -4,7 +4,7 @@
humans, butchering all other living things to \
sustain the zombie, smashing open airlock doors and opening \
child-safe caps on bottles."
- flags_1 = NODROP_1|ABSTRACT_1|DROPDEL_1
+ item_flags = NODROP | ABSTRACT | DROPDEL
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
icon = 'icons/effects/blood.dmi'
icon_state = "bloodhand_left"
diff --git a/goon/icons/obj/chairs.dmi b/goon/icons/obj/chairs.dmi
new file mode 100644
index 0000000000..462370ac37
Binary files /dev/null and b/goon/icons/obj/chairs.dmi differ
diff --git a/icons/effects/crayondecal.dmi b/icons/effects/crayondecal.dmi
index 607bfe44c4..24bf84c97d 100644
Binary files a/icons/effects/crayondecal.dmi and b/icons/effects/crayondecal.dmi differ
diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi
index 237a841a4d..6ace923016 100644
Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ
diff --git a/icons/mob/screen_alert.dmi b/icons/mob/screen_alert.dmi
index de8d09b45b..8142e03498 100644
Binary files a/icons/mob/screen_alert.dmi and b/icons/mob/screen_alert.dmi differ
diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi
index be165a3479..69fd014581 100644
Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ
diff --git a/icons/obj/chairs.dmi b/icons/obj/chairs.dmi
index 9247e3ee96..137150bcd4 100644
Binary files a/icons/obj/chairs.dmi and b/icons/obj/chairs.dmi differ
diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi
index 60fbd984e1..0cd591045e 100644
Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ
diff --git a/icons/obj/vending.dmi b/icons/obj/vending.dmi
index 90f9bb7c7f..e5d474f01d 100644
Binary files a/icons/obj/vending.dmi and b/icons/obj/vending.dmi differ
diff --git a/modular_citadel/code/_onclick/click.dm b/modular_citadel/code/_onclick/click.dm
index 04e763313d..f077b3a71b 100644
--- a/modular_citadel/code/_onclick/click.dm
+++ b/modular_citadel/code/_onclick/click.dm
@@ -34,7 +34,7 @@
//These are always reachable.
//User itself, current loc, and user inventory
- if(DirectAccess(A))
+ if(A in DirectAccess())
if(W)
W.rightclick_melee_attack_chain(src, A, params)
else
diff --git a/modular_citadel/code/controllers/subsystem/job.dm b/modular_citadel/code/controllers/subsystem/job.dm
index 749d7e1e72..303e1b626d 100644
--- a/modular_citadel/code/controllers/subsystem/job.dm
+++ b/modular_citadel/code/controllers/subsystem/job.dm
@@ -29,7 +29,6 @@
/datum/controller/subsystem/job/proc/FreeRole(rank)
if(!rank)
return
- Debug("Freeing role: [rank]")
var/datum/job/job = GetJob(rank)
if(!job)
return FALSE
diff --git a/modular_citadel/code/datums/components/phantomthief.dm b/modular_citadel/code/datums/components/phantomthief.dm
index 8b62971a2a..c09d17d930 100644
--- a/modular_citadel/code/datums/components/phantomthief.dm
+++ b/modular_citadel/code/datums/components/phantomthief.dm
@@ -18,9 +18,9 @@
filter_border = _border
filter_color = _color
- RegisterSignal(COMSIG_COMBAT_TOGGLED, .proc/handlefilterstuff)
- RegisterSignal(COMSIG_ITEM_EQUIPPED, .proc/OnEquipped)
- RegisterSignal(COMSIG_ITEM_DROPPED, .proc/OnDropped)
+ RegisterSignal(parent, COMSIG_COMBAT_TOGGLED, .proc/handlefilterstuff)
+ RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, .proc/OnEquipped)
+ RegisterSignal(parent, COMSIG_ITEM_DROPPED, .proc/OnDropped)
/datum/component/phantomthief/proc/handlefilterstuff(mob/user, combatmodestate)
if(istype(user))
diff --git a/modular_citadel/code/game/machinery/vending.dm b/modular_citadel/code/game/machinery/vending.dm
index c4c0c10e69..d2e12c3498 100755
--- a/modular_citadel/code/game/machinery/vending.dm
+++ b/modular_citadel/code/game/machinery/vending.dm
@@ -117,17 +117,11 @@
machine_name = "KinkMate"
icon = 'modular_citadel/icons/vending_restock.dmi'
icon_state = "refill_kink"
- charges = list(8, 5, 1)// of 20 standard, 12 contraband, 3 premium
- init_charges = list(8, 5, 1)
/obj/item/vending_refill/nazi
machine_name = "nazivend"
icon_state = "refill_nazi"
- charges = list(33, 13, 0)
- init_charges = list(33, 13, 0)
/obj/item/vending_refill/soviet
machine_name = "sovietvend"
icon_state = "refill_soviet"
- charges = list(47, 7, 0)
- init_charges = list(47, 7, 0)
diff --git a/modular_citadel/code/game/objects/ids.dm b/modular_citadel/code/game/objects/ids.dm
index c2cc378079..5d67c18416 100644
--- a/modular_citadel/code/game/objects/ids.dm
+++ b/modular_citadel/code/game/objects/ids.dm
@@ -52,7 +52,7 @@
desc = "A small cell with two prongs lazily jabbed into it. It looks like it's made for charging the small batteries found in electromagnetic devices."
icon = 'icons/obj/module.dmi'
icon_state = "cell_mini"
- flags_1 = NOBLUDGEON_1
+ item_flags = NOBLUDGEON
var/uses = 5 //Dictates how many charges the device adds to compatible items
/obj/item/emagrecharge/examine(mob/user)
diff --git a/modular_citadel/code/game/objects/items/melee/eutactic_blades.dm b/modular_citadel/code/game/objects/items/melee/eutactic_blades.dm
index 4138617138..bdd193c477 100644
--- a/modular_citadel/code/game/objects/items/melee/eutactic_blades.dm
+++ b/modular_citadel/code/game/objects/items/melee/eutactic_blades.dm
@@ -206,8 +206,8 @@
/obj/item/toy/sword/cx/attackby(obj/item/W, mob/living/user, params)
if(istype(W, /obj/item/toy/sword/cx))
- if((W.flags_1 & NODROP_1) || (flags_1 & NODROP_1))
- to_chat(user, "\the [flags_1 & NODROP_1 ? src : W] is stuck to your hand, you can't attach it to \the [flags_1 & NODROP_1 ? W : src]!")
+ if((W.item_flags & NODROP) || (item_flags & NODROP))
+ to_chat(user, "\the [item_flags & NODROP ? src : W] is stuck to your hand, you can't attach it to \the [item_flags & NODROP ? W : src]!")
return
else
to_chat(user, "You combine the two plastic swords, making a single supermassive toy! You're fake-cool.")
@@ -307,7 +307,7 @@
var/mob/M = loc
M.update_inv_hands()
- SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)//blood overlays get weird otherwise, because the sprite changes. (retained from original desword because I have no idea what this is)
+ SEND_SIGNAL(src, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)//blood overlays get weird otherwise, because the sprite changes. (retained from original desword because I have no idea what this is)
/obj/item/twohanded/hypereutactic/AltClick(mob/living/user)
if(!in_range(src, user)) //Basic checks to prevent abuse
diff --git a/modular_citadel/code/game/objects/items/vending_items.dm b/modular_citadel/code/game/objects/items/vending_items.dm
index d2347579d1..db1fdb48cf 100755
--- a/modular_citadel/code/game/objects/items/vending_items.dm
+++ b/modular_citadel/code/game/objects/items/vending_items.dm
@@ -1,5 +1,3 @@
/obj/item/vending_refill/medical
machine_name = "NanoMed"
icon_state = "refill_medical"
- charges = list(32, 5, 3)// of 95 standard, 13 contraband, 8 premium
- init_charges = list(32, 5, 3)
\ No newline at end of file
diff --git a/modular_citadel/code/modules/custom_loadout/custom_items.dm b/modular_citadel/code/modules/custom_loadout/custom_items.dm
index 81c8df40ee..38996ff76d 100644
--- a/modular_citadel/code/modules/custom_loadout/custom_items.dm
+++ b/modular_citadel/code/modules/custom_loadout/custom_items.dm
@@ -8,7 +8,7 @@
icon = 'icons/obj/custom.dmi'
icon_state = "cebu"
w_class = WEIGHT_CLASS_TINY
- flags_1 = NOBLUDGEON_1
+ item_flags = NOBLUDGEON
/obj/item/soap/cebu //real versions, for admin shenanigans. Adminspawn only
desc = "A bright blue bar of soap that smells of wolves"
@@ -338,7 +338,7 @@
blood_overlay_type = "armor"
dog_fashion = /datum/dog_fashion/back
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
-
+
/obj/item/clothing/neck/cloak/green
name = "Generic Green Cloak"
diff --git a/modular_citadel/code/modules/custom_loadout/load_to_mob.dm b/modular_citadel/code/modules/custom_loadout/load_to_mob.dm
index 0a1d8256ae..79f17afc74 100644
--- a/modular_citadel/code/modules/custom_loadout/load_to_mob.dm
+++ b/modular_citadel/code/modules/custom_loadout/load_to_mob.dm
@@ -54,7 +54,7 @@
var/obj/item/loaded = loaded_atom
var/obj/item/storage/S = H.get_item_by_slot(SLOT_BACK)
if(istype(S))
- S.SendSignal(COMSIG_TRY_STORAGE_INSERT,loaded, TRUE, H) //Force it into their backpack
+ SEND_SIGNAL(S, COMSIG_TRY_STORAGE_INSERT,loaded, TRUE, H) //Force it into their backpack
continue
if(!H.put_in_hands(loaded)) //They don't have one/somehow that failed, put it in their hands
loaded.forceMove(T) //Guess we're just dumping it on the floor!
diff --git a/modular_citadel/code/modules/mob/living/carbon/carbon.dm b/modular_citadel/code/modules/mob/living/carbon/carbon.dm
index 2fcf5a4c9d..cf5ce03bc7 100644
--- a/modular_citadel/code/modules/mob/living/carbon/carbon.dm
+++ b/modular_citadel/code/modules/mob/living/carbon/carbon.dm
@@ -27,7 +27,7 @@
if(hud_used && hud_used.static_inventory)
for(var/obj/screen/combattoggle/selector in hud_used.static_inventory)
selector.rebasetointerbay(src)
- SendSignal(COMSIG_COMBAT_TOGGLED, src, combatmode)
+ SEND_SIGNAL(src, COMSIG_COMBAT_TOGGLED, src, combatmode)
return TRUE
/mob/living/carbon/Move(atom/newloc, direct = 0)
diff --git a/modular_citadel/code/modules/mob/living/carbon/human/species.dm b/modular_citadel/code/modules/mob/living/carbon/human/species.dm
index e6f863d7bb..ac88674c6a 100644
--- a/modular_citadel/code/modules/mob/living/carbon/human/species.dm
+++ b/modular_citadel/code/modules/mob/living/carbon/human/species.dm
@@ -35,7 +35,7 @@
if(target.w_uniform)
target.w_uniform.add_fingerprint(user)
var/randomized_zone = ran_zone(user.zone_selected)
- target.SendSignal(COMSIG_HUMAN_DISARM_HIT, user, user.zone_selected)
+ SEND_SIGNAL(target, COMSIG_HUMAN_DISARM_HIT, user, user.zone_selected)
var/obj/item/bodypart/affecting = target.get_bodypart(randomized_zone)
var/randn = rand(1, 100)
if(user.resting)
diff --git a/modular_citadel/code/modules/mob/living/silicon/robot/dogborg_equipment.dm b/modular_citadel/code/modules/mob/living/silicon/robot/dogborg_equipment.dm
index 41b5c2c2f6..496a723d08 100644
--- a/modular_citadel/code/modules/mob/living/silicon/robot/dogborg_equipment.dm
+++ b/modular_citadel/code/modules/mob/living/silicon/robot/dogborg_equipment.dm
@@ -182,7 +182,7 @@ SLEEPER CODE IS IN game/objects/items/devices/dogborg_sleeper.dm !
/obj/item/soap/tongue/New()
..()
- flags_1 |= NOBLUDGEON_1 //No more attack messages
+ item_flags |= NOBLUDGEON //No more attack messages
/obj/item/trash/rkibble
name = "robo kibble"
@@ -258,7 +258,7 @@ SLEEPER CODE IS IN game/objects/items/devices/dogborg_sleeper.dm !
to_chat(R,"You clean \the [target.name].")
var/obj/effect/decal/cleanable/C = locate() in target
qdel(C)
- SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)
+ SEND_SIGNAL(src, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)
else if(ishuman(target))
if(R.emagged)
var/mob/living/L = target
@@ -293,7 +293,7 @@ SLEEPER CODE IS IN game/objects/items/devices/dogborg_sleeper.dm !
to_chat(R, "You clean \the [target.name].")
var/obj/effect/decal/cleanable/C = locate() in target
qdel(C)
- SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)
+ SEND_SIGNAL(src, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)
return
@@ -318,7 +318,7 @@ SLEEPER CODE IS IN game/objects/items/devices/dogborg_sleeper.dm !
/obj/item/dogborg/pounce/New()
..()
- flags_1 |= NOBLUDGEON_1
+ item_flags |= NOBLUDGEON
/mob/living/silicon/robot
var/leaping = 0
diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/other_reagents.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/other_reagents.dm
index 0b57c621f2..68be5987da 100644
--- a/modular_citadel/code/modules/reagents/chemistry/reagents/other_reagents.dm
+++ b/modular_citadel/code/modules/reagents/chemistry/reagents/other_reagents.dm
@@ -4,4 +4,4 @@
else
if(O)
O.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
- O.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)
+ SEND_SIGNAL(O, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)
diff --git a/strings/cas_white.txt b/strings/cas_white.txt
index bc179f2bac..6ff7dbddc7 100644
--- a/strings/cas_white.txt
+++ b/strings/cas_white.txt
@@ -79,7 +79,7 @@ A blob zombie with an erection.
Backdoor Xeno Babes.
Five hundred ice spiders.
Cablecuffs.
-Hulk, TK and X-Ray.
+Hulk, TK and X-ray.
Paranoia.
Putting the boots to him, medium style.
ERP-seeking meteors.
@@ -207,7 +207,7 @@ The king of the rumba beat.
Unnecessary surgery.
Farting in the air distro loop.
Krokodil addiction.
-A H.O.N.K. mech.
+A H.O.N.K. mech.
A dominatrix HoS.
Sexcurity.
The Experimentor.
@@ -269,7 +269,7 @@ Mindbreaker toxin.
Legions of cyborg assholes.
Homicidal chefs.
Extended.
-Grammar fascist gods.
+Grammar fascist gods.
Cortical borers.
A masochist in an ash storm.
Draconic.
diff --git a/strings/ion_laws.json b/strings/ion_laws.json
index 28c6297dcf..152afd1116 100644
--- a/strings/ion_laws.json
+++ b/strings/ion_laws.json
@@ -347,7 +347,7 @@
"HEADS OF CREW",
"CAPTAINS AND HEADS",
"CYBORGS",
- "ARTIFICAL INTELLIGENCES",
+ "ARTIFICIAL INTELLIGENCES",
"DRONES"
],
"iondrinks": [
@@ -656,7 +656,7 @@
"JETPACKS",
"JUMPSUITS",
"LASERS",
- "LIGHTBULBS",
+ "LIGHT BULBS",
"LIGHTS",
"LOCKERS",
"MACHINES",
diff --git a/strings/names/ing_verbs.txt b/strings/names/ing_verbs.txt
index 5869e8a170..6a8da4c1ef 100644
--- a/strings/names/ing_verbs.txt
+++ b/strings/names/ing_verbs.txt
@@ -922,7 +922,7 @@ wrestling
wriggling
wringing
writing
-x-raying
+X-raying
yawning
yelling
zipping
diff --git a/strings/traumas.json b/strings/traumas.json
index ab3f58f984..e013264c4e 100644
--- a/strings/traumas.json
+++ b/strings/traumas.json
@@ -58,50 +58,6 @@
"@pick(semicolon)the ai and borgs are mettacomming I think",
"u just did the world a little bit more sad place for someone",
"WHERES THE SLIP REWRITE WHERE THR FUCK ID IT?",
- "CEMISTRY SUKS!!!!!!!!",
- "youed call her a toeugh bithc",
- "git gud!!",
- "CHEMIT GIB HALNOM PLS",
- "PLASMA iS MENT 2 BE FREE",
- "LoL tROLED U",
- "SEC IS A REV, LINCH!!",
- "FUCK U IM WAY MORE ROBUST u bITCH!!1!!",
- "iS tHis bay?",
- "NO PRED CAN eVER CATCH MI",
- "SCIENCE GIB SHINK RAY PLS",
- "KILL PUNPUN 4 FUN xDD",
- "ooc wow rly?",
- "i play @pick(roles) to only ORDER not DO",
- "CRAGO ORDER @pick(cargo) PLS",
- "erp?",
- "i want to digest u!!!",
- "i shure hop dere are no PRED arund!!!!",
- "NOM!1!",
- "iF it COMPILES it werks!",
- "LYNCH RObOTIKS NOT GIBING ME MECH WTF?/?",
- "GWURGLE!!",
- "balid saled!",
- "LINCH VIRO",
- "VIRO GIB SuPR VIrUS!!",
- "Ai plai vxtest2!",
- "ahelp kan i b pick@(s_roles)???",
- ";taitor trie to make meh malk/?!1!!",
- ";ENGIE TATOR HE SET UP SINGULO!!!11",
- "WHEN NAGAS ADdED?/?",
- "SINDYIE ON SAtIONS GiB gUNS PLISE",
- "CcLOWN IV SlIPPING MI, SEc t BAR@",
- "ahelp iT's RP vALiDZ!",
- "HYDROBONIX PLS WEED PLIESe PLIsE BLAzE IT1!!!",
- "HALP GOLIATH TENETCAL RAPPPP!!!!111",
- "DudSE it'S 4:20 LmAO BLAZZ IT xDDDDD",
- "ahelp DUDE I JUT LOST MY JOBB!!",
- "looc dude rly",
- "pray can i heff spells",
- "aI state dem1!",
- "SINGULO eNGINE 2 DANGER, SOLARS PLS!",
- "nerf blob!1",
- "iM NOT A FUWRRYY!!!",
- "FOURTEEN INCHES SOFT!!!",
"@pick(semicolon)N-NYAAAAAA~",
"@pick(bug)",
"@pick(semicolon)wtf??????????? @pick(bug)",
@@ -157,11 +113,6 @@
"sybl",
"mrs sybil",
"mr basil",
- "sisadel",
- "dullus",
- "colon marhens",
- "haylo",
- "EEGEE",
"mr terry",
"berry"
],
@@ -242,31 +193,6 @@
"YOU SHALL SURVIVE THIS, MY PRIEST.",
"BE HEALED, PRIEST.",
"YOUR LIFE IS IMPORTANT. KEEP IT."
- ],
+ ]
- "roles": [
- "heds",
- "ceptin",
- "hop",
- "arrdee",
- "sek"
- ],
-
- "cargo": [
- "GUNS",
- "HATS",
- "PIZEH",
- "MEMES",
- "GLOWY CYSTAL"
- ],
-
- "s_roles": [
- "ert",
- "shadowlig",
- "ninja",
- "admen",
- "mantor",
- "bluh daymon",
- "wizzerd"
- ]
}
diff --git a/tgstation.dme b/tgstation.dme
index 2f01b98c5a..65a0274e81 100755
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -70,9 +70,11 @@
#include "code\__DEFINES\radiation.dm"
#include "code\__DEFINES\radio.dm"
#include "code\__DEFINES\reagents.dm"
+#include "code\__DEFINES\reagents_specific_heat.dm"
#include "code\__DEFINES\research.dm"
#include "code\__DEFINES\robots.dm"
#include "code\__DEFINES\role_preferences.dm"
+#include "code\__DEFINES\rust_g.dm"
#include "code\__DEFINES\say.dm"
#include "code\__DEFINES\shuttles.dm"
#include "code\__DEFINES\sight.dm"
@@ -331,11 +333,13 @@
#include "code\datums\components\earprotection.dm"
#include "code\datums\components\edit_complainer.dm"
#include "code\datums\components\empprotection.dm"
+#include "code\datums\components\forced_gravity.dm"
#include "code\datums\components\forensics.dm"
#include "code\datums\components\infective.dm"
#include "code\datums\components\jousting.dm"
#include "code\datums\components\knockoff.dm"
#include "code\datums\components\lockon_aiming.dm"
+#include "code\datums\components\magnetic_catch.dm"
#include "code\datums\components\material_container.dm"
#include "code\datums\components\mirage_border.dm"
#include "code\datums\components\mood.dm"
@@ -352,6 +356,7 @@
#include "code\datums\components\stationloving.dm"
#include "code\datums\components\swarming.dm"
#include "code\datums\components\thermite.dm"
+#include "code\datums\components\uplink.dm"
#include "code\datums\components\wearertargeting.dm"
#include "code\datums\components\wet_floor.dm"
#include "code\datums\components\decals\blood.dm"
@@ -841,6 +846,7 @@
#include "code\game\objects\items\devices\radio\headset.dm"
#include "code\game\objects\items\devices\radio\intercom.dm"
#include "code\game\objects\items\devices\radio\radio.dm"
+#include "code\game\objects\items\grenades\antigravity.dm"
#include "code\game\objects\items\grenades\chem_grenade.dm"
#include "code\game\objects\items\grenades\clusterbuster.dm"
#include "code\game\objects\items\grenades\emgrenade.dm"
@@ -1153,6 +1159,7 @@
#include "code\modules\antagonists\changeling\powers\mimic_voice.dm"
#include "code\modules\antagonists\changeling\powers\mutations.dm"
#include "code\modules\antagonists\changeling\powers\panacea.dm"
+#include "code\modules\antagonists\changeling\powers\pheromone_receptors.dm"
#include "code\modules\antagonists\changeling\powers\regenerate.dm"
#include "code\modules\antagonists\changeling\powers\revive.dm"
#include "code\modules\antagonists\changeling\powers\shriek.dm"
@@ -1549,6 +1556,7 @@
#include "code\modules\events\wizard\shuffle.dm"
#include "code\modules\events\wizard\summons.dm"
#include "code\modules\fields\fields.dm"
+#include "code\modules\fields\gravity.dm"
#include "code\modules\fields\peaceborg_dampener.dm"
#include "code\modules\fields\timestop.dm"
#include "code\modules\fields\turf_objects.dm"
@@ -2606,7 +2614,6 @@
#include "code\modules\tgui\states\zlevel.dm"
#include "code\modules\tooltip\tooltip.dm"
#include "code\modules\unit_tests\_unit_tests.dm"
-#include "code\modules\uplink\uplink.dm"
#include "code\modules\uplink\uplink_devices.dm"
#include "code\modules\uplink\uplink_items.dm"
#include "code\modules\uplink\uplink_purchase_log.dm"
diff --git a/tgui/src/interfaces/ai_airlock.ract b/tgui/src/interfaces/ai_airlock.ract
index 3acd384617..6f6c92967d 100644
--- a/tgui/src/interfaces/ai_airlock.ract
+++ b/tgui/src/interfaces/ai_airlock.ract
@@ -109,7 +109,7 @@ component.exports = {
Disabled
-
+
{{#if !data.wires.timing}}
[ Wires have been cut ]
{{/if}}
diff --git a/tgui/src/interfaces/cellular_emporium.ract b/tgui/src/interfaces/cellular_emporium.ract
index a5ce433452..5aa6213ec1 100644
--- a/tgui/src/interfaces/cellular_emporium.ract
+++ b/tgui/src/interfaces/cellular_emporium.ract
@@ -20,6 +20,6 @@
{{/each}}
{{^data.abilities}}
- No abilities availible.
+ No abilities available.
{{/data.abilities}}