mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-08-25 13:09:11 +01:00
space cleanup (#17300)
* space cleanup * this * this too --------- Co-authored-by: Cameron Lennox <killer65311@gmail.com>
This commit is contained in:
co-authored by
Cameron Lennox
parent
a7314a8766
commit
c8aff28c5b
@@ -80,7 +80,7 @@
|
||||
air_temporary.temperature = T20C
|
||||
|
||||
air_temporary.adjust_multi(GAS_O2, (start_pressure*O2STANDARD)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature), \
|
||||
GAS_N2,(start_pressure*N2STANDARD)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature))
|
||||
GAS_N2,(start_pressure*N2STANDARD)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature))
|
||||
|
||||
|
||||
. = ..()
|
||||
|
||||
@@ -20,7 +20,7 @@ Class Vars:
|
||||
B - This holds the second zone with which the first zone equalizes.
|
||||
|
||||
direct - This counts the number of direct (i.e. with no doors) connections on this edge.
|
||||
Any value of this is sufficient to make the zones mergeable.
|
||||
Any value of this is sufficient to make the zones mergeable.
|
||||
|
||||
connection_edge/unsimulated
|
||||
|
||||
|
||||
@@ -3,12 +3,12 @@
|
||||
|
||||
#define MC_SPLIT_TICK_INIT(phase_count) var/original_tick_limit = Master.current_ticklimit; var/split_tick_phases = ##phase_count
|
||||
#define MC_SPLIT_TICK \
|
||||
if(split_tick_phases > 1){\
|
||||
Master.current_ticklimit = ((original_tick_limit - TICK_USAGE) / split_tick_phases) + TICK_USAGE;\
|
||||
--split_tick_phases;\
|
||||
} else {\
|
||||
Master.current_ticklimit = original_tick_limit;\
|
||||
}
|
||||
if(split_tick_phases > 1){\
|
||||
Master.current_ticklimit = ((original_tick_limit - TICK_USAGE) / split_tick_phases) + TICK_USAGE;\
|
||||
--split_tick_phases;\
|
||||
} else {\
|
||||
Master.current_ticklimit = original_tick_limit;\
|
||||
}
|
||||
|
||||
// Used to smooth out costs to try and avoid oscillation.
|
||||
#define MC_AVERAGE_FAST(average, current) (0.7 * (average) + 0.3 * (current))
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
///Protects a datum from being VV'd
|
||||
#define GENERAL_PROTECT_DATUM(Path)\
|
||||
##Path/can_vv_get(var_name){\
|
||||
return FALSE;\
|
||||
return FALSE;\
|
||||
}\
|
||||
##Path/vv_edit_var(var_name, var_value){\
|
||||
return FALSE;\
|
||||
return FALSE;\
|
||||
}\
|
||||
##Path/CanProcCall(procname){\
|
||||
return FALSE;\
|
||||
return FALSE;\
|
||||
}
|
||||
|
||||
@@ -56,6 +56,6 @@
|
||||
/*
|
||||
/datum/robot_sprite/combat/fluff/foopwotch/handle_extra_icon_updates(var/mob/living/silicon/robot/ourborg) //Make sure the path is correct!
|
||||
..() //THIS IS ESSENTIAL. IF YOU FORGET THIS LINE, YOU WILL NOT GET THE NORMAL SPRITES.
|
||||
if(ourborg.has_active_type(/obj/item/weapon/combat_borgblade))
|
||||
ourborg.add_overlay("[sprite_icon_state]-dagger")
|
||||
if(ourborg.has_active_type(/obj/item/weapon/combat_borgblade))
|
||||
ourborg.add_overlay("[sprite_icon_state]-dagger")
|
||||
*/
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
var/global/defer_powernet_rebuild = 0 // True if net rebuild will be called manually after an event.
|
||||
|
||||
#define CELLRATE 0.002 // Multiplier for watts per tick <> cell storage (e.g., 0.02 means if there is a load of 1000 watts, 20 units will be taken from a cell per second)
|
||||
// It's a conversion constant. power_used*CELLRATE = charge_provided, or charge_used/CELLRATE = power_provided
|
||||
// It's a conversion constant. power_used*CELLRATE = charge_provided, or charge_used/CELLRATE = power_provided
|
||||
#define SMESRATE 0.03333 // Same for SMESes. A different number for some reason.
|
||||
|
||||
#define KILOWATTS *1000
|
||||
|
||||
+57
-57
@@ -19,21 +19,21 @@
|
||||
/* This comment bypasses grep checks */ /var/__rust_g
|
||||
|
||||
/proc/__detect_rust_g()
|
||||
if (world.system_type == UNIX)
|
||||
if (fexists("./librust_g.so"))
|
||||
// No need for LD_LIBRARY_PATH badness.
|
||||
return __rust_g = "./librust_g.so"
|
||||
else if (fexists("./rust_g"))
|
||||
// Old dumb filename.
|
||||
return __rust_g = "./rust_g"
|
||||
else if (fexists("[world.GetConfig("env", "HOME")]/.byond/bin/rust_g"))
|
||||
// Old dumb filename in `~/.byond/bin`.
|
||||
return __rust_g = "rust_g"
|
||||
else
|
||||
// It's not in the current directory, so try others
|
||||
return __rust_g = "librust_g.so"
|
||||
else
|
||||
return __rust_g = "rust_g"
|
||||
if (world.system_type == UNIX)
|
||||
if (fexists("./librust_g.so"))
|
||||
// No need for LD_LIBRARY_PATH badness.
|
||||
return __rust_g = "./librust_g.so"
|
||||
else if (fexists("./rust_g"))
|
||||
// Old dumb filename.
|
||||
return __rust_g = "./rust_g"
|
||||
else if (fexists("[world.GetConfig("env", "HOME")]/.byond/bin/rust_g"))
|
||||
// Old dumb filename in `~/.byond/bin`.
|
||||
return __rust_g = "rust_g"
|
||||
else
|
||||
// It's not in the current directory, so try others
|
||||
return __rust_g = "librust_g.so"
|
||||
else
|
||||
return __rust_g = "rust_g"
|
||||
|
||||
#define RUST_G (__rust_g || __detect_rust_g())
|
||||
#endif
|
||||
@@ -105,7 +105,7 @@
|
||||
* * height: The height of the grid.
|
||||
*/
|
||||
#define rustg_cnoise_generate(percentage, smoothing_iterations, birth_limit, death_limit, width, height) \
|
||||
RUSTG_CALL(RUST_G, "cnoise_generate")(percentage, smoothing_iterations, birth_limit, death_limit, width, height)
|
||||
RUSTG_CALL(RUST_G, "cnoise_generate")(percentage, smoothing_iterations, birth_limit, death_limit, width, height)
|
||||
|
||||
/**
|
||||
* This proc generates a grid of perlin-like noise
|
||||
@@ -121,7 +121,7 @@
|
||||
* * upper_range: upper bound of values selected for. (exclusive)
|
||||
*/
|
||||
#define rustg_dbp_generate(seed, accuracy, stamp_size, world_size, lower_range, upper_range) \
|
||||
RUSTG_CALL(RUST_G, "dbp_generate")(seed, accuracy, stamp_size, world_size, lower_range, upper_range)
|
||||
RUSTG_CALL(RUST_G, "dbp_generate")(seed, accuracy, stamp_size, world_size, lower_range, upper_range)
|
||||
|
||||
|
||||
#define rustg_dmi_strip_metadata(fname) RUSTG_CALL(RUST_G, "dmi_strip_metadata")(fname)
|
||||
@@ -142,8 +142,8 @@
|
||||
#define rustg_file_seek_line(fname, line) RUSTG_CALL(RUST_G, "file_seek_line")(fname, "[line]")
|
||||
|
||||
#ifdef RUSTG_OVERRIDE_BUILTINS
|
||||
#define file2text(fname) rustg_file_read("[fname]")
|
||||
#define text2file(text, fname) rustg_file_append(text, "[fname]")
|
||||
#define file2text(fname) rustg_file_read("[fname]")
|
||||
#define text2file(text, fname) rustg_file_append(text, "[fname]")
|
||||
#endif
|
||||
|
||||
/// Returns the git hash of the given revision, ex. "HEAD".
|
||||
@@ -154,7 +154,7 @@
|
||||
* Defaults to returning %F which is YYYY-MM-DD.
|
||||
*/
|
||||
/proc/rustg_git_commit_date(rev, format = "%F")
|
||||
return RUSTG_CALL(RUST_G, "rg_git_commit_date")(rev, format)
|
||||
return RUSTG_CALL(RUST_G, "rg_git_commit_date")(rev, format)
|
||||
|
||||
/**
|
||||
* Returns the formatted datetime string of HEAD using the provided format.
|
||||
@@ -162,7 +162,7 @@
|
||||
* This is different to rustg_git_commit_date because it only needs the logs directory.
|
||||
*/
|
||||
/proc/rustg_git_commit_date_head(format = "%F")
|
||||
return RUSTG_CALL(RUST_G, "rg_git_commit_date_head")(format)
|
||||
return RUSTG_CALL(RUST_G, "rg_git_commit_date_head")(format)
|
||||
|
||||
#define rustg_hash_string(algorithm, text) RUSTG_CALL(RUST_G, "hash_string")(algorithm, text)
|
||||
#define rustg_hash_file(algorithm, fname) RUSTG_CALL(RUST_G, "hash_file")(algorithm, fname)
|
||||
@@ -182,7 +182,7 @@
|
||||
#define rustg_decode_base64(str) RUSTG_CALL(RUST_G, "decode_base64")(str)
|
||||
|
||||
#ifdef RUSTG_OVERRIDE_BUILTINS
|
||||
#define md5(thing) (isfile(thing) ? rustg_hash_file(RUSTG_HASH_MD5, "[thing]") : rustg_hash_string(RUSTG_HASH_MD5, thing))
|
||||
#define md5(thing) (isfile(thing) ? rustg_hash_file(RUSTG_HASH_MD5, "[thing]") : rustg_hash_string(RUSTG_HASH_MD5, thing))
|
||||
#endif
|
||||
|
||||
#define RUSTG_HTTP_METHOD_GET "get"
|
||||
@@ -372,33 +372,33 @@
|
||||
|
||||
/// Provided a static RSC file path or a raw text file path, returns the duration of the file in deciseconds as a float.
|
||||
/proc/rustg_sound_length(file_path)
|
||||
var/static/list/sound_cache
|
||||
if(isnull(sound_cache))
|
||||
sound_cache = list()
|
||||
var/static/list/sound_cache
|
||||
if(isnull(sound_cache))
|
||||
sound_cache = list()
|
||||
|
||||
. = 0
|
||||
. = 0
|
||||
|
||||
if(!istext(file_path))
|
||||
if(!isfile(file_path))
|
||||
CRASH("rustg_sound_length error: Passed non-text object")
|
||||
if(!istext(file_path))
|
||||
if(!isfile(file_path))
|
||||
CRASH("rustg_sound_length error: Passed non-text object")
|
||||
|
||||
if(length("[file_path]")) // Runtime generated RSC references stringify into 0-length strings.
|
||||
file_path = "[file_path]"
|
||||
else
|
||||
CRASH("rustg_sound_length does not support non-static file refs.")
|
||||
if(length("[file_path]")) // Runtime generated RSC references stringify into 0-length strings.
|
||||
file_path = "[file_path]"
|
||||
else
|
||||
CRASH("rustg_sound_length does not support non-static file refs.")
|
||||
|
||||
var/cached_length = sound_cache[file_path]
|
||||
if(!isnull(cached_length))
|
||||
return cached_length
|
||||
var/cached_length = sound_cache[file_path]
|
||||
if(!isnull(cached_length))
|
||||
return cached_length
|
||||
|
||||
var/ret = RUSTG_CALL(RUST_G, "sound_len")(file_path)
|
||||
var/as_num = text2num(ret)
|
||||
if(isnull(ret))
|
||||
. = 0
|
||||
CRASH("rustg_sound_length error: [ret]")
|
||||
var/ret = RUSTG_CALL(RUST_G, "sound_len")(file_path)
|
||||
var/as_num = text2num(ret)
|
||||
if(isnull(ret))
|
||||
. = 0
|
||||
CRASH("rustg_sound_length error: [ret]")
|
||||
|
||||
sound_cache[file_path] = as_num
|
||||
return as_num
|
||||
sound_cache[file_path] = as_num
|
||||
return as_num
|
||||
|
||||
|
||||
#define RUSTG_SOUNDLEN_SUCCESSES "successes"
|
||||
@@ -426,25 +426,25 @@
|
||||
|
||||
/// Returns the timestamp as a string
|
||||
/proc/rustg_unix_timestamp()
|
||||
return RUSTG_CALL(RUST_G, "unix_timestamp")()
|
||||
return RUSTG_CALL(RUST_G, "unix_timestamp")()
|
||||
|
||||
#define rustg_raw_read_toml_file(path) json_decode(RUSTG_CALL(RUST_G, "toml_file_to_json")(path) || "null")
|
||||
|
||||
/proc/rustg_read_toml_file(path)
|
||||
var/list/output = rustg_raw_read_toml_file(path)
|
||||
if (output["success"])
|
||||
return json_decode(output["content"])
|
||||
else
|
||||
CRASH(output["content"])
|
||||
var/list/output = rustg_raw_read_toml_file(path)
|
||||
if (output["success"])
|
||||
return json_decode(output["content"])
|
||||
else
|
||||
CRASH(output["content"])
|
||||
|
||||
#define rustg_raw_toml_encode(value) json_decode(RUSTG_CALL(RUST_G, "toml_encode")(json_encode(value)))
|
||||
|
||||
/proc/rustg_toml_encode(value)
|
||||
var/list/output = rustg_raw_toml_encode(value)
|
||||
if (output["success"])
|
||||
return output["content"]
|
||||
else
|
||||
CRASH(output["content"])
|
||||
var/list/output = rustg_raw_toml_encode(value)
|
||||
if (output["success"])
|
||||
return output["content"]
|
||||
else
|
||||
CRASH(output["content"])
|
||||
|
||||
#define rustg_unzip_download_async(url, unzip_directory) RUSTG_CALL(RUST_G, "unzip_download_async")(url, unzip_directory)
|
||||
#define rustg_unzip_check(job_id) RUSTG_CALL(RUST_G, "unzip_check")("[job_id]")
|
||||
@@ -453,8 +453,8 @@
|
||||
#define rustg_url_decode(text) RUSTG_CALL(RUST_G, "url_decode")(text)
|
||||
|
||||
#ifdef RUSTG_OVERRIDE_BUILTINS
|
||||
#define url_encode(text) rustg_url_encode(text)
|
||||
#define url_decode(text) rustg_url_decode(text)
|
||||
#define url_encode(text) rustg_url_encode(text)
|
||||
#define url_decode(text) rustg_url_decode(text)
|
||||
#endif
|
||||
|
||||
/**
|
||||
@@ -471,4 +471,4 @@
|
||||
* * node_max: maximum amount of nodes in a region
|
||||
*/
|
||||
#define rustg_worley_generate(region_size, threshold, node_per_region_chance, size, node_min, node_max) \
|
||||
RUSTG_CALL(RUST_G, "worley_generate")(region_size, threshold, node_per_region_chance, size, node_min, node_max)
|
||||
RUSTG_CALL(RUST_G, "worley_generate")(region_size, threshold, node_per_region_chance, size, node_min, node_max)
|
||||
|
||||
@@ -4,28 +4,28 @@ GLOBAL_LIST_INIT(cornerdirs, list(NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST))
|
||||
GLOBAL_LIST_INIT(cornerdirsz, list(NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST, NORTH|UP, EAST|UP, WEST|UP, SOUTH|UP, NORTH|DOWN, EAST|DOWN, WEST|DOWN, SOUTH|DOWN))
|
||||
GLOBAL_LIST_INIT(alldirs, list(NORTH, SOUTH, EAST, WEST, NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST))
|
||||
GLOBAL_LIST_INIT(reverse_dir, list( // reverse_dir[dir] = reverse of dir
|
||||
2, 1, 3, 8, 10, 9, 11, 4, 6, 5, 7, 12, 14, 13, 15,
|
||||
2, 1, 3, 8, 10, 9, 11, 4, 6, 5, 7, 12, 14, 13, 15,
|
||||
32, 34, 33, 35, 40, 42, 41, 43, 36, 38, 37, 39, 44, 46, 45, 47,
|
||||
16, 18, 17, 19, 24, 26, 25, 27, 20, 22, 21, 23, 28, 30, 29, 31,
|
||||
48, 50, 49, 51, 56, 58, 57, 59, 52, 54, 53, 55, 60, 62, 61, 63
|
||||
))
|
||||
|
||||
GLOBAL_LIST_INIT(flip_dir, list( // flip_dir[dir] = 180 degree rotation of dir. Unlike reverse_dir, UP remains UP & DOWN remains DOWN.
|
||||
2, 1, 3, 8, 10, 9, 11, 4, 6, 5, 7, 12, 14, 13, 15,
|
||||
2, 1, 3, 8, 10, 9, 11, 4, 6, 5, 7, 12, 14, 13, 15,
|
||||
16, 18, 17, 19, 24, 26, 25, 27, 20, 22, 21, 23, 28, 30, 29, 31, // UP - Same as first line but +16
|
||||
32, 34, 33, 35, 40, 42, 41, 43, 36, 38, 37, 39, 44, 46, 45, 47, // DOWN - Same as first line but +32
|
||||
48, 50, 49, 51, 56, 58, 57, 59, 52, 54, 53, 55, 60, 62, 61, 63 // UP+DOWN - Same as first line but +48
|
||||
))
|
||||
|
||||
GLOBAL_LIST_INIT(cw_dir, list( // cw_dir[dir] = clockwise rotation of dir. Unlike reverse_dir, UP remains UP & DOWN remains DOWN.
|
||||
4, 8, 12, 2, 6, 10, 14, 1, 5, 9, 13, 3, 7, 11, 15,
|
||||
4, 8, 12, 2, 6, 10, 14, 1, 5, 9, 13, 3, 7, 11, 15,
|
||||
16, 20, 24, 28, 18, 22, 26, 30, 17, 21, 25, 19, 29, 23, 27, 31, // UP - Same as first line but +16
|
||||
32, 36, 40, 44, 34, 38, 42, 46, 33, 37, 41, 45, 35, 39, 43, 47, // DOWN - Same as first line but +32
|
||||
48, 52, 56, 40, 50, 54, 58, 62, 49, 53, 57, 61, 51, 55, 59, 63 // UP+DOWN - Same as first line but +48
|
||||
))
|
||||
|
||||
GLOBAL_LIST_INIT(cww_dir, list( // cww_dir[dir] = counter-clockwise rotation of dir. Unlike reverse_dir, UP remains UP & DOWN remains DOWN.
|
||||
8, 4, 12, 1, 9, 5, 13, 2, 10, 6, 14, 3, 11, 7, 15,
|
||||
8, 4, 12, 1, 9, 5, 13, 2, 10, 6, 14, 3, 11, 7, 15,
|
||||
16, 24, 20, 28, 17, 25, 21, 29, 18, 26, 22, 30, 19, 27, 23, 31, // UP - Same as first line but +16
|
||||
32, 40, 36, 44, 33, 41, 37, 45, 34, 42, 38, 46, 35, 43, 39, 47, // DOWN - Same as first line but +32
|
||||
48, 56, 52, 60, 49, 57, 53, 61, 50, 58, 54, 62, 51, 59, 55, 63 // UP+DOWN - Same as first line but +48
|
||||
|
||||
@@ -18,57 +18,57 @@ remember you first need to setup an /icon var like so:
|
||||
GLOBAL_DATUM_INIT(my_icon, /icon, new('iconfile.dmi'))
|
||||
|
||||
icon/ChangeOpacity(amount = 1)
|
||||
A very common operation in DM is to try to make an icon more or less transparent. Making an icon more
|
||||
transparent is usually much easier than making it less so, however. This proc basically is a frontend
|
||||
for MapColors() which can change opacity any way you like, in much the same way that SetIntensity()
|
||||
can make an icon lighter or darker. If amount is 0.5, the opacity of the icon will be cut in half.
|
||||
If amount is 2, opacity is doubled and anything more than half-opaque will become fully opaque.
|
||||
A very common operation in DM is to try to make an icon more or less transparent. Making an icon more
|
||||
transparent is usually much easier than making it less so, however. This proc basically is a frontend
|
||||
for MapColors() which can change opacity any way you like, in much the same way that SetIntensity()
|
||||
can make an icon lighter or darker. If amount is 0.5, the opacity of the icon will be cut in half.
|
||||
If amount is 2, opacity is doubled and anything more than half-opaque will become fully opaque.
|
||||
icon/GrayScale()
|
||||
Converts the icon to grayscale instead of a fully colored icon. Alpha values are left intact.
|
||||
Converts the icon to grayscale instead of a fully colored icon. Alpha values are left intact.
|
||||
icon/ColorTone(tone)
|
||||
Similar to GrayScale(), this proc converts the icon to a range of black -> tone -> white, where tone is an
|
||||
RGB color (its alpha is ignored). This can be used to create a sepia tone or similar effect.
|
||||
See also the global ColorTone() proc.
|
||||
Similar to GrayScale(), this proc converts the icon to a range of black -> tone -> white, where tone is an
|
||||
RGB color (its alpha is ignored). This can be used to create a sepia tone or similar effect.
|
||||
See also the global ColorTone() proc.
|
||||
icon/MinColors(icon)
|
||||
The icon is blended with a second icon where the minimum of each RGB pixel is the result.
|
||||
Transparency may increase, as if the icons were blended with ICON_ADD. You may supply a color in place of an icon.
|
||||
The icon is blended with a second icon where the minimum of each RGB pixel is the result.
|
||||
Transparency may increase, as if the icons were blended with ICON_ADD. You may supply a color in place of an icon.
|
||||
icon/MaxColors(icon)
|
||||
The icon is blended with a second icon where the maximum of each RGB pixel is the result.
|
||||
Opacity may increase, as if the icons were blended with ICON_OR. You may supply a color in place of an icon.
|
||||
The icon is blended with a second icon where the maximum of each RGB pixel is the result.
|
||||
Opacity may increase, as if the icons were blended with ICON_OR. You may supply a color in place of an icon.
|
||||
icon/Opaque(background = "#000000")
|
||||
All alpha values are set to 255 throughout the icon. Transparent pixels become black, or whatever background color you specify.
|
||||
All alpha values are set to 255 throughout the icon. Transparent pixels become black, or whatever background color you specify.
|
||||
icon/BecomeAlphaMask()
|
||||
You can convert a simple grayscale icon into an alpha mask to use with other icons very easily with this proc.
|
||||
The black parts become transparent, the white parts stay white, and anything in between becomes a translucent shade of white.
|
||||
You can convert a simple grayscale icon into an alpha mask to use with other icons very easily with this proc.
|
||||
The black parts become transparent, the white parts stay white, and anything in between becomes a translucent shade of white.
|
||||
icon/AddAlphaMask(mask)
|
||||
The alpha values of the mask icon will be blended with the current icon. Anywhere the mask is opaque,
|
||||
the current icon is untouched. Anywhere the mask is transparent, the current icon becomes transparent.
|
||||
Where the mask is translucent, the current icon becomes more transparent.
|
||||
The alpha values of the mask icon will be blended with the current icon. Anywhere the mask is opaque,
|
||||
the current icon is untouched. Anywhere the mask is transparent, the current icon becomes transparent.
|
||||
Where the mask is translucent, the current icon becomes more transparent.
|
||||
icon/UseAlphaMask(mask, mode)
|
||||
Sometimes you may want to take the alpha values from one icon and use them on a different icon.
|
||||
This proc will do that. Just supply the icon whose alpha mask you want to use, and src will change
|
||||
so it has the same colors as before but uses the mask for opacity.
|
||||
Sometimes you may want to take the alpha values from one icon and use them on a different icon.
|
||||
This proc will do that. Just supply the icon whose alpha mask you want to use, and src will change
|
||||
so it has the same colors as before but uses the mask for opacity.
|
||||
|
||||
COLOR MANAGEMENT AND HSV
|
||||
|
||||
RGB isn't the only way to represent color. Sometimes it's more useful to work with a model called HSV, which stands for hue, saturation, and value.
|
||||
|
||||
* The hue of a color describes where it is along the color wheel. It goes from red to yellow to green to
|
||||
cyan to blue to magenta and back to red.
|
||||
* The saturation of a color is how much color is in it. A color with low saturation will be more gray,
|
||||
and with no saturation at all it is a shade of gray.
|
||||
* The value of a color determines how bright it is. A high-value color is vivid, moderate value is dark,
|
||||
and no value at all is black.
|
||||
* The hue of a color describes where it is along the color wheel. It goes from red to yellow to green to
|
||||
cyan to blue to magenta and back to red.
|
||||
* The saturation of a color is how much color is in it. A color with low saturation will be more gray,
|
||||
and with no saturation at all it is a shade of gray.
|
||||
* The value of a color determines how bright it is. A high-value color is vivid, moderate value is dark,
|
||||
and no value at all is black.
|
||||
|
||||
Just as BYOND uses "#rrggbb" to represent RGB values, a similar format is used for HSV: "#hhhssvv". The hue is three
|
||||
hex digits because it ranges from 0 to 0x5FF.
|
||||
|
||||
* 0 to 0xFF - red to yellow
|
||||
* 0x100 to 0x1FF - yellow to green
|
||||
* 0x200 to 0x2FF - green to cyan
|
||||
* 0x300 to 0x3FF - cyan to blue
|
||||
* 0x400 to 0x4FF - blue to magenta
|
||||
* 0x500 to 0x5FF - magenta to red
|
||||
* 0 to 0xFF - red to yellow
|
||||
* 0x100 to 0x1FF - yellow to green
|
||||
* 0x200 to 0x2FF - green to cyan
|
||||
* 0x300 to 0x3FF - cyan to blue
|
||||
* 0x400 to 0x4FF - blue to magenta
|
||||
* 0x500 to 0x5FF - magenta to red
|
||||
|
||||
Knowing this, you can figure out that red is "#000ffff" in HSV format, which is hue 0 (red), saturation 255 (as colorful as possible),
|
||||
value 255 (as bright as possible). Green is "#200ffff" and blue is "#400ffff".
|
||||
@@ -78,42 +78,42 @@ More than one HSV color can match the same RGB color.
|
||||
Here are some procs you can use for color management:
|
||||
|
||||
ReadRGB(rgb)
|
||||
Takes an RGB string like "#ffaa55" and converts it to a list such as list(255,170,85). If an RGBA format is used
|
||||
that includes alpha, the list will have a fourth item for the alpha value.
|
||||
Takes an RGB string like "#ffaa55" and converts it to a list such as list(255,170,85). If an RGBA format is used
|
||||
that includes alpha, the list will have a fourth item for the alpha value.
|
||||
hsv(hue, sat, val, apha)
|
||||
Counterpart to rgb(), this takes the values you input and converts them to a string in "#hhhssvv" or "#hhhssvvaa"
|
||||
format. Alpha is not included in the result if null.
|
||||
Counterpart to rgb(), this takes the values you input and converts them to a string in "#hhhssvv" or "#hhhssvvaa"
|
||||
format. Alpha is not included in the result if null.
|
||||
ReadHSV(rgb)
|
||||
Takes an HSV string like "#100FF80" and converts it to a list such as list(256,255,128). If an HSVA format is used that
|
||||
includes alpha, the list will have a fourth item for the alpha value.
|
||||
Takes an HSV string like "#100FF80" and converts it to a list such as list(256,255,128). If an HSVA format is used that
|
||||
includes alpha, the list will have a fourth item for the alpha value.
|
||||
RGBtoHSV(rgb)
|
||||
Takes an RGB or RGBA string like "#ffaa55" and converts it into an HSV or HSVA color such as "#080aaff".
|
||||
Takes an RGB or RGBA string like "#ffaa55" and converts it into an HSV or HSVA color such as "#080aaff".
|
||||
HSVtoRGB(hsv)
|
||||
Takes an HSV or HSVA string like "#080aaff" and converts it into an RGB or RGBA color such as "#ff55aa".
|
||||
Takes an HSV or HSVA string like "#080aaff" and converts it into an RGB or RGBA color such as "#ff55aa".
|
||||
BlendRGB(rgb1, rgb2, amount)
|
||||
Blends between two RGB or RGBA colors using regular RGB blending. If amount is 0, the first color is the result;
|
||||
if 1, the second color is the result. 0.5 produces an average of the two. Values outside the 0 to 1 range are allowed as well.
|
||||
The returned value is an RGB or RGBA color.
|
||||
Blends between two RGB or RGBA colors using regular RGB blending. If amount is 0, the first color is the result;
|
||||
if 1, the second color is the result. 0.5 produces an average of the two. Values outside the 0 to 1 range are allowed as well.
|
||||
The returned value is an RGB or RGBA color.
|
||||
BlendHSV(hsv1, hsv2, amount)
|
||||
Blends between two HSV or HSVA colors using HSV blending, which tends to produce nicer results than regular RGB
|
||||
blending because the brightness of the color is left intact. If amount is 0, the first color is the result; if 1,
|
||||
the second color is the result. 0.5 produces an average of the two. Values outside the 0 to 1 range are allowed as well.
|
||||
The returned value is an HSV or HSVA color.
|
||||
Blends between two HSV or HSVA colors using HSV blending, which tends to produce nicer results than regular RGB
|
||||
blending because the brightness of the color is left intact. If amount is 0, the first color is the result; if 1,
|
||||
the second color is the result. 0.5 produces an average of the two. Values outside the 0 to 1 range are allowed as well.
|
||||
The returned value is an HSV or HSVA color.
|
||||
BlendRGBasHSV(rgb1, rgb2, amount)
|
||||
Like BlendHSV(), but the colors used and the return value are RGB or RGBA colors. The blending is done in HSV form.
|
||||
Like BlendHSV(), but the colors used and the return value are RGB or RGBA colors. The blending is done in HSV form.
|
||||
HueToAngle(hue)
|
||||
Converts a hue to an angle range of 0 to 360. Angle 0 is red, 120 is green, and 240 is blue.
|
||||
Converts a hue to an angle range of 0 to 360. Angle 0 is red, 120 is green, and 240 is blue.
|
||||
AngleToHue(hue)
|
||||
Converts an angle to a hue in the valid range.
|
||||
Converts an angle to a hue in the valid range.
|
||||
RotateHue(hsv, angle)
|
||||
Takes an HSV or HSVA value and rotates the hue forward through red, green, and blue by an angle from 0 to 360.
|
||||
(Rotating red by 60° produces yellow.) The result is another HSV or HSVA color with the same saturation and value
|
||||
as the original, but a different hue.
|
||||
Takes an HSV or HSVA value and rotates the hue forward through red, green, and blue by an angle from 0 to 360.
|
||||
(Rotating red by 60° produces yellow.) The result is another HSV or HSVA color with the same saturation and value
|
||||
as the original, but a different hue.
|
||||
GrayScale(rgb)
|
||||
Takes an RGB or RGBA color and converts it to grayscale. Returns an RGB or RGBA string.
|
||||
Takes an RGB or RGBA color and converts it to grayscale. Returns an RGB or RGBA string.
|
||||
ColorTone(rgb, tone)
|
||||
Similar to GrayScale(), this proc converts an RGB or RGBA color to a range of black -> tone -> white instead of
|
||||
using strict shades of gray. The tone value is an RGB color; any alpha value is ignored.
|
||||
Similar to GrayScale(), this proc converts an RGB or RGBA color to a range of black -> tone -> white instead of
|
||||
using strict shades of gray. The tone value is an RGB color; any alpha value is ignored.
|
||||
*/
|
||||
|
||||
/*
|
||||
|
||||
+15
-15
@@ -504,21 +504,21 @@
|
||||
. = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S16)
|
||||
if (l-i & 0x20)
|
||||
. = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
|
||||
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S16, S16)
|
||||
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S16, S16)
|
||||
if (l-i & 0x40)
|
||||
. = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
|
||||
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
|
||||
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
|
||||
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S64)
|
||||
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
|
||||
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
|
||||
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S64)
|
||||
while (l > i) // Chomp through the rest of the list, 128 elements at a time.
|
||||
. = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
|
||||
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
|
||||
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
|
||||
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
|
||||
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
|
||||
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
|
||||
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
|
||||
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S64, S64)
|
||||
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
|
||||
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
|
||||
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
|
||||
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
|
||||
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
|
||||
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
|
||||
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S64, S64)
|
||||
|
||||
#undef S64
|
||||
#undef S16
|
||||
@@ -547,12 +547,12 @@
|
||||
. = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S16, S16)
|
||||
if (l-i & 0x40)
|
||||
. = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
|
||||
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S64)
|
||||
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S64)
|
||||
while (l > i) // Chomp through the rest of the list, 128 elements at a time.
|
||||
. = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
|
||||
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
|
||||
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
|
||||
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S64, S64)
|
||||
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
|
||||
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
|
||||
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S64, S64)
|
||||
|
||||
#undef S64
|
||||
#undef S16
|
||||
|
||||
+11
-11
@@ -9,10 +9,10 @@
|
||||
|
||||
//supposedly the fastest way to do this according to https://gist.github.com/Giacom/be635398926bb463b42a
|
||||
#define RANGE_TURFS(RADIUS, CENTER) \
|
||||
block( \
|
||||
locate(max(CENTER.x-(RADIUS),1), max(CENTER.y-(RADIUS),1), CENTER.z), \
|
||||
locate(min(CENTER.x+(RADIUS),world.maxx), min(CENTER.y+(RADIUS),world.maxy), CENTER.z) \
|
||||
)
|
||||
block( \
|
||||
locate(max(CENTER.x-(RADIUS),1), max(CENTER.y-(RADIUS),1), CENTER.z), \
|
||||
locate(min(CENTER.x+(RADIUS),world.maxx), min(CENTER.y+(RADIUS),world.maxy), CENTER.z) \
|
||||
)
|
||||
|
||||
//Inverts the colour of an HTML string
|
||||
/proc/invertHTML(HTMLstring)
|
||||
@@ -566,13 +566,13 @@ Turf and target are seperate in case you want to teleport some distance from a t
|
||||
|
||||
//returns random gauss number
|
||||
/proc/GaussRand(var/sigma)
|
||||
var/x,y,rsq
|
||||
do
|
||||
x=2*rand()-1
|
||||
y=2*rand()-1
|
||||
rsq=x*x+y*y
|
||||
while(rsq>1 || !rsq)
|
||||
return sigma*y*sqrt(-2*log(rsq)/rsq)
|
||||
var/x,y,rsq
|
||||
do
|
||||
x=2*rand()-1
|
||||
y=2*rand()-1
|
||||
rsq=x*x+y*y
|
||||
while(rsq>1 || !rsq)
|
||||
return sigma*y*sqrt(-2*log(rsq)/rsq)
|
||||
|
||||
//returns random gauss number, rounded to 'roundto'
|
||||
/proc/GaussRandRound(var/sigma,var/roundto)
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
/obj/screen/ai/multicam/Click()
|
||||
if(..())
|
||||
return
|
||||
var/mob/living/silicon/ai/AI = usr
|
||||
AI.toggle_multicam()
|
||||
if(..())
|
||||
return
|
||||
var/mob/living/silicon/ai/AI = usr
|
||||
AI.toggle_multicam()
|
||||
|
||||
/obj/screen/ai/add_multicam/Click()
|
||||
if(..())
|
||||
return
|
||||
var/mob/living/silicon/ai/AI = usr
|
||||
AI.drop_new_multicam()
|
||||
if(..())
|
||||
return
|
||||
var/mob/living/silicon/ai/AI = usr
|
||||
AI.drop_new_multicam()
|
||||
|
||||
/obj/screen/ai/up/Click()
|
||||
var/mob/living/silicon/ai/AI = usr
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
// Specific types
|
||||
/datum/mini_hud/mapper
|
||||
var/obj/item/mapping_unit/owner
|
||||
var/obj/item/mapping_unit/owner
|
||||
|
||||
/datum/mini_hud/mapper/New(var/datum/hud/other, owner)
|
||||
src.owner = owner
|
||||
screenobjs = list(new /obj/screen/movable/mapper_holder(null, owner))
|
||||
..()
|
||||
src.owner = owner
|
||||
screenobjs = list(new /obj/screen/movable/mapper_holder(null, owner))
|
||||
..()
|
||||
|
||||
/datum/mini_hud/mapper/Destroy()
|
||||
owner?.hud_item = null
|
||||
owner?.hud_datum = null
|
||||
return ..()
|
||||
owner?.hud_item = null
|
||||
owner?.hud_datum = null
|
||||
return ..()
|
||||
|
||||
@@ -27,9 +27,9 @@
|
||||
icon_state = "arproj"
|
||||
|
||||
/obj/screen/nifsc/arproj/Click()
|
||||
..()
|
||||
var/mob/living/carbon/brain/caught_soul/CS = usr
|
||||
CS.ar_project()
|
||||
..()
|
||||
var/mob/living/carbon/brain/caught_soul/CS = usr
|
||||
CS.ar_project()
|
||||
|
||||
/obj/screen/nifsc/jumptoowner
|
||||
name = "Jump back to host"
|
||||
|
||||
@@ -1,63 +1,63 @@
|
||||
/*
|
||||
HOW IT WORKS
|
||||
HOW IT WORKS
|
||||
|
||||
The radio_controller is a global object maintaining all radio transmissions, think about it as about "ether".
|
||||
Note that walkie-talkie, intercoms and headsets handle transmission using nonstandard way.
|
||||
procs:
|
||||
The radio_controller is a global object maintaining all radio transmissions, think about it as about "ether".
|
||||
Note that walkie-talkie, intercoms and headsets handle transmission using nonstandard way.
|
||||
procs:
|
||||
|
||||
add_object(obj/device as obj, var/new_frequency as num, var/radio_filter as text|null = null)
|
||||
Adds listening object.
|
||||
parameters:
|
||||
device - device receiving signals, must have proc receive_signal (see description below).
|
||||
one device may listen several frequencies, but not same frequency twice.
|
||||
new_frequency - see possibly frequencies below;
|
||||
radio_filter - thing for optimization. Optional, but recommended.
|
||||
All filters should be consolidated in this file, see defines later.
|
||||
Device without listening filter will receive all signals (on specified frequency).
|
||||
Device with filter will receive any signals sent without filter.
|
||||
Device with filter will not receive any signals sent with different filter.
|
||||
returns:
|
||||
Reference to frequency object.
|
||||
add_object(obj/device as obj, var/new_frequency as num, var/radio_filter as text|null = null)
|
||||
Adds listening object.
|
||||
parameters:
|
||||
device - device receiving signals, must have proc receive_signal (see description below).
|
||||
one device may listen several frequencies, but not same frequency twice.
|
||||
new_frequency - see possibly frequencies below;
|
||||
radio_filter - thing for optimization. Optional, but recommended.
|
||||
All filters should be consolidated in this file, see defines later.
|
||||
Device without listening filter will receive all signals (on specified frequency).
|
||||
Device with filter will receive any signals sent without filter.
|
||||
Device with filter will not receive any signals sent with different filter.
|
||||
returns:
|
||||
Reference to frequency object.
|
||||
|
||||
remove_object (obj/device, old_frequency)
|
||||
Obliviously, after calling this proc, device will not receive any signals on old_frequency.
|
||||
Other frequencies will left unaffected.
|
||||
remove_object (obj/device, old_frequency)
|
||||
Obliviously, after calling this proc, device will not receive any signals on old_frequency.
|
||||
Other frequencies will left unaffected.
|
||||
|
||||
return_frequency(var/frequency as num)
|
||||
returns:
|
||||
Reference to frequency object. Use it if you need to send and do not need to listen.
|
||||
return_frequency(var/frequency as num)
|
||||
returns:
|
||||
Reference to frequency object. Use it if you need to send and do not need to listen.
|
||||
|
||||
radio_frequency is a global object maintaining list of devices that listening specific frequency.
|
||||
procs:
|
||||
radio_frequency is a global object maintaining list of devices that listening specific frequency.
|
||||
procs:
|
||||
|
||||
post_signal(obj/source as obj|null, datum/signal/signal, var/radio_filter as text|null = null, var/range as num|null = null)
|
||||
Sends signal to all devices that wants such signal.
|
||||
parameters:
|
||||
source - object, emitted signal. Usually, devices will not receive their own signals.
|
||||
signal - see description below.
|
||||
radio_filter - described above.
|
||||
range - radius of regular byond's square circle on that z-level. null means everywhere, on all z-levels.
|
||||
post_signal(obj/source as obj|null, datum/signal/signal, var/radio_filter as text|null = null, var/range as num|null = null)
|
||||
Sends signal to all devices that wants such signal.
|
||||
parameters:
|
||||
source - object, emitted signal. Usually, devices will not receive their own signals.
|
||||
signal - see description below.
|
||||
radio_filter - described above.
|
||||
range - radius of regular byond's square circle on that z-level. null means everywhere, on all z-levels.
|
||||
|
||||
obj/proc/receive_signal(datum/signal/signal, var/receive_method as num, var/receive_param)
|
||||
Handler from received signals. By default does nothing. Define your own for your object.
|
||||
Avoid of sending signals directly from this proc, use spawn(-1). DO NOT use sleep() here or call procs that sleep please. If you must, use spawn()
|
||||
parameters:
|
||||
signal - see description below. Extract all needed data from the signal before doing sleep(), spawn() or return!
|
||||
receive_method - may be TRANSMISSION_WIRE or TRANSMISSION_RADIO.
|
||||
TRANSMISSION_WIRE is currently unused.
|
||||
receive_param - for TRANSMISSION_RADIO here comes frequency.
|
||||
obj/proc/receive_signal(datum/signal/signal, var/receive_method as num, var/receive_param)
|
||||
Handler from received signals. By default does nothing. Define your own for your object.
|
||||
Avoid of sending signals directly from this proc, use spawn(-1). DO NOT use sleep() here or call procs that sleep please. If you must, use spawn()
|
||||
parameters:
|
||||
signal - see description below. Extract all needed data from the signal before doing sleep(), spawn() or return!
|
||||
receive_method - may be TRANSMISSION_WIRE or TRANSMISSION_RADIO.
|
||||
TRANSMISSION_WIRE is currently unused.
|
||||
receive_param - for TRANSMISSION_RADIO here comes frequency.
|
||||
|
||||
datum/signal
|
||||
vars:
|
||||
source
|
||||
an object that emitted signal. Used for debug and bearing.
|
||||
data
|
||||
list with transmitting data. Usual use pattern:
|
||||
data["msg"] = "hello world"
|
||||
encryption
|
||||
Some number symbolizing "encryption key".
|
||||
Note that game actually do not use any cryptography here.
|
||||
If receiving object don't know right key, it must ignore encrypted signal in its receive_signal.
|
||||
datum/signal
|
||||
vars:
|
||||
source
|
||||
an object that emitted signal. Used for debug and bearing.
|
||||
data
|
||||
list with transmitting data. Usual use pattern:
|
||||
data["msg"] = "hello world"
|
||||
encryption
|
||||
Some number symbolizing "encryption key".
|
||||
Note that game actually do not use any cryptography here.
|
||||
If receiving object don't know right key, it must ignore encrypted signal in its receive_signal.
|
||||
|
||||
*/
|
||||
|
||||
|
||||
@@ -232,11 +232,11 @@ GLOBAL_LIST_INIT(advance_cures, list(
|
||||
severity = "Unknown"
|
||||
|
||||
/datum/disease/advance/proc/GenerateCure(list/properties = list())
|
||||
if(properties && length(properties))
|
||||
var/res = clamp(properties["resistance"] - (length(symptoms) / 2), 1, length(GLOB.advance_cures))
|
||||
cures = list(GLOB.advance_cures[res])
|
||||
cure_text = cures[1]
|
||||
return
|
||||
if(properties && length(properties))
|
||||
var/res = clamp(properties["resistance"] - (length(symptoms) / 2), 1, length(GLOB.advance_cures))
|
||||
cures = list(GLOB.advance_cures[res])
|
||||
cure_text = cures[1]
|
||||
return
|
||||
|
||||
// Randomly generate a symptom, has a chance to lose or gain a symptom.
|
||||
/datum/disease/advance/proc/Evolve(min_level, max_level)
|
||||
|
||||
@@ -16,13 +16,13 @@ Bonus
|
||||
*/
|
||||
|
||||
/datum/symptom/infect_synthetics
|
||||
name = "Synthetic Infection"
|
||||
stealth = 1
|
||||
resistance = 2
|
||||
stage_speed = 0
|
||||
transmittable = 1
|
||||
level = 5
|
||||
severity = 3
|
||||
name = "Synthetic Infection"
|
||||
stealth = 1
|
||||
resistance = 2
|
||||
stage_speed = 0
|
||||
transmittable = 1
|
||||
level = 5
|
||||
severity = 3
|
||||
|
||||
/datum/symptom/infect_synthetics/Start(datum/disease/advance/A)
|
||||
A.infect_synthetics = TRUE
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
/datum/supply_pack/musical/strings
|
||||
contains = list(
|
||||
/obj/item/instrument/violin,
|
||||
/obj/item/instrument/banjo,
|
||||
/obj/item/instrument/guitar,
|
||||
/obj/item/instrument/eguitar,
|
||||
)
|
||||
/obj/item/instrument/violin,
|
||||
/obj/item/instrument/banjo,
|
||||
/obj/item/instrument/guitar,
|
||||
/obj/item/instrument/eguitar,
|
||||
)
|
||||
name = "string instruments"
|
||||
desc = "A set of string instruments."
|
||||
cost = 50
|
||||
@@ -13,14 +13,14 @@
|
||||
|
||||
/datum/supply_pack/musical/wind
|
||||
contains = list(
|
||||
/obj/item/instrument/accordion,
|
||||
/obj/item/instrument/trumpet,
|
||||
/obj/item/instrument/saxophone,
|
||||
/obj/item/instrument/trombone,
|
||||
/obj/item/instrument/recorder,
|
||||
/obj/item/instrument/harmonica,
|
||||
/obj/item/instrument/bikehorn,
|
||||
)
|
||||
/obj/item/instrument/accordion,
|
||||
/obj/item/instrument/trumpet,
|
||||
/obj/item/instrument/saxophone,
|
||||
/obj/item/instrument/trombone,
|
||||
/obj/item/instrument/recorder,
|
||||
/obj/item/instrument/harmonica,
|
||||
/obj/item/instrument/bikehorn,
|
||||
)
|
||||
name = "wind instruments"
|
||||
desc = "A set of wind instruments."
|
||||
cost = 50
|
||||
@@ -29,10 +29,10 @@
|
||||
|
||||
/datum/supply_pack/musical/keys
|
||||
contains = list(
|
||||
/obj/item/instrument/piano_synth,
|
||||
/obj/item/instrument/glockenspiel, // cough
|
||||
/obj/item/instrument/musicalmoth
|
||||
)
|
||||
/obj/item/instrument/piano_synth,
|
||||
/obj/item/instrument/glockenspiel, // cough
|
||||
/obj/item/instrument/musicalmoth
|
||||
)
|
||||
name = "keyed instruments"
|
||||
desc = "A set of keyboard-style instruments."
|
||||
cost = 50
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
/*
|
||||
MODULAR ANTAGONIST SYSTEM
|
||||
MODULAR ANTAGONIST SYSTEM
|
||||
|
||||
Attempts to move all the bullshit snowflake antag tracking code into its own system, which
|
||||
has the added bonus of making the display procs consistent. Still needs work/adjustment/cleanup
|
||||
but should be fairly self-explanatory with a review of the procs. Will supply a few examples
|
||||
of common tasks that the system will be expected to perform below. ~Z
|
||||
Attempts to move all the bullshit snowflake antag tracking code into its own system, which
|
||||
has the added bonus of making the display procs consistent. Still needs work/adjustment/cleanup
|
||||
but should be fairly self-explanatory with a review of the procs. Will supply a few examples
|
||||
of common tasks that the system will be expected to perform below. ~Z
|
||||
|
||||
To use:
|
||||
- Get the appropriate datum via get_antag_data("antagonist id")
|
||||
using the id var of the desired /datum/antagonist ie. var/datum/antagonist/A = get_antag_data("traitor")
|
||||
- Call add_antagonist() on the desired target mind ie. A.add_antagonist(mob.mind)
|
||||
- To ignore protected roles, supply a positive second argument.
|
||||
- To skip equipping with appropriate gear, supply a positive third argument.
|
||||
To use:
|
||||
- Get the appropriate datum via get_antag_data("antagonist id")
|
||||
using the id var of the desired /datum/antagonist ie. var/datum/antagonist/A = get_antag_data("traitor")
|
||||
- Call add_antagonist() on the desired target mind ie. A.add_antagonist(mob.mind)
|
||||
- To ignore protected roles, supply a positive second argument.
|
||||
- To skip equipping with appropriate gear, supply a positive third argument.
|
||||
*/
|
||||
|
||||
// Globals.
|
||||
|
||||
@@ -552,9 +552,9 @@ GLOBAL_DATUM(spoiler_obfuscation_image, /image)
|
||||
cut_overlay(GLOB.spoiler_obfuscation_image)
|
||||
|
||||
/area/proc/flag_check(var/flag, var/match_all = FALSE)
|
||||
if(match_all)
|
||||
return (flags & flag) == flag
|
||||
return flags & flag
|
||||
if(match_all)
|
||||
return (flags & flag) == flag
|
||||
return flags & flag
|
||||
|
||||
// RS Port #658 Start
|
||||
/area/proc/check_phase_shift(var/mob/ourmob)
|
||||
|
||||
+8
-8
@@ -831,14 +831,14 @@
|
||||
GLOBAL_LIST_EMPTY(icon_dimensions)
|
||||
|
||||
/atom/proc/get_oversized_icon_offsets()
|
||||
if (pixel_x == 0 && pixel_y == 0)
|
||||
return list("x" = 0, "y" = 0)
|
||||
var/list/icon_dimensions = get_icon_dimensions(icon)
|
||||
var/icon_width = icon_dimensions["width"]
|
||||
var/icon_height = icon_dimensions["height"]
|
||||
return list(
|
||||
"x" = icon_width > world.icon_size && pixel_x != 0 ? (icon_width - world.icon_size) * 0.5 : 0,
|
||||
"y" = icon_height > world.icon_size /*&& pixel_y != 0*/ ? (icon_height - world.icon_size) * 0.5 : 0, // we don't have pixel_y in use
|
||||
if (pixel_x == 0 && pixel_y == 0)
|
||||
return list("x" = 0, "y" = 0)
|
||||
var/list/icon_dimensions = get_icon_dimensions(icon)
|
||||
var/icon_width = icon_dimensions["width"]
|
||||
var/icon_height = icon_dimensions["height"]
|
||||
return list(
|
||||
"x" = icon_width > world.icon_size && pixel_x != 0 ? (icon_width - world.icon_size) * 0.5 : 0,
|
||||
"y" = icon_height > world.icon_size /*&& pixel_y != 0*/ ? (icon_height - world.icon_size) * 0.5 : 0, // we don't have pixel_y in use
|
||||
)
|
||||
|
||||
/// Returns a list containing the width and height of an icon file
|
||||
|
||||
@@ -253,10 +253,10 @@
|
||||
to_chat(target, "SYSTEM LOG: System re'3RT5°^#COMU@(#$)TED)@$")
|
||||
for(var/i = 0, i < 5, i++)
|
||||
var/temptxt = pick("1101000100101001010001001001",\
|
||||
"0101000100100100000100010010",\
|
||||
"0000010001001010100100111100",\
|
||||
"1010010011110000100101000100",\
|
||||
"0010010100010011010001001010")
|
||||
"0101000100100100000100010010",\
|
||||
"0000010001001010100100111100",\
|
||||
"1010010011110000100101000100",\
|
||||
"0010010100010011010001001010")
|
||||
to_chat(target,temptxt)
|
||||
sleep(5)
|
||||
to_chat(target, "OPERATING KEYCODES RESET. SYSTEM FAILURE. EMERGENCY SHUTDOWN FAILED. SYSTEM FAILURE.")
|
||||
|
||||
@@ -27,14 +27,14 @@
|
||||
dept_time_required = 60
|
||||
|
||||
access = list(access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels,
|
||||
access_teleporter, access_external_airlocks, access_atmospherics, access_emergency_storage, access_eva,
|
||||
access_heads, access_construction,
|
||||
access_ce, access_RC_announce, access_keycard_auth, access_tcomsat, access_ai_upload, access_gateway)
|
||||
access_teleporter, access_external_airlocks, access_atmospherics, access_emergency_storage, access_eva,
|
||||
access_heads, access_construction,
|
||||
access_ce, access_RC_announce, access_keycard_auth, access_tcomsat, access_ai_upload, access_gateway)
|
||||
|
||||
minimal_access = list(access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels,
|
||||
access_teleporter, access_external_airlocks, access_atmospherics, access_emergency_storage, access_eva,
|
||||
access_heads, access_construction,
|
||||
access_ce, access_RC_announce, access_keycard_auth, access_tcomsat, access_ai_upload, access_gateway)
|
||||
access_teleporter, access_external_airlocks, access_atmospherics, access_emergency_storage, access_eva,
|
||||
access_heads, access_construction,
|
||||
access_ce, access_RC_announce, access_keycard_auth, access_tcomsat, access_ai_upload, access_gateway)
|
||||
alt_titles = list(JOB_ALT_HEAD_ENGINEER = /datum/alt_title/head_engineer, JOB_ALT_FOREMAN = /datum/alt_title/foreman, JOB_ALT_MAINTENANCE_MANAGER = /datum/alt_title/maintenance_manager)
|
||||
minimal_player_age = 7
|
||||
|
||||
|
||||
@@ -195,7 +195,7 @@
|
||||
///Will first check based on brain type, then based on species.
|
||||
/datum/job/proc/get_min_age(species_name, brain_type)
|
||||
return minimum_character_age // VOREStation Edit - Minimum character age by rules is 18, return default which is standard for all species
|
||||
//return (brain_type && LAZYACCESS(min_age_by_species, brain_type)) || LAZYACCESS(min_age_by_species, species_name) || minimum_character_age //VOREStation Removal
|
||||
//return (brain_type && LAZYACCESS(min_age_by_species, brain_type)) || LAZYACCESS(min_age_by_species, species_name) || minimum_character_age //VOREStation Removal
|
||||
|
||||
/datum/job/proc/get_ideal_age(species_name, brain_type)
|
||||
return ideal_character_age // VOREStation Edit - Minimum character age by rules is 18, return default which is standard for all species
|
||||
|
||||
@@ -16,13 +16,13 @@
|
||||
req_admin_notify = 1
|
||||
economic_modifier = 15
|
||||
access = list(access_rd, access_heads, access_tox, access_genetics, access_morgue,
|
||||
access_tox_storage, access_teleporter,
|
||||
access_research, access_robotics, access_xenobiology, access_ai_upload, access_tech_storage,
|
||||
access_RC_announce, access_keycard_auth, access_tcomsat, access_xenoarch, access_eva, access_network, access_xenobotany)
|
||||
access_tox_storage, access_teleporter,
|
||||
access_research, access_robotics, access_xenobiology, access_ai_upload, access_tech_storage,
|
||||
access_RC_announce, access_keycard_auth, access_tcomsat, access_xenoarch, access_eva, access_network, access_xenobotany)
|
||||
minimal_access = list(access_rd, access_heads, access_tox, access_genetics, access_morgue,
|
||||
access_tox_storage, access_teleporter,
|
||||
access_research, access_robotics, access_xenobiology, access_ai_upload, access_tech_storage,
|
||||
access_RC_announce, access_keycard_auth, access_tcomsat, access_gateway, access_xenoarch, access_eva, access_network, access_xenobotany)
|
||||
access_tox_storage, access_teleporter,
|
||||
access_research, access_robotics, access_xenobiology, access_ai_upload, access_tech_storage,
|
||||
access_RC_announce, access_keycard_auth, access_tcomsat, access_gateway, access_xenoarch, access_eva, access_network, access_xenobotany)
|
||||
|
||||
minimum_character_age = 25
|
||||
minimal_player_age = 14
|
||||
|
||||
@@ -1,87 +1,87 @@
|
||||
/*
|
||||
Overview:
|
||||
Used to create objects that need a per step proc call. Default definition of 'New()'
|
||||
stores a reference to src machine in global 'machines list'. Default definition
|
||||
of 'Del' removes reference to src machine in global 'machines list'.
|
||||
Used to create objects that need a per step proc call. Default definition of 'New()'
|
||||
stores a reference to src machine in global 'machines list'. Default definition
|
||||
of 'Del' removes reference to src machine in global 'machines list'.
|
||||
|
||||
Class Variables:
|
||||
|
||||
power_init_complete (boolean)
|
||||
Indicates that we have have registered our static power usage with the area.
|
||||
power_init_complete (boolean)
|
||||
Indicates that we have have registered our static power usage with the area.
|
||||
|
||||
use_power (num)
|
||||
current state of auto power use.
|
||||
Possible Values:
|
||||
USE_POWER_OFF:0 -- no auto power use
|
||||
USE_POWER_IDLE:1 -- machine is using power at its idle power level
|
||||
USE_POWER_ACTIVE:2 -- machine is using power at its active power level
|
||||
use_power (num)
|
||||
current state of auto power use.
|
||||
Possible Values:
|
||||
USE_POWER_OFF:0 -- no auto power use
|
||||
USE_POWER_IDLE:1 -- machine is using power at its idle power level
|
||||
USE_POWER_ACTIVE:2 -- machine is using power at its active power level
|
||||
|
||||
active_power_usage (num)
|
||||
Value for the amount of power to use when in active power mode
|
||||
active_power_usage (num)
|
||||
Value for the amount of power to use when in active power mode
|
||||
|
||||
idle_power_usage (num)
|
||||
Value for the amount of power to use when in idle power mode
|
||||
idle_power_usage (num)
|
||||
Value for the amount of power to use when in idle power mode
|
||||
|
||||
power_channel (num)
|
||||
What channel to draw from when drawing power for power mode
|
||||
Possible Values:
|
||||
EQUIP:0 -- Equipment Channel
|
||||
LIGHT:2 -- Lighting Channel
|
||||
ENVIRON:3 -- Environment Channel
|
||||
power_channel (num)
|
||||
What channel to draw from when drawing power for power mode
|
||||
Possible Values:
|
||||
EQUIP:0 -- Equipment Channel
|
||||
LIGHT:2 -- Lighting Channel
|
||||
ENVIRON:3 -- Environment Channel
|
||||
|
||||
component_parts (list)
|
||||
A list of component parts of machine used by frame based machines.
|
||||
component_parts (list)
|
||||
A list of component parts of machine used by frame based machines.
|
||||
|
||||
panel_open (num)
|
||||
Whether the panel is open
|
||||
panel_open (num)
|
||||
Whether the panel is open
|
||||
|
||||
uid (num)
|
||||
Unique id of machine across all machines.
|
||||
uid (num)
|
||||
Unique id of machine across all machines.
|
||||
|
||||
gl_uid (global num)
|
||||
Next uid value in sequence
|
||||
gl_uid (global num)
|
||||
Next uid value in sequence
|
||||
|
||||
stat (bitflag)
|
||||
Machine status bit flags.
|
||||
Possible bit flags:
|
||||
BROKEN:1 -- Machine is broken
|
||||
NOPOWER:2 -- No power is being supplied to machine.
|
||||
POWEROFF:4 -- tbd
|
||||
MAINT:8 -- machine is currently under going maintenance.
|
||||
EMPED:16 -- temporary broken by EMP pulse
|
||||
stat (bitflag)
|
||||
Machine status bit flags.
|
||||
Possible bit flags:
|
||||
BROKEN:1 -- Machine is broken
|
||||
NOPOWER:2 -- No power is being supplied to machine.
|
||||
POWEROFF:4 -- tbd
|
||||
MAINT:8 -- machine is currently under going maintenance.
|
||||
EMPED:16 -- temporary broken by EMP pulse
|
||||
|
||||
Class Procs:
|
||||
New() 'game/machinery/machine.dm'
|
||||
Initialize(mapload) 'game/machinery/machine.dm'
|
||||
|
||||
Destroy() 'game/machinery/machine.dm'
|
||||
Destroy() 'game/machinery/machine.dm'
|
||||
|
||||
get_power_usage() 'game/machinery/machinery_power.dm'
|
||||
Returns the amount of power this machine uses every SSmachines cycle.
|
||||
Default definition uses 'use_power', 'active_power_usage', 'idle_power_usage'
|
||||
get_power_usage() 'game/machinery/machinery_power.dm'
|
||||
Returns the amount of power this machine uses every SSmachines cycle.
|
||||
Default definition uses 'use_power', 'active_power_usage', 'idle_power_usage'
|
||||
|
||||
powered(chan = CURRENT_CHANNEL) 'game/machinery/machinery_power.dm'
|
||||
Checks to see if area that contains the object has power available for power
|
||||
channel given in 'chan'.
|
||||
powered(chan = CURRENT_CHANNEL) 'game/machinery/machinery_power.dm'
|
||||
Checks to see if area that contains the object has power available for power
|
||||
channel given in 'chan'.
|
||||
|
||||
use_power_oneoff(amount, chan=CURRENT_CHANNEL) 'game/machinery/machinery_power.dm'
|
||||
Deducts 'amount' from the power channel 'chan' of the area that contains the object.
|
||||
use_power_oneoff(amount, chan=CURRENT_CHANNEL) 'game/machinery/machinery_power.dm'
|
||||
Deducts 'amount' from the power channel 'chan' of the area that contains the object.
|
||||
|
||||
power_change() 'game/machinery/machinery_power.dm'
|
||||
Called by the area that contains the object when ever that area under goes a
|
||||
power state change (area runs out of power, or area channel is turned off).
|
||||
power_change() 'game/machinery/machinery_power.dm'
|
||||
Called by the area that contains the object when ever that area under goes a
|
||||
power state change (area runs out of power, or area channel is turned off).
|
||||
|
||||
RefreshParts() 'game/machinery/machine.dm'
|
||||
Called to refresh the variables in the machine that are contributed to by parts
|
||||
contained in the component_parts list. (example: glass and material amounts for
|
||||
the autolathe)
|
||||
RefreshParts() 'game/machinery/machine.dm'
|
||||
Called to refresh the variables in the machine that are contributed to by parts
|
||||
contained in the component_parts list. (example: glass and material amounts for
|
||||
the autolathe)
|
||||
|
||||
Default definition does nothing.
|
||||
Default definition does nothing.
|
||||
|
||||
assign_uid() 'game/machinery/machine.dm'
|
||||
Called by machine to assign a value to the uid variable.
|
||||
assign_uid() 'game/machinery/machine.dm'
|
||||
Called by machine to assign a value to the uid variable.
|
||||
|
||||
process() 'game/machinery/machine.dm'
|
||||
Called by the 'master_controller' once per game tick for each machine that is listed in the 'machines' list.
|
||||
process() 'game/machinery/machine.dm'
|
||||
Called by the 'master_controller' once per game tick for each machine that is listed in the 'machines' list.
|
||||
|
||||
|
||||
Compiled by Aygar
|
||||
|
||||
@@ -22,7 +22,7 @@ var/bomb_set
|
||||
var/safety_wire
|
||||
var/timing_wire
|
||||
var/removal_stage = 0 // 0 is no removal, 1 is covers removed, 2 is covers open,
|
||||
// 3 is sealant open, 4 is unwrenched, 5 is removed from bolts.
|
||||
// 3 is sealant open, 4 is unwrenched, 5 is removed from bolts.
|
||||
use_power = USE_POWER_OFF
|
||||
|
||||
/obj/machinery/nuclearbomb/Initialize(mapload)
|
||||
|
||||
@@ -186,9 +186,9 @@
|
||||
playsound(src, 'sound/effects/grillehit.ogg', 50, 1)
|
||||
|
||||
/obj/mecha/combat/fighter/get_step_delay()
|
||||
. = ..()
|
||||
if(get_gravity() && !landing_gear_raised)
|
||||
. += 4
|
||||
. = ..()
|
||||
if(get_gravity() && !landing_gear_raised)
|
||||
. += 4
|
||||
|
||||
/obj/mecha/combat/fighter/handle_equipment_movement()
|
||||
. = ..()
|
||||
|
||||
@@ -1,25 +1,25 @@
|
||||
/obj/item/mecha_parts/mecha_equipment/storage
|
||||
name = "auxillary exosuit storage bay"
|
||||
desc = "An auxillary storage compartment, for attaching to exosuits."
|
||||
icon_state = "mecha_tiler"
|
||||
icon = 'icons/mecha/mecha_equipment_vr.dmi'
|
||||
origin_tech = list(TECH_MATERIAL = 3)
|
||||
range = 0
|
||||
var/storage_added = 5
|
||||
equip_type = EQUIP_SPECIAL
|
||||
name = "auxillary exosuit storage bay"
|
||||
desc = "An auxillary storage compartment, for attaching to exosuits."
|
||||
icon_state = "mecha_tiler"
|
||||
icon = 'icons/mecha/mecha_equipment_vr.dmi'
|
||||
origin_tech = list(TECH_MATERIAL = 3)
|
||||
range = 0
|
||||
var/storage_added = 5
|
||||
equip_type = EQUIP_SPECIAL
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/storage/attach(obj/mecha/M)
|
||||
. = ..()
|
||||
M.cargo_capacity += storage_added
|
||||
. = ..()
|
||||
M.cargo_capacity += storage_added
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/storage/detach()
|
||||
chassis.cargo_capacity -= storage_added
|
||||
..()
|
||||
chassis.cargo_capacity -= storage_added
|
||||
..()
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/storage/bluespace
|
||||
name = "auxillary exosuit storage wormhole"
|
||||
desc = "An auxillary storage wormhole, utilizing a localized rip in bluespace for storage. Interestingly enough, teleport-stable, \
|
||||
despite its blatant disregard for the fabric of reality or reality-adjacency."
|
||||
icon_state = "mecha_phase_array"
|
||||
storage_added = 15
|
||||
origin_tech = list(TECH_MATERIAL = 6, TECH_ENGINEERING = 4, TECH_MAGNET = 4, TECH_POWER = 5, TECH_BLUESPACE = 3)
|
||||
name = "auxillary exosuit storage wormhole"
|
||||
desc = "An auxillary storage wormhole, utilizing a localized rip in bluespace for storage. Interestingly enough, teleport-stable, \
|
||||
despite its blatant disregard for the fabric of reality or reality-adjacency."
|
||||
icon_state = "mecha_phase_array"
|
||||
storage_added = 15
|
||||
origin_tech = list(TECH_MATERIAL = 6, TECH_ENGINEERING = 4, TECH_MAGNET = 4, TECH_POWER = 5, TECH_BLUESPACE = 3)
|
||||
|
||||
@@ -2169,9 +2169,9 @@
|
||||
[js_byjax]
|
||||
[js_dropdowns]
|
||||
function ticker() {
|
||||
setInterval(function(){
|
||||
window.location='byond://?src=\ref[src]&update_content=1';
|
||||
}, 1000);
|
||||
setInterval(function(){
|
||||
window.location='byond://?src=\ref[src]&update_content=1';
|
||||
}, 1000);
|
||||
}
|
||||
|
||||
window.onload = function() {
|
||||
|
||||
@@ -49,8 +49,8 @@
|
||||
set category = "Exosuit Interface"
|
||||
set src = usr.loc
|
||||
var/perspective = input(usr, "Select a perspective type.",
|
||||
"Client perspective",
|
||||
occupant.client.perspective) in list(MOB_PERSPECTIVE,EYE_PERSPECTIVE)
|
||||
"Client perspective",
|
||||
occupant.client.perspective) in list(MOB_PERSPECTIVE,EYE_PERSPECTIVE)
|
||||
to_world("[perspective]")
|
||||
occupant.client.perspective = perspective
|
||||
return
|
||||
|
||||
@@ -157,8 +157,8 @@ var/global/list/image/splatter_cache=list()
|
||||
user.ContractDisease(D)
|
||||
|
||||
/obj/effect/decal/cleanable/blood/splatter
|
||||
random_icon_states = list("mgibbl1", "mgibbl2", "mgibbl3", "mgibbl4", "mgibbl5")
|
||||
amount = 2
|
||||
random_icon_states = list("mgibbl1", "mgibbl2", "mgibbl3", "mgibbl4", "mgibbl5")
|
||||
amount = 2
|
||||
|
||||
/obj/effect/decal/cleanable/blood/drip
|
||||
name = "drips of blood"
|
||||
|
||||
@@ -149,90 +149,90 @@ GLOBAL_LIST_BOILERPLATE(all_pai_cards, /obj/item/paicard)
|
||||
<head>
|
||||
<style>
|
||||
body {
|
||||
margin-top:5px;
|
||||
font-family:Verdana;
|
||||
color:white;
|
||||
font-size:13px;
|
||||
background-image:url('uiBackground.png');
|
||||
background-repeat:repeat-x;
|
||||
background-color:#272727;
|
||||
margin-top:5px;
|
||||
font-family:Verdana;
|
||||
color:white;
|
||||
font-size:13px;
|
||||
background-image:url('uiBackground.png');
|
||||
background-repeat:repeat-x;
|
||||
background-color:#272727;
|
||||
background-position:center top;
|
||||
}
|
||||
table {
|
||||
font-size:13px;
|
||||
margin-left:-2px;
|
||||
font-size:13px;
|
||||
margin-left:-2px;
|
||||
}
|
||||
table.request {
|
||||
border-collapse:collapse;
|
||||
border-collapse:collapse;
|
||||
}
|
||||
table.desc {
|
||||
border-collapse:collapse;
|
||||
font-size:13px;
|
||||
border: 1px solid #161616;
|
||||
width:100%;
|
||||
border-collapse:collapse;
|
||||
font-size:13px;
|
||||
border: 1px solid #161616;
|
||||
width:100%;
|
||||
}
|
||||
table.download {
|
||||
border-collapse:collapse;
|
||||
font-size:13px;
|
||||
border: 1px solid #161616;
|
||||
width:100%;
|
||||
border-collapse:collapse;
|
||||
font-size:13px;
|
||||
border: 1px solid #161616;
|
||||
width:100%;
|
||||
}
|
||||
tr.d0 td, tr.d0 th {
|
||||
background-color: #506070;
|
||||
color: white;
|
||||
background-color: #506070;
|
||||
color: white;
|
||||
}
|
||||
tr.d1 td, tr.d1 th {
|
||||
background-color: #708090;
|
||||
color: white;
|
||||
background-color: #708090;
|
||||
color: white;
|
||||
}
|
||||
tr.d2 td {
|
||||
background-color: #00FF00;
|
||||
color: white;
|
||||
text-align:center;
|
||||
background-color: #00FF00;
|
||||
color: white;
|
||||
text-align:center;
|
||||
}
|
||||
td.button {
|
||||
border: 1px solid #161616;
|
||||
background-color: #40628a;
|
||||
border: 1px solid #161616;
|
||||
background-color: #40628a;
|
||||
}
|
||||
td.button {
|
||||
border: 1px solid #161616;
|
||||
background-color: #40628a;
|
||||
text-align: center;
|
||||
border: 1px solid #161616;
|
||||
background-color: #40628a;
|
||||
text-align: center;
|
||||
}
|
||||
td.button_red {
|
||||
border: 1px solid #161616;
|
||||
background-color: #B04040;
|
||||
text-align: center;
|
||||
border: 1px solid #161616;
|
||||
background-color: #B04040;
|
||||
text-align: center;
|
||||
}
|
||||
td.download {
|
||||
border: 1px solid #161616;
|
||||
background-color: #40628a;
|
||||
text-align: center;
|
||||
border: 1px solid #161616;
|
||||
background-color: #40628a;
|
||||
text-align: center;
|
||||
}
|
||||
th {
|
||||
text-align:left;
|
||||
width:125px;
|
||||
text-align:left;
|
||||
width:125px;
|
||||
}
|
||||
td.request {
|
||||
width:140px;
|
||||
vertical-align:top;
|
||||
width:140px;
|
||||
vertical-align:top;
|
||||
}
|
||||
td.radio {
|
||||
width:90px;
|
||||
vertical-align:top;
|
||||
width:90px;
|
||||
vertical-align:top;
|
||||
}
|
||||
td.request {
|
||||
vertical-align:top;
|
||||
vertical-align:top;
|
||||
}
|
||||
a {
|
||||
color:#4477E0;
|
||||
color:#4477E0;
|
||||
}
|
||||
a.button {
|
||||
color:white;
|
||||
text-decoration: none;
|
||||
color:white;
|
||||
text-decoration: none;
|
||||
}
|
||||
h2 {
|
||||
font-size:15px;
|
||||
font-size:15px;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
@@ -327,7 +327,7 @@ GLOBAL_LIST_BOILERPLATE(all_pai_cards, /obj/item/paicard)
|
||||
else
|
||||
dat += {"
|
||||
"} + span_bold("<font size='3px'>pAI Request Module</font>") + {"<br><br>
|
||||
<p>No personality is installed.</p>
|
||||
<p>No personality is installed.</p>
|
||||
<table>
|
||||
<tr>
|
||||
<td class="button"><a href='byond://?src=\ref[src];request=1' class="button">Request personality</a>
|
||||
|
||||
@@ -211,7 +211,7 @@
|
||||
to_chat(user, span_notice("\The [src]'s frequency is now set to [span_pink(span_bold("AI Private"))]."))
|
||||
//VOREStation Add End
|
||||
/obj/item/radio/intercom/locked
|
||||
var/locked_frequency
|
||||
var/locked_frequency
|
||||
|
||||
/obj/item/radio/intercom/locked/set_frequency(var/frequency)
|
||||
if(frequency == locked_frequency)
|
||||
|
||||
@@ -108,7 +108,7 @@
|
||||
else
|
||||
var/available = get_amount()
|
||||
user.visible_message(span_infoplain(span_bold("\The [user]") + " starts bandaging [M]'s [affecting.name]."), \
|
||||
span_notice("You start bandaging [M]'s [affecting.name]."))
|
||||
span_notice("You start bandaging [M]'s [affecting.name]."))
|
||||
var/used = 0
|
||||
for (var/datum/wound/W in affecting.wounds)
|
||||
if(W.internal)
|
||||
@@ -131,10 +131,10 @@
|
||||
|
||||
if (W.current_stage <= W.max_bleeding_stage)
|
||||
user.visible_message(span_infoplain(span_bold("\The [user]") + " bandages \a [W.desc] on [M]'s [affecting.name]."), \
|
||||
span_notice("You bandage \a [W.desc] on [M]'s [affecting.name]."))
|
||||
span_notice("You bandage \a [W.desc] on [M]'s [affecting.name]."))
|
||||
else
|
||||
user.visible_message(span_infoplain(span_bold("\The [user]") + " places a bandage over \a [W.desc] on [M]'s [affecting.name]."), \
|
||||
span_notice("You place a bandage over \a [W.desc] on [M]'s [affecting.name]."))
|
||||
span_notice("You place a bandage over \a [W.desc] on [M]'s [affecting.name]."))
|
||||
W.bandage()
|
||||
playsound(src, pick(apply_sounds), 25)
|
||||
used++
|
||||
@@ -177,7 +177,7 @@
|
||||
else
|
||||
var/available = get_amount()
|
||||
user.visible_message(span_infoplain(span_bold("\The [user]") + " starts treating [M]'s [affecting.name]."), \
|
||||
span_notice("You start treating [M]'s [affecting.name]."))
|
||||
span_notice("You start treating [M]'s [affecting.name]."))
|
||||
var/used = 0
|
||||
for (var/datum/wound/W in affecting.wounds)
|
||||
if (W.internal)
|
||||
@@ -200,14 +200,14 @@
|
||||
|
||||
if (W.current_stage <= W.max_bleeding_stage)
|
||||
user.visible_message(span_infoplain(span_bold("\The [user]") + " bandages \a [W.desc] on [M]'s [affecting.name]."), \
|
||||
span_notice("You bandage \a [W.desc] on [M]'s [affecting.name]."))
|
||||
span_notice("You bandage \a [W.desc] on [M]'s [affecting.name]."))
|
||||
//H.add_side_effect("Itch")
|
||||
else if (W.damage_type == BRUISE)
|
||||
user.visible_message(span_infoplain(span_bold("\The [user]") + " places a bruise patch over \a [W.desc] on [M]'s [affecting.name]."), \
|
||||
span_notice("You place a bruise patch over \a [W.desc] on [M]'s [affecting.name]."))
|
||||
span_notice("You place a bruise patch over \a [W.desc] on [M]'s [affecting.name]."))
|
||||
else
|
||||
user.visible_message(span_infoplain(span_bold("\The [user]") + " places a bandaid over \a [W.desc] on [M]'s [affecting.name]."), \
|
||||
span_notice("You place a bandaid over \a [W.desc] on [M]'s [affecting.name]."))
|
||||
span_notice("You place a bandaid over \a [W.desc] on [M]'s [affecting.name]."))
|
||||
W.bandage()
|
||||
// W.disinfect() // VOREStation - Tech1 should not disinfect
|
||||
playsound(src, pick(apply_sounds), 25)
|
||||
@@ -250,7 +250,7 @@
|
||||
return 1
|
||||
else
|
||||
user.visible_message(span_infoplain(span_bold("\The [user]") + " starts salving wounds on [M]'s [affecting.name]."), \
|
||||
span_notice("You start salving the wounds on [M]'s [affecting.name].") )
|
||||
span_notice("You start salving the wounds on [M]'s [affecting.name].") )
|
||||
if(!do_mob(user, M, 10, exclusive = TRUE))
|
||||
to_chat(user, span_notice("You must stand still to salve wounds."))
|
||||
return 1
|
||||
@@ -258,7 +258,7 @@
|
||||
to_chat(user, span_warning("The wounds on [M]'s [affecting.name] have already been salved."))
|
||||
return 1
|
||||
user.visible_message(span_notice("[user] salved wounds on [M]'s [affecting.name]."), \
|
||||
span_notice("You salved wounds on [M]'s [affecting.name].") )
|
||||
span_notice("You salved wounds on [M]'s [affecting.name].") )
|
||||
use(1)
|
||||
affecting.salve()
|
||||
playsound(src, pick(apply_sounds), 25)
|
||||
@@ -296,7 +296,7 @@
|
||||
else
|
||||
var/available = get_amount()
|
||||
user.visible_message(span_infoplain(span_bold("\The [user]") + " starts treating [M]'s [affecting.name]."), \
|
||||
span_notice("You start treating [M]'s [affecting.name].") )
|
||||
span_notice("You start treating [M]'s [affecting.name].") )
|
||||
var/used = 0
|
||||
for (var/datum/wound/W in affecting.wounds)
|
||||
if (W.internal)
|
||||
@@ -318,13 +318,13 @@
|
||||
|
||||
if (W.current_stage <= W.max_bleeding_stage)
|
||||
user.visible_message(span_infoplain(span_bold("\The [user]") + " cleans \a [W.desc] on [M]'s [affecting.name] and seals the edges with bioglue."), \
|
||||
span_notice("You clean and seal \a [W.desc] on [M]'s [affecting.name].") )
|
||||
span_notice("You clean and seal \a [W.desc] on [M]'s [affecting.name].") )
|
||||
else if (W.damage_type == BRUISE)
|
||||
user.visible_message(span_infoplain(span_bold("\The [user]") + " places a medical patch over \a [W.desc] on [M]'s [affecting.name]."), \
|
||||
span_notice("You place a medical patch over \a [W.desc] on [M]'s [affecting.name].") )
|
||||
span_notice("You place a medical patch over \a [W.desc] on [M]'s [affecting.name].") )
|
||||
else
|
||||
user.visible_message(span_infoplain(span_bold("\The [user]") + " smears some bioglue over \a [W.desc] on [M]'s [affecting.name]."), \
|
||||
span_notice("You smear some bioglue over \a [W.desc] on [M]'s [affecting.name].") )
|
||||
span_notice("You smear some bioglue over \a [W.desc] on [M]'s [affecting.name].") )
|
||||
W.bandage()
|
||||
W.disinfect()
|
||||
W.heal_damage(heal_brute)
|
||||
@@ -364,7 +364,7 @@
|
||||
return 1
|
||||
else
|
||||
user.visible_message(span_infoplain(span_bold("\The [user]") + " starts salving wounds on [M]'s [affecting.name]."), \
|
||||
span_notice("You start salving the wounds on [M]'s [affecting.name].") )
|
||||
span_notice("You start salving the wounds on [M]'s [affecting.name].") )
|
||||
if(!do_mob(user, M, 10, exclusive = TRUE))
|
||||
to_chat(user, span_notice("You must stand still to salve wounds."))
|
||||
return 1
|
||||
|
||||
@@ -72,11 +72,11 @@
|
||||
icon_state = "whitecane"
|
||||
|
||||
/obj/item/cane/white/attack(mob/M as mob, mob/user as mob)
|
||||
if(user.a_intent == I_HELP)
|
||||
user.visible_message(span_notice("\The [user] has lightly tapped [M] on the ankle with their white cane!"))
|
||||
return TRUE
|
||||
else
|
||||
. = ..()
|
||||
if(user.a_intent == I_HELP)
|
||||
user.visible_message(span_notice("\The [user] has lightly tapped [M] on the ankle with their white cane!"))
|
||||
return TRUE
|
||||
else
|
||||
. = ..()
|
||||
|
||||
|
||||
//Code for Telescopic White Cane writen by Gozulio
|
||||
|
||||
@@ -768,22 +768,22 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
icon_state = "skullzippo"
|
||||
|
||||
/obj/item/flame/lighter/supermatter
|
||||
name = "Hardlight Supermatter Zippo" // Base SM Lighter
|
||||
desc = "State of the Art Supermatter Lighter."
|
||||
description_fluff = "A zippo style lighter with a tiny supermatter sliver held by a hardlight shield. When lighting a cigar, make sure to hover the tip near the sliver, not against it!"
|
||||
icon_state = "SMzippo"
|
||||
item_state = "SMzippo"
|
||||
activation_sound = 'sound/items/zippo_on_alt.ogg'
|
||||
deactivation_sound = 'sound/items/zippo_off.ogg'
|
||||
name = "Hardlight Supermatter Zippo" // Base SM Lighter
|
||||
desc = "State of the Art Supermatter Lighter."
|
||||
description_fluff = "A zippo style lighter with a tiny supermatter sliver held by a hardlight shield. When lighting a cigar, make sure to hover the tip near the sliver, not against it!"
|
||||
icon_state = "SMzippo"
|
||||
item_state = "SMzippo"
|
||||
activation_sound = 'sound/items/zippo_on_alt.ogg'
|
||||
deactivation_sound = 'sound/items/zippo_off.ogg'
|
||||
|
||||
/obj/item/flame/lighter/supermatter/syndismzippo
|
||||
name = "Phoron Supermatter Zippo" // Syndicate SM Lighter
|
||||
desc = "State of the Art Supermatter Lighter."
|
||||
description_fluff = "A red zippo style lighter with a tiny supermatter sliver held by a phoron field."
|
||||
icon_state = "SyndiSMzippo"
|
||||
item_state = "SyndiSMzippo"
|
||||
activation_sound = 'sound/items/zippo_on_alt.ogg'
|
||||
deactivation_sound = 'sound/items/zippo_off.ogg'
|
||||
name = "Phoron Supermatter Zippo" // Syndicate SM Lighter
|
||||
desc = "State of the Art Supermatter Lighter."
|
||||
description_fluff = "A red zippo style lighter with a tiny supermatter sliver held by a phoron field."
|
||||
icon_state = "SyndiSMzippo"
|
||||
item_state = "SyndiSMzippo"
|
||||
activation_sound = 'sound/items/zippo_on_alt.ogg'
|
||||
deactivation_sound = 'sound/items/zippo_off.ogg'
|
||||
|
||||
/obj/item/flame/lighter/supermatter/expsmzippo
|
||||
name = "Experimental SM Lighter" // Dangerous WIP (admin/event only ATM)
|
||||
|
||||
@@ -57,30 +57,30 @@
|
||||
. = ..()
|
||||
dat = {"
|
||||
<html>
|
||||
<html>
|
||||
<head>
|
||||
<style>
|
||||
h1 {font-size: 23px; margin: 15px 0px 5px; text-align: center;}
|
||||
h2 {font-size: 20px; margin: 15px 0px 5px;}
|
||||
h3 {font-size: 18px; margin: 15px 0px 5px;}
|
||||
<html>
|
||||
<head>
|
||||
<style>
|
||||
h1 {font-size: 23px; margin: 15px 0px 5px; text-align: center;}
|
||||
h2 {font-size: 20px; margin: 15px 0px 5px;}
|
||||
h3 {font-size: 18px; margin: 15px 0px 5px;}
|
||||
h4 {font-size: 14px; margin: 15px 0px 5px;}
|
||||
h5 {font-size: 10px; margin: 15px 0px 5px; text-align: center;}
|
||||
li {margin: 2px 0px 2px 15px;}
|
||||
ul {margin: 5px; padding: 0px;}
|
||||
ol {margin: 5px; padding: 0px 15px;}
|
||||
body {font-size: 13px; font-family: Garamond;}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<center><h1>Food for Dummies 2</h1></center>
|
||||
li {margin: 2px 0px 2px 15px;}
|
||||
ul {margin: 5px; padding: 0px;}
|
||||
ol {margin: 5px; padding: 0px 15px;}
|
||||
body {font-size: 13px; font-family: Garamond;}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<center><h1>Food for Dummies 2</h1></center>
|
||||
<h5>Penned by Ali Big</h5>
|
||||
<p><b>Hello Newbie</b>, congratz on deciding to make food! This guide assumes you know absolutely nothing, so fret not, the information here will help you prepare food for your hungry crewmates!</p>
|
||||
<p><b>Hello Newbie</b>, congratz on deciding to make food! This guide assumes you know absolutely nothing, so fret not, the information here will help you prepare food for your hungry crewmates!</p>
|
||||
<h3>Workspace prep:</h3>
|
||||
This step is simple: merely go to the Grill, Oven, and Fryer and turn everything on so you do not need to wait for them to warm up later; they won't start a fire unless food is left in them unchecked. It is also highly suggested to lay out at least a few Measuring Cups on the counters for ease of use.
|
||||
<h3>Basic ingredient prep:</h3>
|
||||
<h3>Basic ingredient prep:</h3>
|
||||
In the lockers and fridges, you have all your needed supplies for this guide, so look through them and familiarize yourself! This guide will only use ingredients you already have access to, so don't worry about missing items!
|
||||
<h2>Part 1: How to Create Various Essential Ingredients with What You Have</h2>
|
||||
<h3>Dough Creation:</h3>
|
||||
<h2>Part 1: How to Create Various Essential Ingredients with What You Have</h2>
|
||||
<h3>Dough Creation:</h3>
|
||||
The basis for a large quantity of meals. Simply take an Egg, crack it into a Beaker or Measuring Cup, and then add 10 units of Flour to create Dough.
|
||||
<h3>Dough Creation part 2:</h3>
|
||||
With Dough, you can make a wide variety of base ingredients. Flattening it with a Rolling Pin makes Flat Dough. Flat Dough can be cooked in a Microwave for Flatbread, or if one adds Water and Flour in with the Flat Dough in the Microwave you get a Tortilla. Water can be obtained by filling a Cup at the Sink or Soda Machine.
|
||||
@@ -94,7 +94,7 @@
|
||||
Mix Animal protein and Flour, to create Animal Protein grind down some Meat in the grinder, then remove the beaker and add Flour.
|
||||
<h3>Meat Uses:</h3>
|
||||
Full pieces of Meat can be cut for Raw Cutlets, which can be cut once more to make Raw Bacon. Though be sure not to cut all of your meat, plenty of recipes need a full uncut piece!
|
||||
<h2>Part 2: Putting It All Together</h2>
|
||||
<h2>Part 2: Putting It All Together</h2>
|
||||
<p>Now that you know the fundamentals of how to make the base ingredients, here are some fairly easy recipes to put them together into something enjoyable for the crew.</p>
|
||||
<h4>Warning: recipes are upscale able, so you can add multiple of the same ingredients in the same ratio to cook lots of food at once!</h4>
|
||||
<h4>Warning: do not try and cook multiple recipes at once as it is very likely it will default to a different recipe or will just cook the one and just "grill, bake, etc." the rest of the ingredients.</h4>
|
||||
@@ -124,8 +124,8 @@
|
||||
<h4>((The Food Bags in the Chef's Closet are great for moving a lot of food at once!))</h4>
|
||||
<h4>((Stay out of the Freezer if you're Cold Blooded!))</h4>
|
||||
<h4>((The websites linked above are also on our stations wiki. Which is always in need of helping heads to fix it up. The recipes listed on the web link may not be fully accurate so please don't be afraid to pop into the discord wiki channel and lend a hand!))</h4>
|
||||
</body>
|
||||
</html>
|
||||
</body>
|
||||
</html>
|
||||
"}
|
||||
|
||||
//accurate as of 2/23/21
|
||||
@@ -141,207 +141,207 @@
|
||||
. = ..()
|
||||
dat = {"
|
||||
<html>
|
||||
<head>
|
||||
<style>
|
||||
h1 {font-size: 23px; margin: 15px 0px 5px; text-align: center;}
|
||||
h2 {font-size: 20px; margin: 15px 0px 5px;}
|
||||
h3 {font-size: 18px; margin: 15px 0px 5px;}
|
||||
h4 {font-size: 14px; margin: 15px 0px 5px;}
|
||||
h5 {font-size: 10px; margin: 15px 0px 5px; text-align: center;}
|
||||
h6 {font-size: 8px; margin: 15px 0px 5px;}
|
||||
li {margin: 2px 0px 2px 15px;}
|
||||
ul {margin: 5px; padding: 0px;}
|
||||
ol {margin: 5px; padding: 0px 15px;}
|
||||
body {font-size: 13px; font-family: arial;}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>How to Alcohol (And other Drinks)</h1>
|
||||
<h5>Penned by Ali Big</h5>
|
||||
<p>Hello, and congratulations on taking on the admirable, and often thankless task of making Drinks for your fellow crewmates (or perhaps yourself if you hopped the bar, how rude!).</p>
|
||||
<p>This guide will walk through the essentials of drink making... don't worry, it's not too complex! Recipes have been placed at the top for ease of use, but further down there is an actual guide as to how to make drinks, so give it a read if you don't know how, or just want some tips!</p>
|
||||
<h1>Part 0: Recipes Quick Reference (Ordered by strength, non-exhaustive list)</h1>
|
||||
<h1>Low Alcohol:</h1>
|
||||
<h3>Grog :</h3>
|
||||
1 part Rum, 1 part Water
|
||||
<h3>Sui Dream:</h3>
|
||||
1 part Space-Up, 1 part Miss Blue Curacao, 1 part Emeraldine Melon Liquor
|
||||
<h3>Baloon:</h3>
|
||||
1 part Cream, 1 part Miss Blue Curacao
|
||||
<h3>Gin and Tonic:</h3>
|
||||
1 part Gin, 1 part Tonic
|
||||
<h3>Appletini:</h3>
|
||||
2 parts Apple Juice, 1 part Vodka
|
||||
<h1>Medium Alcohol</h1>
|
||||
<h3>Giant Beer:</h3
|
||||
1 part Syndicate Bomb, 1 part Manly Dorf, 1 part Grog
|
||||
<h3>Chrysanthemum:</h3>
|
||||
1 part Sake, 1 part Emeraldine Melon Liquor
|
||||
<h3>Barefoot:</h3>
|
||||
1 part Berry Juice, 1 part Cream, 1 part Vermouth.
|
||||
<h3>Clover Club:</h3>
|
||||
1 part Berry Juice, 1 Part Lemon Juice, 3 parts Gin
|
||||
<h3>Cold Front:</h3>
|
||||
1 part Iced Coffee, 1 part Whiskey, 1 part Mint <b>(Allergy Warning: do not give to any species with less cold tolerance than Teshari, they will die if you do, if unsure do not serve)</b>
|
||||
<h3>Cuba Libre (Often called Rum and Coke):</h3>
|
||||
1 part Space Cola, 2 parts Rum.
|
||||
<h3>Negroni Sbagliato:</h3>
|
||||
1 part Wine, 1 part Bermouth, 1 part Soda Water
|
||||
<h3>Slow Comfortable Screw Against the Wall (Stop giggling!):</h3>
|
||||
3 parts Screwdriver, 1 part Rum, 1 part Whiskey, 1 part Gin
|
||||
<h3>Space Bulldog:</h3>
|
||||
4 parts White Russian, 1 part Cola
|
||||
<h3>Sweet Rush:</h3>
|
||||
1 part Sugar, 1 part Soda Water, 1 part Vodka.
|
||||
<h3>Allies Cocktail:</h3>
|
||||
1 part Classic Martini, 1 part Vodka
|
||||
<h3>Bahama Mama:</h3>
|
||||
1 part Ice, 2 parts Orange Juice, 1 part Lime Juice, 2 parts Rum
|
||||
<h3>Classic Martini:</h3>
|
||||
2 parts Gin, 1 part Vermouth
|
||||
<h3>Daiquiri:</h3>
|
||||
3 Rum, 2 Lime Juice, 1 Sugar
|
||||
<h3>Ginza Mary:</h3>
|
||||
2 part Sake, 2 part Vodka, 1 part Tomato Juice
|
||||
<h3>Irish Cream:</h3>
|
||||
2 parts Whiskey, 1 part Cream
|
||||
<h3>Lotus:</h3>
|
||||
1 part Negroni Sbagliato, 1 part Sweet Rush
|
||||
<h3>Tequila Sunrise:</h3>
|
||||
2 parts Tequila, 1 part Orange Juice
|
||||
<h3>The Manly Dorf:</h3>
|
||||
1 part Beer, 2 parts Ale
|
||||
<h3>Whiskey Cola:</h3>
|
||||
2 parts Whiskey, 1 part Space Cola
|
||||
<h3>Binman Bliss:</h3>
|
||||
1 part Sake, 1 part Tequila
|
||||
<head>
|
||||
<style>
|
||||
h1 {font-size: 23px; margin: 15px 0px 5px; text-align: center;}
|
||||
h2 {font-size: 20px; margin: 15px 0px 5px;}
|
||||
h3 {font-size: 18px; margin: 15px 0px 5px;}
|
||||
h4 {font-size: 14px; margin: 15px 0px 5px;}
|
||||
h5 {font-size: 10px; margin: 15px 0px 5px; text-align: center;}
|
||||
h6 {font-size: 8px; margin: 15px 0px 5px;}
|
||||
li {margin: 2px 0px 2px 15px;}
|
||||
ul {margin: 5px; padding: 0px;}
|
||||
ol {margin: 5px; padding: 0px 15px;}
|
||||
body {font-size: 13px; font-family: arial;}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>How to Alcohol (And other Drinks)</h1>
|
||||
<h5>Penned by Ali Big</h5>
|
||||
<p>Hello, and congratulations on taking on the admirable, and often thankless task of making Drinks for your fellow crewmates (or perhaps yourself if you hopped the bar, how rude!).</p>
|
||||
<p>This guide will walk through the essentials of drink making... don't worry, it's not too complex! Recipes have been placed at the top for ease of use, but further down there is an actual guide as to how to make drinks, so give it a read if you don't know how, or just want some tips!</p>
|
||||
<h1>Part 0: Recipes Quick Reference (Ordered by strength, non-exhaustive list)</h1>
|
||||
<h1>Low Alcohol:</h1>
|
||||
<h3>Grog :</h3>
|
||||
1 part Rum, 1 part Water
|
||||
<h3>Sui Dream:</h3>
|
||||
1 part Space-Up, 1 part Miss Blue Curacao, 1 part Emeraldine Melon Liquor
|
||||
<h3>Baloon:</h3>
|
||||
1 part Cream, 1 part Miss Blue Curacao
|
||||
<h3>Gin and Tonic:</h3>
|
||||
1 part Gin, 1 part Tonic
|
||||
<h3>Appletini:</h3>
|
||||
2 parts Apple Juice, 1 part Vodka
|
||||
<h1>Medium Alcohol</h1>
|
||||
<h3>Giant Beer:</h3
|
||||
1 part Syndicate Bomb, 1 part Manly Dorf, 1 part Grog
|
||||
<h3>Chrysanthemum:</h3>
|
||||
1 part Sake, 1 part Emeraldine Melon Liquor
|
||||
<h3>Barefoot:</h3>
|
||||
1 part Berry Juice, 1 part Cream, 1 part Vermouth.
|
||||
<h3>Clover Club:</h3>
|
||||
1 part Berry Juice, 1 Part Lemon Juice, 3 parts Gin
|
||||
<h3>Cold Front:</h3>
|
||||
1 part Iced Coffee, 1 part Whiskey, 1 part Mint <b>(Allergy Warning: do not give to any species with less cold tolerance than Teshari, they will die if you do, if unsure do not serve)</b>
|
||||
<h3>Cuba Libre (Often called Rum and Coke):</h3>
|
||||
1 part Space Cola, 2 parts Rum.
|
||||
<h3>Negroni Sbagliato:</h3>
|
||||
1 part Wine, 1 part Bermouth, 1 part Soda Water
|
||||
<h3>Slow Comfortable Screw Against the Wall (Stop giggling!):</h3>
|
||||
3 parts Screwdriver, 1 part Rum, 1 part Whiskey, 1 part Gin
|
||||
<h3>Space Bulldog:</h3>
|
||||
4 parts White Russian, 1 part Cola
|
||||
<h3>Sweet Rush:</h3>
|
||||
1 part Sugar, 1 part Soda Water, 1 part Vodka.
|
||||
<h3>Allies Cocktail:</h3>
|
||||
1 part Classic Martini, 1 part Vodka
|
||||
<h3>Bahama Mama:</h3>
|
||||
1 part Ice, 2 parts Orange Juice, 1 part Lime Juice, 2 parts Rum
|
||||
<h3>Classic Martini:</h3>
|
||||
2 parts Gin, 1 part Vermouth
|
||||
<h3>Daiquiri:</h3>
|
||||
3 Rum, 2 Lime Juice, 1 Sugar
|
||||
<h3>Ginza Mary:</h3>
|
||||
2 part Sake, 2 part Vodka, 1 part Tomato Juice
|
||||
<h3>Irish Cream:</h3>
|
||||
2 parts Whiskey, 1 part Cream
|
||||
<h3>Lotus:</h3>
|
||||
1 part Negroni Sbagliato, 1 part Sweet Rush
|
||||
<h3>Tequila Sunrise:</h3>
|
||||
2 parts Tequila, 1 part Orange Juice
|
||||
<h3>The Manly Dorf:</h3>
|
||||
1 part Beer, 2 parts Ale
|
||||
<h3>Whiskey Cola:</h3>
|
||||
2 parts Whiskey, 1 part Space Cola
|
||||
<h3>Binman Bliss:</h3>
|
||||
1 part Sake, 1 part Tequila
|
||||
|
||||
<h1>High Alcohol</h1>
|
||||
<h3>Elysium Facepunch:</h3>
|
||||
1 part Kahlua, 1 part Lemon Juice
|
||||
<h3>Italian Crisis:</h3>
|
||||
1 part Space Bulldog, 1 part Negroni Sbagliato
|
||||
<h3>Whiskey Sour:</h3>
|
||||
2 Whiskey, 1 Lemon Juice, 1 Sugar
|
||||
<h3>Aloe:</h3>
|
||||
1 part Cream, 1 part Watermelon Juice, 1 part Whiskey <b>(in that order)</b>
|
||||
<h3>Andalusia:</h3>
|
||||
1 part Lemon Juice, 1 part Rum, 1 part Whiskey
|
||||
<h3>Black Russian:</h3>
|
||||
2 part Vodka, 1 part Kahlua
|
||||
<h3>Bloody Mary:</h3>
|
||||
3 parts Tomato Juice, 2 part Vodka, 1 part Lime Juice
|
||||
<h3>Brave Bull:</h3>
|
||||
2 parts Tequila, 1 part Kahlua
|
||||
<h3>Irish Car Bomb:</h3>
|
||||
1 part Ale, 1 part Irish Cream
|
||||
<h3>Irish Coffee:</h3>
|
||||
1 parts Irish Cream, 1 parts Coffee
|
||||
<h3>Manhattan:</h3>
|
||||
2 parts Whiskey, 1 part Vermouth
|
||||
<h3>Margarita:</h3>
|
||||
2 parts Tequila, 1 part Lime Juice
|
||||
<h3>Screwdriver:</h3>
|
||||
2 parts Vodka, 1 part Orange Juice
|
||||
<h3>Sex On The Beach:</h3>
|
||||
3 part Orange Juice, 2 part Grenadine Syrup, 1 part Vodka
|
||||
<h3>Vodka and Tonic:</h3>
|
||||
2 parts Vodka, 1 part Tonic
|
||||
<h3>Whiskey Soda:</h3>
|
||||
2 parts Whiskey, 1 part Soda Water
|
||||
<h3>White Russian:</h3>
|
||||
2 Black Russian, 1 part Cream
|
||||
<h3>WND-Garita:</h3>
|
||||
3 Margarita, 2 Mountain Wind, 1 Emeraldine Melon Liquor
|
||||
<h3>Mudslide:</h3>
|
||||
1 Black Russian, 1 Irish Cream
|
||||
<h1>High Alcohol</h1>
|
||||
<h3>Elysium Facepunch:</h3>
|
||||
1 part Kahlua, 1 part Lemon Juice
|
||||
<h3>Italian Crisis:</h3>
|
||||
1 part Space Bulldog, 1 part Negroni Sbagliato
|
||||
<h3>Whiskey Sour:</h3>
|
||||
2 Whiskey, 1 Lemon Juice, 1 Sugar
|
||||
<h3>Aloe:</h3>
|
||||
1 part Cream, 1 part Watermelon Juice, 1 part Whiskey <b>(in that order)</b>
|
||||
<h3>Andalusia:</h3>
|
||||
1 part Lemon Juice, 1 part Rum, 1 part Whiskey
|
||||
<h3>Black Russian:</h3>
|
||||
2 part Vodka, 1 part Kahlua
|
||||
<h3>Bloody Mary:</h3>
|
||||
3 parts Tomato Juice, 2 part Vodka, 1 part Lime Juice
|
||||
<h3>Brave Bull:</h3>
|
||||
2 parts Tequila, 1 part Kahlua
|
||||
<h3>Irish Car Bomb:</h3>
|
||||
1 part Ale, 1 part Irish Cream
|
||||
<h3>Irish Coffee:</h3>
|
||||
1 parts Irish Cream, 1 parts Coffee
|
||||
<h3>Manhattan:</h3>
|
||||
2 parts Whiskey, 1 part Vermouth
|
||||
<h3>Margarita:</h3>
|
||||
2 parts Tequila, 1 part Lime Juice
|
||||
<h3>Screwdriver:</h3>
|
||||
2 parts Vodka, 1 part Orange Juice
|
||||
<h3>Sex On The Beach:</h3>
|
||||
3 part Orange Juice, 2 part Grenadine Syrup, 1 part Vodka
|
||||
<h3>Vodka and Tonic:</h3>
|
||||
2 parts Vodka, 1 part Tonic
|
||||
<h3>Whiskey Soda:</h3>
|
||||
2 parts Whiskey, 1 part Soda Water
|
||||
<h3>White Russian:</h3>
|
||||
2 Black Russian, 1 part Cream
|
||||
<h3>WND-Garita:</h3>
|
||||
3 Margarita, 2 Mountain Wind, 1 Emeraldine Melon Liquor
|
||||
<h3>Mudslide:</h3>
|
||||
1 Black Russian, 1 Irish Cream
|
||||
|
||||
<h1>Very High Alcohol (Serve sparingly unless a patron proves they can handle a lot)</h1>
|
||||
<h3>Anti-Freeze:</h3>
|
||||
1 part Cream, 1 part Ice, 1 parts Vodka <b>(Feels cold but actually warms. Allergy Warning: Do not serve to Teshari or Promethians, or other heat vulnerable species, they will die if you do, if unsure do not serve)</b>
|
||||
<h3>B-52:</h3>
|
||||
1 part Irish Cream, 1 part Cognac, 1 part Kahlua
|
||||
<h3>Long Island Iced Tea:</h3>
|
||||
3 part Cuba Libre, 1 part Vodka, 1 part Gin, 1 part Tequila
|
||||
<h3>Vodka Martini:</h3>
|
||||
2 parts Vodka, 1 part Vermouth
|
||||
<h3>Changeling Sting:</h3>
|
||||
1 part Screwdriver, 1 part Lemon Juice, 1 part Lime Juice
|
||||
<h3>Deathbell:</h3>
|
||||
1 part Anti-Freeze, 1 part Pan-Galactic Gargle Blaster, 1 part Syndicate Bomb <b>(Allergy Warning: Poisonous to Teshari and other heat vulnerable species. Literally explodes Promethians. Metabolizes very quickly so it can kill a liver easily, be very careful with this one.)</b>
|
||||
<h3>Erebus Moonrise:</h3>
|
||||
1 part Whiskey, 1 part Vodka, 1 part Tequila
|
||||
<h3>Pan-Galactic Gargle Blaster:</h3>
|
||||
1 part Gin, 2 part Vodka, 1 part Whiskey, 1 part Cognac, 1 part Lime Juice <b>(Causes halucinations, don't slip it into other drinks you animal)</b>
|
||||
<h3>Syndicate Bomb:</h3>
|
||||
1 part Whiskey Cola, 1 part Beer
|
||||
<h3>Euphoria:</h3>
|
||||
1 part Special Blend Whiskey, 2 part Cognac
|
||||
<h3>Screaming Viking:</h3>
|
||||
Vodka, Vermouth, Lime Juice, Rum, Gin, and Tonic
|
||||
<h6>Good Luck figuring out the order and ratio :)</h6>
|
||||
<h3>Fire Punch:</h3>
|
||||
1 part Sugar, 2 part Rum <b>(Technically the strongest thing you can make, but it metabolizes slowish so it's slightly less dangerous than some others)</b>
|
||||
<h1>Very High Alcohol (Serve sparingly unless a patron proves they can handle a lot)</h1>
|
||||
<h3>Anti-Freeze:</h3>
|
||||
1 part Cream, 1 part Ice, 1 parts Vodka <b>(Feels cold but actually warms. Allergy Warning: Do not serve to Teshari or Promethians, or other heat vulnerable species, they will die if you do, if unsure do not serve)</b>
|
||||
<h3>B-52:</h3>
|
||||
1 part Irish Cream, 1 part Cognac, 1 part Kahlua
|
||||
<h3>Long Island Iced Tea:</h3>
|
||||
3 part Cuba Libre, 1 part Vodka, 1 part Gin, 1 part Tequila
|
||||
<h3>Vodka Martini:</h3>
|
||||
2 parts Vodka, 1 part Vermouth
|
||||
<h3>Changeling Sting:</h3>
|
||||
1 part Screwdriver, 1 part Lemon Juice, 1 part Lime Juice
|
||||
<h3>Deathbell:</h3>
|
||||
1 part Anti-Freeze, 1 part Pan-Galactic Gargle Blaster, 1 part Syndicate Bomb <b>(Allergy Warning: Poisonous to Teshari and other heat vulnerable species. Literally explodes Promethians. Metabolizes very quickly so it can kill a liver easily, be very careful with this one.)</b>
|
||||
<h3>Erebus Moonrise:</h3>
|
||||
1 part Whiskey, 1 part Vodka, 1 part Tequila
|
||||
<h3>Pan-Galactic Gargle Blaster:</h3>
|
||||
1 part Gin, 2 part Vodka, 1 part Whiskey, 1 part Cognac, 1 part Lime Juice <b>(Causes halucinations, don't slip it into other drinks you animal)</b>
|
||||
<h3>Syndicate Bomb:</h3>
|
||||
1 part Whiskey Cola, 1 part Beer
|
||||
<h3>Euphoria:</h3>
|
||||
1 part Special Blend Whiskey, 2 part Cognac
|
||||
<h3>Screaming Viking:</h3>
|
||||
Vodka, Vermouth, Lime Juice, Rum, Gin, and Tonic
|
||||
<h6>Good Luck figuring out the order and ratio :)</h6>
|
||||
<h3>Fire Punch:</h3>
|
||||
1 part Sugar, 2 part Rum <b>(Technically the strongest thing you can make, but it metabolizes slowish so it's slightly less dangerous than some others)</b>
|
||||
|
||||
<h1>Non Alcoholic Drinks</h1>
|
||||
<h3>Appleade:</h3>
|
||||
1 part Apple Juice, 1 part Sugar, 1 part Soda Water
|
||||
<h3>Arnold Palmer:</h3>
|
||||
1 Iced Tea, 1 Lemonade
|
||||
<h3>Berry Cordial:</h3>
|
||||
4 Berry Juice, 1 unit Sugar, 1 Lemon Juice
|
||||
<h3>Berry shake:</h3>
|
||||
1 part Milkshake, 1 part Berry Juice
|
||||
<h3>Brown Star:</h3>
|
||||
2 parts Orange Juice, 1 part Space Cola
|
||||
<h3>Cafe Latte:</h3>
|
||||
1 part Coffee, 1 part Milk
|
||||
<h3>Coffee Milkshake:</h3>
|
||||
1 part Milkshake, 1 part Coffee
|
||||
<h3>Driver's Punch:</h3>
|
||||
1 part Appleade, 1 part Orange Juice, 1 part Mint, 1 part Soda Water
|
||||
<h3>Graveyard:</h3>
|
||||
All 4 Sodas in your Soft Drink Dispenser in equal parts, haha it go woosh.
|
||||
<h3>Grenadine Syrup:</h3>
|
||||
10 parts berry juice, 5 parts Universal Enzyme <b>(Get Enzyme from Kitchen)</b>
|
||||
<h3>Iced Coffee:</h3>
|
||||
1 part Ice, 2 parts Coffee
|
||||
<h3>Kira Special:</h3>
|
||||
1 part Orange Juice, 1 part Lime Juice, 1 part Soda Water
|
||||
<h3>Lemonade:</h3>
|
||||
1 part Lemon juice, 1 part Sugar, 1 part Water
|
||||
<h3>Melonade:</h3>
|
||||
1 part Watermelon Juice, 1 part Sugar, 1 part Soda Water
|
||||
<h3>Milkshake:</h3>
|
||||
1 part Cream, 2 parts Ice, 2 parts Milk
|
||||
<h3>Sweet Tea:</h3>
|
||||
2 parts Ice Tea, 1 part Sugar
|
||||
<p><b>Note:</b> There are many more drinks you can mix, these are just ones using resources you will almost always have available, the Extranet has good websites to check found here: https://wiki.vore-station.net/Guide_to_Food_and_Drink ass well as here: https://vore-station.net/infodump/recipes_drinks.html
|
||||
<h1>Non Alcoholic Drinks</h1>
|
||||
<h3>Appleade:</h3>
|
||||
1 part Apple Juice, 1 part Sugar, 1 part Soda Water
|
||||
<h3>Arnold Palmer:</h3>
|
||||
1 Iced Tea, 1 Lemonade
|
||||
<h3>Berry Cordial:</h3>
|
||||
4 Berry Juice, 1 unit Sugar, 1 Lemon Juice
|
||||
<h3>Berry shake:</h3>
|
||||
1 part Milkshake, 1 part Berry Juice
|
||||
<h3>Brown Star:</h3>
|
||||
2 parts Orange Juice, 1 part Space Cola
|
||||
<h3>Cafe Latte:</h3>
|
||||
1 part Coffee, 1 part Milk
|
||||
<h3>Coffee Milkshake:</h3>
|
||||
1 part Milkshake, 1 part Coffee
|
||||
<h3>Driver's Punch:</h3>
|
||||
1 part Appleade, 1 part Orange Juice, 1 part Mint, 1 part Soda Water
|
||||
<h3>Graveyard:</h3>
|
||||
All 4 Sodas in your Soft Drink Dispenser in equal parts, haha it go woosh.
|
||||
<h3>Grenadine Syrup:</h3>
|
||||
10 parts berry juice, 5 parts Universal Enzyme <b>(Get Enzyme from Kitchen)</b>
|
||||
<h3>Iced Coffee:</h3>
|
||||
1 part Ice, 2 parts Coffee
|
||||
<h3>Kira Special:</h3>
|
||||
1 part Orange Juice, 1 part Lime Juice, 1 part Soda Water
|
||||
<h3>Lemonade:</h3>
|
||||
1 part Lemon juice, 1 part Sugar, 1 part Water
|
||||
<h3>Melonade:</h3>
|
||||
1 part Watermelon Juice, 1 part Sugar, 1 part Soda Water
|
||||
<h3>Milkshake:</h3>
|
||||
1 part Cream, 2 parts Ice, 2 parts Milk
|
||||
<h3>Sweet Tea:</h3>
|
||||
2 parts Ice Tea, 1 part Sugar
|
||||
<p><b>Note:</b> There are many more drinks you can mix, these are just ones using resources you will almost always have available, the Extranet has good websites to check found here: https://wiki.vore-station.net/Guide_to_Food_and_Drink ass well as here: https://vore-station.net/infodump/recipes_drinks.html
|
||||
|
||||
<h1>Part 1: The Basics</h1>
|
||||
<p>First and foremost, making drinks is about understanding measurements. Drinks are measured in units a pint is 60 units, a half pint 30, and ratios of those units can create certain drinks.</p>
|
||||
<p>The ratios of these drinks are denoted in "Parts". For example, Grog is 1 part rum and 1 part water mixed in a container that holds liquid. This means 1 unit of Rum and 1 unit of Water can make Grog, as can 30 units of Rum and 30 units of Water. Ratios aren't picky, if you have 5 units of Rum and 10 of Water in a glass, it will turn as much as possible into Grog, and the rest will remain as water (In this case, 10 units of Grog and 5 units of Water will be in the glass). When mixing drinks, you may accidentally have extra of an ingredient such as in the previous example, but this can easily be rectified by placing the drink in one of the Dispensers, and using the interface at the bottom to remove however many units you put extra, so don't worry about sloppiness as long as you clean up your mistakes!</p>
|
||||
<p>Actually mixing drinks is simple enough, the vast majority of mixing should be done in a Dispenser, it can be done by hand outside of one, but generally you only want to be doing so for when the Dispenser lacks an ingredient to make life easier. Drinks automatically mix when placed into a container together, so you don't have to do anything special, think of it like a chemical reaction, it even bubbles when it works!</p>
|
||||
<h2>Part 2: General Tips/FAQ</h2>
|
||||
<p><b>"I don't have X item for the drink my patron wants."</b> - If it's on the quick reference, you probably do, just be sure to check the Booze-O-Mat if it cannot be found in the dispenser. If it's not in either Dispenser or in the Coffee Dispenser in the Surface 1 Bar (Such as Berry Juice). If you still lack the materials, you may need to ask another department (Cargo, Science, or perhaps Med usually) for a delivery of them.</p>
|
||||
<p><b>"I don't want to run to the Surface 1 Bar every time to make this specific drink."</b> - You don't have to! A good practice as a bartender if you want to make your life easier is to take a screwdriver, use it on the machine, and select the cartridges you want to have in your bar. If you do this you will remove them, and are free to insert them into your own machines, but do be considerate if there are more bartenders around, don't steal their supplies if they need them! Another good practice is to move, or have someone else move the machine up to your bar instead of removing the cartridges, ultimately the choice is yours as to how best set up your bar!</p>
|
||||
<p><b>"How do I deal with a rowdy patron?"</b> - Ask Security for help, just because you have a shotgun doesn't mean you are the law in your bar. Respect procedure!</p>
|
||||
<p><b>"What does the Grinder do?"</b> - What it says on the tin, if you get Iron, Uranium, or something else needed for a drink that isn't already liquefied, you have to grind it down first to add it!</p>
|
||||
<p><b>"Do I have to wear the hat?"</b> - No, but you can if it looks good on you!</p>
|
||||
<p><b>"How do I unlock the good music on the Jukebox?"</b> - Get a Screwdriver and use it on the Jukebox to open the hatch, then use Wirecutters and cut/remend wires until you cut the one that turns the Parental Guidance light off. Beware of shocks (Insulated Gloves Suggested)! Be sure to close it again after.</p>
|
||||
<p><b>"How do I make my drinks look pretty?"</b> - Use the Metamorphic Glasses, though do note some drinks don't look any different even in one.</p>
|
||||
<p><b>"Oh god my patron is convulsing, what do I do?"</b> - Rush them to Medbay. If they're too big to move get a rolling chair from the Library, or get medical staff to come to the Bar.</p>
|
||||
<p><b>"My patron drank too much and is definitely going to start convulsing, what do I do?"</b> - Either rush them to Medbay, or get Medbay to give you pills that neutralize alcohol, it's ok to be the fun police to save a life.</p>
|
||||
<p><b>"Nobody wants to stay at my bar!"</b> - Try adopting a gimmick to spruce things up! Everyone's will be different, but doing something fun is a good way to attract customers. Creating your own unique mixes is another fun way to distinguish yourself.</p>
|
||||
<p><b>"I don't like the way the bar looks with the lights dimmed/I don't like the way the bar looks with the lights bright!"</b> - Enable or disable the night lighting on the APC by the bar then!</p>
|
||||
<p><b>"A patron said they don't drink, woe is me, my job is now useless!"</b> - Have you tried offering them a non-alcoholic drink? Or just talking to them? As long as you're providing a good time, you're still doing great!</p>
|
||||
<p><b>"Somebody messed with a drink I left lying out on the counter, I think it's been spiked!"</b> - Don't leave drinks lying on the counter. Not only is it a spiking hazzard, but inevitably somebody is gonna try to chug them all. If you want to do a pretty display, make it non alcoholic, or on the back bar counter out of easy reach!</p>
|
||||
<p><b>"My patrons are all hungry because we have no Chef!"</b> - Well, you have access to the Kitchen if you feel like trying to solve that, I have a guide for that there too!</p>
|
||||
<p><b>"I feel like a hamster in a wheel, running hopelessly but never quite getting anywhere. No matter what I do, things just don't seem to change, I don't seem to change, and I worry, that maybe... they won't."</b> - Try drinking some of your own booze until that feeling goes away.</p>
|
||||
<h2>Part 3: Closing Remarks</h2>
|
||||
<p>This all may seem daunting at a glance; so many recipes to learn, and a "lot" to keep in mind. But really it's not - tending the Bar is mostly about going with the flow of things and providing a good times, and drinks just provide liquid courage to make a good time easier. Take a deep breath if you ever feel overwhelmed, and handle one order at a time. You can do it! Don't feel the need to know every recipe, just learn your favorites and go from there; the rest is here or online if someone asks for it! If somebody asks you to give them anything without a specific request, don't panic: evalulate their likes and tolerance level, and try your best to give them something nice!</p>
|
||||
</body>
|
||||
</html> "}
|
||||
<h1>Part 1: The Basics</h1>
|
||||
<p>First and foremost, making drinks is about understanding measurements. Drinks are measured in units a pint is 60 units, a half pint 30, and ratios of those units can create certain drinks.</p>
|
||||
<p>The ratios of these drinks are denoted in "Parts". For example, Grog is 1 part rum and 1 part water mixed in a container that holds liquid. This means 1 unit of Rum and 1 unit of Water can make Grog, as can 30 units of Rum and 30 units of Water. Ratios aren't picky, if you have 5 units of Rum and 10 of Water in a glass, it will turn as much as possible into Grog, and the rest will remain as water (In this case, 10 units of Grog and 5 units of Water will be in the glass). When mixing drinks, you may accidentally have extra of an ingredient such as in the previous example, but this can easily be rectified by placing the drink in one of the Dispensers, and using the interface at the bottom to remove however many units you put extra, so don't worry about sloppiness as long as you clean up your mistakes!</p>
|
||||
<p>Actually mixing drinks is simple enough, the vast majority of mixing should be done in a Dispenser, it can be done by hand outside of one, but generally you only want to be doing so for when the Dispenser lacks an ingredient to make life easier. Drinks automatically mix when placed into a container together, so you don't have to do anything special, think of it like a chemical reaction, it even bubbles when it works!</p>
|
||||
<h2>Part 2: General Tips/FAQ</h2>
|
||||
<p><b>"I don't have X item for the drink my patron wants."</b> - If it's on the quick reference, you probably do, just be sure to check the Booze-O-Mat if it cannot be found in the dispenser. If it's not in either Dispenser or in the Coffee Dispenser in the Surface 1 Bar (Such as Berry Juice). If you still lack the materials, you may need to ask another department (Cargo, Science, or perhaps Med usually) for a delivery of them.</p>
|
||||
<p><b>"I don't want to run to the Surface 1 Bar every time to make this specific drink."</b> - You don't have to! A good practice as a bartender if you want to make your life easier is to take a screwdriver, use it on the machine, and select the cartridges you want to have in your bar. If you do this you will remove them, and are free to insert them into your own machines, but do be considerate if there are more bartenders around, don't steal their supplies if they need them! Another good practice is to move, or have someone else move the machine up to your bar instead of removing the cartridges, ultimately the choice is yours as to how best set up your bar!</p>
|
||||
<p><b>"How do I deal with a rowdy patron?"</b> - Ask Security for help, just because you have a shotgun doesn't mean you are the law in your bar. Respect procedure!</p>
|
||||
<p><b>"What does the Grinder do?"</b> - What it says on the tin, if you get Iron, Uranium, or something else needed for a drink that isn't already liquefied, you have to grind it down first to add it!</p>
|
||||
<p><b>"Do I have to wear the hat?"</b> - No, but you can if it looks good on you!</p>
|
||||
<p><b>"How do I unlock the good music on the Jukebox?"</b> - Get a Screwdriver and use it on the Jukebox to open the hatch, then use Wirecutters and cut/remend wires until you cut the one that turns the Parental Guidance light off. Beware of shocks (Insulated Gloves Suggested)! Be sure to close it again after.</p>
|
||||
<p><b>"How do I make my drinks look pretty?"</b> - Use the Metamorphic Glasses, though do note some drinks don't look any different even in one.</p>
|
||||
<p><b>"Oh god my patron is convulsing, what do I do?"</b> - Rush them to Medbay. If they're too big to move get a rolling chair from the Library, or get medical staff to come to the Bar.</p>
|
||||
<p><b>"My patron drank too much and is definitely going to start convulsing, what do I do?"</b> - Either rush them to Medbay, or get Medbay to give you pills that neutralize alcohol, it's ok to be the fun police to save a life.</p>
|
||||
<p><b>"Nobody wants to stay at my bar!"</b> - Try adopting a gimmick to spruce things up! Everyone's will be different, but doing something fun is a good way to attract customers. Creating your own unique mixes is another fun way to distinguish yourself.</p>
|
||||
<p><b>"I don't like the way the bar looks with the lights dimmed/I don't like the way the bar looks with the lights bright!"</b> - Enable or disable the night lighting on the APC by the bar then!</p>
|
||||
<p><b>"A patron said they don't drink, woe is me, my job is now useless!"</b> - Have you tried offering them a non-alcoholic drink? Or just talking to them? As long as you're providing a good time, you're still doing great!</p>
|
||||
<p><b>"Somebody messed with a drink I left lying out on the counter, I think it's been spiked!"</b> - Don't leave drinks lying on the counter. Not only is it a spiking hazzard, but inevitably somebody is gonna try to chug them all. If you want to do a pretty display, make it non alcoholic, or on the back bar counter out of easy reach!</p>
|
||||
<p><b>"My patrons are all hungry because we have no Chef!"</b> - Well, you have access to the Kitchen if you feel like trying to solve that, I have a guide for that there too!</p>
|
||||
<p><b>"I feel like a hamster in a wheel, running hopelessly but never quite getting anywhere. No matter what I do, things just don't seem to change, I don't seem to change, and I worry, that maybe... they won't."</b> - Try drinking some of your own booze until that feeling goes away.</p>
|
||||
<h2>Part 3: Closing Remarks</h2>
|
||||
<p>This all may seem daunting at a glance; so many recipes to learn, and a "lot" to keep in mind. But really it's not - tending the Bar is mostly about going with the flow of things and providing a good times, and drinks just provide liquid courage to make a good time easier. Take a deep breath if you ever feel overwhelmed, and handle one order at a time. You can do it! Don't feel the need to know every recipe, just learn your favorites and go from there; the rest is here or online if someone asks for it! If somebody asks you to give them anything without a specific request, don't panic: evalulate their likes and tolerance level, and try your best to give them something nice!</p>
|
||||
</body>
|
||||
</html> "}
|
||||
|
||||
/obj/item/book/manual/rotary_electric_generator
|
||||
name = "Rotary Electric Generator Manual"
|
||||
@@ -367,41 +367,41 @@
|
||||
<body>
|
||||
|
||||
Technical Order (TO) 1-33-34-2 <br>
|
||||
<h1>Operator's Manual - Rotary Electric Generator, D-Type</h1><br><br>
|
||||
<h1>Operator's Manual - Rotary Electric Generator, D-Type</h1><br><br>
|
||||
|
||||
Supporting Data: <br>
|
||||
- TO 1-33-34-4-1 Illustrated Parts Breakdown - Rotary Electric Generator, D-Type <br>
|
||||
- TO 1-33-34-6 Inspection Work Cards - Rotary Electric Generator, D-Type <br><br>
|
||||
Supporting Data: <br>
|
||||
- TO 1-33-34-4-1 Illustrated Parts Breakdown - Rotary Electric Generator, D-Type <br>
|
||||
- TO 1-33-34-6 Inspection Work Cards - Rotary Electric Generator, D-Type <br><br>
|
||||
|
||||
Support Equipment: <br>
|
||||
- Torque Wrench, 100-80,000 inch-pounds <br>
|
||||
- Composite Tool Kit, Standard <br>
|
||||
- Multitool with Lead Kit, Wire Kit <br> <br>
|
||||
Support Equipment: <br>
|
||||
- Torque Wrench, 100-80,000 inch-pounds <br>
|
||||
- Composite Tool Kit, Standard <br>
|
||||
- Multitool with Lead Kit, Wire Kit <br> <br>
|
||||
|
||||
Required Supplies: <br>
|
||||
- stainless steel, 10,000cm3 <br>
|
||||
- lubrication, petrolatum, 6000ml <br>
|
||||
- electrical wiring, 5m <br>
|
||||
- component set, capacitors (any grade) <br>
|
||||
- circuitry board, REG <br> <br>
|
||||
Required Supplies: <br>
|
||||
- stainless steel, 10,000cm3 <br>
|
||||
- lubrication, petrolatum, 6000ml <br>
|
||||
- electrical wiring, 5m <br>
|
||||
- component set, capacitors (any grade) <br>
|
||||
- circuitry board, REG <br> <br>
|
||||
|
||||
|
||||
<h1>SETUP AND OPERATING PROCEDURES</h1> <br> <br>
|
||||
<h1>SETUP AND OPERATING PROCEDURES</h1> <br> <br>
|
||||
|
||||
Setup: <br> <br>
|
||||
Setup: <br> <br>
|
||||
|
||||
CAUTION: Do not remove too much air from the work space or personnel may be exposed to hypoxia or similar effects. <br> <br>
|
||||
CAUTION: Do not remove too much air from the work space or personnel may be exposed to hypoxia or similar effects. <br> <br>
|
||||
|
||||
1. Prepare setup area. Remove machinery, debris, foreign objects, people, and extra air. <br> <br>
|
||||
|
||||
2. Lay out preliminary electrical wiring. <br>
|
||||
2a. Connect electrical wiring to existing facility power grid. <br>
|
||||
2b. Work wiring into shape as defined in TO 1-33-34-4-1 Figure 32 Index 6. <br>
|
||||
2a. Connect electrical wiring to existing facility power grid. <br>
|
||||
2b. Work wiring into shape as defined in TO 1-33-34-4-1 Figure 32 Index 6. <br>
|
||||
|
||||
3. Prepare gathered steel supplies as defined in TO 1-33-34-4-1 Figure 2 Index 3. <br>
|
||||
|
||||
4. Assemble prepared steel supplies into equipment framework by inserting rod A into slot B. Refer to TO 1-33-34-4-1 Figure 1 Index 1 for technical drawings. <br>
|
||||
4a. Secure assembled equipment framework to flooring by tightening lower frame bolts. <br> <br>
|
||||
4a. Secure assembled equipment framework to flooring by tightening lower frame bolts. <br> <br>
|
||||
|
||||
5. Install and secure circuitry board, REG-D into marked receptacle. <br> <br>
|
||||
|
||||
@@ -416,7 +416,7 @@
|
||||
9. Wait for assembly to finish inflating, and the unit is ready for service. <br> <br>
|
||||
|
||||
|
||||
Operating Procedures: <br> <br>
|
||||
Operating Procedures: <br> <br>
|
||||
|
||||
NOTE: Operation of REG-D type generators requires significant physical effort. Ensure users are provided adequare nutrition and hydration throughout the working period. <br> <br>
|
||||
|
||||
@@ -435,8 +435,8 @@
|
||||
6. To end a session, carefully lower forward running speed until the track body comes to a complete stop, then disembark the REG-D. <br> <br>
|
||||
|
||||
|
||||
REFER TO TO 1-33-34-6 FOR MAINTENANCE AND INSPECTION PROCEDURES
|
||||
</body>
|
||||
REFER TO TO 1-33-34-6 FOR MAINTENANCE AND INSPECTION PROCEDURES
|
||||
</body>
|
||||
</html>
|
||||
"}
|
||||
|
||||
|
||||
@@ -9,22 +9,22 @@
|
||||
desc = "An infernum made riding crop with Malady Blanche engraved in the shaft. It's a little worn from how many butts it has spanked."
|
||||
|
||||
/obj/item/material/twohanded/longsword
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
name = "longsword"
|
||||
desc = "a more elegant weapon from a more civilised age"
|
||||
icon= 'icons/obj/weapons_vr.dmi'
|
||||
icon_state = "longsword"
|
||||
base_icon = "longsword"
|
||||
item_icons = list(
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
name = "longsword"
|
||||
desc = "a more elegant weapon from a more civilised age"
|
||||
icon= 'icons/obj/weapons_vr.dmi'
|
||||
icon_state = "longsword"
|
||||
base_icon = "longsword"
|
||||
item_icons = list(
|
||||
slot_l_hand_str = 'icons/mob/items/lefthand_melee_vr.dmi',
|
||||
slot_r_hand_str = 'icons/mob/items/righthand_melee_vr.dmi',
|
||||
)
|
||||
item_state = "saber"
|
||||
unwielded_force_divisor = 0.1
|
||||
force_divisor = 0.3
|
||||
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
|
||||
edge = TRUE
|
||||
sharp = TRUE
|
||||
item_state = "saber"
|
||||
unwielded_force_divisor = 0.1
|
||||
force_divisor = 0.3
|
||||
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
|
||||
edge = TRUE
|
||||
sharp = TRUE
|
||||
|
||||
/obj/item/material/twohanded/saber/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack")
|
||||
if (src.wielded == 1)
|
||||
|
||||
@@ -134,12 +134,12 @@
|
||||
|
||||
// This is about 0.896m^3 of atmosphere, which is enough to last for quite a while.
|
||||
/datum/gas_mixture/pod_air
|
||||
volume = 2500
|
||||
temperature = 293.150
|
||||
total_moles = 104
|
||||
volume = 2500
|
||||
temperature = 293.150
|
||||
total_moles = 104
|
||||
|
||||
/datum/gas_mixture/pod_air/New()
|
||||
. = ..()
|
||||
gas = list(
|
||||
GAS_O2 = 21,
|
||||
GAS_N2 = 79)
|
||||
. = ..()
|
||||
gas = list(
|
||||
GAS_O2 = 21,
|
||||
GAS_N2 = 79)
|
||||
|
||||
@@ -11,14 +11,14 @@
|
||||
icon_state = "spawner-jackolantern"
|
||||
|
||||
/obj/effect/landmark/carved_pumpkin_spawn/New()
|
||||
var/new_pumpkin = pick(
|
||||
var/new_pumpkin = pick(
|
||||
prob(70);/obj/structure/flora/pumpkin,
|
||||
prob(60);/obj/structure/flora/pumpkin/carved,
|
||||
prob(30);/obj/structure/flora/pumpkin/carved/scream,
|
||||
prob(30);/obj/structure/flora/pumpkin/carved/girly,
|
||||
prob(10);/obj/structure/flora/pumpkin/carved/owo)
|
||||
new new_pumpkin(src.loc)
|
||||
..()
|
||||
prob(60);/obj/structure/flora/pumpkin/carved,
|
||||
prob(30);/obj/structure/flora/pumpkin/carved/scream,
|
||||
prob(30);/obj/structure/flora/pumpkin/carved/girly,
|
||||
prob(10);/obj/structure/flora/pumpkin/carved/owo)
|
||||
new new_pumpkin(src.loc)
|
||||
..()
|
||||
|
||||
/obj/structure/flora/pumpkin/carved
|
||||
name = "jack o'lantern"
|
||||
|
||||
@@ -548,50 +548,50 @@ Loot piles can be depleted, if loot_depleted is turned on. Note that players wh
|
||||
)
|
||||
|
||||
/obj/structure/loot_pile/surface/bones
|
||||
name = "bone pile"
|
||||
desc = "A pile of various dusty bones. Your graverobbing instincts tell you there might be valuables here."
|
||||
icon = 'icons/obj/bones.dmi'
|
||||
icon_state = "bonepile"
|
||||
delete_on_depletion = TRUE
|
||||
name = "bone pile"
|
||||
desc = "A pile of various dusty bones. Your graverobbing instincts tell you there might be valuables here."
|
||||
icon = 'icons/obj/bones.dmi'
|
||||
icon_state = "bonepile"
|
||||
delete_on_depletion = TRUE
|
||||
|
||||
common_loot = list(
|
||||
/obj/item/bone,
|
||||
/obj/item/bone/skull,
|
||||
/obj/item/bone/skull/tajaran,
|
||||
/obj/item/bone/skull/unathi,
|
||||
/obj/item/bone/skull/unknown,
|
||||
/obj/item/bone/leg,
|
||||
/obj/item/bone/arm,
|
||||
/obj/item/bone/ribs,
|
||||
)
|
||||
uncommon_loot = list(
|
||||
/obj/item/coin/gold,
|
||||
/obj/item/coin/silver,
|
||||
/obj/item/deck/tarot,
|
||||
/obj/item/flame/lighter/zippo/gold,
|
||||
/obj/item/flame/lighter/zippo/black,
|
||||
/obj/item/material/knife/tacknife/survival,
|
||||
/obj/item/material/knife/tacknife/combatknife,
|
||||
/obj/item/material/knife/machete/hatchet,
|
||||
/obj/item/material/knife/butch,
|
||||
/obj/item/storage/wallet/random,
|
||||
/obj/item/clothing/accessory/bracelet/material/gold,
|
||||
/obj/item/clothing/accessory/bracelet/material/silver,
|
||||
/obj/item/clothing/accessory/locket,
|
||||
/obj/item/clothing/accessory/poncho/blue,
|
||||
/obj/item/clothing/shoes/boots/cowboy,
|
||||
/obj/item/clothing/suit/storage/toggle/bomber,
|
||||
/obj/item/clothing/under/frontier,
|
||||
/obj/item/clothing/under/overalls,
|
||||
/obj/item/clothing/under/pants/classicjeans/ripped,
|
||||
/obj/item/clothing/under/sl_suit
|
||||
)
|
||||
rare_loot = list(
|
||||
/obj/item/storage/belt/utility/alien/full,
|
||||
/obj/item/gun/projectile/revolver,
|
||||
/obj/item/gun/projectile/sec,
|
||||
/obj/item/gun/launcher/crossbow
|
||||
)
|
||||
common_loot = list(
|
||||
/obj/item/bone,
|
||||
/obj/item/bone/skull,
|
||||
/obj/item/bone/skull/tajaran,
|
||||
/obj/item/bone/skull/unathi,
|
||||
/obj/item/bone/skull/unknown,
|
||||
/obj/item/bone/leg,
|
||||
/obj/item/bone/arm,
|
||||
/obj/item/bone/ribs,
|
||||
)
|
||||
uncommon_loot = list(
|
||||
/obj/item/coin/gold,
|
||||
/obj/item/coin/silver,
|
||||
/obj/item/deck/tarot,
|
||||
/obj/item/flame/lighter/zippo/gold,
|
||||
/obj/item/flame/lighter/zippo/black,
|
||||
/obj/item/material/knife/tacknife/survival,
|
||||
/obj/item/material/knife/tacknife/combatknife,
|
||||
/obj/item/material/knife/machete/hatchet,
|
||||
/obj/item/material/knife/butch,
|
||||
/obj/item/storage/wallet/random,
|
||||
/obj/item/clothing/accessory/bracelet/material/gold,
|
||||
/obj/item/clothing/accessory/bracelet/material/silver,
|
||||
/obj/item/clothing/accessory/locket,
|
||||
/obj/item/clothing/accessory/poncho/blue,
|
||||
/obj/item/clothing/shoes/boots/cowboy,
|
||||
/obj/item/clothing/suit/storage/toggle/bomber,
|
||||
/obj/item/clothing/under/frontier,
|
||||
/obj/item/clothing/under/overalls,
|
||||
/obj/item/clothing/under/pants/classicjeans/ripped,
|
||||
/obj/item/clothing/under/sl_suit
|
||||
)
|
||||
rare_loot = list(
|
||||
/obj/item/storage/belt/utility/alien/full,
|
||||
/obj/item/gun/projectile/revolver,
|
||||
/obj/item/gun/projectile/sec,
|
||||
/obj/item/gun/launcher/crossbow
|
||||
)
|
||||
|
||||
// Subtype for mecha and mecha accessories. These might not always be on the surface.
|
||||
/obj/structure/loot_pile/mecha
|
||||
|
||||
@@ -351,8 +351,8 @@
|
||||
icon = 'icons/obj/trash_piles.dmi'
|
||||
icon_state = "randompile"
|
||||
spawn_types = list(
|
||||
/mob/living/simple_mob/animal/passive/mouse= 100,
|
||||
/mob/living/simple_mob/animal/passive/cockroach = 25)
|
||||
/mob/living/simple_mob/animal/passive/mouse= 100,
|
||||
/mob/living/simple_mob/animal/passive/cockroach = 25)
|
||||
simultaneous_spawns = 1
|
||||
destructible = 1
|
||||
spawn_delay = 1 HOUR
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
//Thanks to Kilakk for the admin-button portion of this code.
|
||||
|
||||
var/global/send_emergency_team = 0 // Used for automagic response teams
|
||||
// 'admin_emergency_team' for admin-spawned response teams
|
||||
// 'admin_emergency_team' for admin-spawned response teams
|
||||
var/ert_base_chance = 10 // Default base chance. Will be incremented by increment ERT chance.
|
||||
var/can_call_ert
|
||||
var/silent_ert = 0
|
||||
|
||||
@@ -1,35 +1,35 @@
|
||||
/turf/snow
|
||||
name = "snow"
|
||||
name = "snow"
|
||||
|
||||
dynamic_lighting = 0
|
||||
icon = 'icons/turf/snow_new.dmi'
|
||||
icon_state = "snow"
|
||||
dynamic_lighting = 0
|
||||
icon = 'icons/turf/snow_new.dmi'
|
||||
icon_state = "snow"
|
||||
|
||||
oxygen = MOLES_O2STANDARD * 1.15
|
||||
nitrogen = MOLES_N2STANDARD * 1.15
|
||||
oxygen = MOLES_O2STANDARD * 1.15
|
||||
nitrogen = MOLES_N2STANDARD * 1.15
|
||||
|
||||
temperature = TN60C
|
||||
var/list/crossed_dirs = list()
|
||||
temperature = TN60C
|
||||
var/list/crossed_dirs = list()
|
||||
|
||||
/turf/snow/Entered(atom/A)
|
||||
if(ismob(A))
|
||||
var/mdir = "[A.dir]"
|
||||
if(crossed_dirs[mdir])
|
||||
crossed_dirs[mdir] = min(crossed_dirs[mdir] + 1, FOOTSTEP_SPRITE_AMT)
|
||||
else
|
||||
crossed_dirs[mdir] = 1
|
||||
if(ismob(A))
|
||||
var/mdir = "[A.dir]"
|
||||
if(crossed_dirs[mdir])
|
||||
crossed_dirs[mdir] = min(crossed_dirs[mdir] + 1, FOOTSTEP_SPRITE_AMT)
|
||||
else
|
||||
crossed_dirs[mdir] = 1
|
||||
|
||||
update_icon()
|
||||
update_icon()
|
||||
|
||||
. = ..()
|
||||
. = ..()
|
||||
|
||||
/turf/snow/update_icon()
|
||||
cut_overlays()
|
||||
for(var/d in crossed_dirs)
|
||||
var/amt = crossed_dirs[d]
|
||||
cut_overlays()
|
||||
for(var/d in crossed_dirs)
|
||||
var/amt = crossed_dirs[d]
|
||||
|
||||
for(var/i in 1 to amt)
|
||||
add_overlay(image(icon, "footprint[i]", text2num(d)))
|
||||
for(var/i in 1 to amt)
|
||||
add_overlay(image(icon, "footprint[i]", text2num(d)))
|
||||
|
||||
/turf/snow/snow2
|
||||
name = "snow"
|
||||
|
||||
+33
-33
@@ -1,37 +1,37 @@
|
||||
var/const/js_dropdowns = {"
|
||||
function dropdowns() {
|
||||
var divs = document.getElementsByTagName('div');
|
||||
var headers = new Array();
|
||||
var links = new Array();
|
||||
for(var i=0;i<divs.length;i++){
|
||||
if(divs\[i\].className=='header') {
|
||||
divs\[i\].className='header closed';
|
||||
divs\[i\].innerHTML = divs\[i\].innerHTML+' +';
|
||||
headers.push(divs\[i\]);
|
||||
}
|
||||
if(divs\[i\].className=='links') {
|
||||
divs\[i\].className='links hidden';
|
||||
links.push(divs\[i\]);
|
||||
}
|
||||
}
|
||||
for(var i=0;i<headers.length;i++){
|
||||
if(typeof(links\[i\])!== 'undefined' && links\[i\]!=null) {
|
||||
headers\[i\].onclick = (function(elem) {
|
||||
return function() {
|
||||
if(elem.className.search('visible')>=0) {
|
||||
elem.className = elem.className.replace('visible','hidden');
|
||||
this.className = this.className.replace('open','closed');
|
||||
this.innerHTML = this.innerHTML.replace('-','+');
|
||||
}
|
||||
else {
|
||||
elem.className = elem.className.replace('hidden','visible');
|
||||
this.className = this.className.replace('closed','open');
|
||||
this.innerHTML = this.innerHTML.replace('+','-');
|
||||
}
|
||||
return false;
|
||||
}
|
||||
})(links\[i\]);
|
||||
}
|
||||
}
|
||||
var divs = document.getElementsByTagName('div');
|
||||
var headers = new Array();
|
||||
var links = new Array();
|
||||
for(var i=0;i<divs.length;i++){
|
||||
if(divs\[i\].className=='header') {
|
||||
divs\[i\].className='header closed';
|
||||
divs\[i\].innerHTML = divs\[i\].innerHTML+' +';
|
||||
headers.push(divs\[i\]);
|
||||
}
|
||||
if(divs\[i\].className=='links') {
|
||||
divs\[i\].className='links hidden';
|
||||
links.push(divs\[i\]);
|
||||
}
|
||||
}
|
||||
for(var i=0;i<headers.length;i++){
|
||||
if(typeof(links\[i\])!== 'undefined' && links\[i\]!=null) {
|
||||
headers\[i\].onclick = (function(elem) {
|
||||
return function() {
|
||||
if(elem.className.search('visible')>=0) {
|
||||
elem.className = elem.className.replace('visible','hidden');
|
||||
this.className = this.className.replace('open','closed');
|
||||
this.innerHTML = this.innerHTML.replace('-','+');
|
||||
}
|
||||
else {
|
||||
elem.className = elem.className.replace('hidden','visible');
|
||||
this.className = this.className.replace('closed','open');
|
||||
this.innerHTML = this.innerHTML.replace('+','-');
|
||||
}
|
||||
return false;
|
||||
}
|
||||
})(links\[i\]);
|
||||
}
|
||||
}
|
||||
}
|
||||
"}
|
||||
|
||||
@@ -39,8 +39,8 @@
|
||||
else
|
||||
violent = ""
|
||||
admin_attack_log(attacker,
|
||||
victim,
|
||||
"used \the [weapon] to [violent]inject - [reagents] - [amount_transferred]u transferred",
|
||||
"was [violent]injected with \the [weapon] - [reagents] - [amount_transferred]u transferred",
|
||||
"used \the [weapon] to [violent]inject [reagents] ([amount_transferred]u transferred) into")
|
||||
victim,
|
||||
"used \the [weapon] to [violent]inject - [reagents] - [amount_transferred]u transferred",
|
||||
"was [violent]injected with \the [weapon] - [reagents] - [amount_transferred]u transferred",
|
||||
"used \the [weapon] to [violent]inject [reagents] ([amount_transferred]u transferred) into")
|
||||
*/
|
||||
|
||||
@@ -335,9 +335,9 @@
|
||||
var/jobs = ""
|
||||
|
||||
/***********************************WARNING!************************************
|
||||
The jobban stuff looks mangled and disgusting
|
||||
But it looks beautiful in-game
|
||||
-Nodrak
|
||||
The jobban stuff looks mangled and disgusting
|
||||
But it looks beautiful in-game
|
||||
-Nodrak
|
||||
************************************WARNING!***********************************/
|
||||
var/counter = 0
|
||||
//Regular jobs
|
||||
|
||||
@@ -125,35 +125,35 @@ GLOBAL_LIST_BOILERPLATE(all_debugging_effects, /obj/effect/debugging)
|
||||
feedback_add_details("admin_verb","mIRD") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
var/list/debug_verbs = list (
|
||||
/client/proc/do_not_use_these
|
||||
,/client/proc/camera_view
|
||||
,/client/proc/sec_camera_report
|
||||
,/client/proc/intercom_view
|
||||
,/client/proc/Cell
|
||||
,/client/proc/atmosscan
|
||||
,/client/proc/powerdebug
|
||||
,/client/proc/count_objects_on_z_level
|
||||
,/client/proc/count_objects_all
|
||||
,/client/proc/cmd_assume_direct_control
|
||||
,/client/proc/jump_to_dead_group
|
||||
,/client/proc/startSinglo
|
||||
,/client/proc/set_server_fps
|
||||
,/client/proc/cmd_admin_grantfullaccess
|
||||
,/client/proc/kaboom
|
||||
,/client/proc/cmd_admin_areatest
|
||||
,/client/proc/cmd_admin_rejuvenate
|
||||
,/datum/admins/proc/show_traitor_panel
|
||||
,/client/proc/print_jobban_old
|
||||
,/client/proc/print_jobban_old_filter
|
||||
,/client/proc/forceEvent
|
||||
,/client/proc/Zone_Info
|
||||
,/client/proc/Test_ZAS_Connection
|
||||
,/client/proc/ZoneTick
|
||||
,/client/proc/rebootAirMaster
|
||||
,/client/proc/hide_debug_verbs
|
||||
,/client/proc/testZAScolors
|
||||
,/client/proc/testZAScolors_remove
|
||||
,/datum/admins/proc/setup_supermatter
|
||||
/client/proc/do_not_use_these
|
||||
,/client/proc/camera_view
|
||||
,/client/proc/sec_camera_report
|
||||
,/client/proc/intercom_view
|
||||
,/client/proc/Cell
|
||||
,/client/proc/atmosscan
|
||||
,/client/proc/powerdebug
|
||||
,/client/proc/count_objects_on_z_level
|
||||
,/client/proc/count_objects_all
|
||||
,/client/proc/cmd_assume_direct_control
|
||||
,/client/proc/jump_to_dead_group
|
||||
,/client/proc/startSinglo
|
||||
,/client/proc/set_server_fps
|
||||
,/client/proc/cmd_admin_grantfullaccess
|
||||
,/client/proc/kaboom
|
||||
,/client/proc/cmd_admin_areatest
|
||||
,/client/proc/cmd_admin_rejuvenate
|
||||
,/datum/admins/proc/show_traitor_panel
|
||||
,/client/proc/print_jobban_old
|
||||
,/client/proc/print_jobban_old_filter
|
||||
,/client/proc/forceEvent
|
||||
,/client/proc/Zone_Info
|
||||
,/client/proc/Test_ZAS_Connection
|
||||
,/client/proc/ZoneTick
|
||||
,/client/proc/rebootAirMaster
|
||||
,/client/proc/hide_debug_verbs
|
||||
,/client/proc/testZAScolors
|
||||
,/client/proc/testZAScolors_remove
|
||||
,/datum/admins/proc/setup_supermatter
|
||||
,/client/proc/atmos_toggle_debug
|
||||
,/client/proc/spawn_tanktransferbomb
|
||||
,/client/proc/take_picture
|
||||
|
||||
@@ -1,24 +1,24 @@
|
||||
/client/proc/resize(var/mob/living/L in mob_list)
|
||||
set name = "Resize"
|
||||
set desc = "Resizes any living mob without any restrictions on size."
|
||||
set category = "Fun.Event Kit"
|
||||
if(!check_rights(R_ADMIN|R_FUN|R_VAREDIT))
|
||||
return
|
||||
set name = "Resize"
|
||||
set desc = "Resizes any living mob without any restrictions on size."
|
||||
set category = "Fun.Event Kit"
|
||||
if(!check_rights(R_ADMIN|R_FUN|R_VAREDIT))
|
||||
return
|
||||
|
||||
var/size_multiplier = tgui_input_number(usr, "Input size multiplier.", "Resize", 1, round_value=FALSE)
|
||||
if(!size_multiplier)
|
||||
return //cancelled
|
||||
var/size_multiplier = tgui_input_number(usr, "Input size multiplier.", "Resize", 1, round_value=FALSE)
|
||||
if(!size_multiplier)
|
||||
return //cancelled
|
||||
|
||||
size_multiplier = clamp(size_multiplier, -50, 50) //VOREStation Edit - being able to make people upside down is fun. Also 1000 is way, WAY too big. Honestly 50 is too big but at least you can see 50 and it doesn't break the rendering.
|
||||
var/can_be_big = L.has_large_resize_bounds()
|
||||
var/very_big = is_extreme_size(size_multiplier)
|
||||
size_multiplier = clamp(size_multiplier, -50, 50) //VOREStation Edit - being able to make people upside down is fun. Also 1000 is way, WAY too big. Honestly 50 is too big but at least you can see 50 and it doesn't break the rendering.
|
||||
var/can_be_big = L.has_large_resize_bounds()
|
||||
var/very_big = is_extreme_size(size_multiplier)
|
||||
|
||||
if(very_big && can_be_big) // made an extreme size in an area that allows it, don't assume adminbuse
|
||||
to_chat(src,span_warning("[L] will lose this size upon moving into an area where this size is not allowed."))
|
||||
else if(very_big) // made an extreme size in an area that doesn't allow it, assume adminbuse
|
||||
to_chat(src,span_warning("[L] will retain this normally unallowed size outside this area."))
|
||||
if(very_big && can_be_big) // made an extreme size in an area that allows it, don't assume adminbuse
|
||||
to_chat(src,span_warning("[L] will lose this size upon moving into an area where this size is not allowed."))
|
||||
else if(very_big) // made an extreme size in an area that doesn't allow it, assume adminbuse
|
||||
to_chat(src,span_warning("[L] will retain this normally unallowed size outside this area."))
|
||||
|
||||
L.resize(size_multiplier, animate = TRUE, uncapped = TRUE, ignore_prefs = TRUE)
|
||||
L.resize(size_multiplier, animate = TRUE, uncapped = TRUE, ignore_prefs = TRUE)
|
||||
|
||||
log_and_message_admins("has changed [key_name(L)]'s size multiplier to [size_multiplier].")
|
||||
feedback_add_details("admin_verb","RESIZE")
|
||||
log_and_message_admins("has changed [key_name(L)]'s size multiplier to [size_multiplier].")
|
||||
feedback_add_details("admin_verb","RESIZE")
|
||||
|
||||
@@ -38,28 +38,28 @@
|
||||
icon_state = "key"
|
||||
|
||||
/obj/machinery/gateway/centeraway/proc/entrydetect()
|
||||
return
|
||||
return
|
||||
|
||||
/obj/machinery/gateway/centeraway/mcguffin/entrydetect()
|
||||
if(key)
|
||||
return
|
||||
if(key)
|
||||
return
|
||||
|
||||
var/list/spawners = list()
|
||||
for(var/obj/effect/landmark/mcguffin_spawner/sp in world)
|
||||
spawners += sp
|
||||
var/list/spawners = list()
|
||||
for(var/obj/effect/landmark/mcguffin_spawner/sp in world)
|
||||
spawners += sp
|
||||
|
||||
var/obj/effect/landmark/mcguffin_spawner/the_cool_one = pick(spawners)
|
||||
var/obj/effect/landmark/mcguffin_spawner/the_cool_one = pick(spawners)
|
||||
|
||||
var/atom/destination = get_turf(the_cool_one)
|
||||
var/obj/structure/closet/CL = locate() in destination
|
||||
if(CL)
|
||||
destination = CL
|
||||
var/atom/destination = get_turf(the_cool_one)
|
||||
var/obj/structure/closet/CL = locate() in destination
|
||||
if(CL)
|
||||
destination = CL
|
||||
|
||||
if(!destination)
|
||||
warning("A gateway is trying to spawn it's mcguffin but there are no mapped in spawner landmarks")
|
||||
destination = get_turf(src)
|
||||
if(!destination)
|
||||
warning("A gateway is trying to spawn it's mcguffin but there are no mapped in spawner landmarks")
|
||||
destination = get_turf(src)
|
||||
|
||||
key = new mcguffin_type(destination)
|
||||
key = new mcguffin_type(destination)
|
||||
|
||||
/obj/machinery/gateway/centeraway/mcguffin/Bumped(atom/movable/M as mob|obj)
|
||||
if(!ready) return
|
||||
|
||||
@@ -24,11 +24,11 @@
|
||||
// var/value = null
|
||||
|
||||
if (pos)
|
||||
// No, don't do lowertext here, that breaks paths on linux
|
||||
// No, don't do lowertext here, that breaks paths on linux
|
||||
name = copytext(t, 1, pos)
|
||||
// value = copytext(t, pos + 1)
|
||||
else
|
||||
// No, don't do lowertext here, that breaks paths on linux
|
||||
// No, don't do lowertext here, that breaks paths on linux
|
||||
name = t
|
||||
|
||||
if (!name)
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
var/effect_desc = "This does nothing special." // For examine panel.
|
||||
var/ai_desc = "default" // Shown when examining the overmind.
|
||||
var/difficulty = BLOB_DIFFICULTY_EASY // A rough guess on how hard a blob is to kill.
|
||||
// When a harder blob spawns by event, the crew is given more information than usual from the announcement.
|
||||
// When a harder blob spawns by event, the crew is given more information than usual from the announcement.
|
||||
var/color = "#FFFFFF" // The actual blob's color.
|
||||
var/complementary_color = "#000000" //a color that's complementary to the normal blob color. Blob mobs are colored in this.
|
||||
|
||||
|
||||
@@ -68,16 +68,16 @@
|
||||
character_name = list("Xander Bevin")
|
||||
|
||||
/datum/gear/fluff/charlotte_medal
|
||||
path = /obj/item/clothing/accessory/medal/silver/security
|
||||
display_name = "Charlotte's Robust Security Medal"
|
||||
ckeywhitelist = list("alfalah")
|
||||
character_name = list("Charlotte Graves")
|
||||
path = /obj/item/clothing/accessory/medal/silver/security
|
||||
display_name = "Charlotte's Robust Security Medal"
|
||||
ckeywhitelist = list("alfalah")
|
||||
character_name = list("Charlotte Graves")
|
||||
|
||||
/datum/gear/fluff/charlotte_medal_2
|
||||
path = /obj/item/clothing/accessory/medal/conduct
|
||||
display_name = "Charlotte's Medal of Conduct"
|
||||
ckeywhitelist = list("alfalah")
|
||||
character_name = list("Charlotte Graves")
|
||||
path = /obj/item/clothing/accessory/medal/conduct
|
||||
display_name = "Charlotte's Medal of Conduct"
|
||||
ckeywhitelist = list("alfalah")
|
||||
character_name = list("Charlotte Graves")
|
||||
|
||||
/datum/gear/fluff/charlotte_cigarettes
|
||||
path = /obj/item/storage/fancy/fluff/charlotte
|
||||
@@ -912,10 +912,10 @@
|
||||
|
||||
// P CKEYS
|
||||
/datum/gear/fluff/evelyn_medal
|
||||
path = /obj/item/clothing/accessory/medal/conduct
|
||||
display_name = "Evelyn's Medal of Conduct"
|
||||
ckeywhitelist = list("pandora029")
|
||||
character_name = list("Evelyn Tareen")
|
||||
path = /obj/item/clothing/accessory/medal/conduct
|
||||
display_name = "Evelyn's Medal of Conduct"
|
||||
ckeywhitelist = list("pandora029")
|
||||
character_name = list("Evelyn Tareen")
|
||||
|
||||
/datum/gear/fluff/evelyn_coat
|
||||
path = /obj/item/clothing/suit/storage/hooded/wintercoat/security/fluff/evelyn/
|
||||
@@ -1205,10 +1205,10 @@
|
||||
character_name = list("Lilith Vespers")
|
||||
|
||||
/datum/gear/fluff/greek_dress
|
||||
path = /obj/item/clothing/under/fluff/greek_dress
|
||||
display_name = "mytilenean Dress"
|
||||
ckeywhitelist = list("sudate")
|
||||
character_name = list("Shea Corbett")
|
||||
path = /obj/item/clothing/under/fluff/greek_dress
|
||||
display_name = "mytilenean Dress"
|
||||
ckeywhitelist = list("sudate")
|
||||
character_name = list("Shea Corbett")
|
||||
|
||||
/datum/gear/fluff/silent_mimemask
|
||||
path = /obj/item/clothing/mask/gas/sexymime
|
||||
@@ -1225,24 +1225,24 @@
|
||||
character_name = list("Silent Stripes")
|
||||
|
||||
/datum/gear/fluff/parrizjacket
|
||||
path = /obj/item/clothing/suit/storage/toggle/labcoat/fluff/parrizjacket
|
||||
display_name = "pink crop bomber"
|
||||
slot = slot_wear_suit
|
||||
ckeywhitelist = list("satinisle")
|
||||
character_name = list("Parriz Tavakdavi")
|
||||
path = /obj/item/clothing/suit/storage/toggle/labcoat/fluff/parrizjacket
|
||||
display_name = "pink crop bomber"
|
||||
slot = slot_wear_suit
|
||||
ckeywhitelist = list("satinisle")
|
||||
character_name = list("Parriz Tavakdavi")
|
||||
|
||||
/datum/gear/fluff/dark_tarot
|
||||
path = /obj/item/deck/dark_tarot
|
||||
display_name = "dark rose tarot deck"
|
||||
ckeywhitelist = list("satinisle")
|
||||
character_name = list("Millie Orlen")
|
||||
path = /obj/item/deck/dark_tarot
|
||||
display_name = "dark rose tarot deck"
|
||||
ckeywhitelist = list("satinisle")
|
||||
character_name = list("Millie Orlen")
|
||||
|
||||
/datum/gear/fluff/memorycrown
|
||||
path = /obj/item/clothing/head/fluff/memory_crown
|
||||
display_name = "memory crown"
|
||||
slot = slot_head
|
||||
ckeywhitelist = list("sixberry")
|
||||
character_name = list("Thistle")
|
||||
path = /obj/item/clothing/head/fluff/memory_crown
|
||||
display_name = "memory crown"
|
||||
slot = slot_head
|
||||
ckeywhitelist = list("sixberry")
|
||||
character_name = list("Thistle")
|
||||
|
||||
// T CKEYS
|
||||
/datum/gear/fluff/ascian_medal
|
||||
|
||||
@@ -78,12 +78,12 @@
|
||||
path = /obj/item/clothing/shoes/laceup
|
||||
|
||||
/datum/gear/shoes/lacey/New()
|
||||
..()
|
||||
var/list/laces = list()
|
||||
for(var/lace in typesof(/obj/item/clothing/shoes/laceup))
|
||||
var/obj/item/clothing/shoes/laceup/lace_type = lace
|
||||
laces[initial(lace_type.name)] = lace_type
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(laces))
|
||||
..()
|
||||
var/list/laces = list()
|
||||
for(var/lace in typesof(/obj/item/clothing/shoes/laceup))
|
||||
var/obj/item/clothing/shoes/laceup/lace_type = lace
|
||||
laces[initial(lace_type.name)] = lace_type
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(laces))
|
||||
|
||||
/datum/gear/shoes/green
|
||||
display_name = "shoes, green"
|
||||
@@ -118,12 +118,12 @@
|
||||
path = /obj/item/clothing/shoes/hitops/
|
||||
|
||||
/datum/gear/shoes/hitops/New()
|
||||
..()
|
||||
var/list/hitops = list()
|
||||
for(var/hitop in typesof(/obj/item/clothing/shoes/hitops))
|
||||
var/obj/item/clothing/shoes/hitops/hitop_type = hitop
|
||||
hitops[initial(hitop_type.name)] = hitop_type
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(hitops))
|
||||
..()
|
||||
var/list/hitops = list()
|
||||
for(var/hitop in typesof(/obj/item/clothing/shoes/hitops))
|
||||
var/obj/item/clothing/shoes/hitops/hitop_type = hitop
|
||||
hitops[initial(hitop_type.name)] = hitop_type
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(hitops))
|
||||
|
||||
/datum/gear/shoes/flipflops
|
||||
display_name = "flip flops"
|
||||
|
||||
@@ -755,20 +755,20 @@
|
||||
gear_tweaks += new/datum/gear_tweak/path(croppedhoodies)
|
||||
|
||||
/datum/gear/suit/drive
|
||||
display_name = "relatable jacket"
|
||||
path = /obj/item/clothing/suit/storage/drive
|
||||
display_name = "relatable jacket"
|
||||
path = /obj/item/clothing/suit/storage/drive
|
||||
|
||||
/datum/gear/suit/motojacket
|
||||
display_name = "motorcycle jacket"
|
||||
path = /obj/item/clothing/suit/storage/toggle/moto_jacket
|
||||
display_name = "motorcycle jacket"
|
||||
path = /obj/item/clothing/suit/storage/toggle/moto_jacket
|
||||
|
||||
/datum/gear/suit/punkvest
|
||||
display_name = "punk vest"
|
||||
path = /obj/item/clothing/suit/storage/punkvest
|
||||
display_name = "punk vest"
|
||||
path = /obj/item/clothing/suit/storage/punkvest
|
||||
|
||||
/datum/gear/suit/raincoat
|
||||
display_name = "raincoat"
|
||||
path = /obj/item/clothing/suit/storage/hooded/raincoat
|
||||
display_name = "raincoat"
|
||||
path = /obj/item/clothing/suit/storage/hooded/raincoat
|
||||
|
||||
//hooded cloaks
|
||||
/datum/gear/suit/roles/hoodedcloaks
|
||||
@@ -787,16 +787,16 @@
|
||||
|
||||
//oversized shirts
|
||||
/datum/gear/suit/nerdshirt
|
||||
display_name = "nerdy shirt"
|
||||
path = /obj/item/clothing/suit/nerdshirt
|
||||
display_name = "nerdy shirt"
|
||||
path = /obj/item/clothing/suit/nerdshirt
|
||||
|
||||
/datum/gear/suit/ianshirt
|
||||
display_name = "worn corgi shirt"
|
||||
path = /obj/item/clothing/suit/ianshirt
|
||||
display_name = "worn corgi shirt"
|
||||
path = /obj/item/clothing/suit/ianshirt
|
||||
|
||||
/datum/gear/suit/wornshirt
|
||||
display_name = "worn shirt"
|
||||
path = /obj/item/clothing/suit/wornshirt
|
||||
display_name = "worn shirt"
|
||||
path = /obj/item/clothing/suit/wornshirt
|
||||
|
||||
/datum/gear/suit/bomber_pilot
|
||||
display_name = "bomber jacket, pilot"
|
||||
|
||||
@@ -543,16 +543,16 @@
|
||||
|
||||
//leotards
|
||||
/datum/gear/uniform/leotard
|
||||
display_name = "leotard, black"
|
||||
path = /obj/item/clothing/under/leotard
|
||||
display_name = "leotard, black"
|
||||
path = /obj/item/clothing/under/leotard
|
||||
|
||||
/datum/gear/uniform/leotardcolor
|
||||
display_name = "leotard, colorable"
|
||||
path = /obj/item/clothing/under/leotardcolor
|
||||
display_name = "leotard, colorable"
|
||||
path = /obj/item/clothing/under/leotardcolor
|
||||
|
||||
/datum/gear/uniform/leotardcolor/New()
|
||||
..()
|
||||
gear_tweaks += gear_tweak_free_color_choice
|
||||
..()
|
||||
gear_tweaks += gear_tweak_free_color_choice
|
||||
|
||||
//skinsuits
|
||||
/datum/gear/uniform/skinsuits
|
||||
@@ -611,17 +611,17 @@
|
||||
|
||||
//half-moon outfit
|
||||
/datum/gear/uniform/halfmoon
|
||||
display_name = "half moon outfit"
|
||||
path = /obj/item/clothing/under/half_moon
|
||||
display_name = "half moon outfit"
|
||||
path = /obj/item/clothing/under/half_moon
|
||||
|
||||
//fiend clothes
|
||||
/datum/gear/uniform/fiendsuit
|
||||
display_name = "fiendish suit"
|
||||
path = /obj/item/clothing/under/fiendsuit
|
||||
display_name = "fiendish suit"
|
||||
path = /obj/item/clothing/under/fiendsuit
|
||||
|
||||
/datum/gear/uniform/fienddress
|
||||
display_name = "fiendish dress"
|
||||
path = /obj/item/clothing/under/fienddress
|
||||
display_name = "fiendish dress"
|
||||
path = /obj/item/clothing/under/fienddress
|
||||
|
||||
//tabard dresses
|
||||
/datum/gear/uniform/tabarddress
|
||||
|
||||
@@ -6,7 +6,7 @@ SEE_MOBS // can see all mobs, no matter what
|
||||
SEE_OBJS // can see all objs, no matter what
|
||||
SEE_TURFS // can see all turfs (and areas), no matter what
|
||||
SEE_PIXELS// if an object is located on an unlit area, but some of its pixels are
|
||||
// in a lit area (via pixel_x,y or smooth movement), can see those pixels
|
||||
// in a lit area (via pixel_x,y or smooth movement), can see those pixels
|
||||
BLIND // can't see anything
|
||||
*/
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -268,13 +268,13 @@
|
||||
return 1
|
||||
|
||||
/obj/item/clothing/glasses/hud/security/eyepatch
|
||||
name = "Security Hudpatch"
|
||||
desc = "An eyepatch with built in scanners, that analyzes those in view and provides accurate data about their ID status and security records."
|
||||
icon_state = "eyepatch"
|
||||
item_state_slots = list(slot_r_hand_str = "blindfold", slot_l_hand_str = "blindfold")
|
||||
body_parts_covered = 0
|
||||
enables_planes = list(VIS_CH_ID,VIS_CH_WANTED,VIS_CH_IMPTRACK,VIS_CH_IMPLOYAL,VIS_CH_IMPCHEM)
|
||||
var/eye = null
|
||||
name = "Security Hudpatch"
|
||||
desc = "An eyepatch with built in scanners, that analyzes those in view and provides accurate data about their ID status and security records."
|
||||
icon_state = "eyepatch"
|
||||
item_state_slots = list(slot_r_hand_str = "blindfold", slot_l_hand_str = "blindfold")
|
||||
body_parts_covered = 0
|
||||
enables_planes = list(VIS_CH_ID,VIS_CH_WANTED,VIS_CH_IMPTRACK,VIS_CH_IMPLOYAL,VIS_CH_IMPCHEM)
|
||||
var/eye = null
|
||||
|
||||
/obj/item/clothing/glasses/hud/security/eyepatch/verb/switcheye()
|
||||
set name = "Switch Eyepatch"
|
||||
@@ -291,15 +291,15 @@
|
||||
update_clothing_icon()
|
||||
|
||||
/obj/item/clothing/glasses/hud/security/eyepatch2
|
||||
name = "Security Hudpatch MKII"
|
||||
desc = "An eyepatch with built in scanners, that analyzes those in view and provides accurate data about their ID status and security records. This updated model offers better ergonomics and updated sensors."
|
||||
icon = 'icons/inventory/eyes/item_vr.dmi'
|
||||
icon_override = 'icons/inventory/eyes/mob_vr.dmi'
|
||||
icon_state = "sec_eyepatch"
|
||||
item_state_slots = list(slot_r_hand_str = "blindfold", slot_l_hand_str = "blindfold")
|
||||
body_parts_covered = 0
|
||||
enables_planes = list(VIS_CH_ID,VIS_CH_WANTED,VIS_CH_IMPTRACK,VIS_CH_IMPLOYAL,VIS_CH_IMPCHEM)
|
||||
var/eye = null
|
||||
name = "Security Hudpatch MKII"
|
||||
desc = "An eyepatch with built in scanners, that analyzes those in view and provides accurate data about their ID status and security records. This updated model offers better ergonomics and updated sensors."
|
||||
icon = 'icons/inventory/eyes/item_vr.dmi'
|
||||
icon_override = 'icons/inventory/eyes/mob_vr.dmi'
|
||||
icon_state = "sec_eyepatch"
|
||||
item_state_slots = list(slot_r_hand_str = "blindfold", slot_l_hand_str = "blindfold")
|
||||
body_parts_covered = 0
|
||||
enables_planes = list(VIS_CH_ID,VIS_CH_WANTED,VIS_CH_IMPTRACK,VIS_CH_IMPLOYAL,VIS_CH_IMPCHEM)
|
||||
var/eye = null
|
||||
|
||||
/obj/item/clothing/glasses/hud/security/eyepatch2/verb/switcheye()
|
||||
set name = "Switch Eyepatch"
|
||||
@@ -317,13 +317,13 @@
|
||||
|
||||
|
||||
/obj/item/clothing/glasses/hud/health/eyepatch
|
||||
name = "Medical Hudpatch"
|
||||
desc = "An eyepatch with built in scanners, that analyzes those in view and provides accurate data about their health status."
|
||||
icon_state = "eyepatch"
|
||||
item_state_slots = list(slot_r_hand_str = "blindfold", slot_l_hand_str = "blindfold")
|
||||
body_parts_covered = 0
|
||||
enables_planes = list(VIS_CH_STATUS,VIS_CH_HEALTH)
|
||||
var/eye = null
|
||||
name = "Medical Hudpatch"
|
||||
desc = "An eyepatch with built in scanners, that analyzes those in view and provides accurate data about their health status."
|
||||
icon_state = "eyepatch"
|
||||
item_state_slots = list(slot_r_hand_str = "blindfold", slot_l_hand_str = "blindfold")
|
||||
body_parts_covered = 0
|
||||
enables_planes = list(VIS_CH_STATUS,VIS_CH_HEALTH)
|
||||
var/eye = null
|
||||
|
||||
/obj/item/clothing/glasses/hud/health/eyepatch/verb/switcheye()
|
||||
set name = "Switch Eyepatch"
|
||||
|
||||
@@ -222,22 +222,22 @@
|
||||
|
||||
//hooded cloak hoods
|
||||
/obj/item/clothing/head/hood/cloak
|
||||
name = "maroon cloak hood"
|
||||
desc = "A hood attached to a maroon cloak."
|
||||
icon_state = "maroon_cloakhood"
|
||||
flags_inv = HIDEEARS|BLOCKHAIR
|
||||
name = "maroon cloak hood"
|
||||
desc = "A hood attached to a maroon cloak."
|
||||
icon_state = "maroon_cloakhood"
|
||||
flags_inv = HIDEEARS|BLOCKHAIR
|
||||
|
||||
/obj/item/clothing/head/hood/cloak/winter
|
||||
name = "winter cloak hood"
|
||||
desc = "A hood attached to a winter cloak."
|
||||
icon_state = "winter_cloakhood"
|
||||
name = "winter cloak hood"
|
||||
desc = "A hood attached to a winter cloak."
|
||||
icon_state = "winter_cloakhood"
|
||||
|
||||
/obj/item/clothing/head/hood/cloak/asymmetric
|
||||
name = "asymmetric cloak hood"
|
||||
desc = "A hood attached to an asymmetric cloak."
|
||||
icon_state = "asymmetric_cloakhood"
|
||||
name = "asymmetric cloak hood"
|
||||
desc = "A hood attached to an asymmetric cloak."
|
||||
icon_state = "asymmetric_cloakhood"
|
||||
|
||||
/obj/item/clothing/head/hood/cloak/fancy
|
||||
name = "fancy cloak hood"
|
||||
desc = "A hood attached to a fancy cloak."
|
||||
icon_state = "hb_cloakhood"
|
||||
name = "fancy cloak hood"
|
||||
desc = "A hood attached to a fancy cloak."
|
||||
icon_state = "hb_cloakhood"
|
||||
|
||||
@@ -16,9 +16,9 @@
|
||||
w_class = ITEMSIZE_TINY
|
||||
|
||||
/obj/item/clothing/mask/muzzle/New()
|
||||
..()
|
||||
say_messages = list("Mmfph!", "Mmmf mrrfff!", "Mmmf mnnf!")
|
||||
say_verbs = list("mumbles", "says")
|
||||
..()
|
||||
say_messages = list("Mmfph!", "Mmmf mrrfff!", "Mmmf mnnf!")
|
||||
say_verbs = list("mumbles", "says")
|
||||
|
||||
// Clumsy folks can't take the mask off themselves.
|
||||
/obj/item/clothing/mask/muzzle/attack_hand(mob/living/user as mob)
|
||||
@@ -218,10 +218,10 @@
|
||||
body_parts_covered = HEAD|FACE
|
||||
*/
|
||||
/obj/item/clothing/mask/horsehead/New()
|
||||
..()
|
||||
// The horse mask doesn't cause voice changes by default, the wizard spell changes the flag as necessary
|
||||
say_messages = list("NEEIIGGGHHHH!", "NEEEIIIIGHH!", "NEIIIGGHH!", "HAAWWWWW!", "HAAAWWW!")
|
||||
say_verbs = list("whinnies", "neighs", "says")
|
||||
..()
|
||||
// The horse mask doesn't cause voice changes by default, the wizard spell changes the flag as necessary
|
||||
say_messages = list("NEEIIGGGHHHH!", "NEEEIIIIGHH!", "NEIIIGGHH!", "HAAWWWWW!", "HAAAWWW!")
|
||||
say_verbs = list("whinnies", "neighs", "says")
|
||||
|
||||
/obj/item/clothing/mask/ai
|
||||
name = "camera MIU"
|
||||
|
||||
@@ -253,9 +253,9 @@
|
||||
siemens_coefficient = 0.6
|
||||
|
||||
/obj/item/clothing/shoes/boots/singer
|
||||
name = "blue performer's boots"
|
||||
desc = "These boots were made for dancing."
|
||||
icon_state = "bsing"
|
||||
name = "blue performer's boots"
|
||||
desc = "These boots were made for dancing."
|
||||
icon_state = "bsing"
|
||||
|
||||
/obj/item/clothing/shoes/boots/singer/yellow
|
||||
name = "yellow performer's boots"
|
||||
@@ -263,6 +263,6 @@
|
||||
icon_state = "ysing"
|
||||
|
||||
/obj/item/clothing/shoes/boots/half_moon
|
||||
name = "half moon boots"
|
||||
desc = "Flexible and tight, these boots ensure the wearer will be leaving a solid impression without sacrificing mobility."
|
||||
icon_state = "half_moon"
|
||||
name = "half moon boots"
|
||||
desc = "Flexible and tight, these boots ensure the wearer will be leaving a solid impression without sacrificing mobility."
|
||||
icon_state = "half_moon"
|
||||
|
||||
@@ -368,27 +368,26 @@
|
||||
|
||||
//hooded cloaks
|
||||
/obj/item/clothing/suit/storage/hooded/cloak
|
||||
name = "hooded maroon cloak"
|
||||
desc = "A simple maroon colored cloak."
|
||||
icon_state = "maroon_cloak"
|
||||
body_parts_covered = CHEST|ARMS
|
||||
hoodtype = /obj/item/clothing/head/hood/cloak
|
||||
name = "hooded maroon cloak"
|
||||
desc = "A simple maroon colored cloak."
|
||||
icon_state = "maroon_cloak"
|
||||
body_parts_covered = CHEST|ARMS
|
||||
hoodtype = /obj/item/clothing/head/hood/cloak
|
||||
|
||||
/obj/item/clothing/suit/storage/hooded/cloak/winter
|
||||
name = "hooded winter cloak"
|
||||
desc = "A simple wool cloak used during winter."
|
||||
icon_state = "winter_cloak"
|
||||
hoodtype = /obj/item/clothing/head/hood/cloak/winter
|
||||
name = "hooded winter cloak"
|
||||
desc = "A simple wool cloak used during winter."
|
||||
icon_state = "winter_cloak"
|
||||
hoodtype = /obj/item/clothing/head/hood/cloak/winter
|
||||
|
||||
/obj/item/clothing/suit/storage/hooded/cloak/asymmetric
|
||||
name = "hooded asymmetric cloak"
|
||||
desc = "A blue hooded cloak with an asymmetric design."
|
||||
icon_state = "asymmetric_cloak"
|
||||
hoodtype = /obj/item/clothing/head/hood/cloak/asymmetric
|
||||
|
||||
name = "hooded asymmetric cloak"
|
||||
desc = "A blue hooded cloak with an asymmetric design."
|
||||
icon_state = "asymmetric_cloak"
|
||||
hoodtype = /obj/item/clothing/head/hood/cloak/asymmetric
|
||||
|
||||
/obj/item/clothing/suit/storage/hooded/cloak/fancy
|
||||
name = "hooded fancy cloak"
|
||||
desc = "A fancy black hooded cloak."
|
||||
icon_state = "hb_cloak"
|
||||
hoodtype = /obj/item/clothing/head/hood/cloak/fancy
|
||||
name = "hooded fancy cloak"
|
||||
desc = "A fancy black hooded cloak."
|
||||
icon_state = "hb_cloak"
|
||||
hoodtype = /obj/item/clothing/head/hood/cloak/fancy
|
||||
|
||||
@@ -1129,19 +1129,19 @@
|
||||
body_parts_covered = UPPER_TORSO|ARMS
|
||||
|
||||
/obj/item/clothing/suit/storage/croppedhoodie/croppier
|
||||
name = "high cropped hoodie"
|
||||
desc = "This style of hoodie is worn by those that wish to display ample amounts of midriff, or never threw out their childhood apparel. The hood is cosmetic, and non-functional."
|
||||
icon_state = "croppierhoodie"
|
||||
name = "high cropped hoodie"
|
||||
desc = "This style of hoodie is worn by those that wish to display ample amounts of midriff, or never threw out their childhood apparel. The hood is cosmetic, and non-functional."
|
||||
icon_state = "croppierhoodie"
|
||||
|
||||
/obj/item/clothing/suit/storage/croppedhoodie/croppierer
|
||||
name = "very high cropped hoodie"
|
||||
desc = "This style of hoodie is worn by those that wish to display ample amounts of underboob, and love the breeze. Comes with a free 'functionally_nude' sticker. The hood is cosmetic, and non-functional."
|
||||
icon_state = "highcrophoodie"
|
||||
name = "very high cropped hoodie"
|
||||
desc = "This style of hoodie is worn by those that wish to display ample amounts of underboob, and love the breeze. Comes with a free 'functionally_nude' sticker. The hood is cosmetic, and non-functional."
|
||||
icon_state = "highcrophoodie"
|
||||
|
||||
/obj/item/clothing/suit/storage/croppedhoodie/croppiest
|
||||
name = "super cropped hoodie"
|
||||
desc = "This style of hoodie is worn by those that have little respect for the concept of a hoodie. Often seen in nightclubs and your daughter's wardrdobe. The hood is cosmetic, and non-functional."
|
||||
icon_state = "supercroppedhoodie"
|
||||
name = "super cropped hoodie"
|
||||
desc = "This style of hoodie is worn by those that have little respect for the concept of a hoodie. Often seen in nightclubs and your daughter's wardrdobe. The hood is cosmetic, and non-functional."
|
||||
icon_state = "supercroppedhoodie"
|
||||
|
||||
//Drive jacket
|
||||
/obj/item/clothing/suit/storage/drive
|
||||
@@ -1158,7 +1158,7 @@
|
||||
body_parts_covered = UPPER_TORSO|ARMS
|
||||
|
||||
/obj/item/clothing/suit/storage/punkvest
|
||||
name = "punk vest"
|
||||
desc = "For the spiritual rebels that nevertheless wish to conform to standard goth trends. You're totally showing them your anti-authority spunk."
|
||||
icon_state = "punkvest"
|
||||
body_parts_covered = CHEST|ARMS
|
||||
name = "punk vest"
|
||||
desc = "For the spiritual rebels that nevertheless wish to conform to standard goth trends. You're totally showing them your anti-authority spunk."
|
||||
icon_state = "punkvest"
|
||||
body_parts_covered = CHEST|ARMS
|
||||
|
||||
@@ -573,9 +573,9 @@
|
||||
icon_state = "countess"
|
||||
|
||||
/obj/item/clothing/under/dress/verglasdress
|
||||
name = "verglas dress"
|
||||
desc = "The modern twist on a forgotten pattern, the Verglas style utilizes comfortable velvet and silver white satin to create an otherworldly effect evocative of winter, or the void."
|
||||
icon_state = "verglas_dress"
|
||||
name = "verglas dress"
|
||||
desc = "The modern twist on a forgotten pattern, the Verglas style utilizes comfortable velvet and silver white satin to create an otherworldly effect evocative of winter, or the void."
|
||||
icon_state = "verglas_dress"
|
||||
|
||||
/obj/item/clothing/under/dress/alpine
|
||||
name = "alpine dress"
|
||||
@@ -1084,19 +1084,19 @@
|
||||
icon_state = "swim_cow"
|
||||
|
||||
/obj/item/clothing/under/swimsuit/highclass
|
||||
name = "high class swimsuit"
|
||||
desc = "An elegant swimsuit with a white bikini top and black bikini bottom. Thin black silk drapes down the back and goes to the upper thighs, and authentic gold rings hold the top together at the bust and back."
|
||||
icon_state = "swim_highclass"
|
||||
name = "high class swimsuit"
|
||||
desc = "An elegant swimsuit with a white bikini top and black bikini bottom. Thin black silk drapes down the back and goes to the upper thighs, and authentic gold rings hold the top together at the bust and back."
|
||||
icon_state = "swim_highclass"
|
||||
|
||||
/obj/item/clothing/under/swimsuit/risque
|
||||
name = "risque swimsuit"
|
||||
desc = "This fits a bit too snug in all the right places. Comes with a collar, for inscrutable reasons."
|
||||
icon_state = "swim_risque"
|
||||
name = "risque swimsuit"
|
||||
desc = "This fits a bit too snug in all the right places. Comes with a collar, for inscrutable reasons."
|
||||
icon_state = "swim_risque"
|
||||
|
||||
/obj/item/clothing/under/swimsuit/streamlined
|
||||
name = "streamlined swimsuit"
|
||||
desc = "An all white one-piece that maintains modesty without sacrificing class."
|
||||
icon_state = "swim_stream"
|
||||
name = "streamlined swimsuit"
|
||||
desc = "An all white one-piece that maintains modesty without sacrificing class."
|
||||
icon_state = "swim_stream"
|
||||
|
||||
/*
|
||||
* Pyjamas
|
||||
@@ -1534,14 +1534,14 @@
|
||||
|
||||
//leotards
|
||||
/obj/item/clothing/under/leotard
|
||||
name = "black leotard"
|
||||
desc = "A black leotard with a piece of semi-transparent cloth near the bust. Perfect for showing off cleavage. Bunny ears not included."
|
||||
icon_state = "leotard"
|
||||
name = "black leotard"
|
||||
desc = "A black leotard with a piece of semi-transparent cloth near the bust. Perfect for showing off cleavage. Bunny ears not included."
|
||||
icon_state = "leotard"
|
||||
|
||||
/obj/item/clothing/under/leotardcolor
|
||||
name = "colored leotard"
|
||||
desc = "A colorable leotard with a piece of semi-transparent cloth near the bust. Perfect for showing off cleavage. Bunny ears not included."
|
||||
icon_state = "leotard_color"
|
||||
name = "colored leotard"
|
||||
desc = "A colorable leotard with a piece of semi-transparent cloth near the bust. Perfect for showing off cleavage. Bunny ears not included."
|
||||
icon_state = "leotard_color"
|
||||
|
||||
//skinsuits
|
||||
/obj/item/clothing/under/skinsuit
|
||||
@@ -1550,18 +1550,18 @@
|
||||
icon_state = "skinsuit"
|
||||
|
||||
/obj/item/clothing/under/skinsuit/gray
|
||||
name = "gray skinsuit"
|
||||
icon_state = "skinsuit_g"
|
||||
name = "gray skinsuit"
|
||||
icon_state = "skinsuit_g"
|
||||
|
||||
/obj/item/clothing/under/skinsuit/leotard
|
||||
name = "leotard skinsuit"
|
||||
desc = "The skinsuit's leotard variant has long since eclipsed its initial function as a breathable undersuit for submersible hardsuits. Although still utilized in this role, it has become rather fashionable to wear outside of deep water operations."
|
||||
icon_state = "skinsuitleo"
|
||||
name = "leotard skinsuit"
|
||||
desc = "The skinsuit's leotard variant has long since eclipsed its initial function as a breathable undersuit for submersible hardsuits. Although still utilized in this role, it has become rather fashionable to wear outside of deep water operations."
|
||||
icon_state = "skinsuitleo"
|
||||
|
||||
|
||||
/obj/item/clothing/under/skinsuit/leotard/gray
|
||||
name = "gray leotard skinsuit"
|
||||
icon_state = "skinsuitleo_g"
|
||||
name = "gray leotard skinsuit"
|
||||
icon_state = "skinsuitleo_g"
|
||||
|
||||
/obj/item/clothing/under/skinsuit/fem
|
||||
name = "feminine skinsuit"
|
||||
@@ -1569,17 +1569,17 @@
|
||||
icon_state = "skinsuitfem"
|
||||
|
||||
/obj/item/clothing/under/skinsuit/fem/gray
|
||||
name = "feminine gray skinsuit"
|
||||
icon_state = "skinsuitfem_g"
|
||||
name = "feminine gray skinsuit"
|
||||
icon_state = "skinsuitfem_g"
|
||||
|
||||
/obj/item/clothing/under/skinsuit/fem/leotard
|
||||
name = "feminine leotard skinsuit"
|
||||
desc = "The skinsuit's leotard variant has long since eclipsed its initial function as a breathable undersuit for submersible hardsuits. Although still utilized in this role, it has become rather fashionable to wear outside of deep water operations."
|
||||
icon_state = "skinsuitfemleo"
|
||||
name = "feminine leotard skinsuit"
|
||||
desc = "The skinsuit's leotard variant has long since eclipsed its initial function as a breathable undersuit for submersible hardsuits. Although still utilized in this role, it has become rather fashionable to wear outside of deep water operations."
|
||||
icon_state = "skinsuitfemleo"
|
||||
|
||||
/obj/item/clothing/under/skinsuit/fem/leotard/gray
|
||||
name = "feminine gray leotard skinsuit"
|
||||
icon_state = "skinsuitfemleo_g"
|
||||
name = "feminine gray leotard skinsuit"
|
||||
icon_state = "skinsuitfemleo_g"
|
||||
|
||||
//baggy turtlenecks
|
||||
/obj/item/clothing/under/turtlebaggy
|
||||
@@ -1590,58 +1590,58 @@
|
||||
|
||||
|
||||
/obj/item/clothing/under/turtlebaggy/cream_fem
|
||||
name = "feminine cream baggy turtleneck"
|
||||
icon_state = "bb_turtle_fem"
|
||||
name = "feminine cream baggy turtleneck"
|
||||
icon_state = "bb_turtle_fem"
|
||||
|
||||
|
||||
/obj/item/clothing/under/turtlebaggy/purple
|
||||
name = "purple baggy turtleneck"
|
||||
icon_state = "bb_turtlepur"
|
||||
name = "purple baggy turtleneck"
|
||||
icon_state = "bb_turtlepur"
|
||||
|
||||
|
||||
/obj/item/clothing/under/turtlebaggy/purple_fem
|
||||
name = "feminine purple baggy turtleneck"
|
||||
icon_state = "bb_turtlepur_fem"
|
||||
name = "feminine purple baggy turtleneck"
|
||||
icon_state = "bb_turtlepur_fem"
|
||||
|
||||
|
||||
/obj/item/clothing/under/turtlebaggy/red
|
||||
name = "red baggy turtleneck"
|
||||
icon_state = "bb_turtlered"
|
||||
name = "red baggy turtleneck"
|
||||
icon_state = "bb_turtlered"
|
||||
|
||||
|
||||
/obj/item/clothing/under/turtlebaggy/red_fem
|
||||
name = "feminine red baggy turtleneck"
|
||||
icon_state = "bb_turtlered_fem"
|
||||
name = "feminine red baggy turtleneck"
|
||||
icon_state = "bb_turtlered_fem"
|
||||
|
||||
|
||||
/obj/item/clothing/under/turtlebaggy/blue
|
||||
name = "blue baggy turtleneck"
|
||||
icon_state = "bb_turtleblu"
|
||||
name = "blue baggy turtleneck"
|
||||
icon_state = "bb_turtleblu"
|
||||
|
||||
|
||||
/obj/item/clothing/under/turtlebaggy/blue_fem
|
||||
name = "feminine blue baggy turtleneck"
|
||||
icon_state = "bb_turtleblu_fem"
|
||||
name = "feminine blue baggy turtleneck"
|
||||
icon_state = "bb_turtleblu_fem"
|
||||
|
||||
|
||||
/obj/item/clothing/under/turtlebaggy/green
|
||||
name = "green baggy turtleneck"
|
||||
icon_state = "bb_turtlegrn"
|
||||
name = "green baggy turtleneck"
|
||||
icon_state = "bb_turtlegrn"
|
||||
|
||||
|
||||
/obj/item/clothing/under/turtlebaggy/green_fem
|
||||
name = "feminine green baggy turtleneck"
|
||||
icon_state = "bb_turtlegrn_fem"
|
||||
name = "feminine green baggy turtleneck"
|
||||
icon_state = "bb_turtlegrn_fem"
|
||||
|
||||
|
||||
/obj/item/clothing/under/turtlebaggy/black
|
||||
name = "black baggy turtleneck"
|
||||
icon_state = "bb_turtleblk"
|
||||
name = "black baggy turtleneck"
|
||||
icon_state = "bb_turtleblk"
|
||||
|
||||
|
||||
/obj/item/clothing/under/turtlebaggy/black_fem
|
||||
name = "feminine black baggy turtleneck"
|
||||
icon_state = "bb_turtleblk_fem"
|
||||
name = "feminine black baggy turtleneck"
|
||||
icon_state = "bb_turtleblk_fem"
|
||||
|
||||
//more big sweaters
|
||||
|
||||
@@ -1663,21 +1663,21 @@
|
||||
|
||||
//half-moon outfit
|
||||
/obj/item/clothing/under/half_moon
|
||||
name = "half moon outfit"
|
||||
desc = "This eminently fashionable outfit consists of a tailored latex leotard and daringly cut white shorts. Paired with plunging off-color stockings, it's to die for."
|
||||
icon_state = "half_moon"
|
||||
name = "half moon outfit"
|
||||
desc = "This eminently fashionable outfit consists of a tailored latex leotard and daringly cut white shorts. Paired with plunging off-color stockings, it's to die for."
|
||||
icon_state = "half_moon"
|
||||
|
||||
//fiend clothes
|
||||
/obj/item/clothing/under/fiendsuit
|
||||
name = "fiendish suit"
|
||||
desc = "A red and black suit befitting someone from the dark pits themselves… Or someone way too edgy."
|
||||
icon_state = "fiendsuit"
|
||||
name = "fiendish suit"
|
||||
desc = "A red and black suit befitting someone from the dark pits themselves… Or someone way too edgy."
|
||||
icon_state = "fiendsuit"
|
||||
|
||||
|
||||
/obj/item/clothing/under/fienddress
|
||||
name = "fiendish dress"
|
||||
desc = "A red and black dress befitting someone from the dark pits themselves… Or someone way too edgy."
|
||||
icon_state = "fienddress"
|
||||
name = "fiendish dress"
|
||||
desc = "A red and black dress befitting someone from the dark pits themselves… Or someone way too edgy."
|
||||
icon_state = "fienddress"
|
||||
|
||||
//bunny suits
|
||||
|
||||
|
||||
@@ -486,20 +486,20 @@
|
||||
manipulating = 1
|
||||
if(!anchored)
|
||||
user.visible_message("\The [user] begins securing \the [src] to the floor.",
|
||||
"You begin securing \the [src] to the floor.")
|
||||
"You begin securing \the [src] to the floor.")
|
||||
else
|
||||
user.visible_message(span_warning("\The [user] begins unsecuring \the [src] from the floor."),
|
||||
"You begin unsecuring \the [src] from the floor.")
|
||||
"You begin unsecuring \the [src] from the floor.")
|
||||
playsound(src, W.usesound, 50, 1)
|
||||
if(!do_after(user, 20 * W.toolspeed))
|
||||
manipulating = 0
|
||||
return
|
||||
if(!anchored)
|
||||
user.visible_message(span_notice("\The [user] has secured \the [src] to the floor."),
|
||||
span_notice("You have secured \the [src] to the floor."))
|
||||
span_notice("You have secured \the [src] to the floor."))
|
||||
else
|
||||
user.visible_message(span_warning("\The [user] has unsecured \the [src] from the floor."),
|
||||
span_notice("You have unsecured \the [src] from the floor."))
|
||||
span_notice("You have unsecured \the [src] from the floor."))
|
||||
anchored = !anchored
|
||||
manipulating = 0
|
||||
return
|
||||
|
||||
@@ -781,7 +781,7 @@
|
||||
)
|
||||
premium = list(/obj/item/bedsheet/rainbow = 1)
|
||||
contraband = list(/obj/item/clothing/mask/gas/clown_hat = 1,
|
||||
/obj/item/clothing/accessory/collar/collarplanet_earth = 5)
|
||||
/obj/item/clothing/accessory/collar/collarplanet_earth = 5)
|
||||
|
||||
/obj/machinery/vending/loadout/clothing
|
||||
name = "General Jump"
|
||||
|
||||
@@ -1,33 +1,33 @@
|
||||
// Not specifically /human type because those won't allow FBPs to use them
|
||||
/decl/emote/helper/vwag
|
||||
key = "vwag"
|
||||
emote_message_3p = ""
|
||||
key = "vwag"
|
||||
emote_message_3p = ""
|
||||
|
||||
/decl/emote/helper/vwag/mob_can_use(mob/living/carbon/human/user)
|
||||
if(!istype(user) || (!user.tail_style || !user.tail_style.ani_state))
|
||||
return FALSE
|
||||
return ..()
|
||||
if(!istype(user) || (!user.tail_style || !user.tail_style.ani_state))
|
||||
return FALSE
|
||||
return ..()
|
||||
|
||||
/decl/emote/helper/vwag/do_emote(var/mob/living/carbon/human/user, var/extra_params)
|
||||
if(user.toggle_tail(message = 1))
|
||||
return ..()
|
||||
if(user.toggle_tail(message = 1))
|
||||
return ..()
|
||||
|
||||
/decl/emote/helper/vwag/get_emote_message_3p(var/mob/living/carbon/human/user, var/atom/target, var/extra_params)
|
||||
return "[user.wagging ? "starts" : "stops"] wagging USER_THEIR tail."
|
||||
return "[user.wagging ? "starts" : "stops"] wagging USER_THEIR tail."
|
||||
|
||||
|
||||
/decl/emote/helper/vflap
|
||||
key = "vflap"
|
||||
emote_message_3p = ""
|
||||
key = "vflap"
|
||||
emote_message_3p = ""
|
||||
|
||||
/decl/emote/helper/vflap/mob_can_use(mob/living/carbon/human/user)
|
||||
if(!istype(user) || (!user.wing_style || !user.wing_style.ani_state))
|
||||
return FALSE
|
||||
return ..()
|
||||
if(!istype(user) || (!user.wing_style || !user.wing_style.ani_state))
|
||||
return FALSE
|
||||
return ..()
|
||||
|
||||
/decl/emote/helper/vflap/do_emote(var/mob/living/carbon/human/user, var/extra_params)
|
||||
if(user.toggle_wing(message = 1))
|
||||
return ..()
|
||||
if(user.toggle_wing(message = 1))
|
||||
return ..()
|
||||
|
||||
/decl/emote/helper/vflap/get_emote_message_3p(var/mob/living/carbon/human/user, var/atom/target, var/extra_params)
|
||||
return "[user.flapping ? "starts" : "stops"] flapping USER_THEIR wings."
|
||||
return "[user.flapping ? "starts" : "stops"] flapping USER_THEIR wings."
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/decl/emote/visible/mlem
|
||||
key = "mlem"
|
||||
emote_message_3p = "mlems USER_THEIR tongue up over USER_THEIR nose. Mlem."
|
||||
key = "mlem"
|
||||
emote_message_3p = "mlems USER_THEIR tongue up over USER_THEIR nose. Mlem."
|
||||
|
||||
/decl/emote/visible/blep
|
||||
key = "blep"
|
||||
emote_message_3p = "bleps USER_THEIR tongue out. Blep."
|
||||
key = "blep"
|
||||
emote_message_3p = "bleps USER_THEIR tongue out. Blep."
|
||||
|
||||
@@ -30,8 +30,8 @@ var/global/list/emotes_by_key
|
||||
var/emote_message_muffled // A message to show if the emote is audible and the user is muzzled.
|
||||
|
||||
var/list/emote_sound // A sound for the emote to play.
|
||||
// Can either be a single sound, a list of sounds to pick from, or an
|
||||
// associative array of gender to single sounds/a list of sounds.
|
||||
// Can either be a single sound, a list of sounds to pick from, or an
|
||||
// associative array of gender to single sounds/a list of sounds.
|
||||
var/list/emote_sound_synthetic // As above, but used when check_synthetic() is true.
|
||||
var/emote_volume = 50 // Volume of sound to play.
|
||||
var/emote_volume_synthetic = 50 // As above, but used when check_synthetic() is true.
|
||||
|
||||
+139
-139
@@ -1,154 +1,154 @@
|
||||
var/list/lunchables_lunches_ = list(/obj/item/reagent_containers/food/snacks/sandwich,
|
||||
/obj/item/reagent_containers/food/snacks/slice/meatbread/filled,
|
||||
/obj/item/reagent_containers/food/snacks/slice/tofubread/filled,
|
||||
/obj/item/reagent_containers/food/snacks/slice/creamcheesebread/filled,
|
||||
/obj/item/reagent_containers/food/snacks/slice/margherita/filled,
|
||||
/obj/item/reagent_containers/food/snacks/slice/meatpizza/filled,
|
||||
/obj/item/reagent_containers/food/snacks/slice/mushroompizza/filled,
|
||||
/obj/item/reagent_containers/food/snacks/slice/vegetablepizza/filled,
|
||||
/obj/item/reagent_containers/food/snacks/pineappleslice/filled,
|
||||
/obj/item/reagent_containers/food/snacks/tastybread,
|
||||
/obj/item/reagent_containers/food/snacks/bagelplain,
|
||||
/obj/item/reagent_containers/food/snacks/bagelsunflower,
|
||||
/obj/item/reagent_containers/food/snacks/bagelcheese,
|
||||
/obj/item/reagent_containers/food/snacks/bagelraisin,
|
||||
/obj/item/reagent_containers/food/snacks/bagelpoppy,
|
||||
/obj/item/reagent_containers/food/snacks/croissant,
|
||||
/obj/item/reagent_containers/food/snacks/corn_dog,
|
||||
/obj/item/reagent_containers/food/snacks/liquidfood,
|
||||
/obj/item/reagent_containers/food/snacks/liquidprotein,
|
||||
/obj/item/reagent_containers/food/snacks/liquidvitamin,
|
||||
/obj/item/reagent_containers/food/snacks/jellysandwich/cherry,
|
||||
/obj/item/reagent_containers/food/snacks/tossedsalad,
|
||||
/obj/item/reagent_containers/food/snacks/rosesalad,
|
||||
/obj/item/reagent_containers/food/snacks/boiledegg,
|
||||
/obj/item/reagent_containers/food/snacks/locust_cooked,
|
||||
/obj/item/reagent_containers/food/snacks/spicedmeatbun,
|
||||
/obj/item/reagent_containers/food/snacks/quicheslice/filled,
|
||||
/obj/item/reagent_containers/hypospray/autoinjector/biginjector/glucose,
|
||||
/obj/item/reagent_containers/food/snacks/packaged/sausageroll,
|
||||
/obj/item/reagent_containers/food/snacks/packaged/pasty,
|
||||
/obj/item/reagent_containers/food/snacks/packaged/scotchegg,
|
||||
/obj/item/reagent_containers/food/snacks/packaged/porkpie)
|
||||
/obj/item/reagent_containers/food/snacks/slice/meatbread/filled,
|
||||
/obj/item/reagent_containers/food/snacks/slice/tofubread/filled,
|
||||
/obj/item/reagent_containers/food/snacks/slice/creamcheesebread/filled,
|
||||
/obj/item/reagent_containers/food/snacks/slice/margherita/filled,
|
||||
/obj/item/reagent_containers/food/snacks/slice/meatpizza/filled,
|
||||
/obj/item/reagent_containers/food/snacks/slice/mushroompizza/filled,
|
||||
/obj/item/reagent_containers/food/snacks/slice/vegetablepizza/filled,
|
||||
/obj/item/reagent_containers/food/snacks/pineappleslice/filled,
|
||||
/obj/item/reagent_containers/food/snacks/tastybread,
|
||||
/obj/item/reagent_containers/food/snacks/bagelplain,
|
||||
/obj/item/reagent_containers/food/snacks/bagelsunflower,
|
||||
/obj/item/reagent_containers/food/snacks/bagelcheese,
|
||||
/obj/item/reagent_containers/food/snacks/bagelraisin,
|
||||
/obj/item/reagent_containers/food/snacks/bagelpoppy,
|
||||
/obj/item/reagent_containers/food/snacks/croissant,
|
||||
/obj/item/reagent_containers/food/snacks/corn_dog,
|
||||
/obj/item/reagent_containers/food/snacks/liquidfood,
|
||||
/obj/item/reagent_containers/food/snacks/liquidprotein,
|
||||
/obj/item/reagent_containers/food/snacks/liquidvitamin,
|
||||
/obj/item/reagent_containers/food/snacks/jellysandwich/cherry,
|
||||
/obj/item/reagent_containers/food/snacks/tossedsalad,
|
||||
/obj/item/reagent_containers/food/snacks/rosesalad,
|
||||
/obj/item/reagent_containers/food/snacks/boiledegg,
|
||||
/obj/item/reagent_containers/food/snacks/locust_cooked,
|
||||
/obj/item/reagent_containers/food/snacks/spicedmeatbun,
|
||||
/obj/item/reagent_containers/food/snacks/quicheslice/filled,
|
||||
/obj/item/reagent_containers/hypospray/autoinjector/biginjector/glucose,
|
||||
/obj/item/reagent_containers/food/snacks/packaged/sausageroll,
|
||||
/obj/item/reagent_containers/food/snacks/packaged/pasty,
|
||||
/obj/item/reagent_containers/food/snacks/packaged/scotchegg,
|
||||
/obj/item/reagent_containers/food/snacks/packaged/porkpie)
|
||||
|
||||
var/list/lunchables_snacks_ = list(/obj/item/reagent_containers/food/snacks/donut/plain/jelly,
|
||||
/obj/item/reagent_containers/food/snacks/donut/plain/jelly/cherryjelly,
|
||||
/obj/item/reagent_containers/food/snacks/muffin,
|
||||
/obj/item/reagent_containers/food/snacks/popcorn,
|
||||
/obj/item/reagent_containers/food/snacks/sosjerky,
|
||||
/obj/item/reagent_containers/food/snacks/unajerky,
|
||||
/obj/item/reagent_containers/food/snacks/no_raisin,
|
||||
/obj/item/reagent_containers/food/snacks/packaged/spacetwinkie,
|
||||
/obj/item/reagent_containers/food/snacks/cheesiehonkers,
|
||||
/obj/item/reagent_containers/food/snacks/poppypretzel,
|
||||
/obj/item/reagent_containers/food/snacks/carrotfries,
|
||||
/obj/item/reagent_containers/food/snacks/candiedapple,
|
||||
/obj/item/reagent_containers/food/snacks/applepie,
|
||||
/obj/item/reagent_containers/food/snacks/cherrypie,
|
||||
/obj/item/reagent_containers/food/snacks/plumphelmetbiscuit,
|
||||
/obj/item/reagent_containers/food/snacks/appletart,
|
||||
/obj/item/reagent_containers/food/snacks/slice/carrotcake/filled,
|
||||
/obj/item/reagent_containers/food/snacks/slice/cheesecake/filled,
|
||||
/obj/item/reagent_containers/food/snacks/slice/plaincake/filled,
|
||||
/obj/item/reagent_containers/food/snacks/slice/orangecake/filled,
|
||||
/obj/item/reagent_containers/food/snacks/slice/limecake/filled,
|
||||
/obj/item/reagent_containers/food/snacks/slice/lemoncake/filled,
|
||||
/obj/item/reagent_containers/food/snacks/slice/chocolatecake/filled,
|
||||
/obj/item/reagent_containers/food/snacks/slice/birthdaycake/filled,
|
||||
/obj/item/reagent_containers/food/snacks/watermelonslice,
|
||||
/obj/item/reagent_containers/food/snacks/slice/applecake/filled,
|
||||
/obj/item/reagent_containers/food/snacks/slice/pumpkinpie/filled,
|
||||
/obj/item/reagent_containers/food/snacks/keylimepieslice/filled,
|
||||
/obj/item/reagent_containers/food/snacks/browniesslice/filled,
|
||||
/obj/item/reagent_containers/food/snacks/skrellsnacks,
|
||||
/obj/item/reagent_containers/food/snacks/mint/admints,
|
||||
/obj/item/reagent_containers/food/snacks/roastedpeanuts,
|
||||
/obj/item/reagent_containers/food/snacks/sugarcookie,
|
||||
/obj/item/reagent_containers/food/snacks/eggroll,
|
||||
/obj/item/reagent_containers/food/snacks/fruitsalad,
|
||||
/obj/item/reagent_containers/food/snacks/honeybun,
|
||||
/obj/item/reagent_containers/food/snacks/custardbun,
|
||||
/obj/item/reagent_containers/food/snacks/honeytoast,
|
||||
/obj/item/reagent_containers/food/snacks/cookie,
|
||||
/obj/item/reagent_containers/food/snacks/fruitbar,
|
||||
/obj/item/reagent_containers/food/snacks/semki,
|
||||
/obj/item/reagent_containers/food/snacks/salo,
|
||||
/obj/item/reagent_containers/food/snacks/weebonuts,
|
||||
/obj/item/reagent_containers/food/snacks/ricecake,
|
||||
/obj/item/reagent_containers/food/snacks/packaged/lunacake,
|
||||
/obj/item/reagent_containers/food/snacks/packaged/darklunacake,
|
||||
/obj/item/reagent_containers/food/snacks/packaged/mochicake,
|
||||
/obj/item/reagent_containers/food/snacks/packaged/spacetwinkie,
|
||||
/obj/item/storage/box/jaffacake,
|
||||
/obj/item/storage/box/winegum,
|
||||
/obj/item/storage/box/custardcream,
|
||||
/obj/item/storage/box/bourbon
|
||||
)
|
||||
/obj/item/reagent_containers/food/snacks/donut/plain/jelly/cherryjelly,
|
||||
/obj/item/reagent_containers/food/snacks/muffin,
|
||||
/obj/item/reagent_containers/food/snacks/popcorn,
|
||||
/obj/item/reagent_containers/food/snacks/sosjerky,
|
||||
/obj/item/reagent_containers/food/snacks/unajerky,
|
||||
/obj/item/reagent_containers/food/snacks/no_raisin,
|
||||
/obj/item/reagent_containers/food/snacks/packaged/spacetwinkie,
|
||||
/obj/item/reagent_containers/food/snacks/cheesiehonkers,
|
||||
/obj/item/reagent_containers/food/snacks/poppypretzel,
|
||||
/obj/item/reagent_containers/food/snacks/carrotfries,
|
||||
/obj/item/reagent_containers/food/snacks/candiedapple,
|
||||
/obj/item/reagent_containers/food/snacks/applepie,
|
||||
/obj/item/reagent_containers/food/snacks/cherrypie,
|
||||
/obj/item/reagent_containers/food/snacks/plumphelmetbiscuit,
|
||||
/obj/item/reagent_containers/food/snacks/appletart,
|
||||
/obj/item/reagent_containers/food/snacks/slice/carrotcake/filled,
|
||||
/obj/item/reagent_containers/food/snacks/slice/cheesecake/filled,
|
||||
/obj/item/reagent_containers/food/snacks/slice/plaincake/filled,
|
||||
/obj/item/reagent_containers/food/snacks/slice/orangecake/filled,
|
||||
/obj/item/reagent_containers/food/snacks/slice/limecake/filled,
|
||||
/obj/item/reagent_containers/food/snacks/slice/lemoncake/filled,
|
||||
/obj/item/reagent_containers/food/snacks/slice/chocolatecake/filled,
|
||||
/obj/item/reagent_containers/food/snacks/slice/birthdaycake/filled,
|
||||
/obj/item/reagent_containers/food/snacks/watermelonslice,
|
||||
/obj/item/reagent_containers/food/snacks/slice/applecake/filled,
|
||||
/obj/item/reagent_containers/food/snacks/slice/pumpkinpie/filled,
|
||||
/obj/item/reagent_containers/food/snacks/keylimepieslice/filled,
|
||||
/obj/item/reagent_containers/food/snacks/browniesslice/filled,
|
||||
/obj/item/reagent_containers/food/snacks/skrellsnacks,
|
||||
/obj/item/reagent_containers/food/snacks/mint/admints,
|
||||
/obj/item/reagent_containers/food/snacks/roastedpeanuts,
|
||||
/obj/item/reagent_containers/food/snacks/sugarcookie,
|
||||
/obj/item/reagent_containers/food/snacks/eggroll,
|
||||
/obj/item/reagent_containers/food/snacks/fruitsalad,
|
||||
/obj/item/reagent_containers/food/snacks/honeybun,
|
||||
/obj/item/reagent_containers/food/snacks/custardbun,
|
||||
/obj/item/reagent_containers/food/snacks/honeytoast,
|
||||
/obj/item/reagent_containers/food/snacks/cookie,
|
||||
/obj/item/reagent_containers/food/snacks/fruitbar,
|
||||
/obj/item/reagent_containers/food/snacks/semki,
|
||||
/obj/item/reagent_containers/food/snacks/salo,
|
||||
/obj/item/reagent_containers/food/snacks/weebonuts,
|
||||
/obj/item/reagent_containers/food/snacks/ricecake,
|
||||
/obj/item/reagent_containers/food/snacks/packaged/lunacake,
|
||||
/obj/item/reagent_containers/food/snacks/packaged/darklunacake,
|
||||
/obj/item/reagent_containers/food/snacks/packaged/mochicake,
|
||||
/obj/item/reagent_containers/food/snacks/packaged/spacetwinkie,
|
||||
/obj/item/storage/box/jaffacake,
|
||||
/obj/item/storage/box/winegum,
|
||||
/obj/item/storage/box/custardcream,
|
||||
/obj/item/storage/box/bourbon
|
||||
)
|
||||
|
||||
var/list/lunchables_drinks_ = list(/obj/item/reagent_containers/food/drinks/cans/cola,
|
||||
/obj/item/reagent_containers/food/drinks/cans/waterbottle,
|
||||
/obj/item/reagent_containers/food/drinks/cans/decaf_cola,
|
||||
/obj/item/reagent_containers/food/drinks/cans/space_mountain_wind,
|
||||
/obj/item/reagent_containers/food/drinks/cans/dr_gibb,
|
||||
/obj/item/reagent_containers/food/drinks/cans/dr_gibb_diet,
|
||||
/obj/item/reagent_containers/food/drinks/cans/starkist,
|
||||
/obj/item/reagent_containers/food/drinks/cans/starkistdecaf,
|
||||
/obj/item/reagent_containers/food/drinks/cans/space_up,
|
||||
/obj/item/reagent_containers/food/drinks/cans/lemon_lime,
|
||||
/obj/item/reagent_containers/food/drinks/cans/iced_tea,
|
||||
/obj/item/reagent_containers/food/drinks/cans/grape_juice,
|
||||
/obj/item/reagent_containers/food/drinks/cans/tonic,
|
||||
/obj/item/reagent_containers/food/drinks/cans/sodawater,
|
||||
/obj/item/reagent_containers/food/drinks/cans/gingerale,
|
||||
/obj/item/reagent_containers/food/drinks/cans/root_beer,
|
||||
/obj/item/reagent_containers/food/drinks/cans/sarsaparilla,
|
||||
/obj/item/reagent_containers/food/drinks/cans/straw_cola,
|
||||
/obj/item/reagent_containers/food/drinks/cans/apple_cola,
|
||||
/obj/item/reagent_containers/food/drinks/cans/lemon_cola,
|
||||
/obj/item/reagent_containers/food/drinks/cans/nukie_peach,
|
||||
/obj/item/reagent_containers/food/drinks/cans/nukie_pear,
|
||||
/obj/item/reagent_containers/food/drinks/cans/nukie_cherry,
|
||||
/obj/item/reagent_containers/food/drinks/cans/nukie_melon,
|
||||
/obj/item/reagent_containers/food/drinks/cans/nukie_banana,
|
||||
/obj/item/reagent_containers/food/drinks/cans/nukie_rose,
|
||||
/obj/item/reagent_containers/food/drinks/cans/nukie_lemon,
|
||||
/obj/item/reagent_containers/food/drinks/cans/nukie_fruit
|
||||
)
|
||||
/obj/item/reagent_containers/food/drinks/cans/waterbottle,
|
||||
/obj/item/reagent_containers/food/drinks/cans/decaf_cola,
|
||||
/obj/item/reagent_containers/food/drinks/cans/space_mountain_wind,
|
||||
/obj/item/reagent_containers/food/drinks/cans/dr_gibb,
|
||||
/obj/item/reagent_containers/food/drinks/cans/dr_gibb_diet,
|
||||
/obj/item/reagent_containers/food/drinks/cans/starkist,
|
||||
/obj/item/reagent_containers/food/drinks/cans/starkistdecaf,
|
||||
/obj/item/reagent_containers/food/drinks/cans/space_up,
|
||||
/obj/item/reagent_containers/food/drinks/cans/lemon_lime,
|
||||
/obj/item/reagent_containers/food/drinks/cans/iced_tea,
|
||||
/obj/item/reagent_containers/food/drinks/cans/grape_juice,
|
||||
/obj/item/reagent_containers/food/drinks/cans/tonic,
|
||||
/obj/item/reagent_containers/food/drinks/cans/sodawater,
|
||||
/obj/item/reagent_containers/food/drinks/cans/gingerale,
|
||||
/obj/item/reagent_containers/food/drinks/cans/root_beer,
|
||||
/obj/item/reagent_containers/food/drinks/cans/sarsaparilla,
|
||||
/obj/item/reagent_containers/food/drinks/cans/straw_cola,
|
||||
/obj/item/reagent_containers/food/drinks/cans/apple_cola,
|
||||
/obj/item/reagent_containers/food/drinks/cans/lemon_cola,
|
||||
/obj/item/reagent_containers/food/drinks/cans/nukie_peach,
|
||||
/obj/item/reagent_containers/food/drinks/cans/nukie_pear,
|
||||
/obj/item/reagent_containers/food/drinks/cans/nukie_cherry,
|
||||
/obj/item/reagent_containers/food/drinks/cans/nukie_melon,
|
||||
/obj/item/reagent_containers/food/drinks/cans/nukie_banana,
|
||||
/obj/item/reagent_containers/food/drinks/cans/nukie_rose,
|
||||
/obj/item/reagent_containers/food/drinks/cans/nukie_lemon,
|
||||
/obj/item/reagent_containers/food/drinks/cans/nukie_fruit
|
||||
)
|
||||
|
||||
// This default list is a bit different, it contains items we don't want
|
||||
var/list/lunchables_drink_reagents_ = list(/datum/reagent/drink/nothing,
|
||||
/datum/reagent/drink/doctor_delight,
|
||||
/datum/reagent/drink/dry_ramen,
|
||||
/datum/reagent/drink/hell_ramen,
|
||||
/datum/reagent/drink/hot_ramen,
|
||||
/datum/reagent/drink/soda/nuka_cola,
|
||||
/datum/reagent/drink/coffee/nukie/mega,
|
||||
/datum/reagent/drink/coffee/nukie/mega/sight,
|
||||
/datum/reagent/drink/coffee/nukie/mega/heart,
|
||||
/datum/reagent/drink/coffee/nukie/mega/nega,
|
||||
/datum/reagent/drink/coffee/nukie/mega/shock,
|
||||
/datum/reagent/drink/coffee/nukie/mega/fast,
|
||||
/datum/reagent/drink/coffee/nukie/mega/high,
|
||||
/datum/reagent/drink/coffee/nukie/mega/shrink,
|
||||
/datum/reagent/drink/coffee/nukie/mega/grow)
|
||||
/datum/reagent/drink/doctor_delight,
|
||||
/datum/reagent/drink/dry_ramen,
|
||||
/datum/reagent/drink/hell_ramen,
|
||||
/datum/reagent/drink/hot_ramen,
|
||||
/datum/reagent/drink/soda/nuka_cola,
|
||||
/datum/reagent/drink/coffee/nukie/mega,
|
||||
/datum/reagent/drink/coffee/nukie/mega/sight,
|
||||
/datum/reagent/drink/coffee/nukie/mega/heart,
|
||||
/datum/reagent/drink/coffee/nukie/mega/nega,
|
||||
/datum/reagent/drink/coffee/nukie/mega/shock,
|
||||
/datum/reagent/drink/coffee/nukie/mega/fast,
|
||||
/datum/reagent/drink/coffee/nukie/mega/high,
|
||||
/datum/reagent/drink/coffee/nukie/mega/shrink,
|
||||
/datum/reagent/drink/coffee/nukie/mega/grow)
|
||||
|
||||
|
||||
// This default list is a bit different, it contains items we don't want
|
||||
var/list/lunchables_ethanol_reagents_ = list(/datum/reagent/ethanol/acid_spit,
|
||||
/datum/reagent/ethanol/atomicbomb,
|
||||
/datum/reagent/ethanol/beepsky_smash,
|
||||
/datum/reagent/ethanol/coffee,
|
||||
/datum/reagent/ethanol/hippies_delight,
|
||||
/datum/reagent/ethanol/hooch,
|
||||
/datum/reagent/ethanol/thirteenloko,
|
||||
/datum/reagent/ethanol/manhattan_proj,
|
||||
/datum/reagent/ethanol/neurotoxin,
|
||||
/datum/reagent/ethanol/pwine,
|
||||
/datum/reagent/ethanol/threemileisland,
|
||||
/datum/reagent/ethanol/toxins_special,
|
||||
/datum/reagent/ethanol/voxdelight,
|
||||
/datum/reagent/ethanol/soemmerfire,
|
||||
/datum/reagent/ethanol/slimeshot)
|
||||
/datum/reagent/ethanol/atomicbomb,
|
||||
/datum/reagent/ethanol/beepsky_smash,
|
||||
/datum/reagent/ethanol/coffee,
|
||||
/datum/reagent/ethanol/hippies_delight,
|
||||
/datum/reagent/ethanol/hooch,
|
||||
/datum/reagent/ethanol/thirteenloko,
|
||||
/datum/reagent/ethanol/manhattan_proj,
|
||||
/datum/reagent/ethanol/neurotoxin,
|
||||
/datum/reagent/ethanol/pwine,
|
||||
/datum/reagent/ethanol/threemileisland,
|
||||
/datum/reagent/ethanol/toxins_special,
|
||||
/datum/reagent/ethanol/voxdelight,
|
||||
/datum/reagent/ethanol/soemmerfire,
|
||||
/datum/reagent/ethanol/slimeshot)
|
||||
|
||||
/proc/lunchables_lunches()
|
||||
if(!(lunchables_lunches_[lunchables_lunches_[1]]))
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
* * items are objects. Fruits, tools, circuit boards.
|
||||
* * result is type to create as new object
|
||||
* * time is optional parameter, you shall use in in your machine,
|
||||
default /datum/recipe/ procs does not rely on this parameter.
|
||||
* default /datum/recipe/ procs does not rely on this parameter.
|
||||
*
|
||||
* Functions you need:
|
||||
* /datum/recipe/proc/make(var/obj/container as obj)
|
||||
|
||||
@@ -10,8 +10,8 @@
|
||||
var/list/drink_recipes = list()
|
||||
for(var/decl/chemical_reaction/instant/drinks/CR in SSchemistry.chemical_reactions)
|
||||
drink_recipes[CR.type] = list("Result" = CR.name,
|
||||
"ResAmt" = CR.result_amount,
|
||||
"Reagents" = CR.required_reagents,
|
||||
"ResAmt" = CR.result_amount,
|
||||
"Reagents" = CR.required_reagents,
|
||||
"Catalysts" = CR.catalysts)
|
||||
|
||||
//////////////////////// FOOD
|
||||
|
||||
@@ -8,11 +8,11 @@
|
||||
random_color = FALSE
|
||||
|
||||
/obj/item/tool/wirecutters/clippers/trimmers
|
||||
name = "hedgetrimmers"
|
||||
desc = "An old pair of trimmers with a pretty dull blade. You would probably have a hard time cutting anything but plants with it."
|
||||
icon_state = "hedget"
|
||||
item_state = "hedget"
|
||||
force = 7 //One point extra than standard wire cutters.
|
||||
name = "hedgetrimmers"
|
||||
desc = "An old pair of trimmers with a pretty dull blade. You would probably have a hard time cutting anything but plants with it."
|
||||
icon_state = "hedget"
|
||||
item_state = "hedget"
|
||||
force = 7 //One point extra than standard wire cutters.
|
||||
|
||||
/obj/item/tool/wirecutters/clippers/trimmers/afterattack(atom/A as mob|obj|turf|area, mob/user as mob, proximity)
|
||||
if(!proximity) return
|
||||
|
||||
@@ -36,14 +36,14 @@
|
||||
var/sw = I.GetPixel(x - 1, y - 1)
|
||||
|
||||
var/sum_adj = ((n == "#00ff00"? 1 : 0) \
|
||||
+ (s == "#00ff00"? 1 : 0) \
|
||||
+ (e == "#00ff00"? 1 : 0) \
|
||||
+ (w == "#00ff00"? 1 : 0))
|
||||
+ (s == "#00ff00"? 1 : 0) \
|
||||
+ (e == "#00ff00"? 1 : 0) \
|
||||
+ (w == "#00ff00"? 1 : 0))
|
||||
|
||||
var/sum_diag = ((ne == "#00ff00"? 1 : 0) \
|
||||
+ (se == "#00ff00"? 1 : 0) \
|
||||
+ (nw == "#00ff00"? 1 : 0) \
|
||||
+ (sw == "#00ff00"? 1 : 0))
|
||||
+ (se == "#00ff00"? 1 : 0) \
|
||||
+ (nw == "#00ff00"? 1 : 0) \
|
||||
+ (sw == "#00ff00"? 1 : 0))
|
||||
|
||||
|
||||
if(sum_adj)
|
||||
@@ -234,35 +234,35 @@ var/list/rune_animation = list(
|
||||
|
||||
var/obj/o = new(t)
|
||||
o.icon = animate_rune_full(I, rand(0, 255), rand(0, 255), rand(0, 255), rand(-255, 255),
|
||||
rand(0, 255), rand(0, 255), rand(0, 255), rand(-255, 255),
|
||||
rand(0, 255), rand(0, 255), rand(0, 255), rand(-255, 255),
|
||||
rand(0, 255), rand(0, 255), rand(0, 255), rand(-255, 255),
|
||||
0, 0, 0, rand(0, 255),
|
||||
0, 0, 0, rand(0, 255),
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
list(
|
||||
list(0.000, 5),
|
||||
list(0.020, 1),
|
||||
list(0.050, 1),
|
||||
list(0.090, 1),
|
||||
list(0.140, 1),
|
||||
list(0.200, 1),
|
||||
list(0.270, 1),
|
||||
list(0.340, 1),
|
||||
list(0.420, 1),
|
||||
list(0.500, 1),
|
||||
list(0.590, 1),
|
||||
list(0.675, 1),
|
||||
list(0.750, 1),
|
||||
list(0.900, 1),
|
||||
list(1.000, 6),
|
||||
list(0.875, 1),
|
||||
list(0.750, 1),
|
||||
list(0.625, 1),
|
||||
list(0.500, 1),
|
||||
list(0.375, 1),
|
||||
list(0.250, 1),
|
||||
list(0.125, 1),
|
||||
))
|
||||
rand(0, 255), rand(0, 255), rand(0, 255), rand(-255, 255),
|
||||
rand(0, 255), rand(0, 255), rand(0, 255), rand(-255, 255),
|
||||
rand(0, 255), rand(0, 255), rand(0, 255), rand(-255, 255),
|
||||
0, 0, 0, rand(0, 255),
|
||||
0, 0, 0, rand(0, 255),
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
list(
|
||||
list(0.000, 5),
|
||||
list(0.020, 1),
|
||||
list(0.050, 1),
|
||||
list(0.090, 1),
|
||||
list(0.140, 1),
|
||||
list(0.200, 1),
|
||||
list(0.270, 1),
|
||||
list(0.340, 1),
|
||||
list(0.420, 1),
|
||||
list(0.500, 1),
|
||||
list(0.590, 1),
|
||||
list(0.675, 1),
|
||||
list(0.750, 1),
|
||||
list(0.900, 1),
|
||||
list(1.000, 6),
|
||||
list(0.875, 1),
|
||||
list(0.750, 1),
|
||||
list(0.625, 1),
|
||||
list(0.500, 1),
|
||||
list(0.375, 1),
|
||||
list(0.250, 1),
|
||||
list(0.125, 1),
|
||||
))
|
||||
*/
|
||||
|
||||
@@ -12,8 +12,8 @@ A [2]\ /[8] result
|
||||
B [1]-\|++|/
|
||||
C [4]-/|++|
|
||||
D [1]/ ||
|
||||
||
|
||||
Activator
|
||||
||
|
||||
Activator
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -3,14 +3,14 @@
|
||||
name = "ref pin"
|
||||
|
||||
/datum/integrated_io/ref/ask_for_pin_data(mob/user, obj/item/I)
|
||||
if(istype(I, /obj/item/multitool))
|
||||
var/obj/item/multitool/tool = I
|
||||
write_data_to_pin(tool.weakref_wiring)
|
||||
else if(istype(I, /obj/item/integrated_electronics/debugger))
|
||||
var/obj/item/integrated_electronics/debugger/tool = I
|
||||
write_data_to_pin(tool.data_to_write)
|
||||
else
|
||||
write_data_to_pin(null)
|
||||
if(istype(I, /obj/item/multitool))
|
||||
var/obj/item/multitool/tool = I
|
||||
write_data_to_pin(tool.weakref_wiring)
|
||||
else if(istype(I, /obj/item/integrated_electronics/debugger))
|
||||
var/obj/item/integrated_electronics/debugger/tool = I
|
||||
write_data_to_pin(tool.data_to_write)
|
||||
else
|
||||
write_data_to_pin(null)
|
||||
|
||||
/datum/integrated_io/ref/write_data_to_pin(var/new_data)
|
||||
if(isnull(new_data) || isweakref(new_data))
|
||||
|
||||
@@ -311,7 +311,7 @@ Category: Reference
|
||||
<li>"} + span_bold("Avoid opening fire locks.") + {"</li>
|
||||
</ul>
|
||||
<p class="indent">In the event of depressurization, the station's fire locks automatically drop in an attempt to contain the breach. However, this can also impede movement. If possible, find an alternate route to your destination or find a safe place to wait until the station's engineering team repairs the station. Do not open a fire lock without an engineer's express permission unless you are in immediate mortal danger. After you have opened a fire lock, make sure to close it immediately so as to prevent the breach from spreading.</p>
|
||||
<ul>
|
||||
<ul>
|
||||
<li>"} + span_bold("Listen to emergency personnel.") + {"</li>
|
||||
</ul>
|
||||
<p class="indent">Follow the instructions of engineering, medical, and security personnel, as well as the orders of the heads of staff. Engineering personnel are trained to fix these situations, and medical personnel will likely be conducting search and rescue operations. Do not impede them and follow their instructions; you are more likely to survive, and less likely to endanger your fellow crew members.</p>
|
||||
|
||||
@@ -4,64 +4,64 @@ BS12 object based lighting system
|
||||
|
||||
/*
|
||||
Changes from tg DAL:
|
||||
- Lighting is done using objects instead of subareas.
|
||||
- Animated transitions. (newer tg DAL has this)
|
||||
- Full colours with mixing.
|
||||
- Support for lights on shuttles.
|
||||
- Lighting is done using objects instead of subareas.
|
||||
- Animated transitions. (newer tg DAL has this)
|
||||
- Full colours with mixing.
|
||||
- Support for lights on shuttles.
|
||||
|
||||
- Code:
|
||||
- Instead of one flat luminosity var, light is represented by 3 atom vars:
|
||||
- light_range; range in tiles of the light, used for calculating falloff,
|
||||
- light_power; multiplier for the brightness of lights,
|
||||
- light_color; hex string representing the RGB colour of the light.
|
||||
- setLuminousity() is now set_light() and takes the three variables above.
|
||||
- Variables can be left as null to not update them.
|
||||
- set_opacity() is now set_opacity().
|
||||
- Areas have luminosity set to 1 permanently, no hard-lighting.
|
||||
- Objects inside other objects can have lights and they properly affect the turf. (flashlights)
|
||||
- area/master and area/list/related have been eviscerated since subareas aren't needed.
|
||||
- Code:
|
||||
- Instead of one flat luminosity var, light is represented by 3 atom vars:
|
||||
- light_range; range in tiles of the light, used for calculating falloff,
|
||||
- light_power; multiplier for the brightness of lights,
|
||||
- light_color; hex string representing the RGB colour of the light.
|
||||
- setLuminousity() is now set_light() and takes the three variables above.
|
||||
- Variables can be left as null to not update them.
|
||||
- set_opacity() is now set_opacity().
|
||||
- Areas have luminosity set to 1 permanently, no hard-lighting.
|
||||
- Objects inside other objects can have lights and they properly affect the turf. (flashlights)
|
||||
- area/master and area/list/related have been eviscerated since subareas aren't needed.
|
||||
*/
|
||||
|
||||
/*
|
||||
Relevant vars/procs:
|
||||
|
||||
atom: (lighting_atom.dm)
|
||||
- var/light_range; range in tiles of the light, used for calculating falloff
|
||||
- var/light_power; multiplier for the brightness of lights
|
||||
- var/light_color; hex string representing the RGB colour of the light
|
||||
- var/light_range; range in tiles of the light, used for calculating falloff
|
||||
- var/light_power; multiplier for the brightness of lights
|
||||
- var/light_color; hex string representing the RGB colour of the light
|
||||
|
||||
- var/datum/light_source/light; light source datum for this atom, only present if light_range && light_power
|
||||
- var/list/light_sources; light sources in contents that are shining through this object, including this object
|
||||
- var/datum/light_source/light; light source datum for this atom, only present if light_range && light_power
|
||||
- var/list/light_sources; light sources in contents that are shining through this object, including this object
|
||||
|
||||
- proc/set_light(l_range, l_power, l_color):
|
||||
- Sets light_range/power/color to non-null args and calls update_light()
|
||||
- proc/set_opacity(new_opacity):
|
||||
- Sets opacity to new_opacity.
|
||||
- If opacity has changed, call turf.reconsider_lights() to fix light occlusion
|
||||
- proc/update_light():
|
||||
- Updates the light var on this atom, deleting or creating as needed and calling .update()
|
||||
- proc/set_light(l_range, l_power, l_color):
|
||||
- Sets light_range/power/color to non-null args and calls update_light()
|
||||
- proc/set_opacity(new_opacity):
|
||||
- Sets opacity to new_opacity.
|
||||
- If opacity has changed, call turf.reconsider_lights() to fix light occlusion
|
||||
- proc/update_light():
|
||||
- Updates the light var on this atom, deleting or creating as needed and calling .update()
|
||||
|
||||
|
||||
turf: (lighting_turf.dm)
|
||||
- var/list/affecting_lights; list of light sources that are shining onto this turf
|
||||
- var/list/affecting_lights; list of light sources that are shining onto this turf
|
||||
|
||||
- proc/reconsider_lights():
|
||||
- Force all light sources shining onto this turf to update
|
||||
- proc/reconsider_lights():
|
||||
- Force all light sources shining onto this turf to update
|
||||
|
||||
- proc/lighting_clear_overlays():
|
||||
- Delete (manual GC) all light overlays on this turf, used when changing turf to space
|
||||
- proc/lighting_build_overlays():
|
||||
- Create lighting overlays for this turf
|
||||
- proc/lighting_clear_overlays():
|
||||
- Delete (manual GC) all light overlays on this turf, used when changing turf to space
|
||||
- proc/lighting_build_overlays():
|
||||
- Create lighting overlays for this turf
|
||||
|
||||
|
||||
/atom/movable/lighting_overlay: (lighting_overlay.dm)
|
||||
- var/lum_r, var/lum_g, var/lum_b; lumcounts of each colour
|
||||
- var/needs_update; set on update_lumcount, checked by lighting process
|
||||
- var/lum_r, var/lum_g, var/lum_b; lumcounts of each colour
|
||||
- var/needs_update; set on update_lumcount, checked by lighting process
|
||||
|
||||
- var/xoffset, var/yoffset; (only present when using sub-tile overlays) fractional offset of this overlay in the tile
|
||||
- var/xoffset, var/yoffset; (only present when using sub-tile overlays) fractional offset of this overlay in the tile
|
||||
|
||||
- proc/update_lumcount(delta_r, delta_g, delta_b):
|
||||
- Change the lumcount vars and queue the overlay for update
|
||||
- proc/update_overlay()
|
||||
- Called by the lighting process to update the color of the overlay
|
||||
- proc/update_lumcount(delta_r, delta_g, delta_b):
|
||||
- Change the lumcount vars and queue the overlay for update
|
||||
- proc/update_overlay()
|
||||
- Called by the lighting process to update the color of the overlay
|
||||
*/
|
||||
|
||||
@@ -76,11 +76,11 @@
|
||||
// Yes this doesn't align correctly on anything other than 4 width tabs.
|
||||
// If you want it to go switch everybody to elastic tab stops.
|
||||
// Actually that'd be great if you could!
|
||||
#define EFFECT_UPDATE(level) \
|
||||
#define EFFECT_UPDATE(level) \
|
||||
if (needs_update == LIGHTING_NO_UPDATE) \
|
||||
SSlighting.sources_queue += src; \
|
||||
if (needs_update < level) \
|
||||
needs_update = level; \
|
||||
SSlighting.sources_queue += src; \
|
||||
if (needs_update < level) \
|
||||
needs_update = level; \
|
||||
|
||||
|
||||
// This proc will cause the light source to update the top atom, and add itself to the update queue.
|
||||
@@ -133,40 +133,40 @@
|
||||
|
||||
#define LUM_FALLOFF(C) (1 - CLAMP01(sqrt((C.x - _turf_x) ** 2 + (C.y - _turf_y) ** 2 + LIGHTING_HEIGHT) / _range_divisor))
|
||||
|
||||
#define APPLY_CORNER(C) \
|
||||
. = LUM_FALLOFF(C); \
|
||||
. *= _light_power; \
|
||||
var/OLD = effect_str[C]; \
|
||||
\
|
||||
C.update_lumcount \
|
||||
( \
|
||||
(. * _lum_r) - (OLD * _applied_lum_r), \
|
||||
(. * _lum_g) - (OLD * _applied_lum_g), \
|
||||
(. * _lum_b) - (OLD * _applied_lum_b) \
|
||||
); \
|
||||
#define APPLY_CORNER(C) \
|
||||
. = LUM_FALLOFF(C); \
|
||||
. *= _light_power; \
|
||||
var/OLD = effect_str[C]; \
|
||||
\
|
||||
C.update_lumcount \
|
||||
( \
|
||||
(. * _lum_r) - (OLD * _applied_lum_r), \
|
||||
(. * _lum_g) - (OLD * _applied_lum_g), \
|
||||
(. * _lum_b) - (OLD * _applied_lum_b) \
|
||||
); \
|
||||
|
||||
#define APPLY_CORNER_NEW(C) \
|
||||
. = LUM_FALLOFF(C); \
|
||||
. *= _light_power; \
|
||||
var/OLD = effect_str[C]; \
|
||||
if (. != 0){ \
|
||||
LAZYADD(C.affecting, src); \
|
||||
effect_str[C] = .; \
|
||||
} \
|
||||
C.update_lumcount \
|
||||
( \
|
||||
(. * _lum_r) - (OLD * _applied_lum_r), \
|
||||
(. * _lum_g) - (OLD * _applied_lum_g), \
|
||||
(. * _lum_b) - (OLD * _applied_lum_b) \
|
||||
); \
|
||||
#define APPLY_CORNER_NEW(C) \
|
||||
. = LUM_FALLOFF(C); \
|
||||
. *= _light_power; \
|
||||
var/OLD = effect_str[C]; \
|
||||
if (. != 0){ \
|
||||
LAZYADD(C.affecting, src); \
|
||||
effect_str[C] = .; \
|
||||
} \
|
||||
C.update_lumcount \
|
||||
( \
|
||||
(. * _lum_r) - (OLD * _applied_lum_r), \
|
||||
(. * _lum_g) - (OLD * _applied_lum_g), \
|
||||
(. * _lum_b) - (OLD * _applied_lum_b) \
|
||||
); \
|
||||
|
||||
#define REMOVE_CORNER(C) \
|
||||
. = -effect_str[C]; \
|
||||
C.update_lumcount \
|
||||
( \
|
||||
. * _applied_lum_r, \
|
||||
. * _applied_lum_g, \
|
||||
. * _applied_lum_b \
|
||||
#define REMOVE_CORNER(C) \
|
||||
. = -effect_str[C]; \
|
||||
C.update_lumcount \
|
||||
( \
|
||||
. * _applied_lum_r, \
|
||||
. * _applied_lum_g, \
|
||||
. * _applied_lum_b \
|
||||
);
|
||||
|
||||
/datum/light_source/proc/remove_lum()
|
||||
|
||||
@@ -754,12 +754,12 @@
|
||||
name = "07/07/63 - Vir Election Results"
|
||||
data = "The results of the 2563 Vir Gubernatorial Elections are as follows:\
|
||||
<br>\
|
||||
Governor of Vir: Lusia Hainirsdottir (Shadow Coalition)\
|
||||
<br>\
|
||||
Vir Colonial Assembly Representative: Vani Jee (Icarus Front)\
|
||||
<br>\
|
||||
Vir Colonial Assembly Representative: Selma Jorg (Shadow Coalition)\
|
||||
<br>\
|
||||
Governor of Vir: Lusia Hainirsdottir (Shadow Coalition)\
|
||||
<br>\
|
||||
Vir Colonial Assembly Representative: Vani Jee (Icarus Front)\
|
||||
<br>\
|
||||
Vir Colonial Assembly Representative: Selma Jorg (Shadow Coalition)\
|
||||
<br>\
|
||||
Other candidates ranked: Sao (4), Zarshir (5), Keldow (6), Singh (7), Moravec (8), Phaedrus (9), Lye (10), Savik (11), Square (12), Wekstrom (13)\
|
||||
<br><br>\
|
||||
Voter turnout: 30,928,287 (63%)\
|
||||
|
||||
@@ -230,8 +230,8 @@
|
||||
and kit-bashed into a high-tech cleaver on a stick - with a handguard and a goliath hide grip. While it is still of little use to any \
|
||||
but the most skilled and/or suicidal miners against local fauna, it's an elegant weapon for a more civilized hunter."
|
||||
|
||||
look gary there i am
|
||||
- hatterhat
|
||||
look gary there i am
|
||||
- hatterhat
|
||||
*/
|
||||
|
||||
|
||||
|
||||
@@ -1,30 +1,30 @@
|
||||
/datum/modifier/crusher_mark
|
||||
name = "destabilized"
|
||||
desc = "You've been struck by a destabilizing bolt. By all accounts, this is probably a bad thing."
|
||||
stacks = MODIFIER_STACK_EXTEND
|
||||
on_created_text = span_warning("You feel physically unstable.")
|
||||
on_expired_text = span_notice("You feel physically stable again.")
|
||||
var/mutable_appearance/marked_underlay
|
||||
var/obj/item/kinetic_crusher/hammer_synced
|
||||
name = "destabilized"
|
||||
desc = "You've been struck by a destabilizing bolt. By all accounts, this is probably a bad thing."
|
||||
stacks = MODIFIER_STACK_EXTEND
|
||||
on_created_text = span_warning("You feel physically unstable.")
|
||||
on_expired_text = span_notice("You feel physically stable again.")
|
||||
var/mutable_appearance/marked_underlay
|
||||
var/obj/item/kinetic_crusher/hammer_synced
|
||||
|
||||
/datum/modifier/crusher_mark/New(var/new_holder, var/new_origin)
|
||||
. = ..()
|
||||
if(isliving(new_origin))
|
||||
var/mob/living/origin = new_origin
|
||||
var/obj/item/kinetic_crusher/to_sync
|
||||
if(istype(origin.get_active_hand(), /obj/item/kinetic_crusher))
|
||||
to_sync = origin.get_active_hand()
|
||||
else if (istype(origin.get_inactive_hand(), /obj/item/kinetic_crusher))
|
||||
to_sync = origin.get_inactive_hand()
|
||||
if(to_sync) // did we find it?
|
||||
hammer_synced = to_sync // go ahead
|
||||
if(hammer_synced? hammer_synced.can_mark(holder) : TRUE)
|
||||
marked_underlay = mutable_appearance('icons/effects/effects.dmi', "shield2")
|
||||
marked_underlay.pixel_x = -holder.pixel_x
|
||||
marked_underlay.pixel_y = -holder.pixel_y
|
||||
holder.underlays += marked_underlay
|
||||
else
|
||||
Destroy()
|
||||
. = ..()
|
||||
if(isliving(new_origin))
|
||||
var/mob/living/origin = new_origin
|
||||
var/obj/item/kinetic_crusher/to_sync
|
||||
if(istype(origin.get_active_hand(), /obj/item/kinetic_crusher))
|
||||
to_sync = origin.get_active_hand()
|
||||
else if (istype(origin.get_inactive_hand(), /obj/item/kinetic_crusher))
|
||||
to_sync = origin.get_inactive_hand()
|
||||
if(to_sync) // did we find it?
|
||||
hammer_synced = to_sync // go ahead
|
||||
if(hammer_synced? hammer_synced.can_mark(holder) : TRUE)
|
||||
marked_underlay = mutable_appearance('icons/effects/effects.dmi', "shield2")
|
||||
marked_underlay.pixel_x = -holder.pixel_x
|
||||
marked_underlay.pixel_y = -holder.pixel_y
|
||||
holder.underlays += marked_underlay
|
||||
else
|
||||
Destroy()
|
||||
|
||||
/datum/modifier/crusher_mark/Destroy()
|
||||
hammer_synced = null
|
||||
|
||||
@@ -87,9 +87,9 @@
|
||||
return eyeobj.EyeMove(n, direct)
|
||||
|
||||
/mob/observer/eye/proc/GetViewerClient()
|
||||
if(owner)
|
||||
return owner.client
|
||||
return null
|
||||
if(owner)
|
||||
return owner.client
|
||||
return null
|
||||
|
||||
/mob/observer/eye/EyeMove(n, direct)
|
||||
var/initial = initial(sprint)
|
||||
|
||||
@@ -184,13 +184,13 @@
|
||||
return list("AI") // AI door!
|
||||
|
||||
/proc/encode_html_emphasis(message)
|
||||
var/tagged_message = message
|
||||
for(var/delimiter in GLOB.speech_toppings)
|
||||
var/regex/R = new("\\[delimiter](.+?)\\[delimiter]","g")
|
||||
var/tag = GLOB.speech_toppings[delimiter]
|
||||
tagged_message = R.Replace(tagged_message,"<[tag]>$1</[tag]>")
|
||||
var/tagged_message = message
|
||||
for(var/delimiter in GLOB.speech_toppings)
|
||||
var/regex/R = new("\\[delimiter](.+?)\\[delimiter]","g")
|
||||
var/tag = GLOB.speech_toppings[delimiter]
|
||||
tagged_message = R.Replace(tagged_message,"<[tag]>$1</[tag]>")
|
||||
|
||||
return tagged_message
|
||||
return tagged_message
|
||||
|
||||
/mob/proc/hear_radio(var/list/message_pieces, var/verb = "says", var/part_a, var/part_b, var/part_c, var/part_d, var/part_e, var/mob/speaker = null, var/hard_to_hear = 0, var/vname = "")
|
||||
if(!client)
|
||||
|
||||
@@ -80,8 +80,8 @@
|
||||
colour = "bug"
|
||||
key = "X"
|
||||
syllables = list("vaur","uyek","uyit","avek","sc'theth","k'ztak","teth","wre'ge","lii","dra'","zo'","ra'","kax'","zz","vh","ik","ak",
|
||||
"uhk","zir","sc'orth","sc'er","thc'yek","th'zirk","th'esk","k'ayek","ka'mil","sc'","ik'yir","yol","kig","k'zit","'","'","zrk","krg","isk'yet","na'k",
|
||||
"sc'azz","th'sc","nil","n'ahk","sc'yeth","aur'sk","iy'it","azzg","a'","i'","o'","u'","a","i","o","u","zz","kr","ak","nrk","tzzk","bz","xic'","k'lax'","histh")
|
||||
"uhk","zir","sc'orth","sc'er","thc'yek","th'zirk","th'esk","k'ayek","ka'mil","sc'","ik'yir","yol","kig","k'zit","'","'","zrk","krg","isk'yet","na'k",
|
||||
"sc'azz","th'sc","nil","n'ahk","sc'yeth","aur'sk","iy'it","azzg","a'","i'","o'","u'","a","i","o","u","zz","kr","ak","nrk","tzzk","bz","xic'","k'lax'","histh")
|
||||
|
||||
/datum/language/shadekin
|
||||
name = LANGUAGE_SHADEKIN
|
||||
|
||||
@@ -59,7 +59,7 @@
|
||||
|
||||
else
|
||||
visible_message(span_infoplain(span_bold("\The [src]") + " starts licking the wounds on [M]'s [affecting.name] clean."), \
|
||||
span_notice("You start licking the wounds on [M]'s [affecting.name] clean.") )
|
||||
span_notice("You start licking the wounds on [M]'s [affecting.name] clean.") )
|
||||
|
||||
for (var/datum/wound/W in affecting.wounds)
|
||||
|
||||
@@ -76,11 +76,11 @@
|
||||
|
||||
else
|
||||
visible_message(span_notice("\The [src] [pick("slathers \a [W.desc] on [M]'s [affecting.name] with their spit.",
|
||||
"drags their tongue across \a [W.desc] on [M]'s [affecting.name].",
|
||||
"drips saliva onto \a [W.desc] on [M]'s [affecting.name].",
|
||||
"uses their tongue to disinfect \a [W.desc] on [M]'s [affecting.name].",
|
||||
"licks \a [W.desc] on [M]'s [affecting.name], cleaning it.")]"), \
|
||||
span_notice("You treat \a [W.desc] on [M]'s [affecting.name] with your antiseptic saliva.") )
|
||||
"drags their tongue across \a [W.desc] on [M]'s [affecting.name].",
|
||||
"drips saliva onto \a [W.desc] on [M]'s [affecting.name].",
|
||||
"uses their tongue to disinfect \a [W.desc] on [M]'s [affecting.name].",
|
||||
"licks \a [W.desc] on [M]'s [affecting.name], cleaning it.")]"), \
|
||||
span_notice("You treat \a [W.desc] on [M]'s [affecting.name] with your antiseptic saliva.") )
|
||||
adjust_nutrition(-20)
|
||||
W.salve()
|
||||
W.bandage()
|
||||
|
||||
@@ -428,7 +428,7 @@
|
||||
return
|
||||
|
||||
/mob/living/proc/adjust_fire_stacks(add_fire_stacks) //Adjusting the amount of fire_stacks we have on person
|
||||
fire_stacks = CLAMP(fire_stacks + add_fire_stacks, FIRE_MIN_STACKS, FIRE_MAX_STACKS)
|
||||
fire_stacks = CLAMP(fire_stacks + add_fire_stacks, FIRE_MIN_STACKS, FIRE_MAX_STACKS)
|
||||
|
||||
/mob/living/proc/handle_fire()
|
||||
if(fire_stacks < 0)
|
||||
|
||||
@@ -165,15 +165,15 @@
|
||||
B.digest_mode = DM_SELECT
|
||||
|
||||
/mob/living/simple_mob/vore/pakkun/attackby(var/obj/item/O, var/mob/user) //if they're newspapered, they'll spit out any junk they've eaten for whatever reason
|
||||
if(istype(O, /obj/item/newspaper) && !ckey && isturf(user.loc))
|
||||
user.visible_message(span_info("[user] swats [src] with [O]!"))
|
||||
release_vore_contents()
|
||||
for(var/mob/living/L in living_mobs(0))
|
||||
if(!(LAZYFIND(prey_excludes, L)))
|
||||
LAZYSET(prey_excludes, L, world.time)
|
||||
addtimer(CALLBACK(src, PROC_REF(removeMobFromPreyExcludes), WEAKREF(L)), 5 MINUTES)
|
||||
else
|
||||
..()
|
||||
if(istype(O, /obj/item/newspaper) && !ckey && isturf(user.loc))
|
||||
user.visible_message(span_info("[user] swats [src] with [O]!"))
|
||||
release_vore_contents()
|
||||
for(var/mob/living/L in living_mobs(0))
|
||||
if(!(LAZYFIND(prey_excludes, L)))
|
||||
LAZYSET(prey_excludes, L, world.time)
|
||||
addtimer(CALLBACK(src, PROC_REF(removeMobFromPreyExcludes), WEAKREF(L)), 5 MINUTES)
|
||||
else
|
||||
..()
|
||||
|
||||
//a palette-swapped version that's a bit bossier, in JRPG tradition
|
||||
|
||||
|
||||
@@ -117,13 +117,13 @@
|
||||
consider_wg()
|
||||
|
||||
/mob/living/simple_mob/vore/raptor/proc/consider_wg()
|
||||
var/past_state = wg_state
|
||||
if(nutrition >= 900)
|
||||
wg_state = 1
|
||||
else
|
||||
wg_state = 0
|
||||
if(past_state != wg_state)
|
||||
update_icon()
|
||||
var/past_state = wg_state
|
||||
if(nutrition >= 900)
|
||||
wg_state = 1
|
||||
else
|
||||
wg_state = 0
|
||||
if(past_state != wg_state)
|
||||
update_icon()
|
||||
|
||||
/mob/living/simple_mob/vore/raptor/update_icon()
|
||||
if(wg_state == 1)
|
||||
|
||||
@@ -1228,13 +1228,13 @@
|
||||
ckeys_allowed = list("natje")
|
||||
|
||||
/datum/sprite_accessory/ears/frost
|
||||
name = "Frost antenna"
|
||||
desc = ""
|
||||
icon_state = "frosted_tips"
|
||||
ckeys_allowed = list("tucker0666")
|
||||
name = "Frost antenna"
|
||||
desc = ""
|
||||
icon_state = "frosted_tips"
|
||||
ckeys_allowed = list("tucker0666")
|
||||
|
||||
/datum/sprite_accessory/ears/sylv_pip
|
||||
name = "sylveon ears and ribbons (Pip Shyner)"
|
||||
desc = ""
|
||||
icon_state = "pipears"
|
||||
ckeys_allowed = list("phoaly")
|
||||
name = "sylveon ears and ribbons (Pip Shyner)"
|
||||
desc = ""
|
||||
icon_state = "pipears"
|
||||
ckeys_allowed = list("phoaly")
|
||||
|
||||
@@ -126,22 +126,22 @@
|
||||
do_colouration = 1
|
||||
|
||||
/datum/sprite_accessory/tail/rabbit
|
||||
name = "rabbit, colourable (vwag)"
|
||||
desc = ""
|
||||
icon_state = "rabbit"
|
||||
do_colouration = TRUE
|
||||
color_blend_mode = ICON_MULTIPLY
|
||||
ani_state = "rabbit_w"
|
||||
name = "rabbit, colourable (vwag)"
|
||||
desc = ""
|
||||
icon_state = "rabbit"
|
||||
do_colouration = TRUE
|
||||
color_blend_mode = ICON_MULTIPLY
|
||||
ani_state = "rabbit_w"
|
||||
|
||||
/datum/sprite_accessory/tail/rabbitalt
|
||||
name = "rabbit, dual color (vwag)"
|
||||
desc = ""
|
||||
icon_state = "rabbitalt"
|
||||
extra_overlay = "rabbitalt-tips"
|
||||
do_colouration = TRUE
|
||||
color_blend_mode = ICON_MULTIPLY
|
||||
ani_state = "rabbitalt_w"
|
||||
extra_overlay_w = "rabbitalt-tips_w"
|
||||
name = "rabbit, dual color (vwag)"
|
||||
desc = ""
|
||||
icon_state = "rabbitalt"
|
||||
extra_overlay = "rabbitalt-tips"
|
||||
do_colouration = TRUE
|
||||
color_blend_mode = ICON_MULTIPLY
|
||||
ani_state = "rabbitalt_w"
|
||||
extra_overlay_w = "rabbitalt-tips_w"
|
||||
|
||||
/datum/sprite_accessory/tail/bear_brown
|
||||
name = "bear, brown"
|
||||
@@ -1169,14 +1169,14 @@
|
||||
extra_overlay = "ninekitsune-tips"
|
||||
|
||||
/datum/sprite_accessory/tail/hideableninetails
|
||||
name = "Kitsune 9-in-1 tail, colourable (vwag)"
|
||||
desc = ""
|
||||
icon_state = "ninekitsune"
|
||||
extra_overlay = "ninekitsune-tips"
|
||||
do_colouration = TRUE
|
||||
color_blend_mode = ICON_MULTIPLY
|
||||
ani_state = "foxtail_w"
|
||||
extra_overlay_w = "foxtail-tips_w"
|
||||
name = "Kitsune 9-in-1 tail, colourable (vwag)"
|
||||
desc = ""
|
||||
icon_state = "ninekitsune"
|
||||
extra_overlay = "ninekitsune-tips"
|
||||
do_colouration = TRUE
|
||||
color_blend_mode = ICON_MULTIPLY
|
||||
ani_state = "foxtail_w"
|
||||
extra_overlay_w = "foxtail-tips_w"
|
||||
|
||||
/datum/sprite_accessory/tail/shadekin_short
|
||||
name = "Shadekin Short Tail, colorable"
|
||||
@@ -1702,16 +1702,16 @@
|
||||
ckeys_allowed = list("arokha")
|
||||
|
||||
/datum/sprite_accessory/tail/cabletail
|
||||
name = "cabletail"
|
||||
desc = "cabletail"
|
||||
icon_state = "cabletail"
|
||||
ckeys_allowed = list("tucker0666")
|
||||
name = "cabletail"
|
||||
desc = "cabletail"
|
||||
icon_state = "cabletail"
|
||||
ckeys_allowed = list("tucker0666")
|
||||
|
||||
/datum/sprite_accessory/tail/featherfluff_tail
|
||||
name = "featherfluff_tail"
|
||||
desc = ""
|
||||
icon_state = "featherfluff_tail"
|
||||
ckeys_allowed = list("tucker0666")
|
||||
name = "featherfluff_tail"
|
||||
desc = ""
|
||||
icon_state = "featherfluff_tail"
|
||||
ckeys_allowed = list("tucker0666")
|
||||
|
||||
/datum/sprite_accessory/tail/holly
|
||||
name = "tigress tail (Holly)"
|
||||
|
||||
@@ -569,11 +569,11 @@
|
||||
color_blend_mode = ICON_MULTIPLY
|
||||
|
||||
/datum/sprite_accessory/wing/mothwings_luna_colorable
|
||||
name = "Moth Wings (Luna, Colorable)"
|
||||
desc = ""
|
||||
icon_state = "mothwings_luna_colorable"
|
||||
do_colouration = 1
|
||||
color_blend_mode = ICON_MULTIPLY
|
||||
name = "Moth Wings (Luna, Colorable)"
|
||||
desc = ""
|
||||
icon_state = "mothwings_luna_colorable"
|
||||
do_colouration = 1
|
||||
color_blend_mode = ICON_MULTIPLY
|
||||
|
||||
/datum/sprite_accessory/wing/sect_drone_alt
|
||||
name = "Sect drone wings Alt. (To use with bodytype marking)"
|
||||
|
||||
@@ -61,18 +61,18 @@ var/const/cyberbeast_monitor_styles = "blank=cyber_blank;\
|
||||
|
||||
// tucker0666 : Frost
|
||||
/datum/robolimb/zenghu_frost
|
||||
company = "Zeng-Hu (Custom)"
|
||||
desc = "This limb has realistic synthetic flesh covering with 'blue accents'."
|
||||
icon = 'icons/mob/human_races/cyberlimbs/_fluff_vr/Frosty.dmi'
|
||||
blood_color = "#45ccff"
|
||||
lifelike = 1
|
||||
skin_tone = 1
|
||||
unavailable_to_build = 1
|
||||
whitelisted_to = list("tucker0666")
|
||||
company = "Zeng-Hu (Custom)"
|
||||
desc = "This limb has realistic synthetic flesh covering with 'blue accents'."
|
||||
icon = 'icons/mob/human_races/cyberlimbs/_fluff_vr/Frosty.dmi'
|
||||
blood_color = "#45ccff"
|
||||
lifelike = 1
|
||||
skin_tone = 1
|
||||
unavailable_to_build = 1
|
||||
whitelisted_to = list("tucker0666")
|
||||
|
||||
/obj/item/disk/limb/zenghu_frost
|
||||
company = "Zeng-Hu (Modified)"
|
||||
catalogue_data = list(/datum/category_item/catalogue/information/organization/zeng_hu)
|
||||
company = "Zeng-Hu (Modified)"
|
||||
catalogue_data = list(/datum/category_item/catalogue/information/organization/zeng_hu)
|
||||
|
||||
//Ported from CitRP
|
||||
/datum/robolimb/cyber_beast
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
var/max_entries = 1000 //1000 paintings is a lot, and will take a long time to cycle through.
|
||||
|
||||
/datum/persistent/paintings/SetFilename()
|
||||
filename = "data/persistent/paintings.json"
|
||||
filename = "data/persistent/paintings.json"
|
||||
|
||||
/datum/persistent/paintings/Initialize()
|
||||
. = ..()
|
||||
|
||||
@@ -45,12 +45,12 @@
|
||||
LAZYADDASSOC(., "items", storage_list)
|
||||
|
||||
// Usage: returns list with structure:
|
||||
// list(
|
||||
// [type1] = [stored_quantity],
|
||||
// [type2] = [stored_quantity]
|
||||
// )
|
||||
// list(
|
||||
// [type1] = [stored_quantity],
|
||||
// [type2] = [stored_quantity]
|
||||
// )
|
||||
/datum/persistent/storage/proc/get_storage_list(var/atom/entry)
|
||||
return list() // Subtypes define list structure
|
||||
return list() // Subtypes define list structure
|
||||
|
||||
/datum/persistent/storage/proc/find_specific_instance(var/turf/T)
|
||||
return locate(target_type) in T
|
||||
|
||||
@@ -76,24 +76,24 @@
|
||||
sheets_refunded = 2
|
||||
|
||||
/obj/machinery/light_construct/floortube/verb/rotate_clockwise()
|
||||
set name = "Rotate Fixture Clockwise"
|
||||
set category = "Object"
|
||||
set src in view(1)
|
||||
set name = "Rotate Fixture Clockwise"
|
||||
set category = "Object"
|
||||
set src in view(1)
|
||||
|
||||
if (usr.stat || usr.restrained() || anchored)
|
||||
return
|
||||
if (usr.stat || usr.restrained() || anchored)
|
||||
return
|
||||
|
||||
src.set_dir(turn(src.dir, 270))
|
||||
src.set_dir(turn(src.dir, 270))
|
||||
|
||||
/obj/machinery/light_construct/floortube/verb/rotate_counterclockwise()
|
||||
set name = "Rotate Fixture Counter-Clockwise"
|
||||
set category = "Object"
|
||||
set src in view(1)
|
||||
set name = "Rotate Fixture Counter-Clockwise"
|
||||
set category = "Object"
|
||||
set src in view(1)
|
||||
|
||||
if (usr.stat || usr.restrained() || anchored)
|
||||
return
|
||||
if (usr.stat || usr.restrained() || anchored)
|
||||
return
|
||||
|
||||
src.set_dir(turn(src.dir, 90))
|
||||
src.set_dir(turn(src.dir, 90))
|
||||
|
||||
/obj/machinery/light_construct/floortube/update_icon()
|
||||
switch(stage)
|
||||
|
||||
@@ -481,10 +481,10 @@ GLOBAL_LIST_BOILERPLATE(all_singularities, /obj/singularity)
|
||||
move_self = 1
|
||||
|
||||
/obj/singularity/singularity_act(S, size)
|
||||
if(current_size <= size)
|
||||
var/gain = (energy/2)
|
||||
var/dist = max((current_size - 2), 1)
|
||||
explosion(src.loc,(dist),(dist*2),(dist*4))
|
||||
spawn(0)
|
||||
qdel(src)
|
||||
return gain
|
||||
if(current_size <= size)
|
||||
var/gain = (energy/2)
|
||||
var/dist = max((current_size - 2), 1)
|
||||
explosion(src.loc,(dist),(dist*2),(dist*4))
|
||||
spawn(0)
|
||||
qdel(src)
|
||||
return gain
|
||||
|
||||
@@ -374,7 +374,7 @@
|
||||
//Release reaction gasses
|
||||
var/heat_capacity = removed.heat_capacity()
|
||||
removed.adjust_multi(GAS_PHORON, max(device_energy / PHORON_RELEASE_MODIFIER, 0), \
|
||||
GAS_O2, max((device_energy + removed.temperature - T0C) / OXYGEN_RELEASE_MODIFIER, 0))
|
||||
GAS_O2, max((device_energy + removed.temperature - T0C) / OXYGEN_RELEASE_MODIFIER, 0))
|
||||
|
||||
var/thermal_power = THERMAL_RELEASE_MODIFIER * device_energy
|
||||
if (debug)
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
spinning_up = TRUE
|
||||
update_icon()
|
||||
user.visible_message(span_notice("[user] starts charging the [src]!"), \
|
||||
span_notice("You start charging the [src]!"))
|
||||
span_notice("You start charging the [src]!"))
|
||||
if(do_after(user, 8, src))
|
||||
spinning_up = FALSE
|
||||
..()
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user