diff --git a/.gitignore b/.gitignore
index f784b30d80e..47ad360a40e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -16,3 +16,5 @@ data/
/_maps/map_files/**/*.dmm.backup
/nano/debug.html
*.db
+stddef.dm
+.atom-build.json
diff --git a/.travis.yml b/.travis.yml
index b79cb5e0db3..27dae76378e 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -7,8 +7,8 @@ git:
env:
global:
- - BYOND_MAJOR="509"
- - BYOND_MINOR="1315"
+ - BYOND_MAJOR="510"
+ - BYOND_MINOR="1336"
matrix:
- DM_MAPFILE="cyberiad"
- DM_MAPFILE="metastation"
diff --git a/bin/bygex.dll b/bin/bygex.dll
deleted file mode 100644
index b19c0f14b1e..00000000000
Binary files a/bin/bygex.dll and /dev/null differ
diff --git a/btime.dll b/btime.dll
deleted file mode 100644
index 36dcbe3af75..00000000000
Binary files a/btime.dll and /dev/null differ
diff --git a/code/__DEFINES/btime.dm b/code/__DEFINES/btime.dm
deleted file mode 100644
index 33d5def1deb..00000000000
--- a/code/__DEFINES/btime.dm
+++ /dev/null
@@ -1,18 +0,0 @@
-// Comment this out if the external btime library is unavailable
-#define PRECISE_TIMER_AVAILABLE
-
-#ifdef PRECISE_TIMER_AVAILABLE
-var/global/__btime__libName = "btime.[world.system_type==MS_WINDOWS?"dll":"so"]"
-#define TimeOfHour (__extern__timeofhour)
-#define __extern__timeofhour text2num(call(__btime__libName, "gettime")())
-/hook/startup/proc/checkbtime()
- try
- // This will always return 1 unless the btime library cannot be accessed
- if(TimeOfHour || 1) return 1
- catch(var/exception/e)
- log_to_dd("PRECISE_TIMER_AVAILABLE is defined in btime.dm, but calling the btime library failed: [e]")
- log_to_dd("This is a fatal error. The world will now shut down.")
- del(world)
-#else
-#define TimeOfHour (world.timeofday % 36000)
-#endif
diff --git a/code/__DEFINES/hud.dm b/code/__DEFINES/hud.dm
index 9bc80cd7bd5..628afa0f5e9 100644
--- a/code/__DEFINES/hud.dm
+++ b/code/__DEFINES/hud.dm
@@ -36,5 +36,8 @@
#define ANTAG_HUD_OPS 9
#define ANTAG_HUD_WIZ 10
#define ANTAG_HUD_SHADOW 11
-#define ANTAG_HUD_SOLO 12
-
+#define ANTAG_HUD_TRAITOR 12
+#define ANTAG_HUD_NINJA 13 //For Daves Rework
+#define ANTAG_HUD_CHANGELING 14
+#define ANTAG_HUD_VAMPIRE 15
+#define ANTAG_HUD_ABDUCTOR 16 //For Fox
diff --git a/code/__DEFINES/mob.dm b/code/__DEFINES/mob.dm
index 9f9d1d15c94..2bdb3432f69 100644
--- a/code/__DEFINES/mob.dm
+++ b/code/__DEFINES/mob.dm
@@ -94,3 +94,7 @@
#define DEFAULT_ITEM_PUTON_DELAY 20 //time taken (in deciseconsd) to reverse-strip somebody
#define IGNORE_ACCESS -1
+
+#define CHEM_MOB_SPAWN_INVALID 0
+#define CHEM_MOB_SPAWN_HOSTILE 1
+#define CHEM_MOB_SPAWN_FRIENDLY 2
\ No newline at end of file
diff --git a/code/__DEFINES/process_scheduler.dm b/code/__DEFINES/process_scheduler.dm
index af859e314ff..d9c8f106efc 100644
--- a/code/__DEFINES/process_scheduler.dm
+++ b/code/__DEFINES/process_scheduler.dm
@@ -16,4 +16,4 @@
// SCHECK macros
// This references src directly to work around a weird bug with try/catch
#define SCHECK_EVERY(this_many_calls) if(++src.calls_since_last_scheck >= this_many_calls) sleepCheck()
-#define SCHECK SCHECK_EVERY(50)
+#define SCHECK sleepCheck()
diff --git a/code/__HELPERS/_string_lists.dm b/code/__HELPERS/_string_lists.dm
index 3336e16b560..f9b5e179aa1 100644
--- a/code/__HELPERS/_string_lists.dm
+++ b/code/__HELPERS/_string_lists.dm
@@ -12,11 +12,11 @@ var/global/list/string_cache
var/list/stringsList = list()
fileList = file2list("strings/[filename]")
for(var/s in fileList)
- stringsList = text2list(s, "@=")
+ stringsList = splittext(s, "@=")
if(stringsList.len != 2)
CRASH("Invalid string list in strings/[filename]")
if(findtext(stringsList[2], "@,"))
- string_cache[filename][stringsList[1]] = text2list(stringsList[2], "@,")
+ string_cache[filename][stringsList[1]] = splittext(stringsList[2], "@,")
else
string_cache[filename][stringsList[1]] = stringsList[2] // Its a single string!
else
diff --git a/code/__HELPERS/bygex/bygex.dm b/code/__HELPERS/bygex/bygex.dm
deleted file mode 100644
index c5c4999ccca..00000000000
--- a/code/__HELPERS/bygex/bygex.dm
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- This file is part of bygex.
-
- bygex is free software: you can redistribute it and/or modify
- it under the terms of the GNU Lesser General Public License as
- published by the Free Software Foundation, either version 3 of
- the License, or (at your option) any later version.
-
- bygex is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public License
- along with bygex. If not, see
-
- Based on code by Zac Stringham - Copyright 2009 (LGPL)
- Written 6-Oct-2013 - carnie (elly1989@rocketmail.com), accreditation appreciated but not required.
- Please do not remove this comment.
-
- Full source code is available at https://code.google.com/p/byond-regex/
- Please report any relevant issues on the tracker at the above address.
- ~Carn
-*/
-
-#ifdef USE_BYGEX
-
-#ifndef LIBREGEX_LIBRARY
- #define LIBREGEX_LIBRARY "bin/bygex"
-#endif
-
-/proc
- regEx_compare(str, exp)
- return new /datum/regex(str, exp, call(LIBREGEX_LIBRARY, "regEx_compare")(str, exp))
-
- regex_compare(str, exp)
- return new /datum/regex(str, exp, call(LIBREGEX_LIBRARY, "regex_compare")(str, exp))
-
- regEx_find(str, exp)
- return new /datum/regex(str, exp, call(LIBREGEX_LIBRARY, "regEx_find")(str, exp))
-
- regex_find(str, exp)
- return new /datum/regex(str, exp, call(LIBREGEX_LIBRARY, "regex_find")(str, exp))
-
- regEx_replaceall(str, exp, fmt)
- return call(LIBREGEX_LIBRARY, "regEx_replaceall")(str, exp, fmt)
-
- regex_replaceall(str, exp, fmt)
- return call(LIBREGEX_LIBRARY, "regex_replaceall")(str, exp, fmt)
-
- replacetextEx(str, exp, fmt)
- return call(LIBREGEX_LIBRARY, "regEx_replaceallliteral")(str, exp, fmt)
-
- replacetext(str, exp, fmt)
- return call(LIBREGEX_LIBRARY, "regex_replaceallliteral")(str, exp, fmt)
-
- regEx_replace(str, exp, fmt)
- return call(LIBREGEX_LIBRARY, "regEx_replace")(str, exp, fmt)
-
- regex_replace(str, exp, fmt)
- return call(LIBREGEX_LIBRARY, "regex_replace")(str, exp, fmt)
-
- regEx_findall(str, exp)
- return new /datum/regex(str, exp, call(LIBREGEX_LIBRARY, "regEx_findall")(str, exp))
-
- regex_findall(str, exp)
- return new /datum/regex(str, exp, call(LIBREGEX_LIBRARY, "regex_findall")(str, exp))
-
-
-//upon calling a regex match or search, a /datum/regex object is created with str(haystack) and exp(needle) variables set
-//it also contains a list(matches) of /datum/match objects, each of which holds the position and length of the match
-//matched strings are not returned from the dll, in order to save on memory allocation for large numbers of strings
-//instead, you can use regex.str(matchnum) to fetch this string as needed.
-//likewise you can also use regex.pos(matchnum) and regex.len(matchnum) as shorthands
-/datum/regex
- var/str
- var/exp
- var/error
- var/anchors = 0
- var/list/matches = list()
-
- New(str, exp, results)
- src.str = str
- src.exp = exp
-
- if(findtext(results, "$Err$", 1, 6)) //error message
- src.error = results
- else
- var/list/L = params2list(results)
- var/list/M
- var{i;j}
- for(i in L)
- M = L[i]
- for(j=2, j<=M.len, j+=2)
- matches += new /datum/match(text2num(M[j-1]),text2num(M[j]))
- anchors = (j-2)/2
- return matches
-
- proc
- str(i)
- if(!i) return str
- var/datum/match/M = matches[i]
- if(i < 1 || i > matches.len)
- throw EXCEPTION("str(): out of bounds")
- return copytext(str, M.pos, M.pos+M.len)
-
- pos(i)
- if(!i) return 1
- if(i < 1 || i > matches.len)
- throw EXCEPTION("pos(): out of bounds")
- var/datum/match/M = matches[i]
- return M.pos
-
- len(i)
- if(!i) return length(str)
- if(i < 1 || i > matches.len)
- throw EXCEPTION("len(): out of bounds")
- var/datum/match/M = matches[i]
- return M.len
-
- end(i)
- if(!i) return length(str)
- if(i < 1 || i > matches.len)
- throw EXCEPTION("end() out of bounds")
- var/datum/match/M = matches[i]
- return M.pos + M.len
-
- report() //debug tool
- . = ":: RESULTS ::\n:: str :: [html_encode(str)]\n:: exp :: [html_encode(exp)]\n:: anchors :: [anchors]"
- if(error)
- . += "\n[error]"
- return
- for(var/i=1, i<=matches.len, ++i)
- . += "\nMatch[i]\n\t[html_encode(str(i))]\n\tpos=[pos(i)] len=[len(i)]"
-
-/datum/match
- var/pos
- var/len
-
- New(pos, len)
- src.pos = pos
- src.len = len
-
-#endif
\ No newline at end of file
diff --git a/code/__HELPERS/bygex/demo.dm b/code/__HELPERS/bygex/demo.dm
deleted file mode 100644
index f89be30ded2..00000000000
--- a/code/__HELPERS/bygex/demo.dm
+++ /dev/null
@@ -1,54 +0,0 @@
-/mob
- var/expression = "\\S+"
- var/format = "*"
-
- var/datum/regex/results
-
- verb
- set_expression()
- var/t = input(usr,"Input Expression","title",expression) as text|null
- if(t != null)
- expression = t
- usr << "Expression set to:\t[html_encode(t)]"
-
- set_format()
- var/t = input(usr,"Input Formatter","title",format) as text|null
- if(t != null)
- format = t
- usr << "Format set to:\t[html_encode(t)]"
-
- compare_casesensitive(t as text)
- results = regEx_compare(t, expression)
- world << results.report()
-
- compare(t as text)
- results = regex_compare(t, expression)
- world << results.report()
-
- find_casesensitive(t as text)
- results = regEx_find(t, expression)
- world << results.report()
-
- find(t as text)
- results = regex_find(t, expression)
- world << results.report()
-
- replaceall_casesensitive(t as text)
- usr << regEx_replaceall(t, expression, format)
-
- replaceall(t as text)
- usr << regex_replaceall(t, expression, format)
-
- replace_casesensitive(t as text)
- usr << html_encode(regEx_replace(t, expression, format))
-
- replace(t as text)
- usr << regex_replace(t, expression, format)
-
- findall(t as text)
- results = regex_findall(t, expression)
- world << results.report()
-
- findall_casesensitive(t as text)
- results = regEx_findall(t, expression)
- world << results.report()
\ No newline at end of file
diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm
index 703ad8a746b..f85e318de76 100644
--- a/code/__HELPERS/text.dm
+++ b/code/__HELPERS/text.dm
@@ -203,13 +203,6 @@ proc/checkhtml(var/t)
* Text modification
*/
// See bygex.dm
-#ifndef USE_BYGEX
-/proc/replacetext(text, find, replacement)
- return list2text(text2list(text, find), replacement)
-
-/proc/replacetextEx(text, find, replacement)
- return list2text(text2listEx(text, find), replacement)
-#endif
/proc/replace_characters(var/t,var/list/repl_chars)
for(var/char in repl_chars)
t = replacetext(t, char, repl_chars[char])
diff --git a/code/__HELPERS/time.dm b/code/__HELPERS/time.dm
index 1bdd85841a5..4973de14b81 100644
--- a/code/__HELPERS/time.dm
+++ b/code/__HELPERS/time.dm
@@ -3,6 +3,25 @@
#define MINUTES *600
#define HOURS *36000
+#define TimeOfGame (get_game_time())
+#define TimeOfTick (world.tick_usage*0.01*world.tick_lag)
+
+/proc/get_game_time()
+ var/global/time_offset = 0
+ var/global/last_time = 0
+ var/global/last_usage = 0
+
+ var/wtime = world.time
+ var/wusage = world.tick_usage * 0.01
+
+ if(last_time < wtime && last_usage > 1)
+ time_offset += last_usage - 1
+
+ last_time = wtime
+ last_usage = wusage
+
+ return wtime + (time_offset + wusage) * world.tick_lag
+
//Returns the world time in english
/proc/worldtime2text(time = world.time)
return "[round(time / 36000)+12]:[(time / 600 % 60) < 10 ? add_zero(time / 600 % 60, 1) : time / 600 % 60]"
@@ -33,15 +52,14 @@ proc/isDay(var/month, var/day)
* Returns "watch handle" (really just a timestamp :V)
*/
/proc/start_watch()
- return world.timeofday
+ return TimeOfGame
/**
* Returns number of seconds elapsed.
* @param wh number The "Watch Handle" from start_watch(). (timestamp)
*/
/proc/stop_watch(wh)
- return round(0.1*(world.timeofday-wh),0.1)
+ return round(0.1 * (TimeOfGame - wh), 0.1)
/proc/month2number(month)
- return month_names.Find(month)
-
\ No newline at end of file
+ return month_names.Find(month)
\ No newline at end of file
diff --git a/code/__HELPERS/type2type.dm b/code/__HELPERS/type2type.dm
index 99c641f6dd0..ced289358e0 100644
--- a/code/__HELPERS/type2type.dm
+++ b/code/__HELPERS/type2type.dm
@@ -2,7 +2,6 @@
* Holds procs designed to change one type of value, into another.
* Contains:
* hex2num & num2hex
- * text2list & list2text
* file2list
* angle2dir
* angle2text
@@ -60,161 +59,15 @@
hex = "0[hex]"
return hex || "0"
-// Concatenates a list of strings into a single string. A seperator may optionally be provided.
-/proc/list2text(list/ls, sep)
- if(ls.len <= 1) // Early-out code for empty or singleton lists.
- return ls.len ? ls[1] : ""
-
- var/l = ls.len // Made local for sanic speed.
- var/i = 0 // Incremented every time a list index is accessed.
-
- if(sep != null)
- // Macros expand to long argument lists like so: sep, ls[++i], sep, ls[++i], sep, ls[++i], etc...
- #define S1 sep, ls[++i]
- #define S4 S1, S1, S1, S1
- #define S16 S4, S4, S4, S4
- #define S64 S16, S16, S16, S16
-
- . = "[ls[++i]]" // Make sure the initial element is converted to text.
-
- // Having the small concatenations come before the large ones boosted speed by an average of at least 5%.
- if(l-1 & 0x01) // 'i' will always be 1 here.
- . = text("[][][]", ., S1) // Append 1 element if the remaining elements are not a multiple of 2.
- if(l-i & 0x02)
- . = text("[][][][][]", ., S1, S1) // Append 2 elements if the remaining elements are not a multiple of 4.
- if(l-i & 0x04)
- . = text("[][][][][][][][][]", ., S4) // And so on....
- if(l-i & 0x08)
- . = text("[][][][][][][][][][][][][][][][][]", ., S4, S4)
- if(l-i & 0x10)
- . = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S16)
- if(l-i & 0x20)
- . = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
- [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S16, S16)
- if(l-i & 0x40)
- . = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
- [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
- [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
- [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S64)
- while(l > i) // Chomp through the rest of the list, 128 elements at a time.
- . = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
- [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
- [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
- [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
- [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
- [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
- [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
- [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S64, S64)
-
- #undef S64
- #undef S16
- #undef S4
- #undef S1
-
- else
- // Macros expand to long argument lists like so: ls[++i], ls[++i], ls[++i], etc...
- #define S1 ls[++i]
- #define S4 S1, S1, S1, S1
- #define S16 S4, S4, S4, S4
- #define S64 S16, S16, S16, S16
-
- . = "[ls[++i]]" // Make sure the initial element is converted to text.
-
- if(l-1 & 0x01) // 'i' will always be 1 here.
- . += S1 // Append 1 element if the remaining elements are not a multiple of 2.
- if(l-i & 0x02)
- . = text("[][][]", ., S1, S1) // Append 2 elements if the remaining elements are not a multiple of 4.
- if(l-i & 0x04)
- . = text("[][][][][]", ., S4) // And so on...
- if(l-i & 0x08)
- . = text("[][][][][][][][][]", ., S4, S4)
- if(l-i & 0x10)
- . = text("[][][][][][][][][][][][][][][][][]", ., S16)
- if(l-i & 0x20)
- . = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S16, S16)
- if(l-i & 0x40)
- . = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
- [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S64)
- while(l > i) // Chomp through the rest of the list, 128 elements at a time.
- . = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
- [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
- [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
- [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S64, S64)
-
- #undef S64
- #undef S16
- #undef S4
- #undef S1
-
-//slower then list2text, but correctly processes associative lists.
-proc/tg_list2text(list/list, glue=",", assocglue=";")
- if(!istype(list) || !list.len)
- return
- var/output
- for(var/i=1 to list.len)
- if(!isnull(list["[list[i]]"]))
- output += (i!=1? glue : null)+ "[list[i]]"+(i!=1? assocglue : null)+"[list["[list[i]]"]]"
- else
- output += (i!=1? glue : null)+ "[list[i]]"
- return output
-
-proc/tg_text2list(text, glue=",", assocglue=";")
- var/length = length(glue)
- if(length < 1) return list(text)
- . = list()
- var/lastglue_found = 1
- var/foundglue
- var/foundassocglue
- var/searchtext
- do
- foundglue = findtext(text, glue, lastglue_found, 0)
- searchtext = copytext(text, lastglue_found, foundglue)
- foundassocglue = findtext(searchtext, assocglue, 1, 0)
- if(foundassocglue)
- var/sublist = copytext(searchtext, 1, foundassocglue)
- sublist[1] = copytext(searchtext, foundassocglue, 0)
- . += sublist
- else
- . += copytext(text, lastglue_found, foundglue)
- lastglue_found = foundglue + length
- while(foundglue)
-
-
-//Converts a string into a list by splitting the string at each delimiter found. (discarding the seperator)
-/proc/text2list(text, delimiter="\n")
- var/delim_len = length(delimiter)
- if(delim_len < 1) return list(text)
- . = list()
- var/last_found = 1
- var/found
- do
- found = findtext(text, delimiter, last_found, 0)
- . += copytext(text, last_found, found)
- last_found = found + delim_len
- while(found)
-
-//Case Sensitive!
-/proc/text2listEx(text, delimiter="\n")
- var/delim_len = length(delimiter)
- if(delim_len < 1) return list(text)
- . = list()
- var/last_found = 1
- var/found
- do
- found = findtextEx(text, delimiter, last_found, 0)
- . += copytext(text, last_found, found)
- last_found = found + delim_len
- while(found)
-
/proc/text2numlist(text, delimiter="\n")
var/list/num_list = list()
- for(var/x in text2list(text, delimiter))
+ for(var/x in splittext(text, delimiter))
num_list += text2num(x)
return num_list
//Splits the text of a file at seperator and returns them in a list.
/proc/file2list(filename, seperator="\n")
- return text2list(return_file_text(filename),seperator)
+ return splittext(return_file_text(filename),seperator)
//Turns a direction into text
@@ -428,7 +281,7 @@ proc/tg_text2list(text, glue=",", assocglue=";")
//Argument: Give this a space-separated string consisting of 6 numbers. Returns null if you don't
/proc/text2matrix(var/matrixtext)
- var/list/matrixtext_list = text2list(matrixtext, " ")
+ var/list/matrixtext_list = splittext(matrixtext, " ")
var/list/matrix_list = list()
for(var/item in matrixtext_list)
var/entry = text2num(item)
@@ -443,4 +296,4 @@ proc/tg_text2list(text, glue=",", assocglue=";")
var/d = matrix_list[4]
var/e = matrix_list[5]
var/f = matrix_list[6]
- return matrix(a, b, c, d, e, f)
\ No newline at end of file
+ return matrix(a, b, c, d, e, f)
diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm
index 0c99ec12416..f5e577f8b8a 100644
--- a/code/__HELPERS/unsorted.dm
+++ b/code/__HELPERS/unsorted.dm
@@ -1601,11 +1601,11 @@ var/mob/dview/dview_mob = new
return 1
/proc/screen_loc2turf(scr_loc, turf/origin)
- var/tX = text2list(scr_loc, ",")
- var/tY = text2list(tX[2], ":")
+ var/tX = splittext(scr_loc, ",")
+ var/tY = splittext(tX[2], ":")
var/tZ = origin.z
tY = tY[1]
- tX = text2list(tX[1], ":")
+ tX = splittext(tX[1], ":")
tX = tX[1]
tX = max(1, min(world.maxx, origin.x + (text2num(tX) - (world.view + 1))))
tY = max(1, min(world.maxy, origin.y + (text2num(tY) - (world.view + 1))))
@@ -1665,4 +1665,4 @@ var/global/list/g_fancy_list_of_types = null
var/value = L[key]
if(findtext("[key]", filter) || findtext("[value]", filter))
matches[key] = value
- return matches
\ No newline at end of file
+ return matches
diff --git a/code/_compile_options.dm b/code/_compile_options.dm
index 662ec34ceac..12cd9086711 100644
--- a/code/_compile_options.dm
+++ b/code/_compile_options.dm
@@ -13,12 +13,10 @@
#define MAX_NAME_LEN 26
// Version check, terminates compilation if someone is using a version of BYOND that's too old
-#if DM_VERSION < 508
+#if DM_VERSION < 510
#error OUTDATED VERSION ERROR - \
Due to BYOND features used in this codebase, you must update to version 508 or later to compile. \
This may require updating to a beta release.
#endif
var/global/list/processing_objects = list() //This has to be initialized BEFORE world
-
-#define USE_BYGEX
\ No newline at end of file
diff --git a/code/_globalvars/lists/mobs.dm b/code/_globalvars/lists/mobs.dm
index 91a06fa4647..04abf50e362 100644
--- a/code/_globalvars/lists/mobs.dm
+++ b/code/_globalvars/lists/mobs.dm
@@ -24,53 +24,6 @@ var/global/list/dead_mob_list = list() //List of all dead mobs, including cli
var/global/list/respawnable_list = list() //List of all mobs, dead or in mindless creatures that still be respawned.
var/global/list/simple_animal_list = list() //List of all simple animals, including clientless
-//global var of unsafe-to-spawn-on-reaction mobs
-var/global/list/blocked_mobs = list(/mob/living/simple_animal,
- /mob/living/simple_animal/hostile,
- /mob/living/simple_animal/hostile/pirate,
- /mob/living/simple_animal/hostile/pirate/ranged,
- /mob/living/simple_animal/hostile/russian,
- /mob/living/simple_animal/hostile/russian/ranged,
- /mob/living/simple_animal/hostile/syndicate,
- /mob/living/simple_animal/hostile/syndicate/melee,
- /mob/living/simple_animal/hostile/syndicate/melee/space,
- /mob/living/simple_animal/hostile/syndicate/ranged,
- /mob/living/simple_animal/hostile/syndicate/ranged/space,
- /mob/living/simple_animal/hostile/alien/queen/large,
- /mob/living/simple_animal/hostile/retaliate,
- /mob/living/simple_animal/hostile/retaliate/clown,
- /mob/living/simple_animal/hostile/mushroom,
- /mob/living/simple_animal/hostile/asteroid,
- /mob/living/simple_animal/hostile/asteroid/basilisk,
- /mob/living/simple_animal/hostile/asteroid/goldgrub,
- /mob/living/simple_animal/hostile/asteroid/goliath,
- /mob/living/simple_animal/hostile/asteroid/hivelord,
- /mob/living/simple_animal/hostile/asteroid/hivelordbrood,
- /mob/living/simple_animal/hostile/carp/holocarp,
- /mob/living/simple_animal/hostile/mining_drone,
- /mob/living/simple_animal/hostile/spaceWorm,
- /mob/living/simple_animal/hostile/spaceWorm/wormHead,
- /mob/living/simple_animal/ascendant_shadowling,
- /mob/living/simple_animal/slaughter,
- /mob/living/simple_animal/hostile/retaliate/araneus,
- /mob/living/simple_animal/hostile/syndicate/ranged/orion,
- /mob/living/simple_animal/hostile/statue,
- /mob/living/simple_animal/hostile/guardian,
- /mob/living/simple_animal/hostile/guardian/fire,
- /mob/living/simple_animal/hostile/guardian/healer,
- /mob/living/simple_animal/hostile/guardian/punch,
- /mob/living/simple_animal/hostile/guardian/punch/sealpunch,
- /mob/living/simple_animal/hostile/guardian/healer/sealhealer,
- /mob/living/simple_animal/hostile/guardian/ranged,
- /mob/living/simple_animal/hostile/guardian/bomb,
- /mob/living/simple_animal/hostile/winter/santa,
- /mob/living/simple_animal/hostile/winter/santa/stage_1,
- /mob/living/simple_animal/hostile/winter/santa/stage_2,
- /mob/living/simple_animal/hostile/winter/santa/stage_3,
- /mob/living/simple_animal/hostile/winter/santa/stage_4,
- /mob/living/simple_animal/hostile/alien/maid
- )
-
var/global/list/med_hud_users = list()
var/global/list/sec_hud_users = list()
var/global/list/antag_hud_users = list()
diff --git a/code/_onclick/_defines.dm b/code/_onclick/_defines.dm
new file mode 100644
index 00000000000..3c76c35e807
--- /dev/null
+++ b/code/_onclick/_defines.dm
@@ -0,0 +1 @@
+#define CLICKCATCHER_PLANE -99
\ No newline at end of file
diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm
index d43d12b1e8b..c0fb6204fe6 100644
--- a/code/_onclick/click.dm
+++ b/code/_onclick/click.dm
@@ -405,9 +405,9 @@
buckled.handle_rotation()*/
/obj/screen/click_catcher
- icon = 'icons/mob/screen1_full.dmi'
+ icon = 'icons/mob/screen_full.dmi'
icon_state = "passage0"
- layer = 0
+ plane = CLICKCATCHER_PLANE
mouse_opacity = 2
screen_loc = "CENTER-7,CENTER-7"
diff --git a/code/_onclick/hud/alien.dm b/code/_onclick/hud/alien.dm
index 568ffa084f2..fa7017fd2d8 100644
--- a/code/_onclick/hud/alien.dm
+++ b/code/_onclick/hud/alien.dm
@@ -166,21 +166,6 @@
alien_plasma_display.name = "plasma stored"
alien_plasma_display.screen_loc = ui_alienplasmadisplay
- mymob.blind = new /obj/screen()
- mymob.blind.icon = 'icons/mob/screen1_full.dmi'
- mymob.blind.icon_state = "blackimageoverlay"
- mymob.blind.name = " "
- mymob.blind.screen_loc = "CENTER-7,CENTER-7"
- mymob.blind.layer = 0
- mymob.blind.mouse_opacity = 0
-
- mymob.flash = new /obj/screen()
- mymob.flash.icon = 'icons/mob/screen1_alien.dmi'
- mymob.flash.icon_state = "blank"
- mymob.flash.name = "flash"
- mymob.flash.screen_loc = "WEST,SOUTH to EAST,NORTH"
- mymob.flash.layer = 17
-
mymob.zone_sel = new /obj/screen/zone_sel()
mymob.zone_sel.icon = 'icons/mob/screen1_alien.dmi'
mymob.zone_sel.overlays.Cut()
@@ -188,6 +173,6 @@
mymob.client.screen = list()
- mymob.client.screen += list( mymob.throw_icon, mymob.zone_sel, mymob.oxygen, mymob.toxin, mymob.fire, mymob.healths, nightvisionicon, mymob.pullin, alien_plasma_display, mymob.pullin, mymob.blind, mymob.flash) //, mymob.hands, mymob.rest, mymob.sleep, mymob.mach )
+ mymob.client.screen += list( mymob.throw_icon, mymob.zone_sel, mymob.oxygen, mymob.toxin, mymob.fire, mymob.healths, nightvisionicon, mymob.pullin, alien_plasma_display, mymob.pullin) //, mymob.hands, mymob.rest, mymob.sleep, mymob.mach )
mymob.client.screen += src.adding + src.other
mymob.client.screen += mymob.client.void
\ No newline at end of file
diff --git a/code/_onclick/hud/alien_larva.dm b/code/_onclick/hud/alien_larva.dm
index 18c2d344f53..8232f2073e2 100644
--- a/code/_onclick/hud/alien_larva.dm
+++ b/code/_onclick/hud/alien_larva.dm
@@ -61,21 +61,6 @@
mymob.pullin.update_icon(mymob)
mymob.pullin.screen_loc = ui_pull_resist
- mymob.blind = new /obj/screen()
- mymob.blind.icon = 'icons/mob/screen1_full.dmi'
- mymob.blind.icon_state = "blackimageoverlay"
- mymob.blind.name = " "
- mymob.blind.screen_loc = "CENTER-7,CENTER-7"
- mymob.blind.layer = 0
- mymob.blind.mouse_opacity = 0
-
- mymob.flash = new /obj/screen()
- mymob.flash.icon = 'icons/mob/screen1_alien.dmi'
- mymob.flash.icon_state = "blank"
- mymob.flash.name = "flash"
- mymob.flash.screen_loc = "WEST,SOUTH to EAST,NORTH"
- mymob.flash.layer = 17
-
mymob.zone_sel = new /obj/screen/zone_sel()
mymob.zone_sel.icon = 'icons/mob/screen1_alien.dmi'
mymob.zone_sel.overlays.Cut()
@@ -83,6 +68,6 @@
mymob.client.screen = list()
- mymob.client.screen += list( mymob.zone_sel, mymob.oxygen, mymob.toxin, mymob.fire, mymob.healths, nightvisionicon, mymob.pullin, mymob.blind, mymob.flash) //, mymob.rest, mymob.sleep, mymob.mach )
+ mymob.client.screen += list( mymob.zone_sel, mymob.oxygen, mymob.toxin, mymob.fire, mymob.healths, nightvisionicon, mymob.pullin) //, mymob.rest, mymob.sleep, mymob.mach )
mymob.client.screen += src.adding + src.other
mymob.client.screen += mymob.client.void
\ No newline at end of file
diff --git a/code/_onclick/hud/bot.dm b/code/_onclick/hud/bot.dm
index ee8d1e49e2b..c4488376309 100644
--- a/code/_onclick/hud/bot.dm
+++ b/code/_onclick/hud/bot.dm
@@ -47,24 +47,9 @@
mymob.pullin.update_icon(mymob)
mymob.pullin.screen_loc = ui_bot_pull
- mymob.blind = new /obj/screen()
- mymob.blind.icon = 'icons/mob/screen1_full.dmi'
- mymob.blind.icon_state = "blackimageoverlay"
- mymob.blind.name = " "
- mymob.blind.screen_loc = "CENTER-7,CENTER-7"
- mymob.blind.layer = 0
- mymob.blind.mouse_opacity = 0
-
- mymob.flash = new /obj/screen()
- mymob.flash.icon = 'icons/mob/screen1_bot.dmi'
- mymob.flash.icon_state = "blank"
- mymob.flash.name = "flash"
- mymob.flash.screen_loc = "WEST,SOUTH to EAST,NORTH"
- mymob.flash.layer = 17
-
mymob.client.screen = list()
- mymob.client.screen += list(mymob.oxygen, mymob.fire, mymob.healths, mymob.pullin, mymob.blind, mymob.flash)
+ mymob.client.screen += list(mymob.oxygen, mymob.fire, mymob.healths, mymob.pullin)
mymob.client.screen += adding + other
mymob.client.screen += mymob.client.void
return
\ No newline at end of file
diff --git a/code/_onclick/hud/fullscreen.dm b/code/_onclick/hud/fullscreen.dm
new file mode 100644
index 00000000000..8ab49788e5b
--- /dev/null
+++ b/code/_onclick/hud/fullscreen.dm
@@ -0,0 +1,112 @@
+#define FULLSCREEN_LAYER 18
+#define DAMAGE_LAYER FULLSCREEN_LAYER + 0.1
+#define BLIND_LAYER DAMAGE_LAYER + 0.1
+#define CRIT_LAYER BLIND_LAYER + 0.1
+
+/mob
+ var/list/screens = list()
+
+/mob/proc/overlay_fullscreen(category, type, severity)
+ var/obj/screen/fullscreen/screen
+ if(screens[category])
+ screen = screens[category]
+ if(screen.type != type)
+ clear_fullscreen(category, FALSE)
+ return .()
+ else if(!severity || severity == screen.severity)
+ return null
+ else
+ screen = new type
+
+ screen.icon_state = "[initial(screen.icon_state)][severity]"
+ screen.severity = severity
+
+ screens[category] = screen
+ if(client)
+ client.screen += screen
+ return screen
+
+/mob/proc/clear_fullscreen(category, animated = 10)
+ var/obj/screen/fullscreen/screen = screens[category]
+ if(!screen)
+ return
+
+ screens -= category
+
+ if(animated)
+ spawn(0)
+ animate(screen, alpha = 0, time = animated)
+ sleep(animated)
+ if(client)
+ client.screen -= screen
+ qdel(screen)
+ else
+ if(client)
+ client.screen -= screen
+ qdel(screen)
+
+/mob/proc/clear_fullscreens()
+ for(var/category in screens)
+ clear_fullscreen(category)
+
+/datum/hud/proc/reload_fullscreen()
+ var/list/screens = mymob.screens
+ for(var/category in screens)
+ mymob.client.screen |= screens[category]
+
+/obj/screen/fullscreen
+ icon = 'icons/mob/screen_full.dmi'
+ icon_state = "default"
+ screen_loc = "CENTER-7,CENTER-7"
+ layer = FULLSCREEN_LAYER
+ mouse_opacity = 0
+ var/severity = 0
+
+/obj/screen/fullscreen/Destroy()
+ ..()
+ severity = 0
+ return QDEL_HINT_HARDDEL_NOW
+
+/obj/screen/fullscreen/brute
+ icon_state = "brutedamageoverlay"
+ layer = DAMAGE_LAYER
+
+/obj/screen/fullscreen/oxy
+ icon_state = "oxydamageoverlay"
+ layer = DAMAGE_LAYER
+
+/obj/screen/fullscreen/crit
+ icon_state = "passage"
+ layer = CRIT_LAYER
+
+/obj/screen/fullscreen/blind
+ icon_state = "blackimageoverlay"
+ layer = BLIND_LAYER
+
+/obj/screen/fullscreen/impaired
+ icon_state = "impairedoverlay"
+
+/obj/screen/fullscreen/blurry
+ icon = 'icons/mob/screen_gen.dmi'
+ screen_loc = "WEST,SOUTH to EAST,NORTH"
+ icon_state = "blurry"
+
+/obj/screen/fullscreen/flash
+ icon = 'icons/mob/screen_gen.dmi'
+ screen_loc = "WEST,SOUTH to EAST,NORTH"
+ icon_state = "flash"
+
+/obj/screen/fullscreen/flash/noise
+ icon = 'icons/mob/screen_gen.dmi'
+ screen_loc = "WEST,SOUTH to EAST,NORTH"
+ icon_state = "noise"
+
+/obj/screen/fullscreen/high
+ icon = 'icons/mob/screen_gen.dmi'
+ screen_loc = "WEST,SOUTH to EAST,NORTH"
+ icon_state = "druggy"
+
+#undef FULLSCREEN_LAYER
+#undef BLIND_LAYER
+#undef DAMAGE_LAYER
+#undef CRIT_LAYER
diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm
index 555df404e28..6d5da0da58e 100644
--- a/code/_onclick/hud/hud.dm
+++ b/code/_onclick/hud/hud.dm
@@ -1,84 +1,3 @@
-/*
- The global hud:
- Uses the same visual objects for all players.
-*/
-var/datum/global_hud/global_hud = new()
-
-/datum/hud/var/obj/screen/grab_intent
-/datum/hud/var/obj/screen/hurt_intent
-/datum/hud/var/obj/screen/disarm_intent
-/datum/hud/var/obj/screen/help_intent
-
-/datum/global_hud
- var/obj/screen/druggy
- var/obj/screen/blurry
- var/list/vimpaired
- var/list/darkMask
-
-/datum/global_hud/New()
- //420erryday psychedellic colours screen overlay for when you are high
- druggy = new /obj/screen()
- druggy.screen_loc = "WEST,SOUTH to EAST,NORTH"
- druggy.icon_state = "druggy"
- druggy.layer = 17
- druggy.mouse_opacity = 0
-
- //that white blurry effect you get when you eyes are damaged
- blurry = new /obj/screen()
- blurry.screen_loc = "WEST,SOUTH to EAST,NORTH"
- blurry.icon_state = "blurry"
- blurry.layer = 17
- blurry.mouse_opacity = 0
-
- var/obj/screen/O
- var/i
- //that nasty looking dither you get when you're short-sighted
- vimpaired = newlist(/obj/screen,/obj/screen,/obj/screen,/obj/screen)
- O = vimpaired[1]
- O.screen_loc = "WEST,SOUTH to CENTER-3,NORTH"
- O = vimpaired[2]
- O.screen_loc = "WEST,SOUTH to EAST,CENTER-3"
- O = vimpaired[3]
- O.screen_loc = "CENTER+3,SOUTH to EAST,NORTH"
- O = vimpaired[4]
- O.screen_loc = "WEST,CENTER+3 to EAST,NORTH"
-
- //welding mask overlay black/dither
- darkMask = newlist(/obj/screen, /obj/screen, /obj/screen, /obj/screen, /obj/screen, /obj/screen, /obj/screen, /obj/screen)
- O = darkMask[1]
- O.screen_loc = "CENTER-5,CENTER-5 to CENTER-3,CENTER+5"
- O = darkMask[2]
- O.screen_loc = "CENTER-5,CENTER-5 to CENTER+5,CENTER-3"
- O = darkMask[3]
- O.screen_loc = "CENTER+3,CENTER-5 to CENTER+5,CENTER+5"
- O = darkMask[4]
- O.screen_loc = "CENTER-5,CENTER+3 to CENTER+5,CENTER+5"
- O = darkMask[5]
- O.screen_loc = "WEST,SOUTH to CENTER-5,NORTH"
- O = darkMask[6]
- O.screen_loc = "WEST,SOUTH to EAST,CENTER-5"
- O = darkMask[7]
- O.screen_loc = "CENTER+5,SOUTH to EAST,NORTH"
- O = darkMask[8]
- O.screen_loc = "WEST,CENTER+5 to EAST,NORTH"
-
- for(i = 1, i <= 4, i++)
- O = vimpaired[i]
- O.icon_state = "dither50"
- O.layer = 17
- O.mouse_opacity = 0
-
- O = darkMask[i]
- O.icon_state = "dither50"
- O.layer = 17
- O.mouse_opacity = 0
-
- for(i = 5, i <= 8, i++)
- O = darkMask[i]
- O.icon_state = "black"
- O.layer = 17
- O.mouse_opacity = 0
-
/*
The hud datum
Used to show and hide huds for all the different mob types,
@@ -182,8 +101,6 @@ datum/hud/New(mob/owner)
monkey_hud(ui_style, ui_color, ui_alpha)
else if(ishuman(mymob))
human_hud(ui_style, ui_color, ui_alpha) // Pass the player the UI style chosen in preferences
- else if(isbrain(mymob))
- brain_hud(ui_style)
else if( islarva(mymob) || isfacehugger(mymob) )
larva_hud()
else if (isembryo(mymob))
@@ -208,8 +125,8 @@ datum/hud/New(mob/owner)
guardian_hud()
else if(ispet(mymob))
corgi_hud()
- else
-
+
+ reload_fullscreen()
//Triggered when F12 is pressed (Unless someone changed something in the DMF)
/mob/verb/button_pressed_F12(var/full = 0 as null)
@@ -275,6 +192,8 @@ datum/hud/New(mob/owner)
hud_used.hidden_inventory_update()
hud_used.persistant_inventory_update()
update_action_buttons()
+ //hud_used.reorganize_alerts()
+
else
usr << "\red Inventory hiding is currently only supported for human mobs, sorry."
else
diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm
index 7236feb439f..2bf587c1cc1 100644
--- a/code/_onclick/hud/human.dm
+++ b/code/_onclick/hud/human.dm
@@ -424,31 +424,6 @@
lingstingdisplay = new /obj/screen/ling/sting()
lingstingdisplay.screen_loc = ui_lingstingdisplay
- mymob.blind = new /obj/screen()
- mymob.blind.icon = 'icons/mob/screen1_full.dmi'
- mymob.blind.icon_state = "blackimageoverlay"
- mymob.blind.name = "blind"
- mymob.blind.screen_loc = "CENTER-7,CENTER-7"
- mymob.blind.mouse_opacity = 0
- mymob.blind.layer = 0
-
- mymob.damageoverlay = new /obj/screen()
- mymob.damageoverlay.icon = 'icons/mob/screen1_full.dmi'
- mymob.damageoverlay.icon_state = "oxydamageoverlay0"
- mymob.damageoverlay.name = "dmg"
- mymob.damageoverlay.screen_loc = "CENTER-7,CENTER-7"
- mymob.damageoverlay.mouse_opacity = 0
- mymob.damageoverlay.layer = 18.1 //The black screen overlay sets layer to 18 to display it, this one has to be just on top.
-
- mymob.flash = new /obj/screen()
- mymob.flash.icon = ui_style
- mymob.flash.icon_state = "blank"
- mymob.flash.name = "flash"
- mymob.flash.screen_loc = "WEST,SOUTH to EAST,NORTH"
- mymob.flash.layer = 17
-
- mymob.pain = new /obj/screen( null )
-
mymob.zone_sel = new /obj/screen/zone_sel( null )
mymob.zone_sel.icon = ui_style
mymob.zone_sel.color = ui_color
@@ -480,10 +455,10 @@
mymob.client.screen = list()
- mymob.client.screen += list( mymob.throw_icon, mymob.zone_sel, mymob.oxygen, mymob.pressure, mymob.toxin, mymob.bodytemp, mymob.internals, mymob.fire, mymob.healths, mymob.healthdoll, mymob.nutrition_icon, mymob.pullin, mymob.blind, mymob.flash, mymob.damageoverlay, mymob.gun_setting_icon, lingchemdisplay, lingstingdisplay) //, mymob.hands, mymob.rest, mymob.sleep) //, mymob.mach )
+ mymob.client.screen += list( mymob.throw_icon, mymob.zone_sel, mymob.oxygen, mymob.pressure, mymob.toxin, mymob.bodytemp, mymob.internals, mymob.fire, mymob.healths, mymob.healthdoll, mymob.nutrition_icon, mymob.pullin, mymob.gun_setting_icon, lingchemdisplay, lingstingdisplay) //, mymob.hands, mymob.rest, mymob.sleep) //, mymob.mach )
mymob.client.screen += src.adding + src.hotkeybuttons
mymob.client.screen += mymob.client.void
- inventory_shown = 0;
+ inventory_shown = 0
return
diff --git a/code/_onclick/hud/monkey.dm b/code/_onclick/hud/monkey.dm
index 18b45befa88..b7a9a102116 100644
--- a/code/_onclick/hud/monkey.dm
+++ b/code/_onclick/hud/monkey.dm
@@ -19,59 +19,6 @@
src.adding += using
action_intent = using
-//intent small hud objects
-/* var/icon/ico
-
- ico = new(ui_style, "black")
- ico.MapColors(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -1,-1,-1,-1)
- ico.DrawBox(rgb(255,255,255,1),1,ico.Height()/2,ico.Width()/2,ico.Height())
- using = new /obj/screen( src )
- using.name = "help"
- using.icon = ico
- using.screen_loc = ui_acti
- using.alpha = ui_alpha
- using.layer = 21
- src.adding += using
- help_intent = using
-
- ico = new(ui_style, "black")
- ico.MapColors(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -1,-1,-1,-1)
- ico.DrawBox(rgb(255,255,255,1),ico.Width()/2,ico.Height()/2,ico.Width(),ico.Height())
- using = new /obj/screen( src )
- using.name = "disarm"
- using.icon = ico
- using.screen_loc = ui_acti
- using.alpha = ui_alpha
- using.layer = 21
- src.adding += using
- disarm_intent = using
-
- ico = new(ui_style, "black")
- ico.MapColors(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -1,-1,-1,-1)
- ico.DrawBox(rgb(255,255,255,1),ico.Width()/2,1,ico.Width(),ico.Height()/2)
- using = new /obj/screen( src )
- using.name = "grab"
- using.icon = ico
- using.screen_loc = ui_acti
- using.alpha = ui_alpha
- using.layer = 21
- src.adding += using
- grab_intent = using
-
- ico = new(ui_style, "black")
- ico.MapColors(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -1,-1,-1,-1)
- ico.DrawBox(rgb(255,255,255,1),1,1,ico.Width()/2,ico.Height()/2)
- using = new /obj/screen( src )
- using.name = "harm"
- using.icon = ico
- using.screen_loc = ui_acti
- using.alpha = ui_alpha
- using.layer = 21
- src.adding += using
- hurt_intent = using
-*/
-//end intent small hud objects
-
using = new /obj/screen/mov_intent()
using.name = "mov_intent"
using.dir = SOUTHWEST
@@ -245,32 +192,6 @@
lingstingdisplay = new /obj/screen/ling/sting()
lingstingdisplay.screen_loc = ui_lingstingdisplay
- mymob.blind = new /obj/screen()
- mymob.blind.icon = 'icons/mob/screen1_full.dmi'
- mymob.blind.icon_state = "blackimageoverlay"
- mymob.blind.name = "blind"
- mymob.blind.screen_loc = "CENTER-7,CENTER-7"
- mymob.blind.mouse_opacity = 0
- mymob.blind.layer = 0
- mymob.blind.mouse_opacity = 0
-
- mymob.damageoverlay = new /obj/screen()
- mymob.damageoverlay.icon = 'icons/mob/screen1_full.dmi'
- mymob.damageoverlay.icon_state = "oxydamageoverlay0"
- mymob.damageoverlay.name = "dmg"
- mymob.damageoverlay.screen_loc = "CENTER-7,CENTER-7"
- mymob.damageoverlay.mouse_opacity = 0
- mymob.damageoverlay.layer = 18.1 //The black screen overlay sets layer to 18 to display it, this one has to be just on top.
-
- mymob.flash = new /obj/screen()
- mymob.flash.icon = ui_style
- mymob.flash.icon_state = "blank"
- mymob.flash.name = "flash"
- mymob.flash.screen_loc = "WEST,SOUTH to EAST,NORTH"
- mymob.flash.layer = 17
-
- mymob.pain = new /obj/screen( null )
-
mymob.zone_sel = new /obj/screen/zone_sel( null )
mymob.zone_sel.icon = ui_style
mymob.zone_sel.color = ui_color
@@ -302,8 +223,8 @@
mymob.client.screen = list()
- mymob.client.screen += list( mymob.throw_icon, mymob.zone_sel, mymob.oxygen, mymob.pressure, mymob.toxin, mymob.bodytemp, mymob.internals, mymob.fire, mymob.healths, mymob.healthdoll, mymob.nutrition_icon, mymob.pullin, mymob.blind, mymob.flash, mymob.damageoverlay, mymob.gun_setting_icon, lingchemdisplay, lingstingdisplay) //, mymob.hands, mymob.rest, mymob.sleep) //, mymob.mach )
+ mymob.client.screen += list( mymob.throw_icon, mymob.zone_sel, mymob.oxygen, mymob.pressure, mymob.toxin, mymob.bodytemp, mymob.internals, mymob.fire, mymob.healths, mymob.healthdoll, mymob.nutrition_icon, mymob.pullin, mymob.gun_setting_icon, lingchemdisplay, lingstingdisplay) //, mymob.hands, mymob.rest, mymob.sleep) //, mymob.mach )
mymob.client.screen += src.adding + src.hotkeybuttons
mymob.client.screen += mymob.client.void
- return
+ return
\ No newline at end of file
diff --git a/code/_onclick/hud/movable_screen_objects.dm b/code/_onclick/hud/movable_screen_objects.dm
index a0dc4827ba9..e8d4e4b3d73 100644
--- a/code/_onclick/hud/movable_screen_objects.dm
+++ b/code/_onclick/hud/movable_screen_objects.dm
@@ -27,13 +27,13 @@
return
//Split screen-loc up into X+Pixel_X and Y+Pixel_Y
- var/list/screen_loc_params = text2list(PM["screen-loc"], ",")
+ var/list/screen_loc_params = splittext(PM["screen-loc"], ",")
//Split X+Pixel_X up into list(X, Pixel_X)
- var/list/screen_loc_X = text2list(screen_loc_params[1],":")
+ var/list/screen_loc_X = splittext(screen_loc_params[1],":")
//Split Y+Pixel_Y up into list(Y, Pixel_Y)
- var/list/screen_loc_Y = text2list(screen_loc_params[2],":")
+ var/list/screen_loc_Y = splittext(screen_loc_params[2],":")
if(snap2grid) //Discard Pixel Values
screen_loc = "[screen_loc_X[1]],[screen_loc_Y[1]]"
diff --git a/code/_onclick/hud/other_mobs.dm b/code/_onclick/hud/other_mobs.dm
index e2923055324..e0b1ea11f1a 100644
--- a/code/_onclick/hud/other_mobs.dm
+++ b/code/_onclick/hud/other_mobs.dm
@@ -35,19 +35,10 @@
mymob.toxin.name = "toxin"
mymob.toxin.screen_loc = ui_toxin
- mymob.client.screen = null
+ mymob.client.screen = list()
mymob.client.screen += list(mymob.fire, mymob.healths, mymob.pullin, mymob.oxygen, mymob.toxin)
-/datum/hud/proc/brain_hud(ui_style = 'icons/mob/screen1_Midnight.dmi')
- mymob.blind = new /obj/screen()
- mymob.blind.icon = 'icons/mob/screen1_full.dmi'
- mymob.blind.icon_state = "blackimageoverlay"
- mymob.blind.name = " "
- mymob.blind.screen_loc = "CENTER-7,CENTER-7"
- mymob.blind.layer = 0
- mymob.blind.mouse_opacity = 0
-
/datum/hud/proc/blob_hud(ui_style = 'icons/mob/screen1_Midnight.dmi')
diff --git a/code/_onclick/hud/robot.dm b/code/_onclick/hud/robot.dm
index 78ee883960c..b83bfcf411a 100644
--- a/code/_onclick/hud/robot.dm
+++ b/code/_onclick/hud/robot.dm
@@ -210,50 +210,17 @@
mymob.pullin.update_icon(mymob)
mymob.pullin.screen_loc = ui_borg_pull
- mymob.blind = new /obj/screen()
- mymob.blind.icon = 'icons/mob/screen1_full.dmi'
- mymob.blind.icon_state = "blackimageoverlay"
- mymob.blind.name = " "
- mymob.blind.screen_loc = "CENTER-7,CENTER-7"
- mymob.blind.layer = 0
- mymob.blind.mouse_opacity = 0
-
- mymob.flash = new /obj/screen()
- mymob.flash.icon = 'icons/mob/screen1_robot.dmi'
- mymob.flash.icon_state = "blank"
- mymob.flash.name = "flash"
- mymob.flash.screen_loc = "WEST,SOUTH to EAST,NORTH"
- mymob.flash.layer = 17
-
mymob.zone_sel = new /obj/screen/zone_sel()
mymob.zone_sel.icon = 'icons/mob/screen1_robot.dmi'
mymob.zone_sel.overlays.Cut()
mymob.zone_sel.overlays += image('icons/mob/zone_sel.dmi', "[mymob.zone_sel.selecting]")
- //Handle the gun settings buttons
mymob.gun_setting_icon = new /obj/screen/gun/mode(null)
mymob.item_use_icon = new /obj/screen/gun/item(null)
- //if (mymob.client)
- // if (mymob.client.gun_mode) // If in aim mode, correct the sprite
- // mymob.gun_setting_icon.dir = 2
- //for(var/obj/item/weapon/gun/G in mymob) // If targeting someone, display other buttons
- // if (G.target)
- // mymob.item_use_icon = new /obj/screen/gun/item(null)
- // if (mymob.client.target_can_click)
- // mymob.item_use_icon.dir = 1
- //src.adding += mymob.item_use_icon
- /*mymob.gun_move_icon = new /obj/screen/gun/move(null)
- if (mymob.client.target_can_move)
- mymob.gun_move_icon.dir = 1
- mymob.gun_run_icon = new /obj/screen/gun/run(null)
- if (mymob.client.target_can_run)
- mymob.gun_run_icon.dir = 1
- src.adding += mymob.gun_run_icon
- src.adding += mymob.gun_move_icon*/
mymob.client.screen = list()
- mymob.client.screen += list(mymob.zone_sel, mymob.oxygen, mymob.fire, mymob.hands, mymob.healths, mymob:cells, mymob.pullin, mymob.blind, mymob.flash, mymob.gun_setting_icon, mymob:lamp_button) //, mymob.rest, mymob.sleep, mymob.mach )
+ mymob.client.screen += list(mymob.zone_sel, mymob.oxygen, mymob.fire, mymob.hands, mymob.healths, mymob:cells, mymob.pullin, mymob.gun_setting_icon, mymob:lamp_button) //, mymob.rest, mymob.sleep, mymob.mach )
mymob.client.screen += src.adding + src.other
mymob.client.screen += mymob.client.void
return
diff --git a/code/controllers/ProcessScheduler/core/_stubs.dm b/code/controllers/ProcessScheduler/core/_stubs.dm
deleted file mode 100644
index 94f4cc1fc4b..00000000000
--- a/code/controllers/ProcessScheduler/core/_stubs.dm
+++ /dev/null
@@ -1,27 +0,0 @@
-/**
- * _stubs.dm
- *
- * This file contains constructs that the process scheduler expects to exist
- * in a standard ss13 fork.
- */
-/*
-/**
- * message_admins
- *
- * sends a message to admins
- */
-/proc/message_admins(msg)
- world << msg
-*/
-/**
- * logTheThing
- *
- * In goonstation, this proc writes a message to either the world log or diary.
- *
- * Blame Keelin.
- */
-/proc/logTheThing(type, source, target, text, diaryType)
- if(diaryType)
- world << "Diary: \[[diaryType]:[type]] [text]"
- else
- world << "Log: \[[type]] [text]"
diff --git a/code/controllers/ProcessScheduler/core/process.dm b/code/controllers/ProcessScheduler/core/process.dm
index b7767c367fd..27ba2479ae5 100644
--- a/code/controllers/ProcessScheduler/core/process.dm
+++ b/code/controllers/ProcessScheduler/core/process.dm
@@ -69,10 +69,10 @@
* recordkeeping vars
*/
- // Records the time (1/10s timeofday) at which the process last finished sleeping
+ // Records the time (1/10s timeoftick) at which the process last finished sleeping
var/tmp/last_slept = 0
- // Records the time (1/10s timeofday) at which the process last began running
+ // Records the time (1/10s timeofgame) at which the process last began running
var/tmp/run_start = 0
// Records the number of times this process has been killed and restarted
@@ -106,12 +106,8 @@
last_object = null
/datum/controller/process/proc/started()
- var/timeofhour = TimeOfHour
- // Initialize last_slept so we can know when to sleep
- last_slept = timeofhour
-
// Initialize run_start so we can detect hung processes.
- run_start = timeofhour
+ run_start = TimeOfGame
// Initialize defer count
cpu_defer_count = 0
@@ -163,18 +159,13 @@
setStatus(PROCESS_STATUS_HUNG)
/datum/controller/process/proc/handleHung()
- var/timeofhour = TimeOfHour
var/datum/lastObj = last_object
var/lastObjType = "null"
if(istype(lastObj))
lastObjType = lastObj.type
- // If timeofhour has rolled over, then we need to adjust.
- if (timeofhour < run_start)
- run_start -= 36000
- var/msg = "[name] process hung at tick #[ticks]. Process was unresponsive for [(timeofhour - run_start) / 10] seconds and was restarted. Last task: [last_task]. Last Object Type: [lastObjType]"
- logTheThing("debug", null, null, msg)
- logTheThing("diary", null, null, msg, "debug")
+ var/msg = "[name] process hung at tick #[ticks]. Process was unresponsive for [(TimeOfGame - run_start) / 10] seconds and was restarted. Last task: [last_task]. Last Object Type: [lastObjType]"
+ log_debug(msg)
message_admins(msg)
main.restartProcess(src.name)
@@ -182,8 +173,8 @@
/datum/controller/process/proc/kill()
if (!killed)
var/msg = "[name] process was killed at tick #[ticks]."
- logTheThing("debug", null, null, msg)
- logTheThing("diary", null, null, msg, "debug")
+ log_debug(msg)
+ message_admins(msg)
//finished()
// Allow inheritors to clean up if needed
@@ -208,17 +199,12 @@
if (main.getCurrentTickElapsedTime() > main.timeAllowance)
sleep(world.tick_lag)
cpu_defer_count++
- last_slept = TimeOfHour
+ last_slept = 0
else
- var/timeofhour = TimeOfHour
- // If timeofhour has rolled over, then we need to adjust.
- if (timeofhour < last_slept)
- last_slept -= 36000
-
- if (timeofhour > last_slept + sleep_interval)
+ if (TimeOfTick > last_slept + sleep_interval)
// If we haven't slept in sleep_interval deciseconds, sleep to allow other work to proceed.
sleep(0)
- last_slept = TimeOfHour
+ last_slept = TimeOfTick
/datum/controller/process/proc/update()
// Clear delta
@@ -239,10 +225,7 @@
/datum/controller/process/proc/getElapsedTime()
- var/timeofhour = TimeOfHour
- if (timeofhour < run_start)
- return timeofhour - (run_start - 36000)
- return timeofhour - run_start
+ return TimeOfGame - run_start
/datum/controller/process/proc/tickDetail()
return
diff --git a/code/controllers/ProcessScheduler/core/processScheduler.dm b/code/controllers/ProcessScheduler/core/processScheduler.dm
index eccb44c49c5..1c6a0c91a28 100644
--- a/code/controllers/ProcessScheduler/core/processScheduler.dm
+++ b/code/controllers/ProcessScheduler/core/processScheduler.dm
@@ -43,8 +43,6 @@ var/global/datum/controller/processScheduler/processScheduler
var/tmp/currentTick = 0
- var/tmp/currentTickStart = 0
-
var/tmp/timeAllowance = 0
var/tmp/cpuAverage = 0
@@ -247,7 +245,7 @@ var/global/datum/controller/processScheduler/processScheduler
/datum/controller/processScheduler/proc/recordStart(var/datum/controller/process/process, var/time = null)
if (isnull(time))
- time = TimeOfHour
+ time = TimeOfGame
last_queued[process] = world.time
last_start[process] = time
else
@@ -256,11 +254,7 @@ var/global/datum/controller/processScheduler/processScheduler
/datum/controller/processScheduler/proc/recordEnd(var/datum/controller/process/process, var/time = null)
if (isnull(time))
- time = TimeOfHour
-
- // If world.timeofday has rolled over, then we need to adjust.
- if (time < last_start[process])
- last_start[process] -= 36000
+ time = TimeOfGame
var/lastRunTime = time - last_start[process]
@@ -349,13 +343,12 @@ var/global/datum/controller/processScheduler/processScheduler
updateCurrentTickData()
return 0
else
- return TimeOfHour - currentTickStart
+ return TimeOfTick
/datum/controller/processScheduler/proc/updateCurrentTickData()
if (world.time > currentTick)
// New tick!
currentTick = world.time
- currentTickStart = TimeOfHour
updateTimeAllowance()
cpuAverage = (world.cpu + cpuAverage + cpuAverage) / 3
diff --git a/code/controllers/Processes/bot.dm b/code/controllers/Processes/bot.dm
deleted file mode 100644
index dceb5504b67..00000000000
--- a/code/controllers/Processes/bot.dm
+++ /dev/null
@@ -1,27 +0,0 @@
-/datum/controller/process/bot/setup()
- name = "bot"
- schedule_interval = 20 // every 2 seconds
-
-/datum/controller/process/bot/started()
- ..()
- if(!aibots)
- aibots = list()
-
-/datum/controller/process/bot/statProcess()
- ..()
- stat(null, "[aibots && aibots.len] bots")
-
-/datum/controller/process/bot/doWork()
- for(last_object in aibots)
- var/obj/machinery/bot/B = last_object
- if(istype(B) && isnull(B.gcDestroyed))
- // Some bots sleep when they process, but there's not many bots, so just spawn them off
- spawn(-1)
- try
- B.bot_process()
- catch(var/exception/e)
- catchException(e, B)
- SCHECK
- else
- catchBadType(B)
- aibots -= B
diff --git a/code/controllers/Processes/timer.dm b/code/controllers/Processes/timer.dm
index 49024083940..0e059317058 100644
--- a/code/controllers/Processes/timer.dm
+++ b/code/controllers/Processes/timer.dm
@@ -60,7 +60,7 @@ var/global/datum/controller/process/timer/timer_master
event.thingToCall = thingToCall
event.procToCall = procToCall
event.timeToRun = world.time + wait
- event.hash = list2text(args)
+ event.hash = jointext(args, null)
if(args.len > 4)
event.argList = args.Copy(5)
diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm
index 208c41ffcf6..2d98b267f95 100644
--- a/code/controllers/configuration.dm
+++ b/code/controllers/configuration.dm
@@ -167,8 +167,6 @@
var/disable_away_missions = 0 // disable away missions
- var/autoconvert_notes = 0 //if all connecting player's notes should attempt to be converted to the database
-
var/ooc_allowed = 1
var/looc_allowed = 1
var/dooc_allowed = 1
@@ -223,7 +221,7 @@
if(type == "config")
switch (name)
if ("resource_urls")
- config.resource_urls = text2list(value, " ")
+ config.resource_urls = splittext(value, " ")
if ("admin_legacy_system")
config.admin_legacy_system = 1
@@ -458,7 +456,7 @@
config.comms_password = value
if("irc_bot_host")
- config.irc_bot_host = text2list(value, ";")
+ config.irc_bot_host = splittext(value, ";")
if("main_irc")
config.main_irc = value
@@ -546,9 +544,6 @@
if("disable_away_missions")
config.disable_away_missions = 1
- if("autoconvert_notes")
- config.autoconvert_notes = 1
-
if("disable_lobby_music")
config.disable_lobby_music = 1
diff --git a/code/datums/cargoprofile.dm b/code/datums/cargoprofile.dm
index 971a6df70f3..eea90b687e6 100644
--- a/code/datums/cargoprofile.dm
+++ b/code/datums/cargoprofile.dm
@@ -557,7 +557,7 @@
return "[garbletext(copytext(Text,l/2,0))][pick("#","|","/","*",".","."," ","."," "," ")]"
proc/garble_keeptags(var/Text)
- var/list/L = text2list(Text,">")
+ var/list/L = splittext(Text,">")
var/result = ""
for(var/string in L)
var/index = findtextEx(string,"<")
diff --git a/code/datums/diseases/advance/advance.dm b/code/datums/diseases/advance/advance.dm
index 905f604ec02..a4d41978ac2 100644
--- a/code/datums/diseases/advance/advance.dm
+++ b/code/datums/diseases/advance/advance.dm
@@ -182,7 +182,7 @@ var/list/advance_cures = list(
CRASH("We did not have any symptoms before generating properties.")
return
- var/list/properties = list("resistance" = 1, "stealth" = 1, "stage_rate" = 1, "transmittable" = 1, "severity" = 0)
+ var/list/properties = list("resistance" = 1, "stealth" = 0, "stage_rate" = 1, "transmittable" = 1, "severity" = 0)
for(var/datum/symptom/S in symptoms)
@@ -199,7 +199,7 @@ var/list/advance_cures = list(
if(properties && properties.len)
switch(properties["stealth"])
- if(2 to 3)
+ if(2)
visibility_flags = HIDDEN_SCANNER
if(3 to INFINITY)
visibility_flags = HIDDEN_SCANNER|HIDDEN_PANDEMIC
@@ -294,7 +294,7 @@ var/list/advance_cures = list(
for(var/datum/symptom/S in symptoms)
L += S.id
L = sortList(L) // Sort the list so it doesn't matter which order the symptoms are in.
- var/result = list2text(L, ":")
+ var/result = jointext(L, ":")
id = result
return id
diff --git a/code/datums/hud.dm b/code/datums/hud.dm
index 70a97f648f8..28781979b77 100644
--- a/code/datums/hud.dm
+++ b/code/datums/hud.dm
@@ -13,7 +13,11 @@ var/datum/atom_hud/huds = list( \
ANTAG_HUD_OPS = new/datum/atom_hud/antag(), \
ANTAG_HUD_WIZ = new/datum/atom_hud/antag(), \
ANTAG_HUD_SHADOW = new/datum/atom_hud/antag(), \
- ANTAG_HUD_SOLO = new/datum/atom_hud/antag(), \
+ ANTAG_HUD_TRAITOR = new/datum/atom_hud/antag/hidden(),\
+ ANTAG_HUD_NINJA = new/datum/atom_hud/antag/hidden(),\
+ ANTAG_HUD_CHANGELING = new/datum/atom_hud/antag/hidden(),\
+ ANTAG_HUD_VAMPIRE = new/datum/atom_hud/antag/hidden(),\
+ ANTAG_HUD_ABDUCTOR = new/datum/atom_hud/antag/hidden(),\
)
/datum/atom_hud
@@ -24,7 +28,7 @@ var/datum/atom_hud/huds = list( \
/datum/atom_hud/proc/remove_hud_from(mob/M)
if(!M)
return
- if(src in M.permanent_huds)//I will deal with you later -Fethas
+ if(src in M.permanent_huds)
return
for(var/atom/A in hudatoms)
remove_from_single_hud(M, A)
diff --git a/code/datums/spells/horsemask.dm b/code/datums/spells/horsemask.dm
index 2c31c943284..fd9a6e64bed 100644
--- a/code/datums/spells/horsemask.dm
+++ b/code/datums/spells/horsemask.dm
@@ -44,4 +44,4 @@
qdel(target.wear_mask)
target.equip_to_slot_if_possible(magichead, slot_wear_mask, 1, 1)
- flick("e_flash", target.flash)
+ target.flash_eyes()
diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm
index 8a9a892123a..831e7004ad6 100644
--- a/code/game/atoms_movable.dm
+++ b/code/game/atoms_movable.dm
@@ -1,5 +1,6 @@
/atom/movable
layer = 3
+ appearance_flags = TILE_BOUND
var/last_move = null
var/anchored = 0
// var/elevation = 2 - not used anywhere
diff --git a/code/game/dna/genes/goon_disabilities.dm b/code/game/dna/genes/goon_disabilities.dm
index 04fa6d5f524..8b1317dfb65 100644
--- a/code/game/dna/genes/goon_disabilities.dm
+++ b/code/game/dna/genes/goon_disabilities.dm
@@ -205,7 +205,7 @@
else
prefix=""
- var/list/words = text2list(message," ")
+ var/list/words = splittext(message," ")
var/list/rearranged = list()
for(var/i=1;i<=words.len;i++)
var/cword = pick(words)
@@ -216,7 +216,7 @@
suffix = copytext(cword,length(cword)-1,length(cword) )
if(length(cword))
rearranged += cword
- return "[prefix][uppertext(list2text(rearranged," "))]!!"
+ return "[prefix][uppertext(jointext(rearranged," "))]!!"
// WAS: /datum/bioEffect/toxic_farts
/datum/dna/gene/disability/toxic_farts
diff --git a/code/game/gamemodes/antag_hud.dm b/code/game/gamemodes/antag_hud.dm
index 0b2ee9320de..172c2c1e54c 100644
--- a/code/game/gamemodes/antag_hud.dm
+++ b/code/game/gamemodes/antag_hud.dm
@@ -1,5 +1,9 @@
/datum/atom_hud/antag
hud_icons = list(SPECIALROLE_HUD,NATIONS_HUD)
+ var/self_visible = 1
+
+/datum/atom_hud/antag/hidden
+ self_visible = 0
/datum/atom_hud/antag/proc/join_hud(mob/M,var/slave)
if(!istype(M))
@@ -8,15 +12,8 @@
M.mind.antag_hud.leave_hud(M)
if(!ismask(M))//FUCK YOU MASK OF NARNAR!
add_to_hud(M)
- add_hud_to(M)
- M.mind.antag_hud = src
-
-/datum/atom_hud/antag/proc/join_solo_hud(mob/M,var/slave)//for non team antags and for observer huds
- if(!istype(M))
- CRASH("join_hud(): [M] ([M.type]) is not a mob!")
- if(M.mind.antag_hud && !slave) //note: please let this runtime if a mob has no mind, as mindless mobs shouldn't be getting antagged
- M.mind.antag_hud.leave_hud(M)
- add_to_hud(M)
+ if(self_visible)
+ add_hud_to(M)
M.mind.antag_hud = src
/datum/atom_hud/antag/proc/leave_hud(mob/M)
@@ -49,22 +46,13 @@
if(M.mind || new_icon_state) //in mindless mobs, only null is acceptable, otherwise we're antagging a mindless mob, meaning we should runtime
M.mind.antag_hud_icon_state = new_icon_state
-/datum/atom_hud/antag/proc/is_solo_antag(mob/M)
- if(M.mind.special_role == "traitor" || M.mind.special_role == "vampire" || M.mind.special_role == "Changeling")
- return 1
- return 0
-
-
//MIND PROCS
//these are called by mind.transfer_to()
/datum/mind/proc/transfer_antag_huds(var/datum/atom_hud/antag/newhud)
leave_all_huds()
ticker.mode.set_antag_hud(current, antag_hud_icon_state)
if(newhud)
- if(newhud.is_solo_antag(current))
- newhud.join_solo_hud(current)
- else
- newhud.join_hud(current)
+ newhud.join_hud(current)
/datum/mind/proc/leave_all_huds()
for(var/datum/atom_hud/antag/hud in huds)
diff --git a/code/game/gamemodes/autotraitor/autotraitor.dm b/code/game/gamemodes/autotraitor/autotraitor.dm
index a0059416276..6c01d6197a7 100644
--- a/code/game/gamemodes/autotraitor/autotraitor.dm
+++ b/code/game/gamemodes/autotraitor/autotraitor.dm
@@ -136,8 +136,8 @@
newtraitor << "\red ATTENTION: \black It is time to pay your debt to the Syndicate..."
newtraitor << "You are now a traitor."
newtraitor.mind.special_role = "traitor"
- var/datum/atom_hud/antag/tatorhud = huds[SPECIALROLE_HUD]
- tatorhud.join_solo_hud(newtraitor)
+ var/datum/atom_hud/antag/tatorhud = huds[ANTAG_HUD_TRAITOR]
+ tatorhud.join_hud(newtraitor)
set_antag_hud(src, "hudsyndicate")
var/obj_count = 1
diff --git a/code/game/gamemodes/blob/blobs/blob_mobs.dm b/code/game/gamemodes/blob/blobs/blob_mobs.dm
index bfaad382adf..a35505470fa 100644
--- a/code/game/gamemodes/blob/blobs/blob_mobs.dm
+++ b/code/game/gamemodes/blob/blobs/blob_mobs.dm
@@ -40,6 +40,7 @@
var/obj/effect/blob/factory/factory = null
var/list/human_overlays = list()
var/is_zombie = 0
+ gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
/mob/living/simple_animal/hostile/blob/blobspore/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
..()
@@ -160,6 +161,7 @@
maxbodytemp = 360
force_threshold = 10
environment_smash = 3
+ gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
/mob/living/simple_animal/hostile/blob/blobbernaut/blob_act()
diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm
index 324fa636740..67190e351f4 100644
--- a/code/game/gamemodes/changeling/changeling.dm
+++ b/code/game/gamemodes/changeling/changeling.dm
@@ -164,12 +164,12 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
update_change_icons_removed(changeling_mind)
/datum/game_mode/proc/update_change_icons_added(datum/mind/changeling)
- var/datum/atom_hud/antag/linghud = huds[ANTAG_HUD_SOLO]
- linghud.join_solo_hud(changeling.current)
+ var/datum/atom_hud/antag/linghud = huds[ANTAG_HUD_CHANGELING]
+ linghud.join_hud(changeling.current)
set_antag_hud(changeling.current, "hudchangeling")
/datum/game_mode/proc/update_change_icons_removed(datum/mind/changeling)
- var/datum/atom_hud/antag/linghud = huds[ANTAG_HUD_SOLO]
+ var/datum/atom_hud/antag/linghud = huds[ANTAG_HUD_CHANGELING]
linghud.leave_hud(changeling.current)
set_antag_hud(changeling.current, null)
diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm
index 43bb42dbd8c..e7903c642a9 100644
--- a/code/game/gamemodes/cult/runes.dm
+++ b/code/game/gamemodes/cult/runes.dm
@@ -986,7 +986,7 @@ var/list/sacrificed = list()
if(iscarbon(L))
var/mob/living/carbon/C = L
- flick("e_flash", C.flash)
+ C.flash_eyes()
if(C.stuttering < 1 && (!(HULK in C.mutations)))
C.stuttering = 1
C.Weaken(1)
@@ -1013,7 +1013,7 @@ var/list/sacrificed = list()
else if(iscarbon(T))
var/mob/living/carbon/C = T
- flick("e_flash", C.flash)
+ C.flash_eyes()
if (!(HULK in C.mutations))
C.silent += 15
C.Weaken(10)
diff --git a/code/game/gamemodes/meteor/meteors.dm b/code/game/gamemodes/meteor/meteors.dm
index c7b55472b1c..1ce3cb94a53 100644
--- a/code/game/gamemodes/meteor/meteors.dm
+++ b/code/game/gamemodes/meteor/meteors.dm
@@ -10,6 +10,10 @@
/var/list/meteors_dust = list(/obj/effect/meteor/dust) //for space dust event
+/var/list/meteors_gore = list(/obj/effect/meteor/gore) //Meaty Gore
+
+/var/list/meteors_ops = list(/obj/effect/meteor/goreops) //Meaty Ops
+
///////////////////////////////
//Meteor spawning global procs
@@ -256,3 +260,54 @@
..()
if(prob(20))
explosion(src.loc,2,4,6,8)
+
+
+//Gore
+/obj/effect/meteor/gore
+ name = "Oraganic Debris"
+ icon = 'icons/mob/human.dmi'
+ icon_state = "body_m_s"
+ hits = 1
+ hitpwr = 0
+ meteorsound = 'sound/effects/blobattack.ogg'
+ meteordrop = /obj/item/weapon/reagent_containers/food/snacks/meat
+ var/meteorgibs = /obj/effect/gibspawner/generic
+
+/obj/effect/meteor/gore/make_debris()
+ ..()
+ new meteorgibs(get_turf(src))
+
+
+/obj/effect/meteor/gore/ram_turf(turf/T)
+ if(!istype(T, /turf/space))
+ new /obj/effect/decal/cleanable/blood(T)
+
+/obj/effect/meteor/gore/Bump(atom/A)
+ A.ex_act(hitpwr)
+ get_hit()
+
+//Meteor Ops
+/obj/effect/meteor/goreops
+ name = "MeteorOps"
+ icon = 'icons/mob/animal.dmi'
+ icon_state = "syndicaterangedpsace"
+ hits = 10
+ hitpwr = 1
+ meteorsound = 'sound/effects/blobattack.ogg'
+ meteordrop = /obj/item/weapon/reagent_containers/food/snacks/meat
+ var/meteorgibs = /obj/effect/gibspawner/generic
+
+/obj/effect/meteor/goreops/make_debris()
+ ..()
+ new meteorgibs(get_turf(src))
+
+
+/obj/effect/meteor/goreops/ram_turf(turf/T)
+ if(!istype(T, /turf/space))
+ new /obj/effect/decal/cleanable/blood(T)
+
+/obj/effect/meteor/goreops/Bump(atom/A)
+ A.ex_act(hitpwr)
+ get_hit()
+
+
diff --git a/code/game/gamemodes/mutiny/directives/bluespace_contagion_directive.dm b/code/game/gamemodes/mutiny/directives/bluespace_contagion_directive.dm
index cf7179f539d..e8afea4e1d0 100644
--- a/code/game/gamemodes/mutiny/directives/bluespace_contagion_directive.dm
+++ b/code/game/gamemodes/mutiny/directives/bluespace_contagion_directive.dm
@@ -32,7 +32,7 @@ datum/directive/bluespace_contagion/initialize()
infected_names+="[candidate.mind.assigned_role] [candidate.mind.name]"
special_orders = list(
- "Quarantine these personnel: [list2text(infected_names, ", ")].",
+ "Quarantine these personnel: [jointext(infected_names, ", ")].",
"Allow one hour for a cure to be manufactured.",
"If no cure arrives after that time, execute and burn the infected.")
diff --git a/code/game/gamemodes/mutiny/directives/vox_heist.dm b/code/game/gamemodes/mutiny/directives/vox_heist.dm
index 52e8d0771ef..f652f7016d2 100644
--- a/code/game/gamemodes/mutiny/directives/vox_heist.dm
+++ b/code/game/gamemodes/mutiny/directives/vox_heist.dm
@@ -69,7 +69,7 @@ datum/directive/vox_heist/initialize()
sympathizer_names.Add("[candidate.mind.assigned_role] [candidate.mind.name]")
if(sympathizers.len)
- special_orders.Add("Brig the following sympathizers: [list2text(sympathizer_names, ", ")]")
+ special_orders.Add("Brig the following sympathizers: [jointext(sympathizer_names, ", ")]")
datum/directive/vox_heist/meets_prerequisites()
var/list/candidates = get_vox_candidates()
diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm
index 7fe0121090e..bfb5a38e319 100644
--- a/code/game/gamemodes/traitor/traitor.dm
+++ b/code/game/gamemodes/traitor/traitor.dm
@@ -340,13 +340,13 @@
traitor_mob.mind.store_memory("Potential Collaborator: [M.real_name]")
/datum/game_mode/proc/update_traitor_icons_added(datum/mind/traitor_mind)
- var/datum/atom_hud/antag/tatorhud = huds[ANTAG_HUD_SOLO]
+ var/datum/atom_hud/antag/tatorhud = huds[ANTAG_HUD_TRAITOR]
//var/ref = "\ref[traitor_mind]"
- tatorhud.join_solo_hud(traitor_mind.current)
+ tatorhud.join_hud(traitor_mind.current)
set_antag_hud(traitor_mind.current, "hudsyndicate")
/datum/game_mode/proc/update_traitor_icons_removed(datum/mind/traitor_mind)
- var/datum/atom_hud/antag/tatorhud = huds[ANTAG_HUD_SOLO]
+ var/datum/atom_hud/antag/tatorhud = huds[ANTAG_HUD_TRAITOR]
tatorhud.leave_hud(traitor_mind.current)
set_antag_hud(traitor_mind.current, null)
diff --git a/code/game/gamemodes/vampire/vampire.dm b/code/game/gamemodes/vampire/vampire.dm
index f10227cc6c3..edb240eb1cd 100644
--- a/code/game/gamemodes/vampire/vampire.dm
+++ b/code/game/gamemodes/vampire/vampire.dm
@@ -328,12 +328,12 @@ You are weak to holy things and starlight. Don't go into space and avoid the Cha
//prepare for copypaste
/datum/game_mode/proc/update_vampire_icons_added(datum/mind/vampire_mind)
- var/datum/atom_hud/antag/vamp_hud = huds[ANTAG_HUD_SOLO]
- vamp_hud.join_solo_hud(vampire_mind.current)
+ var/datum/atom_hud/antag/vamp_hud = huds[ANTAG_HUD_VAMPIRE]
+ vamp_hud.join_hud(vampire_mind.current)
set_antag_hud(vampire_mind.current, ((vampire_mind in vampires) ? "hudvampire" : "hudvampirethrall"))
/datum/game_mode/proc/update_vampire_icons_removed(datum/mind/vampire_mind)
- var/datum/atom_hud/antag/vampire_hud = huds[ANTAG_HUD_SOLO]
+ var/datum/atom_hud/antag/vampire_hud = huds[ANTAG_HUD_VAMPIRE]
vampire_hud.leave_hud(vampire_mind.current)
set_antag_hud(vampire_mind.current, null)
diff --git a/code/game/jobs/access.dm b/code/game/jobs/access.dm
index 08f9a73cc2f..d43d5e17e8f 100644
--- a/code/game/jobs/access.dm
+++ b/code/game/jobs/access.dm
@@ -134,7 +134,7 @@
if(!req_access)
req_access = list()
if(req_access_txt)
- var/list/req_access_str = text2list(req_access_txt, ";")
+ var/list/req_access_str = splittext(req_access_txt, ";")
for(var/x in req_access_str)
var/n = text2num(x)
if(n)
@@ -143,7 +143,7 @@
if(!req_one_access)
req_one_access = list()
if(req_one_access_txt)
- var/list/req_one_access_str = text2list(req_one_access_txt,";")
+ var/list/req_one_access_str = splittext(req_one_access_txt,";")
for(var/x in req_one_access_str)
var/n = text2num(x)
if(n)
diff --git a/code/game/jobs/whitelist.dm b/code/game/jobs/whitelist.dm
index 68610e3c0a7..2574e4bdcd0 100644
--- a/code/game/jobs/whitelist.dm
+++ b/code/game/jobs/whitelist.dm
@@ -34,7 +34,7 @@ var/list/whitelist = list()
while(query.NextRow())
var/joblist = query.item[1]
if(joblist!="*")
- var/allowed_jobs = text2list(joblist,",")
+ var/allowed_jobs = splittext(joblist,",")
if(rank in allowed_jobs) return 1
else return 1
return 0
@@ -56,7 +56,7 @@ var/list/whitelist = list()
if (!text)
diary << "Failed to load config/alienwhitelist.txt\n"
else
- alien_whitelist = text2list(text, "\n")
+ alien_whitelist = splittext(text, "\n")
//todo: admin aliens
/proc/is_alien_whitelisted(mob/M, var/species)
@@ -78,7 +78,7 @@ var/list/whitelist = list()
while(query.NextRow())
var/specieslist = query.item[1]
if(specieslist!="*")
- var/allowed_species = text2list(specieslist,",")
+ var/allowed_species = splittext(specieslist,",")
if(species in allowed_species) return 1
else return 1
return 0
diff --git a/code/game/machinery/atmoalter/canister.dm b/code/game/machinery/atmoalter/canister.dm
index 99db01bfae2..0f7688bdadb 100644
--- a/code/game/machinery/atmoalter/canister.dm
+++ b/code/game/machinery/atmoalter/canister.dm
@@ -375,7 +375,7 @@ update_flag
/obj/machinery/portable_atmospherics/canister/attack_alien(mob/living/carbon/alien/humanoid/user)
return
-
+
/obj/machinery/portable_atmospherics/canister/attack_ghost(var/mob/user as mob)
return src.ui_interact(user)
@@ -427,7 +427,7 @@ update_flag
/obj/machinery/portable_atmospherics/canister/Topic(href, href_list)
if(..())
return 1
-
+
if (href_list["choice"] == "menu")
menu = text2num(href_list["mode_target"])
@@ -625,13 +625,12 @@ update_flag
if(busy)
return 0
- if(!WT.isOn())
+ if(!WT.remove_fuel(0, user))
return 0
// Do after stuff here
user << "You start to slice away at \the [src]..."
playsound(src.loc, 'sound/items/Welder.ogg', 50, 1)
- WT.eyecheck(user)
busy = 1
if(do_after(user, 50, target = src))
busy = 0
diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm
index 77616cbb1b6..f74e5ca877d 100644
--- a/code/game/machinery/camera/camera.dm
+++ b/code/game/machinery/camera/camera.dm
@@ -385,4 +385,4 @@
/obj/machinery/camera/portable/process() //Updates whenever the camera is moved.
if(cameranet && get_turf(src) != prev_turf)
cameranet.updatePortableCamera(src)
- prev_turf = get_turf(src)
\ No newline at end of file
+ prev_turf = get_turf(src)
diff --git a/code/game/machinery/camera/camera_assembly.dm b/code/game/machinery/camera/camera_assembly.dm
index 73ee5cdb2aa..46c448f2035 100644
--- a/code/game/machinery/camera/camera_assembly.dm
+++ b/code/game/machinery/camera/camera_assembly.dm
@@ -82,7 +82,7 @@
usr << "No input found please hang up and try your call again."
return
- var/list/tempnetwork = text2list(input, ",")
+ var/list/tempnetwork = splittext(input, ",")
if(tempnetwork.len < 1)
usr << "No network found please hang up and try your call again."
return
@@ -153,16 +153,15 @@
if(!anchored)
..()
-/obj/item/weapon/camera_assembly/proc/weld(var/obj/item/weapon/weldingtool/WT, var/mob/user)
+/obj/item/weapon/camera_assembly/proc/weld(var/obj/item/weapon/weldingtool/WT, var/mob/living/user)
if(busy)
return 0
- if(!WT.isOn())
+ if(!WT.remove_fuel(0, user))
return 0
user << "You start to weld the [src].."
playsound(src.loc, 'sound/items/Welder.ogg', 50, 1)
- WT.eyecheck(user)
busy = 1
if(do_after(user, 20, target = src))
busy = 0
diff --git a/code/game/machinery/computer/skills.dm b/code/game/machinery/computer/skills.dm
index 5ddc91bfa72..3600503d764 100644
--- a/code/game/machinery/computer/skills.dm
+++ b/code/game/machinery/computer/skills.dm
@@ -221,7 +221,7 @@ What a mess.*/
return
Perp = new/list()
t1 = lowertext(t1)
- var/list/components = text2list(t1, " ")
+ var/list/components = splittext(t1, " ")
if(components.len > 5)
return //Lets not let them search too greedily.
for(var/datum/data/record/R in data_core.general)
diff --git a/code/game/machinery/embedded_controller/airlock_docking_controller_multi.dm b/code/game/machinery/embedded_controller/airlock_docking_controller_multi.dm
index d03bffcbae5..0cffb34dc6f 100644
--- a/code/game/machinery/embedded_controller/airlock_docking_controller_multi.dm
+++ b/code/game/machinery/embedded_controller/airlock_docking_controller_multi.dm
@@ -2,21 +2,21 @@
//this is the master controller, that things will try to dock with.
/obj/machinery/embedded_controller/radio/docking_port_multi
name = "docking port controller"
-
+
var/child_tags_txt
var/child_names_txt
var/list/child_names = list()
-
+
var/datum/computer/file/embedded_program/docking/multi/docking_program
/obj/machinery/embedded_controller/radio/docking_port_multi/initialize()
..()
docking_program = new/datum/computer/file/embedded_program/docking/multi(src)
program = docking_program
-
- var/list/names = text2list(child_names_txt, ";")
- var/list/tags = text2list(child_tags_txt, ";")
-
+
+ var/list/names = splittext(child_names_txt, ";")
+ var/list/tags = splittext(child_tags_txt, ";")
+
if (names.len == tags.len)
for (var/i = 1; i <= tags.len; i++)
child_names[tags[i]] = names[i]
@@ -84,10 +84,10 @@
/obj/machinery/embedded_controller/radio/airlock/docking_port_multi/Topic(href, href_list)
if(..())
return
-
+
usr.set_machine(src)
src.add_fingerprint(usr)
-
+
var/clean = 0
switch(href_list["command"]) //anti-HTML-hacking checks
if("cycle_ext")
diff --git a/code/game/machinery/embedded_controller/docking_program_multi.dm b/code/game/machinery/embedded_controller/docking_program_multi.dm
index 46f7538afde..dc582b915f9 100644
--- a/code/game/machinery/embedded_controller/docking_program_multi.dm
+++ b/code/game/machinery/embedded_controller/docking_program_multi.dm
@@ -17,7 +17,7 @@
if (istype(M,/obj/machinery/embedded_controller/radio/docking_port_multi)) //if our parent controller is the right type, then we can auto-init stuff at construction
var/obj/machinery/embedded_controller/radio/docking_port_multi/controller = M
//parse child_tags_txt and create child tags
- children_tags = text2list(controller.child_tags_txt, ";")
+ children_tags = splittext(controller.child_tags_txt, ";")
children_ready = list()
children_override = list()
diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm
index 86e723bca8b..01f95d81ab6 100644
--- a/code/game/machinery/flasher.dm
+++ b/code/game/machinery/flasher.dm
@@ -66,32 +66,15 @@
src.last_flash = world.time
use_power(1000)
- for (var/mob/O in viewers(src, null))
- if (get_dist(src, O) > src.range)
+ for(var/mob/living/L in viewers(src, null))
+ if (get_dist(src, L) > src.range)
continue
- if (istype(O, /mob/living/carbon/human))
- var/mob/living/carbon/human/H = O
- if(!H.eyecheck() <= 0)
- continue
-
- if (istype(O, /mob/living/carbon/alien))//So aliens don't get flashed (they have no external eyes)/N
- continue
-
- O.Weaken(strength)
- if(O.weakeyes)
- O.Weaken(strength * 1.5)
- O.visible_message("[O] gasps and shields their eyes!")
- if (istype(O, /mob/living/carbon/human))
- var/mob/living/carbon/human/H = O
- var/obj/item/organ/internal/eyes/E = H.get_int_organ(/obj/item/organ/internal/eyes)
- if (E && (E.damage > E.min_bruised_damage && prob(E.damage + 50)))
- flick("e_flash", O:flash)
- E.damage += rand(1, 2)
- else
- if(!O.blinded)
- flick("flash", O:flash)
-
+ if(L.flash_eyes(affect_silicon = 1))
+ L.Weaken(strength)
+ if(L.weakeyes)
+ L.Weaken(strength * 1.5)
+ L.visible_message("[L] gasps and shields their eyes!")
/obj/machinery/flasher/emp_act(severity)
if(stat & (BROKEN|NOPOWER))
diff --git a/code/game/machinery/navbeacon.dm b/code/game/machinery/navbeacon.dm
index 78e775a47cb..041e4cfc3d5 100644
--- a/code/game/machinery/navbeacon.dm
+++ b/code/game/machinery/navbeacon.dm
@@ -46,7 +46,7 @@
codes = new()
- var/list/entries = text2list(codes_txt, ";") // entries are separated by semicolons
+ var/list/entries = splittext(codes_txt, ";") // entries are separated by semicolons
for(var/e in entries)
var/index = findtext(e, "=") // format is "key=value"
diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm
index 7c4d5c797f1..29e1fecd9e3 100644
--- a/code/game/machinery/portable_turret.dm
+++ b/code/game/machinery/portable_turret.dm
@@ -556,7 +556,7 @@ var/list/turret_icons
if(!L)
return TURRET_NOT_TARGET
- if(!emagged && issilicon(L)) // Don't target silica
+ if(!emagged && (issilicon(L) || isbot(L))) // Don't target silica
return TURRET_NOT_TARGET
if(L.stat && !emagged) //if the perp is dead/dying, no need to bother really
diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm
index 7c43e3c8e62..e2b02a0ce9d 100644
--- a/code/game/machinery/status_display.dm
+++ b/code/game/machinery/status_display.dm
@@ -88,25 +88,18 @@
remove_display()
return 1
if(STATUS_DISPLAY_TRANSFER_SHUTTLE_TIME) //emergency shuttle timer
+ var/use_warn = 0
if(shuttle_master.emergency.timer)
- message2 = get_shuttle_timer()
- switch(shuttle_master.emergency.mode)
- if(SHUTTLE_RECALL, SHUTTLE_ESCAPE)
- message1 = "-ETR-"
- if(SHUTTLE_CALL)
- message1 = "-ETA-"
- if(SHUTTLE_DOCKED)
- message1 = "-ETD-"
- else
- message1 = "-ERR-"
- message2 = "??:??"
+ use_warn = 1
+ message1 = "-[shuttle_master.emergency.getModeStr()]-"
+ message2 = shuttle_master.emergency.getTimerStr()
+
if(length(message2) > CHARS_PER_LINE)
message2 = "Error!"
- update_display(message1, message2, 1)
else
message1 = "TIME"
message2 = worldtime2text()
- update_display(message1, message2)
+ update_display(message1, message2, use_warn)
return 1
if(STATUS_DISPLAY_MESSAGE) //custom messages
var/line1
@@ -168,18 +161,6 @@
if(maptext != new_text)
maptext = new_text
-/obj/machinery/status_display/proc/get_shuttle_timer()
- var/timeleft = shuttle_master.emergency.timeLeft()
- if(timeleft > 0)
- return "[add_zero(num2text((timeleft / 60) % 60),2)]:[add_zero(num2text(timeleft % 60), 2)]"
- return "00:00"
-
-/obj/machinery/status_display/proc/get_supply_shuttle_timer()
- var/timeleft = shuttle_master.supply.timeLeft()
- if(timeleft > 0)
- return "[add_zero(num2text((timeleft / 60) % 60),2)]:[add_zero(num2text(timeleft % 60), 2)]"
- return "00:00"
-
/obj/machinery/status_display/proc/remove_display()
if(overlays.len)
overlays.Cut()
diff --git a/code/game/machinery/supply_display.dm b/code/game/machinery/supply_display.dm
index 2bc51b495f3..ebe6459b996 100644
--- a/code/game/machinery/supply_display.dm
+++ b/code/game/machinery/supply_display.dm
@@ -13,7 +13,7 @@
message2 = worldtime2text()
else
message1 = "CARGO"
- message2 = get_supply_shuttle_timer()
+ shuttle_master.supply.getTimerStr()
if(lentext(message2) > CHARS_PER_LINE)
message2 = "Error"
diff --git a/code/game/machinery/telecomms/logbrowser.dm b/code/game/machinery/telecomms/logbrowser.dm
index a16bbe7b870..282c7a39cd8 100644
--- a/code/game/machinery/telecomms/logbrowser.dm
+++ b/code/game/machinery/telecomms/logbrowser.dm
@@ -90,9 +90,12 @@
race = "Artificial Life"
else if(isslime(M)) // NT knows a lot about slimes, but not aliens. Can identify slimes
- race = "slime"
+ race = "Slime"
language = race
+ else if(isbot(M))
+ race = "Bot"
+
else if(isanimal(M))
race = "Domestic Animal"
language = race
diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm
index 4a40906dc7b..79682ab4fd1 100644
--- a/code/game/machinery/vending.dm
+++ b/code/game/machinery/vending.dm
@@ -102,7 +102,7 @@
wires = new(src)
spawn(50)
if(product_slogans)
- slogan_list += text2list(product_slogans, ";")
+ slogan_list += splittext(product_slogans, ";")
// So not all machines speak at the exact same time.
// The first time this machine says something will be at slogantime + this random value,
@@ -110,7 +110,7 @@
last_slogan = world.time + rand(0, slogan_delay)
if(product_ads)
- ads_list += text2list(product_ads, ";")
+ ads_list += splittext(product_ads, ";")
build_inventory()
power_change()
@@ -1250,7 +1250,7 @@
vend_delay = 15
icon_state = "artvend"
products = list(/obj/item/stack/cable_coil/random = 10,/obj/item/device/camera = 4,/obj/item/device/camera_film = 6,
- /obj/item/weapon/storage/photo_album = 2,/obj/item/stack/wrapping_paper = 4,/obj/item/stack/packageWrap = 4,
+ /obj/item/weapon/storage/photo_album = 2,/obj/item/stack/wrapping_paper = 4,/obj/item/stack/tape_roll = 5,/obj/item/stack/packageWrap = 4,
/obj/item/weapon/storage/fancy/crayons = 4,/obj/item/weapon/hand_labeler = 4,/obj/item/weapon/paper = 10,
/obj/item/weapon/c_tube = 10,/obj/item/weapon/pen = 5,/obj/item/weapon/pen/blue = 5,
/obj/item/weapon/pen/red = 5)
diff --git a/code/game/objects/explosion.dm b/code/game/objects/explosion.dm
index 068e3144e73..caaf79a9981 100644
--- a/code/game/objects/explosion.dm
+++ b/code/game/objects/explosion.dm
@@ -31,7 +31,7 @@
flame_range = min (MAX_EX_FLAME_RANGE, flame_range)
spawn(0)
- var/start = TimeOfHour
+ var/watch = start_watch()
if(!epicenter) return
var/max_range = max(devastation_range, heavy_impact_range, light_impact_range, flame_range)
@@ -157,8 +157,7 @@
var/turf/throw_at = get_ranged_target_turf(I, throw_dir, throw_range)
I.throw_at(throw_at, throw_range, 2, no_spin = 1) //Throw it at 2 speed, this is purely visual anyway; don't spin the thrown items, it's very costly.
*/
- var/timeofhour = TimeOfHour
- var/took = round((start <= timeofhour) ? ((timeofhour-start)/10) : ((timeofhour-(start-36000))/10), 0.01)
+ var/took = stop_watch(watch)
//You need to press the DebugGame verb to see these now....they were getting annoying and we've collected a fair bit of data. Just -test- changes to explosion code using this please so we can compare
if(Debug2) log_to_dd("## DEBUG: Explosion([x0],[y0],[z0])(d[devastation_range],h[heavy_impact_range],l[light_impact_range]): Took [took] seconds.")
diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm
index 20646a081b7..564e22af0a4 100644
--- a/code/game/objects/items/crayons.dm
+++ b/code/game/objects/items/crayons.dm
@@ -238,7 +238,7 @@
if(C.client)
C.eye_blurry = max(C.eye_blurry, 3)
C.eye_blind = max(C.eye_blind, 1)
- if(C.eyecheck() <= 0) // no eye protection? ARGH IT BURNS.
+ if(C.check_eye_prot() <= 0) // no eye protection? ARGH IT BURNS.
C.confused = max(C.confused, 3)
C.Weaken(3)
C.lip_style = "spray_face"
diff --git a/code/game/objects/items/devices/flash.dm b/code/game/objects/items/devices/flash.dm
index d39a8dfbc93..f40b057d46f 100644
--- a/code/game/objects/items/devices/flash.dm
+++ b/code/game/objects/items/devices/flash.dm
@@ -75,26 +75,28 @@
return 1
-/obj/item/device/flash/proc/flash_carbon(var/mob/living/carbon/M, var/mob/user = null, var/power = 5, convert = 1)
+/obj/item/device/flash/proc/flash_carbon(var/mob/living/carbon/M, var/mob/user = null, var/power = 5, targeted = 1)
add_logs(M, user, "flashed", object="[src.name]")
- if(M.weakeyes)
- M.Weaken(3) //quick weaken bypasses eye protection but has no eye flash
- var/safety = M:eyecheck()
- if(safety <= 0)
- M.confused += power
- flick("e_flash", M.flash)
- if(user && convert)
+ if(user && targeted)
+ if(M.weakeyes)
+ M.Weaken(3) //quick weaken bypasses eye protection but has no eye flash
+ if(M.flash_eyes(1, 1))
+ M.confused += power
terrible_conversion_proc(M, user)
M.Stun(1)
- user.visible_message("[user] blinds [M] with the [src.name]!")
+ visible_message("[user] blinds [M] with the flash!")
+ user << "You blind [M] with the flash!"
+ M << "[user] blinds you with the flash!"
if(M.weakeyes)
M.Stun(2)
- M.visible_message("[M] gasps and shields their eyes!")
- return 1
+ M.visible_message("[M] gasps and shields their eyes!", "You gasp and shields your eyes!")
+ else
+ visible_message("[user] fails to blind [M] with the flash!")
+ user << "You fail to blind [M] with the flash!"
+ M << "[user] fails to blind you with the flash!"
else
- if(user)
- user.visible_message("[user] fails to blind [M] with the [src.name]!")
- return 0
+ if(M.flash_eyes())
+ M.confused += power
/obj/item/device/flash/attack(mob/living/M, mob/user)
if(!try_use_flash(user))
@@ -111,16 +113,16 @@
else if(issilicon(M))
if(isrobot(M))
var/mob/living/silicon/robot/R = M
-
- if (R.module) // Perhaps they didn't choose a module yet
+ if(R.module) // Perhaps they didn't choose a module yet
for(var/obj/item/borg/combat/shield/S in R.module.modules)
if(R.activated(S))
add_logs(M, user, "flashed", object="[src.name]")
user.visible_message("[user] tries to overloads [M]'s sensors with the [src.name], but if blocked by [M]'s shield!", "You try to overload [M]'s sensors with the [src.name], but are blocked by his shield!")
return 1
- M.Weaken(rand(5,10))
add_logs(M, user, "flashed", object="[src.name]")
- user.visible_message("[user] overloads [M]'s sensors with the [src.name]!", "You overload [M]'s sensors with the [src.name]!")
+ if(M.flash_eyes(affect_silicon = 1))
+ M.Weaken(rand(5,10))
+ user.visible_message("[user] overloads [M]'s sensors with the [src.name]!", "You overload [M]'s sensors with the [src.name]!")
return 1
user.visible_message("[user] fails to blind [M] with the [src.name]!", "You fail to blind [M] with the [src.name]!")
diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm
index ef8cba90463..caa673882a1 100644
--- a/code/game/objects/items/devices/flashlight.dm
+++ b/code/game/objects/items/devices/flashlight.dm
@@ -55,28 +55,25 @@
return
if(M == user) //they're using it on themselves
- if(!M.blinded)
- flick("flash", M.flash)
+ if(M.flash_eyes(visual = 1))
M.visible_message("[M] directs [src] to \his eyes.", \
"You wave the light in front of your eyes! Trippy!")
else
M.visible_message("[M] directs [src] to \his eyes.", \
"You wave the light in front of your eyes.")
- return
+ else
- user.visible_message("[user] directs [src] to [M]'s eyes.", \
- "You direct [src] to [M]'s eyes.")
+ user.visible_message("[user] directs [src] to [M]'s eyes.", \
+ "You direct [src] to [M]'s eyes.")
- if(istype(M, /mob/living/carbon/human)) //robots and aliens are unaffected
- if(M.stat == DEAD || M.sdisabilities & BLIND) //mob is dead or fully blind
- user << "[M] pupils does not react to the light!"
- else if(XRAY in M.mutations) //mob has X-RAY vision
- flick("flash", M.flash) //Yes, you can still get flashed wit X-Ray.
- user << "[M] pupils give an eerie glow!"
- else //they're okay!
- if(!M.blinded)
- flick("flash", M.flash) //flash the affected mob
- user << "[M]'s pupils narrow."
+ if(istype(M, /mob/living/carbon/human)) //robots and aliens are unaffected
+ if(M.stat == DEAD || M.sdisabilities & BLIND) //mob is dead or fully blind
+ user << "[M] pupils does not react to the light!"
+ else if(XRAY in M.mutations) //mob has X-RAY vision
+ user << "[M] pupils give an eerie glow!"
+ else //they're okay!
+ if(M.flash_eyes(visual = 1))
+ user << "[M]'s pupils narrow."
else
return ..()
diff --git a/code/game/objects/items/devices/laserpointer.dm b/code/game/objects/items/devices/laserpointer.dm
index e89f3213b4f..d03d2b98887 100644
--- a/code/game/objects/items/devices/laserpointer.dm
+++ b/code/game/objects/items/devices/laserpointer.dm
@@ -90,66 +90,30 @@
//human/alien mobs
if(iscarbon(target))
+ var/mob/living/carbon/C = target
if(user.zone_sel.selecting == "eyes")
- var/mob/living/carbon/C = target
+ add_logs(C, user, "shone in the eyes", object="laser pointer")
+
+ var/severity = 1
+ if(prob(33))
+ severity = 2
+ else if(prob(50))
+ severity = 0
//20% chance to actually hit the eyes
-
- if(prob(effectchance * diode.rating))
- add_logs(C, user, "shone in the eyes", object="laser pointer")
-
-
- //eye target check
+ if(prob(effectchance * diode.rating) && C.flash_eyes(severity))
outmsg = "You blind [C] by shining [src] in their eyes."
if(C.weakeyes)
C.Stun(1)
- var/eye_prot = C.eyecheck()
- if(C.blinded || eye_prot >= 2)
- eye_prot = 4
- var/severity = 3 - eye_prot
- if(prob(33))
- severity += 1
- else if(prob(50))
- severity -= 1
- severity = min(max(severity, 0), 4)
- var/mob/living/carbon/human/H = C
- var/obj/item/organ/internal/eyes/E = H.get_int_organ(/obj/item/organ/internal/eyes)
-
- switch(severity)
- if(0)
- //no effect
- C << "A small, bright dot appears in your vision."
- if(1)
- //industrial grade eye protection
- E.damage += rand(0, 2)
- C << "Something bright flashes in the corner of your vision!"
- if(2)
- //basic eye protection (sunglasses)
- flick("flash", C.flash)
- E.damage += rand(1, 6)
- C << "Your eyes were blinded!"
- if(3)
- //no eye protection
- if(prob(2))
- C.Weaken(1)
- flick("e_flash", C.flash)
- E.damage += rand(3, 7)
- C << "Your eyes were blinded!"
- if(4)
- //the effect has been worsened by something
- if(prob(5))
- C.Weaken(1)
- flick("e_flash", C.flash)
- E.damage += rand(5, 10)
- C << "Your eyes were blinded!"
else
- outmsg = "You fail to blind [C] by shining [src] at their eyes."
+ outmsg = "You fail to blind [C] by shining [src] at their eyes!"
//robots and AI
else if(issilicon(target))
var/mob/living/silicon/S = target
//20% chance to actually hit the sensors
if(prob(effectchance * diode.rating))
+ S.flash_eyes(affect_silicon = 1)
S.Weaken(rand(5,10))
S << "Your sensors were overloaded by a laser!"
outmsg = "You overload [S] by shining [src] at their sensors."
diff --git a/code/game/objects/items/stacks/rods.dm b/code/game/objects/items/stacks/rods.dm
index 75432a86da2..431e74209d8 100644
--- a/code/game/objects/items/stacks/rods.dm
+++ b/code/game/objects/items/stacks/rods.dm
@@ -15,6 +15,9 @@
attack_verb = list("hit", "bludgeoned", "whacked")
hitsound = 'sound/weapons/grenadelaunch.ogg'
+/obj/item/stack/rods/cyborg
+ materials = list()
+
/obj/item/stack/rods/New(var/loc, var/amount=null)
..()
@@ -41,11 +44,11 @@
if(new_item.get_amount() <= 0)
// stack was moved into another one on the pile
new_item = locate() in user.loc
-
+
user.visible_message("[user.name] shaped [src] into metal with the weldingtool.", \
"You shaped [src] into metal with the weldingtool.", \
"You hear welding.")
-
+
var/replace = user.get_inactive_hand() == src
use(2)
if (get_amount() <= 0 && replace)
diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm
index d0477eead0d..09c8b51ded9 100644
--- a/code/game/objects/items/stacks/sheets/glass.dm
+++ b/code/game/objects/items/stacks/sheets/glass.dm
@@ -24,12 +24,7 @@
var/full_window = /obj/structure/window/full/basic
/obj/item/stack/sheet/glass/cyborg
- name = "glass"
- desc = "HOLY SHEET! That is a lot of glass."
- singular_name = "glass sheet"
- icon_state = "sheet-glass"
materials = list()
- created_window = /obj/structure/window/basic
/obj/item/stack/sheet/glass/attack_self(mob/user as mob)
construct_window(user)
@@ -159,10 +154,6 @@
var/full_window = /obj/structure/window/full/reinforced
/obj/item/stack/sheet/rglass/cyborg
- name = "reinforced glass"
- desc = "Glass which seems to have rods or something stuck in them."
- singular_name = "reinforced glass sheet"
- icon_state = "sheet-rglass"
materials = list()
/obj/item/stack/sheet/rglass/attack_self(mob/user as mob)
diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm
index 8212872ae82..7cb53eaed5f 100644
--- a/code/game/objects/items/stacks/sheets/sheet_types.dm
+++ b/code/game/objects/items/stacks/sheets/sheet_types.dm
@@ -97,13 +97,7 @@ var/global/list/datum/stack_recipe/metal_recipes = list ( \
origin_tech = "materials=1"
/obj/item/stack/sheet/metal/cyborg
- name = "metal"
- desc = "Sheets made out of metal."
- singular_name = "metal sheet"
- icon_state = "sheet-metal"
materials = list()
- throwforce = 10.0
- flags = CONDUCT
/obj/item/stack/sheet/metal/New(var/loc, var/amount=null)
recipes = metal_recipes
@@ -162,12 +156,6 @@ var/global/list/datum/stack_recipe/wood_recipes = list ( \
icon_state = "sheet-wood"
origin_tech = "materials=1;biotech=1"
-/obj/item/stack/sheet/wood/cyborg
- name = "wooden plank"
- desc = "One can only guess that this is a bunch of wood."
- singular_name = "wood plank"
- icon_state = "sheet-wood"
-
/obj/item/stack/sheet/wood/New(var/loc, var/amount=null)
recipes = wood_recipes
return ..()
diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm
index da5d36327f0..d7fcf1bcb53 100644
--- a/code/game/objects/items/stacks/tiles/tile_types.dm
+++ b/code/game/objects/items/stacks/tiles/tile_types.dm
@@ -124,4 +124,4 @@
origin_tech = "materials=1"
turf_type = /turf/simulated/floor/silent
mineralType = "tranquillite"
- materials = list(MAT_TRANQUILLITE=500)
\ No newline at end of file
+ materials = list(MAT_TRANQUILLITE=500)
diff --git a/code/game/objects/items/weapons/grenades/bananade.dm b/code/game/objects/items/weapons/grenades/bananade.dm
index 998c19e9837..bbb86c31442 100644
--- a/code/game/objects/items/weapons/grenades/bananade.dm
+++ b/code/game/objects/items/weapons/grenades/bananade.dm
@@ -16,9 +16,8 @@ var/turf/T
// Make a quick flash
var/turf/T = get_turf(src)
playsound(T, 'sound/items/bikehorn.ogg', 100, 1)
- for(var/mob/living/carbon/human/M in viewers(T, null))
- if(M:eyecheck() <= 0)
- flick("e_flash", M.flash) // flash dose faggots
+ for(var/mob/living/carbon/C in viewers(T, null))
+ C.flash_eyes()
for(var/i=1, i<=deliveryamt, i++)
var/atom/movable/x = new spawner_type
x.loc = T
diff --git a/code/game/objects/items/weapons/grenades/clusterbuster.dm b/code/game/objects/items/weapons/grenades/clusterbuster.dm
index ec3e159e874..8ba1782cf18 100644
--- a/code/game/objects/items/weapons/grenades/clusterbuster.dm
+++ b/code/game/objects/items/weapons/grenades/clusterbuster.dm
@@ -78,7 +78,6 @@
/////////////////////////////////
/obj/item/weapon/grenade/flashbang/cluster
icon_state = "flashbang_active"
- banglet = 1
/obj/item/weapon/grenade/clusterbuster/emp
name = "Electromagnetic Storm"
diff --git a/code/game/objects/items/weapons/grenades/flashbang.dm b/code/game/objects/items/weapons/grenades/flashbang.dm
index 51bd36c5839..bb9f1ab159d 100644
--- a/code/game/objects/items/weapons/grenades/flashbang.dm
+++ b/code/game/objects/items/weapons/grenades/flashbang.dm
@@ -3,7 +3,6 @@
icon_state = "flashbang"
item_state = "flashbang"
origin_tech = "materials=2;combat=1"
- var/banglet = 0
/obj/item/weapon/grenade/flashbang/prime()
update_mob()
@@ -24,42 +23,26 @@
playsound(loc, 'sound/effects/bang.ogg', 25, 1)
//Checking for protections
- var/eye_safety = 0
- var/ear_safety = 0
+ var/ear_safety = M.check_ear_prot()
var/distance = max(1,get_dist(src,T))
- if(iscarbon(M))
- var/mob/living/carbon/C = M
- eye_safety = C.eyecheck()
- if(ishuman(C))
- var/mob/living/carbon/human/H = C
- if((H.r_ear && (H.r_ear.flags & EARBANGPROTECT)) || (H.l_ear && (H.l_ear.flags & EARBANGPROTECT)) || (H.head && (H.head.flags & HEADBANGPROTECT)))
- ear_safety++
//Flash
- var/eye_damage = rand(1,3)
if(M.weakeyes)
M.visible_message("[M] screams and collapses!")
- M << "AAAAGH! IT BURNS!"
+ M << "AAAAGH!"
M.Weaken(15) //hella stunned
M.Stun(15)
- eye_damage += 8
+ if(ishuman(M))
+ M.emote("scream")
+ var/mob/living/carbon/human/H = M
+ var/obj/item/organ/internal/eyes/E = H.get_int_organ(/obj/item/organ/internal/eyes)
+ if(E)
+ E.damage += 8
- if(!eye_safety && ishuman(M))
- var/mob/living/carbon/human/H = M
- var/obj/item/organ/internal/eyes/E = H.get_int_organ(/obj/item/organ/internal/eyes)
- flick("e_flash", M.flash)
- if (E)
- E.damage += eye_damage
+ if(M.flash_eyes(affect_silicon = 1))
M.Stun(max(10/distance, 3))
M.Weaken(max(10/distance, 3))
- if (istype(E) && E.damage >= E.min_bruised_damage)
- if(!(E.status & ORGAN_ROBOT))
- M << "Your eyes start to burn badly!"
- else
- M << "The flash blinds you!"
- if(!banglet)
- if (E.damage >= E.min_broken_damage)
- M << "You can't see anything!"
+
//Bang
if((loc == M) || loc == M.loc)//Holding on person or being exactly where lies is significantly more dangerous and voids protection
@@ -72,10 +55,9 @@
M.ear_deaf = max(M.ear_deaf,15)
if (M.ear_damage >= 15)
M << "Your ears start to ring badly!"
- if(!banglet)
- if(prob(M.ear_damage - 10 + 5))
- M << "You can't hear anything!"
- M.disabilities |= DEAF
+ if(prob(M.ear_damage - 10 + 5))
+ M << "You can't hear anything!"
+ M.disabilities |= DEAF
else
if (M.ear_damage >= 5)
M << "Your ears start to ring!"
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/grenades/spawnergrenade.dm b/code/game/objects/items/weapons/grenades/spawnergrenade.dm
index dbcb27c5f16..074617d4d10 100644
--- a/code/game/objects/items/weapons/grenades/spawnergrenade.dm
+++ b/code/game/objects/items/weapons/grenades/spawnergrenade.dm
@@ -5,7 +5,6 @@
icon_state = "delivery"
item_state = "flashbang"
origin_tech = "materials=3;magnets=4"
- var/banglet = 0
var/spawner_type = null // must be an object path
var/deliveryamt = 1 // amount of type to deliver
spawner_type = /mob/living/simple_animal/hostile/viscerator
@@ -16,9 +15,8 @@
// Make a quick flash
var/turf/T = get_turf(src)
playsound(T, 'sound/effects/phasein.ogg', 100, 1)
- for(var/mob/living/carbon/human/M in viewers(T, null))
- if(M:eyecheck() <= 0)
- flick("e_flash", M.flash) // flash dose faggots
+ for(var/mob/living/carbon/C in viewers(T, null))
+ C.flash_eyes()
for(var/i=1, i<=deliveryamt, i++)
var/atom/movable/x = new spawner_type
diff --git a/code/game/objects/items/weapons/storage/firstaid.dm b/code/game/objects/items/weapons/storage/firstaid.dm
index 6429d83c73b..b751481bfe0 100644
--- a/code/game/objects/items/weapons/storage/firstaid.dm
+++ b/code/game/objects/items/weapons/storage/firstaid.dm
@@ -215,9 +215,14 @@
use_to_pickup = 1
storage_slots = 14
display_contents_with_number = 1
+ var/base_name = ""
+ var/label_text = ""
+
+/obj/item/weapon/storage/pill_bottle/New()
+ ..()
+ base_name = name
/obj/item/weapon/storage/pill_bottle/MouseDrop(obj/over_object as obj) //Quick pillbottle fix. -Agouri
-
if (ishuman(usr)) //Can monkeys even place items in the pocket slots? Leaving this in just in case~
var/mob/M = usr
if (!( istype(over_object, /obj/screen) ))
@@ -239,6 +244,24 @@
return
return
+/obj/item/weapon/storage/pill_bottle/attackby(var/obj/item/I, mob/user as mob, params)
+ if(istype(I, /obj/item/weapon/pen) || istype(I, /obj/item/device/flashlight/pen))
+ var/tmp_label = sanitize(input(user, "Enter a label for [name]","Label",label_text))
+ if(length(tmp_label) > MAX_NAME_LEN)
+ user << "The label can be at most [MAX_NAME_LEN] characters long."
+ else
+ user << "You set the label to \"[tmp_label]\"."
+ label_text = tmp_label
+ update_name_label()
+ else
+ ..()
+
+/obj/item/weapon/storage/pill_bottle/proc/update_name_label()
+ if(label_text == "")
+ name = base_name
+ else
+ name = "[base_name] ([label_text])"
+
/obj/item/weapon/storage/pill_bottle/charcoal
name = "Pill bottle (Charcoal)"
desc = "Contains pills used to counter toxins."
diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm
index 29bc5bd5861..d01cc125918 100644
--- a/code/game/objects/items/weapons/tools.dm
+++ b/code/game/objects/items/weapons/tools.dm
@@ -291,15 +291,15 @@
/obj/item/weapon/weldingtool/proc/get_fuel()
return reagents.get_reagent_amount("fuel")
-//Removes fuel from the welding tool. If a mob is passed, it will perform an eyecheck on the mob. This should probably be renamed to use()
-/obj/item/weapon/weldingtool/proc/remove_fuel(var/amount = 1, var/mob/M = null)
+//Removes fuel from the welding tool. If a mob is passed, it will try to flash the mob's eyes. This should probably be renamed to use()
+/obj/item/weapon/weldingtool/proc/remove_fuel(var/amount = 1, var/mob/living/M = null)
if(!welding || !check_fuel())
return 0
if(get_fuel() >= amount)
reagents.remove_reagent("fuel", amount)
check_fuel()
if(M)
- eyecheck(M)
+ M.flash_eyes(light_intensity)
return 1
else
if(M)
@@ -351,46 +351,6 @@
hitsound = "swing_hit"
update_icon()
-//Decides whether or not to damage a player's eyes based on what they're wearing as protection
-//Note: This should probably be moved to mob
-/obj/item/weapon/weldingtool/proc/eyecheck(mob/user as mob)
- if(!iscarbon(user)) return 1
- var/safety = user:eyecheck()
- if(ishuman(user))
- var/mob/living/carbon/human/H = user
- var/obj/item/organ/internal/eyes/E = H.get_int_organ(/obj/item/organ/internal/eyes)
- if(!istype(E)) // No eyes? No problem!
- return
- switch(safety)
- if(1)
- usr << "Your eyes sting a little."
- E.damage += rand(1, 2)
- if(E.damage > 12)
- user.eye_blurry += rand(3,6)
- if(0)
- usr << "Your eyes burn."
- E.damage += rand(2, 4)
- if(E.damage > 10)
- E.damage += rand(4,10)
- if(-1)
- usr << "Your thermals intensify the welder's glow. Your eyes itch and burn severely."
- user.eye_blurry += rand(12,20)
- E.damage += rand(12, 16)
- if(safety<2)
- if(E.damage > 10)
- user << "Your eyes are really starting to hurt. This can't be good for you!"
- if (E.damage >= E.min_broken_damage)
- user << "You go blind!"
- user.sdisabilities |= BLIND
- else if (E.damage >= E.min_bruised_damage)
- user << "You go blind!"
- user.eye_blind = 5
- user.eye_blurry = 5
- user.disabilities |= NEARSIGHTED
- spawn(100)
- user.disabilities &= ~NEARSIGHTED
- return
-
/obj/item/weapon/weldingtool/proc/flamethrower_screwdriver(obj/item/I, mob/user)
if(welding)
user << "Turn it off first!"
diff --git a/code/game/objects/structures/musician.dm b/code/game/objects/structures/musician.dm
index 367208bbfe4..8a5f144aac2 100644
--- a/code/game/objects/structures/musician.dm
+++ b/code/game/objects/structures/musician.dm
@@ -80,10 +80,10 @@
for(var/line in lines)
//world << line
- for(var/beat in text2list(lowertext(line), ","))
+ for(var/beat in splittext(lowertext(line), ","))
//world << "beat: [beat]"
- var/list/notes = text2list(beat, "/")
- for(var/note in text2list(notes[1], "-"))
+ var/list/notes = splittext(beat, "/")
+ for(var/note in splittext(notes[1], "-"))
//world << "note: [note]"
if(!playing || shouldStopPlaying(user))//If the instrument is playing, or special case
playing = 0
@@ -165,7 +165,7 @@
//split into lines
spawn()
- lines = text2list(t, "\n")
+ lines = splittext(t, "\n")
if(copytext(lines[1],1,6) == "BPM: ")
tempo = sanitize_tempo(600 / text2num(copytext(lines[1],6)))
lines.Cut(1,2)
diff --git a/code/game/objects/structures/transit_tubes/transit_tube.dm b/code/game/objects/structures/transit_tubes/transit_tube.dm
index 5a0b7df79a3..c7926870ccf 100644
--- a/code/game/objects/structures/transit_tubes/transit_tube.dm
+++ b/code/game/objects/structures/transit_tubes/transit_tube.dm
@@ -244,7 +244,7 @@ obj/structure/transit_tube/ex_act(severity)
if(text in direction_table)
return direction_table[text]
- var/list/split_text = text2list(text, "-")
+ var/list/split_text = splittext(text, "-")
// If the first token is D, the icon_state represents
// a purely decorative tube, and doesn't actually
diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm
index f497a645f95..67a141f74ba 100644
--- a/code/modules/admin/admin.dm
+++ b/code/modules/admin/admin.dm
@@ -58,9 +58,9 @@ var/global/nologevent = 0
body += "Mob type: [M.type]
"
if(M.client)
if(M.client.related_accounts_cid.len)
- body += "Related accounts by CID: [list2text(M.client.related_accounts_cid, " - ")]
"
+ body += "Related accounts by CID: [jointext(M.client.related_accounts_cid, " - ")]
"
if(M.client.related_accounts_ip.len)
- body += "Related accounts by IP: [list2text(M.client.related_accounts_ip, " - ")]
"
+ body += "Related accounts by IP: [jointext(M.client.related_accounts_ip, " - ")]
"
body += "Kick | "
body += "Warn | "
diff --git a/code/modules/admin/admin_ranks.dm b/code/modules/admin/admin_ranks.dm
index ae6ea3c4aae..7b5c4073293 100644
--- a/code/modules/admin/admin_ranks.dm
+++ b/code/modules/admin/admin_ranks.dm
@@ -14,7 +14,7 @@ var/list/admin_ranks = list() //list of all ranks with associated rights
if(!length(line)) continue
if(copytext(line,1,2) == "#") continue
- var/list/List = text2list(line,"+")
+ var/list/List = splittext(line,"+")
if(!List.len) continue
var/rank = ckeyEx(List[1])
@@ -78,7 +78,7 @@ var/list/admin_ranks = list() //list of all ranks with associated rights
if(copytext(line,1,2) == "#") continue
//Split the line at every "-"
- var/list/List = text2list(line, "-")
+ var/list/List = splittext(line, "-")
if(!List.len) continue
//ckey is before the first "-"
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index c33bc85061c..500fa010700 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -677,7 +677,7 @@ var/list/admin_verbs_proccall = list (
//load text from file
var/list/Lines = file2list("config/admins.txt")
for(var/line in Lines)
- var/list/splitline = text2list(line, " - ")
+ var/list/splitline = splittext(line, " - ")
if(n_lower(splitline[1]) == ckey)
if(splitline.len >= 2)
rank = ckeyEx(splitline[2])
diff --git a/code/modules/admin/create_mob.dm b/code/modules/admin/create_mob.dm
index a723fe37956..4a892d893da 100644
--- a/code/modules/admin/create_mob.dm
+++ b/code/modules/admin/create_mob.dm
@@ -2,7 +2,7 @@
/datum/admins/proc/create_mob(var/mob/user)
if (!create_mob_html)
var/mobjs = null
- mobjs = list2text(typesof(/mob), ";")
+ mobjs = jointext(typesof(/mob), ";")
create_mob_html = file2text('html/create_object.html')
create_mob_html = replacetext(create_mob_html, "null /* object types */", "\"[mobjs]\"")
diff --git a/code/modules/admin/create_object.dm b/code/modules/admin/create_object.dm
index 584dd9331b6..c5cb9f42152 100644
--- a/code/modules/admin/create_object.dm
+++ b/code/modules/admin/create_object.dm
@@ -4,7 +4,7 @@ var/list/create_object_forms = list(/obj, /obj/structure, /obj/machinery, /obj/e
/datum/admins/proc/create_object(var/mob/user)
if (!create_object_html)
var/objectjs = null
- objectjs = list2text(typesof(/obj), ";")
+ objectjs = jointext(typesof(/obj), ";")
create_object_html = file2text('html/create_object.html')
create_object_html = replacetext(create_object_html, "null /* object types */", "\"[objectjs]\"")
@@ -15,7 +15,7 @@ var/list/create_object_forms = list(/obj, /obj/structure, /obj/machinery, /obj/e
var/html_form = create_object_forms[path]
if (!html_form)
- var/objectjs = list2text(typesof(path), ";")
+ var/objectjs = jointext(typesof(path), ";")
html_form = file2text('html/create_object.html')
html_form = replacetext(html_form, "null /* object types */", "\"[objectjs]\"")
create_object_forms[path] = html_form
diff --git a/code/modules/admin/create_turf.dm b/code/modules/admin/create_turf.dm
index 0938b7bd33d..fdaa103b5d5 100644
--- a/code/modules/admin/create_turf.dm
+++ b/code/modules/admin/create_turf.dm
@@ -2,7 +2,7 @@
/datum/admins/proc/create_turf(var/mob/user)
if (!create_turf_html)
var/turfjs = null
- turfjs = list2text(typesof(/turf), ";")
+ turfjs = jointext(typesof(/turf), ";")
create_turf_html = file2text('html/create_object.html')
create_turf_html = replacetext(create_turf_html, "null /* object types */", "\"[turfjs]\"")
diff --git a/code/modules/admin/sql_notes.dm b/code/modules/admin/sql_notes.dm
index c9b472e9f92..7678814f0c6 100644
--- a/code/modules/admin/sql_notes.dm
+++ b/code/modules/admin/sql_notes.dm
@@ -177,73 +177,7 @@
output += "
\[Add Note\]"
output += ruler
usr << browse(output, "window=show_notes;size=900x500")
-
-/proc/regex_note_sql_extract(str, exp)
- return new /datum/regex(str, exp, call(LIBREGEX_LIBRARY, "regEx_find")(str, exp))
-// If the AUTOCONVERT_NOTES is turned on, any time a player connects this will be run to try and add all their notes to the database
-/proc/convert_notes_sql(ckey)
- if(!ckey)
- return 0
-
- var/playerfile = "data/player_saves/[copytext(ckey, 1, 2)]/[ckey]/info.sav"
- var/savefile/info = new(playerfile)
- var/list/infos
- info >> infos
- if(!infos || !infos.len)
- fdel(playerfile)
- return 0
-
- ckey = ckey
- for(var/datum/player_info/I in infos)
- var/notetext = I.content
- var/adminckey = I.author
- var/server
- if (config && config.server_name)
- server = config.server_name
-
- var/timestamp = I.timestamp
- var/regex = "\[A-Za-z\]+\\, (\[A-Za-z\]+) (\[0-9\]+)\[A-Za-z\]+ of (\[0-9\]+)"
- var/datum/regex/results = regex_note_sql_extract(timestamp, regex)
- var/month = month2number(results.str(2))
- var/day = results.str(3)
- var/year = results.str(4)
- timestamp = "[year]-[month]-[day] 00:00:00"
-
- add_note(ckey, notetext, timestamp, adminckey, 0, server, 0)
-
- fdel(playerfile)
- return 1
-
-// Using this proc causes lag - you have been warned.
-/proc/mass_convert_notes()
- if(!check_rights(R_SERVER))
- return 0
- world << "Beginning mass note conversion."
-
- var/player_notes_file = "data/player_notes.sav"
- var/savefile/notesfile = new(player_notes_file)
- var/list/note_keys
- notesfile >> note_keys
-
- if(!notesfile)
- log_game("Error: Cannot access player_notes.sav file.")
- return 0
- if(!note_keys || !note_keys.len)
- log_game("Error: player_notes.sav file is empty. Deleting it.")
- fdel(player_notes_file)
- return 0
-
- note_keys = sortList(note_keys)
- var/i = 1
- for(i, i <= note_keys.len, i++)
- var/ckey = note_keys[i]
- convert_notes_sql(ckey)
- world << "Finished mass note conversion ([i] notes converted). Remember to turn off AUTOCONVERT_NOTES."
- world << "Deleting the player_notes.sav file."
- fdel(player_notes_file)
- return 1
-
/proc/show_player_info_irc(var/key as text)
var/target_sql_ckey = sanitizeSQL(key)
var/DBQuery/query_get_notes = dbcon.NewQuery("SELECT timestamp, notetext, adminckey, server FROM [format_table_name("notes")] WHERE ckey = '[target_sql_ckey]' ORDER BY timestamp")
diff --git a/code/modules/admin/stickyban.dm b/code/modules/admin/stickyban.dm
index 474b7c76265..94f7a84daa1 100644
--- a/code/modules/admin/stickyban.dm
+++ b/code/modules/admin/stickyban.dm
@@ -126,7 +126,7 @@
log_admin("[key_name(usr)] has edited [ckey]'s sticky ban reason from [oldreason] to [reason]")
message_admins("[key_name_admin(usr)] has edited [ckey]'s sticky ban reason from [oldreason] to [reason]")
-
+
spawn(10)
stickyban_show()
@@ -147,7 +147,7 @@
/datum/admins/proc/stickyban_show()
if(!check_rights(R_BAN))
return
-
+
var/list/bans = sortList(world.GetConfig("ban"))
var/banhtml = ""
for(var/key in bans)
@@ -181,23 +181,23 @@
if (!ban)
return null
. = params2list(ban)
- .["keys"] = text2list(.["keys"], ",")
- .["type"] = text2list(.["type"], ",")
- .["IP"] = text2list(.["IP"], ",")
- .["computer_id"] = text2list(.["computer_id"], ",")
+ .["keys"] = splittext(.["keys"], ",")
+ .["type"] = splittext(.["type"], ",")
+ .["IP"] = splittext(.["IP"], ",")
+ .["computer_id"] = splittext(.["computer_id"], ",")
/proc/list2stickyban(var/list/ban)
if (!ban || !islist(ban))
return null
. = ban.Copy()
if (.["keys"])
- .["keys"] = list2text(.["keys"], ",")
+ .["keys"] = jointext(.["keys"], ",")
if (.["type"])
- .["type"] = list2text(.["type"], ",")
+ .["type"] = jointext(.["type"], ",")
if (.["IP"])
- .["IP"] = list2text(.["IP"], ",")
+ .["IP"] = jointext(.["IP"], ",")
if (.["computer_id"])
- .["computer_id"] = list2text(.["computer_id"], ",")
+ .["computer_id"] = jointext(.["computer_id"], ",")
. = list2params(.)
/client/proc/stickybanpanel()
@@ -206,6 +206,5 @@
if(!check_rights(R_BAN))
return
-
+
holder.stickyban_show()
-
\ No newline at end of file
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index 1a705cde470..b0de84846f0 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -1019,7 +1019,7 @@
message_admins("\blue [key_name_admin(usr)] removed [t]", 1)
jobban_remove(t)
href_list["ban"] = 1 // lets it fall through and refresh
- var/t_split = text2list(t, " - ")
+ var/t_split = splittext(t, " - ")
var/key = t_split[1]
var/job = t_split[2]
DB_ban_unban(ckey(key), BANTYPE_JOB_PERMA, job)
@@ -2076,7 +2076,7 @@
alert("Select fewer object types, (max 5)")
return
- var/list/offset = text2list(href_list["offset"],",")
+ var/list/offset = splittext(href_list["offset"],",")
var/number = dd_range(1, 100, text2num(href_list["object_count"]))
var/X = offset.len > 0 ? text2num(offset[1]) : 0
var/Y = offset.len > 1 ? text2num(offset[2]) : 0
diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm
index b8a6f370834..494961eb767 100644
--- a/code/modules/admin/verbs/adminhelp.dm
+++ b/code/modules/admin/verbs/adminhelp.dm
@@ -32,7 +32,7 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
var/original_msg = msg
//explode the input msg into a list
- var/list/msglist = text2list(msg, " ")
+ var/list/msglist = splittext(msg, " ")
//generate keywords lookup
var/list/surnames = list()
@@ -43,7 +43,7 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
if(M.mind) indexing += M.mind.name
for(var/string in indexing)
- var/list/L = text2list(string, " ")
+ var/list/L = splittext(string, " ")
var/surname_found = 0
//surnames
for(var/i=L.len, i>=1, i--)
diff --git a/code/modules/admin/verbs/alt_check.dm b/code/modules/admin/verbs/alt_check.dm
index 5366f240945..c356ba00b6b 100644
--- a/code/modules/admin/verbs/alt_check.dm
+++ b/code/modules/admin/verbs/alt_check.dm
@@ -11,10 +11,10 @@
dat += "[C.ckey] (Player Age: [C.player_age]) - [C.computer_id] / [C.address]
"
if(C.related_accounts_cid.len)
dat += "--Accounts associated with CID: "
- dat += "[list2text(C.related_accounts_cid, " - ")]
"
+ dat += "[jointext(C.related_accounts_cid, " - ")]
"
if(C.related_accounts_ip.len)
dat += "--Accounts associated with IP: "
- dat += "[list2text(C.related_accounts_ip, " - ")] "
+ dat += "[jointext(C.related_accounts_ip, " - ")] "
usr << browse(dat, "window=alt_panel;size=640x480")
return
diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm
index c3489499058..9c6f671fba7 100644
--- a/code/modules/admin/verbs/debug.dm
+++ b/code/modules/admin/verbs/debug.dm
@@ -1166,21 +1166,21 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
switch(input("Which list?") in list("Players","Admins","Mobs","Living Mobs","Dead Mobs","Silicons","Clients","Respawnable Mobs"))
if("Players")
- usr << list2text(player_list,",")
+ usr << jointext(player_list,",")
if("Admins")
- usr << list2text(admins,",")
+ usr << jointext(admins,",")
if("Mobs")
- usr << list2text(mob_list,",")
+ usr << jointext(mob_list,",")
if("Living Mobs")
- usr << list2text(living_mob_list,",")
+ usr << jointext(living_mob_list,",")
if("Dead Mobs")
- usr << list2text(dead_mob_list,",")
+ usr << jointext(dead_mob_list,",")
if("Silicons")
- usr << list2text(silicon_mob_list,",")
+ usr << jointext(silicon_mob_list,",")
if("Clients")
- usr << list2text(clients,",")
+ usr << jointext(clients,",")
if("Respawnable Mobs")
- usr << list2text(respawnable_list,",")
+ usr << jointext(respawnable_list,",")
/client/proc/cmd_admin_toggle_block(var/mob/M,var/block)
diff --git a/code/modules/awaymissions/maploader/reader.dm b/code/modules/awaymissions/maploader/reader.dm
index 0ec790896f6..01b728d4a35 100644
--- a/code/modules/awaymissions/maploader/reader.dm
+++ b/code/modules/awaymissions/maploader/reader.dm
@@ -143,7 +143,7 @@ var/global/dmm_suite/preloader/_preloader = null
var/variables_start = findtext(full_def,"{")
if(variables_start)//if there's any variable
full_def = copytext(full_def,variables_start+1,length(full_def))//removing the last '}'
- fields = text2list(full_def,";")
+ fields = dmm_splittext(full_def,";")
//then fill the members_attributes list with the corresponding variables
members_attributes.len++
@@ -245,7 +245,7 @@ var/global/dmm_suite/preloader/_preloader = null
//build a list from variables in text form (e.g {var1="derp"; var2; var3=7} => list(var1="derp", var2, var3=7))
//return the filled list
-/dmm_suite/proc/text2list(var/text as text,var/delimiter=",")
+/dmm_suite/proc/dmm_splittext(var/text as text,var/delimiter=",")
var/list/to_return = list()
@@ -279,7 +279,7 @@ var/global/dmm_suite/preloader/_preloader = null
//Check for list
else if(copytext(trim_right,1,5) == "list")
- trim_right = text2list(copytext(trim_right,6,length(trim_right)))
+ trim_right = dmm_splittext(copytext(trim_right,6,length(trim_right)))
//Check for file
else if(copytext(trim_right,1,2) == "'")
diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm
index c4af5ea7455..2670fcd6376 100644
--- a/code/modules/client/client procs.dm
+++ b/code/modules/client/client procs.dm
@@ -304,9 +304,6 @@
src << message
clientmessages.Remove(ckey)
- if (config && config.autoconvert_notes)
- convert_notes_sql(ckey)
-
send_resources()
@@ -368,7 +365,7 @@
//Log all the alts
if(related_accounts_cid.len)
- log_access("Alts: [key_name(src)]:[list2text(related_accounts_cid, " - ")]")
+ log_access("Alts: [key_name(src)]:[jointext(related_accounts_cid, " - ")]")
var/watchreason = check_watchlist(sql_ckey)
if(watchreason)
diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm
index 09b88e8c25c..fc89300fcf0 100644
--- a/code/modules/clothing/glasses/glasses.dm
+++ b/code/modules/clothing/glasses/glasses.dm
@@ -309,9 +309,6 @@
"Vox" = 'icons/mob/species/vox/eyes.dmi'
)
-/obj/item/clothing/glasses/welding/proc/getMask()
- return global_hud.darkMask
-
/obj/item/clothing/glasses/welding/attack_self()
toggle()
@@ -354,9 +351,6 @@
"Vox" = 'icons/mob/species/vox/eyes.dmi'
)
-/obj/item/clothing/glasses/welding/superior/getMask()
- return null
-
/obj/item/clothing/glasses/sunglasses/blindfold
name = "blindfold"
desc = "Covers the eyes, preventing sight."
diff --git a/code/modules/computer3/computers/security.dm b/code/modules/computer3/computers/security.dm
index 6cc18293a49..3c6560d6aa9 100644
--- a/code/modules/computer3/computers/security.dm
+++ b/code/modules/computer3/computers/security.dm
@@ -305,7 +305,7 @@ What a mess.*/
return
Perp = new/list()
t1 = lowertext(t1)
- var/list/components = text2list(t1, " ")
+ var/list/components = splittext(t1, " ")
if(components.len > 5)
return //Lets not let them search too greedily.
for(var/datum/data/record/R in data_core.general)
diff --git a/code/modules/customitems/item_spawning.dm b/code/modules/customitems/item_spawning.dm
index 18735c73cc9..909abc1bbdc 100644
--- a/code/modules/customitems/item_spawning.dm
+++ b/code/modules/customitems/item_spawning.dm
@@ -12,7 +12,7 @@
var/jobmask = query.item[3]
var/ok = 0
if(jobmask != "*")
- var/list/allowed_jobs = text2list(jobmask,",")
+ var/list/allowed_jobs = splittext(jobmask,",")
for(var/i = 1, i <= allowed_jobs.len, i++)
if(istext(allowed_jobs[i]))
allowed_jobs[i] = trim(allowed_jobs[i])
@@ -66,13 +66,13 @@
// This is hacky, but since it's difficult as fuck to make a proper parser in BYOND without killing the server, here it is. - N3X
/proc/HackProperties(var/mob/living/carbon/human/M,var/obj/item/I,var/script)
- var/list/statements = text2list(script,";")
+ var/list/statements = splittext(script,";")
if(statements.len == 0)
return
for(var/statement in statements)
- var/list/assignmentChunks = text2list(statement,"=")
+ var/list/assignmentChunks = splittext(statement,"=")
var/varname = assignmentChunks[1]
- var/list/typeChunks=text2list(script,":")
+ var/list/typeChunks=splittext(script,":")
var/desiredType=typeChunks[1]
switch(desiredType)
if("string")
diff --git a/code/modules/detective_work/scanner.dm b/code/modules/detective_work/scanner.dm
index 71d0431a420..370c224ce52 100644
--- a/code/modules/detective_work/scanner.dm
+++ b/code/modules/detective_work/scanner.dm
@@ -25,7 +25,7 @@
var/obj/item/weapon/paper/P = new(get_turf(src))
P.name = "paper- 'Scanner Report'"
P.info = "
Scanner Report
"
- P.info += list2text(log, "
")
+ P.info += jointext(log, "
")
P.info += "
Notes:
"
P.info_links = P.info
diff --git a/code/modules/economy/POS.dm b/code/modules/economy/POS.dm
index 1601956e0a0..c1e1f83f27b 100644
--- a/code/modules/economy/POS.dm
+++ b/code/modules/economy/POS.dm
@@ -428,8 +428,8 @@ var/const/POS_HEADER = {"
if("Add to Order")
AddToOrder(href_list["preset"],text2num(href_list["units"]))
if("Add Products")
- for(var/list/line in text2list(href_list["csv"],"\n"))
- var/list/cells = text2list(line,",")
+ for(var/list/line in splittext(href_list["csv"],"\n"))
+ var/list/cells = splittext(line,",")
if(cells.len<2)
usr << "\red The CSV must have at least two columns: Product Name, followed by Price (as a number)."
src.attack_hand(usr)
diff --git a/code/modules/events/anomaly_bluespace.dm b/code/modules/events/anomaly_bluespace.dm
index 118f4f4ddff..82a4da4cc15 100644
--- a/code/modules/events/anomaly_bluespace.dm
+++ b/code/modules/events/anomaly_bluespace.dm
@@ -36,10 +36,9 @@
command_announcement.Announce("Massive bluespace translocation detected.", "Anomaly Alert")
var/list/flashers = list()
- for(var/mob/living/carbon/human/M in viewers(TO, null))
- if(M:eyecheck() <= 0)
- flick("e_flash", M.flash) // flash dose faggots
- flashers += M
+ for(var/mob/living/carbon/C in viewers(TO, null))
+ if(C.flash_eyes())
+ flashers += C
var/y_distance = TO.y - FROM.y
var/x_distance = TO.x - FROM.x
@@ -66,4 +65,3 @@
M.client.screen -= blueeffect
qdel(blueeffect)
qdel(newAnomaly)
-
\ No newline at end of file
diff --git a/code/modules/events/disease_outbreak.dm b/code/modules/events/disease_outbreak.dm
new file mode 100644
index 00000000000..ce6e214053d
--- /dev/null
+++ b/code/modules/events/disease_outbreak.dm
@@ -0,0 +1,37 @@
+/datum/event/disease_outbreak
+ announceWhen = 15
+
+ var/virus_type
+
+/datum/event/disease_outbreak/setup()
+ announceWhen = rand(15, 30)
+
+/datum/event/disease_outbreak/announce()
+ command_announcement.Announce("Confirmed outbreak of level 7 major viral biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", new_sound = 'sound/AI/outbreak7.ogg')
+
+/datum/event/disease_outbreak/start()
+ if(!virus_type)
+ virus_type = pick(/datum/disease/advance/flu, /datum/disease/advance/cold, /datum/disease/brainrot, /datum/disease/magnitis)
+
+ for(var/mob/living/carbon/human/H in shuffle(living_mob_list))
+ if(issmall(H)) //don't infect monkies; that's a waste
+ continue
+ if(H.species.virus_immune) //don't let virus immune things get diseases they're not supposed to get.
+ continue
+ var/turf/T = get_turf(H)
+ if(!T)
+ continue
+ if(T.z != 1)
+ continue
+ var/foundAlready = 0 // don't infect someone that already has the virus
+ for(var/datum/disease/D in H.viruses)
+ foundAlready = 1
+ break
+ if(H.stat == DEAD || foundAlready)
+ continue
+
+ var/datum/disease/D
+ D = new virus_type()
+ D.carrier = 1
+ H.AddDisease(D)
+ break
\ No newline at end of file
diff --git a/code/modules/events/event_container.dm b/code/modules/events/event_container.dm
index 448f8588b8c..8d16fd5a4cb 100644
--- a/code/modules/events/event_container.dm
+++ b/code/modules/events/event_container.dm
@@ -139,6 +139,7 @@ var/list/event_last_fired = list()
severity = EVENT_LEVEL_MODERATE
available_events = list(
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Nothing", /datum/event/nothing, 1230),
+ new /datum/event_meta(EVENT_LEVEL_MODERATE, "Appendicitis", /datum/event/spontaneous_appendicitis, 0, list(ASSIGNMENT_MEDICAL = 10), 1),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Carp School", /datum/event/carp_migration, 200, list(ASSIGNMENT_ENGINEER = 10, ASSIGNMENT_SECURITY = 20), 1),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Rogue Drones", /datum/event/rogue_drone, 40, list(ASSIGNMENT_SECURITY = 20)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Space Vines", /datum/event/spacevine, 250, list(ASSIGNMENT_ENGINEER = 10)),
@@ -169,7 +170,8 @@ var/list/event_last_fired = list()
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Gravitational Anomaly", /datum/event/anomaly/anomaly_grav, 200),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Revenant", /datum/event/revenant, 150),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Swarmer Spawn", /datum/event/spawn_swarmer, 150, is_one_shot = 1),
- new /datum/event_meta(EVENT_LEVEL_MODERATE, "Morph Spawn", /datum/event/spawn_morph, 0, is_one_shot = 1)
+ new /datum/event_meta(EVENT_LEVEL_MODERATE, "Morph Spawn", /datum/event/spawn_morph, 0, is_one_shot = 1),
+ new /datum/event_meta(EVENT_LEVEL_MODERATE, "Disease Outbreak", /datum/event/disease_outbreak, 0, list(ASSIGNMENT_MEDICAL = 150), 1)
)
/datum/event_container/major
diff --git a/code/modules/events/meaty_gore.dm b/code/modules/events/meaty_gore.dm
new file mode 100644
index 00000000000..729f5182344
--- /dev/null
+++ b/code/modules/events/meaty_gore.dm
@@ -0,0 +1,17 @@
+/datum/event/meteor_wave/gore/announce()
+ command_announcement.Announce("Unknown biological debris have been detected near [station_name()], please stand-by.", "Debris Alert")
+
+/datum/event/meteor_wave/gore/setup()
+ waves = 3
+
+
+/datum/event/meteor_wave/gore/tick()
+ if(waves && activeFor >= next_meteor)
+ spawn() spawn_meteors(rand(5,8), meteors_gore)
+ next_meteor += rand(15, 30)
+ waves--
+ endWhen = (waves ? next_meteor + 1 : activeFor + 15)
+
+
+/datum/event/meteor_wave/gore/end()
+ command_announcement.Announce("The station has cleared the debris.", "Debris Alert")
diff --git a/code/modules/events/meaty_ops.dm b/code/modules/events/meaty_ops.dm
new file mode 100644
index 00000000000..d6bdea43393
--- /dev/null
+++ b/code/modules/events/meaty_ops.dm
@@ -0,0 +1,19 @@
+/datum/event/meteor_wave/goreop/announce()
+ var/meteor_declaration = "MeteorOps have declared thier intent to utterly destroy [station_name()] with thier own bodies, and dares the crew to try and stop them."
+ command_announcement.Announce(meteor_declaration, "Declaration of 'War'", 'sound/effects/siren.ogg')
+
+/datum/event/meteor_wave/goreop/setup()
+ waves = 3
+
+
+/datum/event/meteor_wave/goreop/tick()
+ if(waves && activeFor >= next_meteor)
+ spawn() spawn_meteors(5, meteors_ops)
+ next_meteor += rand(15, 30)
+ waves--
+ endWhen = (waves ? next_meteor + 1 : activeFor + 15)
+
+
+
+/datum/event/meteor_wave/goreops/end()
+ command_announcement.Announce("All MeteorOps are dead. Major Station Victory.", "MeteorOps")
\ No newline at end of file
diff --git a/code/modules/events/spontaneous_appendicitis.dm b/code/modules/events/spontaneous_appendicitis.dm
new file mode 100644
index 00000000000..964b3c9e50d
--- /dev/null
+++ b/code/modules/events/spontaneous_appendicitis.dm
@@ -0,0 +1,15 @@
+/datum/event/spontaneous_appendicitis/start()
+ for(var/mob/living/carbon/human/H in shuffle(living_mob_list))
+ if(issmall(H)) //don't infect monkies; that's a waste.
+ continue
+ if(H.species.virus_immune) //don't count things that are virus immune; they'll just get picked and auto-cure
+ continue
+ var/foundAlready = 0 //don't infect someone that already has the virus
+ for(var/datum/disease/D in H.viruses)
+ foundAlready = 1
+ if(H.stat == 2 || foundAlready)
+ continue
+
+ var/datum/disease/D = new /datum/disease/appendicitis
+ H.ForceContractDisease(D)
+ break
\ No newline at end of file
diff --git a/code/modules/events/tear.dm b/code/modules/events/tear.dm
index 605c6d1705d..e409f6592d8 100644
--- a/code/modules/events/tear.dm
+++ b/code/modules/events/tear.dm
@@ -41,15 +41,17 @@
if(animation) qdel(animation)
spawn(rand(30,120))
- var/blocked = blocked_mobs //global variable for blocked mobs
+ var/list/tear_critters = list()
+ for(var/T in typesof(/mob/living/simple_animal))
+ var/mob/living/simple_animal/SA = T
+ if(initial(SA.gold_core_spawnable) == CHEM_MOB_SPAWN_HOSTILE)
+ tear_critters += T
- var/list/critters = typesof(/mob/living/simple_animal/hostile) - blocked // list of possible hostile mobs
-
- for(var/i = 1, i <= 5, i++)
- var/chosen = pick(critters)
- var/mob/living/simple_animal/hostile/C = new chosen
- C.faction = list("slimesummon")
- C.loc = src.loc
+ for(var/i in 1 to 5)
+ var/chosen = pick(tear_critters)
+ var/mob/living/simple_animal/C = new chosen
+ C.faction |= "chemicalsummon"
+ C.forceMove(get_turf(src))
if(prob(50))
for(var/j = 1, j <= rand(1, 3), j++)
step(C, pick(NORTH,SOUTH,EAST,WEST))
diff --git a/code/modules/events/viral_infection.dm b/code/modules/events/viral_infection.dm
deleted file mode 100644
index 362093b62ee..00000000000
--- a/code/modules/events/viral_infection.dm
+++ /dev/null
@@ -1,29 +0,0 @@
-/datum/event/viral_infection
- severity = 1
-
-/datum/event/viral_infection/setup()
- announceWhen = rand(0, 3000)
- endWhen = announceWhen + 1
- severity = rand(1, 3)
-
-/datum/event/viral_infection/announce()
- command_announcement.Announce("Confirmed outbreak of level 7 viral biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", new_sound = 'sound/AI/outbreak7.ogg')
-
-/datum/event/viral_infection/start()
- var/list/candidates = list() //list of candidate keys
- for(var/mob/living/carbon/human/G in player_list)
- if(G.client && G.stat != DEAD)
- candidates += G
- if(!candidates.len) return
- candidates = shuffle(candidates)//Incorporating Donkie's list shuffle
-
- var/datum/disease2/disease/D = new /datum/disease2/disease
- D.makerandom()
- D.infectionchance = 1
- message_admins("Viral Infection: releasing strain [D.uniqueID]")
-
- while(severity > 0 && candidates.len)
- var/mob/living/carbon/human/H = candidates[1]
- H.virus2["[D.uniqueID]"] = D
- candidates.Remove(candidates[1])
- severity--
diff --git a/code/modules/events/viral_outbreak.dm b/code/modules/events/viral_outbreak.dm
deleted file mode 100644
index 6c24c37137e..00000000000
--- a/code/modules/events/viral_outbreak.dm
+++ /dev/null
@@ -1,28 +0,0 @@
-/datum/event/viral_outbreak
- severity = 1
-
-/datum/event/viral_outbreak/setup()
- announceWhen = rand(0, 3000)
- endWhen = announceWhen + 1
- severity = rand(2, 4)
-
-/datum/event/viral_outbreak/announce()
- command_announcement.Announce("Confirmed outbreak of level 7 major viral biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", new_sound = 'sound/AI/outbreak7.ogg')
-
-/datum/event/viral_outbreak/start()
- var/list/candidates = list() //list of candidate keys
- for(var/mob/living/carbon/human/G in player_list)
- if(G.client && G.stat != DEAD)
- candidates += G
- if(!candidates.len) return
- candidates = shuffle(candidates)//Incorporating Donkie's list shuffle
-
- var/datum/disease2/disease/D = new /datum/disease2/disease
- D.makerandom()
- message_admins("Viral Outbreak: releasing strain [D.uniqueID]")
-
- while(severity > 0 && candidates.len)
- var/mob/living/carbon/human/H = candidates[1]
- H.virus2["[D.uniqueID]"] = D
- candidates.Remove(candidates[1])
- severity--
diff --git a/code/modules/flufftext/TextFilters.dm b/code/modules/flufftext/TextFilters.dm
index 44cc91a8e45..5a40ea1934a 100644
--- a/code/modules/flufftext/TextFilters.dm
+++ b/code/modules/flufftext/TextFilters.dm
@@ -26,7 +26,7 @@ proc/Intoxicated(phrase)
proc/NewStutter(phrase,stunned)
phrase = html_decode(phrase)
- var/list/split_phrase = text2list(phrase," ") //Split it up into words.
+ var/list/split_phrase = splittext(phrase," ") //Split it up into words.
var/list/unstuttered_words = split_phrase.Copy()
var/i = rand(1,3)
@@ -57,7 +57,7 @@ proc/NewStutter(phrase,stunned)
split_phrase[index] = word
- return sanitize(list2text(split_phrase," "))
+ return sanitize(jointext(split_phrase," "))
proc/Stagger(mob/M,d) //Technically not a filter, but it relates to drunkenness.
step(M, pick(d,turn(d,90),turn(d,-90)))
@@ -67,7 +67,7 @@ proc/Ellipsis(original_msg, chance = 50)
if(chance >= 100) return original_msg
var/list
- words = text2list(original_msg," ")
+ words = splittext(original_msg," ")
new_words = list()
var/new_msg = ""
@@ -78,6 +78,6 @@ proc/Ellipsis(original_msg, chance = 50)
else
new_words += w
- new_msg = list2text(new_words," ")
+ new_msg = jointext(new_words," ")
return new_msg
diff --git a/code/modules/karma/karma.dm b/code/modules/karma/karma.dm
index 9633383e98a..c3c0ca4eef1 100644
--- a/code/modules/karma/karma.dm
+++ b/code/modules/karma/karma.dm
@@ -270,10 +270,10 @@ You've gained [totalkarma] total karma in your time here.
"}
karmacharge(cost)
if(dbckey)
- var/list/joblist = text2list(dbjob,",")
+ var/list/joblist = splittext(dbjob,",")
if(!(job in joblist))
joblist += job
- var/newjoblist = list2text(joblist,",")
+ var/newjoblist = jointext(joblist,",")
query = dbcon.NewQuery("UPDATE [format_table_name("whitelist")] SET job='[newjoblist]' WHERE ckey='[dbckey]'")
if(!query.Execute())
var/err = query.ErrorMsg()
@@ -310,10 +310,10 @@ You've gained [totalkarma] total karma in your time here.
"}
karmacharge(cost)
if(dbckey)
- var/list/specieslist = text2list(dbspecies,",")
+ var/list/specieslist = splittext(dbspecies,",")
if(!(species in specieslist))
specieslist += species
- var/newspecieslist = list2text(specieslist,",")
+ var/newspecieslist = jointext(specieslist,",")
query = dbcon.NewQuery("UPDATE [format_table_name("whitelist")] SET species='[newspecieslist]' WHERE ckey='[dbckey]'")
if(!query.Execute())
var/err = query.ErrorMsg()
@@ -388,15 +388,15 @@ You've gained [totalkarma] total karma in your time here.
"}
if(dbckey)
var/list/typelist = list()
if(type == "job")
- typelist = text2list(dbjob,",")
+ typelist = splittext(dbjob,",")
else if(type == "species")
- typelist = text2list(dbspecies,",")
+ typelist = splittext(dbspecies,",")
else
usr << "\red Type [type] is not a valid column."
if(name in typelist)
typelist -= name
- var/newtypelist = list2text(typelist,",")
+ var/newtypelist = jointext(typelist,",")
query = dbcon.NewQuery("UPDATE [format_table_name("whitelist")] SET [type]='[newtypelist]' WHERE ckey='[dbckey]'")
if(!query.Execute())
var/err = query.ErrorMsg()
@@ -426,8 +426,8 @@ You've gained [totalkarma] total karma in your time here.
"}
dbspecies = query.item[4]
if(dbckey)
- var/list/joblist = text2list(dbjob,",")
- var/list/specieslist = text2list(dbspecies,",")
+ var/list/joblist = splittext(dbjob,",")
+ var/list/specieslist = splittext(dbspecies,",")
var/list/combinedlist = joblist + specieslist
if(name)
if(name in combinedlist)
diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm
index f9b4228e792..235b46df619 100644
--- a/code/modules/mining/mine_items.dm
+++ b/code/modules/mining/mine_items.dm
@@ -211,7 +211,7 @@
return ..()
/obj/item/device/mobcapsule/attack(var/atom/A, mob/user, prox_flag)
- if(!istype(A, /mob/living/simple_animal))
+ if(!istype(A, /mob/living/simple_animal) || isbot(A))
return ..()
capture(A, user)
return 1
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index 16d826b55f5..46a40f6a1bf 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -110,18 +110,6 @@ Works together with spawning an observer, noted above.
if(!loc) return
if(!client) return 0
- //regular_hud_updates()
- //if(client.images.len)
- // for(var/image/hud in client.images)
- // if(copytext(hud.icon_state,1,4) == "hud")
- // client.images.Remove(hud)
- //if(antagHUD)
- // var/list/target_list = list()
- // for(var/mob/living/target in oview(src, 14))
- // if(target.mind && (target.mind.special_role || issilicon(target) || target.mind.nation))
- // target_list += target
- // if(target_list.len)
- // assess_targets(target_list, src)
/mob/dead/proc/assess_targets(list/target_list, mob/dead/observer/U)
@@ -320,9 +308,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
//var/adding_hud = (usr in A.hudusers) ? 0 : 1
for(var/datum/atom_hud/antag/H in (huds))
- //if(istype(H, /datum/atom_hud/antag))// || istype(H, /datum/atom_hud/data/human/security/advanced))
if(!M.antagHUD)
- //(adding_hud) ? H.add_hud_to(usr) : H.remove_hud_from(usr)
H.add_hud_to(usr)
else
H.remove_hud_from(usr)
diff --git a/code/modules/mob/hear_say.dm b/code/modules/mob/hear_say.dm
index 872b53ee6dd..c177b94a118 100644
--- a/code/modules/mob/hear_say.dm
+++ b/code/modules/mob/hear_say.dm
@@ -203,7 +203,7 @@
var/heard = ""
if(prob(15))
var/list/punctuation = list(",", "!", ".", ";", "?")
- var/list/messages = text2list(message, " ")
+ var/list/messages = splittext(message, " ")
var/R = rand(1, messages.len)
var/heardword = messages[R]
if(copytext(heardword,1, 1) in punctuation)
diff --git a/code/modules/mob/living/autohiss.dm b/code/modules/mob/living/autohiss.dm
index 219ec491624..4b9bfd96f49 100644
--- a/code/modules/mob/living/autohiss.dm
+++ b/code/modules/mob/living/autohiss.dm
@@ -102,7 +102,7 @@
. += pick(map[min_char])
message = copytext(message, min_index + 1)
- return list2text(.)
+ return jointext(., "")
#undef AUTOHISS_OFF
#undef AUTOHISS_BASIC
diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm
index 1c445f2a003..dd173382124 100644
--- a/code/modules/mob/living/carbon/alien/alien.dm
+++ b/code/modules/mob/living/carbon/alien/alien.dm
@@ -67,7 +67,7 @@
return
-/mob/living/carbon/alien/eyecheck()
+/mob/living/carbon/alien/check_eye_prot()
return 2
/mob/living/carbon/alien/updatehealth()
diff --git a/code/modules/mob/living/carbon/alien/death.dm b/code/modules/mob/living/carbon/alien/death.dm
index 115a49f20a8..de954cb3c75 100644
--- a/code/modules/mob/living/carbon/alien/death.dm
+++ b/code/modules/mob/living/carbon/alien/death.dm
@@ -52,7 +52,6 @@
for(var/mob/O in viewers(src, null))
O.show_message("[src] lets out a waning guttural screech, green blood bubbling from its maw...", 1)
update_canmove()
- if(client) blind.layer = 0
update_icons()
timeofdeath = worldtime2text()
diff --git a/code/modules/mob/living/carbon/alien/humanoid/life.dm b/code/modules/mob/living/carbon/alien/humanoid/life.dm
index 6e4fe3705f4..2c79a007fa8 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/life.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/life.dm
@@ -130,77 +130,4 @@
if(druggy)
druggy = max(druggy-1, 0)
- return 1
-
-
-/mob/living/carbon/alien/humanoid/handle_regular_hud_updates()
-
- if (stat == 2 || (XRAY in mutations))
- sight |= SEE_TURFS
- sight |= SEE_MOBS
- sight |= SEE_OBJS
- see_in_dark = 8
- see_invisible = SEE_INVISIBLE_LEVEL_TWO
- else if (stat != 2)
- sight |= SEE_MOBS
- sight &= ~SEE_TURFS
- sight &= ~SEE_OBJS
- if(nightvision)
- see_in_dark = 8
- see_invisible = SEE_INVISIBLE_MINIMUM
- else if(!nightvision)
- see_in_dark = 4
- see_invisible = 45
- if(see_override)
- see_invisible = see_override
-
- if (healths)
- if (stat != 2)
- switch(health)
- if(100 to INFINITY)
- healths.icon_state = "health0"
- if(75 to 100)
- healths.icon_state = "health1"
- if(50 to 75)
- healths.icon_state = "health2"
- if(25 to 50)
- healths.icon_state = "health3"
- if(0 to 25)
- healths.icon_state = "health4"
- else
- healths.icon_state = "health5"
- else
- healths.icon_state = "health6"
-
- if (toxin) toxin.icon_state = "tox[toxins_alert ? 1 : 0]"
- if (oxygen) oxygen.icon_state = "oxy[oxygen_alert ? 1 : 0]"
- if (fire) fire.icon_state = "fire[fire_alert ? 1 : 0]"
- //NOTE: the alerts dont reset when youre out of danger. dont blame me,
- //blame the person who coded them. Temporary fix added.
-
- client.screen.Remove(global_hud.blurry,global_hud.druggy,global_hud.vimpaired)
-
- if ((blind && stat != 2))
- if ((blinded))
- blind.layer = 18
- else
- blind.layer = 0
-
- if (disabilities & NEARSIGHTED)
- client.screen += global_hud.vimpaired
-
- if (eye_blurry)
- client.screen += global_hud.blurry
-
- if (druggy)
- client.screen += global_hud.druggy
-
- if (stat != 2)
- if (machine)
- if (!( machine.check_eye(src) ))
- reset_view(null)
- else
- if(!client.adminobs)
- reset_view(null)
-
- return 1
+ return 1
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/alien/larva/death.dm b/code/modules/mob/living/carbon/alien/larva/death.dm
index 574b617ca58..03eeeaa5c81 100644
--- a/code/modules/mob/living/carbon/alien/larva/death.dm
+++ b/code/modules/mob/living/carbon/alien/larva/death.dm
@@ -7,7 +7,6 @@
if(!gibbed)
visible_message("[src] lets out a waning high-pitched cry.")
update_canmove()
- if(client) blind.layer = 0
timeofdeath = worldtime2text()
if(mind) mind.store_memory("Time of death: [timeofdeath]", 0)
diff --git a/code/modules/mob/living/carbon/alien/larva/life.dm b/code/modules/mob/living/carbon/alien/larva/life.dm
index d4e57324826..4e7b974d855 100644
--- a/code/modules/mob/living/carbon/alien/larva/life.dm
+++ b/code/modules/mob/living/carbon/alien/larva/life.dm
@@ -85,84 +85,4 @@
if(druggy)
druggy = max(druggy-1, 0)
- return 1
-
-
-/mob/living/carbon/alien/larva/handle_regular_hud_updates()
-
- if (stat == 2 || (XRAY in mutations))
- sight |= SEE_TURFS
- sight |= SEE_MOBS
- sight |= SEE_OBJS
- see_in_dark = 8
- see_invisible = SEE_INVISIBLE_LEVEL_TWO
- else if (stat != 2)
- sight |= SEE_MOBS
- sight &= ~SEE_TURFS
- sight &= ~SEE_OBJS
- if(nightvision)
- see_in_dark = 8
- see_invisible = SEE_INVISIBLE_MINIMUM
- else if(!nightvision)
- see_in_dark = 4
- see_invisible = 45
- if(see_override)
- see_invisible = see_override
-
- if (healths)
- if (stat != 2)
- switch(health)
- if(25 to INFINITY)
- healths.icon_state = "health0"
- if(19 to 25)
- healths.icon_state = "health1"
- if(13 to 19)
- healths.icon_state = "health2"
- if(7 to 13)
- healths.icon_state = "health3"
- if(0 to 7)
- healths.icon_state = "health4"
- else
- healths.icon_state = "health5"
- else
- healths.icon_state = "health6"
-
- if(pullin)
- if(pulling)
- pullin.icon_state = "pull"
- else
- pullin.icon_state = "pull0"
-
- if (toxin) toxin.icon_state = "tox[toxins_alert ? 1 : 0]"
- if (oxygen) oxygen.icon_state = "oxy[oxygen_alert ? 1 : 0]"
- if (fire) fire.icon_state = "fire[fire_alert ? 1 : 0]"
- //NOTE: the alerts dont reset when youre out of danger. dont blame me,
- //blame the person who coded them. Temporary fix added.
-
-
- client.screen.Remove(global_hud.blurry,global_hud.druggy,global_hud.vimpaired)
-
- if ((blind && stat != 2))
- if ((blinded))
- blind.layer = 18
- else
- blind.layer = 0
-
- if (disabilities & NEARSIGHTED)
- client.screen += global_hud.vimpaired
-
- if (eye_blurry)
- client.screen += global_hud.blurry
-
- if (druggy)
- client.screen += global_hud.druggy
-
- if (stat != 2)
- if (machine)
- if (!( machine.check_eye(src) ))
- reset_view(null)
- else
- if(!client.adminobs)
- reset_view(null)
-
return 1
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/alien/life.dm b/code/modules/mob/living/carbon/alien/life.dm
index e65165ec31d..a3662187f8b 100644
--- a/code/modules/mob/living/carbon/alien/life.dm
+++ b/code/modules/mob/living/carbon/alien/life.dm
@@ -36,4 +36,24 @@
src << "You feel a searing heat in your lungs!"
fire_alert = max(fire_alert, 1)
else
- fire_alert = 0
\ No newline at end of file
+ fire_alert = 0
+
+/mob/living/carbon/alien/update_sight()
+ if(stat == DEAD || (XRAY in mutations))
+ sight |= SEE_TURFS
+ sight |= SEE_MOBS
+ sight |= SEE_OBJS
+ see_in_dark = 8
+ see_invisible = SEE_INVISIBLE_LEVEL_TWO
+ else if(stat != DEAD)
+ sight |= SEE_MOBS
+ sight &= ~SEE_TURFS
+ sight &= ~SEE_OBJS
+ if(nightvision)
+ see_in_dark = 8
+ see_invisible = SEE_INVISIBLE_MINIMUM
+ else if(!nightvision)
+ see_in_dark = 4
+ see_invisible = 45
+ if(see_override)
+ see_invisible = see_override
diff --git a/code/modules/mob/living/carbon/brain/death.dm b/code/modules/mob/living/carbon/brain/death.dm
index efb1b8e8d87..8345c791a22 100644
--- a/code/modules/mob/living/carbon/brain/death.dm
+++ b/code/modules/mob/living/carbon/brain/death.dm
@@ -6,7 +6,6 @@
container.icon_state = "mmi_dead"
stat = DEAD
- if(blind) blind.layer = 0
sight |= SEE_TURFS|SEE_MOBS|SEE_OBJS
see_in_dark = 8
see_invisible = SEE_INVISIBLE_LEVEL_TWO
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index 677b83fac58..9c780f92bce 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -309,9 +309,54 @@
if(H.w_uniform)
H.w_uniform.add_fingerprint(M)
+/mob/living/carbon/flash_eyes(intensity = 1, override_blindness_check = 0, affect_silicon = 0, visual = 0)
+ . = ..()
+ var/damage = intensity - check_eye_prot()
+ if(.)
+ if(visual)
+ return
+ if(weakeyes)
+ Stun(2)
+
+ var/obj/item/organ/internal/eyes/E = get_int_organ(/obj/item/organ/internal/eyes)
+ if(!E)
+ return
+
+ switch(damage)
+ if(1)
+ src << "Your eyes sting a little."
+ if(prob(40)) //waiting on carbon organs
+ E.damage += 1
+
+ if(2)
+ src << "Your eyes burn."
+ E.damage += rand(2, 4)
+
+ else
+ src << "Your eyes itch and burn severely!"
+ E.damage += rand(12, 16)
+
+ if(E.damage > E.min_bruised_damage)
+ eye_blind += damage
+ eye_blurry += damage * rand(3, 6)
+
+ if(E.damage > (E.min_bruised_damage + E.min_broken_damage) / 2)
+ if(!(E.status & ORGAN_ROBOT))
+ src << "Your eyes start to burn badly!"
+ else //snowflake conditions piss me off for the record
+ src << "The flash blinds you!"
+
+ else if(E.damage >= E.min_broken_damage)
+ src << "You can't see anything!"
+
+ else
+ src << "Your eyes are really starting to hurt. This can't be good for you!"
+ return 1
+
+ else if(damage == 0) // just enough protection
+ if(prob(20))
+ src << "Something bright flashes in the corner of your vision!"
-/mob/living/carbon/proc/eyecheck()
- return 0
/mob/living/carbon/proc/tintcheck()
return 0
@@ -844,6 +889,10 @@ so that different stomachs can handle things in different ways VB*/
/mob/living/carbon/get_access()
. = ..()
- var/obj/item/I = get_active_hand()
- if(I)
- . |= I.GetAccess()
+ var/obj/item/RH = get_active_hand()
+ if(RH)
+ . |= RH.GetAccess()
+
+ var/obj/item/LH = get_inactive_hand()
+ if(LH)
+ . |= LH.GetAccess()
diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm
index 589331a7c01..aa31c912841 100644
--- a/code/modules/mob/living/carbon/human/death.dm
+++ b/code/modules/mob/living/carbon/human/death.dm
@@ -129,7 +129,6 @@
if(!gibbed)
update_canmove()
- if(client) blind.layer = 0
timeofdeath = worldtime2text()
med_hud_set_health()
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 0584b1c062f..9fb9f12d264 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -1100,24 +1100,32 @@
. = ..()
-///eyecheck()
+///check_eye_prot()
///Returns a number between -1 to 2
-/mob/living/carbon/human/eyecheck()
+/mob/living/carbon/human/check_eye_prot()
var/number = ..()
- if(istype(src.head, /obj/item/clothing/head)) //are they wearing something on their head
- var/obj/item/clothing/head/HFP = src.head //if yes gets the flash protection value from that item
+ if(istype(head, /obj/item/clothing/head)) //are they wearing something on their head
+ var/obj/item/clothing/head/HFP = head //if yes gets the flash protection value from that item
number += HFP.flash_protect
- if(istype(src.glasses, /obj/item/clothing/glasses)) //glasses
- var/obj/item/clothing/glasses/GFP = src.glasses
+ if(istype(glasses, /obj/item/clothing/glasses)) //glasses
+ var/obj/item/clothing/glasses/GFP = glasses
number += GFP.flash_protect
- if(istype(src.wear_mask, /obj/item/clothing/mask)) //mask
- var/obj/item/clothing/mask/MFP = src.wear_mask
+ if(istype(wear_mask, /obj/item/clothing/mask)) //mask
+ var/obj/item/clothing/mask/MFP = wear_mask
number += MFP.flash_protect
- for(var/obj/item/organ/internal/cyberimp/eyes/EFP in src.internal_organs)
+ for(var/obj/item/organ/internal/cyberimp/eyes/EFP in internal_organs)
number += EFP.flash_protect
return number
+/mob/living/carbon/human/check_ear_prot()
+ if(head && (head.flags & HEADBANGPROTECT))
+ return 1
+ if(l_ear && (l_ear.flags & EARBANGPROTECT))
+ return 1
+ if(r_ear && (r_ear.flags & EARBANGPROTECT))
+ return 1
+
///tintcheck()
///Checks eye covering items for visually impairing tinting, such as welding masks
///Checked in life.dm. 0 & 1 = no impairment, 2 = welding mask overlay, 3 = You can see jack, but you can't see shit.
@@ -1887,4 +1895,4 @@
var/obj/item/clothing/under/U = w_uniform
if(U.accessories)
for(var/obj/item/clothing/accessory/A in U.accessories)
- . |= A.GetAccess()
\ No newline at end of file
+ . |= A.GetAccess()
diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm
index 0b413d1915c..1b6d62c72a0 100644
--- a/code/modules/mob/living/carbon/human/human_damage.dm
+++ b/code/modules/mob/living/carbon/human/human_damage.dm
@@ -400,4 +400,4 @@ This function restores all organs.
// Will set our damageoverlay icon to the next level, which will then be set back to the normal level the next mob.Life().
updatehealth()
- return 1
\ No newline at end of file
+ return 1
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index f463f30b89c..db69fb5b3c4 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -1,30 +1,5 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32
-
-var/global/list/unconscious_overlays = list("1" = image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "passage1"),\
- "2" = image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "passage2"),\
- "3" = image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "passage3"),\
- "4" = image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "passage4"),\
- "5" = image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "passage5"),\
- "6" = image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "passage6"),\
- "7" = image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "passage7"),\
- "8" = image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "passage8"),\
- "9" = image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "passage9"),\
- "10" = image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "passage10"))
-var/global/list/oxyloss_overlays = list("1" = image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "oxydamageoverlay1"),\
- "2" = image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "oxydamageoverlay2"),\
- "3" = image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "oxydamageoverlay3"),\
- "4" = image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "oxydamageoverlay4"),\
- "5" = image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "oxydamageoverlay5"),\
- "6" = image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "oxydamageoverlay6"),\
- "7" = image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "oxydamageoverlay7"))
-var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "brutedamageoverlay1"),\
- "2" = image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "brutedamageoverlay2"),\
- "3" = image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "brutedamageoverlay3"),\
- "4" = image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "brutedamageoverlay4"),\
- "5" = image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "brutedamageoverlay5"),\
- "6" = image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "brutedamageoverlay6"))
-
#define TINT_IMPAIR 2 //Threshold of tint level to apply weld mask overlay
#define TINT_BLIND 3 //Threshold of tint level to obscure vision fully
@@ -51,10 +26,6 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
loc_as_cryobag.used++
in_stasis = 1
- //if(mob_master.current_cycle % 30 == 15)
- //hud_updateflag = 1022
- //HudRefactor:WTF do i put here....
-
voice = GetVoice()
if(..() && !in_stasis)
@@ -909,7 +880,6 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
/mob/living/carbon/human/handle_vision()
- client.screen.Remove(global_hud.blurry, global_hud.druggy, global_hud.vimpaired, global_hud.darkMask)
if(machine)
if(!machine.check_eye(src)) reset_view(null)
else
diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm
index f736a17af22..7162933349d 100644
--- a/code/modules/mob/living/carbon/human/say.dm
+++ b/code/modules/mob/living/carbon/human/say.dm
@@ -53,6 +53,8 @@
return 1
if (istype(other, /mob/living/silicon))
return 1
+ if (istype(other, /mob/living/simple_animal/bot))
+ return 1
if (istype(other, /mob/living/carbon/brain))
return 1
if (istype(other, /mob/living/carbon/slime))
diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm
index 6d04526d84e..f2cf58fe29f 100644
--- a/code/modules/mob/living/carbon/human/species/species.dm
+++ b/code/modules/mob/living/carbon/human/species/species.dm
@@ -64,6 +64,8 @@
var/ventcrawler = 0 //Determines if the mob can go through the vents.
var/has_fine_manipulation = 1 // Can use small items.
+ var/list/allowed_consumed_mobs = list() //If a species can consume mobs, put the type of mobs it can consume here.
+
var/flags = 0 // Various specific features.
var/clothing_flags = 0 // Underwear and socks.
var/exotic_blood
@@ -414,125 +416,147 @@
return 0
/datum/species/proc/handle_vision(mob/living/carbon/human/H)
- if( H.stat == DEAD )
+ if(H.stat == DEAD)
H.sight |= (SEE_TURFS|SEE_MOBS|SEE_OBJS)
H.see_in_dark = 8
- if(!H.druggy) H.see_invisible = SEE_INVISIBLE_LEVEL_TWO
- else
- H.sight &= ~(SEE_TURFS|SEE_MOBS|SEE_OBJS)
+ if(!H.druggy)
+ H.see_invisible = SEE_INVISIBLE_LEVEL_TWO
+ return
- H.see_in_dark = darksight //set their variables to default, modify them later
- H.see_invisible = SEE_INVISIBLE_LIVING
+ H.sight &= ~(SEE_TURFS|SEE_MOBS|SEE_OBJS)
- if(H.mind && H.mind.vampire)
- if(H.mind.vampire.get_ability(/datum/vampire_passive/full))
- H.sight |= SEE_TURFS|SEE_MOBS|SEE_OBJS
- H.see_in_dark = 8
- H.see_invisible = SEE_INVISIBLE_MINIMUM
- else if(H.mind.vampire.get_ability(/datum/vampire_passive/vision))
- H.sight |= SEE_MOBS
+ H.see_in_dark = darksight //set their variables to default, modify them later
+ H.see_invisible = SEE_INVISIBLE_LIVING
- if(XRAY in H.mutations)
+ if(H.mind && H.mind.vampire)
+ if(H.mind.vampire.get_ability(/datum/vampire_passive/full))
H.sight |= SEE_TURFS|SEE_MOBS|SEE_OBJS
H.see_in_dark = 8
-
H.see_invisible = SEE_INVISIBLE_MINIMUM
+ else if(H.mind.vampire.get_ability(/datum/vampire_passive/vision))
+ H.sight |= SEE_MOBS
- if(H.seer == 1)
- var/obj/effect/rune/R = locate() in H.loc
- if(R && R.word1 == cultwords["see"] && R.word2 == cultwords["hell"] && R.word3 == cultwords["join"])
- H.see_invisible = SEE_INVISIBLE_OBSERVER
- else
- H.see_invisible = SEE_INVISIBLE_LIVING
- H.seer = 0
+ if(XRAY in H.mutations)
+ H.sight |= SEE_TURFS|SEE_MOBS|SEE_OBJS
+ H.see_in_dark = 8
- //This checks how much the mob's eyewear impairs their vision
- if(H.tinttotal >= TINT_IMPAIR)
- if(tinted_weldhelh)
- if(H.tinttotal >= TINT_BLIND)
- H.eye_blind = max(H.eye_blind, 1)
- if(H.client)
- H.client.screen += global_hud.darkMask
+ H.see_invisible = SEE_INVISIBLE_MINIMUM
- var/minimum_darkness_view = INFINITY
- if(H.glasses)
- if(istype(H.glasses, /obj/item/clothing/glasses))
- var/obj/item/clothing/glasses/G = H.glasses
- H.sight |= G.vision_flags
- if(G.darkness_view)
- H.see_in_dark = G.darkness_view
- minimum_darkness_view = G.darkness_view
+ if(H.seer == 1)
+ var/obj/effect/rune/R = locate() in H.loc
+ if(R && R.word1 == cultwords["see"] && R.word2 == cultwords["hell"] && R.word3 == cultwords["join"])
+ H.see_invisible = SEE_INVISIBLE_OBSERVER
+ else
+ H.see_invisible = SEE_INVISIBLE_LIVING
+ H.seer = 0
- if(!G.see_darkness)
- H.see_invisible = SEE_INVISIBLE_MINIMUM
+ //This checks how much the mob's eyewear impairs their vision
+ if(H.tinttotal >= TINT_IMPAIR)
+ if(tinted_weldhelh)
+ H.overlay_fullscreen("tint", /obj/screen/fullscreen/impaired, 2)
+ if(H.tinttotal >= TINT_BLIND)
+ H.eye_blind = max(H.eye_blind, 1)
+ else
+ H.clear_fullscreen("tint")
- if(H.head)
- if(istype(H.head, /obj/item/clothing/head))
- var/obj/item/clothing/head/hat = H.head
- H.sight |= hat.vision_flags
+ var/minimum_darkness_view = INFINITY
+ if(H.glasses)
+ if(istype(H.glasses, /obj/item/clothing/glasses))
+ var/obj/item/clothing/glasses/G = H.glasses
+ H.sight |= G.vision_flags
- if(hat.darkness_view && hat.darkness_view < minimum_darkness_view) // Pick the lowest of the two darkness_views between the glasses and helmet.
- H.see_in_dark = hat.darkness_view
+ if(G.darkness_view)
+ H.see_in_dark = G.darkness_view
+ minimum_darkness_view = G.darkness_view
- if(!hat.see_darkness)
- H.see_invisible = SEE_INVISIBLE_MINIMUM
+ if(!G.see_darkness)
+ H.see_invisible = SEE_INVISIBLE_MINIMUM
- //switch(hat.HUDType)
- // if(SECHUD)
- // process_sec_hud(H,1)
- // if(MEDHUD)
- // process_med_hud(H,1)
- // if(ANTAGHUD)
- // process_antag_hud(H)
+ if(H.head)
+ if(istype(H.head, /obj/item/clothing/head))
+ var/obj/item/clothing/head/hat = H.head
+ H.sight |= hat.vision_flags
- if(istype(H.back, /obj/item/weapon/rig)) ///ahhhg so snowflakey
- var/obj/item/weapon/rig/rig = H.back
- if(rig.visor)
- if(!rig.helmet || (H.head && rig.helmet == H.head))
- if(rig.visor && rig.visor.vision && rig.visor.active && rig.visor.vision.glasses)
- var/obj/item/clothing/glasses/G = rig.visor.vision.glasses
- if(istype(G))
- H.see_in_dark = (G.darkness_view ? G.darkness_view : darksight) // Otherwise we keep our darkness view with togglable nightvision.
- if(G.vision_flags) // MESONS
- H.sight |= G.vision_flags
+ if(hat.darkness_view && hat.darkness_view < minimum_darkness_view) // Pick the lowest of the two darkness_views between the glasses and helmet.
+ H.see_in_dark = hat.darkness_view
- if(!G.see_darkness)
- H.see_invisible = SEE_INVISIBLE_MINIMUM
+ if(!hat.see_darkness)
+ H.see_invisible = SEE_INVISIBLE_MINIMUM
- //switch(G.HUDType)
- // if(SECHUD)
- // process_sec_hud(H,1)
- // if(MEDHUD)
- // process_med_hud(H,1)
- // if(ANTAGHUD)
- // process_antag_hud(H)
+ //switch(hat.HUDType)
+ // if(SECHUD)
+ // process_sec_hud(H,1)
+ // if(MEDHUD)
+ // process_med_hud(H,1)
+ // if(ANTAGHUD)
+ // process_antag_hud(H)
- if(H.vision_type)
- H.see_in_dark = max(H.see_in_dark, H.vision_type.see_in_dark, darksight)
- H.see_invisible = H.vision_type.see_invisible
- if(H.vision_type.light_sensitive)
- H.weakeyes = 1
- H.sight |= H.vision_type.sight_flags
+ if(istype(H.back, /obj/item/weapon/rig)) ///ahhhg so snowflakey
+ var/obj/item/weapon/rig/rig = H.back
+ if(rig.visor)
+ if(!rig.helmet || (H.head && rig.helmet == H.head))
+ if(rig.visor && rig.visor.vision && rig.visor.active && rig.visor.vision.glasses)
+ var/obj/item/clothing/glasses/G = rig.visor.vision.glasses
+ if(istype(G))
+ H.see_in_dark = (G.darkness_view ? G.darkness_view : darksight) // Otherwise we keep our darkness view with togglable nightvision.
+ if(G.vision_flags) // MESONS
+ H.sight |= G.vision_flags
- if(H.see_override) //Override all
- H.see_invisible = H.see_override
+ if(!G.see_darkness)
+ H.see_invisible = SEE_INVISIBLE_MINIMUM
- if(H.blind)
- if(H.blinded) H.blind.layer = 18
- else H.blind.layer = 0
+ //switch(G.HUDType)
+ // if(SECHUD)
+ // process_sec_hud(H,1)
+ // if(MEDHUD)
+ // process_med_hud(H,1)
+ // if(ANTAGHUD)
+ // process_antag_hud(H)
- if(H.disabilities & NEARSIGHTED) //this looks meh but saves a lot of memory by not requiring to add var/prescription
- if(H.glasses) //to every /obj/item
- var/obj/item/clothing/glasses/G = H.glasses
- if(!G.prescription)
- H.client.screen += global_hud.vimpaired
- else
- H.client.screen += global_hud.vimpaired
+ if(H.vision_type)
+ H.see_in_dark = max(H.see_in_dark, H.vision_type.see_in_dark, darksight)
+ H.see_invisible = H.vision_type.see_invisible
+ if(H.vision_type.light_sensitive)
+ H.weakeyes = 1
+ H.sight |= H.vision_type.sight_flags
- if(H.eye_blurry) H.client.screen += global_hud.blurry
- if(H.druggy) H.client.screen += global_hud.druggy
+ if(H.see_override) //Override all
+ H.see_invisible = H.see_override
+
+ if(!H.client)
+ return 1
+
+ if(H.blinded || H.eye_blind)
+ H.overlay_fullscreen("blind", /obj/screen/fullscreen/blind)
+ //H.throw_alert("blind", /obj/screen/alert/blind)
+ else
+ H.clear_fullscreen("blind")
+ //H.clear_alert("blind")
+
+
+ if(H.disabilities & NEARSIGHTED) //this looks meh but saves a lot of memory by not requiring to add var/prescription
+ if(H.glasses) //to every /obj/item
+ var/obj/item/clothing/glasses/G = H.glasses
+ if(!G.prescription)
+ H.overlay_fullscreen("nearsighted", /obj/screen/fullscreen/impaired, 1)
+ else
+ H.overlay_fullscreen("nearsighted", /obj/screen/fullscreen/impaired, 1)
+ else
+ H.clear_fullscreen("nearsighted")
+
+ if(H.eye_blurry)
+ H.overlay_fullscreen("blurry", /obj/screen/fullscreen/blurry)
+ else
+ H.clear_fullscreen("blurry")
+
+ if(H.druggy)
+ H.overlay_fullscreen("high", /obj/screen/fullscreen/high)
+ //H.throw_alert("high", /obj/screen/alert/high)
+ else
+ H.clear_fullscreen("high")
+ //H.clear_alert("high")
/datum/species/proc/handle_hud_icons(mob/living/carbon/human/H)
if(H.healths)
diff --git a/code/modules/mob/living/carbon/human/species/station.dm b/code/modules/mob/living/carbon/human/species/station.dm
index 65e4684c64f..8e0b9f5d2b7 100644
--- a/code/modules/mob/living/carbon/human/species/station.dm
+++ b/code/modules/mob/living/carbon/human/species/station.dm
@@ -56,6 +56,9 @@
reagent_tag = PROCESS_ORG
base_color = "#066000"
+ allowed_consumed_mobs = list(/mob/living/simple_animal/mouse, /mob/living/simple_animal/lizard, /mob/living/simple_animal/chick, /mob/living/simple_animal/chicken,
+ /mob/living/simple_animal/crab, /mob/living/simple_animal/butterfly, /mob/living/simple_animal/parrot, /mob/living/simple_animal/tribble)
+
suicide_messages = list(
"is attempting to bite their tongue off!",
"is jamming their claws into their eye sockets!",
@@ -107,6 +110,9 @@
flesh_color = "#AFA59E"
base_color = "#333333"
+ allowed_consumed_mobs = list(/mob/living/simple_animal/mouse, /mob/living/simple_animal/chick, /mob/living/simple_animal/butterfly, /mob/living/simple_animal/parrot,
+ /mob/living/simple_animal/tribble)
+
suicide_messages = list(
"is attempting to bite their tongue off!",
"is jamming their claws into their eye sockets!",
@@ -148,6 +154,9 @@
flesh_color = "#966464"
base_color = "#B43214"
+ allowed_consumed_mobs = list(/mob/living/simple_animal/mouse, /mob/living/simple_animal/lizard, /mob/living/simple_animal/chick, /mob/living/simple_animal/chicken,
+ /mob/living/simple_animal/crab, /mob/living/simple_animal/butterfly, /mob/living/simple_animal/parrot, /mob/living/simple_animal/tribble)
+
suicide_messages = list(
"is attempting to bite their tongue off!",
"is jamming their claws into their eye sockets!",
@@ -355,6 +364,8 @@
blood_color = "#FB9800"
reagent_tag = PROCESS_ORG
+ allowed_consumed_mobs = list(/mob/living/simple_animal/diona)
+
suicide_messages = list(
"is attempting to bite their antenna off!",
"is jamming their claws into their eye sockets!",
diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm
index ef68dd1a97b..48d0c320145 100644
--- a/code/modules/mob/living/carbon/life.dm
+++ b/code/modules/mob/living/carbon/life.dm
@@ -245,7 +245,7 @@
if(M.loc != src)
stomach_contents.Remove(M)
continue
- if(istype(M, /mob/living/carbon) && stat != 2)
+ if(istype(M, /mob/living) && stat != 2)
if(M.stat == 2)
M.death(1)
stomach_contents.Remove(M)
@@ -364,83 +364,55 @@
//this handles hud updates. Calls update_vision() and handle_hud_icons()
/mob/living/carbon/handle_regular_hud_updates()
- if(!client) return 0
+ if(!client)
+ return 0
- if(damageoverlay)
- if(damageoverlay.overlays)
- damageoverlay.overlays = list()
-
- if(stat == UNCONSCIOUS)
- //Critical damage passage overlay
- if(health <= config.health_threshold_crit)
- var/image/I = image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "passage0")
- I.blend_mode = BLEND_OVERLAY //damageoverlay is BLEND_MULTIPLY
- switch(health)
- if(-20 to -10)
- I.icon_state = "passage1"
- if(-30 to -20)
- I.icon_state = "passage2"
- if(-40 to -30)
- I.icon_state = "passage3"
- if(-50 to -40)
- I.icon_state = "passage4"
- if(-60 to -50)
- I.icon_state = "passage5"
- if(-70 to -60)
- I.icon_state = "passage6"
- if(-80 to -70)
- I.icon_state = "passage7"
- if(-90 to -80)
- I.icon_state = "passage8"
- if(-95 to -90)
- I.icon_state = "passage9"
- if(-INFINITY to -95)
- I.icon_state = "passage10"
- damageoverlay.overlays += I
+ if(stat == UNCONSCIOUS && health <= config.health_threshold_crit)
+ var/severity = 0
+ switch(health)
+ if(-20 to -10) severity = 1
+ if(-30 to -20) severity = 2
+ if(-40 to -30) severity = 3
+ if(-50 to -40) severity = 4
+ if(-60 to -50) severity = 5
+ if(-70 to -60) severity = 6
+ if(-80 to -70) severity = 7
+ if(-90 to -80) severity = 8
+ if(-95 to -90) severity = 9
+ if(-INFINITY to -95) severity = 10
+ overlay_fullscreen("crit", /obj/screen/fullscreen/crit, severity)
+ else
+ clear_fullscreen("crit")
+ if(oxyloss)
+ var/severity = 0
+ switch(oxyloss)
+ if(10 to 20) severity = 1
+ if(20 to 25) severity = 2
+ if(25 to 30) severity = 3
+ if(30 to 35) severity = 4
+ if(35 to 40) severity = 5
+ if(40 to 45) severity = 6
+ if(45 to INFINITY) severity = 7
+ overlay_fullscreen("oxy", /obj/screen/fullscreen/oxy, severity)
else
- //Oxygen damage overlay
- if(oxyloss)
- var/image/I = image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "oxydamageoverlay0")
- switch(oxyloss)
- if(10 to 20)
- I.icon_state = "oxydamageoverlay1"
- if(20 to 25)
- I.icon_state = "oxydamageoverlay2"
- if(25 to 30)
- I.icon_state = "oxydamageoverlay3"
- if(30 to 35)
- I.icon_state = "oxydamageoverlay4"
- if(35 to 40)
- I.icon_state = "oxydamageoverlay5"
- if(40 to 45)
- I.icon_state = "oxydamageoverlay6"
- if(45 to INFINITY)
- I.icon_state = "oxydamageoverlay7"
- damageoverlay.overlays += I
+ clear_fullscreen("oxy")
+
+ //Fire and Brute damage overlay (BSSR)
+ var/hurtdamage = getBruteLoss() + getFireLoss() + damageoverlaytemp
+ damageoverlaytemp = 0 // We do this so we can detect if someone hits us or not.
+ if(hurtdamage)
+ var/severity = 0
+ switch(hurtdamage)
+ if(5 to 15) severity = 1
+ if(15 to 30) severity = 2
+ if(30 to 45) severity = 3
+ if(45 to 70) severity = 4
+ if(70 to 85) severity = 5
+ if(85 to INFINITY) severity = 6
+ overlay_fullscreen("brute", /obj/screen/fullscreen/brute, severity)
+ else
+ clear_fullscreen("brute")
- //Fire and Brute damage overlay (BSSR)
- var/hurtdamage = src.getBruteLoss() + src.getFireLoss() + damageoverlaytemp
- damageoverlaytemp = 0 // We do this so we can detect if someone hits us or not.
- if(hurtdamage)
- var/image/I = image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "brutedamageoverlay0")
- I.blend_mode = BLEND_ADD
- switch(hurtdamage)
- if(5 to 15)
- I.icon_state = "brutedamageoverlay1"
- if(15 to 30)
- I.icon_state = "brutedamageoverlay2"
- if(30 to 45)
- I.icon_state = "brutedamageoverlay3"
- if(45 to 70)
- I.icon_state = "brutedamageoverlay4"
- if(70 to 85)
- I.icon_state = "brutedamageoverlay5"
- if(85 to INFINITY)
- I.icon_state = "brutedamageoverlay6"
- var/image/black = image(I.icon, I.icon_state) //BLEND_ADD doesn't let us darken, so this is just to blacken the edge of the screen
- black.color = "#170000"
- damageoverlay.overlays += I
- damageoverlay.overlays += black
..()
return 1
diff --git a/code/modules/mob/living/carbon/slime/death.dm b/code/modules/mob/living/carbon/slime/death.dm
index 6e951320bdc..240454f3e0f 100644
--- a/code/modules/mob/living/carbon/slime/death.dm
+++ b/code/modules/mob/living/carbon/slime/death.dm
@@ -20,8 +20,6 @@
O.show_message("The [name] seizes up and falls limp...", 1) //ded -- Urist
update_canmove()
- if(blind)
- blind.layer = 0
if(ticker && ticker.mode)
ticker.mode.check_win()
diff --git a/code/modules/mob/living/death.dm b/code/modules/mob/living/death.dm
new file mode 100644
index 00000000000..14585f6ae21
--- /dev/null
+++ b/code/modules/mob/living/death.dm
@@ -0,0 +1,5 @@
+/mob/living/death(gibbed)
+ blinded = max(blinded, 1)
+
+ clear_fullscreens()
+ ..(gibbed)
\ No newline at end of file
diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm
index f8dcf7a5d0d..ebbda839e52 100644
--- a/code/modules/mob/living/life.dm
+++ b/code/modules/mob/living/life.dm
@@ -161,7 +161,7 @@
/mob/living/proc/handle_disabilities()
//Eyes
- if(disabilities & BLIND || stat) //blindness from disability or unconsciousness doesn't get better on its own
+ if(sdisabilities & BLIND || stat) //blindness from disability or unconsciousness doesn't get better on its own
eye_blind = max(eye_blind, 1)
else if(eye_blind) //blindness, heals slowly over time
eye_blind = max(eye_blind-1,0)
@@ -187,33 +187,40 @@
return 1
/mob/living/proc/handle_vision()
-
- client.screen.Remove(global_hud.blurry, global_hud.druggy, global_hud.vimpaired, global_hud.darkMask)
-
update_sight()
- if(stat != DEAD)
- if(blind)
- if(eye_blind)
- blind.layer = 18
- else
- blind.layer = 0
+ if(stat == DEAD)
+ return
+ if(blinded || eye_blind)
+ overlay_fullscreen("blind", /obj/screen/fullscreen/blind)
+ //throw_alert("blind", /obj/screen/alert/blind)
+ else
+ clear_fullscreen("blind")
+ //clear_alert("blind")
- if (disabilities & NEARSIGHTED)
- client.screen += global_hud.vimpaired
-
- if (eye_blurry)
- client.screen += global_hud.blurry
-
- if (druggy)
- client.screen += global_hud.druggy
-
- if(machine)
- if (!( machine.check_eye(src) ))
- reset_view(null)
+ if(disabilities & NEARSIGHTED)
+ overlay_fullscreen("nearsighted", /obj/screen/fullscreen/impaired, 1)
else
- if(!remote_view && !client.adminobs)
- reset_view(null)
+ clear_fullscreen("nearsighted")
+
+ if(eye_blurry)
+ overlay_fullscreen("blurry", /obj/screen/fullscreen/blurry)
+ else
+ clear_fullscreen("blurry")
+
+ if(druggy)
+ overlay_fullscreen("high", /obj/screen/fullscreen/high)
+ //throw_alert("high", /obj/screen/alert/high)
+ else
+ clear_fullscreen("high")
+ //clear_alert("high")
+
+ if(machine)
+ if(!machine.check_eye(src))
+ reset_view(null)
+ else
+ if(!remote_view && !client.adminobs)
+ reset_view(null)
/mob/living/proc/update_sight()
return
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index df3c85e4feb..662937b1af3 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -73,8 +73,7 @@
/mob/living/ex_act(severity)
..()
- if(client && !eye_blind)
- flick("flash", src.flash)
+ flash_eyes()
/mob/living/proc/updatehealth()
if(status_flags & GODMODE)
@@ -809,6 +808,18 @@
/mob/living/proc/can_use_vents()
return "You can't fit into that vent."
+//called when the mob receives a bright flash
+/mob/living/proc/flash_eyes(intensity = 1, override_blindness_check = 0, affect_silicon = 0, visual = 0, type = /obj/screen/fullscreen/flash)
+ if(check_eye_prot() < intensity && (override_blindness_check || !(sdisabilities & BLIND)))
+ overlay_fullscreen("flash", type)
+ addtimer(src, "clear_fullscreen", 25, FALSE, "flash", 25)
+ return 1
+
+/mob/living/proc/check_eye_prot()
+ return 0
+
+/mob/living/proc/check_ear_prot()
+
// 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, var/silent = 0)
@@ -966,4 +977,4 @@
new path(loc)
butcher_results.Remove(path) //In case you want to have things like simple_animals drop their butcher results on gib, so it won't double up below.
visible_message("[user] butchers [src].")
- gib()
\ No newline at end of file
+ gib()
diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm
index 4c1780e34d0..f2523e2d823 100644
--- a/code/modules/mob/living/living_defense.dm
+++ b/code/modules/mob/living/living_defense.dm
@@ -39,8 +39,6 @@
/mob/living/bullet_act(var/obj/item/projectile/P, var/def_zone)
- flash_weak_pain()
-
//Being hit while using a cloaking device
var/obj/item/weapon/cloaking_device/C = locate((/obj/item/weapon/cloaking_device) in src)
if(C && C.active)
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index a834f9e2569..94305e770fd 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -288,11 +288,11 @@ var/list/ai_verbs_default = list(
return
if(!custom_sprite) //Check to see if custom sprite time, checking the appopriate file to change a var
var/file = file2text("config/custom_sprites.txt")
- var/lines = text2list(file, "\n")
+ var/lines = splittext(file, "\n")
for(var/line in lines)
// split & clean up
- var/list/Entry = text2list(line, ":")
+ var/list/Entry = splittext(line, ":")
for(var/i = 1 to Entry.len)
Entry[i] = trim(Entry[i])
@@ -593,8 +593,6 @@ var/list/ai_verbs_default = list(
playsound(loc, 'sound/weapons/slash.ogg', 25, 1, -1)
visible_message("[M] has slashed at [src]!",\
"[M] has slashed at [src]!")
- if(prob(8))
- flick("noise", flash)
adjustBruteLoss(damage)
updatehealth()
else
diff --git a/code/modules/mob/living/silicon/ai/death.dm b/code/modules/mob/living/silicon/ai/death.dm
index 44119424aa0..b0b0f44d0e6 100644
--- a/code/modules/mob/living/silicon/ai/death.dm
+++ b/code/modules/mob/living/silicon/ai/death.dm
@@ -5,9 +5,8 @@
icon_state = "[ckey]-ai-crash"
else icon_state = "ai-crash"
update_canmove()
- if(src.eyeobj)
- src.eyeobj.setLoc(get_turf(src))
- if(blind) blind.layer = 0
+ if(eyeobj)
+ eyeobj.setLoc(get_turf(src))
sight |= SEE_TURFS|SEE_MOBS|SEE_OBJS
see_in_dark = 8
see_invisible = SEE_INVISIBLE_LEVEL_TWO
diff --git a/code/modules/mob/living/silicon/ai/life.dm b/code/modules/mob/living/silicon/ai/life.dm
index 93ee8a54a2b..727d03b5696 100644
--- a/code/modules/mob/living/silicon/ai/life.dm
+++ b/code/modules/mob/living/silicon/ai/life.dm
@@ -49,22 +49,20 @@
if(aiRestorePowerRoutine == 2)
src << "Alert cancelled. Power has been restored without our assistance."
aiRestorePowerRoutine = 0
- blind.layer = 0
+ clear_fullscreen("blind")
else if(aiRestorePowerRoutine == 3)
src << "Alert cancelled. Power has been restored."
aiRestorePowerRoutine = 0
- blind.layer = 0
+ clear_fullscreen("blind")
else
-
- blind.screen_loc = "1,1 to 15,15"
- if(blind.layer != 18)
- blind.layer = 18
sight &= ~SEE_TURFS
sight &= ~SEE_MOBS
sight &= ~SEE_OBJS
+ overlay_fullscreen("blind", /obj/screen/fullscreen/blind)
+
see_in_dark = 0
see_invisible = SEE_INVISIBLE_LIVING
@@ -85,7 +83,6 @@
if(my_area && my_area.power_equip && !istype(T, /turf/space))
src << "Alert cancelled. Power has been restored without our assistance."
aiRestorePowerRoutine = 0
- blind.layer = 0
return
src << "Fault confirmed: missing external power. Shutting down main control system to save power."
sleep(20)
@@ -122,7 +119,7 @@
if (!istype(T, /turf/space))
src << "Alert cancelled. Power has been restored without our assistance."
aiRestorePowerRoutine = 0
- blind.layer = 0
+ clear_fullscreen("blind")
return
switch(PRP)
diff --git a/code/modules/mob/living/silicon/ai/login.dm b/code/modules/mob/living/silicon/ai/login.dm
index 95c6e52b13f..7d3a65445ff 100644
--- a/code/modules/mob/living/silicon/ai/login.dm
+++ b/code/modules/mob/living/silicon/ai/login.dm
@@ -5,21 +5,9 @@
blood.override = 1
client.images += blood
regenerate_icons()
- flash = new /obj/screen()
- flash.icon_state = "blank"
- flash.name = "flash"
- flash.screen_loc = "WEST,SOUTH to EAST,NORTH"
- flash.layer = 17
- blind = new /obj/screen()
- blind.icon_state = "black"
- blind.name = " "
- blind.screen_loc = "1,1 to 15,15"
- blind.layer = 0
- client.screen.Add( blind, flash )
if(stat != DEAD)
for(var/obj/machinery/ai_status_display/O in machines) //change status
O.mode = 1
O.emotion = "Neutral"
- src.view_core()
- return
\ No newline at end of file
+ view_core()
\ No newline at end of file
diff --git a/code/modules/mob/living/silicon/ai/say.dm b/code/modules/mob/living/silicon/ai/say.dm
index 5e47030f373..2c9d396448e 100644
--- a/code/modules/mob/living/silicon/ai/say.dm
+++ b/code/modules/mob/living/silicon/ai/say.dm
@@ -43,7 +43,7 @@ var/const/VOX_PATH = "sound/vox_fem/"
if(!message || announcing_vox > world.time)
return
- var/list/words = text2list(trim(message), " ")
+ var/list/words = splittext(trim(message), " ")
var/list/incorrect_words = list()
if(words.len > 30)
diff --git a/code/modules/mob/living/silicon/pai/death.dm b/code/modules/mob/living/silicon/pai/death.dm
index 08ec0e706d3..f9d75773ff9 100644
--- a/code/modules/mob/living/silicon/pai/death.dm
+++ b/code/modules/mob/living/silicon/pai/death.dm
@@ -12,7 +12,6 @@
card.overlays += "pai-off"
stat = DEAD
canmove = 0
- if(blind) blind.layer = 0
sight |= SEE_TURFS|SEE_MOBS|SEE_OBJS
see_in_dark = 8
see_invisible = SEE_INVISIBLE_LEVEL_TWO
diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm
index e6f29376a3e..0d9d81d3bf5 100644
--- a/code/modules/mob/living/silicon/pai/pai.dm
+++ b/code/modules/mob/living/silicon/pai/pai.dm
@@ -247,7 +247,7 @@
if ((O.client && !( O.blinded )))
O.show_message(text("\red [] has slashed at []!", M, src), 1)
if(prob(8))
- flick("noise", src.flash)
+ flash_eyes(affect_silicon = 1)
src.adjustBruteLoss(damage)
src.updatehealth()
else
diff --git a/code/modules/mob/living/silicon/robot/death.dm b/code/modules/mob/living/silicon/robot/death.dm
index 6bff1a8260f..b0dc5062a95 100644
--- a/code/modules/mob/living/silicon/robot/death.dm
+++ b/code/modules/mob/living/silicon/robot/death.dm
@@ -59,7 +59,6 @@
var/obj/machinery/recharge_station/RC = loc
RC.go_out()
- if(blind) blind.layer = 0
sight |= SEE_TURFS|SEE_MOBS|SEE_OBJS
see_in_dark = 8
see_invisible = SEE_INVISIBLE_LEVEL_TWO
diff --git a/code/modules/mob/living/silicon/robot/drone/drone.dm b/code/modules/mob/living/silicon/robot/drone/drone.dm
index 6868765250b..ab82709dc35 100644
--- a/code/modules/mob/living/silicon/robot/drone/drone.dm
+++ b/code/modules/mob/living/silicon/robot/drone/drone.dm
@@ -20,7 +20,7 @@
// We need to keep track of a few module items so we don't need to do list operations
// every time we need them. These get set in New() after the module is chosen.
var/obj/item/stack/sheet/metal/cyborg/stack_metal = null
- var/obj/item/stack/sheet/wood/cyborg/stack_wood = null
+ var/obj/item/stack/sheet/wood/stack_wood = null
var/obj/item/stack/sheet/glass/cyborg/stack_glass = null
var/obj/item/stack/sheet/mineral/plastic/cyborg/stack_plastic = null
var/obj/item/weapon/matter_decompiler/decompiler = null
@@ -61,7 +61,7 @@
//Grab stacks.
stack_metal = locate(/obj/item/stack/sheet/metal/cyborg) in src.module
- stack_wood = locate(/obj/item/stack/sheet/wood/cyborg) in src.module
+ stack_wood = locate(/obj/item/stack/sheet/wood) in src.module
stack_glass = locate(/obj/item/stack/sheet/glass/cyborg) in src.module
stack_plastic = locate(/obj/item/stack/sheet/mineral/plastic/cyborg) in src.module
@@ -338,3 +338,7 @@
/mob/living/silicon/robot/drone/update_canmove()
. = ..()
density = 0 //this is reset every canmove update otherwise
+
+/mob/living/simple_animal/drone/flash_eyes(intensity = 1, override_blindness_check = 0, affect_silicon = 0)
+ if(affect_silicon)
+ return ..()
diff --git a/code/modules/mob/living/silicon/robot/drone/drone_items.dm b/code/modules/mob/living/silicon/robot/drone/drone_items.dm
index 9eaf627858b..2bd7a29f815 100644
--- a/code/modules/mob/living/silicon/robot/drone/drone_items.dm
+++ b/code/modules/mob/living/silicon/robot/drone/drone_items.dm
@@ -364,7 +364,7 @@
stack = stack_glass
if("wood")
if(!stack_wood)
- stack_wood = new /obj/item/stack/sheet/wood/cyborg(src.module)
+ stack_wood = new /obj/item/stack/sheet/wood(src.module)
stack_wood.amount = 1
stack = stack_wood
if("plastic")
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index 904bdc0e687..b887de3857e 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -175,11 +175,11 @@ var/list/robot_verbs_default = list(
//Check for custom sprite
if(!custom_sprite)
var/file = file2text("config/custom_sprites.txt")
- var/lines = text2list(file, "\n")
+ var/lines = splittext(file, "\n")
for(var/line in lines)
// split & clean up
- var/list/Entry = text2list(line, ";")
+ var/list/Entry = splittext(line, ";")
for(var/i = 1 to Entry.len)
Entry[i] = trim(Entry[i])
@@ -866,7 +866,7 @@ var/list/robot_verbs_default = list(
visible_message("[M] has slashed at [src]!",\
"[M] has slashed at [src]!")
if(prob(8))
- flick("noise", flash)
+ flash_eyes(affect_silicon = 1)
adjustBruteLoss(damage)
updatehealth()
else
@@ -895,7 +895,7 @@ var/list/robot_verbs_default = list(
/mob/living/silicon/robot/attack_slime(mob/living/carbon/slime/M as mob)
if(..()) //successful slime shock
- flick("noise", flash)
+ flash_eyes(affect_silicon = 1)
var/stunprob = M.powerlevel * 7 + 10
if(prob(stunprob) && M.powerlevel >= 8)
adjustBruteLoss(M.powerlevel * rand(6,10))
diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm
index 104ef75a0dc..3a9a3fcc2c4 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules.dm
@@ -175,7 +175,7 @@
/obj/item/stack/sheet/glass/cyborg = 50,
/obj/item/stack/sheet/rglass/cyborg = 50,
/obj/item/stack/cable_coil/cyborg = 50,
- /obj/item/stack/rods = 30,
+ /obj/item/stack/rods/cyborg = 60,
/obj/item/stack/tile/plasteel = 20
)
@@ -460,10 +460,10 @@
name = "drone module"
module_type = "Engineer"
stacktypes = list(
- /obj/item/stack/sheet/wood/cyborg = 10,
+ /obj/item/stack/sheet/wood = 10,
/obj/item/stack/sheet/rglass/cyborg = 50,
/obj/item/stack/tile/wood = 20,
- /obj/item/stack/rods = 30,
+ /obj/item/stack/rods/cyborg = 60,
/obj/item/stack/tile/plasteel = 20,
/obj/item/stack/sheet/metal/cyborg = 50,
/obj/item/stack/sheet/glass/cyborg = 50,
diff --git a/code/modules/mob/living/silicon/say.dm b/code/modules/mob/living/silicon/say.dm
index bcbcb1632f4..6bb8531ea18 100644
--- a/code/modules/mob/living/silicon/say.dm
+++ b/code/modules/mob/living/silicon/say.dm
@@ -56,6 +56,8 @@
return 1
if (istype(other, /mob/living/silicon))
return 1
+ if (istype(other, /mob/living/simple_animal/bot))
+ return 1
if (istype(other, /mob/living/carbon/brain))
return 1
return ..()
diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm
index 8577410a9b9..c76b159e452 100644
--- a/code/modules/mob/living/silicon/silicon.dm
+++ b/code/modules/mob/living/silicon/silicon.dm
@@ -73,7 +73,7 @@
if(2)
src.take_organ_damage(10)
Stun(3)
- flick("noise", src:flash)
+ flash_eyes(affect_silicon = 1)
src << "\red *BZZZT*"
src << "\red Warning: Electromagnetic pulse detected."
..()
@@ -351,3 +351,7 @@
/mob/living/silicon/get_access()
return IGNORE_ACCESS //silicons always have access
+
+/mob/living/silicon/flash_eyes(intensity = 1, override_blindness_check = 0, affect_silicon = 0, visual = 0, type = /obj/screen/fullscreen/flash/noise)
+ if(affect_silicon)
+ return ..()
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/bees.dm b/code/modules/mob/living/simple_animal/bees.dm
index c5fcf9fc938..687041617be 100644
--- a/code/modules/mob/living/simple_animal/bees.dm
+++ b/code/modules/mob/living/simple_animal/bees.dm
@@ -49,7 +49,6 @@
//if we're chasing someone, get a little bit angry
if(target_mob && prob(10))
feral++
- M.flash_pain()
//calm down a little bit
if(feral > 0)
diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm
index b535d1d3870..3f1bf7c17b7 100644
--- a/code/modules/mob/living/simple_animal/bot/bot.dm
+++ b/code/modules/mob/living/simple_animal/bot/bot.dm
@@ -3,7 +3,7 @@
// AI (i.e. game AI, not the AI player) controlled bots
/mob/living/simple_animal/bot
icon = 'icons/obj/aibots.dmi'
- layer = MOB_LAYER
+ layer = MOB_LAYER - 0.1
light_range = 3
stop_automated_movement = 1
wander = 0
@@ -132,6 +132,13 @@
radio_config["[radio_channel]"] = 1
Radio.config(radio_config)
+ add_language("Galactic Common", 1)
+ add_language("Sol Common", 1)
+ add_language("Tradeband", 1)
+ add_language("Gutter", 1)
+ add_language("Trinary", 1)
+ default_language = all_languages["Galactic Common"]
+
bot_core = new bot_core_type(src)
spawn(30)
if(radio_controller && bot_filter)
@@ -389,8 +396,8 @@
/mob/living/simple_animal/bot/proc/speak(message, channel) //Pass a message to have the bot say() it. Pass a frequency to say it on the radio.
if((!on) || (!message))
return
- if(channel && Radio.channels[channel])// Use radio if we have channel key
- Radio.autosay(message, name, channel)
+ if(channel)
+ Radio.autosay(message, name, channel == "headset" ? null : channel)
else
say(message)
return
diff --git a/code/modules/mob/living/simple_animal/bot/mulebot.dm b/code/modules/mob/living/simple_animal/bot/mulebot.dm
index 720eab73d5b..de778a5aeb3 100644
--- a/code/modules/mob/living/simple_animal/bot/mulebot.dm
+++ b/code/modules/mob/living/simple_animal/bot/mulebot.dm
@@ -591,7 +591,8 @@
bloodiness--
for(var/mob/living/carbon/human/H in next)
- RunOver(H)
+ if(H != load)
+ RunOver(H)
// calculates a path to the current destination
// given an optional turf to avoid
diff --git a/code/modules/mob/living/simple_animal/friendly/butterfly.dm b/code/modules/mob/living/simple_animal/friendly/butterfly.dm
index 27df35c5bf9..60aad72ab36 100644
--- a/code/modules/mob/living/simple_animal/friendly/butterfly.dm
+++ b/code/modules/mob/living/simple_animal/friendly/butterfly.dm
@@ -18,6 +18,7 @@
pass_flags = PASSTABLE | PASSGRILLE | PASSMOB
ventcrawler = 2
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat = 0)
+ gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
/mob/living/simple_animal/butterfly/New()
..()
diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm
index b2a0c129b29..c77d117bad4 100644
--- a/code/modules/mob/living/simple_animal/friendly/cat.dm
+++ b/code/modules/mob/living/simple_animal/friendly/cat.dm
@@ -20,6 +20,7 @@
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "kicks"
+ gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
//RUNTIME IS ALIVE! SQUEEEEEEEE~
/mob/living/simple_animal/pet/cat/Runtime
@@ -32,6 +33,7 @@
gender = FEMALE
var/turns_since_scan = 0
var/mob/living/simple_animal/mouse/movement_target
+ gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
/mob/living/simple_animal/pet/cat/Runtime/handle_automated_action()
..()
@@ -96,4 +98,5 @@
flags = NO_BREATHE
faction = list("syndicate")
var/turns_since_scan = 0
- var/mob/living/simple_animal/mouse/movement_target
\ No newline at end of file
+ var/mob/living/simple_animal/mouse/movement_target
+ gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/friendly/corgi.dm b/code/modules/mob/living/simple_animal/friendly/corgi.dm
index f51e3e81f65..7be60d7d5d6 100644
--- a/code/modules/mob/living/simple_animal/friendly/corgi.dm
+++ b/code/modules/mob/living/simple_animal/friendly/corgi.dm
@@ -26,6 +26,7 @@
var/obj/item/inventory_head
var/obj/item/inventory_back
var/facehugger
+ gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
/mob/living/simple_animal/pet/corgi/New()
..()
@@ -397,6 +398,7 @@
response_help = "pets"
response_disarm = "bops"
response_harm = "kicks"
+ gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
/mob/living/simple_animal/pet/corgi/Ian/process_ai()
..()
@@ -553,6 +555,7 @@
response_harm = "kicks"
var/turns_since_scan = 0
var/puppies = 0
+ gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
//Lisa already has a cute bow!
/mob/living/simple_animal/pet/corgi/Lisa/Topic(href, href_list)
diff --git a/code/modules/mob/living/simple_animal/friendly/crab.dm b/code/modules/mob/living/simple_animal/friendly/crab.dm
index 524cffc9979..70639291ab9 100644
--- a/code/modules/mob/living/simple_animal/friendly/crab.dm
+++ b/code/modules/mob/living/simple_animal/friendly/crab.dm
@@ -22,6 +22,7 @@
var/obj/item/inventory_mask
can_hide = 1
can_collar = 1
+ gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
/mob/living/simple_animal/crab/handle_automated_movement()
//CRAB movement
@@ -46,6 +47,7 @@
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "stomps"
+ gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
//LOOK AT THIS - ..()??
/*/mob/living/simple_animal/crab/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
diff --git a/code/modules/mob/living/simple_animal/friendly/deer.dm b/code/modules/mob/living/simple_animal/friendly/deer.dm
index 0cc59c07f94..034fa07b6fb 100644
--- a/code/modules/mob/living/simple_animal/friendly/deer.dm
+++ b/code/modules/mob/living/simple_animal/friendly/deer.dm
@@ -14,4 +14,5 @@
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "kicks"
- can_collar = 1
\ No newline at end of file
+ can_collar = 1
+ gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
index f3e77854882..863141e5e83 100644
--- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
+++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
@@ -111,6 +111,7 @@
health = 50
var/milk_content = 0
can_collar = 1
+ gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
/mob/living/simple_animal/cow/New()
..()
@@ -178,6 +179,7 @@
small = 1
can_hide = 1
can_collar = 1
+ gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
/mob/living/simple_animal/chick/New()
..()
@@ -220,6 +222,7 @@ var/global/chicken_count = 0
small = 1
can_hide = 1
can_collar = 1
+ gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
/mob/living/simple_animal/chicken/New()
..()
@@ -297,6 +300,7 @@ var/global/chicken_count = 0
attacktext = "kicks"
health = 50
can_collar = 1
+ gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
/mob/living/simple_animal/turkey
name = "turkey"
@@ -318,6 +322,7 @@ var/global/chicken_count = 0
attacktext = "pecks"
health = 50
can_collar = 1
+ gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
/mob/living/simple_animal/goose
name = "goose"
@@ -339,6 +344,7 @@ var/global/chicken_count = 0
attacktext = "kicks"
health = 50
can_collar = 1
+ gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
/mob/living/simple_animal/seal
name = "seal"
@@ -360,6 +366,7 @@ var/global/chicken_count = 0
attacktext = "kicks"
health = 50
can_collar = 1
+ gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
/mob/living/simple_animal/walrus
name = "walrus"
@@ -381,3 +388,4 @@ var/global/chicken_count = 0
attacktext = "kicks"
health = 50
can_collar = 1
+ gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
diff --git a/code/modules/mob/living/simple_animal/friendly/fox.dm b/code/modules/mob/living/simple_animal/friendly/fox.dm
index cd62ababfe7..5bf03f083a2 100644
--- a/code/modules/mob/living/simple_animal/friendly/fox.dm
+++ b/code/modules/mob/living/simple_animal/friendly/fox.dm
@@ -17,11 +17,13 @@
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "kicks"
+ gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
//Captain fox
/mob/living/simple_animal/pet/fox/Renault
name = "Renault"
desc = "Renault, the Captain's trustworthy fox. I wonder what it says?"
+ gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
//Syndi fox
/mob/living/simple_animal/pet/fox/Syndifox
@@ -33,3 +35,4 @@
icon_resting = "Syndifox_rest"
flags = NO_BREATHE
faction = list("syndicate")
+ gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
diff --git a/code/modules/mob/living/simple_animal/friendly/lizard.dm b/code/modules/mob/living/simple_animal/friendly/lizard.dm
index 27cb2eb17cf..b5c0ccedeae 100644
--- a/code/modules/mob/living/simple_animal/friendly/lizard.dm
+++ b/code/modules/mob/living/simple_animal/friendly/lizard.dm
@@ -22,3 +22,4 @@
can_hide = 1
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat = 1)
can_collar = 1
+ gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm
index c24da570653..90c4c0f06ec 100644
--- a/code/modules/mob/living/simple_animal/friendly/mouse.dm
+++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm
@@ -31,6 +31,7 @@
can_hide = 1
holder_type = /obj/item/weapon/holder/mouse
can_collar = 1
+ gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
/mob/living/simple_animal/mouse/handle_automated_speech()
..()
@@ -144,3 +145,4 @@
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "splats"
+ gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
diff --git a/code/modules/mob/living/simple_animal/friendly/pug.dm b/code/modules/mob/living/simple_animal/friendly/pug.dm
index b4b6486b859..ec8a38509f1 100644
--- a/code/modules/mob/living/simple_animal/friendly/pug.dm
+++ b/code/modules/mob/living/simple_animal/friendly/pug.dm
@@ -17,6 +17,7 @@
response_disarm = "bops"
response_harm = "kicks"
see_in_dark = 5
+ gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
/mob/living/simple_animal/pet/pug/process_ai()
..()
diff --git a/code/modules/mob/living/simple_animal/friendly/tomato.dm b/code/modules/mob/living/simple_animal/friendly/tomato.dm
index f6d0bf9752e..ca135fe87be 100644
--- a/code/modules/mob/living/simple_animal/friendly/tomato.dm
+++ b/code/modules/mob/living/simple_animal/friendly/tomato.dm
@@ -14,4 +14,5 @@
response_harm = "smacks the"
harm_intent_damage = 5
pass_flags = PASSTABLE
- can_hide = 1
\ No newline at end of file
+ can_hide = 1
+ gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/hostile/alien.dm b/code/modules/mob/living/simple_animal/hostile/alien.dm
index 47cfdd23984..80571d2eef8 100644
--- a/code/modules/mob/living/simple_animal/hostile/alien.dm
+++ b/code/modules/mob/living/simple_animal/hostile/alien.dm
@@ -29,6 +29,7 @@
see_in_dark = 8
see_invisible = SEE_INVISIBLE_MINIMUM
heat_damage_per_tick = 20
+ gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
/mob/living/simple_animal/hostile/alien/drone
@@ -127,6 +128,7 @@
move_to_delay = 4
maxHealth = 400
health = 400
+ gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
/obj/item/projectile/neurotox
name = "neurotoxin"
@@ -151,6 +153,7 @@
icon_state = "maid"
icon_living = "maid"
icon_dead = "maid_dead"
+ gold_core_spawnable = CHEM_MOB_SPAWN_INVALID //no fun allowed
/mob/living/simple_animal/hostile/alien/maid/AttackingTarget()
if(istype(target, /atom/movable))
diff --git a/code/modules/mob/living/simple_animal/hostile/bat.dm b/code/modules/mob/living/simple_animal/hostile/bat.dm
index 70c117860af..bbdf639c0f4 100644
--- a/code/modules/mob/living/simple_animal/hostile/bat.dm
+++ b/code/modules/mob/living/simple_animal/hostile/bat.dm
@@ -29,6 +29,7 @@
faction = list("scarybat")
var/mob/living/owner
+ gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
/mob/living/simple_animal/hostile/scarybat/New(loc, mob/living/L as mob)
..()
diff --git a/code/modules/mob/living/simple_animal/hostile/bear.dm b/code/modules/mob/living/simple_animal/hostile/bear.dm
index 0171e960ed0..f55c4ce98d6 100644
--- a/code/modules/mob/living/simple_animal/hostile/bear.dm
+++ b/code/modules/mob/living/simple_animal/hostile/bear.dm
@@ -31,6 +31,7 @@
var/stance_step = 0
faction = list("russian")
+ gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
//SPACE BEARS! SQUEEEEEEEE~ OW! FUCK! IT BIT MY HAND OFF!!
/mob/living/simple_animal/hostile/bear/Hudson
diff --git a/code/modules/mob/living/simple_animal/hostile/carp.dm b/code/modules/mob/living/simple_animal/hostile/carp.dm
index 2b13fadec8d..ddd302c3e8c 100644
--- a/code/modules/mob/living/simple_animal/hostile/carp.dm
+++ b/code/modules/mob/living/simple_animal/hostile/carp.dm
@@ -33,6 +33,7 @@
faction = list("carp")
flying = 1
+ gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
/mob/living/simple_animal/hostile/carp/Process_Spacemove(var/movement_dir = 0)
return 1 //No drifting in space for space carp! //original comments do not steal
@@ -53,6 +54,7 @@
icon_state = "holocarp"
icon_living = "holocarp"
maxbodytemp = INFINITY
+ gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
/mob/living/simple_animal/hostile/carp/holocarp/death()
..()
diff --git a/code/modules/mob/living/simple_animal/hostile/creature.dm b/code/modules/mob/living/simple_animal/hostile/creature.dm
index 9a3357e058a..50aa20b60d0 100644
--- a/code/modules/mob/living/simple_animal/hostile/creature.dm
+++ b/code/modules/mob/living/simple_animal/hostile/creature.dm
@@ -13,4 +13,5 @@
attacktext = "chomps"
attack_sound = 'sound/weapons/bite.ogg'
faction = list("creature")
+ gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
diff --git a/code/modules/mob/living/simple_animal/hostile/faithless.dm b/code/modules/mob/living/simple_animal/hostile/faithless.dm
index 380b332a7e4..a14efc6d279 100644
--- a/code/modules/mob/living/simple_animal/hostile/faithless.dm
+++ b/code/modules/mob/living/simple_animal/hostile/faithless.dm
@@ -25,6 +25,7 @@
speed = 4
faction = list("faithless")
+ gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
/mob/living/simple_animal/hostile/faithless/Process_Spacemove(var/movement_dir = 0)
return 1
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 9de16829259..bb381f24be1 100644
--- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
+++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
@@ -49,6 +49,7 @@
move_to_delay = 6
attacktext = "bites"
attack_sound = 'sound/weapons/bite.ogg'
+ gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
//nursemaids - these create webs and eggs
/mob/living/simple_animal/hostile/poison/giant_spider/nurse
diff --git a/code/modules/mob/living/simple_animal/hostile/headcrab.dm b/code/modules/mob/living/simple_animal/hostile/headcrab.dm
index 4dd8862b4a9..b2b6d9ff716 100644
--- a/code/modules/mob/living/simple_animal/hostile/headcrab.dm
+++ b/code/modules/mob/living/simple_animal/hostile/headcrab.dm
@@ -21,6 +21,7 @@
ventcrawler = 2
var/datum/mind/origin
var/egg_lain = 0
+ gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
/mob/living/simple_animal/hostile/headcrab/proc/Infect(mob/living/carbon/victim)
var/obj/item/organ/internal/body_egg/changeling_egg/egg = new(victim)
@@ -80,8 +81,12 @@
if(origin && origin.current && (origin.current.stat == DEAD))
origin.transfer_to(M)
- if(origin.changeling)
- origin.changeling.purchasedpowers += new /obj/effect/proc_holder/changeling/humanform(null)
+ if(!origin.changeling)
+ M.make_changeling()
+ if(origin.changeling.can_absorb_dna(M, owner))
+ origin.changeling.absorb_dna(owner, M)
+
+ origin.changeling.purchasedpowers += new /obj/effect/proc_holder/changeling/humanform(null)
M.key = origin.key
owner.gib()
diff --git a/code/modules/mob/living/simple_animal/hostile/hivebot.dm b/code/modules/mob/living/simple_animal/hostile/hivebot.dm
index 44f5caa1609..3ccbb9abec2 100644
--- a/code/modules/mob/living/simple_animal/hostile/hivebot.dm
+++ b/code/modules/mob/living/simple_animal/hostile/hivebot.dm
@@ -21,6 +21,7 @@
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0
speak_emote = list("states")
+ gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
/mob/living/simple_animal/hostile/hivebot/range
name = "Hivebot"
diff --git a/code/modules/mob/living/simple_animal/hostile/jungle_animals.dm b/code/modules/mob/living/simple_animal/hostile/jungle_animals.dm
index 6404ab29f21..85268dee619 100644
--- a/code/modules/mob/living/simple_animal/hostile/jungle_animals.dm
+++ b/code/modules/mob/living/simple_animal/hostile/jungle_animals.dm
@@ -30,6 +30,7 @@
layer = 3.1 //so they can stay hidde under the /obj/structure/bush
var/stalk_tick_delay = 3
+ gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
/mob/living/simple_animal/hostile/panther/ListTargets()
var/list/targets = list()
@@ -87,6 +88,7 @@
layer = 3.1 //so they can stay hidde under the /obj/structure/bush
var/stalk_tick_delay = 3
+ gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
/mob/living/simple_animal/hostile/snake/ListTargets()
var/list/targets = list()
diff --git a/code/modules/mob/living/simple_animal/hostile/mimic.dm b/code/modules/mob/living/simple_animal/hostile/mimic.dm
index 2f077249527..7cff96385e1 100644
--- a/code/modules/mob/living/simple_animal/hostile/mimic.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mimic.dm
@@ -30,6 +30,7 @@
move_to_delay = 9
var/is_electronic = 0
+ gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
/mob/living/simple_animal/hostile/mimic/FindTarget()
. = ..()
@@ -139,6 +140,7 @@ var/global/list/protected_objects = list(/obj/structure/table, /obj/structure/ca
var/mob/living/creator = null // the creator
var/destroy_objects = 0
var/knockdown_people = 0
+ gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
/mob/living/simple_animal/hostile/mimic/copy/New(loc, var/obj/copy, var/mob/living/creator, var/destroy_original = 0)
..(loc)
diff --git a/code/modules/mob/living/simple_animal/hostile/poison_bees.dm b/code/modules/mob/living/simple_animal/hostile/poison_bees.dm
index b05ba13ccab..c8a6a79fb04 100644
--- a/code/modules/mob/living/simple_animal/hostile/poison_bees.dm
+++ b/code/modules/mob/living/simple_animal/hostile/poison_bees.dm
@@ -24,6 +24,7 @@
//Spaceborn beings don't get hurt by space
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0
+ gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
/mob/living/simple_animal/hostile/poison/bees/Process_Spacemove(var/check_drift = 0)
return 1
diff --git a/code/modules/mob/living/simple_animal/hostile/syndicate.dm b/code/modules/mob/living/simple_animal/hostile/syndicate.dm
index 434d1739b9e..3a9d9e46aa6 100644
--- a/code/modules/mob/living/simple_animal/hostile/syndicate.dm
+++ b/code/modules/mob/living/simple_animal/hostile/syndicate.dm
@@ -132,6 +132,7 @@
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0
flying = 1
+ gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
/mob/living/simple_animal/hostile/viscerator/death()
..()
diff --git a/code/modules/mob/living/simple_animal/hostile/tree.dm b/code/modules/mob/living/simple_animal/hostile/tree.dm
index 555386debcb..bd39b681978 100644
--- a/code/modules/mob/living/simple_animal/hostile/tree.dm
+++ b/code/modules/mob/living/simple_animal/hostile/tree.dm
@@ -28,6 +28,7 @@
minbodytemp = 0
faction = list("hostile", "winter")
+ gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
/mob/living/simple_animal/hostile/tree/FindTarget()
. = ..()
diff --git a/code/modules/mob/living/simple_animal/hostile/winter_mobs.dm b/code/modules/mob/living/simple_animal/hostile/winter_mobs.dm
index 930eb144af8..274ba14f156 100644
--- a/code/modules/mob/living/simple_animal/hostile/winter_mobs.dm
+++ b/code/modules/mob/living/simple_animal/hostile/winter_mobs.dm
@@ -33,6 +33,7 @@
bodytemperature = 73.0 //it's made of snow and hatred, so it's pretty cold.
maxbodytemp = 280.15 //at roughly 7 C, these will start melting (dying) from the warmth. Mind over matter or something.
heat_damage_per_tick = 10 //Now With Rapid Thawing Action!
+ gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
/mob/living/simple_animal/hostile/winter/snowman/death()
@@ -63,6 +64,7 @@
melee_damage_lower = 5
melee_damage_upper = 10
+ gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
/mob/living/simple_animal/hostile/winter/santa
maxHealth = 150 //if this seems low for a "boss", it's because you have to fight him multiple times, with him fully healing between stages
diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm
index 9a53f6bfa35..3096a85e39b 100644
--- a/code/modules/mob/living/simple_animal/parrot.dm
+++ b/code/modules/mob/living/simple_animal/parrot.dm
@@ -82,6 +82,7 @@
//Parrots are kleptomaniacs. This variable ... stores the item a parrot is holding.
var/obj/item/held_item = null
+ gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
/mob/living/simple_animal/parrot/New()
@@ -272,13 +273,13 @@
//Sprite and AI update for when a parrot gets pulled
if(pulledby && stat == CONSCIOUS)
- icon_state = "parrot_fly"
+ icon_state = "parrot_fly"
/mob/living/simple_animal/parrot/process_ai()
if(pulledby)
parrot_state = PARROT_WANDER
return
-
+
if(!isturf(src.loc) || !canmove || buckled)
return //If it can't move, dont let it move. (The buckled check probably isn't necessary thanks to canmove)
@@ -682,6 +683,7 @@
name = "Poly"
desc = "Poly the Parrot. An expert on quantum cracker theory."
speak = list("Poly wanna cracker!", ":eCheck the singlo, you chucklefucks!",":eCheck the tesla, you shits!",":eSTOP HOT-WIRING THE ENGINE, FUCKING CHRIST!",":eWire the solars, you lazy bums!",":eWHO TOOK THE DAMN HARDSUITS?",":eOH GOD ITS FREE CALL THE SHUTTLE")
+ gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
/mob/living/simple_animal/parrot/Poly/New()
ears = new /obj/item/device/radio/headset/headset_eng(src)
diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm
index 362ec626f2b..f862b889710 100644
--- a/code/modules/mob/living/simple_animal/simple_animal.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal.dm
@@ -67,6 +67,8 @@
var/scan_ready = 1
var/simplespecies //Sorry, no spider+corgi buttbabies.
+ var/gold_core_spawnable = CHEM_MOB_SPAWN_INVALID //if CHEM_MOB_SPAWN_HOSTILE can be spawned by plasma with gold core, CHEM_MOB_SPAWN_FRIENDLY are 'friendlies' spawned with blood
+
var/master_commander = null //holding var for determining who own/controls a sentient simple animal (for sentience potions).
var/sentience_type = SENTIENCE_ORGANIC // Sentience type, for slime potions
@@ -695,4 +697,4 @@
. |= collar.GetAccess()
/mob/living/simple_animal/proc/sentience_act() //Called when a simple animal gains sentience via gold slime potion
- return
+ return
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index 2fcd5406946..370e029200b 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -993,30 +993,9 @@ var/list/slot_equipment_priority = list( \
// this function displays the shuttles ETA in the status panel if the shuttle has been called
/mob/proc/show_stat_emergency_shuttle_eta()
- var/obj/docking_port/mobile/emergency/E = shuttle_master.emergency
-
- if(E.mode >= SHUTTLE_RECALL)
- var/message = ""
-
- var/timeleft = E.timeLeft()
- message = "[add_zero(num2text((timeleft / 60) % 60),2)]:[add_zero(num2text(timeleft % 60), 2)]"
-
- switch(E.mode)
- if(SHUTTLE_RECALL, SHUTTLE_ESCAPE)
- message = "ETR-[message]"
- if(SHUTTLE_CALL)
- message = "ETA-[message]"
- if(SHUTTLE_DOCKED)
- if(timeleft < 5)
- message = "Departing..."
- else
- message = "ETD-[message]"
- if(SHUTTLE_STRANDED)
- message = "ETA-ERR"
- if(SHUTTLE_ENDGAME)
- return
-
- stat(null, message)
+ var/ETA = shuttle_master.emergency.getModeStr()
+ if(ETA)
+ stat(null, "[ETA] [shuttle_master.emergency.getTimerStr()]")
/mob/proc/add_stings_to_statpanel(var/list/stings)
for(var/obj/effect/proc_holder/changeling/S in stings)
@@ -1188,9 +1167,6 @@ var/list/slot_equipment_priority = list( \
/mob/proc/get_species()
return ""
-/mob/proc/flash_weak_pain()
- flick("weak_pain",pain)
-
/mob/proc/get_visible_implants(var/class = 0)
var/list/visible_implants = list()
for(var/obj/item/O in embedded)
diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm
index e23a621d038..810e764ab62 100644
--- a/code/modules/mob/mob_defines.dm
+++ b/code/modules/mob/mob_defines.dm
@@ -11,8 +11,6 @@
//Not in use yet
var/obj/effect/organstructure/organStructure = null
- var/obj/screen/flash = null
- var/obj/screen/blind = null
var/obj/screen/hands = null
var/obj/screen/pullin = null
var/obj/screen/internals = null
@@ -26,8 +24,6 @@
var/obj/screen/throw_icon = null
var/obj/screen/nutrition_icon = null
var/obj/screen/pressure = null
- var/obj/screen/damageoverlay = null
- var/obj/screen/pain = null
var/obj/screen/gun/item/item_use_icon = null
var/obj/screen/gun/move/gun_move_icon = null
var/obj/screen/gun/run/gun_run_icon = null
@@ -205,7 +201,7 @@
var/area/lastarea = null
var/digitalcamo = 0 // Can they be tracked by the AI?
- var/weakeyes //Are they vulnerable to flashes?
+ var/weakeyes = 0 //Are they vulnerable to flashes?
var/list/radar_blips = list() // list of screen objects, radar blips
var/radar_open = 0 // nonzero is radar is open
diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm
index 79fc66d2408..f5a61359a01 100644
--- a/code/modules/mob/mob_grab.dm
+++ b/code/modules/mob/mob_grab.dm
@@ -6,7 +6,7 @@
#define EAT_TIME_FAT 100
//time it takes for a mob to be eaten (in deciseconds) (overrides mob eat time)
-#define EAT_TIME_MOUSE 30
+#define EAT_TIME_ANIMAL 30
/obj/item/weapon/grab
name = "grab"
@@ -413,10 +413,8 @@
if(isalien(attacker) && iscarbon(prey)) //Xenomorphs eating carbon mobs
return 1
- if(ishuman(attacker) && attacker.get_species() == "Kidan" && istype(prey,/mob/living/simple_animal/diona)) //Kidan eating nymphs
- return 1
-
- if(ishuman(attacker) && attacker.get_species() == "Tajaran" && istype(prey,/mob/living/simple_animal/mouse)) //Tajaran eating mice. Meow!
+ var/mob/living/carbon/human/H = attacker
+ if(ishuman(H) && is_type_in_list(prey, H.species.allowed_consumed_mobs)) //species eating of other mobs
return 1
return 0
@@ -425,8 +423,8 @@
if(isalien(attacker))
return EAT_TIME_XENO //xenos get a speed boost
- if(istype(prey,/mob/living/simple_animal/mouse)) //mice get eaten at xeno-eating-speed regardless
- return EAT_TIME_MOUSE
+ if(istype(prey,/mob/living/simple_animal)) //simple animals get eaten at xeno-eating-speed regardless
+ return EAT_TIME_ANIMAL
return EAT_TIME_FAT //if it doesn't fit into the above, it's probably a fat guy, take EAT_TIME_FAT to do it
@@ -447,4 +445,4 @@
#undef EAT_TIME_XENO
#undef EAT_TIME_FAT
-#undef EAT_TIME_MOUSE
+#undef EAT_TIME_ANIMAL
diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm
index e78ed83fa1f..f181fab77af 100644
--- a/code/modules/power/singularity/emitter.dm
+++ b/code/modules/power/singularity/emitter.dm
@@ -106,8 +106,8 @@
active=on
var/statestr=on?"on":"off"
// Spammy message_admins("Emitter turned [statestr] by radio signal ([signal.data["command"]] @ [frequency]) in [formatJumpTo(src)]",0,1)
- log_game("Emitter turned [statestr] by radio signal ([signal.data["command"]] @ [frequency]) in ([x], [y], [z]) AAC prints: [list2text(signal.data["hiddenprints"])]")
- investigate_log("turned [statestr] by radio signal ([signal.data["command"]] @ [frequency]) AAC prints: [list2text(signal.data["hiddenprints"])]","singulo")
+ log_game("Emitter turned [statestr] by radio signal ([signal.data["command"]] @ [frequency]) in ([x], [y], [z]) AAC prints: [jointext(signal.data["hiddenprints"], "")]")
+ investigate_log("turned [statestr] by radio signal ([signal.data["command"]] @ [frequency]) AAC prints: [jointext(signal.data["hiddenprints"], "")]","singulo")
update_icon()
/obj/machinery/power/emitter/Destroy()
diff --git a/code/modules/procedural_mapping/mapGenerator.dm b/code/modules/procedural_mapping/mapGenerator.dm
index c0b89549f3e..d0c5440dc95 100644
--- a/code/modules/procedural_mapping/mapGenerator.dm
+++ b/code/modules/procedural_mapping/mapGenerator.dm
@@ -156,8 +156,8 @@
src << "Missing Input"
return
- var/list/startCoords = text2list(startInput, ";")
- var/list/endCoords = text2list(endInput, ";")
+ var/list/startCoords = splittext(startInput, ";")
+ var/list/endCoords = splittext(endInput, ";")
if(!startCoords || !endCoords)
src << "Invalid Coords"
src << "Start Input: [startInput]"
@@ -178,7 +178,7 @@
var/moduleClusters = input("Cluster Flags (Cancel to leave unchanged from defaults)","Map Gen Settings") as null|anything in clusters
//null for default
-
+
var/theCluster = 0
if(moduleClusters != "None")
if(!clusters[moduleClusters])
@@ -187,7 +187,7 @@
theCluster = clusters[moduleClusters]
else
theCluster = CLUSTER_CHECK_NONE
-
+
if(theCluster)
for(var/datum/mapGeneratorModule/M in N.modules)
M.clusterCheckFlags = theCluster
diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm
index dcafea10a35..452a6dc026f 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -230,13 +230,13 @@
in_chamber.p_y = text2num(mouse_control["icon-y"])
if(mouse_control["screen-loc"])
//Split screen-loc up into X+Pixel_X and Y+Pixel_Y
- var/list/screen_loc_params = text2list(mouse_control["screen-loc"], ",")
+ var/list/screen_loc_params = splittext(mouse_control["screen-loc"], ",")
//Split X+Pixel_X up into list(X, Pixel_X)
- var/list/screen_loc_X = text2list(screen_loc_params[1],":")
+ var/list/screen_loc_X = splittext(screen_loc_params[1],":")
//Split Y+Pixel_Y up into list(Y, Pixel_Y)
- var/list/screen_loc_Y = text2list(screen_loc_params[2],":")
+ var/list/screen_loc_Y = splittext(screen_loc_params[2],":")
var/x = text2num(screen_loc_X[1]) * 32 + text2num(screen_loc_X[2]) - 32
var/y = text2num(screen_loc_Y[1]) * 32 + text2num(screen_loc_Y[2]) - 32
diff --git a/code/modules/reagents/newchem/disease.dm b/code/modules/reagents/newchem/disease.dm
index 7039e7cb6ef..132859d530a 100644
--- a/code/modules/reagents/newchem/disease.dm
+++ b/code/modules/reagents/newchem/disease.dm
@@ -13,6 +13,69 @@
..()
+/datum/reagent/nanomachines
+ name = "Nanomachines"
+ id = "nanomachines"
+ description = "Microscopic construction robots."
+ color = "#535E66" // rgb: 83, 94, 102
+
+/datum/reagent/nanomachines/on_mob_life(var/mob/living/carbon/M as mob)
+ if(!M) M = holder.my_atom
+ if(volume > 1.5)
+ M.ForceContractDisease(new /datum/disease/transformation/robot(0))
+ ..()
+
+
+/datum/reagent/xenomicrobes
+ name = "Xenomicrobes"
+ id = "xenomicrobes"
+ description = "Microbes with an entirely alien cellular structure."
+ color = "#535E66" // rgb: 83, 94, 102
+
+/datum/reagent/xenomicrobes/on_mob_life(var/mob/living/carbon/M as mob)
+ if(!M) M = holder.my_atom
+ if(volume > 1.5)
+ M.ContractDisease(new /datum/disease/transformation/xeno(0))
+ ..()
+
+/datum/reagent/fungalspores
+ name = "Tubercle bacillus Cosmosis microbes"
+ id = "fungalspores"
+ description = "Active fungal spores."
+ color = "#92D17D" // rgb: 146, 209, 125
+
+/datum/reagent/fungalspores/on_mob_life(var/mob/living/carbon/M as mob)
+ if(!M) M = holder.my_atom
+ if(volume > 2.5)
+ M.ForceContractDisease(new /datum/disease/tuberculosis(0))
+ ..()
+
+/datum/reagent/spore
+ name = "Blob Spores"
+ id = "spore"
+ description = "Spores of some blob creature thingy."
+ reagent_state = LIQUID
+ color = "#CE760A" // rgb: 206, 118, 10
+ var/client/blob_client = null
+ var/blob_point_rate = 3
+
+/datum/reagent/spore/on_mob_life(var/mob/living/M)
+ if(!M) M = holder.my_atom
+ if(holder.has_reagent("atrazine",45))
+ holder.del_reagent("spore") //apparently this never metabolizes and stays in forever unless you have 45 units of atrazine in you or some stupid thing like that.
+ if(prob(1))
+ M << "Your mouth tastes funny."
+ if(prob(1) && prob(25))
+ if(iscarbon(M))
+ var/mob/living/carbon/C = M
+ if(directory[ckey(C.key)])
+ blob_client = directory[ckey(C.key)]
+ C.gib()
+ if(blob_client)
+ var/obj/effect/blob/core/core = new(get_turf(C), 200, blob_client, blob_point_rate)
+ if(core.overmind && core.overmind.mind)
+ core.overmind.mind.name = C.name
+
//virus food
/datum/reagent/virus_food
name = "Virus Food"
diff --git a/code/modules/reagents/newchem/medicine.dm b/code/modules/reagents/newchem/medicine.dm
index f742424970d..677cc94f7a8 100644
--- a/code/modules/reagents/newchem/medicine.dm
+++ b/code/modules/reagents/newchem/medicine.dm
@@ -681,34 +681,6 @@ datum/reagent/life
/datum/chemical_reaction/life/on_reaction(var/datum/reagents/holder, var/created_volume)
chemical_mob_spawn(holder, 1, "Life")
-proc/chemical_mob_spawn(var/datum/reagents/holder, var/amount_to_spawn, var/reaction_name, var/mob_faction = "chemicalsummon")
- if(holder && holder.my_atom)
- var/blocked = blocked_mobs //global variable for blocked mobs
-
- var/list/critters = typesof(/mob/living/simple_animal/hostile) - blocked // list of possible hostile mobs
- var/atom/A = holder.my_atom
- var/turf/T = get_turf(A)
- var/area/my_area = get_area(T)
- var/message = "A [reaction_name] reaction has occured in ([my_area.name])"
- var/mob/M = get(A, /mob)
- if(M)
- message += " - carried by: [key_name_admin(M)]"
- else
- message += " - last fingerprint: [(A.fingerprintslast ? A.fingerprintslast : "N/A")]"
-
- message_admins(message, 0, 1)
-
- playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1)
-
- for(var/i = 1, i <= amount_to_spawn, i++)
- var/chosen = pick(critters)
- var/mob/living/simple_animal/hostile/C = new chosen
- C.faction |= mob_faction
- C.loc = get_turf(holder.my_atom)
- if(prob(50))
- for(var/j = 1, j <= rand(1, 3), j++)
- step(C, pick(NORTH,SOUTH,EAST,WEST))
-
/datum/reagent/mannitol/on_mob_life(mob/living/M as mob)
M.adjustBrainLoss(-3)
..()
diff --git a/code/modules/reagents/newchem/newchem_procs.dm b/code/modules/reagents/newchem/newchem_procs.dm
index 4a6ec32366e..5f3c416a6ab 100644
--- a/code/modules/reagents/newchem/newchem_procs.dm
+++ b/code/modules/reagents/newchem/newchem_procs.dm
@@ -166,4 +166,47 @@
/datum/reagent/proc/reagent_deleted()
return
+var/list/chemical_mob_spawn_meancritters = list() // list of possible hostile mobs
+var/list/chemical_mob_spawn_nicecritters = list() // and possible friendly mobs
+/datum/chemical_reaction/proc/chemical_mob_spawn(datum/reagents/holder, amount_to_spawn, reaction_name, mob_faction = "chemicalsummon")
+ if(holder && holder.my_atom)
+ if(chemical_mob_spawn_meancritters.len <= 0 || chemical_mob_spawn_nicecritters.len <= 0)
+ for(var/T in typesof(/mob/living/simple_animal))
+ var/mob/living/simple_animal/SA = T
+ switch(initial(SA.gold_core_spawnable))
+ if(CHEM_MOB_SPAWN_HOSTILE)
+ chemical_mob_spawn_meancritters += T
+ if(CHEM_MOB_SPAWN_FRIENDLY)
+ chemical_mob_spawn_nicecritters += T
+ var/atom/A = holder.my_atom
+ var/turf/T = get_turf(A)
+ var/area/my_area = get_area(T)
+ var/message = "A [reaction_name] reaction has occured in [my_area.name]. (JMP)"
+ message += " (VV)"
+
+ var/mob/M = get(A, /mob)
+ if(M)
+ message += " - Carried By: [key_name_admin(M)](?) (FLW)"
+ else
+ message += " - Last Fingerprint: [(A.fingerprintslast ? A.fingerprintslast : "N/A")]"
+
+ message_admins(message, 0, 1)
+
+ playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1)
+
+ for(var/mob/living/carbon/C in viewers(get_turf(holder.my_atom), null))
+ C.flash_eyes()
+ for(var/i = 1, i <= amount_to_spawn, i++)
+ var/chosen
+ if(reaction_name == "Friendly Gold Slime")
+ chosen = pick(chemical_mob_spawn_nicecritters)
+ else
+ chosen = pick(chemical_mob_spawn_meancritters)
+ var/mob/living/simple_animal/C = new chosen
+ C.faction |= mob_faction
+ C.forceMove(get_turf(holder.my_atom))
+ if(prob(50))
+ for(var/j = 1, j <= rand(1, 3), j++)
+ step(C, pick(NORTH,SOUTH,EAST,WEST))
+
#undef ADDICTION_TIME
\ No newline at end of file
diff --git a/code/modules/reagents/newchem/pyro.dm b/code/modules/reagents/newchem/pyro.dm
index 719d95b6c3c..db1f01da847 100644
--- a/code/modules/reagents/newchem/pyro.dm
+++ b/code/modules/reagents/newchem/pyro.dm
@@ -249,13 +249,12 @@ datum/reagent/blackpowder/reaction_turf(var/turf/T, var/volume) //oh shit
s.set_up(2, 1, location)
s.start()
for(var/mob/living/carbon/C in viewers(5, location))
- if(C.eyecheck())
- continue
- flick("e_flash", C.flash)
- if(get_dist(C, location) < 4)
- C.Weaken(5)
- continue
- C.Stun(5)
+ if(C.flash_eyes())
+ if(get_dist(C, location) < 4)
+ C.Weaken(5)
+ continue
+ C.Stun(5)
+
/datum/chemical_reaction/flash_powder/on_reaction(var/datum/reagents/holder, var/created_volume)
if(holder.has_reagent("stabilizing_agent"))
@@ -265,13 +264,11 @@ datum/reagent/blackpowder/reaction_turf(var/turf/T, var/volume) //oh shit
s.set_up(2, 1, location)
s.start()
for(var/mob/living/carbon/C in viewers(5, location))
- if(C.eyecheck())
- continue
- flick("e_flash", C.flash)
- if(get_dist(C, location) < 4)
- C.Weaken(5)
- continue
- C.Stun(5)
+ if(C.flash_eyes())
+ if(get_dist(C, location) < 4)
+ C.Weaken(5)
+ continue
+ C.Stun(5)
holder.remove_reagent("flash_powder", created_volume)
/datum/reagent/smoke_powder
diff --git a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_slime.dm b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_slime.dm
index 7749a79380a..5ba9f9057af 100644
--- a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_slime.dm
+++ b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_slime.dm
@@ -77,32 +77,16 @@
name = "Slime Crit"
id = "m_tele"
result = null
- required_reagents = list("plasma" = 5)
+ required_reagents = list("plasma" = 1)
result_amount = 1
required_container = /obj/item/slime_extract/gold
required_other = 1
on_reaction(var/datum/reagents/holder)
-
- var/blocked = blocked_mobs //global variable of blocked mobs
-
- var/list/critters = typesof(/mob/living/simple_animal/hostile) - blocked // list of possible hostile mobs
-
- playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1)
-
- for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null))
- if(M:eyecheck() <= 0)
- flick("e_flash", M.flash)
-
- for(var/i = 1, i <= 5, i++)
- var/chosen = pick(critters)
- var/mob/living/simple_animal/hostile/C = new chosen
- C.faction |= "slimesummon"
- C.loc = get_turf(holder.my_atom)
- if(prob(50))
- for(var/j = 1, j <= rand(1, 3), j++)
- step(C, pick(NORTH,SOUTH,EAST,WEST))
-// for(var/mob/O in viewers(get_turf(holder.my_atom), null))
-// O.show_message(text("\red The slime core fizzles disappointingly,"), 1)
+ feedback_add_details("slime_cores_used","[type]")
+ var/turf/T = get_turf(holder.my_atom)
+ T.visible_message("The slime extract begins to vibrate violently !")
+ spawn(50)
+ chemical_mob_spawn(holder, 5, "Gold Slime")
slimecritlesser
@@ -114,27 +98,28 @@
required_container = /obj/item/slime_extract/gold
required_other = 1
on_reaction(var/datum/reagents/holder)
- feedback_add_details("slime_cores_used","[replacetext(name," ","_")]")
- for(var/mob/O in viewers(get_turf(holder.my_atom), null))
- O.show_message(text("The slime extract begins to vibrate violently!"), 1)
+ feedback_add_details("slime_cores_used","[type]")
+ var/turf/T = get_turf(holder.my_atom)
+ T.visible_message("The slime extract begins to vibrate violently !")
spawn(50)
+ chemical_mob_spawn(holder, 3, "Lesser Gold Slime", "neutral")
- if(holder && holder.my_atom)
- var/blocked = blocked_mobs
+ slimecritfriendly
+ name = "Slime Crit Friendly"
+ id = "m_tele5"
+ result = null
+ required_reagents = list("water" = 1)
+ result_amount = 1
+ required_container = /obj/item/slime_extract/gold
+ required_other = 1
+ on_reaction(datum/reagents/holder)
+ feedback_add_details("slime_cores_used","[type]")
+ var/turf/T = get_turf(holder.my_atom)
+ T.visible_message("The slime extract begins to vibrate adorably !")
+ spawn(50)
+ chemical_mob_spawn(holder, 1, "Friendly Gold Slime", "neutral")
- var/list/critters = typesof(/mob/living/simple_animal/hostile) - blocked // list of possible hostile mobs
-
- playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1)
-
- for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null))
- if(M:eyecheck() <= 0)
- flick("e_flash", M.flash)
-
- var/chosen = pick(critters)
- var/mob/living/simple_animal/hostile/C = new chosen
- C.faction |= "neutral"
- C.loc = get_turf(holder.my_atom)
//Silver
slimebork
@@ -153,9 +138,8 @@
playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1)
- for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null))
- if(M:eyecheck() <= 0)
- flick("e_flash", M.flash)
+ for(var/mob/living/carbon/C in viewers(get_turf(holder.my_atom), null))
+ C.flash_eyes()
for(var/i = 1, i <= 4 + rand(1,2), i++)
var/chosen = pick(borks)
@@ -181,9 +165,8 @@
playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1)
- for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null))
- if(M:eyecheck() <= 0)
- flick("e_flash", M.flash)
+ for(var/mob/living/carbon/C in viewers(get_turf(holder.my_atom), null))
+ C.flash_eyes()
for(var/i = 1, i <= 4 + rand(1,2), i++)
var/chosen = pick(borks)
diff --git a/code/modules/reagents/oldchem/reagents/reagents_toxin.dm b/code/modules/reagents/oldchem/reagents/reagents_toxin.dm
index 6c3b4fa5002..852fb861bb8 100644
--- a/code/modules/reagents/oldchem/reagents/reagents_toxin.dm
+++ b/code/modules/reagents/oldchem/reagents/reagents_toxin.dm
@@ -396,60 +396,6 @@
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
-/*
-/datum/reagent/nanomachines
- name = "Nanomachines"
- id = "nanomachines"
- description = "Microscopic construction robots."
- reagent_state = LIQUID
- color = "#535E66" // rgb: 83, 94, 102
-
-/datum/reagent/nanomachines/reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
- src = null
- if( (prob(10) && method==TOUCH) || method==INGEST)
- M.contract_disease(new /datum/disease/robotic_transformation(0),1)
-
-/datum/reagent/xenomicrobes
- name = "Xenomicrobes"
- id = "xenomicrobes"
- description = "Microbes with an entirely alien cellular structure."
- reagent_state = LIQUID
- color = "#535E66" // rgb: 83, 94, 102
-
-/datum/reagent/xenomicrobes/reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
- src = null
- if( (prob(10) && method==TOUCH) || method==INGEST)
- M.contract_disease(new /datum/disease/xeno_transformation(0),1)
-*/
-
-/datum/reagent/spore
- name = "Blob Spores"
- id = "spore"
- description = "Spores of some blob creature thingy."
- reagent_state = LIQUID
- color = "#CE760A" // rgb: 206, 118, 10
- var/client/blob_client = null
- var/blob_point_rate = 3
-
-/datum/reagent/spore/on_mob_life(var/mob/living/M)
- if(!M) M = holder.my_atom
- if (holder.has_reagent("atrazine",45))
- holder.del_reagent("spore")
- if (prob(1))
- M << "\red Your mouth tastes funny."
- if (prob(1) && prob(25))
- if(iscarbon(M))
- var/mob/living/carbon/C = M
- if(directory[ckey(C.key)])
- blob_client = directory[ckey(C.key)]
- C.gib()
- if(blob_client)
- var/obj/effect/blob/core/core = new(get_turf(C), 200, blob_client, blob_point_rate)
- if(core.overmind && core.overmind.mind)
- core.overmind.mind.name = C.name
-
- return
-
/datum/reagent/condensedcapsaicin
name = "Condensed Capsaicin"
id = "condensedcapsaicin"
diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm
index 1c1ea684f26..b78c54bb4ef 100644
--- a/code/modules/reagents/reagent_containers.dm
+++ b/code/modules/reagents/reagent_containers.dm
@@ -79,7 +79,11 @@
/obj/item/weapon/reagent_containers/wash(mob/user, atom/source)
if(is_open_container())
- reagents.add_reagent("water", min(volume - reagents.total_volume, amount_per_transfer_from_this))
- user << "You fill [src] from [source]."
- return
+ if(reagents.total_volume >= volume)
+ user << "span class='warning'>\The [src] is full."
+ return
+ else
+ reagents.add_reagent("water", min(volume - reagents.total_volume, amount_per_transfer_from_this))
+ user << "You fill [src] from [source]."
+ return
..()
\ No newline at end of file
diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm
index df6edbaa03f..5e7d80a75e2 100644
--- a/code/modules/reagents/reagent_containers/food/snacks.dm
+++ b/code/modules/reagents/reagent_containers/food/snacks.dm
@@ -98,10 +98,18 @@
var/obj/item/weapon/reagent_containers/food/snacks/collected = new type
collected.loc = U
collected.reagents.remove_any(collected.reagents.total_volume)
+ collected.trash = null
if(reagents.total_volume > bitesize)
reagents.trans_to(collected, bitesize)
else
reagents.trans_to(collected, reagents.total_volume)
+ if(trash)
+ var/obj/item/TrashItem
+ if(ispath(trash,/obj/item))
+ TrashItem = new trash(src)
+ else if(istype(trash,/obj/item))
+ TrashItem = trash
+ TrashItem.forceMove(loc)
qdel(src)
return 1
@@ -846,6 +854,7 @@
New()
..()
reagents.add_reagent("nutriment", 2)
+ reagents.add_reagent("nanomachines", 10)
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/roburgerbig
@@ -857,7 +866,7 @@
New()
..()
- reagents.add_reagent("nanites", 100)
+ reagents.add_reagent("nanomachines", 100)
bitesize = 0.1
/obj/item/weapon/reagent_containers/food/snacks/xenoburger
diff --git a/code/modules/reagents/reagent_containers/glass/bottle.dm b/code/modules/reagents/reagent_containers/glass/bottle.dm
index 88b3f251507..de13b500f33 100644
--- a/code/modules/reagents/reagent_containers/glass/bottle.dm
+++ b/code/modules/reagents/reagent_containers/glass/bottle.dm
@@ -299,7 +299,7 @@
New()
..()
- reagents.add_reagent(pick("polonium","initropidril","concentrated_initro","pancuronium","sodium_thiopental","ketamine","sulfonal","amanitin","coniine","curare","sarin","histamine","venom","cyanide","spidereggs"), 40)
+ reagents.add_reagent(pick("polonium","initropidril","concentrated_initro","pancuronium","sodium_thiopental","ketamine","sulfonal","amanitin","coniine","curare","sarin","histamine","venom","cyanide","spidereggs","nanomachines"), 40)
/obj/item/weapon/reagent_containers/glass/bottle/plasma
diff --git a/code/modules/reagents/reagent_containers/glass_containers.dm b/code/modules/reagents/reagent_containers/glass_containers.dm
index e7a13b4783c..dca1b419103 100644
--- a/code/modules/reagents/reagent_containers/glass_containers.dm
+++ b/code/modules/reagents/reagent_containers/glass_containers.dm
@@ -42,133 +42,137 @@
/obj/machinery/portable_atmospherics/hydroponics,
/obj/machinery/constructable_frame)
- New()
- ..()
- base_name = name
+/obj/item/weapon/reagent_containers/glass/New()
+ ..()
+ base_name = name
- examine(mob/user)
- if(!..(user, 2))
+/obj/item/weapon/reagent_containers/glass/examine(mob/user)
+ if(!..(user, 2))
+ return
+ if (!is_open_container())
+ user << "Airtight lid seals it completely."
+
+/obj/item/weapon/reagent_containers/glass/attack_self()
+ ..()
+ if (is_open_container())
+ usr << "You put the lid on \the [src]."
+ flags ^= OPENCONTAINER
+ else
+ usr << "You take the lid off \the [src]."
+ flags |= OPENCONTAINER
+ update_icon()
+
+/obj/item/weapon/reagent_containers/glass/afterattack(obj/target, mob/user, proximity)
+ if(!proximity) return
+ if (!is_open_container())
+ return
+
+ for(var/type in can_be_placed_into)
+ if(istype(target, type))
return
- if (!is_open_container())
- user << "\blue Airtight lid seals it completely."
- attack_self()
- ..()
- if (is_open_container())
- usr << "You put the lid on \the [src]."
- flags ^= OPENCONTAINER
+ if(ismob(target) && target.reagents && reagents.total_volume)
+ user << "You splash the solution onto [target]."
+
+ var/mob/living/M = target
+ var/list/injected = list()
+ for(var/datum/reagent/R in reagents.reagent_list)
+ injected += R.name
+ var/contained = english_list(injected)
+ M.attack_log += text("\[[time_stamp()]\] Has been splashed with [name] by [key_name(user)]. Reagents: [contained]")
+ user.attack_log += text("\[[time_stamp()]\] Used the [name] to splash [key_name(M)]. Reagents: [contained]")
+ if(M.ckey)
+ msg_admin_attack("[key_name_admin(user)] splashed [key_name_admin(M)] with [name]. Reagents: [contained] (INTENT: [uppertext(user.a_intent)])")
+ if(!iscarbon(user))
+ M.LAssailant = null
else
- usr << "You take the lid off \the [src]."
- flags |= OPENCONTAINER
- update_icon()
+ M.LAssailant = user
- afterattack(obj/target, mob/user, proximity)
- if(!proximity) return
- if (!is_open_container())
+ for(var/mob/O in viewers(world.view, user))
+ O.show_message(text("[] has been splashed with something by []!", target, user), 1)
+ reagents.reaction(target, TOUCH)
+ spawn(5) reagents.clear_reagents()
+ return
+ else if(istype(target, /obj/structure/reagent_dispensers)) //A dispenser. Transfer FROM it TO us.
+
+ if(!target.reagents.total_volume && target.reagents)
+ user << "[target] is empty."
return
- for(var/type in src.can_be_placed_into)
- if(istype(target, type))
- return
-
- if(ismob(target) && target.reagents && reagents.total_volume)
- user << "\blue You splash the solution onto [target]."
-
- var/mob/living/M = target
- var/list/injected = list()
- for(var/datum/reagent/R in src.reagents.reagent_list)
- injected += R.name
- var/contained = english_list(injected)
- M.attack_log += text("\[[time_stamp()]\] Has been splashed with [src.name] by [key_name(user)]. Reagents: [contained]")
- user.attack_log += text("\[[time_stamp()]\] Used the [src.name] to splash [key_name(M)]. Reagents: [contained]")
- if(M.ckey)
- msg_admin_attack("[key_name_admin(user)] splashed [key_name_admin(M)] with [src.name]. Reagents: [contained] (INTENT: [uppertext(user.a_intent)])")
- if(!iscarbon(user))
- M.LAssailant = null
- else
- M.LAssailant = user
-
- for(var/mob/O in viewers(world.view, user))
- O.show_message(text("\red [] has been splashed with something by []!", target, user), 1)
- src.reagents.reaction(target, TOUCH)
- spawn(5) src.reagents.clear_reagents()
- return
- else if(istype(target, /obj/structure/reagent_dispensers)) //A dispenser. Transfer FROM it TO us.
-
- if(!target.reagents.total_volume && target.reagents)
- user << "\red [target] is empty."
- return
-
- if(reagents.total_volume >= reagents.maximum_volume)
- user << "\red [src] is full."
- return
-
- var/trans = target.reagents.trans_to(src, target:amount_per_transfer_from_this)
- user << "\blue You fill [src] with [trans] units of the contents of [target]."
-
- else if(target.is_open_container() && target.reagents) //Something like a glass. Player probably wants to transfer TO it.
- if(!reagents.total_volume)
- user << "\red [src] is empty."
- return
-
- if(target.reagents.total_volume >= target.reagents.maximum_volume)
- user << "\red [target] is full."
- return
-
- // /vg/: Logging transfers of bad things
- if(target.reagents_to_log.len)
- var/list/badshit=list()
- for(var/bad_reagent in target.reagents_to_log)
- if(reagents.has_reagent(bad_reagent))
- badshit += reagents_to_log[bad_reagent]
- if(badshit.len)
- var/hl="\red ([english_list(badshit)]) \black"
- message_admins("[key_name_admin(user)] added [reagents.get_reagent_ids(1)] to \a [target] with [src].[hl]")
- log_game("[key_name(user)] added [reagents.get_reagent_ids(1)] to \a [target] with [src].")
-
- var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
- user << "\blue You transfer [trans] units of the solution to [target]."
-
- /*else if(istype(target, /obj/machinery/bunsen_burner))
+ if(reagents.total_volume >= reagents.maximum_volume)
+ user << "[src] is full."
return
- else if(istype(target, /obj/machinery/radiocarbon_spectrometer))
- return*/
+ var/trans = target.reagents.trans_to(src, target:amount_per_transfer_from_this)
+ user << "You fill [src] with [trans] units of the contents of [target]."
- else if(istype(target, /obj/effect/decal/cleanable)) //stops splashing while scooping up fluids
+ else if(target.is_open_container() && target.reagents) //Something like a glass. Player probably wants to transfer TO it.
+ if(!reagents.total_volume)
+ user << "[src] is empty."
return
- else if(reagents.total_volume)
- user << "\blue You splash the solution onto [target]."
- src.reagents.reaction(target, TOUCH)
- spawn(5) src.reagents.clear_reagents()
+ if(target.reagents.total_volume >= target.reagents.maximum_volume)
+ user << "[target] is full."
return
+ // /vg/: Logging transfers of bad things
+ if(target.reagents_to_log.len)
+ var/list/badshit=list()
+ for(var/bad_reagent in target.reagents_to_log)
+ if(reagents.has_reagent(bad_reagent))
+ badshit += reagents_to_log[bad_reagent]
+ if(badshit.len)
+ var/hl="\red ([english_list(badshit)]) \black"
+ message_admins("[key_name_admin(user)] added [reagents.get_reagent_ids(1)] to \a [target] with [src].[hl]")
+ log_game("[key_name(user)] added [reagents.get_reagent_ids(1)] to \a [target] with [src].")
- attackby(var/obj/item/I, mob/user as mob, params)
- if(istype(I, /obj/item/clothing/mask/cigarette)) //ciggies are weird
- return
- if(is_hot(I))
- if(src.reagents)
- src.reagents.chem_temp += 15
- user << "You heat [src] with [I]."
- src.reagents.handle_reactions()
- if(istype(I, /obj/item/weapon/pen) || istype(I, /obj/item/device/flashlight/pen))
- var/tmp_label = sanitize(input(user, "Enter a label for [src.name]","Label",src.label_text))
- if(length(tmp_label) > 10)
- user << "\red The label can be at most 10 characters long."
- else
- user << "\blue You set the label to \"[tmp_label]\"."
- src.label_text = tmp_label
- src.update_name_label()
- if(istype(I,/obj/item/weapon/storage/bag))
- ..()
+ var/trans = reagents.trans_to(target, amount_per_transfer_from_this)
+ user << "You transfer [trans] units of the solution to [target]."
- proc/update_name_label()
- if(src.label_text == "")
- src.name = src.base_name
+ else if(istype(target, /obj/item/weapon/reagent_containers/glass) && !target.is_open_container())
+ user << "You cannot fill [target] while it is sealed."
+ return
+
+ /*else if(istype(target, /obj/machinery/bunsen_burner))
+ return
+
+ else if(istype(target, /obj/machinery/radiocarbon_spectrometer))
+ return*/
+
+ else if(istype(target, /obj/effect/decal/cleanable)) //stops splashing while scooping up fluids
+ return
+
+ else if(reagents.total_volume)
+ user << "You splash the solution onto [target]."
+ reagents.reaction(target, TOUCH)
+ spawn(5) reagents.clear_reagents()
+ return
+
+
+/obj/item/weapon/reagent_containers/glass/attackby(var/obj/item/I, mob/user as mob, params)
+ if(istype(I, /obj/item/clothing/mask/cigarette)) //ciggies are weird
+ return
+ if(is_hot(I))
+ if(reagents)
+ reagents.chem_temp += 15
+ user << "You heat [src] with [I]."
+ reagents.handle_reactions()
+ if(istype(I, /obj/item/weapon/pen) || istype(I, /obj/item/device/flashlight/pen))
+ var/tmp_label = sanitize(input(user, "Enter a label for [name]","Label",label_text))
+ if(length(tmp_label) > MAX_NAME_LEN)
+ user << "The label can be at most [MAX_NAME_LEN] characters long."
else
- src.name = "[src.base_name] ([src.label_text])"
+ user << "You set the label to \"[tmp_label]\"."
+ label_text = tmp_label
+ update_name_label()
+ if(istype(I,/obj/item/weapon/storage/bag))
+ ..()
+
+/obj/item/weapon/reagent_containers/glass/proc/update_name_label()
+ if(label_text == "")
+ name = base_name
+ else
+ name = "[base_name] ([label_text])"
/obj/item/weapon/reagent_containers/glass/beaker
name = "beaker"
@@ -179,45 +183,45 @@
materials = list(MAT_GLASS=500)
var/obj/item/device/assembly_holder/assembly = null
- on_reagent_change()
- update_icon()
-
- pickup(mob/user)
- ..()
- update_icon()
-
- dropped(mob/user)
- ..()
- update_icon()
-
- attack_hand()
- ..()
- update_icon()
-
+/obj/item/weapon/reagent_containers/glass/beaker/on_reagent_change()
update_icon()
- overlays.Cut()
- if(reagents.total_volume)
- var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]10")
+/obj/item/weapon/reagent_containers/glass/beaker/pickup(mob/user)
+ ..()
+ update_icon()
- var/percent = round((reagents.total_volume / volume) * 100)
- switch(percent)
- if(0 to 9) filling.icon_state = "[icon_state]-10"
- if(10 to 24) filling.icon_state = "[icon_state]10"
- if(25 to 49) filling.icon_state = "[icon_state]25"
- if(50 to 74) filling.icon_state = "[icon_state]50"
- if(75 to 79) filling.icon_state = "[icon_state]75"
- if(80 to 90) filling.icon_state = "[icon_state]80"
- if(91 to INFINITY) filling.icon_state = "[icon_state]100"
+/obj/item/weapon/reagent_containers/glass/beaker/dropped(mob/user)
+ ..()
+ update_icon()
- filling.icon += mix_color_from_reagents(reagents.reagent_list)
- overlays += filling
+/obj/item/weapon/reagent_containers/glass/beaker/attack_hand()
+ ..()
+ update_icon()
- if (!is_open_container())
- var/image/lid = image(icon, src, "lid_[initial(icon_state)]")
- overlays += lid
- if(assembly)
- overlays += "assembly"
+/obj/item/weapon/reagent_containers/glass/beaker/update_icon()
+ overlays.Cut()
+
+ if(reagents.total_volume)
+ var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]10")
+
+ var/percent = round((reagents.total_volume / volume) * 100)
+ switch(percent)
+ if(0 to 9) filling.icon_state = "[icon_state]-10"
+ if(10 to 24) filling.icon_state = "[icon_state]10"
+ if(25 to 49) filling.icon_state = "[icon_state]25"
+ if(50 to 74) filling.icon_state = "[icon_state]50"
+ if(75 to 79) filling.icon_state = "[icon_state]75"
+ if(80 to 90) filling.icon_state = "[icon_state]80"
+ if(91 to INFINITY) filling.icon_state = "[icon_state]100"
+
+ filling.icon += mix_color_from_reagents(reagents.reagent_list)
+ overlays += filling
+
+ if (!is_open_container())
+ var/image/lid = image(icon, src, "lid_[initial(icon_state)]")
+ overlays += lid
+ if(assembly)
+ overlays += "assembly"
/obj/item/weapon/reagent_containers/glass/beaker/verb/remove_assembly()
set name = "Remove Assembly"
@@ -309,23 +313,20 @@
possible_transfer_amounts = list(5,10,15,25,30,50,100,300)
flags = OPENCONTAINER
-/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone
- New()
- ..()
- reagents.add_reagent("cryoxadone", 30)
- update_icon()
+/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone/New()
+ ..()
+ reagents.add_reagent("cryoxadone", 30)
+ update_icon()
-/obj/item/weapon/reagent_containers/glass/beaker/sulphuric
- New()
- ..()
- reagents.add_reagent("sacid", 50)
- update_icon()
+/obj/item/weapon/reagent_containers/glass/beaker/sulphuric/New()
+ ..()
+ reagents.add_reagent("sacid", 50)
+ update_icon()
-/obj/item/weapon/reagent_containers/glass/beaker/slime
- New()
- ..()
- reagents.add_reagent("slimejelly", 50)
- update_icon()
+/obj/item/weapon/reagent_containers/glass/beaker/slime/New()
+ ..()
+ reagents.add_reagent("slimejelly", 50)
+ update_icon()
/obj/item/weapon/reagent_containers/glass/bucket
desc = "It's a bucket."
@@ -340,15 +341,15 @@
volume = 120
flags = OPENCONTAINER
- attackby(var/obj/D, mob/user as mob, params)
- if(isprox(D))
- user << "You add [D] to [src]."
- qdel(D)
- user.put_in_hands(new /obj/item/weapon/bucket_sensor)
- user.unEquip(src)
- qdel(src)
- else
- ..()
+/obj/item/weapon/reagent_containers/glass/bucket/attackby(var/obj/D, mob/user as mob, params)
+ if(isprox(D))
+ user << "You add [D] to [src]."
+ qdel(D)
+ user.put_in_hands(new /obj/item/weapon/bucket_sensor)
+ user.unEquip(src)
+ qdel(src)
+ else
+ ..()
/obj/item/weapon/reagent_containers/glass/beaker/vial
name = "vial"
diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm
index a7a0f1bba7a..5978c615942 100644
--- a/code/modules/reagents/reagent_containers/syringes.dm
+++ b/code/modules/reagents/reagent_containers/syringes.dm
@@ -120,8 +120,8 @@
var/datum/reagent/B
if(istype(T,/mob/living/carbon/human))
var/mob/living/carbon/human/H = T
- if(H.species && H.species.exotic_blood && H.reagents.total_volume)
- H.reagents.trans_to(src,amount)
+ if(H.species && H.species.exotic_blood && H.vessel.total_volume)
+ H.vessel.trans_to(src,amount)
else
B = T.take_blood(src,amount)
else
@@ -136,6 +136,8 @@
user << "\blue You take a blood sample from [target]"
for(var/mob/O in viewers(4, user))
O.show_message("\red [user] takes a blood sample from [target].", 1)
+ else
+ user.visible_message("[user] takes a sample from [target].", "You take a sample from [target].")
else //if not mob
if(!target.reagents.total_volume)
diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm
index 62784d8c8ca..d7955228168 100644
--- a/code/modules/research/experimentor.dm
+++ b/code/modules/research/experimentor.dm
@@ -326,7 +326,7 @@
ejectItem(TRUE)
if(prob(EFFECT_PROB_VERYLOW-badThingCoeff))
visible_message("[src]'s chemical chamber has sprung a leak!")
- chosenchem = pick("mutationtoxin","itching_powder","sacid")
+ chosenchem = pick("mutationtoxin","nanomachines","sacid")
var/datum/reagents/R = new/datum/reagents(15)
R.my_atom = src
R.add_reagent(chosenchem , 15)
diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm
index 1bb531051d0..7d88f65af04 100644
--- a/code/modules/research/server.dm
+++ b/code/modules/research/server.dm
@@ -49,12 +49,12 @@
var/list/temp_list
if(!id_with_upload.len)
temp_list = list()
- temp_list = text2list(id_with_upload_string, ";")
+ temp_list = splittext(id_with_upload_string, ";")
for(var/N in temp_list)
id_with_upload += text2num(N)
if(!id_with_download.len)
temp_list = list()
- temp_list = text2list(id_with_download_string, ";")
+ temp_list = splittext(id_with_download_string, ";")
for(var/N in temp_list)
id_with_download += text2num(N)
diff --git a/code/modules/research/xenoarchaeology/finds/finds_talkingitem.dm b/code/modules/research/xenoarchaeology/finds/finds_talkingitem.dm
index 65a2e24ca08..4a8c9be2a89 100644
--- a/code/modules/research/xenoarchaeology/finds/finds_talkingitem.dm
+++ b/code/modules/research/xenoarchaeology/finds/finds_talkingitem.dm
@@ -40,7 +40,7 @@
/*var/l = lentext(msg)
if(findtext(msg," ",l,l+1)==0)
msg+=" "*/
- seperate = text2list(msg, " ")
+ seperate = splittext(msg, " ")
for(var/Xa = 1,Xa[M] is dead!"
- return..()
+ return ..()
+ var/mob/living/simple_animal/SM = M
+ if(SM.sentience_type != sentience_type)
+ user << "The potion won't work on [SM]."
+ return ..()
- user << "You offer the sentience potion to [M]..."
+ user << "You offer the sentience potion to [SM]..."
being_used = 1
- var/list/candidates = pollCandidates("Do you want to play as [M.name]?", ROLE_SENTIENT, 0, 100)
+ var/list/candidates = pollCandidates("Do you want to play as [SM.name]?", ROLE_SENTIENT, 0, 100)
if(!src)
return
if(candidates.len)
var/mob/C = pick(candidates)
- M.key = C.key
- M.universal_speak = 1
- M.faction |= "sentient"
- M << "All at once it makes sense: you know what you are and who you are! Self awareness is yours!"
- M << "You are grateful to be self aware and owe [user] a great debt. Serve [user], and assist them in completing their goals at any cost."
+ SM.key = C.key
+ SM.universal_speak = 1
+ SM.faction = user.faction
+ SM.master_commander = user
+ SM.sentience_act()
+ SM << "All at once it makes sense: you know what you are and who you are! Self awareness is yours!"
+ SM << "You are grateful to be self aware and owe [user] a great debt. Serve [user], and assist them in completing their goals at any cost."
user << "[M] accepts the potion and suddenly becomes attentive and aware. It worked!"
- if(isanimal(M))
- var/mob/living/simple_animal/S = M
- S.master_commander = user
qdel(src)
else
user << "[M] looks interested for a moment, but then looks back down. Maybe you should try again later."
diff --git a/code/modules/scripting/Implementations/Telecomms.dm b/code/modules/scripting/Implementations/Telecomms.dm
index eadc1d398c4..e06a5f9a18d 100644
--- a/code/modules/scripting/Implementations/Telecomms.dm
+++ b/code/modules/scripting/Implementations/Telecomms.dm
@@ -138,7 +138,7 @@
@param replacestring: the string to replace the substring with
*/
- interpreter.SetProc("replace", /proc/replacetext)
+ interpreter.SetProc("replace", /proc/n_replacetext)
/*
-> Locates an element/substring inside of a list or string
@@ -180,21 +180,20 @@
interpreter.SetProc("shuffle", /proc/shuffle)
interpreter.SetProc("uniquevector", /proc/uniquelist)
- interpreter.SetProc("text2vector", /proc/text2list)
- interpreter.SetProc("text2vectorEx",/proc/text2listEx)
- interpreter.SetProc("vector2text", /proc/list2text)
+ interpreter.SetProc("text2vector", /proc/n_splittext)
+ interpreter.SetProc("vector2text", /proc/n_jointext)
// Donkie~
// Strings
interpreter.SetProc("lower", /proc/n_lower)
interpreter.SetProc("upper", /proc/n_upper)
interpreter.SetProc("explode", /proc/string_explode)
- interpreter.SetProc("implode", /proc/list2text)
+ interpreter.SetProc("implode", /proc/n_jointext)
interpreter.SetProc("repeat", /proc/n_repeat)
interpreter.SetProc("reverse", /proc/reverse_text)
interpreter.SetProc("tonum", /proc/n_str2num)
interpreter.SetProc("capitalize", /proc/capitalize)
- interpreter.SetProc("replacetextEx",/proc/replacetextEx)
+ interpreter.SetProc("replacetextEx",/proc/n_replacetextEx)
// Numbers
interpreter.SetProc("tostring", /proc/n_num2str)
diff --git a/code/modules/scripting/Implementations/_Logic.dm b/code/modules/scripting/Implementations/_Logic.dm
index c71839eaad9..a97fc320e0e 100644
--- a/code/modules/scripting/Implementations/_Logic.dm
+++ b/code/modules/scripting/Implementations/_Logic.dm
@@ -167,12 +167,12 @@
proc/string_explode(var/string, var/separator = "")
//writepanic("[__FILE__].[__LINE__] \\/proc/string_explode() called tick#: [world.time]")
if(istext(string) && (istext(separator) || isnull(separator)))
- return text2list(string, separator)
+ return splittext(string, separator)
//Converts a list to a string
/proc/list_implode(var/list/li, var/separator)
if(istype(li) && (istext(separator) || isnull(separator)))
- return list2text(li, separator)
+ return jointext(li, separator)
proc/n_repeat(var/string, var/amount)
//writepanic("[__FILE__].[__LINE__] \\/proc/n_repeat() called tick#: [world.time]")
@@ -260,4 +260,16 @@ proc/n_round(var/num)
/proc/n_log(var/num)
if(isnum(num) && 0 < num)
- return log(num)
\ No newline at end of file
+ return log(num)
+
+/proc/n_replacetext(text, r, with)
+ return replacetext(text, r, with)
+
+/proc/n_replacetextEx(text, r, with)
+ return replacetextEx(text, r, with)
+
+/proc/n_jointext(list, glue)
+ return jointext(list, glue)
+
+/proc/n_splittext(text, delim)
+ return splittext(text, delim)
\ No newline at end of file
diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm
index 290f8e0fc75..0c09b0ea920 100644
--- a/code/modules/shuttle/shuttle.dm
+++ b/code/modules/shuttle/shuttle.dm
@@ -563,6 +563,32 @@
return round(callTime/divisor, 1)
return max( round((timer+callTime-world.time)/divisor,1), 0 )
+// returns 3-letter mode string, used by status screens and mob status panel
+/obj/docking_port/mobile/proc/getModeStr()
+ switch(mode)
+ if(SHUTTLE_RECALL)
+ return "RCL"
+ if(SHUTTLE_CALL)
+ return "ETA"
+ if(SHUTTLE_DOCKED)
+ return "ETD"
+ if(SHUTTLE_ESCAPE)
+ return "ESC"
+ if(SHUTTLE_STRANDED)
+ return "ERR"
+ return ""
+
+// returns 5-letter timer string, used by status screens and mob status panel
+/obj/docking_port/mobile/proc/getTimerStr()
+ if(mode == SHUTTLE_STRANDED)
+ return "--:--"
+
+ var/timeleft = timeLeft()
+ if(timeleft > 0)
+ return "[add_zero(num2text((timeleft / 60) % 60),2)]:[add_zero(num2text(timeleft % 60), 2)]"
+ else
+ return "00:00"
+
/obj/docking_port/mobile/proc/getStatusText()
var/obj/docking_port/stationary/dockedAt = get_docked()
. = (dockedAt && dockedAt.name) ? dockedAt.name : "unknown"
diff --git a/code/modules/shuttle/supply.dm b/code/modules/shuttle/supply.dm
index aed517d98ce..405ea460822 100644
--- a/code/modules/shuttle/supply.dm
+++ b/code/modules/shuttle/supply.dm
@@ -384,6 +384,7 @@
var/obj/structure/closet/crate/CR = Crate
CR.manifest = slip
CR.update_icon()
+ CR.announce_beacons = object.announce_beacons.Copy()
if(istype(Crate, /obj/structure/largecrate))
var/obj/structure/largecrate/LC = Crate
LC.manifest = slip
diff --git a/code/modules/space_transition/space_transition.dm b/code/modules/space_transition/space_transition.dm
index 81be4604193..fe63154b017 100644
--- a/code/modules/space_transition/space_transition.dm
+++ b/code/modules/space_transition/space_transition.dm
@@ -87,7 +87,7 @@ var/list/z_levels_list = list()
var/datum/space_level/D
var/list/config_settings[SLS.len][]
for(var/A in SLS)
- config_settings[SLS.Find(A)] = text2list(A, ";")
+ config_settings[SLS.Find(A)] = splittext(A, ";")
var/conf_set_len = SLS.len
SLS.Cut()
for(var/A in config_settings)
diff --git a/code/modules/surgery/implant.dm b/code/modules/surgery/implant.dm
index 0728e687df5..8cb6c926061 100644
--- a/code/modules/surgery/implant.dm
+++ b/code/modules/surgery/implant.dm
@@ -310,12 +310,22 @@
steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/remove_object, /datum/surgery_step/generic/cauterize)
possible_locs = list("r_arm","l_arm","r_leg","l_leg","r_hand","r_foot","l_hand","l_foot","groin","chest","head")
+/datum/surgery/embedded_removal/synth
+ name = "removal of embedded objects"
+ steps = list(/datum/surgery_step/robotics/external/unscrew_hatch,/datum/surgery_step/robotics/external/open_hatch, /datum/surgery_step/remove_object, /datum/surgery_step/robotics/external/close_hatch)
+ possible_locs = list("r_arm","l_arm","r_leg","l_leg","r_hand","r_foot","l_hand","l_foot","groin","chest","head")
+
/datum/surgery/embedded_removal/can_start(mob/user, mob/living/carbon/target)
if(target.get_species() == "Machine")
return 0
return 1
+/datum/surgery/embedded_removal/synth/can_start(mob/user, mob/living/carbon/target)
+ if(target.get_species() == "Machine")
+ return 1
+ return 0
+
/datum/surgery_step/remove_object
name = "remove embedded objects"
time = 32
diff --git a/code/modules/surgery/organs/augments_eyes.dm b/code/modules/surgery/organs/augments_eyes.dm
index 622891a4b70..a6fdf24d715 100644
--- a/code/modules/surgery/organs/augments_eyes.dm
+++ b/code/modules/surgery/organs/augments_eyes.dm
@@ -60,7 +60,7 @@
if(prob(10 * severity))
return
owner << "Static obfuscates your vision!"
- flick("e_flash", owner.flash)
+ owner.flash_eyes(visual = 1)
diff --git a/code/modules/surgery/organs/pain.dm b/code/modules/surgery/organs/pain.dm
index d1aac66a71c..333c314aa48 100644
--- a/code/modules/surgery/organs/pain.dm
+++ b/code/modules/surgery/organs/pain.dm
@@ -1,6 +1,3 @@
-mob/proc/flash_pain()
- flick("pain",pain)
-
mob/var/list/pain_stored = list()
mob/var/last_pain_message = ""
mob/var/next_pain_time = 0
@@ -30,20 +27,16 @@ mob/living/carbon/proc/pain(var/partname, var/amount, var/force, var/burning = 0
if(1 to 10)
msg = "\red Your [partname] burns."
if(11 to 90)
- flash_weak_pain()
msg = "\red Your [partname] burns badly!"
if(91 to 10000)
- flash_pain()
msg = "\red OH GOD! Your [partname] is on fire!"
else
switch(amount)
if(1 to 10)
msg = "Your [partname] hurts."
if(11 to 90)
- flash_weak_pain()
msg = "Your [partname] hurts badly."
if(91 to 10000)
- flash_pain()
msg = "OH GOD! Your [partname] is hurting terribly!"
if(msg && (msg != last_pain_message || prob(10)))
last_pain_message = msg
diff --git a/code/world.dm b/code/world.dm
index 5f60f4aa5cf..dfb3094a314 100644
--- a/code/world.dm
+++ b/code/world.dm
@@ -98,20 +98,23 @@ var/world_topic_spam_protect_time = world.timeofday
/world/Topic(T, addr, master, key)
diary << "TOPIC: \"[T]\", from:[addr], master:[master], key:[key]"
- if (T == "ping")
+ var/list/input = params2list(T)
+ var/key_valid = (config.comms_password && input["key"] == config.comms_password) //no password means no comms, not any password
+
+ if ("ping" in input)
var/x = 1
for (var/client/C)
x++
return x
- else if(T == "players")
+ else if("players" in input)
var/n = 0
for(var/mob/M in player_list)
if(M.client)
n++
return n
- else if (T == "status")
+ else if ("status" in input)
var/list/s = list()
s["version"] = game_version
s["mode"] = master_mode
@@ -122,25 +125,35 @@ var/world_topic_spam_protect_time = world.timeofday
s["host"] = host ? host : null
s["players"] = list()
s["stationtime"] = worldtime2text()
- var/n = 0
- var/admins = 0
+ var/player_count = 0
+ var/admin_count = 0
for(var/client/C in clients)
if(C.holder)
if(C.holder.fakekey)
continue //so stealthmins aren't revealed by the hub
- admins++
- s["player[n]"] = C.key
- n++
- s["players"] = n
-
-// if(revdata) s["revision"] = revdata.revision
- s["admins"] = admins
+ admin_count++
+ s["player[player_count]"] = C.key
+ player_count++
+ s["players"] = player_count
+ s["admins"] = admin_count
s["map_name"] = map_name ? map_name : "Unknown"
+ if(key_valid)
+ if(ticker && ticker.mode)
+ s["real_mode"] = ticker.mode.name
+
+ s["security_level"] = get_security_level()
+
+ if(shuttle_master && shuttle_master.emergency)
+ // Shuttle status, see /__DEFINES/stat.dm
+ s["shuttle_mode"] = shuttle_master.emergency.mode
+ // Shuttle timer, in seconds
+ s["shuttle_timer"] = shuttle_master.emergency.timeLeft()
+
return list2params(s)
- else if(copytext(T,1,9) == "adminmsg")
+ else if("adminmsg" in input)
/*
We got an adminmsg from IRC bot lets split the input then validate the input.
expected output:
@@ -149,20 +162,8 @@ var/world_topic_spam_protect_time = world.timeofday
3. validatationkey = the key the bot has, it should match the gameservers commspassword in it's configuration.
4. sender = the ircnick that send the message.
*/
-
-
- var/input[] = params2list(T)
- if(input["key"] != config.comms_password)
- if(world_topic_spam_protect_ip == addr && abs(world_topic_spam_protect_time - world.time) < 50)
-
- spawn(50)
- world_topic_spam_protect_time = world.time
- return "Bad Key (Throttled)"
-
- world_topic_spam_protect_time = world.time
- world_topic_spam_protect_ip = addr
-
- return "Bad Key"
+ if(!key_valid)
+ return keySpamProtect(addr)
var/client/C
@@ -182,36 +183,25 @@ var/world_topic_spam_protect_time = world.timeofday
C << 'sound/effects/adminhelp.ogg'
C << message
-
for(var/client/A in admins)
if(A != C)
A << amessage
return "Message Successful"
- else if(copytext(T,1,6) == "notes")
+ else if("notes" in input)
/*
We got a request for notes from the IRC Bot
expected output:
1. notes = ckey of person the notes lookup is for
2. validationkey = the key the bot has, it should match the gameservers commspassword in it's configuration.
*/
- var/input[] = params2list(T)
- if(input["key"] != config.comms_password)
- if(world_topic_spam_protect_ip == addr && abs(world_topic_spam_protect_time - world.time) < 50)
-
- spawn(50)
- world_topic_spam_protect_time = world.time
- return "Bad Key (Throttled)"
-
- world_topic_spam_protect_time = world.time
- world_topic_spam_protect_ip = addr
- return "Bad Key"
+ if(!key_valid)
+ return keySpamProtect(addr)
return show_player_info_irc(input["notes"])
- else if (copytext(T,1,9) == "announce")
- var/input[] = params2list(T)
+ else if("announce" in input)
if(config.comms_password)
if(input["key"] != config.comms_password)
return "Bad Key"
@@ -219,6 +209,16 @@ var/world_topic_spam_protect_time = world.timeofday
for(var/client/C in clients)
C << "PR: [input["announce"]]"
+/proc/keySpamProtect(var/addr)
+ if(world_topic_spam_protect_ip == addr && abs(world_topic_spam_protect_time - world.time) < 50)
+ spawn(50)
+ world_topic_spam_protect_time = world.time
+ return "Bad Key (Throttled)"
+
+ world_topic_spam_protect_time = world.time
+ world_topic_spam_protect_ip = addr
+ return "Bad Key"
+
/world/Reboot(var/reason, var/feedback_c, var/feedback_r, var/time)
if (reason == 1) //special reboot, do none of the normal stuff
if(usr)
@@ -399,7 +399,7 @@ var/world_topic_spam_protect_time = world.timeofday
// features += "hosted by [config.hostedby]"
if (features)
- s += ": [list2text(features, ", ")]"
+ s += ": [jointext(features, ", ")]"
/* does this help? I do not know */
if (src.status != s)
diff --git a/config/example/config.txt b/config/example/config.txt
index e7eaed2443a..e2061b48652 100644
--- a/config/example/config.txt
+++ b/config/example/config.txt
@@ -302,9 +302,6 @@ PLAYER_REROUTE_CAP 0
## Disable the loading of away missions
#DISABLE_AWAY_MISSIONS
-## Uncomment this if you still use the old .sav file based notes system and haven't used the mass conversion proc
-#AUTOCONVERT_NOTES
-
## Uncomment to disable the OOC/LOOC channel by default.
#DISABLE_OOC
diff --git a/html/changelog.html b/html/changelog.html
index b8e09ba327c..62dfd77e8f6 100644
--- a/html/changelog.html
+++ b/html/changelog.html
@@ -55,6 +55,92 @@
-->
+
02 April 2016
+
Crazylemon64 updated:
+
+ - Metal foam walls will now produce flooring on space tiles
+ - Syringes will now draw water from slime people.
+
+
FalseIncarnate updated:
+
+ - Let's you know when your container is full when filling from sinks.
+ - Prevents splashing containers onto beakers and buckets that have a lid on them.
+ - Pill bottles can now be labeled with a simple pen.
+ - Beakers/buckets (and pill bottles) now accept 26 character labels from pens.
+
+
Fethas updated:
+
+ - Various spells have had a tweak to stun/reveal/cast, some other number stuff...
+ - Nightvision
+ - harvest code is now in the abilites file.
+ - New fluff objectives
+ - Hell has recently remapped its blood transit system and you can now once again crawl through blood. We are sorry for the-GIVE US YOUR SOUL!
+
+
FlattestGuitar updated:
+
+ - Alcoholic beverages now have proper levels of ethanol in them. Good luck passing out after a beer.
+
+
Fox McCloud updated:
+
+ - Adds in the Lusty Xenomorph Maid Mob; currently admin only.
+ - Fixes xenomorph brains having the wrong sprite, no origin tech, and incorrect name
+ - removes xenomorph egg from hotel
+ - upgrades are no longer needed to for the available toys in the prize vendor
+ - Implements Advanced Camera Consoles. A type of camera console that function like AI's vision style. Non-buildable/accessible.
+ - Adds in Xenobiology Advance Cameras. A type of camera console that functions like advanced cameras, but only works in Xenobiology areas; can move around slimes and feed them with the console as well. Also non-buildable/accessible (for now).
+ - Adds in cerulean slime reaction that generates a single use blueprint. On use it colors turfs a lavender color
+ - Adds disease1 outbreak event
+ - Adds appendecitis event
+ - Roburgers now properly have nanomachines in them
+ - Re-adds nanomachines
+ - Experimentor properly generates nanomachines instead of itching powder
+ - Fixes big roburgers having a healing reagent in them
+ - Adds nanomachines to poison traitor bottles
+ - Tajarans can now eat mice, chicks, parrots, and tribbles
+ - Vulpkanin and Unathi can now eat mice, chicks, lizards, chickens, crabs, parrtos, and tribbles
+ - fixes spawned changeling headcrab behavior
+
+
KasparoVy updated:
+
+ - Incisions made at the beginning of embedded object removal surgery can now be closed in the same procedure.
+
+
ProperPants updated:
+
+ - Maint drones have magboots.
+ - Removed plastic from maint drones. Literally useless for station maintenance.
+ - Increased starting amounts of some materials for maint drones and engi borgs.
+ - Reduced the number of lines taken by Engineering cyborgs calling on materials stacks.
+ - Operating tables can be deconstructed with a wrench.
+ - Fixed and shortened description of metal sheets.
+
+
Tastyfish updated:
+
+ - Bots can now be controlled by players, by opening them up and inserting a pAI. *beep
+ - MULEbots can now access the engineering destination.
+ - All MULEbot destinations should now have the correct load/unload direction, meaning the crates won't be dumped inside the flaps.
+ - Diagnostic HUD's now give health and status information about bots.
+ - MULEbot rampage blood tracks are now rendered correctly and handle UE traces as appropriate.
+ - Bots should (hopefully) lag the game less now.
+ - Beepsky contains 30% more potato.
+ - Action progress bars are now smooth.
+ - Clicking a filled inventory slot's square with an open hand now clicks the item in the slot.
+ - Status displays now display the time when in Shuttle ETA mode and no shuttle activity is happening.
+ - Shuttle ETA countdowns on status displays are now amber.
+ - pAI's can now use the PDA chatrooms.
+ - Adds treadmills to brig cells, to give the prisoners something productive to do.
+
+
TheDZD updated:
+
+ - A lot of the guns and armor in the station collision, space hotel, academy, and wild west away missions have been removed/replaced.
+ - Removes that fucking facehugger from station collision.
+
+
tigercat2000 updated:
+
+ - Virus2 has been removed.
+ - Virus1 is back. Viva la revolution.
+ - You can now have up to 20 characters.
+
+
26 March 2016
Fox McCloud updated:
diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml
index 3e6a0a9689a..6026e521eff 100644
--- a/html/changelogs/.all_changelog.yml
+++ b/html/changelogs/.all_changelog.yml
@@ -1021,3 +1021,90 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
decaffeinated version. It was funny the first time almost every crewmember aboard
the NSS Cyberiad was lugging around their own oil barrel filled with coffee,
it wasn't so funny, nor good for productivity the eighteenth.
+2016-04-02:
+ Crazylemon64:
+ - rscadd: Metal foam walls will now produce flooring on space tiles
+ - bugfix: Syringes will now draw water from slime people.
+ FalseIncarnate:
+ - tweak: Let's you know when your container is full when filling from sinks.
+ - tweak: Prevents splashing containers onto beakers and buckets that have a lid
+ on them.
+ - rscadd: Pill bottles can now be labeled with a simple pen.
+ - tweak: Beakers/buckets (and pill bottles) now accept 26 character labels from
+ pens.
+ Fethas:
+ - tweak: Various spells have had a tweak to stun/reveal/cast, some other number
+ stuff...
+ - rscadd: Nightvision
+ - tweak: harvest code is now in the abilites file.
+ - rscadd: New fluff objectives
+ - bugfix: Hell has recently remapped its blood transit system and you can now once
+ again crawl through blood. We are sorry for the-GIVE US YOUR SOUL!
+ FlattestGuitar:
+ - tweak: Alcoholic beverages now have proper levels of ethanol in them. Good luck
+ passing out after a beer.
+ Fox McCloud:
+ - rscadd: Adds in the Lusty Xenomorph Maid Mob; currently admin only.
+ - bugfix: Fixes xenomorph brains having the wrong sprite, no origin tech, and incorrect
+ name
+ - tweak: removes xenomorph egg from hotel
+ - tweak: upgrades are no longer needed to for the available toys in the prize vendor
+ - rscadd: Implements Advanced Camera Consoles. A type of camera console that function
+ like AI's vision style. Non-buildable/accessible.
+ - rscadd: Adds in Xenobiology Advance Cameras. A type of camera console that functions
+ like advanced cameras, but only works in Xenobiology areas; can move around
+ slimes and feed them with the console as well. Also non-buildable/accessible
+ (for now).
+ - rscadd: Adds in cerulean slime reaction that generates a single use blueprint.
+ On use it colors turfs a lavender color
+ - rscadd: Adds disease1 outbreak event
+ - rscadd: Adds appendecitis event
+ - rscadd: Roburgers now properly have nanomachines in them
+ - rscadd: Re-adds nanomachines
+ - tweak: Experimentor properly generates nanomachines instead of itching powder
+ - bugfix: Fixes big roburgers having a healing reagent in them
+ - rscadd: Adds nanomachines to poison traitor bottles
+ - rscadd: Tajarans can now eat mice, chicks, parrots, and tribbles
+ - rscadd: Vulpkanin and Unathi can now eat mice, chicks, lizards, chickens, crabs,
+ parrtos, and tribbles
+ - bugfix: fixes spawned changeling headcrab behavior
+ KasparoVy:
+ - bugfix: Incisions made at the beginning of embedded object removal surgery can
+ now be closed in the same procedure.
+ ProperPants:
+ - rscadd: Maint drones have magboots.
+ - rscdel: Removed plastic from maint drones. Literally useless for station maintenance.
+ - tweak: Increased starting amounts of some materials for maint drones and engi
+ borgs.
+ - experiment: Reduced the number of lines taken by Engineering cyborgs calling on
+ materials stacks.
+ - rscadd: Operating tables can be deconstructed with a wrench.
+ - spellcheck: Fixed and shortened description of metal sheets.
+ Tastyfish:
+ - rscadd: Bots can now be controlled by players, by opening them up and inserting
+ a pAI. *beep
+ - bugfix: MULEbots can now access the engineering destination.
+ - bugfix: All MULEbot destinations should now have the correct load/unload direction,
+ meaning the crates won't be dumped inside the flaps.
+ - rscadd: Diagnostic HUD's now give health and status information about bots.
+ - bugfix: MULEbot rampage blood tracks are now rendered correctly and handle UE
+ traces as appropriate.
+ - experiment: Bots should (hopefully) lag the game less now.
+ - tweak: Beepsky contains 30% more potato.
+ - tweak: Action progress bars are now smooth.
+ - tweak: Clicking a filled inventory slot's square with an open hand now clicks
+ the item in the slot.
+ - rscadd: Status displays now display the time when in Shuttle ETA mode and no shuttle
+ activity is happening.
+ - tweak: Shuttle ETA countdowns on status displays are now amber.
+ - rscadd: pAI's can now use the PDA chatrooms.
+ - rscadd: Adds treadmills to brig cells, to give the prisoners something productive
+ to do.
+ TheDZD:
+ - rscdel: A lot of the guns and armor in the station collision, space hotel, academy,
+ and wild west away missions have been removed/replaced.
+ - rscdel: Removes that fucking facehugger from station collision.
+ tigercat2000:
+ - rscdel: Virus2 has been removed.
+ - rscadd: Virus1 is back. Viva la revolution.
+ - rscadd: You can now have up to 20 characters.
diff --git a/html/changelogs/AutoChangeLog-pr-3927.yml b/html/changelogs/AutoChangeLog-pr-3927.yml
deleted file mode 100644
index 586ab4c9c09..00000000000
--- a/html/changelogs/AutoChangeLog-pr-3927.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: Crazylemon64
-delete-after: True
-changes:
- - rscadd: "Metal foam walls will now produce flooring on space tiles"
diff --git a/html/changelogs/AutoChangeLog-pr-3958.yml b/html/changelogs/AutoChangeLog-pr-3958.yml
deleted file mode 100644
index 1a99c1cddd3..00000000000
--- a/html/changelogs/AutoChangeLog-pr-3958.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-author: Fethas
-delete-after: True
-changes:
- - tweak: "Various spells have had a tweak to stun/reveal/cast, some other number stuff..."
- - rscadd: "Nightvision"
- - tweak: "harvest code is now in the abilites file."
- - rscadd: "New fluff objectives"
diff --git a/html/changelogs/AutoChangeLog-pr-4005.yml b/html/changelogs/AutoChangeLog-pr-4005.yml
deleted file mode 100644
index 66eee189c5b..00000000000
--- a/html/changelogs/AutoChangeLog-pr-4005.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: FlattestGuitar
-delete-after: True
-changes:
- - tweak: "Alcoholic beverages now have proper levels of ethanol in them. Good luck passing out after a beer."
diff --git a/html/changelogs/AutoChangeLog-pr-4010.yml b/html/changelogs/AutoChangeLog-pr-4010.yml
deleted file mode 100644
index 51d07ee234c..00000000000
--- a/html/changelogs/AutoChangeLog-pr-4010.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: Fox McCloud
-delete-after: True
-changes:
- - rscadd: "Adds in the Lusty Xenomorph Maid Mob; currently admin only."
diff --git a/html/changelogs/AutoChangeLog-pr-4011.yml b/html/changelogs/AutoChangeLog-pr-4011.yml
deleted file mode 100644
index d48a1ea69ab..00000000000
--- a/html/changelogs/AutoChangeLog-pr-4011.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: Fox McCloud
-delete-after: True
-changes:
- - bugfix: "Fixes xenomorph brains having the wrong sprite, no origin tech, and incorrect name"
diff --git a/html/changelogs/AutoChangeLog-pr-4013.yml b/html/changelogs/AutoChangeLog-pr-4013.yml
deleted file mode 100644
index 935943ec3b7..00000000000
--- a/html/changelogs/AutoChangeLog-pr-4013.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: KasparoVy
-delete-after: True
-changes:
- - bugfix: "Incisions made at the beginning of embedded object removal surgery can now be closed in the same procedure."
diff --git a/html/changelogs/AutoChangeLog-pr-4017.yml b/html/changelogs/AutoChangeLog-pr-4017.yml
deleted file mode 100644
index 09e9e1ecd1d..00000000000
--- a/html/changelogs/AutoChangeLog-pr-4017.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-author: ProperPants
-delete-after: True
-changes:
- - rscadd: "Maint drones have magboots."
- - rscdel: "Removed plastic from maint drones. Literally useless for station maintenance."
- - tweak: "Increased starting amounts of some materials for maint drones and engi borgs."
- - experiment: "Reduced the number of lines taken by Engineering cyborgs calling on materials stacks."
diff --git a/html/changelogs/AutoChangeLog-pr-4018.yml b/html/changelogs/AutoChangeLog-pr-4018.yml
deleted file mode 100644
index 354bfb190d2..00000000000
--- a/html/changelogs/AutoChangeLog-pr-4018.yml
+++ /dev/null
@@ -1,10 +0,0 @@
-author: Tastyfish
-delete-after: True
-changes:
- - rscadd: "Bots can now be controlled by players, by opening them up and inserting a pAI. *beep"
- - bugfix: "MULEbots can now access the engineering destination."
- - bugfix: "All MULEbot destinations should now have the correct load/unload direction, meaning the crates won't be dumped inside the flaps."
- - rscadd: "Diagnostic HUD's now give health and status information about bots."
- - bugfix: "MULEbot rampage blood tracks are now rendered correctly and handle UE traces as appropriate."
- - experiment: "Bots should (hopefully) lag the game less now."
- - tweak: "Beepsky contains 30% more potato."
diff --git a/html/changelogs/AutoChangeLog-pr-4019.yml b/html/changelogs/AutoChangeLog-pr-4019.yml
deleted file mode 100644
index 783ca3279fc..00000000000
--- a/html/changelogs/AutoChangeLog-pr-4019.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-author: tigercat2000
-delete-after: True
-changes:
- - rscdel: "Virus2 has been removed."
- - rscadd: "Virus1 is back. Viva la revolution."
diff --git a/html/changelogs/AutoChangeLog-pr-4021.yml b/html/changelogs/AutoChangeLog-pr-4021.yml
deleted file mode 100644
index f9a6c1a9ce2..00000000000
--- a/html/changelogs/AutoChangeLog-pr-4021.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: Fox McCloud
-delete-after: True
-changes:
- - tweak: "upgrades are no longer needed to for the available toys in the prize vendor"
diff --git a/html/changelogs/AutoChangeLog-pr-4023.yml b/html/changelogs/AutoChangeLog-pr-4023.yml
deleted file mode 100644
index 7556659b0b0..00000000000
--- a/html/changelogs/AutoChangeLog-pr-4023.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: Tastyfish
-delete-after: True
-changes:
- - tweak: "Action progress bars are now smooth."
diff --git a/html/changelogs/AutoChangeLog-pr-4024.yml b/html/changelogs/AutoChangeLog-pr-4024.yml
deleted file mode 100644
index 4276c0a7c29..00000000000
--- a/html/changelogs/AutoChangeLog-pr-4024.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: Tastyfish
-delete-after: True
-changes:
- - tweak: "Clicking a filled inventory slot's square with an open hand now clicks the item in the slot."
diff --git a/html/changelogs/AutoChangeLog-pr-4025.yml b/html/changelogs/AutoChangeLog-pr-4025.yml
deleted file mode 100644
index 76ce74cdf19..00000000000
--- a/html/changelogs/AutoChangeLog-pr-4025.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: tigercat2000
-delete-after: True
-changes:
- - rscadd: "You can now have up to 20 characters."
diff --git a/html/changelogs/AutoChangeLog-pr-4028.yml b/html/changelogs/AutoChangeLog-pr-4028.yml
deleted file mode 100644
index 9bfee62bd8c..00000000000
--- a/html/changelogs/AutoChangeLog-pr-4028.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-author: Tastyfish
-delete-after: True
-changes:
- - rscadd: "Status displays now display the time when in Shuttle ETA mode and no shuttle activity is happening."
- - tweak: "Shuttle ETA countdowns on status displays are now amber."
diff --git a/html/changelogs/AutoChangeLog-pr-4030.yml b/html/changelogs/AutoChangeLog-pr-4030.yml
deleted file mode 100644
index d9a5b9784a0..00000000000
--- a/html/changelogs/AutoChangeLog-pr-4030.yml
+++ /dev/null
@@ -1,6 +0,0 @@
-author: Fox McCloud
-delete-after: True
-changes:
- - rscadd: "Implements Advanced Camera Consoles. A type of camera console that function like AI's vision style. Non-buildable/accessible."
- - rscadd: "Adds in Xenobiology Advance Cameras. A type of camera console that functions like advanced cameras, but only works in Xenobiology areas; can move around slimes and feed them with the console as well. Also non-buildable/accessible (for now)."
- - rscadd: "Adds in cerulean slime reaction that generates a single use blueprint. On use it colors turfs a lavender color"
diff --git a/html/changelogs/AutoChangeLog-pr-4037.yml b/html/changelogs/AutoChangeLog-pr-4037.yml
deleted file mode 100644
index fd9f87f147f..00000000000
--- a/html/changelogs/AutoChangeLog-pr-4037.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-author: ProperPants
-delete-after: True
-changes:
- - rscadd: "Operating tables can be deconstructed with a wrench."
- - spellcheck: "Fixed and shortened description of metal sheets."
diff --git a/html/changelogs/AutoChangeLog-pr-4038.yml b/html/changelogs/AutoChangeLog-pr-4038.yml
deleted file mode 100644
index 38a7c85f3bc..00000000000
--- a/html/changelogs/AutoChangeLog-pr-4038.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: Fethas
-delete-after: True
-changes:
- - bugfix: "Hell has recently remapped its blood transit system and you can now once again crawl through blood. We are sorry for the-GIVE US YOUR SOUL!"
diff --git a/html/changelogs/AutoChangeLog-pr-4039.yml b/html/changelogs/AutoChangeLog-pr-4039.yml
deleted file mode 100644
index c0c6335d6be..00000000000
--- a/html/changelogs/AutoChangeLog-pr-4039.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-author: TheDZD
-delete-after: True
-changes:
- - rscdel: "A lot of the guns and armor in the station collision, space hotel, academy, and wild west away missions have been removed/replaced."
- - rscdel: "Removes that fucking facehugger from station collision."
diff --git a/html/changelogs/AutoChangeLog-pr-4040.yml b/html/changelogs/AutoChangeLog-pr-4040.yml
deleted file mode 100644
index 08de280db07..00000000000
--- a/html/changelogs/AutoChangeLog-pr-4040.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: Tastyfish
-delete-after: True
-changes:
- - rscadd: "pAI's can now use the PDA chatrooms."
diff --git a/html/changelogs/AutoChangeLog-pr-4044.yml b/html/changelogs/AutoChangeLog-pr-4044.yml
deleted file mode 100644
index 9fc834e42c2..00000000000
--- a/html/changelogs/AutoChangeLog-pr-4044.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: Tastyfish
-delete-after: True
-changes:
- - rscadd: "Adds treadmills to brig cells, to give the prisoners something productive to do."
diff --git a/html/changelogs/AutoChangeLog-pr-4070.yml b/html/changelogs/AutoChangeLog-pr-4070.yml
new file mode 100644
index 00000000000..69075f25e69
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-4070.yml
@@ -0,0 +1,4 @@
+author: Crazylemon64
+delete-after: True
+changes:
+ - bugfix: "Removes an offset from the advanced virus stealth calculation, causing viruses to be more stealthy than the sum of their symptoms."
diff --git a/html/changelogs/AutoChangeLog-pr-4082.yml b/html/changelogs/AutoChangeLog-pr-4082.yml
new file mode 100644
index 00000000000..f49b05a3564
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-4082.yml
@@ -0,0 +1,4 @@
+author: Fox McCloud
+delete-after: True
+changes:
+ - bugfix: "Fixes weakeyes having a negligible impact"
diff --git a/html/changelogs/AutoChangeLog-pr-4083.yml b/html/changelogs/AutoChangeLog-pr-4083.yml
new file mode 100644
index 00000000000..3402e2effb6
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-4083.yml
@@ -0,0 +1,4 @@
+author: Fethas
+delete-after: True
+changes:
+ - tweak: "maybe makes them last longer...maybe..and fixes the event end message"
diff --git a/html/changelogs/AutoChangeLog-pr-4088.yml b/html/changelogs/AutoChangeLog-pr-4088.yml
new file mode 100644
index 00000000000..4f9d57270db
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-4088.yml
@@ -0,0 +1,4 @@
+author: tigercat2000
+delete-after: True
+changes:
+ - rscadd: "Items in your off hand will now count towards access."
diff --git a/html/changelogs/AutoChangeLog-pr-4094.yml b/html/changelogs/AutoChangeLog-pr-4094.yml
new file mode 100644
index 00000000000..371e5a5f432
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-4094.yml
@@ -0,0 +1,4 @@
+author: Crazylemon64
+delete-after: True
+changes:
+ - bugfix: "Mulebots will now send announcements to relevant requests consoles on delivery again."
diff --git a/html/changelogs/AutoChangeLog-pr-4095.yml b/html/changelogs/AutoChangeLog-pr-4095.yml
new file mode 100644
index 00000000000..35d1abdf256
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-4095.yml
@@ -0,0 +1,7 @@
+author: Fox McCloud
+delete-after: True
+changes:
+ - rscadd: "Can spawn friendly animals with a new gold core reaction by injection with water"
+ - tweak: "Hostile animal spawn increased from 3 to 5 for hostile gold cores"
+ - tweak: "Swarmers, revenants, and morphs no longer gold core spawnable"
+ - bugfix: "Fixes invisible animal spawns from gold core/life reactions"
diff --git a/html/changelogs/AutoChangeLog-pr-4014.yml b/html/changelogs/AutoChangeLog-pr-4096.yml
similarity index 51%
rename from html/changelogs/AutoChangeLog-pr-4014.yml
rename to html/changelogs/AutoChangeLog-pr-4096.yml
index f6257c8c279..9b8e42710d2 100644
--- a/html/changelogs/AutoChangeLog-pr-4014.yml
+++ b/html/changelogs/AutoChangeLog-pr-4096.yml
@@ -1,4 +1,4 @@
author: Fox McCloud
delete-after: True
changes:
- - tweak: "removes xenomorph egg from hotel"
+ - rscadd: "Adds tape to the ArtVend"
diff --git a/html/changelogs/AutoChangeLog-pr-4097.yml b/html/changelogs/AutoChangeLog-pr-4097.yml
new file mode 100644
index 00000000000..2fd1635f900
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-4097.yml
@@ -0,0 +1,5 @@
+author: Tastyfish
+delete-after: True
+changes:
+ - tweak: "Beepsky is no longer a pokemon."
+ - tweak: "pAI-controlled Bots now reliably speak human-understandable languages over the radio."
diff --git a/html/changelogs/AutoChangeLog-pr-4100.yml b/html/changelogs/AutoChangeLog-pr-4100.yml
new file mode 100644
index 00000000000..783667ec9bb
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-4100.yml
@@ -0,0 +1,4 @@
+author: Fox McCloud
+delete-after: True
+changes:
+ - tweak: "Can no longer use sentience potions on bots"
diff --git a/icons/mob/screen1_full.dmi b/icons/mob/screen1_full.dmi
deleted file mode 100644
index d660f369ba0..00000000000
Binary files a/icons/mob/screen1_full.dmi and /dev/null differ
diff --git a/icons/mob/screen_full.dmi b/icons/mob/screen_full.dmi
new file mode 100644
index 00000000000..e84b0546950
Binary files /dev/null and b/icons/mob/screen_full.dmi differ
diff --git a/icons/mob/screen_gen.dmi b/icons/mob/screen_gen.dmi
index 431f1df9ddb..a97f1abc5a0 100644
Binary files a/icons/mob/screen_gen.dmi and b/icons/mob/screen_gen.dmi differ
diff --git a/icons/mob/underwear.dmi b/icons/mob/underwear.dmi
index 928163c75ec..c212261f9ec 100644
Binary files a/icons/mob/underwear.dmi and b/icons/mob/underwear.dmi differ
diff --git a/icons/obj/meteor.dmi b/icons/obj/meteor.dmi
index b852fbf7cf8..83a0a98a49a 100644
Binary files a/icons/obj/meteor.dmi and b/icons/obj/meteor.dmi differ
diff --git a/paradise.dme b/paradise.dme
index 985cb241e36..75cdb9919c3 100644
--- a/paradise.dme
+++ b/paradise.dme
@@ -18,7 +18,6 @@
#include "code\__DEFINES\admin.dm"
#include "code\__DEFINES\atmospherics.dm"
#include "code\__DEFINES\bots.dm"
-#include "code\__DEFINES\btime.dm"
#include "code\__DEFINES\clothing.dm"
#include "code\__DEFINES\combat.dm"
#include "code\__DEFINES\flags.dm"
@@ -60,7 +59,6 @@
#include "code\__HELPERS\timed_alerts.dm"
#include "code\__HELPERS\type2type.dm"
#include "code\__HELPERS\unsorted.dm"
-#include "code\__HELPERS\bygex\bygex.dm"
#include "code\_DATASTRUCTURES\heap.dm"
#include "code\_DATASTRUCTURES\linked_lists.dm"
#include "code\_DATASTRUCTURES\priority_queue.dm"
@@ -83,6 +81,7 @@
#include "code\_hooks\area.dm"
#include "code\_hooks\hooks.dm"
#include "code\_hooks\mob.dm"
+#include "code\_onclick\_defines.dm"
#include "code\_onclick\adjacent.dm"
#include "code\_onclick\ai.dm"
#include "code\_onclick\click.dm"
@@ -101,6 +100,7 @@
#include "code\_onclick\hud\alien.dm"
#include "code\_onclick\hud\alien_larva.dm"
#include "code\_onclick\hud\bot.dm"
+#include "code\_onclick\hud\fullscreen.dm"
#include "code\_onclick\hud\hud.dm"
#include "code\_onclick\hud\human.dm"
#include "code\_onclick\hud\monkey.dm"
@@ -174,7 +174,6 @@
#include "code\controllers\Processes\ticker.dm"
#include "code\controllers\Processes\timer.dm"
#include "code\controllers\Processes\vote.dm"
-#include "code\controllers\ProcessScheduler\core\_stubs.dm"
#include "code\controllers\ProcessScheduler\core\process.dm"
#include "code\controllers\ProcessScheduler\core\processScheduler.dm"
#include "code\datums\ai_law_sets.dm"
@@ -1221,6 +1220,7 @@
#include "code\modules\events\brand_intelligence.dm"
#include "code\modules\events\carp_migration.dm"
#include "code\modules\events\communications_blackout.dm"
+#include "code\modules\events\disease_outbreak.dm"
#include "code\modules\events\dust.dm"
#include "code\modules\events\electrical_storm.dm"
#include "code\modules\events\event.dm"
@@ -1232,6 +1232,8 @@
#include "code\modules\events\infestation.dm"
#include "code\modules\events\ion_storm.dm"
#include "code\modules\events\mass_hallucination.dm"
+#include "code\modules\events\meaty_gore.dm"
+#include "code\modules\events\meaty_ops.dm"
#include "code\modules\events\meaty_ores.dm"
#include "code\modules\events\meteors.dm"
#include "code\modules\events\money_hacker.dm"
@@ -1243,6 +1245,7 @@
#include "code\modules\events\slaughterevent.dm"
#include "code\modules\events\spacevine.dm"
#include "code\modules\events\spider_infestation.dm"
+#include "code\modules\events\spontaneous_appendicitis.dm"
#include "code\modules\events\tear.dm"
#include "code\modules\events\undead.dm"
#include "code\modules\events\vent_clog.dm"
@@ -1372,6 +1375,7 @@
#include "code\modules\mob\dead\observer\spells.dm"
#include "code\modules\mob\living\autohiss.dm"
#include "code\modules\mob\living\damage_procs.dm"
+#include "code\modules\mob\living\death.dm"
#include "code\modules\mob\living\default_language.dm"
#include "code\modules\mob\living\life.dm"
#include "code\modules\mob\living\living.dm"