mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-23 20:16:55 +01:00
Merge pull request #15410 from AffectedArc07/brutal-part1
BRUTAL CI Part 1 - No proc var/ in procs
This commit is contained in:
@@ -4,26 +4,26 @@
|
||||
* The spin from being thrown will interrupt most of these animations as will grabs, account for that accordingly.
|
||||
*/
|
||||
|
||||
/proc/animate_fade_grayscale(var/atom/A, var/time = 5)
|
||||
/proc/animate_fade_grayscale(atom/A, time = 5)
|
||||
if(!istype(A) && !istype(A, /client))
|
||||
return
|
||||
A.color = null
|
||||
animate(A, color = MATRIX_GREYSCALE, time = time, easing = SINE_EASING)
|
||||
|
||||
/proc/animate_melt_pixel(var/atom/A)
|
||||
/proc/animate_melt_pixel(atom/A)
|
||||
if(!istype(A))
|
||||
return
|
||||
animate(A, pixel_y = 0, time = 50 - A.pixel_y, alpha = 175, easing = BOUNCE_EASING)
|
||||
animate(alpha = 0, easing = LINEAR_EASING)
|
||||
|
||||
/proc/animate_explode_pixel(var/atom/A)
|
||||
/proc/animate_explode_pixel(atom/A)
|
||||
if(!istype(A))
|
||||
return
|
||||
var/floatdegrees = rand(5, 20)
|
||||
var/side = pick(-1, 1)
|
||||
animate(A, pixel_x = rand(-64, 64), pixel_y = rand(-64, 64), transform = matrix(floatdegrees * (side == 1 ? 1:-1), MATRIX_ROTATE), time = 10, alpha = 0, easing = SINE_EASING)
|
||||
|
||||
/proc/animate_float(var/atom/A, var/loopnum = -1, floatspeed = 20, random_side = 1)
|
||||
/proc/animate_float(atom/A, loopnum = -1, floatspeed = 20, random_side = 1)
|
||||
if(!istype(A))
|
||||
return
|
||||
var/floatdegrees = rand(5, 20)
|
||||
@@ -35,7 +35,7 @@
|
||||
animate(A, pixel_y = 32, transform = matrix(floatdegrees * (side == 1 ? 1:-1), MATRIX_ROTATE), time = floatspeed, loop = loopnum, easing = SINE_EASING)
|
||||
animate(pixel_y = 0, transform = matrix(floatdegrees * (side == 1 ? -1:1), MATRIX_ROTATE), time = floatspeed, loop = loopnum, easing = SINE_EASING)
|
||||
|
||||
/proc/animate_levitate(var/atom/A, var/loopnum = -1, floatspeed = 20, random_side = 1)
|
||||
/proc/animate_levitate(atom/A, loopnum = -1, floatspeed = 20, random_side = 1)
|
||||
if(!istype(A))
|
||||
return
|
||||
var/floatdegrees = rand(5, 20)
|
||||
@@ -47,7 +47,7 @@
|
||||
animate(A, pixel_y = 8, transform = matrix(floatdegrees * (side == 1 ? 1:-1), MATRIX_ROTATE), time = floatspeed, loop = loopnum, easing = SINE_EASING)
|
||||
animate(pixel_y = 0, transform = null, time = floatspeed, loop = loopnum, easing = SINE_EASING)
|
||||
|
||||
/proc/animate_ghostly_presence(var/atom/A, var/loopnum = -1, floatspeed = 20, random_side = 1)
|
||||
/proc/animate_ghostly_presence(atom/A, loopnum = -1, floatspeed = 20, random_side = 1)
|
||||
if(!istype(A))
|
||||
return
|
||||
var/floatdegrees = rand(5, 20)
|
||||
@@ -59,7 +59,7 @@
|
||||
animate(A, pixel_y = 8, transform = matrix(floatdegrees * (side == 1 ? 1:-1), MATRIX_ROTATE), time = floatspeed, loop = loopnum, easing = SINE_EASING)
|
||||
animate(pixel_y = 0, transform = matrix(floatdegrees * (side == 1 ? -1:1), MATRIX_ROTATE), time = floatspeed, loop = loopnum, easing = SINE_EASING)
|
||||
|
||||
/proc/animate_fading_leap_up(var/atom/A)
|
||||
/proc/animate_fading_leap_up(atom/A)
|
||||
if(!istype(A))
|
||||
return
|
||||
var/matrix/M = matrix()
|
||||
@@ -71,7 +71,7 @@
|
||||
sleep(1)
|
||||
A.alpha = 0
|
||||
|
||||
/proc/animate_fading_leap_down(var/atom/A)
|
||||
/proc/animate_fading_leap_down(atom/A)
|
||||
if(!istype(A))
|
||||
return
|
||||
var/matrix/M = matrix()
|
||||
@@ -84,7 +84,7 @@
|
||||
sleep(1)
|
||||
animate(A, transform = M, pixel_z = 0, alpha = 255, time = 1, loop = 1, easing = LINEAR_EASING)
|
||||
|
||||
/proc/animate_shake(var/atom/A, var/amount = 5, var/x_severity = 2, var/y_severity = 2)
|
||||
/proc/animate_shake(atom/A, amount = 5, x_severity = 2, y_severity = 2)
|
||||
// Wiggles the sprite around on its tile then returns it to normal
|
||||
if(!istype(A))
|
||||
return
|
||||
@@ -101,7 +101,7 @@
|
||||
spawn(amount)
|
||||
animate(A, transform = null, pixel_y = 0, pixel_x = 0,time = 1,loop = 1, easing = LINEAR_EASING)
|
||||
|
||||
/proc/animate_teleport(var/atom/A)
|
||||
/proc/animate_teleport(atom/A)
|
||||
if(!istype(A))
|
||||
return
|
||||
var/matrix/M = matrix(1, 3, MATRIX_SCALE)
|
||||
@@ -110,7 +110,7 @@
|
||||
animate(transform = M, time = 5, color = "#1111ff", alpha = 0, easing = CIRCULAR_EASING)
|
||||
animate(transform = null, time = 5, color = "#ffffff", alpha = 255, pixel_y = 0, easing = ELASTIC_EASING)
|
||||
|
||||
/proc/animate_teleport_wiz(var/atom/A)
|
||||
/proc/animate_teleport_wiz(atom/A)
|
||||
if(!istype(A))
|
||||
return
|
||||
var/matrix/M = matrix(0, 4, MATRIX_SCALE)
|
||||
@@ -119,14 +119,14 @@
|
||||
animate(time = 8, transform = M, alpha = 5) //Do nothing, essentially
|
||||
animate(transform = null, time = 5, color = "#ffffff", alpha = 255, pixel_y = 0, easing = ELASTIC_EASING)
|
||||
|
||||
/proc/animate_rainbow_glow_old(var/atom/A)
|
||||
/proc/animate_rainbow_glow_old(atom/A)
|
||||
if(!istype(A))
|
||||
return
|
||||
animate(A, color = "#FF0000", time = rand(5,10), loop = -1, easing = LINEAR_EASING)
|
||||
animate(color = "#00FF00", time = rand(5,10), loop = -1, easing = LINEAR_EASING)
|
||||
animate(color = "#0000FF", time = rand(5,10), loop = -1, easing = LINEAR_EASING)
|
||||
|
||||
/proc/animate_rainbow_glow(var/atom/A)
|
||||
/proc/animate_rainbow_glow(atom/A)
|
||||
if(!istype(A))
|
||||
return
|
||||
animate(A, color = "#FF0000", time = rand(5,10), loop = -1, easing = LINEAR_EASING)
|
||||
@@ -136,37 +136,37 @@
|
||||
animate(color = "#0000FF", time = rand(5,10), loop = -1, easing = LINEAR_EASING)
|
||||
animate(color = "#FF00FF", time = rand(5,10), loop = -1, easing = LINEAR_EASING)
|
||||
|
||||
/proc/animate_fade_to_color_fill(var/atom/A, var/the_color, var/time)
|
||||
/proc/animate_fade_to_color_fill(atom/A, the_color, time)
|
||||
if(!istype(A) || !the_color || !time)
|
||||
return
|
||||
animate(A, color = the_color, time = time, easing = LINEAR_EASING)
|
||||
|
||||
/proc/animate_flash_color_fill(var/atom/A, var/the_color, var/loops, var/time)
|
||||
/proc/animate_flash_color_fill(atom/A, the_color, loops, time)
|
||||
if(!istype(A) || !the_color || !time || !loops)
|
||||
return
|
||||
animate(A, color = the_color, time = time, easing = LINEAR_EASING)
|
||||
animate(color = "#FFFFFF", time = 5, loop = loops, easing = LINEAR_EASING)
|
||||
|
||||
/proc/animate_flash_color_fill_inherit(var/atom/A, var/the_color, var/loops, var/time)
|
||||
/proc/animate_flash_color_fill_inherit(atom/A, the_color, loops, time)
|
||||
if(!istype(A) || !the_color || !time || !loops)
|
||||
return
|
||||
var/color_old = A.color
|
||||
animate(A, color = the_color, time = time, loop = loops, easing = LINEAR_EASING)
|
||||
animate(A, color = color_old, time = time, loop = loops, easing = LINEAR_EASING)
|
||||
|
||||
/proc/animate_clownspell(var/atom/A)
|
||||
/proc/animate_clownspell(atom/A)
|
||||
if(!istype(A))
|
||||
return
|
||||
animate(A, transform = matrix(1.3, MATRIX_SCALE), time = 5, color = "#00ff00", easing = BACK_EASING)
|
||||
animate(transform = null, time = 5, color = "#ffffff", easing = ELASTIC_EASING)
|
||||
|
||||
/proc/animate_wiggle_then_reset(var/atom/A, var/loops = 5, var/speed = 5, var/x_var = 3, var/y_var = 3)
|
||||
/proc/animate_wiggle_then_reset(atom/A, loops = 5, speed = 5, x_var = 3, y_var = 3)
|
||||
if(!istype(A) || !loops || !speed)
|
||||
return
|
||||
animate(A, pixel_x = rand(-x_var, x_var), pixel_y = rand(-y_var, y_var), time = speed * 2,loop = loops, easing = rand(2,7))
|
||||
animate(pixel_x = 0, pixel_y = 0, time = speed, easing = rand(2,7))
|
||||
|
||||
/proc/animate_spin(var/atom/A, var/dir = "L", var/T = 1, var/looping = -1)
|
||||
/proc/animate_spin(atom/A, dir = "L", T = 1, looping = -1)
|
||||
if(!istype(A))
|
||||
return
|
||||
|
||||
@@ -180,7 +180,7 @@
|
||||
animate(transform = matrix(M, turn, MATRIX_ROTATE | MATRIX_MODIFY), time = T, loop = looping)
|
||||
animate(transform = matrix(M, turn, MATRIX_ROTATE | MATRIX_MODIFY), time = T, loop = looping)
|
||||
|
||||
/proc/animate_shockwave(var/atom/A)
|
||||
/proc/animate_shockwave(atom/A)
|
||||
if(!istype(A))
|
||||
return
|
||||
var/punchstr = rand(10, 20)
|
||||
|
||||
@@ -149,7 +149,7 @@ GLOBAL_PROTECT(log_end)
|
||||
|
||||
// A logging proc that only outputs after setup is done, to
|
||||
// help devs test initialization stuff that happens a lot
|
||||
/proc/log_after_setup(var/message)
|
||||
/proc/log_after_setup(message)
|
||||
if(SSticker && SSticker.current_state > GAME_STATE_SETTING_UP)
|
||||
to_chat(world, "<span class='danger'>[message]</span>")
|
||||
log_world(message)
|
||||
@@ -160,7 +160,7 @@ GLOBAL_PROTECT(log_end)
|
||||
|
||||
// Helper procs for building detailed log lines
|
||||
|
||||
/proc/datum_info_line(var/datum/d)
|
||||
/proc/datum_info_line(datum/d)
|
||||
if(!istype(d))
|
||||
return
|
||||
if(!istype(d, /mob))
|
||||
@@ -168,7 +168,7 @@ GLOBAL_PROTECT(log_end)
|
||||
var/mob/m = d
|
||||
return "[m] ([m.ckey]) ([m.type])"
|
||||
|
||||
/proc/atom_loc_line(var/atom/a)
|
||||
/proc/atom_loc_line(atom/a)
|
||||
if(!istype(a))
|
||||
return
|
||||
var/turf/t = get_turf(a)
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
|
||||
// Like view but bypasses luminosity check
|
||||
|
||||
/proc/hear(var/range, var/atom/source)
|
||||
/proc/hear(range, atom/source)
|
||||
var/lum = source.luminosity
|
||||
source.luminosity = 6
|
||||
|
||||
@@ -145,7 +145,7 @@
|
||||
// It will keep doing this until it checks every content possible. This will fix any problems with mobs, that are inside objects,
|
||||
// being unable to hear people due to being in a box within a bag.
|
||||
|
||||
/proc/recursive_mob_check(var/atom/O, var/list/L = list(), var/recursion_limit = 3, var/client_check = 1, var/sight_check = 1, var/include_radio = 1)
|
||||
/proc/recursive_mob_check(atom/O, list/L = list(), recursion_limit = 3, client_check = 1, sight_check = 1, include_radio = 1)
|
||||
|
||||
//GLOB.debug_mob += O.contents.len
|
||||
if(!recursion_limit)
|
||||
@@ -174,7 +174,7 @@
|
||||
// The old system would loop through lists for a total of 5000 per function call, in an empty server.
|
||||
// This new system will loop at around 1000 in an empty server.
|
||||
|
||||
/proc/get_mobs_in_view(var/R, var/atom/source, var/include_clientless = FALSE)
|
||||
/proc/get_mobs_in_view(R, atom/source, include_clientless = FALSE)
|
||||
// Returns a list of mobs in range of R from source. Used in radio and say code.
|
||||
|
||||
var/turf/T = get_turf(source)
|
||||
@@ -200,7 +200,7 @@
|
||||
return hear
|
||||
|
||||
|
||||
/proc/get_mobs_in_radio_ranges(var/list/obj/item/radio/radios)
|
||||
/proc/get_mobs_in_radio_ranges(list/obj/item/radio/radios)
|
||||
. = list()
|
||||
// Returns a list of mobs who can hear any of the radios given in @radios
|
||||
var/list/speaker_coverage = list()
|
||||
@@ -263,7 +263,7 @@
|
||||
return 0
|
||||
return 1
|
||||
|
||||
/proc/isInSight(var/atom/A, var/atom/B)
|
||||
/proc/isInSight(atom/A, atom/B)
|
||||
var/turf/Aturf = get_turf(A)
|
||||
var/turf/Bturf = get_turf(B)
|
||||
|
||||
@@ -293,7 +293,7 @@
|
||||
if(AM.Move(get_step(T, direction)))
|
||||
break
|
||||
|
||||
/proc/get_mob_by_key(var/key)
|
||||
/proc/get_mob_by_key(key)
|
||||
for(var/mob/M in GLOB.mob_list)
|
||||
if(M.ckey == lowertext(key))
|
||||
return M
|
||||
@@ -392,7 +392,7 @@
|
||||
src.dest_x = dest_x
|
||||
src.dest_y = dest_y
|
||||
|
||||
/proc/projectile_trajectory(var/src_x, var/src_y, var/rotation, var/angle, var/power)
|
||||
/proc/projectile_trajectory(src_x, src_y, rotation, angle, power)
|
||||
|
||||
// returns the destination (Vx,y) that a projectile shot at [src_x], [src_y], with an angle of [angle],
|
||||
// rotated at [rotation] and with the power of [power]
|
||||
@@ -410,7 +410,7 @@
|
||||
return new /datum/projectile_data(src_x, src_y, time, distance, power_x, power_y, dest_x, dest_y)
|
||||
|
||||
|
||||
/proc/mobs_in_area(var/area/the_area, var/client_needed=0, var/moblist=GLOB.mob_list)
|
||||
/proc/mobs_in_area(area/the_area, client_needed=0, moblist=GLOB.mob_list)
|
||||
var/list/mobs_found[0]
|
||||
var/area/our_area = get_area(the_area)
|
||||
for(var/mob/M in moblist)
|
||||
@@ -421,7 +421,7 @@
|
||||
mobs_found += M
|
||||
return mobs_found
|
||||
|
||||
/proc/alone_in_area(var/area/the_area, var/mob/must_be_alone, var/check_type = /mob/living/carbon)
|
||||
/proc/alone_in_area(area/the_area, mob/must_be_alone, check_type = /mob/living/carbon)
|
||||
var/area/our_area = get_area(the_area)
|
||||
for(var/C in GLOB.alive_mob_list)
|
||||
if(!istype(C, check_type))
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
Sink(1)
|
||||
|
||||
//Get a node up to its right position in the heap
|
||||
/datum/heap/proc/Swim(var/index)
|
||||
/datum/heap/proc/Swim(index)
|
||||
var/parent = round(index * 0.5)
|
||||
|
||||
while(parent > 0 && (call(cmp)(L[index], L[parent]) > 0))
|
||||
@@ -42,7 +42,7 @@
|
||||
parent = round(index * 0.5)
|
||||
|
||||
//Get a node down to its right position in the heap
|
||||
/datum/heap/proc/Sink(var/index)
|
||||
/datum/heap/proc/Sink(index)
|
||||
var/g_child = GetGreaterChild(index)
|
||||
|
||||
while(g_child > 0 && (call(cmp)(L[index], L[g_child]) < 0))
|
||||
@@ -52,7 +52,7 @@
|
||||
|
||||
//Returns the greater (relative to the comparison proc) of a node children
|
||||
//or 0 if there's no child
|
||||
/datum/heap/proc/GetGreaterChild(var/index)
|
||||
/datum/heap/proc/GetGreaterChild(index)
|
||||
if(index * 2 > L.len)
|
||||
return 0
|
||||
|
||||
|
||||
@@ -289,7 +289,7 @@
|
||||
|
||||
//Icon smoothing helpers
|
||||
|
||||
/proc/smooth_zlevel(var/zlevel, now = FALSE)
|
||||
/proc/smooth_zlevel(zlevel, now = FALSE)
|
||||
var/list/away_turfs = block(locate(1, 1, zlevel), locate(world.maxx, world.maxy, zlevel))
|
||||
for(var/V in away_turfs)
|
||||
var/turf/T = V
|
||||
|
||||
@@ -894,7 +894,7 @@ The _flatIcons list is a cache for generated icon files.
|
||||
composite.Blend(icon(I.icon, I.icon_state, I.dir, 1), ICON_OVERLAY)
|
||||
return composite
|
||||
|
||||
/proc/adjust_brightness(var/color, var/value)
|
||||
/proc/adjust_brightness(color, value)
|
||||
if(!color) return "#FFFFFF"
|
||||
if(!value) return color
|
||||
|
||||
@@ -904,7 +904,7 @@ The _flatIcons list is a cache for generated icon files.
|
||||
RGB[3] = clamp(RGB[3]+value,0,255)
|
||||
return rgb(RGB[1],RGB[2],RGB[3])
|
||||
|
||||
/proc/sort_atoms_by_layer(var/list/atoms)
|
||||
/proc/sort_atoms_by_layer(list/atoms)
|
||||
// Comb sort icons based on levels
|
||||
var/list/result = atoms.Copy()
|
||||
var/gap = result.len
|
||||
@@ -925,7 +925,7 @@ The _flatIcons list is a cache for generated icon files.
|
||||
|
||||
//Interface for using DrawBox() to draw 1 pixel on a coordinate.
|
||||
//Returns the same icon specifed in the argument, but with the pixel drawn
|
||||
/proc/DrawPixel(var/icon/I,var/colour,var/drawX,var/drawY)
|
||||
/proc/DrawPixel(icon/I, colour, drawX, drawY)
|
||||
if(!I)
|
||||
return 0
|
||||
var/Iwidth = I.Width()
|
||||
@@ -938,7 +938,7 @@ The _flatIcons list is a cache for generated icon files.
|
||||
return I
|
||||
|
||||
//Interface for easy drawing of one pixel on an atom.
|
||||
/atom/proc/DrawPixelOn(var/colour, var/drawX, var/drawY)
|
||||
/atom/proc/DrawPixelOn(colour, drawX, drawY)
|
||||
var/icon/I = new(icon)
|
||||
var/icon/J = DrawPixel(I, colour, drawX, drawY)
|
||||
if(J) //Only set the icon if it succeeded, the icon without the pixel is 1000x better than a black square.
|
||||
@@ -961,7 +961,7 @@ The _flatIcons list is a cache for generated icon files.
|
||||
|
||||
//Imagine removing pixels from the main icon that are covered by pixels from the mask icon.
|
||||
//Standard behaviour is to cut pixels from the main icon that are covered by pixels from the mask icon unless passed mask_ready, see below.
|
||||
/proc/get_icon_difference(var/icon/main, var/icon/mask, var/mask_ready)
|
||||
/proc/get_icon_difference(icon/main, icon/mask, mask_ready)
|
||||
/*You should skip prep if the mask is already sprited properly. This significantly improves performance by eliminating most of the realtime icon work.
|
||||
e.g. A 'ready' mask is a mask where the part you want cut out is missing (no pixels, 0 alpha) from the sprite, and everything else is solid white.*/
|
||||
|
||||
|
||||
+27
-27
@@ -39,7 +39,7 @@
|
||||
|
||||
|
||||
//Returns a list in plain english as a string
|
||||
/proc/english_list(var/list/input, nothing_text = "nothing", and_text = " and ", comma_text = ", ", final_comma_text = "" )
|
||||
/proc/english_list(list/input, nothing_text = "nothing", and_text = " and ", comma_text = ", ", final_comma_text = "" )
|
||||
var/total = input.len
|
||||
if(!total)
|
||||
return "[nothing_text]"
|
||||
@@ -60,7 +60,7 @@
|
||||
return "[output][and_text][input[index]]"
|
||||
|
||||
//Returns list element or null. Should prevent "index out of bounds" error.
|
||||
/proc/listgetindex(var/list/list,index)
|
||||
/proc/listgetindex(list/list, index)
|
||||
if(istype(list) && list.len)
|
||||
if(isnum(index))
|
||||
if(InRange(index,1,list.len))
|
||||
@@ -158,7 +158,7 @@
|
||||
* If skiprep = 1, repeated elements are treated as one.
|
||||
* If either of arguments is not a list, returns null
|
||||
*/
|
||||
/proc/difflist(var/list/first, var/list/second, var/skiprep=0)
|
||||
/proc/difflist(list/first, list/second, skiprep=0)
|
||||
if(!islist(first) || !islist(second))
|
||||
return
|
||||
var/list/result = new
|
||||
@@ -176,7 +176,7 @@
|
||||
* If skipref = 1, repeated elements are treated as one.
|
||||
* If either of arguments is not a list, returns null
|
||||
*/
|
||||
/proc/uniquemergelist(var/list/first, var/list/second, var/skiprep=0)
|
||||
/proc/uniquemergelist(list/first, list/second, skiprep=0)
|
||||
if(!islist(first) || !islist(second))
|
||||
return
|
||||
var/list/result = new
|
||||
@@ -236,7 +236,7 @@
|
||||
return output
|
||||
|
||||
//Randomize: Return the list in a random order
|
||||
/proc/shuffle(var/list/L)
|
||||
/proc/shuffle(list/L)
|
||||
if(!L)
|
||||
return
|
||||
L = L.Copy()
|
||||
@@ -247,20 +247,20 @@
|
||||
return L
|
||||
|
||||
//Return a list with no duplicate entries
|
||||
/proc/uniquelist(var/list/L)
|
||||
/proc/uniquelist(list/L)
|
||||
. = list()
|
||||
for(var/i in L)
|
||||
. |= i
|
||||
|
||||
//Mergesort: divides up the list into halves to begin the sort
|
||||
/proc/sortKey(var/list/client/L, var/order = 1)
|
||||
/proc/sortKey(list/client/L, order = 1)
|
||||
if(isnull(L) || L.len < 2)
|
||||
return L
|
||||
var/middle = L.len / 2 + 1
|
||||
return mergeKey(sortKey(L.Copy(0,middle)), sortKey(L.Copy(middle)), order)
|
||||
|
||||
//Mergsort: does the actual sorting and returns the results back to sortAtom
|
||||
/proc/mergeKey(var/list/client/L, var/list/client/R, var/order = 1)
|
||||
/proc/mergeKey(list/client/L, list/client/R, order = 1)
|
||||
var/Li=1
|
||||
var/Ri=1
|
||||
var/list/result = new()
|
||||
@@ -277,7 +277,7 @@
|
||||
return (result + R.Copy(Ri, 0))
|
||||
|
||||
//Mergesort: divides up the list into halves to begin the sort
|
||||
/proc/sortAtom(var/list/atom/L, var/order = 1)
|
||||
/proc/sortAtom(list/atom/L, order = 1)
|
||||
listclearnulls(L)
|
||||
if(isnull(L) || L.len < 2)
|
||||
return L
|
||||
@@ -285,7 +285,7 @@
|
||||
return mergeAtoms(sortAtom(L.Copy(0,middle)), sortAtom(L.Copy(middle)), order)
|
||||
|
||||
//Mergsort: does the actual sorting and returns the results back to sortAtom
|
||||
/proc/mergeAtoms(var/list/atom/L, var/list/atom/R, var/order = 1)
|
||||
/proc/mergeAtoms(list/atom/L, list/atom/R, order = 1)
|
||||
if(!L || !R) return 0
|
||||
var/Li=1
|
||||
var/Ri=1
|
||||
@@ -306,7 +306,7 @@
|
||||
|
||||
|
||||
//Mergesort: Specifically for record datums in a list.
|
||||
/proc/sortRecord(var/list/datum/data/record/L, var/field = "name", var/order = 1)
|
||||
/proc/sortRecord(list/datum/data/record/L, field = "name", order = 1)
|
||||
if(isnull(L))
|
||||
return list()
|
||||
if(L.len < 2)
|
||||
@@ -315,7 +315,7 @@
|
||||
return mergeRecordLists(sortRecord(L.Copy(0, middle), field, order), sortRecord(L.Copy(middle), field, order), field, order)
|
||||
|
||||
//Mergsort: does the actual sorting and returns the results back to sortRecord
|
||||
/proc/mergeRecordLists(var/list/datum/data/record/L, var/list/datum/data/record/R, var/field = "name", var/order = 1)
|
||||
/proc/mergeRecordLists(list/datum/data/record/L, list/datum/data/record/R, field = "name", order = 1)
|
||||
var/Li=1
|
||||
var/Ri=1
|
||||
var/list/result = new()
|
||||
@@ -342,20 +342,20 @@
|
||||
|
||||
|
||||
//Mergesort: any value in a list
|
||||
/proc/sortList(var/list/L)
|
||||
/proc/sortList(list/L)
|
||||
if(L.len < 2)
|
||||
return L
|
||||
var/middle = L.len / 2 + 1 // Copy is first,second-1
|
||||
return mergeLists(sortList(L.Copy(0,middle)), sortList(L.Copy(middle))) //second parameter null = to end of list
|
||||
|
||||
//Mergsorge: uses sortAssoc() but uses the var's name specifically. This should probably be using mergeAtom() instead
|
||||
/proc/sortNames(var/list/L)
|
||||
/proc/sortNames(list/L)
|
||||
var/list/Q = new()
|
||||
for(var/atom/x in L)
|
||||
Q[x.name] = x
|
||||
return sortAssoc(Q)
|
||||
|
||||
/proc/mergeLists(var/list/L, var/list/R)
|
||||
/proc/mergeLists(list/L, list/R)
|
||||
var/Li=1
|
||||
var/Ri=1
|
||||
var/list/result = new()
|
||||
@@ -371,13 +371,13 @@
|
||||
|
||||
|
||||
// List of lists, sorts by element[key] - for things like crew monitoring computer sorting records by name.
|
||||
/proc/sortByKey(var/list/L, var/key)
|
||||
/proc/sortByKey(list/L, key)
|
||||
if(L.len < 2)
|
||||
return L
|
||||
var/middle = L.len / 2 + 1
|
||||
return mergeKeyedLists(sortByKey(L.Copy(0, middle), key), sortByKey(L.Copy(middle), key), key)
|
||||
|
||||
/proc/mergeKeyedLists(var/list/L, var/list/R, var/key)
|
||||
/proc/mergeKeyedLists(list/L, list/R, key)
|
||||
var/Li=1
|
||||
var/Ri=1
|
||||
var/list/result = new()
|
||||
@@ -396,13 +396,13 @@
|
||||
|
||||
|
||||
//Mergesort: any value in a list, preserves key=value structure
|
||||
/proc/sortAssoc(var/list/L)
|
||||
/proc/sortAssoc(list/L)
|
||||
if(L.len < 2)
|
||||
return L
|
||||
var/middle = L.len / 2 + 1 // Copy is first,second-1
|
||||
return mergeAssoc(sortAssoc(L.Copy(0,middle)), sortAssoc(L.Copy(middle))) //second parameter null = to end of list
|
||||
|
||||
/proc/mergeAssoc(var/list/L, var/list/R)
|
||||
/proc/mergeAssoc(list/L, list/R)
|
||||
var/Li=1
|
||||
var/Ri=1
|
||||
var/list/result = new()
|
||||
@@ -434,7 +434,7 @@
|
||||
return r
|
||||
|
||||
// Returns the key based on the index
|
||||
/proc/get_key_by_index(var/list/L, var/index)
|
||||
/proc/get_key_by_index(list/L, index)
|
||||
var/i = 1
|
||||
for(var/key in L)
|
||||
if(index == i)
|
||||
@@ -442,7 +442,7 @@
|
||||
i++
|
||||
return null
|
||||
|
||||
/proc/count_by_type(var/list/L, type)
|
||||
/proc/count_by_type(list/L, type)
|
||||
var/i = 0
|
||||
for(var/T in L)
|
||||
if(istype(T, type))
|
||||
@@ -450,7 +450,7 @@
|
||||
return i
|
||||
|
||||
//Don't use this on lists larger than half a dozen or so
|
||||
/proc/insertion_sort_numeric_list_ascending(var/list/L)
|
||||
/proc/insertion_sort_numeric_list_ascending(list/L)
|
||||
//log_world("ascending len input: [L.len]")
|
||||
var/list/out = list(pop(L))
|
||||
for(var/entry in L)
|
||||
@@ -467,7 +467,7 @@
|
||||
//log_world(" output: [out.len]")
|
||||
return out
|
||||
|
||||
/proc/insertion_sort_numeric_list_descending(var/list/L)
|
||||
/proc/insertion_sort_numeric_list_descending(list/L)
|
||||
//log_world("descending len input: [L.len]")
|
||||
var/list/out = insertion_sort_numeric_list_ascending(L)
|
||||
//log_world(" output: [out.len]")
|
||||
@@ -483,13 +483,13 @@
|
||||
if(islist(.[i]))
|
||||
.[i] = .(.[i])
|
||||
|
||||
/proc/dd_sortedObjectList(var/list/L, var/cache=list())
|
||||
/proc/dd_sortedObjectList(list/L, list/cache = list())
|
||||
if(L.len < 2)
|
||||
return L
|
||||
var/middle = L.len / 2 + 1 // Copy is first,second-1
|
||||
return dd_mergeObjectList(dd_sortedObjectList(L.Copy(0,middle), cache), dd_sortedObjectList(L.Copy(middle), cache), cache) //second parameter null = to end of list
|
||||
|
||||
/proc/dd_mergeObjectList(var/list/L, var/list/R, var/list/cache)
|
||||
/proc/dd_mergeObjectList(list/L, list/R, list/cache)
|
||||
var/Li=1
|
||||
var/Ri=1
|
||||
var/list/result = new()
|
||||
@@ -514,7 +514,7 @@
|
||||
return (result + R.Copy(Ri, 0))
|
||||
|
||||
// Insert an object into a sorted list, preserving sortedness
|
||||
/proc/dd_insertObjectList(var/list/L, var/O)
|
||||
/proc/dd_insertObjectList(list/L, O)
|
||||
var/min = 1
|
||||
var/max = L.len
|
||||
var/Oval = O:dd_SortValue()
|
||||
@@ -658,7 +658,7 @@ proc/dd_sortedObjectList(list/incoming)
|
||||
var/case_sensitive = 1
|
||||
return dd_sortedtextlist(incoming, case_sensitive)
|
||||
|
||||
/proc/subtypesof(var/path) //Returns a list containing all subtypes of the given path, but not the given path itself.
|
||||
/proc/subtypesof(path) //Returns a list containing all subtypes of the given path, but not the given path itself.
|
||||
if(!path || !ispath(path))
|
||||
CRASH("Invalid path, failed to fetch subtypes of \"[path]\".")
|
||||
return (typesof(path) - path)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/proc/GetOppositeDir(var/dir)
|
||||
/proc/GetOppositeDir(dir)
|
||||
switch(dir)
|
||||
if(NORTH) return SOUTH
|
||||
if(SOUTH) return NORTH
|
||||
@@ -46,7 +46,7 @@
|
||||
|
||||
return pick(valid_picks)
|
||||
|
||||
/proc/random_hair_style(var/gender, species = "Human", var/datum/robolimb/robohead)
|
||||
/proc/random_hair_style(gender, species = "Human", datum/robolimb/robohead)
|
||||
var/h_style = "Bald"
|
||||
var/list/valid_hairstyles = list()
|
||||
for(var/hairstyle in GLOB.hair_styles_public_list)
|
||||
@@ -75,7 +75,7 @@
|
||||
|
||||
return h_style
|
||||
|
||||
/proc/random_facial_hair_style(var/gender, species = "Human", var/datum/robolimb/robohead)
|
||||
/proc/random_facial_hair_style(gender, species = "Human", datum/robolimb/robohead)
|
||||
var/f_style = "Shaved"
|
||||
var/list/valid_facial_hairstyles = list()
|
||||
for(var/facialhairstyle in GLOB.facial_hair_styles_list)
|
||||
@@ -119,7 +119,7 @@
|
||||
|
||||
return ha_style
|
||||
|
||||
/proc/random_marking_style(var/location = "body", species = "Human", var/datum/robolimb/robohead, var/body_accessory, var/alt_head)
|
||||
/proc/random_marking_style(location = "body", species = "Human", datum/robolimb/robohead, body_accessory, alt_head)
|
||||
var/m_style = "None"
|
||||
var/list/valid_markings = list()
|
||||
for(var/marking in GLOB.marking_styles_list)
|
||||
|
||||
+18
-18
@@ -22,7 +22,7 @@
|
||||
return html_encode(txt)
|
||||
|
||||
//Simply removes < and > and limits the length of the message
|
||||
/proc/strip_html_simple(var/t,var/limit=MAX_MESSAGE_LEN)
|
||||
/proc/strip_html_simple(t, limit=MAX_MESSAGE_LEN)
|
||||
var/list/strip_chars = list("<",">")
|
||||
t = copytext(t,1,limit)
|
||||
for(var/char in strip_chars)
|
||||
@@ -33,13 +33,13 @@
|
||||
return t
|
||||
|
||||
//Removes a few problematic characters
|
||||
/proc/sanitize_simple(var/t,var/list/repl_chars = list("\n"="#","\t"="#"))
|
||||
/proc/sanitize_simple(t, list/repl_chars = list("\n"="#","\t"="#"))
|
||||
for(var/char in repl_chars)
|
||||
t = replacetext(t, char, repl_chars[char])
|
||||
return t
|
||||
|
||||
//Runs byond's sanitization proc along-side sanitize_simple
|
||||
/proc/sanitize(var/t,var/list/repl_chars = null)
|
||||
/proc/sanitize(t, list/repl_chars = null)
|
||||
return html_encode(sanitize_simple(t,repl_chars))
|
||||
|
||||
// Gut ANYTHING that isnt alphanumeric, or brackets
|
||||
@@ -54,7 +54,7 @@
|
||||
|
||||
//Runs sanitize and strip_html_simple
|
||||
//I believe strip_html_simple() is required to run first to prevent '<' from displaying as '<' after sanitize() calls byond's html_encode()
|
||||
/proc/strip_html(var/t,var/limit=MAX_MESSAGE_LEN)
|
||||
/proc/strip_html(t, limit=MAX_MESSAGE_LEN)
|
||||
return copytext((sanitize(strip_html_simple(t))),1,limit)
|
||||
|
||||
// Used to get a properly sanitized multiline input, of max_length
|
||||
@@ -67,12 +67,12 @@
|
||||
|
||||
//Runs byond's sanitization proc along-side strip_html_simple
|
||||
//I believe strip_html_simple() is required to run first to prevent '<' from displaying as '<' that html_encode() would cause
|
||||
/proc/adminscrub(var/t,var/limit=MAX_MESSAGE_LEN)
|
||||
/proc/adminscrub(t, limit=MAX_MESSAGE_LEN)
|
||||
return copytext((html_encode(strip_html_simple(t))),1,limit)
|
||||
|
||||
|
||||
//Returns null if there is any bad text in the string
|
||||
/proc/reject_bad_text(var/text, var/max_length=512)
|
||||
/proc/reject_bad_text(text, max_length=512)
|
||||
if(length(text) > max_length) return //message too long
|
||||
var/non_whitespace = 0
|
||||
for(var/i=1, i<=length(text), i++)
|
||||
@@ -106,7 +106,7 @@
|
||||
return msg
|
||||
|
||||
//Filters out undesirable characters from names
|
||||
/proc/reject_bad_name(var/t_in, var/allow_numbers=0, var/max_length=MAX_NAME_LEN)
|
||||
/proc/reject_bad_name(t_in, allow_numbers=0, max_length=MAX_NAME_LEN)
|
||||
// Decode so that names with characters like < are still rejected
|
||||
t_in = html_decode(t_in)
|
||||
if(!t_in || length(t_in) > max_length)
|
||||
@@ -174,7 +174,7 @@
|
||||
//checks text for html tags
|
||||
//if tag is not in whitelist (var/list/paper_tag_whitelist in global.dm)
|
||||
//relpaces < with <
|
||||
/proc/checkhtml(var/t)
|
||||
/proc/checkhtml(t)
|
||||
t = sanitize_simple(t, list("&#"="."))
|
||||
var/p = findtext(t,"<",1)
|
||||
while(p) //going through all the tags
|
||||
@@ -226,7 +226,7 @@
|
||||
* Text modification
|
||||
*/
|
||||
// See bygex.dm
|
||||
/proc/replace_characters(var/t,var/list/repl_chars)
|
||||
/proc/replace_characters(t, list/repl_chars)
|
||||
for(var/char in repl_chars)
|
||||
t = replacetext(t, char, repl_chars[char])
|
||||
return t
|
||||
@@ -277,7 +277,7 @@
|
||||
return trim_left(trim_right(text))
|
||||
|
||||
//Returns a string with the first element of the string capitalized.
|
||||
/proc/capitalize(var/t as text)
|
||||
/proc/capitalize(t as text)
|
||||
return uppertext(copytext(t, 1, 2)) + copytext(t, 2)
|
||||
|
||||
//Centers text by adding spaces to either side of the string.
|
||||
@@ -305,7 +305,7 @@
|
||||
return copytext(message, 1, length + 1)
|
||||
|
||||
|
||||
/proc/stringmerge(var/text,var/compare,replace = "*")
|
||||
/proc/stringmerge(text, compare,replace = "*")
|
||||
//This proc fills in all spaces with the "replace" var (* by default) with whatever
|
||||
//is in the other string at the same spot (assuming it is not a replace char).
|
||||
//This is used for fingerprints
|
||||
@@ -326,7 +326,7 @@
|
||||
return 0
|
||||
return newtext
|
||||
|
||||
/proc/stringpercent(var/text,character = "*")
|
||||
/proc/stringpercent(text, character = "*")
|
||||
//This proc returns the number of chars of the string that is the character
|
||||
//This is used for detective work to determine fingerprint completion.
|
||||
if(!text || !character)
|
||||
@@ -338,7 +338,7 @@
|
||||
count++
|
||||
return count
|
||||
|
||||
/proc/reverse_text(var/text = "")
|
||||
/proc/reverse_text(text = "")
|
||||
var/new_text = ""
|
||||
for(var/i = length(text); i > 0; i--)
|
||||
new_text += copytext(text, i, i+1)
|
||||
@@ -347,7 +347,7 @@
|
||||
//This proc strips html properly, but it's not lazy like the other procs.
|
||||
//This means that it doesn't just remove < and > and call it a day.
|
||||
//Also limit the size of the input, if specified.
|
||||
/proc/strip_html_properly(var/input, var/max_length = MAX_MESSAGE_LEN, allow_lines = 0)
|
||||
/proc/strip_html_properly(input, max_length = MAX_MESSAGE_LEN, allow_lines = 0)
|
||||
if(!input)
|
||||
return
|
||||
var/opentag = 1 //These store the position of < and > respectively.
|
||||
@@ -371,12 +371,12 @@
|
||||
input = copytext(input,1,max_length)
|
||||
return sanitize(input, allow_lines ? list("\t" = " ") : list("\n" = " ", "\t" = " "))
|
||||
|
||||
/proc/trim_strip_html_properly(var/input, var/max_length = MAX_MESSAGE_LEN, allow_lines = 0)
|
||||
/proc/trim_strip_html_properly(input, max_length = MAX_MESSAGE_LEN, allow_lines = 0)
|
||||
return trim(strip_html_properly(input, max_length, allow_lines))
|
||||
|
||||
//Used in preferences' SetFlavorText and human's set_flavor verb
|
||||
//Previews a string of len or less length
|
||||
/proc/TextPreview(var/string,var/len=40)
|
||||
/proc/TextPreview(string, len=40)
|
||||
if(length(string) <= len)
|
||||
if(!length(string))
|
||||
return "\[...\]"
|
||||
@@ -386,14 +386,14 @@
|
||||
return "[copytext_preserve_html(string, 1, 37)]..."
|
||||
|
||||
//alternative copytext() for encoded text, doesn't break html entities (" and other)
|
||||
/proc/copytext_preserve_html(var/text, var/first, var/last)
|
||||
/proc/copytext_preserve_html(text, first, last)
|
||||
return html_encode(copytext(html_decode(text), first, last))
|
||||
|
||||
//Run sanitize(), but remove <, >, " first to prevent displaying them as > < &34; in some places, after html_encode().
|
||||
//Best used for sanitize object names, window titles.
|
||||
//If you have a problem with sanitize() in chat, when quotes and >, < are displayed as html entites -
|
||||
//this is a problem of double-encode(when & becomes &), use sanitize() with encode=0, but not the sanitizeSafe()!
|
||||
/proc/sanitizeSafe(var/input, var/max_length = MAX_MESSAGE_LEN, var/encode = 1, var/trim = 1, var/extra = 1)
|
||||
/proc/sanitizeSafe(input, max_length = MAX_MESSAGE_LEN, encode = 1, trim = 1, extra = 1)
|
||||
return sanitize(replace_characters(input, list(">"=" ","<"=" ", "\""="'")), max_length, encode, trim, extra)
|
||||
|
||||
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
return time2text(station_time(time, TRUE), format)
|
||||
|
||||
/* Returns 1 if it is the selected month and day */
|
||||
/proc/isDay(var/month, var/day)
|
||||
/proc/isDay(month, day)
|
||||
if(isnum(month) && isnum(day))
|
||||
var/MM = text2num(time2text(world.timeofday, "MM")) // get the current month
|
||||
var/DD = text2num(time2text(world.timeofday, "DD")) // get the current day
|
||||
@@ -94,13 +94,13 @@
|
||||
return GLOB.month_names.Find(number)
|
||||
|
||||
//Take a value in seconds and returns a string of minutes and seconds in the format X minute(s) and X seconds.
|
||||
/proc/seconds_to_time(var/seconds as num)
|
||||
/proc/seconds_to_time(seconds as num)
|
||||
var/numSeconds = seconds % 60
|
||||
var/numMinutes = (seconds - numSeconds) / 60
|
||||
return "[numMinutes] [numMinutes > 1 ? "minutes" : "minute"] and [numSeconds] seconds"
|
||||
|
||||
//Take a value in seconds and makes it display like a clock
|
||||
/proc/seconds_to_clock(var/seconds as num)
|
||||
/proc/seconds_to_clock(seconds as num)
|
||||
return "[add_zero(num2text((seconds / 60) % 60), 2)]:[add_zero(num2text(seconds % 60), 2)]"
|
||||
|
||||
//Takes a value of time in deciseconds.
|
||||
|
||||
@@ -146,7 +146,7 @@
|
||||
return
|
||||
|
||||
//Converts an angle (degrees) into an ss13 direction
|
||||
/proc/angle2dir(var/degree)
|
||||
/proc/angle2dir(degree)
|
||||
degree = ((degree+22.5)%365)
|
||||
if(degree < 45) return NORTH
|
||||
if(degree < 90) return NORTHEAST
|
||||
@@ -170,7 +170,7 @@
|
||||
|
||||
//returns the north-zero clockwise angle in degrees, given a direction
|
||||
|
||||
/proc/dir2angle(var/D)
|
||||
/proc/dir2angle(D)
|
||||
switch(D)
|
||||
if(NORTH) return 0
|
||||
if(SOUTH) return 180
|
||||
@@ -183,7 +183,7 @@
|
||||
else return null
|
||||
|
||||
//Returns the angle in english
|
||||
/proc/angle2text(var/degree)
|
||||
/proc/angle2text(degree)
|
||||
return dir2text(angle2dir(degree))
|
||||
|
||||
//Converts a blend_mode constant to one acceptable to icon.Blend()
|
||||
@@ -281,7 +281,7 @@
|
||||
if(3*hue < 2) return (a+(b-a)*((2/3)-hue)*6)
|
||||
return a
|
||||
|
||||
/proc/num2septext(var/theNum, var/sigFig = 7,var/sep=",") // default sigFig (1,000,000)
|
||||
/proc/num2septext(theNum, sigFig = 7, sep=",") // default sigFig (1,000,000)
|
||||
var/finalNum = num2text(theNum, sigFig)
|
||||
|
||||
// Start from the end, or from the decimal point
|
||||
@@ -323,7 +323,7 @@
|
||||
. = max(0, min(255, 138.5177312231 * log(temp - 10) - 305.0447927307))
|
||||
|
||||
//Argument: Give this a space-separated string consisting of 6 numbers. Returns null if you don't
|
||||
/proc/text2matrix(var/matrixtext)
|
||||
/proc/text2matrix(matrixtext)
|
||||
var/list/matrixtext_list = splittext(matrixtext, " ")
|
||||
var/list/matrix_list = list()
|
||||
for(var/item in matrixtext_list)
|
||||
@@ -351,7 +351,7 @@
|
||||
//The string is well, obviously the string being checked
|
||||
//The datum is used as a source for var names, to check validity
|
||||
//Otherwise every single word could technically be a variable!
|
||||
/proc/string2listofvars(var/t_string, var/datum/var_source)
|
||||
/proc/string2listofvars(t_string, datum/var_source)
|
||||
if(!t_string || !var_source)
|
||||
return list()
|
||||
|
||||
|
||||
+36
-36
@@ -5,7 +5,7 @@
|
||||
/* Get the direction of startObj relative to endObj.
|
||||
* Return values: To the right, 1. Below, 2. To the left, 3. Above, 4. Not found adjacent in cardinal directions, 0.
|
||||
*/
|
||||
/proc/getRelativeDirection(var/atom/movable/startObj, var/atom/movable/endObj)
|
||||
/proc/getRelativeDirection(atom/movable/startObj, atom/movable/endObj)
|
||||
if(endObj.x == startObj.x + 1 && endObj.y == startObj.y)
|
||||
return EAST
|
||||
|
||||
@@ -21,11 +21,11 @@
|
||||
return 0
|
||||
|
||||
//Returns the middle-most value
|
||||
/proc/dd_range(var/low, var/high, var/num)
|
||||
/proc/dd_range(low, high, num)
|
||||
return max(low,min(high,num))
|
||||
|
||||
//Returns whether or not A is the middle most value
|
||||
/proc/InRange(var/A, var/lower, var/upper)
|
||||
/proc/InRange(A, lower, upper)
|
||||
if(A < lower) return 0
|
||||
if(A > upper) return 0
|
||||
return 1
|
||||
@@ -152,7 +152,7 @@ Turf and target are seperate in case you want to teleport some distance from a t
|
||||
|
||||
// Returns true if direction is blocked from loc
|
||||
// Checks if doors are open
|
||||
/proc/DirBlocked(turf/loc,var/dir)
|
||||
/proc/DirBlocked(turf/loc, dir)
|
||||
for(var/obj/structure/window/D in loc)
|
||||
if(!D.density)
|
||||
continue
|
||||
@@ -240,7 +240,7 @@ Turf and target are seperate in case you want to teleport some distance from a t
|
||||
return 1
|
||||
|
||||
//Ensure the frequency is within bounds of what it should be sending/recieving at
|
||||
/proc/sanitize_frequency(var/f, var/low = PUBLIC_LOW_FREQ, var/high = PUBLIC_HIGH_FREQ)
|
||||
/proc/sanitize_frequency(f, low = PUBLIC_LOW_FREQ, high = PUBLIC_HIGH_FREQ)
|
||||
f = round(f)
|
||||
f = max(low, f)
|
||||
f = min(high, f)
|
||||
@@ -249,10 +249,10 @@ Turf and target are seperate in case you want to teleport some distance from a t
|
||||
return f
|
||||
|
||||
//Turns 1479 into 147.9
|
||||
/proc/format_frequency(var/f)
|
||||
/proc/format_frequency(f)
|
||||
return "[round(f / 10)].[f % 10]"
|
||||
|
||||
/obj/proc/atmosanalyzer_scan(var/datum/gas_mixture/air_contents, mob/user, var/obj/target = src)
|
||||
/obj/proc/atmosanalyzer_scan(datum/gas_mixture/air_contents, mob/user, obj/target = src)
|
||||
var/obj/icon = target
|
||||
user.visible_message("[user] has used the analyzer on [target].", "<span class='notice'>You use the analyzer on [target].</span>")
|
||||
var/pressure = air_contents.return_pressure()
|
||||
@@ -320,7 +320,7 @@ Turf and target are seperate in case you want to teleport some distance from a t
|
||||
|
||||
return selected
|
||||
|
||||
/proc/select_active_ai(var/mob/user)
|
||||
/proc/select_active_ai(mob/user)
|
||||
var/list/ais = active_ais()
|
||||
if(ais.len)
|
||||
if(user) . = input(usr,"AI signals detected:", "AI selection") in ais
|
||||
@@ -438,7 +438,7 @@ Turf and target are seperate in case you want to teleport some distance from a t
|
||||
return DisplayJoules(units * SSmachines.wait * 0.1 / GLOB.CELLRATE)
|
||||
|
||||
//Forces a variable to be posative
|
||||
/proc/modulus(var/M)
|
||||
/proc/modulus(M)
|
||||
if(M >= 0)
|
||||
return M
|
||||
if(M < 0)
|
||||
@@ -465,7 +465,7 @@ Turf and target are seperate in case you want to teleport some distance from a t
|
||||
|
||||
// Returns the atom sitting on the turf.
|
||||
// For example, using this on a disk, which is in a bag, on a mob, will return the mob because it's on the turf.
|
||||
/proc/get_atom_on_turf(var/atom/movable/M)
|
||||
/proc/get_atom_on_turf(atom/movable/M)
|
||||
var/atom/loc = M
|
||||
while(loc && loc.loc && !istype(loc.loc, /turf/))
|
||||
loc = loc.loc
|
||||
@@ -475,7 +475,7 @@ Turf and target are seperate in case you want to teleport some distance from a t
|
||||
Returns 1 if the chain up to the area contains the given typepath
|
||||
0 otherwise
|
||||
*/
|
||||
/atom/proc/is_found_within(var/typepath)
|
||||
/atom/proc/is_found_within(typepath)
|
||||
var/atom/A = src
|
||||
while(A.loc)
|
||||
if(istype(A.loc, typepath))
|
||||
@@ -491,7 +491,7 @@ Returns 1 if the chain up to the area contains the given typepath
|
||||
|
||||
// returns the turf located at the map edge in the specified direction relative to A
|
||||
// used for mass driver
|
||||
/proc/get_edge_target_turf(var/atom/A, var/direction)
|
||||
/proc/get_edge_target_turf(atom/A, direction)
|
||||
|
||||
var/turf/target = locate(A.x, A.y, A.z)
|
||||
if(!A || !target)
|
||||
@@ -515,7 +515,7 @@ Returns 1 if the chain up to the area contains the given typepath
|
||||
// result is bounded to map size
|
||||
// note range is non-pythagorean
|
||||
// used for disposal system
|
||||
/proc/get_ranged_target_turf(var/atom/A, var/direction, var/range)
|
||||
/proc/get_ranged_target_turf(atom/A, direction, range)
|
||||
|
||||
var/x = A.x
|
||||
var/y = A.y
|
||||
@@ -533,17 +533,17 @@ Returns 1 if the chain up to the area contains the given typepath
|
||||
|
||||
// returns turf relative to A offset in dx and dy tiles
|
||||
// bound to map limits
|
||||
/proc/get_offset_target_turf(var/atom/A, var/dx, var/dy)
|
||||
/proc/get_offset_target_turf(atom/A, dx, dy)
|
||||
var/x = min(world.maxx, max(1, A.x + dx))
|
||||
var/y = min(world.maxy, max(1, A.y + dy))
|
||||
return locate(x,y,A.z)
|
||||
|
||||
//Makes sure MIDDLE is between LOW and HIGH. If not, it adjusts it. Returns the adjusted value.
|
||||
/proc/between(var/low, var/middle, var/high)
|
||||
/proc/between(low, middle, high)
|
||||
return max(min(middle, high), low)
|
||||
|
||||
//returns random gauss number
|
||||
/proc/GaussRand(var/sigma)
|
||||
/proc/GaussRand(sigma)
|
||||
var/x,y,rsq
|
||||
do
|
||||
x=2*rand()-1
|
||||
@@ -553,7 +553,7 @@ Returns 1 if the chain up to the area contains the given typepath
|
||||
return sigma*y*sqrt(-2*log(rsq)/rsq)
|
||||
|
||||
//returns random gauss number, rounded to 'roundto'
|
||||
/proc/GaussRandRound(var/sigma,var/roundto)
|
||||
/proc/GaussRandRound(sigma, roundto)
|
||||
return round(GaussRand(sigma),roundto)
|
||||
|
||||
//Will return the contents of an atom recursivly to a depth of 'searchDepth'
|
||||
@@ -576,7 +576,7 @@ Returns 1 if the chain up to the area contains the given typepath
|
||||
return weight
|
||||
|
||||
//Step-towards method of determining whether one atom can see another. Similar to viewers()
|
||||
/proc/can_see(var/atom/source, var/atom/target, var/length=5) // I couldnt be arsed to do actual raycasting :I This is horribly inaccurate.
|
||||
/proc/can_see(atom/source, atom/target, length=5) // I couldnt be arsed to do actual raycasting :I This is horribly inaccurate.
|
||||
var/turf/current = get_turf(source)
|
||||
var/turf/target_turf = get_turf(target)
|
||||
var/steps = 1
|
||||
@@ -606,7 +606,7 @@ Returns 1 if the chain up to the area contains the given typepath
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/proc/get_step_towards2(var/atom/ref , var/atom/trg)
|
||||
/proc/get_step_towards2(atom/ref , atom/trg)
|
||||
var/base_dir = get_dir(ref, get_step_towards(ref,trg))
|
||||
var/turf/temp = get_step_towards(ref,trg)
|
||||
|
||||
@@ -636,7 +636,7 @@ Returns 1 if the chain up to the area contains the given typepath
|
||||
|
||||
//Takes: Anything that could possibly have variables and a varname to check.
|
||||
//Returns: 1 if found, 0 if not.
|
||||
/proc/hasvar(var/datum/A, var/varname)
|
||||
/proc/hasvar(datum/A, varname)
|
||||
if(A.vars.Find(lowertext(varname))) return 1
|
||||
else return 0
|
||||
|
||||
@@ -653,7 +653,7 @@ Returns 1 if the chain up to the area contains the given typepath
|
||||
|
||||
//Takes: Area type as text string or as typepath OR an instance of the area.
|
||||
//Returns: A list of all areas of that type in the world.
|
||||
/proc/get_areas(var/areatype)
|
||||
/proc/get_areas(areatype)
|
||||
if(!areatype) return null
|
||||
if(istext(areatype)) areatype = text2path(areatype)
|
||||
if(isarea(areatype))
|
||||
@@ -667,7 +667,7 @@ Returns 1 if the chain up to the area contains the given typepath
|
||||
|
||||
//Takes: Area type as text string or as typepath OR an instance of the area.
|
||||
//Returns: A list of all turfs in areas of that type of that type in the world.
|
||||
/proc/get_area_turfs(var/areatype)
|
||||
/proc/get_area_turfs(areatype)
|
||||
if(!areatype) return null
|
||||
if(istext(areatype)) areatype = text2path(areatype)
|
||||
if(isarea(areatype))
|
||||
@@ -682,7 +682,7 @@ Returns 1 if the chain up to the area contains the given typepath
|
||||
|
||||
//Takes: Area type as text string or as typepath OR an instance of the area.
|
||||
//Returns: A list of all atoms (objs, turfs, mobs) in areas of that type of that type in the world.
|
||||
/proc/get_area_all_atoms(var/areatype)
|
||||
/proc/get_area_all_atoms(areatype)
|
||||
if(!areatype) return null
|
||||
if(istext(areatype)) areatype = text2path(areatype)
|
||||
if(isarea(areatype))
|
||||
@@ -701,7 +701,7 @@ Returns 1 if the chain up to the area contains the given typepath
|
||||
var/y_pos = null
|
||||
var/z_pos = null
|
||||
|
||||
/area/proc/move_contents_to(var/area/A, var/turftoleave=null, var/direction = null)
|
||||
/area/proc/move_contents_to(area/A, turftoleave=null, direction = null)
|
||||
//Takes: Area. Optional: turf type to leave behind.
|
||||
//Returns: Nothing.
|
||||
//Notes: Attempts to move the contents of one area to another area.
|
||||
@@ -840,7 +840,7 @@ Returns 1 if the chain up to the area contains the given typepath
|
||||
|
||||
|
||||
|
||||
/proc/DuplicateObject(obj/original, var/perfectcopy = 0 , var/sameloc = 0, var/atom/newloc = null)
|
||||
/proc/DuplicateObject(obj/original, perfectcopy = 0 , sameloc = 0, atom/newloc = null)
|
||||
if(!original)
|
||||
return null
|
||||
|
||||
@@ -867,7 +867,7 @@ Returns 1 if the chain up to the area contains the given typepath
|
||||
O.update_icon()
|
||||
return O
|
||||
|
||||
/area/proc/copy_contents_to(var/area/A , var/platingRequired = 0 )
|
||||
/area/proc/copy_contents_to(area/A , platingRequired = 0 )
|
||||
//Takes: Area. Optional: If it should copy to areas that don't have plating
|
||||
//Returns: Nothing.
|
||||
//Notes: Attempts to move the contents of one area to another area.
|
||||
@@ -1096,7 +1096,7 @@ Returns 1 if the chain up to the area contains the given typepath
|
||||
//centered = 0 counts from turf edge to edge
|
||||
//centered = 1 counts from turf center to turf center
|
||||
//of course mathematically this is just adding world.icon_size on again
|
||||
/proc/getPixelDistance(var/atom/A, var/atom/B, var/centered = 1)
|
||||
/proc/getPixelDistance(atom/A, atom/B, centered = 1)
|
||||
if(!istype(A)||!istype(B))
|
||||
return 0
|
||||
. = bounds_dist(A, B) + sqrt((((A.pixel_x+B.pixel_x)**2) + ((A.pixel_y+B.pixel_y)**2)))
|
||||
@@ -1186,7 +1186,7 @@ GLOBAL_LIST_INIT(can_embed_types, typecacheof(list(
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/proc/reverse_direction(var/dir)
|
||||
/proc/reverse_direction(dir)
|
||||
switch(dir)
|
||||
if(NORTH)
|
||||
return SOUTH
|
||||
@@ -1261,7 +1261,7 @@ GLOBAL_LIST_INIT(wall_items, typecacheof(list(/obj/machinery/power/apc, /obj/mac
|
||||
Standard way to write links -Sayu
|
||||
*/
|
||||
|
||||
/proc/topic_link(var/datum/D, var/arglist, var/content)
|
||||
/proc/topic_link(datum/D, arglist, content)
|
||||
if(istype(arglist,/list))
|
||||
arglist = list2params(arglist)
|
||||
return "<a href='?src=[D.UID()];[arglist]'>[content]</a>"
|
||||
@@ -1372,7 +1372,7 @@ Standard way to write links -Sayu
|
||||
chance = max(chance - (initial_chance / steps), 0)
|
||||
steps--
|
||||
|
||||
/proc/get_random_colour(var/simple, var/lower, var/upper)
|
||||
/proc/get_random_colour(simple, lower, upper)
|
||||
var/colour
|
||||
if(simple)
|
||||
colour = pick(list("FF0000","FF7F00","FFFF00","00FF00","0000FF","4B0082","8F00FF"))
|
||||
@@ -1384,7 +1384,7 @@ Standard way to write links -Sayu
|
||||
colour += temp_col
|
||||
return colour
|
||||
|
||||
/proc/get_distant_turf(var/turf/T,var/direction,var/distance)
|
||||
/proc/get_distant_turf(turf/T, direction, distance)
|
||||
if(!T || !direction || !distance) return
|
||||
|
||||
var/dest_x = T.x
|
||||
@@ -1405,7 +1405,7 @@ Standard way to write links -Sayu
|
||||
GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new)
|
||||
|
||||
//Version of view() which ignores darkness, because BYOND doesn't have it.
|
||||
/proc/dview(var/range = world.view, var/center, var/invis_flags = 0)
|
||||
/proc/dview(range = world.view, center, invis_flags = 0)
|
||||
if(!center)
|
||||
return
|
||||
|
||||
@@ -1574,7 +1574,7 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new)
|
||||
//The y dimension of the icon file used in the image
|
||||
// eg: center_image(I, 32,32)
|
||||
// eg2: center_image(I, 96,96)
|
||||
/proc/center_image(var/image/I, x_dimension = 0, y_dimension = 0)
|
||||
/proc/center_image(image/I, x_dimension = 0, y_dimension = 0)
|
||||
if(!I)
|
||||
return
|
||||
|
||||
@@ -1729,7 +1729,7 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new)
|
||||
chosen = matches[chosen]
|
||||
return chosen
|
||||
|
||||
/proc/make_types_fancy(var/list/types)
|
||||
/proc/make_types_fancy(list/types)
|
||||
if(ispath(types))
|
||||
types = list(types)
|
||||
. = list()
|
||||
@@ -1962,7 +1962,7 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new)
|
||||
result += (1 << num)
|
||||
return result
|
||||
|
||||
/proc/pixel_shift_dir(var/dir, var/amount_x = 32, var/amount_y = 32) //Returns a list with pixel_shift values that will shift an object's icon one tile in the direction passed.
|
||||
/proc/pixel_shift_dir(dir, amount_x = 32, amount_y = 32) //Returns a list with pixel_shift values that will shift an object's icon one tile in the direction passed.
|
||||
amount_x = min(max(0, amount_x), 32) //No less than 0, no greater than 32.
|
||||
amount_y = min(max(0, amount_x), 32)
|
||||
var/list/shift = list("x" = 0, "y" = 0)
|
||||
@@ -2116,7 +2116,7 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new)
|
||||
return "White Noise"
|
||||
if(CHANNEL_AMBIENCE)
|
||||
return "Ambience"
|
||||
|
||||
|
||||
/proc/slot_bitfield_to_slot(input_slot_flags) // Kill off this garbage ASAP; slot flags and clothing flags should be IDENTICAL. GOSH DARN IT. Doesn't work with ears or pockets, either.
|
||||
switch(input_slot_flags)
|
||||
if(SLOT_OCLOTHING)
|
||||
|
||||
@@ -10,11 +10,11 @@
|
||||
Note that in all cases the neighbor is handled simply; this is usually the user's mob, in which case it is up to you
|
||||
to check that the mob is not inside of something
|
||||
*/
|
||||
/atom/proc/Adjacent(var/atom/neighbor) // basic inheritance, unused
|
||||
/atom/proc/Adjacent(atom/neighbor) // basic inheritance, unused
|
||||
return 0
|
||||
|
||||
// Not a sane use of the function and (for now) indicative of an error elsewhere
|
||||
/area/Adjacent(var/atom/neighbor)
|
||||
/area/Adjacent(atom/neighbor)
|
||||
CRASH("Call to /area/Adjacent(), unimplemented proc")
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
* If you are diagonally adjacent, ensure you can pass through at least one of the mutually adjacent square.
|
||||
* Passing through in this case ignores anything with the LETPASSTHROW flag, such as tables, racks, and morgue trays.
|
||||
*/
|
||||
/turf/Adjacent(var/atom/neighbor, var/atom/target = null)
|
||||
/turf/Adjacent(atom/neighbor, atom/target = null)
|
||||
var/turf/T0 = get_turf(neighbor)
|
||||
if(T0 == src)
|
||||
return 1
|
||||
@@ -63,7 +63,7 @@
|
||||
Note: Multiple-tile objects are created when the bound_width and bound_height are creater than the tile size.
|
||||
This is not used in stock /tg/station currently.
|
||||
*/
|
||||
/atom/movable/Adjacent(var/atom/neighbor)
|
||||
/atom/movable/Adjacent(atom/neighbor)
|
||||
if(neighbor == loc) return 1
|
||||
if(!isturf(loc)) return 0
|
||||
for(var/turf/T in locs)
|
||||
@@ -72,7 +72,7 @@
|
||||
return 0
|
||||
|
||||
// This is necessary for storage items not on your person.
|
||||
/obj/item/Adjacent(var/atom/neighbor, var/recurse = 1)
|
||||
/obj/item/Adjacent(atom/neighbor, recurse = 1)
|
||||
if(neighbor == loc) return 1
|
||||
if(istype(loc,/obj/item))
|
||||
if(recurse > 0)
|
||||
@@ -85,7 +85,7 @@
|
||||
This is defined as any dense ON_BORDER object, or any dense object without LETPASSTHROW.
|
||||
The border_only flag allows you to not objects (for source and destination squares)
|
||||
*/
|
||||
/turf/proc/ClickCross(var/target_dir, var/border_only, var/target_atom = null)
|
||||
/turf/proc/ClickCross(target_dir, border_only, target_atom = null)
|
||||
for(var/obj/O in src)
|
||||
if( !O.density || O == target_atom || (O.pass_flags & LETPASSTHROW))
|
||||
continue // LETPASSTHROW is used for anything you can click through
|
||||
|
||||
+16
-16
@@ -196,7 +196,7 @@
|
||||
return FALSE
|
||||
|
||||
// Default behavior: ignore double clicks, consider them normal clicks instead
|
||||
/mob/proc/DblClickOn(var/atom/A, var/params)
|
||||
/mob/proc/DblClickOn(atom/A, params)
|
||||
return
|
||||
|
||||
/*
|
||||
@@ -209,7 +209,7 @@
|
||||
proximity_flag is not currently passed to attack_hand, and is instead used
|
||||
in human click code to allow glove touches only at melee range.
|
||||
*/
|
||||
/mob/proc/UnarmedAttack(var/atom/A, var/proximity_flag)
|
||||
/mob/proc/UnarmedAttack(atom/A, proximity_flag)
|
||||
if(ismob(A))
|
||||
changeNext_move(CLICK_CD_MELEE)
|
||||
return
|
||||
@@ -230,14 +230,14 @@
|
||||
Used when you are handcuffed and click things.
|
||||
Not currently used by anything but could easily be.
|
||||
*/
|
||||
/mob/proc/RestrainedClickOn(var/atom/A)
|
||||
/mob/proc/RestrainedClickOn(atom/A)
|
||||
return
|
||||
|
||||
/*
|
||||
Middle click
|
||||
Only used for swapping hands
|
||||
*/
|
||||
/mob/proc/MiddleClickOn(var/atom/A)
|
||||
/mob/proc/MiddleClickOn(atom/A)
|
||||
pointed(A)
|
||||
return
|
||||
|
||||
@@ -285,7 +285,7 @@
|
||||
|
||||
// In case of use break glass
|
||||
/*
|
||||
/atom/proc/MiddleClick(var/mob/M as mob)
|
||||
/atom/proc/MiddleClick(mob/M as mob)
|
||||
return
|
||||
*/
|
||||
|
||||
@@ -294,10 +294,10 @@
|
||||
For most mobs, examine.
|
||||
This is overridden in ai.dm
|
||||
*/
|
||||
/mob/proc/ShiftClickOn(var/atom/A)
|
||||
/mob/proc/ShiftClickOn(atom/A)
|
||||
A.ShiftClick(src)
|
||||
return
|
||||
/atom/proc/ShiftClick(var/mob/user)
|
||||
/atom/proc/ShiftClick(mob/user)
|
||||
if(user.client && get_turf(user.client.eye) == get_turf(user))
|
||||
user.examinate(src)
|
||||
return
|
||||
@@ -306,7 +306,7 @@
|
||||
Ctrl click
|
||||
For most objects, pull
|
||||
*/
|
||||
/mob/proc/CtrlClickOn(var/atom/A)
|
||||
/mob/proc/CtrlClickOn(atom/A)
|
||||
A.CtrlClick(src)
|
||||
return
|
||||
|
||||
@@ -320,7 +320,7 @@
|
||||
Alt click
|
||||
Unused except for AI
|
||||
*/
|
||||
/mob/proc/AltClickOn(var/atom/A)
|
||||
/mob/proc/AltClickOn(atom/A)
|
||||
A.AltClick(src)
|
||||
return
|
||||
|
||||
@@ -331,7 +331,7 @@
|
||||
else
|
||||
..()
|
||||
|
||||
/atom/proc/AltClick(var/mob/user)
|
||||
/atom/proc/AltClick(mob/user)
|
||||
var/turf/T = get_turf(src)
|
||||
if(T)
|
||||
if(user.TurfAdjacent(T))
|
||||
@@ -342,25 +342,25 @@
|
||||
user.listed_turf = null
|
||||
return
|
||||
|
||||
/mob/proc/TurfAdjacent(var/turf/T)
|
||||
/mob/proc/TurfAdjacent(turf/T)
|
||||
return T.Adjacent(src)
|
||||
|
||||
/*
|
||||
Control+Shift/Alt+Shift click
|
||||
Unused except for AI
|
||||
*/
|
||||
/mob/proc/CtrlShiftClickOn(var/atom/A)
|
||||
/mob/proc/CtrlShiftClickOn(atom/A)
|
||||
A.CtrlShiftClick(src)
|
||||
return
|
||||
|
||||
/atom/proc/CtrlShiftClick(var/mob/user)
|
||||
/atom/proc/CtrlShiftClick(mob/user)
|
||||
return
|
||||
|
||||
/mob/proc/AltShiftClickOn(var/atom/A)
|
||||
/mob/proc/AltShiftClickOn(atom/A)
|
||||
A.AltShiftClick(src)
|
||||
return
|
||||
|
||||
/atom/proc/AltShiftClick(var/mob/user)
|
||||
/atom/proc/AltShiftClick(mob/user)
|
||||
return
|
||||
|
||||
|
||||
@@ -392,7 +392,7 @@
|
||||
LE.fire()
|
||||
|
||||
// Simple helper to face what you clicked on, in case it should be needed in more than one place
|
||||
/mob/proc/face_atom(var/atom/A)
|
||||
/mob/proc/face_atom(atom/A)
|
||||
if( stat || buckled || !A || !x || !y || !A.x || !A.y ) return
|
||||
var/dx = A.x - x
|
||||
var/dy = A.y - y
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
/datum/middleClickOverride/
|
||||
|
||||
/datum/middleClickOverride/proc/onClick(var/atom/A, var/mob/living/user)
|
||||
/datum/middleClickOverride/proc/onClick(atom/A, mob/living/user)
|
||||
user.middleClickOverride = null
|
||||
return 1
|
||||
/* Note, when making a new click override it is ABSOLUTELY VITAL that you set the source's clickOverride to null at some point if you don't want them to be stuck with it forever.
|
||||
@@ -35,7 +35,7 @@
|
||||
/datum/middleClickOverride/badminClicker
|
||||
var/summon_path = /obj/item/reagent_containers/food/snacks/cookie
|
||||
|
||||
/datum/middleClickOverride/badminClicker/onClick(var/atom/A, var/mob/living/user)
|
||||
/datum/middleClickOverride/badminClicker/onClick(atom/A, mob/living/user)
|
||||
var/atom/movable/newObject = new summon_path
|
||||
newObject.loc = get_turf(A)
|
||||
to_chat(user, "<span class='notice'>You release the power you had stored up, summoning \a [newObject.name]! </span>")
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
/datum/hud/human
|
||||
var/hud_alpha = 255
|
||||
|
||||
/datum/hud/human/New(mob/living/carbon/human/owner, var/ui_style = 'icons/mob/screen_white.dmi', var/ui_color = "#ffffff", var/ui_alpha = 255)
|
||||
/datum/hud/human/New(mob/living/carbon/human/owner, ui_style = 'icons/mob/screen_white.dmi', ui_color = "#ffffff", ui_alpha = 255)
|
||||
..()
|
||||
owner.overlay_fullscreen("see_through_darkness", /obj/screen/fullscreen/see_through_darkness)
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/mob/dead/observer/DblClickOn(var/atom/A, var/params)
|
||||
/mob/dead/observer/DblClickOn(atom/A, params)
|
||||
if(client.click_intercept)
|
||||
// Not doing a click intercept here, because otherwise we double-tap with the `ClickOn` proc.
|
||||
// But we return here since we don't want to do regular dblclick handling
|
||||
@@ -18,7 +18,7 @@
|
||||
forceMove(get_turf(A))
|
||||
update_parallax_contents()
|
||||
|
||||
/mob/dead/observer/ClickOn(var/atom/A, var/params)
|
||||
/mob/dead/observer/ClickOn(atom/A, params)
|
||||
if(client.click_intercept)
|
||||
client.click_intercept.InterceptClickOn(src, params, A)
|
||||
return
|
||||
@@ -55,7 +55,7 @@
|
||||
A.attack_ghost(src)
|
||||
|
||||
// We don't need a fucking toggle.
|
||||
/mob/dead/observer/ShiftClickOn(var/atom/A)
|
||||
/mob/dead/observer/ShiftClickOn(atom/A)
|
||||
examinate(A)
|
||||
|
||||
/atom/proc/attack_ghost(mob/user)
|
||||
|
||||
@@ -28,11 +28,11 @@
|
||||
return
|
||||
|
||||
/*
|
||||
/mob/living/carbon/human/RestrainedClickOn(var/atom/A) -- Handled by carbons
|
||||
/mob/living/carbon/human/RestrainedClickOn(atom/A) -- Handled by carbons
|
||||
return
|
||||
*/
|
||||
|
||||
/mob/living/carbon/RestrainedClickOn(var/atom/A)
|
||||
/mob/living/carbon/RestrainedClickOn(atom/A)
|
||||
return 0
|
||||
|
||||
/mob/living/carbon/human/RangedAttack(atom/A, params)
|
||||
@@ -54,17 +54,17 @@
|
||||
/*
|
||||
Animals & All Unspecified
|
||||
*/
|
||||
/mob/living/UnarmedAttack(var/atom/A)
|
||||
/mob/living/UnarmedAttack(atom/A)
|
||||
A.attack_animal(src)
|
||||
|
||||
/mob/living/simple_animal/hostile/UnarmedAttack(var/atom/A)
|
||||
/mob/living/simple_animal/hostile/UnarmedAttack(atom/A)
|
||||
target = A
|
||||
AttackingTarget()
|
||||
|
||||
/atom/proc/attack_animal(mob/user)
|
||||
return
|
||||
|
||||
/mob/living/RestrainedClickOn(var/atom/A)
|
||||
/mob/living/RestrainedClickOn(atom/A)
|
||||
return
|
||||
|
||||
/*
|
||||
@@ -109,5 +109,5 @@
|
||||
return
|
||||
|
||||
// pAIs are not intended to interact with anything in the world
|
||||
/mob/living/silicon/pai/UnarmedAttack(var/atom/A)
|
||||
/mob/living/silicon/pai/UnarmedAttack(atom/A)
|
||||
return
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Blob Overmind Controls
|
||||
|
||||
|
||||
/mob/camera/blob/ClickOn(var/atom/A, var/params) //Expand blob
|
||||
/mob/camera/blob/ClickOn(atom/A, params) //Expand blob
|
||||
var/list/modifiers = params2list(params)
|
||||
if(modifiers["middle"])
|
||||
MiddleClickOn(A)
|
||||
|
||||
@@ -87,7 +87,7 @@
|
||||
|
||||
|
||||
//stops TK grabs being equipped anywhere but into hands
|
||||
/obj/item/tk_grab/equipped(mob/user, var/slot)
|
||||
/obj/item/tk_grab/equipped(mob/user, slot)
|
||||
if( (slot == slot_l_hand) || (slot== slot_r_hand) )
|
||||
return
|
||||
qdel(src)
|
||||
@@ -151,7 +151,7 @@
|
||||
if(!.)
|
||||
return I == focus
|
||||
|
||||
/obj/item/tk_grab/proc/focus_object(var/obj/target, var/mob/user)
|
||||
/obj/item/tk_grab/proc/focus_object(obj/target, mob/user)
|
||||
if(!istype(target,/obj))
|
||||
return//Cant throw non objects atm might let it do mobs later
|
||||
if(target.anchored || !isturf(target.loc))
|
||||
|
||||
@@ -283,7 +283,7 @@ SUBSYSTEM_DEF(air)
|
||||
for(var/turf/simulated/S in T.atmos_adjacent_turfs)
|
||||
add_to_active(S)
|
||||
|
||||
/datum/controller/subsystem/air/proc/setup_allturfs(var/list/turfs_to_init = block(locate(1, 1, 1), locate(world.maxx, world.maxy, world.maxz)))
|
||||
/datum/controller/subsystem/air/proc/setup_allturfs(list/turfs_to_init = block(locate(1, 1, 1), locate(world.maxx, world.maxy, world.maxz)))
|
||||
var/list/active_turfs = src.active_turfs
|
||||
|
||||
// Clear active turfs - faster than removing every single turf in the world
|
||||
@@ -321,7 +321,7 @@ SUBSYSTEM_DEF(air)
|
||||
ET.excited = 1
|
||||
. += ET
|
||||
|
||||
/datum/controller/subsystem/air/proc/setup_atmos_machinery(var/list/machines_to_init)
|
||||
/datum/controller/subsystem/air/proc/setup_atmos_machinery(list/machines_to_init)
|
||||
var/watch = start_watch()
|
||||
log_startup_progress("Initializing atmospherics machinery...")
|
||||
var/count = _setup_atmos_machinery(machines_to_init)
|
||||
@@ -329,7 +329,7 @@ SUBSYSTEM_DEF(air)
|
||||
|
||||
// this underscored variant is so that we can have a means of late initing
|
||||
// atmos machinery without a loud announcement to the world
|
||||
/datum/controller/subsystem/air/proc/_setup_atmos_machinery(var/list/machines_to_init)
|
||||
/datum/controller/subsystem/air/proc/_setup_atmos_machinery(list/machines_to_init)
|
||||
var/count = 0
|
||||
for(var/obj/machinery/atmospherics/A in machines_to_init)
|
||||
A.atmos_init()
|
||||
@@ -345,7 +345,7 @@ SUBSYSTEM_DEF(air)
|
||||
//this can't be done with setup_atmos_machinery() because
|
||||
// all atmos machinery has to initalize before the first
|
||||
// pipenet can be built.
|
||||
/datum/controller/subsystem/air/proc/setup_pipenets(var/list/pipes)
|
||||
/datum/controller/subsystem/air/proc/setup_pipenets(list/pipes)
|
||||
var/watch = start_watch()
|
||||
log_startup_progress("Initializing pipe networks...")
|
||||
var/count = _setup_pipenets(pipes)
|
||||
@@ -353,7 +353,7 @@ SUBSYSTEM_DEF(air)
|
||||
|
||||
// An underscored wrapper that exists for the same reason
|
||||
// the machine init wrapper does
|
||||
/datum/controller/subsystem/air/proc/_setup_pipenets(var/list/pipes)
|
||||
/datum/controller/subsystem/air/proc/_setup_pipenets(list/pipes)
|
||||
var/count = 0
|
||||
for(var/obj/machinery/atmospherics/machine in pipes)
|
||||
machine.build_network()
|
||||
|
||||
@@ -29,7 +29,7 @@ SUBSYSTEM_DEF(jobs)
|
||||
return
|
||||
batch_update_player_exp(announce = FALSE) // Set this to true if you ever want to inform players about their EXP gains
|
||||
|
||||
/datum/controller/subsystem/jobs/proc/SetupOccupations(var/list/faction = list("Station"))
|
||||
/datum/controller/subsystem/jobs/proc/SetupOccupations(list/faction = list("Station"))
|
||||
occupations = list()
|
||||
var/list/all_jobs = subtypesof(/datum/job)
|
||||
if(!all_jobs.len)
|
||||
@@ -47,7 +47,7 @@ SUBSYSTEM_DEF(jobs)
|
||||
return 1
|
||||
|
||||
|
||||
/datum/controller/subsystem/jobs/proc/Debug(var/text)
|
||||
/datum/controller/subsystem/jobs/proc/Debug(text)
|
||||
if(!GLOB.debug2)
|
||||
return 0
|
||||
job_debug.Add(text)
|
||||
@@ -67,7 +67,7 @@ SUBSYSTEM_DEF(jobs)
|
||||
/datum/controller/subsystem/jobs/proc/GetPlayerAltTitle(mob/new_player/player, rank)
|
||||
return player.client.prefs.GetPlayerAltTitle(GetJob(rank))
|
||||
|
||||
/datum/controller/subsystem/jobs/proc/AssignRole(var/mob/new_player/player, var/rank, var/latejoin = 0)
|
||||
/datum/controller/subsystem/jobs/proc/AssignRole(mob/new_player/player, rank, latejoin = 0)
|
||||
Debug("Running AR, Player: [player], Rank: [rank], LJ: [latejoin]")
|
||||
if(player && player.mind && rank)
|
||||
var/datum/job/job = GetJob(rank)
|
||||
@@ -110,7 +110,7 @@ SUBSYSTEM_DEF(jobs)
|
||||
Debug("AR has failed, Player: [player], Rank: [rank]")
|
||||
return 0
|
||||
|
||||
/datum/controller/subsystem/jobs/proc/FreeRole(var/rank) //making additional slot on the fly
|
||||
/datum/controller/subsystem/jobs/proc/FreeRole(rank) //making additional slot on the fly
|
||||
var/datum/job/job = GetJob(rank)
|
||||
if(job && job.current_positions >= job.total_positions && job.total_positions != -1)
|
||||
job.total_positions++
|
||||
@@ -145,7 +145,7 @@ SUBSYSTEM_DEF(jobs)
|
||||
candidates += player
|
||||
return candidates
|
||||
|
||||
/datum/controller/subsystem/jobs/proc/GiveRandomJob(var/mob/new_player/player)
|
||||
/datum/controller/subsystem/jobs/proc/GiveRandomJob(mob/new_player/player)
|
||||
Debug("GRJ Giving random job, Player: [player]")
|
||||
for(var/datum/job/job in shuffle(occupations))
|
||||
if(!job)
|
||||
@@ -229,7 +229,7 @@ SUBSYSTEM_DEF(jobs)
|
||||
|
||||
|
||||
///This proc is called at the start of the level loop of DivideOccupations() and will cause head jobs to be checked before any other jobs of the same level
|
||||
/datum/controller/subsystem/jobs/proc/CheckHeadPositions(var/level)
|
||||
/datum/controller/subsystem/jobs/proc/CheckHeadPositions(level)
|
||||
for(var/command_position in GLOB.command_positions)
|
||||
var/datum/job/job = GetJob(command_position)
|
||||
if(!job)
|
||||
@@ -409,7 +409,7 @@ SUBSYSTEM_DEF(jobs)
|
||||
log_debug("Dividing Occupations took [stop_watch(watch)]s")
|
||||
return 1
|
||||
|
||||
/datum/controller/subsystem/jobs/proc/AssignRank(var/mob/living/carbon/human/H, var/rank, var/joined_late = 0)
|
||||
/datum/controller/subsystem/jobs/proc/AssignRank(mob/living/carbon/human/H, rank, joined_late = 0)
|
||||
if(!H)
|
||||
return null
|
||||
var/datum/job/job = GetJob(rank)
|
||||
|
||||
@@ -26,7 +26,7 @@ SUBSYSTEM_DEF(radio)
|
||||
var/list/datum/radio_frequency/frequencies = list()
|
||||
|
||||
// This is fucking disgusting and needs to die
|
||||
/datum/controller/subsystem/radio/proc/frequency_span_class(var/frequency)
|
||||
/datum/controller/subsystem/radio/proc/frequency_span_class(frequency)
|
||||
// Antags!
|
||||
if(frequency in ANTAG_FREQS)
|
||||
return "syndradio"
|
||||
@@ -62,7 +62,7 @@ SUBSYSTEM_DEF(radio)
|
||||
return "radio"
|
||||
|
||||
|
||||
/datum/controller/subsystem/radio/proc/add_object(obj/device as obj, var/new_frequency as num, var/filter = null as text|null)
|
||||
/datum/controller/subsystem/radio/proc/add_object(obj/device as obj, new_frequency as num, filter = null as text|null)
|
||||
var/f_text = num2text(new_frequency)
|
||||
var/datum/radio_frequency/frequency = frequencies[f_text]
|
||||
|
||||
@@ -87,7 +87,7 @@ SUBSYSTEM_DEF(radio)
|
||||
|
||||
return 1
|
||||
|
||||
/datum/controller/subsystem/radio/proc/return_frequency(var/new_frequency as num)
|
||||
/datum/controller/subsystem/radio/proc/return_frequency(new_frequency as num)
|
||||
var/f_text = num2text(new_frequency)
|
||||
var/datum/radio_frequency/frequency = frequencies[f_text]
|
||||
|
||||
|
||||
@@ -597,7 +597,7 @@ UI STUFF
|
||||
else
|
||||
usr.client.resolveAllAdminTickets()
|
||||
|
||||
/datum/controller/subsystem/tickets/proc/takeTicket(var/index)
|
||||
/datum/controller/subsystem/tickets/proc/takeTicket(index)
|
||||
if(assignStaffToTicket(usr.client, index))
|
||||
if(span_class == "mentorhelp")
|
||||
message_staff("<span class='[span_class]'>[usr.client] / ([usr]) has taken [ticket_name] number [index]</span>")
|
||||
|
||||
@@ -184,7 +184,7 @@ SUBSYSTEM_DEF(vote)
|
||||
|
||||
return .
|
||||
|
||||
/datum/controller/subsystem/vote/proc/submit_vote(var/ckey, var/vote)
|
||||
/datum/controller/subsystem/vote/proc/submit_vote(ckey, vote)
|
||||
if(mode)
|
||||
if(config.vote_no_dead && usr.stat == DEAD && !usr.client.holder)
|
||||
return 0
|
||||
@@ -197,7 +197,7 @@ SUBSYSTEM_DEF(vote)
|
||||
return vote
|
||||
return 0
|
||||
|
||||
/datum/controller/subsystem/vote/proc/initiate_vote(var/vote_type, var/initiator_key)
|
||||
/datum/controller/subsystem/vote/proc/initiate_vote(vote_type, initiator_key)
|
||||
if(!mode)
|
||||
if(started_time != null && !check_rights(R_ADMIN))
|
||||
var/next_allowed_time = (started_time + config.vote_delay)
|
||||
@@ -280,7 +280,7 @@ SUBSYSTEM_DEF(vote)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/datum/controller/subsystem/vote/proc/browse_to(var/client/C)
|
||||
/datum/controller/subsystem/vote/proc/browse_to(client/C)
|
||||
if(!C)
|
||||
return
|
||||
var/admin = check_rights(R_ADMIN, 0, user = C.mob)
|
||||
@@ -330,10 +330,10 @@ SUBSYSTEM_DEF(vote)
|
||||
popup.set_content(dat)
|
||||
popup.open()
|
||||
|
||||
/datum/controller/subsystem/vote/proc/update_panel(var/client/C)
|
||||
/datum/controller/subsystem/vote/proc/update_panel(client/C)
|
||||
C << output(url_encode(vote_html(C)), "vote.browser:update_vote_div")
|
||||
|
||||
/datum/controller/subsystem/vote/proc/vote_html(var/client/C)
|
||||
/datum/controller/subsystem/vote/proc/vote_html(client/C)
|
||||
. = ""
|
||||
if(question)
|
||||
. += "<h2>Vote: '[question]'</h2>"
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
var/button_icon_state = "default"
|
||||
var/mob/owner
|
||||
|
||||
/datum/action/New(var/Target)
|
||||
/datum/action/New(Target)
|
||||
target = Target
|
||||
button = new
|
||||
button.linked_action = src
|
||||
|
||||
+29
-29
@@ -72,7 +72,7 @@
|
||||
if(istype(AL))
|
||||
sorted_laws += AL
|
||||
|
||||
/datum/ai_laws/proc/sync(var/mob/living/silicon/S, var/full_sync = 1)
|
||||
/datum/ai_laws/proc/sync(mob/living/silicon/S, full_sync = 1)
|
||||
// Add directly to laws to avoid log-spam
|
||||
S.sync_zeroth(zeroth_law, zeroth_law_borg)
|
||||
|
||||
@@ -92,7 +92,7 @@
|
||||
S.laws.add_supplied_law(law.index, law.law)
|
||||
|
||||
|
||||
/mob/living/silicon/proc/sync_zeroth(var/datum/ai_law/zeroth_law, var/datum/ai_law/zeroth_law_borg)
|
||||
/mob/living/silicon/proc/sync_zeroth(datum/ai_law/zeroth_law, datum/ai_law/zeroth_law_borg)
|
||||
if(!is_special_character(src) || mind.original != src)
|
||||
if(zeroth_law_borg)
|
||||
laws.set_zeroth_law(zeroth_law_borg.law)
|
||||
@@ -101,14 +101,14 @@
|
||||
else
|
||||
laws.clear_zeroth_laws()
|
||||
|
||||
/mob/living/silicon/ai/sync_zeroth(var/datum/ai_law/zeroth_law, var/datum/ai_law/zeroth_law_borg)
|
||||
/mob/living/silicon/ai/sync_zeroth(datum/ai_law/zeroth_law, datum/ai_law/zeroth_law_borg)
|
||||
if(zeroth_law)
|
||||
laws.set_zeroth_law(zeroth_law.law, zeroth_law_borg ? zeroth_law_borg.law : null)
|
||||
|
||||
/****************
|
||||
* Add Laws *
|
||||
****************/
|
||||
/datum/ai_laws/proc/set_zeroth_law(var/law, var/law_borg = null)
|
||||
/datum/ai_laws/proc/set_zeroth_law(law, law_borg = null)
|
||||
if(!law)
|
||||
return
|
||||
|
||||
@@ -119,7 +119,7 @@
|
||||
zeroth_law_borg = null
|
||||
sorted_laws.Cut()
|
||||
|
||||
/datum/ai_laws/proc/add_ion_law(var/law)
|
||||
/datum/ai_laws/proc/add_ion_law(law)
|
||||
if(!law)
|
||||
return
|
||||
|
||||
@@ -134,7 +134,7 @@
|
||||
|
||||
sorted_laws.Cut()
|
||||
|
||||
/datum/ai_laws/proc/add_inherent_law(var/law)
|
||||
/datum/ai_laws/proc/add_inherent_law(law)
|
||||
if(!law)
|
||||
return
|
||||
|
||||
@@ -149,7 +149,7 @@
|
||||
|
||||
sorted_laws.Cut()
|
||||
|
||||
/datum/ai_laws/proc/add_supplied_law(var/number, var/law)
|
||||
/datum/ai_laws/proc/add_supplied_law(number, law)
|
||||
if(!law)
|
||||
return
|
||||
|
||||
@@ -176,28 +176,28 @@
|
||||
/****************
|
||||
* Remove Laws *
|
||||
*****************/
|
||||
/datum/ai_laws/proc/delete_law(var/datum/ai_law/law)
|
||||
/datum/ai_laws/proc/delete_law(datum/ai_law/law)
|
||||
if(istype(law))
|
||||
law.delete_law(src)
|
||||
|
||||
/datum/ai_law/proc/delete_law(var/datum/ai_laws/laws)
|
||||
/datum/ai_law/proc/delete_law(datum/ai_laws/laws)
|
||||
|
||||
/datum/ai_law/zero/delete_law(var/datum/ai_laws/laws)
|
||||
/datum/ai_law/zero/delete_law(datum/ai_laws/laws)
|
||||
laws.clear_zeroth_laws()
|
||||
|
||||
/datum/ai_law/ion/delete_law(var/datum/ai_laws/laws)
|
||||
/datum/ai_law/ion/delete_law(datum/ai_laws/laws)
|
||||
laws.internal_delete_law(laws.ion_laws, laws.state_ion, src)
|
||||
|
||||
/datum/ai_law/inherent/delete_law(var/datum/ai_laws/laws)
|
||||
/datum/ai_law/inherent/delete_law(datum/ai_laws/laws)
|
||||
laws.internal_delete_law(laws.inherent_laws, laws.state_inherent, src)
|
||||
|
||||
/datum/ai_law/supplied/delete_law(var/datum/ai_laws/laws)
|
||||
/datum/ai_law/supplied/delete_law(datum/ai_laws/laws)
|
||||
var/index = laws.supplied_laws.Find(src)
|
||||
if(index)
|
||||
laws.supplied_laws[index] = ""
|
||||
laws.state_supplied[index] = 1
|
||||
|
||||
/datum/ai_laws/proc/internal_delete_law(var/list/datum/ai_law/laws, var/list/state, var/list/datum/ai_law/law)
|
||||
/datum/ai_laws/proc/internal_delete_law(list/datum/ai_law/laws, list/state, list/datum/ai_law/law)
|
||||
var/index = laws.Find(law)
|
||||
if(index)
|
||||
laws -= law
|
||||
@@ -224,7 +224,7 @@
|
||||
supplied_laws.Cut()
|
||||
sorted_laws.Cut()
|
||||
|
||||
/datum/ai_laws/proc/show_laws(var/who)
|
||||
/datum/ai_laws/proc/show_laws(who)
|
||||
sort_laws()
|
||||
for(var/datum/ai_law/law in sorted_laws)
|
||||
if(law == zeroth_law_borg)
|
||||
@@ -240,25 +240,25 @@
|
||||
/********
|
||||
* Get *
|
||||
********/
|
||||
/datum/ai_laws/proc/get_state_law(var/datum/ai_law/law)
|
||||
/datum/ai_laws/proc/get_state_law(datum/ai_law/law)
|
||||
return law.get_state_law(src)
|
||||
|
||||
/datum/ai_law/proc/get_state_law(var/datum/ai_laws/laws)
|
||||
/datum/ai_law/proc/get_state_law(datum/ai_laws/laws)
|
||||
|
||||
/datum/ai_law/zero/get_state_law(var/datum/ai_laws/laws)
|
||||
/datum/ai_law/zero/get_state_law(datum/ai_laws/laws)
|
||||
if(src == laws.zeroth_law)
|
||||
return laws.state_zeroth
|
||||
|
||||
/datum/ai_law/ion/get_state_law(var/datum/ai_laws/laws)
|
||||
/datum/ai_law/ion/get_state_law(datum/ai_laws/laws)
|
||||
return laws.get_state_internal(laws.ion_laws, laws.state_ion, src)
|
||||
|
||||
/datum/ai_law/inherent/get_state_law(var/datum/ai_laws/laws)
|
||||
/datum/ai_law/inherent/get_state_law(datum/ai_laws/laws)
|
||||
return laws.get_state_internal(laws.inherent_laws, laws.state_inherent, src)
|
||||
|
||||
/datum/ai_law/supplied/get_state_law(var/datum/ai_laws/laws)
|
||||
/datum/ai_law/supplied/get_state_law(datum/ai_laws/laws)
|
||||
return laws.get_state_internal(laws.supplied_laws, laws.state_supplied, src)
|
||||
|
||||
/datum/ai_laws/proc/get_state_internal(var/list/datum/ai_law/laws, var/list/state, var/list/datum/ai_law/law)
|
||||
/datum/ai_laws/proc/get_state_internal(list/datum/ai_law/laws, list/state, list/datum/ai_law/law)
|
||||
var/index = laws.Find(law)
|
||||
if(index)
|
||||
return state[index]
|
||||
@@ -267,25 +267,25 @@
|
||||
/********
|
||||
* Set *
|
||||
********/
|
||||
/datum/ai_laws/proc/set_state_law(var/datum/ai_law/law, var/state)
|
||||
/datum/ai_laws/proc/set_state_law(datum/ai_law/law, state)
|
||||
law.set_state_law(src, state)
|
||||
|
||||
/datum/ai_law/proc/set_state_law(var/datum/ai_law/law, var/state)
|
||||
/datum/ai_law/proc/set_state_law(datum/ai_law/law, state)
|
||||
|
||||
/datum/ai_law/zero/set_state_law(var/datum/ai_laws/laws, var/state)
|
||||
/datum/ai_law/zero/set_state_law(datum/ai_laws/laws, state)
|
||||
if(src == laws.zeroth_law)
|
||||
laws.state_zeroth = state
|
||||
|
||||
/datum/ai_law/ion/set_state_law(var/datum/ai_laws/laws, var/state)
|
||||
/datum/ai_law/ion/set_state_law(datum/ai_laws/laws, state)
|
||||
laws.set_state_law_internal(laws.ion_laws, laws.state_ion, src, state)
|
||||
|
||||
/datum/ai_law/inherent/set_state_law(var/datum/ai_laws/laws, var/state)
|
||||
/datum/ai_law/inherent/set_state_law(datum/ai_laws/laws, state)
|
||||
laws.set_state_law_internal(laws.inherent_laws, laws.state_inherent, src, state)
|
||||
|
||||
/datum/ai_law/supplied/set_state_law(var/datum/ai_laws/laws, var/state)
|
||||
/datum/ai_law/supplied/set_state_law(datum/ai_laws/laws, state)
|
||||
laws.set_state_law_internal(laws.supplied_laws, laws.state_supplied, src, state)
|
||||
|
||||
/datum/ai_laws/proc/set_state_law_internal(var/list/datum/ai_law/laws, var/list/state, var/list/datum/ai_law/law, var/do_state)
|
||||
/datum/ai_laws/proc/set_state_law_internal(list/datum/ai_law/laws, list/state, list/datum/ai_law/law, do_state)
|
||||
var/index = laws.Find(law)
|
||||
if(index)
|
||||
state[index] = do_state
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
var/title_buttons = ""
|
||||
|
||||
|
||||
/datum/browser/New(nuser, nwindow_id, ntitle = 0, nwidth = 0, nheight = 0, var/atom/nref = null)
|
||||
/datum/browser/New(nuser, nwindow_id, ntitle = 0, nwidth = 0, nheight = 0, atom/nref = null)
|
||||
|
||||
user = nuser
|
||||
window_id = nwindow_id
|
||||
@@ -101,7 +101,7 @@
|
||||
[get_footer()]
|
||||
"}
|
||||
|
||||
/datum/browser/proc/open(var/use_onclose = 1)
|
||||
/datum/browser/proc/open(use_onclose = 1)
|
||||
var/window_size = ""
|
||||
if(width && height)
|
||||
window_size = "size=[width]x[height];"
|
||||
@@ -145,7 +145,7 @@
|
||||
// Otherwise, the user mob's machine var will be reset directly.
|
||||
//
|
||||
|
||||
/proc/onclose(mob/user, windowid, var/atom/ref=null)
|
||||
/proc/onclose(mob/user, windowid, atom/ref=null)
|
||||
if(!user || !user.client) return
|
||||
var/param = "null"
|
||||
if(ref)
|
||||
@@ -161,7 +161,7 @@
|
||||
// if a valid atom reference is supplied, call the atom's Topic() with "close=1"
|
||||
// otherwise, just reset the client mob's machine var.
|
||||
//
|
||||
/client/verb/windowclose(var/atomref as text)
|
||||
/client/verb/windowclose(atomref as text)
|
||||
set hidden = 1 // hide this verb from the user's panel
|
||||
set name = ".windowclose" // no autocomplete on cmd line
|
||||
|
||||
|
||||
Vendored
+1
-1
@@ -1,6 +1,6 @@
|
||||
GLOBAL_DATUM_INIT(powermonitor_repository, /datum/repository/powermonitor, new())
|
||||
|
||||
/datum/repository/powermonitor/proc/powermonitor_data(var/refresh = 0)
|
||||
/datum/repository/powermonitor/proc/powermonitor_data(refresh = 0)
|
||||
var/pMonData[0]
|
||||
|
||||
var/datum/cache_entry/cache_entry = cache_data
|
||||
|
||||
@@ -71,5 +71,5 @@
|
||||
if(strength >= cleanable)
|
||||
qdel(src)
|
||||
|
||||
/datum/component/decal/proc/examine(datum/source, mob/user, var/list/examine_list)
|
||||
/datum/component/decal/proc/examine(datum/source, mob/user, list/examine_list)
|
||||
examine_list += description
|
||||
|
||||
@@ -205,7 +205,7 @@
|
||||
return amt
|
||||
return FALSE
|
||||
|
||||
/datum/component/material_container/proc/transer_amt_to(var/datum/component/material_container/T, amt, id)
|
||||
/datum/component/material_container/proc/transer_amt_to(datum/component/material_container/T, amt, id)
|
||||
if((amt==0)||(!T)||(!id))
|
||||
return FALSE
|
||||
if(amt<0)
|
||||
|
||||
@@ -345,7 +345,7 @@ GLOBAL_VAR_INIT(record_id_num, 1001)
|
||||
locked += L
|
||||
return
|
||||
|
||||
/proc/get_id_photo(mob/living/carbon/human/H, var/custom_job = null)
|
||||
/proc/get_id_photo(mob/living/carbon/human/H, custom_job = null)
|
||||
var/icon/preview_icon = null
|
||||
var/obj/item/organ/external/head/head_organ = H.get_organ("head")
|
||||
var/obj/item/organ/internal/eyes/eyes_organ = H.get_int_organ(/obj/item/organ/internal/eyes)
|
||||
|
||||
@@ -445,7 +445,7 @@
|
||||
usr << browse(html, "window=variables[refid];size=475x650")
|
||||
|
||||
#define VV_HTML_ENCODE(thing) ( sanitize ? html_encode(thing) : thing )
|
||||
/proc/debug_variable(name, value, level, var/datum/DA = null, sanitize = TRUE)
|
||||
/proc/debug_variable(name, value, level, datum/DA = null, sanitize = TRUE)
|
||||
var/header
|
||||
if(DA)
|
||||
if(islist(DA))
|
||||
|
||||
@@ -44,7 +44,7 @@ GLOBAL_LIST_INIT(advance_cures, list(
|
||||
|
||||
*/
|
||||
|
||||
/datum/disease/advance/New(var/process = 1, var/datum/disease/advance/D)
|
||||
/datum/disease/advance/New(process = 1, datum/disease/advance/D)
|
||||
if(!istype(D))
|
||||
D = null
|
||||
// Generate symptoms if we weren't given any.
|
||||
@@ -317,7 +317,7 @@ GLOBAL_LIST_INIT(advance_cures, list(
|
||||
*/
|
||||
|
||||
// Mix a list of advance diseases and return the mixed result.
|
||||
/proc/Advance_Mix(var/list/D_list)
|
||||
/proc/Advance_Mix(list/D_list)
|
||||
|
||||
// to_chat(world, "Mixing!!!!")
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// Cold
|
||||
|
||||
/datum/disease/advance/cold/New(var/process = 1, var/datum/disease/advance/D, var/copy = 0)
|
||||
/datum/disease/advance/cold/New(process = 1, datum/disease/advance/D, copy = 0)
|
||||
if(!D)
|
||||
name = "Cold"
|
||||
symptoms = list(new/datum/symptom/sneeze)
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
// Flu
|
||||
|
||||
/datum/disease/advance/flu/New(var/process = 1, var/datum/disease/advance/D, var/copy = 0)
|
||||
/datum/disease/advance/flu/New(process = 1, datum/disease/advance/D, copy = 0)
|
||||
if(!D)
|
||||
name = "Flu"
|
||||
symptoms = list(new/datum/symptom/cough)
|
||||
@@ -18,7 +18,7 @@
|
||||
|
||||
// Voice Changing
|
||||
|
||||
/datum/disease/advance/voice_change/New(var/process = 1, var/datum/disease/advance/D, var/copy = 0)
|
||||
/datum/disease/advance/voice_change/New(process = 1, datum/disease/advance/D, copy = 0)
|
||||
if(!D)
|
||||
name = "Epiglottis Mutation"
|
||||
symptoms = list(new/datum/symptom/voice_change)
|
||||
@@ -27,7 +27,7 @@
|
||||
|
||||
// Toxin Filter
|
||||
|
||||
/datum/disease/advance/heal/New(var/process = 1, var/datum/disease/advance/D, var/copy = 0)
|
||||
/datum/disease/advance/heal/New(process = 1, datum/disease/advance/D, copy = 0)
|
||||
if(!D)
|
||||
name = "Liver Enhancer"
|
||||
symptoms = list(new/datum/symptom/heal)
|
||||
@@ -36,7 +36,7 @@
|
||||
|
||||
// Hullucigen
|
||||
|
||||
/datum/disease/advance/hullucigen/New(var/process = 1, var/datum/disease/advance/D, var/copy = 0)
|
||||
/datum/disease/advance/hullucigen/New(process = 1, datum/disease/advance/D, copy = 0)
|
||||
if(!D)
|
||||
name = "Reality Impairment"
|
||||
symptoms = list(new/datum/symptom/hallucigen)
|
||||
@@ -44,7 +44,7 @@
|
||||
|
||||
// Sensory Restoration
|
||||
|
||||
/datum/disease/advance/sensory_restoration/New(var/process = 1, var/datum/disease/advance/D, var/copy = 0)
|
||||
/datum/disease/advance/sensory_restoration/New(process = 1, datum/disease/advance/D, copy = 0)
|
||||
if(!D)
|
||||
name = "Reality Enhancer"
|
||||
symptoms = list(new/datum/symptom/sensory_restoration)
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
if(speak_emote)
|
||||
D.speak_emote = speak_emote
|
||||
|
||||
/datum/dog_fashion/proc/get_overlay(var/dir)
|
||||
/datum/dog_fashion/proc/get_overlay(dir)
|
||||
if(icon_file && obj_icon_state)
|
||||
var/image/corgI = image(icon_file, obj_icon_state, dir = dir)
|
||||
corgI.alpha = obj_alpha
|
||||
|
||||
@@ -217,7 +217,7 @@
|
||||
text = replacetext(text,"{HOLDER}","[holder]")
|
||||
return text
|
||||
|
||||
/datum/construction/reversible2/custom_action(index, diff, used_atom, var/mob/user)
|
||||
/datum/construction/reversible2/custom_action(index, diff, used_atom, mob/user)
|
||||
if(!..(index,used_atom,user))
|
||||
return 0
|
||||
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
return result
|
||||
|
||||
// Callback function should take the result as the last argument
|
||||
/datum/async_input/proc/on_close(var/datum/callback/cb)
|
||||
/datum/async_input/proc/on_close(datum/callback/cb)
|
||||
onCloseCb = cb
|
||||
|
||||
/datum/async_input/proc/show()
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
else
|
||||
. = subject
|
||||
|
||||
/datum/log_record/proc/get_health_string(var/mob/living/L)
|
||||
/datum/log_record/proc/get_health_string(mob/living/L)
|
||||
var/OX = L.getOxyLoss() > 50 ? "<b>[L.getOxyLoss()]</b>" : L.getOxyLoss()
|
||||
var/TX = L.getToxLoss() > 50 ? "<b>[L.getToxLoss()]</b>" : L.getToxLoss()
|
||||
var/BU = L.getFireLoss() > 50 ? "<b>[L.getFireLoss()]</b>" : L.getFireLoss()
|
||||
|
||||
@@ -370,13 +370,13 @@ GLOBAL_LIST_EMPTY(rpd_pipe_list) //Some pipes we don't want to be dispensable
|
||||
pipe_id = PIPE_DISPOSALS_JUNCTION_LEFT
|
||||
pipe_icon = "pipe-j2"
|
||||
|
||||
/proc/get_pipe_name(var/pipe_id, var/pipe_type)
|
||||
/proc/get_pipe_name(pipe_id, pipe_type)
|
||||
for(var/datum/pipes/P in GLOB.construction_pipe_list)
|
||||
if(P.pipe_id == pipe_id && P.pipe_type == pipe_type)
|
||||
return P.pipe_name
|
||||
return "unknown pipe"
|
||||
|
||||
/proc/get_pipe_icon(var/pipe_id)
|
||||
/proc/get_pipe_icon(pipe_id)
|
||||
for(var/datum/pipes/P in GLOB.construction_pipe_list)
|
||||
if(P.pipe_id == pipe_id)
|
||||
return P.pipe_icon
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
var/frequency as num
|
||||
var/list/obj/devices = list()
|
||||
|
||||
/datum/radio_frequency/proc/post_signal(obj/source as obj|null, datum/signal/signal, var/filter = null as text|null, var/range = null as num|null)
|
||||
/datum/radio_frequency/proc/post_signal(obj/source as obj|null, datum/signal/signal, filter = null as text|null, range = null as num|null)
|
||||
var/turf/start_point
|
||||
if(range)
|
||||
start_point = get_turf(source)
|
||||
@@ -19,7 +19,7 @@
|
||||
send_to_filter(source, signal, next_filter, start_point, range)
|
||||
|
||||
//Sends a signal to all machines belonging to a given filter. Should be called by post_signal()
|
||||
/datum/radio_frequency/proc/send_to_filter(obj/source, datum/signal/signal, var/filter, var/turf/start_point = null, var/range = null)
|
||||
/datum/radio_frequency/proc/send_to_filter(obj/source, datum/signal/signal, filter, turf/start_point = null, range = null)
|
||||
if(range && !start_point)
|
||||
return
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
|
||||
device.receive_signal(signal, TRANSMISSION_RADIO, frequency)
|
||||
|
||||
/datum/radio_frequency/proc/add_listener(obj/device as obj, var/filter as text|null)
|
||||
/datum/radio_frequency/proc/add_listener(obj/device as obj, filter as text|null)
|
||||
if(!filter)
|
||||
filter = RADIO_DEFAULT
|
||||
//log_admin("add_listener(device=[device],filter=[filter]) frequency=[frequency]")
|
||||
|
||||
@@ -38,7 +38,7 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell))
|
||||
spell.remove_ranged_ability(spell.ranged_ability_user)
|
||||
return ..()
|
||||
|
||||
/obj/effect/proc_holder/proc/add_ranged_ability(mob/user, var/msg)
|
||||
/obj/effect/proc_holder/proc/add_ranged_ability(mob/user, msg)
|
||||
if(!user || !user.client)
|
||||
return
|
||||
if(user.ranged_ability && user.ranged_ability != src)
|
||||
@@ -61,7 +61,7 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell))
|
||||
if(C && ranged_mousepointer && C.mouse_pointer_icon == ranged_mousepointer)
|
||||
C.mouse_pointer_icon = initial(C.mouse_pointer_icon)
|
||||
|
||||
/obj/effect/proc_holder/proc/remove_ranged_ability(mob/user, var/msg)
|
||||
/obj/effect/proc_holder/proc/remove_ranged_ability(mob/user, msg)
|
||||
if(!user || (user.ranged_ability && user.ranged_ability != src)) //To avoid removing the wrong ability
|
||||
return
|
||||
user.ranged_ability = null
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
|
||||
GLOBAL_LIST_INIT(all_supply_groups, list(SUPPLY_EMERGENCY,SUPPLY_SECURITY,SUPPLY_ENGINEER,SUPPLY_MEDICAL,SUPPLY_SCIENCE,SUPPLY_ORGANIC,SUPPLY_MATERIALS,SUPPLY_MISC,SUPPLY_VEND))
|
||||
|
||||
/proc/get_supply_group_name(var/cat)
|
||||
/proc/get_supply_group_name(cat)
|
||||
switch(cat)
|
||||
if(SUPPLY_EMERGENCY)
|
||||
return "Emergency"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
|
||||
|
||||
/proc/get_uplink_items(var/job = null)
|
||||
/proc/get_uplink_items(job = null)
|
||||
var/list/uplink_items = list()
|
||||
var/list/sales_items = list()
|
||||
var/newreference = 1
|
||||
@@ -82,7 +82,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
|
||||
var/refund_path = null // Alternative path for refunds, in case the item purchased isn't what is actually refunded (ie: holoparasites).
|
||||
var/refund_amount // specified refund amount in case there needs to be a TC penalty for refunds.
|
||||
|
||||
/datum/uplink_item/proc/spawn_item(var/turf/loc, var/obj/item/uplink/U)
|
||||
/datum/uplink_item/proc/spawn_item(turf/loc, obj/item/uplink/U)
|
||||
|
||||
if(hijack_only && !(usr.mind.special_role == SPECIAL_ROLE_NUKEOPS))//nukies get items that regular traitors only get with hijack. If a hijack-only item is not for nukies, then exclude it via the gamemode list.
|
||||
if(!(locate(/datum/objective/hijack) in usr.mind.objectives))
|
||||
@@ -103,7 +103,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
|
||||
desc = replacetext(initial(temp.desc), "\n", "<br>")
|
||||
return desc
|
||||
|
||||
/datum/uplink_item/proc/buy(var/obj/item/uplink/hidden/U, var/mob/user)
|
||||
/datum/uplink_item/proc/buy(obj/item/uplink/hidden/U, mob/user)
|
||||
|
||||
if(!istype(U))
|
||||
return 0
|
||||
|
||||
@@ -14,37 +14,37 @@ GLOBAL_DATUM_INIT(event_announcement, /datum/announcement/priority/command/event
|
||||
var/admin_announcement = 0 // Admin announcements are received regardless of being in range of a radio, unless you're in the lobby to prevent metagaming
|
||||
var/language = "Galactic Common"
|
||||
|
||||
/datum/announcement/New(var/do_log = 0, var/new_sound = null, var/do_newscast = 0)
|
||||
/datum/announcement/New(do_log = 0, new_sound = null, do_newscast = 0)
|
||||
sound = new_sound
|
||||
log = do_log
|
||||
newscast = do_newscast
|
||||
|
||||
/datum/announcement/minor/New(var/do_log = 0, var/new_sound = sound('sound/misc/notice2.ogg'), var/do_newscast = 0)
|
||||
/datum/announcement/minor/New(do_log = 0, new_sound = sound('sound/misc/notice2.ogg'), do_newscast = 0)
|
||||
..(do_log, new_sound, do_newscast)
|
||||
title = "Attention"
|
||||
announcement_type = "Minor Announcement"
|
||||
|
||||
/datum/announcement/priority/New(var/do_log = 1, var/new_sound = sound('sound/misc/notice2.ogg'), var/do_newscast = 0)
|
||||
/datum/announcement/priority/New(do_log = 1, new_sound = sound('sound/misc/notice2.ogg'), do_newscast = 0)
|
||||
..(do_log, new_sound, do_newscast)
|
||||
title = "Priority Announcement"
|
||||
announcement_type = "Priority Announcement"
|
||||
|
||||
/datum/announcement/priority/command/New(var/do_log = 1, var/new_sound = sound('sound/misc/notice2.ogg'), var/do_newscast = 0)
|
||||
/datum/announcement/priority/command/New(do_log = 1, new_sound = sound('sound/misc/notice2.ogg'), do_newscast = 0)
|
||||
..(do_log, new_sound, do_newscast)
|
||||
admin_announcement = 1
|
||||
title = "[command_name()] Update"
|
||||
announcement_type = "[command_name()] Update"
|
||||
|
||||
/datum/announcement/priority/command/event/New(var/do_log = 1, var/new_sound = sound('sound/misc/notice2.ogg'), var/do_newscast = 0)
|
||||
/datum/announcement/priority/command/event/New(do_log = 1, new_sound = sound('sound/misc/notice2.ogg'), do_newscast = 0)
|
||||
..(do_log, new_sound, do_newscast)
|
||||
admin_announcement = 0
|
||||
|
||||
/datum/announcement/priority/security/New(var/do_log = 1, var/new_sound = sound('sound/misc/notice2.ogg'), var/do_newscast = 0)
|
||||
/datum/announcement/priority/security/New(do_log = 1, new_sound = sound('sound/misc/notice2.ogg'), do_newscast = 0)
|
||||
..(do_log, new_sound, do_newscast)
|
||||
title = "Security Announcement"
|
||||
announcement_type = "Security Announcement"
|
||||
|
||||
/datum/announcement/proc/Announce(var/message as text, var/new_title = "", var/new_sound = null, var/do_newscast = newscast, var/msg_sanitized = 0, var/from, var/msg_language)
|
||||
/datum/announcement/proc/Announce(message as text, new_title = "", new_sound = null, do_newscast = newscast, msg_sanitized = 0, from, msg_language)
|
||||
if(!message)
|
||||
return
|
||||
|
||||
@@ -76,7 +76,7 @@ GLOBAL_DATUM_INIT(event_announcement, /datum/announcement/priority/command/event
|
||||
Sound(message_sound, combined_receivers[1] + combined_receivers[2])
|
||||
Log(message, message_title)
|
||||
|
||||
/datum/announcement/proc/Get_Receivers(var/datum/language/message_language)
|
||||
/datum/announcement/proc/Get_Receivers(datum/language/message_language)
|
||||
var/list/receivers = list()
|
||||
var/list/garbled_receivers = list()
|
||||
|
||||
@@ -161,7 +161,7 @@ GLOBAL_DATUM_INIT(event_announcement, /datum/announcement/priority/command/event
|
||||
news.can_be_redacted = 0
|
||||
announce_newscaster_news(news)
|
||||
|
||||
/datum/announcement/proc/Sound(var/message_sound, var/receivers)
|
||||
/datum/announcement/proc/Sound(message_sound, receivers)
|
||||
if(!message_sound)
|
||||
return
|
||||
for(var/mob/M in receivers)
|
||||
@@ -172,6 +172,6 @@ GLOBAL_DATUM_INIT(event_announcement, /datum/announcement/priority/command/event
|
||||
log_game("[key_name(usr)] has made \a [announcement_type]: [message_title] - [message] - [announcer]")
|
||||
message_admins("[key_name_admin(usr)] has made \a [announcement_type].", 1)
|
||||
|
||||
/proc/GetNameAndAssignmentFromId(var/obj/item/card/id/I)
|
||||
/proc/GetNameAndAssignmentFromId(obj/item/card/id/I)
|
||||
// Format currently matches that of newscaster feeds: Registered Name (Assigned Rank)
|
||||
return I.assignment ? "[I.registered_name] ([I.assignment])" : I.registered_name
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
#define TELECOMMS_RECEPTION_RECEIVER 2
|
||||
#define TELECOMMS_RECEPTION_BOTH 3
|
||||
|
||||
/proc/get_frequency_name(var/display_freq)
|
||||
/proc/get_frequency_name(display_freq)
|
||||
var/freq_text
|
||||
|
||||
// the name of the channel
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
qdel(dummy)
|
||||
return G
|
||||
|
||||
/proc/CreateSecurityRecord(var/name as text, var/id as text)
|
||||
/proc/CreateSecurityRecord(name as text, id as text)
|
||||
var/datum/data/record/R = new /datum/data/record()
|
||||
R.fields["name"] = name
|
||||
R.fields["id"] = id
|
||||
|
||||
@@ -375,7 +375,7 @@
|
||||
#define ENVIRON 3
|
||||
*/
|
||||
|
||||
/area/proc/powered(var/chan) // return true if the area has power to given channel
|
||||
/area/proc/powered(chan) // return true if the area has power to given channel
|
||||
|
||||
if(!requires_power)
|
||||
return 1
|
||||
@@ -405,7 +405,7 @@
|
||||
SEND_SIGNAL(src, COMSIG_AREA_POWER_CHANGE)
|
||||
updateicon()
|
||||
|
||||
/area/proc/usage(var/chan)
|
||||
/area/proc/usage(chan)
|
||||
var/used = 0
|
||||
switch(chan)
|
||||
if(LIGHT)
|
||||
@@ -439,7 +439,7 @@
|
||||
used_light = 0
|
||||
used_environ = 0
|
||||
|
||||
/area/proc/use_power(var/amount, var/chan)
|
||||
/area/proc/use_power(amount, chan)
|
||||
switch(chan)
|
||||
if(EQUIP)
|
||||
used_equip += amount
|
||||
@@ -448,7 +448,7 @@
|
||||
if(ENVIRON)
|
||||
used_environ += amount
|
||||
|
||||
/area/proc/use_battery_power(var/amount, var/chan)
|
||||
/area/proc/use_battery_power(amount, chan)
|
||||
switch(chan)
|
||||
if(EQUIP)
|
||||
used_equip += amount
|
||||
@@ -488,14 +488,14 @@
|
||||
else if(L && L.client && !(L.client.prefs.sound & SOUND_BUZZ))
|
||||
L.client.ambience_playing = FALSE
|
||||
|
||||
/area/proc/gravitychange(var/gravitystate = 0, var/area/A)
|
||||
/area/proc/gravitychange(gravitystate = 0, area/A)
|
||||
A.has_gravity = gravitystate
|
||||
|
||||
if(gravitystate)
|
||||
for(var/mob/living/carbon/human/M in A)
|
||||
thunk(M)
|
||||
|
||||
/area/proc/thunk(var/mob/living/carbon/human/M)
|
||||
/area/proc/thunk(mob/living/carbon/human/M)
|
||||
if(istype(M,/mob/living/carbon/human/)) // Only humans can wear magboots, so we give them a chance to.
|
||||
if(istype(M.shoes, /obj/item/clothing/shoes/magboots) && (M.shoes.flags & NOSLIP))
|
||||
return
|
||||
|
||||
@@ -314,7 +314,7 @@
|
||||
for(var/obj/machinery/computer/syndicate_depot/C in src)
|
||||
C.security_lockout = FALSE
|
||||
|
||||
/area/syndicate_depot/core/proc/set_emergency_access(var/openaccess)
|
||||
/area/syndicate_depot/core/proc/set_emergency_access(openaccess)
|
||||
for(var/obj/machinery/door/airlock/A in src)
|
||||
if(istype(A, /obj/machinery/door/airlock/hatch/syndicate/vault))
|
||||
continue
|
||||
|
||||
@@ -132,7 +132,7 @@
|
||||
|
||||
// Used in shuttle movement and AI eye stuff.
|
||||
// Primarily used to notify objects being moved by a shuttle/bluespace fuckup.
|
||||
/atom/movable/proc/setLoc(var/T, var/teleported=0)
|
||||
/atom/movable/proc/setLoc(T, teleported=0)
|
||||
loc = T
|
||||
|
||||
/atom/movable/Move(atom/newloc, direct = 0, movetime)
|
||||
@@ -308,7 +308,7 @@
|
||||
//Return 0 to have src start/keep drifting in a no-grav area and 1 to stop/not start drifting
|
||||
//Mobs should return 1 if they should be able to move of their own volition, see client/Move() in mob_movement.dm
|
||||
//movement_dir == 0 when stopping or any dir when trying to move
|
||||
/atom/movable/proc/Process_Spacemove(var/movement_dir = 0)
|
||||
/atom/movable/proc/Process_Spacemove(movement_dir = 0)
|
||||
if(has_gravity(src))
|
||||
return 1
|
||||
|
||||
|
||||
@@ -63,7 +63,7 @@ GLOBAL_LIST_EMPTY(blob_nodes)
|
||||
return candidates
|
||||
|
||||
|
||||
/datum/game_mode/blob/proc/blobize(var/mob/living/carbon/human/blob)
|
||||
/datum/game_mode/blob/proc/blobize(mob/living/carbon/human/blob)
|
||||
var/datum/mind/blobmind = blob.mind
|
||||
if(!istype(blobmind))
|
||||
return 0
|
||||
@@ -79,7 +79,7 @@ GLOBAL_LIST_EMPTY(blob_nodes)
|
||||
burst_blob(blobmind)
|
||||
return 1
|
||||
|
||||
/datum/game_mode/blob/proc/make_blobs(var/count)
|
||||
/datum/game_mode/blob/proc/make_blobs(count)
|
||||
var/list/candidates = get_blob_candidates()
|
||||
var/mob/living/carbon/human/blob = null
|
||||
count=min(count, candidates.len)
|
||||
@@ -97,7 +97,7 @@ GLOBAL_LIST_EMPTY(blob_nodes)
|
||||
to_chat(world, "You must kill it all while minimizing the damage to the station.")
|
||||
|
||||
|
||||
/datum/game_mode/blob/proc/greet_blob(var/datum/mind/blob)
|
||||
/datum/game_mode/blob/proc/greet_blob(datum/mind/blob)
|
||||
to_chat(blob.current, "<span class='userdanger'>You are infected by the Blob!</span>")
|
||||
to_chat(blob.current, "<b>Your body is ready to give spawn to a new blob core which will eat this station.</b>")
|
||||
to_chat(blob.current, "<b>Find a good location to spawn the core and then take control and overwhelm the station!</b>")
|
||||
@@ -106,7 +106,7 @@ GLOBAL_LIST_EMPTY(blob_nodes)
|
||||
SEND_SOUND(blob.current, sound('sound/magic/mutate.ogg'))
|
||||
return
|
||||
|
||||
/datum/game_mode/blob/proc/show_message(var/message)
|
||||
/datum/game_mode/blob/proc/show_message(message)
|
||||
for(var/datum/mind/blob in infected_crew)
|
||||
to_chat(blob.current, message)
|
||||
|
||||
@@ -114,7 +114,7 @@ GLOBAL_LIST_EMPTY(blob_nodes)
|
||||
for(var/datum/mind/blob in infected_crew)
|
||||
burst_blob(blob)
|
||||
|
||||
/datum/game_mode/blob/proc/burst_blob(var/datum/mind/blob, var/warned=0)
|
||||
/datum/game_mode/blob/proc/burst_blob(datum/mind/blob, warned=0)
|
||||
var/client/blob_client = null
|
||||
var/turf/location = null
|
||||
|
||||
@@ -190,7 +190,7 @@ GLOBAL_LIST_EMPTY(blob_nodes)
|
||||
|
||||
return ..()
|
||||
|
||||
/datum/game_mode/blob/proc/stage(var/stage)
|
||||
/datum/game_mode/blob/proc/stage(stage)
|
||||
switch(stage)
|
||||
if(0)
|
||||
send_intercept(1)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/datum/game_mode/blob/proc/send_intercept(var/report = 1)
|
||||
/datum/game_mode/blob/proc/send_intercept(report = 1)
|
||||
var/intercepttext = ""
|
||||
var/interceptname = ""
|
||||
switch(report)
|
||||
@@ -89,7 +89,7 @@
|
||||
else if(istype(O, /obj/machinery))
|
||||
src.mach += 1
|
||||
|
||||
/datum/station_state/proc/score(var/datum/station_state/result)
|
||||
/datum/station_state/proc/score(datum/station_state/result)
|
||||
if(!result) return 0
|
||||
var/output = 0
|
||||
output += (result.floor / max(floor,1))
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
fire_damage = 3
|
||||
var/mob/camera/blob/overmind = null
|
||||
|
||||
/mob/living/simple_animal/hostile/blob/proc/adjustcolors(var/a_color)
|
||||
/mob/living/simple_animal/hostile/blob/proc/adjustcolors(a_color)
|
||||
if(a_color)
|
||||
color = a_color
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
return 1
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/hostile/blob/blobspore/New(loc, var/obj/structure/blob/factory/linked_node)
|
||||
/mob/living/simple_animal/hostile/blob/blobspore/New(loc, obj/structure/blob/factory/linked_node)
|
||||
if(istype(linked_node))
|
||||
factory = linked_node
|
||||
factory.spores += src
|
||||
@@ -149,7 +149,7 @@
|
||||
|
||||
adjustcolors(overmind?.blob_reagent_datum?.complementary_color)
|
||||
|
||||
/mob/living/simple_animal/hostile/blob/blobspore/adjustcolors(var/a_color)
|
||||
/mob/living/simple_animal/hostile/blob/blobspore/adjustcolors(a_color)
|
||||
color = a_color
|
||||
|
||||
if(is_zombie)
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
point_rate = new_rate
|
||||
|
||||
|
||||
/obj/structure/blob/core/adjustcolors(var/a_color)
|
||||
/obj/structure/blob/core/adjustcolors(a_color)
|
||||
overlays.Cut()
|
||||
color = null
|
||||
var/image/I = new('icons/mob/blob.dmi', "blob")
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
GLOB.blob_nodes += src
|
||||
START_PROCESSING(SSobj, src)
|
||||
|
||||
/obj/structure/blob/node/adjustcolors(var/a_color)
|
||||
/obj/structure/blob/node/adjustcolors(a_color)
|
||||
overlays.Cut()
|
||||
color = null
|
||||
var/image/I = new('icons/mob/blob.dmi', "blob")
|
||||
|
||||
@@ -11,6 +11,6 @@
|
||||
overmind.max_blob_points -= 50
|
||||
..()
|
||||
|
||||
/obj/structure/blob/storage/proc/update_max_blob_points(var/new_point_increase)
|
||||
/obj/structure/blob/storage/proc/update_max_blob_points(new_point_increase)
|
||||
if(overmind)
|
||||
overmind.max_blob_points += new_point_increase
|
||||
|
||||
@@ -55,13 +55,13 @@
|
||||
if(blob_core && hud_used)
|
||||
hud_used.blobhealthdisplay.maptext = "<div align='center' valign='middle' style='position:relative; top:0px; left:6px'><font face='Small Fonts' color='#e36600'>[round(blob_core.obj_integrity)]</font></div>"
|
||||
|
||||
/mob/camera/blob/proc/add_points(var/points)
|
||||
/mob/camera/blob/proc/add_points(points)
|
||||
if(points != 0)
|
||||
blob_points = clamp(blob_points + points, 0, max_blob_points)
|
||||
if(hud_used)
|
||||
hud_used.blobpwrdisplay.maptext = "<div align='center' valign='middle' style='position:relative; top:0px; left:6px'><font face='Small Fonts' color='#82ed00'>[round(src.blob_points)]</font></div>"
|
||||
|
||||
/mob/camera/blob/say(var/message)
|
||||
/mob/camera/blob/say(message)
|
||||
if(!message)
|
||||
return
|
||||
|
||||
@@ -105,7 +105,7 @@
|
||||
stat(null, "Core Health: [blob_core.obj_integrity]")
|
||||
stat(null, "Power Stored: [blob_points]/[max_blob_points]")
|
||||
|
||||
/mob/camera/blob/Move(var/NewLoc, var/Dir = 0)
|
||||
/mob/camera/blob/Move(NewLoc, Dir = 0)
|
||||
var/obj/structure/blob/B = locate() in range("3x3", NewLoc)
|
||||
if(B)
|
||||
loc = NewLoc
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// Point controlling procs
|
||||
|
||||
/mob/camera/blob/proc/can_buy(var/cost = 15)
|
||||
/mob/camera/blob/proc/can_buy(cost = 15)
|
||||
if(blob_points < cost)
|
||||
to_chat(src, "<span class='warning'>You cannot afford this!</span>")
|
||||
return 0
|
||||
@@ -50,7 +50,7 @@
|
||||
var/turf/T = get_turf(src)
|
||||
create_shield(T)
|
||||
|
||||
/mob/camera/blob/proc/create_shield(var/turf/T)
|
||||
/mob/camera/blob/proc/create_shield(turf/T)
|
||||
|
||||
var/obj/structure/blob/B = locate(/obj/structure/blob) in T
|
||||
var/obj/structure/blob/shield/S = locate(/obj/structure/blob/shield) in T
|
||||
@@ -283,7 +283,7 @@
|
||||
var/turf/T = get_turf(src)
|
||||
remove_blob(T)
|
||||
|
||||
/mob/camera/blob/proc/remove_blob(var/turf/T)
|
||||
/mob/camera/blob/proc/remove_blob(turf/T)
|
||||
|
||||
var/obj/structure/blob/B = locate(/obj/structure/blob) in T
|
||||
if(!T)
|
||||
@@ -312,7 +312,7 @@
|
||||
var/turf/T = get_turf(src)
|
||||
expand_blob(T)
|
||||
|
||||
/mob/camera/blob/proc/expand_blob(var/turf/T)
|
||||
/mob/camera/blob/proc/expand_blob(turf/T)
|
||||
if(!T)
|
||||
return
|
||||
|
||||
@@ -350,7 +350,7 @@
|
||||
var/turf/T = get_turf(src)
|
||||
rally_spores(T)
|
||||
|
||||
/mob/camera/blob/proc/rally_spores(var/turf/T)
|
||||
/mob/camera/blob/proc/rally_spores(turf/T)
|
||||
to_chat(src, "You rally your spores.")
|
||||
|
||||
var/list/surrounding_turfs = block(locate(T.x - 1, T.y - 1, T.z), locate(T.x + 1, T.y + 1, T.z))
|
||||
|
||||
@@ -73,7 +73,7 @@
|
||||
health_timestamp = world.time + 10 // 1 seconds
|
||||
|
||||
|
||||
/obj/structure/blob/proc/Pulse(var/pulse = 0, var/origin_dir = 0, var/a_color)//Todo: Fix spaceblob expand
|
||||
/obj/structure/blob/proc/Pulse(pulse = 0, origin_dir = 0, a_color)//Todo: Fix spaceblob expand
|
||||
RegenHealth()
|
||||
|
||||
if(run_action())//If we can do something here then we dont need to pulse more
|
||||
@@ -110,7 +110,7 @@
|
||||
if(iswallturf(loc))
|
||||
loc.blob_act(src) //don't ask how a wall got on top of the core, just eat it
|
||||
|
||||
/obj/structure/blob/proc/expand(var/turf/T = null, var/prob = 1, var/a_color)
|
||||
/obj/structure/blob/proc/expand(turf/T = null, prob = 1, a_color)
|
||||
if(prob && !prob(obj_integrity))
|
||||
return
|
||||
if(istype(T, /turf/space) && prob(75)) return
|
||||
@@ -139,7 +139,7 @@
|
||||
A.blob_act(src)
|
||||
return 1
|
||||
|
||||
/obj/structure/blob/Crossed(var/mob/living/L, oldloc)
|
||||
/obj/structure/blob/Crossed(mob/living/L, oldloc)
|
||||
..()
|
||||
L.blob_act(src)
|
||||
|
||||
@@ -188,7 +188,7 @@
|
||||
if(. && obj_integrity > 0)
|
||||
update_icon()
|
||||
|
||||
/obj/structure/blob/proc/change_to(var/type)
|
||||
/obj/structure/blob/proc/change_to(type)
|
||||
if(!ispath(type))
|
||||
error("[type] is an invalid type for the blob.")
|
||||
var/obj/structure/blob/B = new type(src.loc)
|
||||
@@ -198,7 +198,7 @@
|
||||
B.adjustcolors(color)
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/blob/proc/adjustcolors(var/a_color)
|
||||
/obj/structure/blob/proc/adjustcolors(a_color)
|
||||
if(a_color)
|
||||
color = a_color
|
||||
return
|
||||
|
||||
@@ -25,7 +25,7 @@ if you override it, MAKE SURE you call parent or it will not be usable
|
||||
the same goes for Remove(). if you override Remove(), call parent or else your power wont be removed on respec
|
||||
*/
|
||||
|
||||
/datum/action/changeling/proc/on_purchase(var/mob/user)
|
||||
/datum/action/changeling/proc/on_purchase(mob/user)
|
||||
if(needs_button)
|
||||
Grant(user)
|
||||
|
||||
@@ -46,18 +46,18 @@ the same goes for Remove(). if you override Remove(), call parent or else your p
|
||||
sting_feedback(user, target)
|
||||
take_chemical_cost(c)
|
||||
|
||||
/datum/action/changeling/proc/sting_action(var/mob/user, var/mob/target)
|
||||
/datum/action/changeling/proc/sting_action(mob/user, mob/target)
|
||||
return 0
|
||||
|
||||
/datum/action/changeling/proc/sting_feedback(var/mob/user, var/mob/target)
|
||||
/datum/action/changeling/proc/sting_feedback(mob/user, mob/target)
|
||||
return 0
|
||||
|
||||
/datum/action/changeling/proc/take_chemical_cost(var/datum/changeling/changeling)
|
||||
/datum/action/changeling/proc/take_chemical_cost(datum/changeling/changeling)
|
||||
changeling.chem_charges -= chemical_cost
|
||||
changeling.geneticdamage += genetic_damage
|
||||
|
||||
//Fairly important to remember to return 1 on success >.<
|
||||
/datum/action/changeling/proc/can_sting(var/mob/user, var/mob/target)
|
||||
/datum/action/changeling/proc/can_sting(mob/user, mob/target)
|
||||
if(!ishuman(user)) //typecast everything from mob to carbon from this point onwards
|
||||
return 0
|
||||
if(req_human && (!ishuman(user) || issmall(user)))
|
||||
@@ -82,7 +82,7 @@ the same goes for Remove(). if you override Remove(), call parent or else your p
|
||||
return 1
|
||||
|
||||
//used in /mob/Stat()
|
||||
/datum/action/changeling/proc/can_be_used_by(var/mob/user)
|
||||
/datum/action/changeling/proc/can_be_used_by(mob/user)
|
||||
if(!ishuman(user))
|
||||
return 0
|
||||
if(req_human && !ishuman(user))
|
||||
@@ -90,7 +90,7 @@ the same goes for Remove(). if you override Remove(), call parent or else your p
|
||||
return 1
|
||||
|
||||
// Transform the target to the chosen dna. Used in transform.dm and tiny_prick.dm (handy for changes since it's the same thing done twice)
|
||||
/datum/action/changeling/proc/transform_dna(var/mob/living/carbon/human/H, var/datum/dna/D)
|
||||
/datum/action/changeling/proc/transform_dna(mob/living/carbon/human/H, datum/dna/D)
|
||||
if(!D)
|
||||
return
|
||||
|
||||
|
||||
@@ -84,7 +84,7 @@
|
||||
view_mode = new_view_mode
|
||||
return TRUE
|
||||
|
||||
/datum/changeling/proc/purchasePower(var/mob/living/carbon/user, var/sting_name)
|
||||
/datum/changeling/proc/purchasePower(mob/living/carbon/user, sting_name)
|
||||
var/datum/action/changeling/thepower = null
|
||||
var/list/all_powers = init_subtypes(/datum/action/changeling)
|
||||
|
||||
@@ -122,7 +122,7 @@
|
||||
return TRUE
|
||||
|
||||
//Reselect powers
|
||||
/datum/changeling/proc/lingRespec(var/mob/user)
|
||||
/datum/changeling/proc/lingRespec(mob/user)
|
||||
if(!ishuman(user) || issmall(user))
|
||||
to_chat(user, "<span class='danger'>We can't remove our evolutions in this form!</span>")
|
||||
return FALSE
|
||||
@@ -136,7 +136,7 @@
|
||||
to_chat(user, "<span class='danger'>You lack the power to readapt your evolutions!</span>")
|
||||
return FALSE
|
||||
|
||||
/mob/proc/make_changeling(var/get_free_powers = TRUE)
|
||||
/mob/proc/make_changeling(get_free_powers = TRUE)
|
||||
if(!mind)
|
||||
return
|
||||
if(!ishuman(src))
|
||||
@@ -170,7 +170,7 @@
|
||||
return 1
|
||||
|
||||
//Used to dump the languages from the changeling datum into the actual mob.
|
||||
/mob/proc/changeling_update_languages(var/updated_languages)
|
||||
/mob/proc/changeling_update_languages(updated_languages)
|
||||
|
||||
for(var/datum/language/L in updated_languages)
|
||||
add_language("L.name")
|
||||
@@ -190,7 +190,7 @@
|
||||
chem_recharge_slowdown = initial(chem_recharge_slowdown)
|
||||
mimicing = ""
|
||||
|
||||
/mob/proc/remove_changeling_powers(var/keep_free_powers=0)
|
||||
/mob/proc/remove_changeling_powers(keep_free_powers=0)
|
||||
if(ishuman(src))
|
||||
if(mind && mind.changeling)
|
||||
digitalcamo = 0
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
var/mob/living/carbon/target = G.affecting
|
||||
return changeling.can_absorb_dna(user,target)
|
||||
|
||||
/datum/action/changeling/absorbDNA/sting_action(var/mob/user)
|
||||
/datum/action/changeling/absorbDNA/sting_action(mob/user)
|
||||
var/datum/changeling/changeling = user.mind.changeling
|
||||
var/obj/item/grab/G = user.get_active_hand()
|
||||
var/mob/living/carbon/human/target = G.affecting
|
||||
@@ -101,7 +101,7 @@
|
||||
return 1
|
||||
|
||||
//Absorbs the target DNA.
|
||||
/datum/changeling/proc/absorb_dna(mob/living/carbon/T, var/mob/user)
|
||||
/datum/changeling/proc/absorb_dna(mob/living/carbon/T, mob/user)
|
||||
T.dna.real_name = T.real_name //Set this again, just to be sure that it's properly set.
|
||||
var/datum/dna/new_dna = T.dna.Clone()
|
||||
//Steal all of their languages!
|
||||
@@ -113,7 +113,7 @@
|
||||
absorbedcount++
|
||||
store_dna(new_dna, user)
|
||||
|
||||
/datum/changeling/proc/store_dna(var/datum/dna/new_dna, var/mob/user)
|
||||
/datum/changeling/proc/store_dna(datum/dna/new_dna, mob/user)
|
||||
for(var/datum/objective/escape/escape_with_identity/E in user.mind.objectives)
|
||||
if(E.target_real_name == new_dna.real_name)
|
||||
protected_dna |= new_dna
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
dna_cost = 1
|
||||
|
||||
//Prevents AIs tracking you but makes you easily detectable to the human-eye.
|
||||
/datum/action/changeling/digitalcamo/sting_action(var/mob/user)
|
||||
/datum/action/changeling/digitalcamo/sting_action(mob/user)
|
||||
|
||||
if(user.digitalcamo)
|
||||
to_chat(user, "<span class='notice'>We return to normal.</span>")
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
req_stat = UNCONSCIOUS
|
||||
|
||||
//Recover from stuns.
|
||||
/datum/action/changeling/epinephrine/sting_action(var/mob/living/user)
|
||||
/datum/action/changeling/epinephrine/sting_action(mob/living/user)
|
||||
|
||||
if(user.lying)
|
||||
to_chat(user, "<span class='notice'>We arise.</span>")
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
max_genetic_damage = 100
|
||||
|
||||
//Fake our own death and fully heal. You will appear to be dead but regenerate fully after a short delay.
|
||||
/datum/action/changeling/fakedeath/sting_action(var/mob/living/user)
|
||||
/datum/action/changeling/fakedeath/sting_action(mob/living/user)
|
||||
|
||||
to_chat(user, "<span class='notice'>We begin our stasis, preparing energy to arise once more.</span>")
|
||||
if(user.stat != DEAD)
|
||||
@@ -30,7 +30,7 @@
|
||||
var/datum/action/changeling/revive/R = new
|
||||
R.Grant(user)
|
||||
|
||||
/datum/action/changeling/fakedeath/can_sting(var/mob/user)
|
||||
/datum/action/changeling/fakedeath/can_sting(mob/user)
|
||||
if(HAS_TRAIT(user, TRAIT_FAKEDEATH))
|
||||
to_chat(user, "<span class='warning'>We are already regenerating.</span>")
|
||||
return
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
recent_uses = max(1, recent_uses - (1 / healing_ticks))
|
||||
|
||||
//Starts healing you every second for 10 seconds. Can be used whilst unconscious.
|
||||
/datum/action/changeling/fleshmend/sting_action(var/mob/living/user)
|
||||
/datum/action/changeling/fleshmend/sting_action(mob/living/user)
|
||||
to_chat(user, "<span class='notice'>We begin to heal rapidly.</span>")
|
||||
if(recent_uses > 1)
|
||||
to_chat(user, "<span class='warning'>Our healing's effectiveness is reduced \
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
chemical_cost = -1
|
||||
needs_button = FALSE
|
||||
|
||||
/datum/action/changeling/hivemind_comms/on_purchase(var/mob/user)
|
||||
/datum/action/changeling/hivemind_comms/on_purchase(mob/user)
|
||||
..()
|
||||
var/datum/changeling/changeling=user.mind.changeling
|
||||
changeling.changeling_speak = 1
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
max_genetic_damage = 3
|
||||
|
||||
//Transform into a human.
|
||||
/datum/action/changeling/humanform/sting_action(var/mob/living/carbon/human/user)
|
||||
/datum/action/changeling/humanform/sting_action(mob/living/carbon/human/user)
|
||||
var/datum/changeling/changeling = user.mind.changeling
|
||||
var/list/names = list()
|
||||
for(var/datum/dna/DNA in (changeling.absorbed_dna+changeling.protected_dna))
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
req_human = 1
|
||||
|
||||
//Transform into a monkey.
|
||||
/datum/action/changeling/lesserform/sting_action(var/mob/living/carbon/human/user)
|
||||
/datum/action/changeling/lesserform/sting_action(mob/living/carbon/human/user)
|
||||
var/datum/changeling/changeling = user.mind.changeling
|
||||
if(!user)
|
||||
return 0
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
|
||||
// Fake Voice
|
||||
/datum/action/changeling/mimicvoice/sting_action(var/mob/user)
|
||||
/datum/action/changeling/mimicvoice/sting_action(mob/user)
|
||||
var/datum/changeling/changeling=user.mind.changeling
|
||||
if(changeling.mimicing)
|
||||
changeling.mimicing = ""
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
var/weapon_type
|
||||
var/weapon_name_simple
|
||||
|
||||
/datum/action/changeling/weapon/try_to_sting(var/mob/user, var/mob/target)
|
||||
/datum/action/changeling/weapon/try_to_sting(mob/user, mob/target)
|
||||
if(istype(user.l_hand, weapon_type)) //Not the nicest way to do it, but eh
|
||||
qdel(user.l_hand)
|
||||
if(!silent)
|
||||
@@ -36,7 +36,7 @@
|
||||
return
|
||||
..(user, target)
|
||||
|
||||
/datum/action/changeling/weapon/sting_action(var/mob/user)
|
||||
/datum/action/changeling/weapon/sting_action(mob/user)
|
||||
if(!user.drop_item())
|
||||
to_chat(user, "The [user.get_active_hand()] is stuck to your hand, you cannot grow a [weapon_name_simple] over it!")
|
||||
return
|
||||
@@ -60,7 +60,7 @@
|
||||
var/recharge_slowdown = 0
|
||||
var/blood_on_castoff = 0
|
||||
|
||||
/datum/action/changeling/suit/try_to_sting(var/mob/user, var/mob/target)
|
||||
/datum/action/changeling/suit/try_to_sting(mob/user, mob/target)
|
||||
var/datum/changeling/changeling = user.mind.changeling
|
||||
if(!ishuman(user) || !changeling)
|
||||
return
|
||||
@@ -84,7 +84,7 @@
|
||||
return
|
||||
..(H, target)
|
||||
|
||||
/datum/action/changeling/suit/sting_action(var/mob/living/carbon/human/user)
|
||||
/datum/action/changeling/suit/sting_action(mob/living/carbon/human/user)
|
||||
if(!user.unEquip(user.wear_suit))
|
||||
to_chat(user, "\the [user.wear_suit] is stuck to your body, you cannot grow a [suit_name_simple] over it!")
|
||||
return
|
||||
@@ -358,7 +358,7 @@
|
||||
weapon_type = /obj/item/shield/changeling
|
||||
weapon_name_simple = "shield"
|
||||
|
||||
/datum/action/changeling/weapon/shield/sting_action(var/mob/user)
|
||||
/datum/action/changeling/weapon/shield/sting_action(mob/user)
|
||||
var/datum/changeling/changeling = user.mind.changeling //So we can read the absorbedcount.
|
||||
if(!changeling)
|
||||
return
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
req_stat = UNCONSCIOUS
|
||||
|
||||
//Heals the things that the other regenerative abilities don't.
|
||||
/datum/action/changeling/panacea/sting_action(var/mob/user)
|
||||
/datum/action/changeling/panacea/sting_action(mob/user)
|
||||
|
||||
to_chat(user, "<span class='notice'>We cleanse impurities from our form.</span>")
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
always_keep = 1
|
||||
|
||||
//Revive from regenerative stasis
|
||||
/datum/action/changeling/revive/sting_action(var/mob/living/carbon/user)
|
||||
/datum/action/changeling/revive/sting_action(mob/living/carbon/user)
|
||||
user.setToxLoss(0, FALSE)
|
||||
user.setOxyLoss(0, FALSE)
|
||||
user.setCloneLoss(0, FALSE)
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
req_human = 1
|
||||
|
||||
//A flashy ability, good for crowd control and sowing chaos.
|
||||
/datum/action/changeling/resonant_shriek/sting_action(var/mob/user)
|
||||
/datum/action/changeling/resonant_shriek/sting_action(mob/user)
|
||||
for(var/mob/living/M in get_mobs_in_view(4, user))
|
||||
if(iscarbon(M))
|
||||
if(ishuman(M))
|
||||
@@ -41,7 +41,7 @@
|
||||
dna_cost = 1
|
||||
|
||||
//A flashy ability, good for crowd control and sewing chaos.
|
||||
/datum/action/changeling/dissonant_shriek/sting_action(var/mob/user)
|
||||
/datum/action/changeling/dissonant_shriek/sting_action(mob/user)
|
||||
for(var/obj/machinery/light/L in range(5, usr))
|
||||
L.on = 1
|
||||
L.break_light_tube()
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
req_dna = 5
|
||||
|
||||
//Makes some spiderlings. Good for setting traps and causing general trouble.
|
||||
/datum/action/changeling/spiders/sting_action(var/mob/user)
|
||||
/datum/action/changeling/spiders/sting_action(mob/user)
|
||||
for(var/i=0, i<2, i++)
|
||||
var/obj/structure/spider/spiderling/S = new(user.loc)
|
||||
S.grow_as = /mob/living/simple_animal/hostile/poison/giant_spider/hunter
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
var/stacks = 0 //Increments every 5 seconds; damage increases over time
|
||||
var/enabled = 0 //Whether or not you are a hedgehog
|
||||
|
||||
/datum/action/changeling/strained_muscles/sting_action(var/mob/living/carbon/user)
|
||||
/datum/action/changeling/strained_muscles/sting_action(mob/living/carbon/user)
|
||||
enabled = !enabled
|
||||
if(enabled)
|
||||
to_chat(user, "<span class='notice'>Our muscles tense and strengthen.</span>")
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
dna_cost = 1
|
||||
req_human = 1 //Monkeys can't grab
|
||||
|
||||
/datum/action/changeling/swap_form/can_sting(var/mob/living/carbon/user)
|
||||
/datum/action/changeling/swap_form/can_sting(mob/living/carbon/user)
|
||||
if(!..())
|
||||
return
|
||||
var/obj/item/grab/G = user.get_active_hand()
|
||||
@@ -29,7 +29,7 @@
|
||||
return
|
||||
return 1
|
||||
|
||||
/datum/action/changeling/swap_form/sting_action(var/mob/living/carbon/user)
|
||||
/datum/action/changeling/swap_form/sting_action(mob/living/carbon/user)
|
||||
var/obj/item/grab/G = user.get_active_hand()
|
||||
var/mob/living/carbon/human/target = G.affecting
|
||||
var/datum/changeling/changeling = user.mind.changeling
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
if(mind && mind.changeling && mind.changeling.chosen_sting)
|
||||
mind.changeling.chosen_sting.unset_sting(src)
|
||||
|
||||
/datum/action/changeling/sting/can_sting(var/mob/user, var/mob/target)
|
||||
/datum/action/changeling/sting/can_sting(mob/user, mob/target)
|
||||
if(!..())
|
||||
return
|
||||
if(!user.mind.changeling.chosen_sting)
|
||||
@@ -57,7 +57,7 @@
|
||||
return
|
||||
return 1
|
||||
|
||||
/datum/action/changeling/sting/sting_feedback(var/mob/user, var/mob/target)
|
||||
/datum/action/changeling/sting/sting_feedback(mob/user, mob/target)
|
||||
if(!target)
|
||||
return
|
||||
to_chat(user, "<span class='notice'>We stealthily sting [target.name].</span>")
|
||||
@@ -91,7 +91,7 @@
|
||||
return
|
||||
..()
|
||||
|
||||
/datum/action/changeling/sting/transformation/can_sting(var/mob/user, var/mob/target)
|
||||
/datum/action/changeling/sting/transformation/can_sting(mob/user, mob/target)
|
||||
if(!..())
|
||||
return
|
||||
if(HAS_TRAIT(target, TRAIT_HUSK) || (!ishuman(target)))
|
||||
@@ -104,7 +104,7 @@
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/datum/action/changeling/sting/transformation/sting_action(var/mob/user, var/mob/target)
|
||||
/datum/action/changeling/sting/transformation/sting_action(mob/user, mob/target)
|
||||
add_attack_logs(user, target, "Transformation sting (changeling) (new identity is [selected_dna.real_name])")
|
||||
if(issmall(target))
|
||||
to_chat(user, "<span class='notice'>Our genes cry out as we sting [target.name]!</span>")
|
||||
@@ -129,11 +129,11 @@
|
||||
chemical_cost = 25
|
||||
dna_cost = 0
|
||||
|
||||
/datum/action/changeling/sting/extract_dna/can_sting(var/mob/user, var/mob/target)
|
||||
/datum/action/changeling/sting/extract_dna/can_sting(mob/user, mob/target)
|
||||
if(..())
|
||||
return user.mind.changeling.can_absorb_dna(user, target)
|
||||
|
||||
/datum/action/changeling/sting/extract_dna/sting_action(var/mob/user, var/mob/living/carbon/human/target)
|
||||
/datum/action/changeling/sting/extract_dna/sting_action(mob/user, mob/living/carbon/human/target)
|
||||
add_attack_logs(user, target, "Extraction sting (changeling)")
|
||||
if(!(user.mind.changeling.has_dna(target.dna)))
|
||||
user.mind.changeling.absorb_dna(target, user)
|
||||
@@ -149,7 +149,7 @@
|
||||
chemical_cost = 20
|
||||
dna_cost = 2
|
||||
|
||||
/datum/action/changeling/sting/mute/sting_action(var/mob/user, var/mob/living/carbon/target)
|
||||
/datum/action/changeling/sting/mute/sting_action(mob/user, mob/living/carbon/target)
|
||||
add_attack_logs(user, target, "Mute sting (changeling)")
|
||||
target.AdjustSilence(30)
|
||||
SSblackbox.record_feedback("nested tally", "changeling_powers", 1, list("[name]"))
|
||||
@@ -164,7 +164,7 @@
|
||||
chemical_cost = 25
|
||||
dna_cost = 1
|
||||
|
||||
/datum/action/changeling/sting/blind/sting_action(var/mob/living/user, var/mob/living/target)
|
||||
/datum/action/changeling/sting/blind/sting_action(mob/living/user, mob/living/target)
|
||||
add_attack_logs(user, target, "Blind sting (changeling)")
|
||||
to_chat(target, "<span class='danger'>Your eyes burn horrifically!</span>")
|
||||
target.become_nearsighted(EYE_DAMAGE)
|
||||
@@ -182,7 +182,7 @@
|
||||
chemical_cost = 10
|
||||
dna_cost = 1
|
||||
|
||||
/datum/action/changeling/sting/LSD/sting_action(var/mob/user, var/mob/living/carbon/target)
|
||||
/datum/action/changeling/sting/LSD/sting_action(mob/user, mob/living/carbon/target)
|
||||
add_attack_logs(user, target, "LSD sting (changeling)")
|
||||
spawn(rand(300,600))
|
||||
if(target)
|
||||
@@ -199,7 +199,7 @@
|
||||
chemical_cost = 15
|
||||
dna_cost = 2
|
||||
|
||||
/datum/action/changeling/sting/cryo/sting_action(var/mob/user, var/mob/target)
|
||||
/datum/action/changeling/sting/cryo/sting_action(mob/user, mob/target)
|
||||
add_attack_logs(user, target, "Cryo sting (changeling)")
|
||||
if(target.reagents)
|
||||
target.reagents.add_reagent("frostoil", 30)
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
max_genetic_damage = 3
|
||||
|
||||
//Change our DNA to that of somebody we've absorbed.
|
||||
/datum/action/changeling/transform/sting_action(var/mob/living/carbon/human/user)
|
||||
/datum/action/changeling/transform/sting_action(mob/living/carbon/human/user)
|
||||
var/datum/changeling/changeling = user.mind.changeling
|
||||
var/datum/dna/chosen_dna = changeling.select_dna("Select the target DNA: ", "Target DNA")
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
SSblackbox.record_feedback("nested tally", "changeling_powers", 1, list("[name]"))
|
||||
return 1
|
||||
|
||||
/datum/changeling/proc/select_dna(var/prompt, var/title)
|
||||
/datum/changeling/proc/select_dna(prompt, title)
|
||||
var/list/names = list()
|
||||
for(var/datum/dna/DNA in (absorbed_dna+protected_dna))
|
||||
names += "[DNA.real_name]"
|
||||
|
||||
@@ -227,7 +227,7 @@
|
||||
/datum/game_mode/proc/check_win() //universal trigger to be called at mob death, nuke explosion, etc. To be called from everywhere.
|
||||
return 0
|
||||
|
||||
/datum/game_mode/proc/get_players_for_role(var/role, override_jobbans=0)
|
||||
/datum/game_mode/proc/get_players_for_role(role, override_jobbans=0)
|
||||
var/list/players = list()
|
||||
var/list/candidates = list()
|
||||
//var/list/drafted = list()
|
||||
@@ -276,10 +276,10 @@
|
||||
// Less if there are not enough valid players in the game entirely to make recommended_enemies.
|
||||
|
||||
|
||||
/datum/game_mode/proc/latespawn(var/mob)
|
||||
/datum/game_mode/proc/latespawn(mob)
|
||||
|
||||
/*
|
||||
/datum/game_mode/proc/check_player_role_pref(var/role, var/mob/player)
|
||||
/datum/game_mode/proc/check_player_role_pref(role, mob/player)
|
||||
if(player.preferences.be_special & role)
|
||||
return 1
|
||||
return 0
|
||||
@@ -406,7 +406,7 @@
|
||||
to_chat(M, msg)
|
||||
|
||||
//Announces objectives/generic antag text.
|
||||
/proc/show_generic_antag_text(var/datum/mind/player)
|
||||
/proc/show_generic_antag_text(datum/mind/player)
|
||||
if(player.current)
|
||||
to_chat(player.current, "You are an antagonist! <font color=blue>Within the rules,</font> \
|
||||
try to act as an opposing force to the crew. Further RP and try to make sure \
|
||||
@@ -415,7 +415,7 @@
|
||||
Think through your actions and make the roleplay immersive! <b>Please remember all \
|
||||
rules aside from those without explicit exceptions apply to antagonists.</b>")
|
||||
|
||||
/proc/show_objectives(var/datum/mind/player)
|
||||
/proc/show_objectives(datum/mind/player)
|
||||
if(!player || !player.current) return
|
||||
|
||||
var/obj_count = 1
|
||||
@@ -424,7 +424,7 @@
|
||||
to_chat(player.current, "<B>Objective #[obj_count]</B>: [objective.explanation_text]")
|
||||
obj_count++
|
||||
|
||||
/proc/get_roletext(var/role)
|
||||
/proc/get_roletext(role)
|
||||
return role
|
||||
|
||||
/proc/get_nuke_code()
|
||||
|
||||
@@ -83,7 +83,7 @@ GLOBAL_LIST_EMPTY(cortical_stacks) //Stacks for 'leave nobody behind' objective.
|
||||
|
||||
return ..()
|
||||
|
||||
/datum/game_mode/proc/create_vox(var/datum/mind/newraider)
|
||||
/datum/game_mode/proc/create_vox(datum/mind/newraider)
|
||||
|
||||
var/sounds = rand(2,8)
|
||||
var/i = 0
|
||||
@@ -175,7 +175,7 @@ GLOBAL_LIST_EMPTY(cortical_stacks) //Stacks for 'leave nobody behind' objective.
|
||||
|
||||
return objs
|
||||
|
||||
/datum/game_mode/proc/greet_vox(var/datum/mind/raider)
|
||||
/datum/game_mode/proc/greet_vox(datum/mind/raider)
|
||||
to_chat(raider.current, "<span class='boldnotice'>You are a Vox Raider, fresh from the Shoal!</span>")
|
||||
to_chat(raider.current, "<span class='notice'>The Vox are a race of cunning, sharp-eyed nomadic raiders and traders endemic to the frontier and much of the unexplored galaxy. You and the crew have come to the [station_name()] for plunder, trade or both.</span>")
|
||||
to_chat(raider.current, "<span class='notice'>Vox are cowardly and will flee from larger groups, but corner one or find them en masse and they are vicious.</span>")
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
)
|
||||
|
||||
|
||||
/datum/intercept_text/proc/build(var/mode_type, datum/mind/correct_person)
|
||||
/datum/intercept_text/proc/build(mode_type, datum/mind/correct_person)
|
||||
switch(mode_type)
|
||||
if("revolution")
|
||||
src.text = ""
|
||||
|
||||
@@ -18,11 +18,11 @@ GLOBAL_LIST_INIT(meteors_ops, list(/obj/effect/meteor/goreops)) //Meaty Ops
|
||||
///////////////////////////////
|
||||
//Meteor spawning global procs
|
||||
///////////////////////////////
|
||||
/proc/spawn_meteors(var/number = 10, var/list/meteortypes)
|
||||
/proc/spawn_meteors(number = 10, list/meteortypes)
|
||||
for(var/i = 0; i < number; i++)
|
||||
spawn_meteor(meteortypes)
|
||||
|
||||
/proc/spawn_meteor(var/list/meteortypes)
|
||||
/proc/spawn_meteor(list/meteortypes)
|
||||
var/turf/pickedstart
|
||||
var/turf/pickedgoal
|
||||
var/max_i = 10//number of tries to spawn meteor.
|
||||
@@ -136,7 +136,7 @@ GLOBAL_LIST_INIT(meteors_ops, list(/obj/effect/meteor/goreops)) //Meaty Ops
|
||||
/obj/effect/meteor/CanPass(atom/movable/mover, turf/target, height=0)
|
||||
return istype(mover, /obj/effect/meteor) ? 1 : ..()
|
||||
|
||||
/obj/effect/meteor/proc/ram_turf(var/turf/T)
|
||||
/obj/effect/meteor/proc/ram_turf(turf/T)
|
||||
//first bust whatever is in the turf
|
||||
for(var/atom/A in T)
|
||||
if(A != src)
|
||||
@@ -170,7 +170,7 @@ GLOBAL_LIST_INIT(meteors_ops, list(/obj/effect/meteor/goreops)) //Meaty Ops
|
||||
var/obj/item/O = new meteordrop(get_turf(src))
|
||||
O.throw_at(dest, 5, 10)
|
||||
|
||||
/obj/effect/meteor/proc/meteor_effect(var/sound=1)
|
||||
/obj/effect/meteor/proc/meteor_effect(sound=1)
|
||||
if(sound)
|
||||
var/sound/meteor_sound = sound(meteorsound)
|
||||
var/random_frequency = get_rand_frequency()
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
active_mind_control = FALSE
|
||||
update_gland_hud()
|
||||
|
||||
/obj/item/organ/internal/heart/gland/remove(var/mob/living/carbon/M, special = 0)
|
||||
/obj/item/organ/internal/heart/gland/remove(mob/living/carbon/M, special = 0)
|
||||
active = 0
|
||||
if(initial(uses) == 1)
|
||||
uses = initial(uses)
|
||||
@@ -77,7 +77,7 @@
|
||||
clear_mind_control()
|
||||
. = ..()
|
||||
|
||||
/obj/item/organ/internal/heart/gland/insert(var/mob/living/carbon/M, special = 0)
|
||||
/obj/item/organ/internal/heart/gland/insert(mob/living/carbon/M, special = 0)
|
||||
..()
|
||||
if(special != 2 && uses) // Special 2 means abductor surgery
|
||||
Start()
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
if(M.mind && isobserver(M))
|
||||
to_chat(M, "<i>Thought-speech, <b>[src]</b> -> <b>[B.truename]:</b> [message]</i>")
|
||||
|
||||
/mob/living/captive_brain/say_understands(var/mob/other, var/datum/language/speaking = null)
|
||||
/mob/living/captive_brain/say_understands(mob/other, datum/language/speaking = null)
|
||||
var/mob/living/simple_animal/borer/B = loc
|
||||
if(!istype(B))
|
||||
log_runtime(EXCEPTION("Trapped mind found without a borer!"), src)
|
||||
@@ -114,7 +114,7 @@
|
||||
var/datum/action/innate/borer/freeze_victim/freeze_victim_action = new
|
||||
var/datum/action/innate/borer/torment/torment_action = new
|
||||
|
||||
/mob/living/simple_animal/borer/New(atom/newloc, var/gen=1)
|
||||
/mob/living/simple_animal/borer/New(atom/newloc, gen=1)
|
||||
..(newloc)
|
||||
remove_from_all_data_huds()
|
||||
generation = gen
|
||||
@@ -151,7 +151,7 @@
|
||||
if(client.statpanel == "Status")
|
||||
stat("Chemicals", chemicals)
|
||||
|
||||
/mob/living/simple_animal/borer/say(var/message)
|
||||
/mob/living/simple_animal/borer/say(message)
|
||||
var/list/message_pieces = parse_languages(message)
|
||||
for(var/datum/multilingual_say_piece/S in message_pieces)
|
||||
if(!istype(S.speaking, /datum/language/corticalborer) && loc == host && !talk_inside_host)
|
||||
@@ -823,7 +823,7 @@
|
||||
/mob/living/simple_animal/borer/can_use_vents()
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/borer/proc/transfer_personality(var/client/candidate)
|
||||
/mob/living/simple_animal/borer/proc/transfer_personality(client/candidate)
|
||||
|
||||
if(!candidate || !candidate.mob)
|
||||
return
|
||||
|
||||
@@ -489,7 +489,7 @@
|
||||
changeNext_move(CLICK_CD_MELEE)
|
||||
target.ex_act(EXPLODE_LIGHT)
|
||||
|
||||
/mob/living/simple_animal/hostile/swarmer/proc/DisperseTarget(var/mob/living/target)
|
||||
/mob/living/simple_animal/hostile/swarmer/proc/DisperseTarget(mob/living/target)
|
||||
if(target == src)
|
||||
return
|
||||
|
||||
@@ -605,7 +605,7 @@
|
||||
max_integrity = 10
|
||||
density = FALSE
|
||||
|
||||
/obj/structure/swarmer/trap/Crossed(var/atom/movable/AM, oldloc)
|
||||
/obj/structure/swarmer/trap/Crossed(atom/movable/AM, oldloc)
|
||||
if(isliving(AM))
|
||||
var/mob/living/L = AM
|
||||
if(!istype(L, /mob/living/simple_animal/hostile/swarmer))
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
var/mob/living/spawner
|
||||
|
||||
|
||||
/obj/item/guardian_bomb/proc/disguise(var/obj/A)
|
||||
/obj/item/guardian_bomb/proc/disguise(obj/A)
|
||||
A.forceMove(src)
|
||||
stored_obj = A
|
||||
opacity = A.opacity
|
||||
@@ -60,7 +60,7 @@
|
||||
to_chat(spawner, "<span class='danger'>Failure! Your trap on [stored_obj] didn't catch anyone this time.</span>")
|
||||
qdel(src)
|
||||
|
||||
/obj/item/guardian_bomb/proc/detonate(var/mob/living/user)
|
||||
/obj/item/guardian_bomb/proc/detonate(mob/living/user)
|
||||
if(!istype(user))
|
||||
return
|
||||
to_chat(user, "<span class='danger'>The [src] was boobytrapped!</span>")
|
||||
|
||||
@@ -152,7 +152,7 @@
|
||||
/mob/living/simple_animal/hostile/morph/LoseAggro()
|
||||
vision_range = initial(vision_range)
|
||||
|
||||
/mob/living/simple_animal/hostile/morph/AIShouldSleep(var/list/possible_targets)
|
||||
/mob/living/simple_animal/hostile/morph/AIShouldSleep(list/possible_targets)
|
||||
. = ..()
|
||||
if(.)
|
||||
var/list/things = list()
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
///Harvest
|
||||
/mob/living/simple_animal/revenant/ClickOn(var/atom/A, var/params) //Copypaste from ghost code - revenants can't interact with the world directly.
|
||||
/mob/living/simple_animal/revenant/ClickOn(atom/A, params) //Copypaste from ghost code - revenants can't interact with the world directly.
|
||||
|
||||
if(client.click_intercept)
|
||||
client.click_intercept.InterceptClickOn(src, params, A)
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
var/key_of_revenant
|
||||
|
||||
|
||||
/datum/event/revenant/proc/get_revenant(var/end_if_fail = 0)
|
||||
/datum/event/revenant/proc/get_revenant(end_if_fail = 0)
|
||||
var/deadMobs = 0
|
||||
for(var/mob/M in GLOB.dead_mob_list)
|
||||
deadMobs++
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
#define BLOODCRAWL 1
|
||||
#define BLOODCRAWL_EAT 2
|
||||
|
||||
/mob/living/proc/phaseout(var/obj/effect/decal/cleanable/B)
|
||||
/mob/living/proc/phaseout(obj/effect/decal/cleanable/B)
|
||||
|
||||
if(iscarbon(src))
|
||||
var/mob/living/carbon/C = src
|
||||
@@ -105,7 +105,7 @@
|
||||
icon = 'icons/effects/blood.dmi'
|
||||
flags = NODROP|ABSTRACT
|
||||
|
||||
/mob/living/proc/phasein(var/obj/effect/decal/cleanable/B)
|
||||
/mob/living/proc/phasein(obj/effect/decal/cleanable/B)
|
||||
|
||||
if(notransform)
|
||||
to_chat(src, "<span class='warning'>Finish eating first!</span>")
|
||||
|
||||
@@ -186,7 +186,7 @@
|
||||
M.regenerate_icons()
|
||||
M.update_body()
|
||||
|
||||
/datum/game_mode/proc/prepare_syndicate_leader(var/datum/mind/synd_mind, var/nuke_code)
|
||||
/datum/game_mode/proc/prepare_syndicate_leader(datum/mind/synd_mind, nuke_code)
|
||||
var/leader_title = pick("Czar", "Boss", "Commander", "Chief", "Kingpin", "Director", "Overlord")
|
||||
synd_mind.current.real_name = "[syndicate_name()] Team [leader_title]"
|
||||
to_chat(synd_mind.current, "<B>You are the Syndicate leader for this mission. You are responsible for the distribution of telecrystals and your ID is the only one who can open the launch bay doors.</B>")
|
||||
@@ -219,7 +219,7 @@
|
||||
else
|
||||
nuke_code = "code will be provided later"
|
||||
|
||||
/datum/game_mode/proc/update_syndicate_id(var/datum/mind/synd_mind, is_leader = FALSE)
|
||||
/datum/game_mode/proc/update_syndicate_id(datum/mind/synd_mind, is_leader = FALSE)
|
||||
var/list/found_ids = synd_mind.current.search_contents_for(/obj/item/card/id)
|
||||
|
||||
if(LAZYLEN(found_ids))
|
||||
@@ -231,13 +231,13 @@
|
||||
else
|
||||
message_admins("Warning: Operative [key_name_admin(synd_mind.current)] spawned without an ID card!")
|
||||
|
||||
/datum/game_mode/proc/forge_syndicate_objectives(var/datum/mind/syndicate)
|
||||
/datum/game_mode/proc/forge_syndicate_objectives(datum/mind/syndicate)
|
||||
var/datum/objective/nuclear/syndobj = new
|
||||
syndobj.owner = syndicate
|
||||
syndicate.objectives += syndobj
|
||||
|
||||
|
||||
/datum/game_mode/proc/greet_syndicate(var/datum/mind/syndicate, var/you_are=1)
|
||||
/datum/game_mode/proc/greet_syndicate(datum/mind/syndicate, you_are=1)
|
||||
SEND_SOUND(syndicate.current, sound('sound/ambience/antag/ops.ogg'))
|
||||
if(you_are)
|
||||
to_chat(syndicate.current, "<span class='notice'>You are a [syndicate_name()] agent!</span>")
|
||||
@@ -418,7 +418,7 @@
|
||||
to_chat(world, text)
|
||||
return 1
|
||||
|
||||
/proc/nukelastname(var/mob/M as mob) //--All praise goes to NEO|Phyte, all blame goes to DH, and it was Cindi-Kate's idea. Also praise Urist for copypasta ho.
|
||||
/proc/nukelastname(mob/M as mob) //--All praise goes to NEO|Phyte, all blame goes to DH, and it was Cindi-Kate's idea. Also praise Urist for copypasta ho.
|
||||
var/randomname = pick(GLOB.last_names)
|
||||
var/newname = sanitize(copytext(input(M,"You are the nuke operative [pick("Czar", "Boss", "Commander", "Chief", "Kingpin", "Director", "Overlord")]. Please choose a last name for your family.", "Name change",randomname),1,MAX_NAME_LEN))
|
||||
|
||||
|
||||
@@ -210,7 +210,7 @@ GLOBAL_VAR(bomb_set)
|
||||
data["codemsg"] = "-----"
|
||||
return data
|
||||
|
||||
/obj/machinery/nuclearbomb/proc/is_auth(var/mob/user)
|
||||
/obj/machinery/nuclearbomb/proc/is_auth(mob/user)
|
||||
if(auth)
|
||||
return TRUE
|
||||
else if(user.can_admin_interact())
|
||||
|
||||
@@ -431,7 +431,7 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective)
|
||||
/datum/objective/steal/exchange
|
||||
martyr_compatible = 0
|
||||
|
||||
/datum/objective/steal/exchange/proc/set_faction(var/faction,var/otheragent)
|
||||
/datum/objective/steal/exchange/proc/set_faction(faction, otheragent)
|
||||
target = otheragent
|
||||
var/datum/theft_objective/unique/targetinfo
|
||||
if(faction == "red")
|
||||
@@ -442,7 +442,7 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective)
|
||||
steal_target = targetinfo
|
||||
|
||||
/datum/objective/steal/exchange/backstab
|
||||
/datum/objective/steal/exchange/backstab/set_faction(var/faction)
|
||||
/datum/objective/steal/exchange/backstab/set_faction(faction)
|
||||
var/datum/theft_objective/unique/targetinfo
|
||||
if(faction == "red")
|
||||
targetinfo = new /datum/theft_objective/unique/docs_red
|
||||
@@ -477,7 +477,7 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective)
|
||||
|
||||
|
||||
/datum/objective/absorb
|
||||
/datum/objective/absorb/proc/gen_amount_goal(var/lowbound = 4, var/highbound = 6)
|
||||
/datum/objective/absorb/proc/gen_amount_goal(lowbound = 4, highbound = 6)
|
||||
target_amount = rand (lowbound,highbound)
|
||||
if(SSticker)
|
||||
var/n_p = 1 //autowin
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/proc/getAssignedBlock(var/name,var/list/blocksLeft, var/activity_bounds=DNA_DEFAULT_BOUNDS, var/good=0)
|
||||
/proc/getAssignedBlock(name, list/blocksLeft, activity_bounds=DNA_DEFAULT_BOUNDS, good=0)
|
||||
if(blocksLeft.len==0)
|
||||
warning("[name]: No more blocks left to assign!")
|
||||
return 0
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
icon_state = "NurnKal"
|
||||
icon_living = "NurnKal"
|
||||
|
||||
/mob/living/simple_animal/ascendant_shadowling/Process_Spacemove(var/movement_dir = 0)
|
||||
/mob/living/simple_animal/ascendant_shadowling/Process_Spacemove(movement_dir = 0)
|
||||
return 1 //copypasta from carp code
|
||||
|
||||
/mob/living/simple_animal/ascendant_shadowling/ex_act(severity)
|
||||
@@ -47,7 +47,7 @@
|
||||
/mob/living/simple_animal/ascendant_shadowling/singularity_act()
|
||||
return 0 //Well hi, fellow god! How are you today?
|
||||
|
||||
/mob/living/simple_animal/ascendant_shadowling/proc/announce(var/text, var/size = 4, var/new_sound = null)
|
||||
/mob/living/simple_animal/ascendant_shadowling/proc/announce(text, size = 4, new_sound = null)
|
||||
var/message = "<font size=[size]><span class='shadowling'><b>\"[text]\"</font></span>"
|
||||
for(var/mob/M in GLOB.player_list)
|
||||
if(!isnewplayer(M) && M.client)
|
||||
|
||||
@@ -55,15 +55,15 @@ Made by Xhuis
|
||||
var/victory_warning_announced = FALSE
|
||||
var/thrall_ratio = 1
|
||||
|
||||
/proc/is_thrall(var/mob/living/M)
|
||||
/proc/is_thrall(mob/living/M)
|
||||
return istype(M) && M.mind && SSticker && SSticker.mode && (M.mind in SSticker.mode.shadowling_thralls)
|
||||
|
||||
|
||||
/proc/is_shadow_or_thrall(var/mob/living/M)
|
||||
/proc/is_shadow_or_thrall(mob/living/M)
|
||||
return istype(M) && M.mind && SSticker && SSticker.mode && ((M.mind in SSticker.mode.shadowling_thralls) || (M.mind in SSticker.mode.shadows))
|
||||
|
||||
|
||||
/proc/is_shadow(var/mob/living/M)
|
||||
/proc/is_shadow(mob/living/M)
|
||||
return istype(M) && M.mind && SSticker && SSticker.mode && (M.mind in SSticker.mode.shadows)
|
||||
|
||||
|
||||
@@ -122,7 +122,7 @@ Made by Xhuis
|
||||
//give_shadowling_abilities(shadow)
|
||||
..()
|
||||
|
||||
/datum/game_mode/proc/greet_shadow(var/datum/mind/shadow)
|
||||
/datum/game_mode/proc/greet_shadow(datum/mind/shadow)
|
||||
to_chat(shadow.current, "<b>Currently, you are disguised as an employee aboard [world.name].</b>")
|
||||
to_chat(shadow.current, "<b>In your limited state, you have two abilities: Hatch and Shadowling Hivemind (:8).</b>")
|
||||
to_chat(shadow.current, "<b>Any other shadowlings are your allies. You must assist them as they shall assist you.</b>")
|
||||
@@ -130,7 +130,7 @@ Made by Xhuis
|
||||
|
||||
|
||||
|
||||
/datum/game_mode/proc/process_shadow_objectives(var/datum/mind/shadow_mind)
|
||||
/datum/game_mode/proc/process_shadow_objectives(datum/mind/shadow_mind)
|
||||
var/objective = "enthrall" //may be devour later, but for now it seems murderbone-y
|
||||
|
||||
if(objective == "enthrall")
|
||||
@@ -140,7 +140,7 @@ Made by Xhuis
|
||||
to_chat(shadow_mind.current, "<b>Objective #1</b>: [objective_explanation]<br>")
|
||||
|
||||
|
||||
/datum/game_mode/proc/finalize_shadowling(var/datum/mind/shadow_mind)
|
||||
/datum/game_mode/proc/finalize_shadowling(datum/mind/shadow_mind)
|
||||
var/mob/living/carbon/human/S = shadow_mind.current
|
||||
shadow_mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/shadowling_hatch(null))
|
||||
spawn(0)
|
||||
@@ -176,7 +176,7 @@ Made by Xhuis
|
||||
GLOB.command_announcement.Announce("Large concentration of psychic bluespace energy detected by long-ranged scanners. Shadowling ascension event imminent. Prevent it at all costs!", "Central Command Higher Dimensional Affairs", 'sound/AI/spanomalies.ogg')
|
||||
return 1
|
||||
|
||||
/datum/game_mode/proc/remove_thrall(datum/mind/thrall_mind, var/kill = 0)
|
||||
/datum/game_mode/proc/remove_thrall(datum/mind/thrall_mind, kill = 0)
|
||||
if(!istype(thrall_mind) || !(thrall_mind in shadowling_thralls) || !isliving(thrall_mind.current))
|
||||
return 0 //If there is no mind, the mind isn't a thrall, or the mind's mob isn't alive, return
|
||||
shadowling_thralls.Remove(thrall_mind)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#define EMPOWERED_THRALL_LIMIT 5
|
||||
|
||||
/obj/effect/proc_holder/spell/proc/shadowling_check(var/mob/living/carbon/human/H)
|
||||
/obj/effect/proc_holder/spell/proc/shadowling_check(mob/living/carbon/human/H)
|
||||
if(!H || !istype(H))
|
||||
return
|
||||
if(H.incorporeal_move == 1)
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
var/flags = 0
|
||||
var/location_override
|
||||
|
||||
/datum/theft_objective/proc/check_completion(var/datum/mind/owner)
|
||||
/datum/theft_objective/proc/check_completion(datum/mind/owner)
|
||||
if(!owner.current)
|
||||
return 0
|
||||
if(!isliving(owner.current))
|
||||
@@ -62,7 +62,7 @@
|
||||
typepath = /obj/item/aicard
|
||||
location_override = "AI Satellite. An intellicard for transportation can be found in Tech Storage, Science Department or manufactured"
|
||||
|
||||
/datum/theft_objective/ai/check_special_completion(var/obj/item/aicard/C)
|
||||
/datum/theft_objective/ai/check_special_completion(obj/item/aicard/C)
|
||||
if(..())
|
||||
for(var/mob/living/silicon/ai/A in C)
|
||||
if(istype(A, /mob/living/silicon/ai) && A.stat != 2) //See if any AI's are alive inside that card.
|
||||
@@ -154,7 +154,7 @@
|
||||
required_amount=rand(lower,upper)*step
|
||||
name = "[required_amount] [name]"
|
||||
|
||||
/datum/theft_objective/number/check_completion(var/datum/mind/owner)
|
||||
/datum/theft_objective/number/check_completion(datum/mind/owner)
|
||||
if(!owner.current)
|
||||
return 0
|
||||
if(!isliving(owner.current))
|
||||
@@ -166,7 +166,7 @@
|
||||
found_amount += getAmountStolen(I)
|
||||
return found_amount >= required_amount
|
||||
|
||||
/datum/theft_objective/number/proc/getAmountStolen(var/obj/item/I)
|
||||
/datum/theft_objective/number/proc/getAmountStolen(obj/item/I)
|
||||
return I:amount
|
||||
|
||||
/datum/theft_objective/unique
|
||||
|
||||
@@ -135,7 +135,7 @@
|
||||
to_chat(world, text)
|
||||
return 1
|
||||
|
||||
/datum/game_mode/proc/forge_vampire_objectives(var/datum/mind/vampire)
|
||||
/datum/game_mode/proc/forge_vampire_objectives(datum/mind/vampire)
|
||||
//Objectives are traitor objectives plus blood objectives
|
||||
|
||||
var/datum/objective/blood/blood_objective = new
|
||||
@@ -172,7 +172,7 @@
|
||||
return
|
||||
vampire_mob.make_vampire()
|
||||
|
||||
/datum/game_mode/proc/greet_vampire(var/datum/mind/vampire, var/you_are=1)
|
||||
/datum/game_mode/proc/greet_vampire(datum/mind/vampire, you_are=1)
|
||||
var/dat
|
||||
if(you_are)
|
||||
SEND_SOUND(vampire.current, sound('sound/ambience/antag/vampalert.ogg'))
|
||||
@@ -248,7 +248,7 @@ You are weak to holy things and starlight. Don't go into space and avoid the Cha
|
||||
qdel(ability)
|
||||
owner.update_sight() // Life updates conditionally, so we need to update sight here in case the vamp loses his vision based powers. Maybe one day refactor to be more OOP and on the vampire's ability datum.
|
||||
|
||||
/datum/vampire/proc/update_owner(var/mob/living/carbon/human/current) //Called when a vampire gets cloned. This updates vampire.owner to the new body.
|
||||
/datum/vampire/proc/update_owner(mob/living/carbon/human/current) //Called when a vampire gets cloned. This updates vampire.owner to the new body.
|
||||
if(current.mind && current.mind.vampire && current.mind.vampire.owner && (current.mind.vampire.owner != current))
|
||||
current.mind.vampire.owner = current
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user