Changed all relative paths to absolute (#31078)

This commit is contained in:
DamianX
2021-10-18 23:28:55 +02:00
committed by GitHub
parent 3102fe388a
commit a4438724c9
185 changed files with 1542 additions and 2394 deletions

View File

@@ -1,5 +1,9 @@
[langserver]
dreamchecker = true
[code_standards]
disallow_relative_proc_definitions = true
disallow_relative_type_definitions = true
[debugger]
engine = "auxtools"

View File

@@ -336,7 +336,7 @@
//This one returns the "space" area
//#define get_space_area (get_area(locate(1,1,2))) //xd
proc/get_space_area()
/proc/get_space_area()
//global.space_area is defined in code/game/areas/areas.dm, and set when the space area is created
if(!global.space_area)
var/area/new_space_area = new /area

View File

@@ -1775,7 +1775,7 @@ One; Your account number and PIN are required.
Two; Your ID card, account number and PIN are required.
You can change this mid-game at an ATM."}
proc/bank_security_num2text(var/num)
/proc/bank_security_num2text(var/num)
switch(num)
if(0)
return "Zero"

View File

@@ -1,4 +1,4 @@
obj/machinery/atmospherics/trinary/filter
/obj/machinery/atmospherics/trinary/filter
icon = 'icons/obj/atmospherics/filter.dmi'
icon_state = "hintact_off"
name = "Gas filter"

View File

@@ -1,4 +1,4 @@
obj/machinery/atmospherics/trinary/mixer
/obj/machinery/atmospherics/trinary/mixer
icon = 'icons/obj/atmospherics/mixer.dmi'
icon_state = "intact_off"
@@ -16,7 +16,7 @@ obj/machinery/atmospherics/trinary/mixer
ex_node_offset = 5
obj/machinery/atmospherics/trinary/mixer/update_icon()
/obj/machinery/atmospherics/trinary/mixer/update_icon()
if(stat & NOPOWER)
icon_state = "intact_off"
else if(node2 && node3 && node1)
@@ -26,26 +26,26 @@ obj/machinery/atmospherics/trinary/mixer/update_icon()
on = 0
..()
obj/machinery/atmospherics/trinary/mixer/power_change()
/obj/machinery/atmospherics/trinary/mixer/power_change()
var/old_stat = stat
..()
if(old_stat != stat)
on = !on
update_icon()
obj/machinery/atmospherics/trinary/mixer/New()
/obj/machinery/atmospherics/trinary/mixer/New()
..()
air3.volume = 300
obj/machinery/atmospherics/trinary/mixer/process()
/obj/machinery/atmospherics/trinary/mixer/process()
. = ..()
if(!on)
return
var/output_starting_pressure = air3.return_pressure()
var/pressure_delta = target_pressure - output_starting_pressure
if(pressure_delta > 0.01 && ((air1.temperature > 0 && air2.temperature > 0) || air3.temperature > 0))
var/output_volume = air3.volume + (network3 ? network3.volume : 0)
//get gas from input #1
@@ -64,13 +64,13 @@ obj/machinery/atmospherics/trinary/mixer/process()
var/ratio = min(air1_moles/transfer_moles1, air2_moles/transfer_moles2)
transfer_moles1 *= ratio
transfer_moles2 *= ratio
//actually transfer the gas
var/datum/gas_mixture/removed1 = air1.remove(transfer_moles1)
var/datum/gas_mixture/removed2 = air2.remove(transfer_moles2)
air3.merge(removed1)
air3.merge(removed2)
if(network1)
network1.update = 1
if(network2)
@@ -80,7 +80,7 @@ obj/machinery/atmospherics/trinary/mixer/process()
return 1
obj/machinery/atmospherics/trinary/mixer/attack_hand(user as mob)
/obj/machinery/atmospherics/trinary/mixer/attack_hand(user as mob)
if(..())
return
src.add_fingerprint(usr)
@@ -111,7 +111,7 @@ obj/machinery/atmospherics/trinary/mixer/attack_hand(user as mob)
onclose(user, "atmo_mixer")
return
obj/machinery/atmospherics/trinary/mixer/Topic(href,href_list)
/obj/machinery/atmospherics/trinary/mixer/Topic(href,href_list)
if(..())
return
if(href_list["power"])

View File

@@ -1,4 +1,4 @@
obj/machinery/atmospherics/trinary
/obj/machinery/atmospherics/trinary
dir = SOUTH
initialize_directions = SOUTH|NORTH|WEST
use_power = 1
@@ -30,7 +30,7 @@ obj/machinery/atmospherics/trinary
var/node_list = list(node1,node2,node3)
..(adjacent_procd,node_list)
obj/machinery/atmospherics/trinary/New()
/obj/machinery/atmospherics/trinary/New()
..()
initialize_directions()
air1 = new
@@ -51,7 +51,7 @@ obj/machinery/atmospherics/trinary/New()
if(WEST)
initialize_directions = EAST|WEST|NORTH
obj/machinery/atmospherics/trinary/buildFrom(var/mob/usr,var/obj/item/pipe/pipe)
/obj/machinery/atmospherics/trinary/buildFrom(var/mob/usr,var/obj/item/pipe/pipe)
if(!(pipe.dir in list(NORTH, SOUTH, EAST, WEST)) && src.mirror) //because the dir isn't in the right set, we want to make the mirror kind
var/obj/machinery/atmospherics/trinary/mirrored_pipe = new mirror(src.loc)
pipe.dir = turn(pipe.dir, -45)
@@ -103,7 +103,7 @@ obj/machinery/atmospherics/trinary/buildFrom(var/mob/usr,var/obj/item/pipe/pipe)
// Housekeeping and pipe network stuff below
obj/machinery/atmospherics/trinary/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference)
/obj/machinery/atmospherics/trinary/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference)
if(reference == node1)
network1 = new_network
@@ -120,7 +120,7 @@ obj/machinery/atmospherics/trinary/network_expand(datum/pipe_network/new_network
return null
obj/machinery/atmospherics/trinary/Destroy()
/obj/machinery/atmospherics/trinary/Destroy()
if(node1)
node1.disconnect(src)
if(network1)
@@ -140,7 +140,7 @@ obj/machinery/atmospherics/trinary/Destroy()
..()
obj/machinery/atmospherics/trinary/initialize()
/obj/machinery/atmospherics/trinary/initialize()
if(node1 && node2 && node3)
return
@@ -162,7 +162,7 @@ obj/machinery/atmospherics/trinary/initialize()
update_icon()
add_self_to_holomap()
obj/machinery/atmospherics/trinary/build_network()
/obj/machinery/atmospherics/trinary/build_network()
if(!network1 && node1)
network1 = new /datum/pipe_network
network1.normal_members += src
@@ -179,7 +179,7 @@ obj/machinery/atmospherics/trinary/build_network()
network3.build_network(node3, src)
obj/machinery/atmospherics/trinary/return_network(obj/machinery/atmospherics/reference)
/obj/machinery/atmospherics/trinary/return_network(obj/machinery/atmospherics/reference)
build_network()
if(reference==node1)
@@ -193,7 +193,7 @@ obj/machinery/atmospherics/trinary/return_network(obj/machinery/atmospherics/ref
return null
obj/machinery/atmospherics/trinary/reassign_network(datum/pipe_network/old_network, datum/pipe_network/new_network)
/obj/machinery/atmospherics/trinary/reassign_network(datum/pipe_network/old_network, datum/pipe_network/new_network)
if(network1 == old_network)
network1 = new_network
if(network2 == old_network)
@@ -203,7 +203,7 @@ obj/machinery/atmospherics/trinary/reassign_network(datum/pipe_network/old_netwo
return 1
obj/machinery/atmospherics/trinary/return_network_air(datum/pipe_network/reference)
/obj/machinery/atmospherics/trinary/return_network_air(datum/pipe_network/reference)
var/list/results = list()
if(network1 == reference)
@@ -215,7 +215,7 @@ obj/machinery/atmospherics/trinary/return_network_air(datum/pipe_network/referen
return results
obj/machinery/atmospherics/trinary/disconnect(obj/machinery/atmospherics/reference)
/obj/machinery/atmospherics/trinary/disconnect(obj/machinery/atmospherics/reference)
if(reference==node1)
if(network1)
qdel(network1)

View File

@@ -1,4 +1,4 @@
obj/machinery/atmospherics/unary/oxygen_generator
/obj/machinery/atmospherics/unary/oxygen_generator
icon = 'icons/obj/atmospherics/oxygen_generator.dmi'
icon_state = "intact_off"
density = 1
@@ -13,7 +13,7 @@ obj/machinery/atmospherics/unary/oxygen_generator
var/oxygen_content = 10
obj/machinery/atmospherics/unary/oxygen_generator/update_icon()
/obj/machinery/atmospherics/unary/oxygen_generator/update_icon()
if(node1)
icon_state = "intact_[on?("on"):("off")]"
else
@@ -23,12 +23,12 @@ obj/machinery/atmospherics/unary/oxygen_generator/update_icon()
return
obj/machinery/atmospherics/unary/oxygen_generator/New()
/obj/machinery/atmospherics/unary/oxygen_generator/New()
..()
air_contents.volume = 50
obj/machinery/atmospherics/unary/oxygen_generator/process()
/obj/machinery/atmospherics/unary/oxygen_generator/process()
. = ..()
if(!on)
return

View File

@@ -204,7 +204,7 @@ Class Procs:
if(!A.air.compare(air))
SSair.mark_edge_active(src)
proc/ShareHeat(datum/gas_mixture/A, datum/gas_mixture/B, connecting_tiles)
/proc/ShareHeat(datum/gas_mixture/A, datum/gas_mixture/B, connecting_tiles)
//This implements a simplistic version of the Stefan-Boltzmann law.
var/energy_delta = ((A.temperature - B.temperature) ** 4) * STEFAN_BOLTZMANN_CONSTANT * connecting_tiles * 2.5
var/maximum_energy_delta = max(0, min(A.temperature * A.heat_capacity(), B.temperature * B.heat_capacity()))

View File

@@ -16,7 +16,3 @@ var/image/mark = image('icons/Testing/Zone.dmi', icon_state = "mark")
overlays -= dbg_img
overlays += img
dbg_img = img
proc/soft_assert(thing,fail)
if(!thing)
message_admins(fail)

View File

@@ -1,4 +1,4 @@
client/proc/Zone_Info(turf/T as null|turf)
/client/proc/Zone_Info(turf/T as null|turf)
set category = "Debug"
if(T)
if(istype(T,/turf/simulated) && T:zone)
@@ -14,9 +14,9 @@ client/proc/Zone_Info(turf/T as null|turf)
images -= zone_debug_images[zone]
zone_debug_images = null
client/var/list/zone_debug_images
/client/var/list/zone_debug_images
client/proc/Test_ZAS_Connection(var/turf/simulated/T as turf)
/client/proc/Test_ZAS_Connection(var/turf/simulated/T as turf)
set category = "Debug"
if(!istype(T))

View File

@@ -276,13 +276,13 @@ Attach to transfer valve and open. BOOM.
set_light(0)
..()
turf/simulated/var/fire_protection = 0 //Protects newly extinguished tiles from being overrun again.
turf/proc/apply_fire_protection()
turf/simulated/apply_fire_protection()
/turf/simulated/var/fire_protection = 0 //Protects newly extinguished tiles from being overrun again.
/turf/proc/apply_fire_protection()
/turf/simulated/apply_fire_protection()
fire_protection = world.time
datum/gas_mixture/proc/zburn(var/turf/T, force_burn)
/datum/gas_mixture/proc/zburn(var/turf/T, force_burn)
// NOTE: zburn is also called from canisters and in tanks/pipes (via react()). Do NOT assume T is always a turf.
// In the aforementioned cases, it's null. - N3X.
var/value = 0
@@ -380,7 +380,7 @@ datum/gas_mixture/proc/zburn(var/turf/T, force_burn)
return still_burning
datum/gas_mixture/proc/check_combustability(var/turf/T, var/objects)
/datum/gas_mixture/proc/check_combustability(var/turf/T, var/objects)
//this check comes up very often and is thus centralized here to ease adding stuff
// zburn is used in tank fires, as well. This check, among others, broke tankbombs. - N3X
/*
@@ -404,7 +404,7 @@ datum/gas_mixture/proc/check_combustability(var/turf/T, var/objects)
return 0
datum/gas_mixture/proc/calculate_firelevel(var/turf/T)
/datum/gas_mixture/proc/calculate_firelevel(var/turf/T)
//Calculates the firelevel based on one equation instead of having to do this multiple times in different areas.
var/total_fuel = 0

View File

@@ -34,7 +34,7 @@
return angle
proc/get_cardinal_dir(atom/A, atom/B)
/proc/get_cardinal_dir(atom/A, atom/B)
var/dx = abs(B.x - A.x)
var/dy = abs(B.y - A.y)
return get_dir(A, B) & (rand() * (dx+dy) < dy ? 3 : 12)

View File

@@ -163,50 +163,6 @@
#define SIGN(X) ((X<0)?-1:1)
proc/inLineOfSight(X1,Y1,X2,Y2,Z=1,PX1=16.5,PY1=16.5,PX2=16.5,PY2=16.5)
var/turf/T
if(X1==X2)
if(Y1==Y2)
return 1 //Light cannot be blocked on same tile
else
var/s = SIGN(Y2-Y1)
Y1+=s
while(Y1!=Y2)
T=locate(X1,Y1,Z)
if(T.opacity)
return 0
Y1+=s
else
var/m=(32*(Y2-Y1)+(PY2-PY1))/(32*(X2-X1)+(PX2-PX1))
var/b=(Y1+PY1/32-0.015625)-m*(X1+PX1/32-0.015625) //In tiles
var/signX = SIGN(X2-X1)
var/signY = SIGN(Y2-Y1)
if(X1<X2)
b+=m
while(X1!=X2 || Y1!=Y2)
if(round(m*X1+b-Y1))
Y1+=signY //Line exits tile vertically
else
X1+=signX //Line exits tile horizontally
T=locate(X1,Y1,Z)
if(T.opacity)
return 0
return 1
#undef SIGN
proc/isInSight(var/atom/A, var/atom/B)
var/turf/Aturf = get_turf(A)
var/turf/Bturf = get_turf(B)
if(!Aturf || !Bturf)
return 0
if(inLineOfSight(Aturf.x,Aturf.y, Bturf.x,Bturf.y,Aturf.z))
return 1
else
return 0
/proc/get_cardinal_step_away(atom/start, atom/finish) //returns the position of a step from start away from finish, in one of the cardinal directions
//returns only NORTH, SOUTH, EAST, or WEST
var/dx = finish.x - start.x

View File

@@ -83,7 +83,7 @@
composite.Blend(C, ICON_OVERLAY)
return composite
proc/adjust_brightness(var/color, var/value)
/proc/adjust_brightness(var/color, var/value)
if (!color)
return "#FFFFFF"
if (!value)
@@ -95,7 +95,7 @@ proc/adjust_brightness(var/color, var/value)
RGB[3] = clamp(RGB[3]+value,0,255)
return rgb(RGB[1],RGB[2],RGB[3])
proc/adjust_RGB(var/color, var/red, var/green, var/blue)
/proc/adjust_RGB(var/color, var/red, var/green, var/blue)
if (!color)
return "#FFFFFF"
if (!red && !green && !blue)

View File

@@ -38,7 +38,7 @@
return f_style
proc/random_name(gender, speciesName = "Human")
/proc/random_name(gender, speciesName = "Human")
var/datum/species/S = all_species[speciesName]
if(S)
return S.makeName(gender)
@@ -48,7 +48,7 @@ proc/random_name(gender, speciesName = "Human")
proc/random_skin_tone(species = "Human")
/proc/random_skin_tone(species = "Human")
if(species == "Human")
switch(pick(60;"caucasian", 15;"afroamerican", 10;"african", 10;"latino", 5;"albino"))
if("caucasian")
@@ -75,7 +75,7 @@ proc/random_skin_tone(species = "Human")
else
return 0
proc/skintone2racedescription(tone, species = "Human")
/proc/skintone2racedescription(tone, species = "Human")
if(species == "Human")
switch (tone)
if(30 to INFINITY)
@@ -129,7 +129,7 @@ proc/skintone2racedescription(tone, species = "Human")
else
return "unknown"
proc/age2agedescription(age)
/proc/age2agedescription(age)
switch(age)
if(0 to 1)
return "infant"
@@ -152,7 +152,7 @@ proc/age2agedescription(age)
else
return "unknown"
proc/RoundHealth(health)
/proc/RoundHealth(health)
switch(health)
if(99 to INFINITY)
return "health100"
@@ -217,7 +217,7 @@ Proc for attack log creation, because really why not
6 is additional information, anything that needs to be added
*/
proc/add_logs(mob/user, mob/target, what_done, var/admin=1, var/object=null, var/addition=null)
/proc/add_logs(mob/user, mob/target, what_done, var/admin=1, var/object=null, var/addition=null)
if(user && ismob(user))
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Has [what_done] [target ? "[target.name][(ismob(target) && target.ckey) ? "([target.ckey])" : ""]" : "NON-EXISTANT SUBJECT"][object ? " with [object]" : " "]. [addition]</font>")
if(target && ismob(target))
@@ -230,7 +230,7 @@ proc/add_logs(mob/user, mob/target, what_done, var/admin=1, var/object=null, var
if(admin)
log_attack("<font color='red'>[user ? "[user.name][(ismob(user) && user.ckey) ? "([user.ckey])" : ""]" : "NON-EXISTANT SUBJECT"] [what_done] [target ? "[target.name][(ismob(target) && target.ckey)? "([target.ckey])" : ""]" : "NON-EXISTANT SUBJECT"][object ? " with [object]" : " "]. [addition]</font>")
proc/add_ghostlogs(var/mob/user, var/obj/target, var/what_done, var/admin=1, var/addition=null)
/proc/add_ghostlogs(var/mob/user, var/obj/target, var/what_done, var/admin=1, var/addition=null)
var/target_text = "NON-EXISTENT TARGET"
var/subject_text = "NON-EXISTENT SUBJECT"
if(target)

View File

@@ -188,7 +188,7 @@
//checks text for html tags
//if tag is not in whitelist (var/list/paper_tag_whitelist in global.dm)
//relpaces < with &lt;
proc/checkhtml(var/t)
/proc/checkhtml(var/t)
t = sanitize_simple(t, list("&#"="."))
var/p = findtext(t,"<",1)
while (p) //going through all the tags
@@ -407,7 +407,7 @@ var/list/unit_suffixes = list("", "k", "M", "G", "T", "P", "E", "Z", "Y")
//Example: text_ends_with("Woody got wood", "dy got wood") returns 1
// text_ends_with("Woody got wood", "d") returns 1
// text_ends_with("Woody got wood", "Wood") returns 0
proc/text_ends_with(text, suffix)
/proc/text_ends_with(text, suffix)
if(length(suffix) > length(text))
return FALSE
@@ -517,7 +517,7 @@ var/quote = ascii2text(34)
// to_chat(usr, "\"[jointext(num2words(number), " ")]\"")
// Sanitize inputs to avoid SQL injection attacks
proc/sql_sanitize_text(var/text)
/proc/sql_sanitize_text(var/text)
text = replacetext(text, "'", "''")
text = replacetext(text, ";", "")
text = replacetext(text, "&", "")

View File

@@ -9,7 +9,7 @@
*/
//slower then jointext, but correctly processes associative lists.
proc/tg_jointext(list/list, glue = ",")
/proc/tg_jointext(list/list, glue = ",")
if(!istype(list) || !list.len)
return
for(var/i=1 to list.len)

View File

@@ -608,7 +608,7 @@ Turf and target are seperate in case you want to teleport some distance from a t
return locate(x, y, A.z)
//returns random gauss number
proc/GaussRand(var/sigma)
/proc/GaussRand(var/sigma)
var/x,y,rsq
do
x=2*rand()-1
@@ -618,7 +618,7 @@ proc/GaussRand(var/sigma)
return sigma*y*sqrt(-2*log(rsq)/rsq)
//returns random gauss number, rounded to 'roundto'
proc/GaussRandRound(var/sigma,var/roundto)
/proc/GaussRandRound(var/sigma,var/roundto)
return round(GaussRand(sigma),roundto)
//Step-towards method of determining whether one atom can see another. Similar to viewers()
@@ -1080,10 +1080,10 @@ proc/GaussRandRound(var/sigma,var/roundto)
return copiedobjs
//chances are 1:value. anyprob(1) will always return true
proc/anyprob(value)
/proc/anyprob(value)
return (rand(1,value)==value)
proc/view_or_range(distance = world.view , center = usr , type)
/proc/view_or_range(distance = world.view , center = usr , type)
switch(type)
if("view")
. = view(distance,center)
@@ -1091,7 +1091,7 @@ proc/view_or_range(distance = world.view , center = usr , type)
. = range(distance,center)
return
proc/oview_or_orange(distance = world.view , center = usr , type)
/proc/oview_or_orange(distance = world.view , center = usr , type)
switch(type)
if("view")
. = oview(distance,center)
@@ -1099,7 +1099,7 @@ proc/oview_or_orange(distance = world.view , center = usr , type)
. = orange(distance,center)
return
proc/get_mob_with_client_list()
/proc/get_mob_with_client_list()
var/list/mobs = list()
for(var/mob/M in mob_list)
if (M.client)
@@ -1294,7 +1294,7 @@ var/list/WALLITEMS = list(
return 1
return 0
proc/rotate_icon(file, state, step = 1, aa = FALSE)
/proc/rotate_icon(file, state, step = 1, aa = FALSE)
var/icon/base = icon(file, state)
var/w

View File

@@ -176,26 +176,25 @@
master = null
dir = 2
move
name = "Allow Walking"
icon_state = "no_walk0"
screen_loc = ui_gun2
/obj/abstract/screen/gun/move
name = "Allow Walking"
icon_state = "no_walk0"
screen_loc = ui_gun2
run
name = "Allow Running"
icon_state = "no_run0"
screen_loc = ui_gun3
/obj/abstract/screen/gun/run
name = "Allow Running"
icon_state = "no_run0"
screen_loc = ui_gun3
item
name = "Allow Item Use"
icon_state = "no_item0"
screen_loc = ui_gun1
/obj/abstract/screen/gun/item
name = "Allow Item Use"
icon_state = "no_item0"
screen_loc = ui_gun1
mode
name = "Toggle Gun Mode"
icon_state = "gun0"
screen_loc = ui_gun_select
//dir = 1
/obj/abstract/screen/gun/mode
name = "Toggle Gun Mode"
icon_state = "gun0"
screen_loc = ui_gun_select
/obj/abstract/screen/gun/MouseEntered(location,control,params)
openToolTip(usr,src,params,title = name,content = desc)

View File

@@ -49,12 +49,6 @@
/obj/item/proc/preattack(atom/target, mob/user, proximity_flag, click_parameters)
return
obj/item/proc/get_clamped_volume()
if(src.force && src.w_class)
return clamp((src.force + src.w_class) * 4, 30, 100)// Add the item's force to its weight class and multiply by 4, then clamp the value between 30 and 100
else if(!src.force && src.w_class)
return clamp(src.w_class * 6, 10, 100) // Multiply the item's weight class by 6, then clamp the value between 10 and 100
/obj/item/proc/attack(mob/living/M as mob, mob/living/user as mob, def_zone, var/originator = null)
if(restraint_resist_time > 0)
if(restraint_apply_check(M, user))

View File

@@ -16,7 +16,7 @@
if(T)
create_shield(T)
mob/camera/blob/DblClickOn(var/atom/A) //Teleport view to another blob
/mob/camera/blob/DblClickOn(var/atom/A) //Teleport view to another blob
var/turf/T = get_turf(A)
var/obj/effect/blob/B = (locate(/obj/effect/blob) in T)
@@ -24,4 +24,4 @@ mob/camera/blob/DblClickOn(var/atom/A) //Teleport view to another blob
if(!B)
return
else
usr.forceMove(T)
usr.forceMove(T)

View File

@@ -15,7 +15,7 @@
var/global/datum/emergency_shuttle/emergency_shuttle
datum/emergency_shuttle
/datum/emergency_shuttle
var/alert = 0 //0 = emergency, 1 = crew cycle
var/location = 0 //0 = in transit (or on standby), 1 = at the station, 2 = at centcom
@@ -49,7 +49,7 @@ datum/emergency_shuttle
// if not called before, set the endtime to T+600 seconds
// otherwise if outgoing, switch to incoming
datum/emergency_shuttle/proc/incall(coeff = 1)
/datum/emergency_shuttle/proc/incall(coeff = 1)
if(shutdown)
return
if((!universe.OnShuttleCall(null) || deny_shuttle) && alert == 1) //crew transfer shuttle does not gets recalled by gamemode
@@ -68,13 +68,13 @@ datum/emergency_shuttle/proc/incall(coeff = 1)
if(istype(A, /area/hallway))
A.readyalert()
datum/emergency_shuttle/proc/shuttlealert(var/X)
/datum/emergency_shuttle/proc/shuttlealert(var/X)
if(shutdown)
return
alert = X
datum/emergency_shuttle/proc/recall()
/datum/emergency_shuttle/proc/recall()
if(shutdown)
return
if(!can_recall)
@@ -100,7 +100,7 @@ datum/emergency_shuttle/proc/recall()
// returns the time (in seconds) before shuttle arrival
// note if direction = -1, gives a count-up to SHUTTLEARRIVETIME
datum/emergency_shuttle/proc/timeleft()
/datum/emergency_shuttle/proc/timeleft()
if(online)
var/timeleft = round((endtime - world.time)/10 ,1)
if(direction >= 0)
@@ -111,13 +111,13 @@ datum/emergency_shuttle/proc/timeleft()
return SHUTTLEARRIVETIME
// sets the time left to a given delay (in seconds)
datum/emergency_shuttle/proc/settimeleft(var/delay)
/datum/emergency_shuttle/proc/settimeleft(var/delay)
endtime = world.time + delay * 10
timelimit = delay
// sets the shuttle direction
// 1 = towards SS13, -1 = back to centcom
datum/emergency_shuttle/proc/setdirection(var/dirn)
/datum/emergency_shuttle/proc/setdirection(var/dirn)
if(direction == dirn || !direction || !dirn)
direction = dirn
return
@@ -127,7 +127,7 @@ datum/emergency_shuttle/proc/setdirection(var/dirn)
endtime = world.time + (SHUTTLEARRIVETIME*10 - ticksleft)
return
datum/emergency_shuttle/proc/move_pod(var/pod,var/destination)
/datum/emergency_shuttle/proc/move_pod(var/pod,var/destination)
if (!pod || !destination || !(istype(pod, /datum/shuttle/escape)) || !escape_pods.Find(pod))
return
@@ -149,7 +149,7 @@ datum/emergency_shuttle/proc/move_pod(var/pod,var/destination)
else
D.open()
datum/emergency_shuttle/proc/force_shutdown()
/datum/emergency_shuttle/proc/force_shutdown()
online=0
shutdown=1
@@ -174,7 +174,7 @@ datum/emergency_shuttle/proc/force_shutdown()
// "preload" the assets for when they're needed for the map vote.
datum/emergency_shuttle/proc/vote_preload()
/datum/emergency_shuttle/proc/vote_preload()
if (voting_cache)
return
voting_cache = 1
@@ -183,7 +183,7 @@ datum/emergency_shuttle/proc/vote_preload()
spawn
vote.interface.sendAssets(C)
datum/emergency_shuttle/proc/hyperspace_sounds(var/phase)
/datum/emergency_shuttle/proc/hyperspace_sounds(var/phase)
var/frequency = get_rand_frequency()
switch (phase)
@@ -214,7 +214,7 @@ datum/emergency_shuttle/proc/hyperspace_sounds(var/phase)
if (M_turf.z == shuttle.dock_centcom.z)
M.playsound_local(shuttle.dock_centcom, 'sound/machines/hyperspace_end.ogg', 75 - (get_dist(shuttle.dock_centcom,M_turf)*2), 1, frequency, falloff = 5)
datum/emergency_shuttle/proc/shuttle_phase(var/phase, var/casual = 1)
/datum/emergency_shuttle/proc/shuttle_phase(var/phase, var/casual = 1)
switch (phase)
if ("station")
location = 1
@@ -319,7 +319,7 @@ datum/emergency_shuttle/proc/shuttle_phase(var/phase, var/casual = 1)
online = 0
datum/emergency_shuttle/proc/process()
/datum/emergency_shuttle/proc/process()
if(!online || shutdown)
return

View File

@@ -27,7 +27,7 @@ Ambience system.
var/ambience_buffer // essentially world.time + the length of the ambience sound file. this is to prevent overlap.
*/
client/proc/handle_ambience()
/client/proc/handle_ambience()
if(!mob)//I have no trust for Byond.
return

View File

@@ -243,12 +243,12 @@ var/list/snowstorm_ambience_volumes = list(30,40,60,80)
mining_shuttle.lockdown = "Under directive 1-49, surface-to-space light craft have been locked for duration of blizzard. Only escape-class shuttles are rated for stability in blizzards."
security_shuttle.lockdown = "Under directive 1-49, surface-to-space light craft have been locked for duration of blizzard. Only escape-class shuttles are rated for stability in blizzards."
datum/weather/snow/blizzard/omega
/datum/weather/snow/blizzard/omega
name = "<font color='purple'>dark season</font>"
next_weather = list(/datum/weather/snow/heavy = 100)
snowfall_prob = 15
snow_fluff_estimate = "<font color='purple'>more than 13.5cm/minute (Dark Season)</font>"
datum/weather/snow/blizzard/omega/New()
/datum/weather/snow/blizzard/omega/New()
..()
timeleft = 2 HOURS
timeleft = 2 HOURS

View File

@@ -1,6 +0,0 @@
datum/computer
var/name
datum/computer/folder
var/list/datum/computer/contents = list()
datum/computer/file

View File

@@ -123,172 +123,3 @@
general += G
locked += L
proc/get_id_photo(var/mob/living/carbon/human/H)
var/icon/preview_icon = null
var/g = "m"
if (H.gender == FEMALE)
g = "f"
var/icon/icobase = H.species.icobase
preview_icon = new /icon(icobase, "torso_[g]")
var/icon/temp
temp = new /icon(icobase, "groin_[g]")
preview_icon.Blend(temp, ICON_OVERLAY)
temp = new /icon(icobase, "head_[g]")
preview_icon.Blend(temp, ICON_OVERLAY)
for(var/datum/organ/external/E in H.organs)
if(E.status & ORGAN_CUT_AWAY || E.status & ORGAN_DESTROYED)
continue
var/o_icobase=icobase
if(E.status & ORGAN_PEG)
o_icobase='icons/mob/human_races/o_peg.dmi'
else if(E.status & ORGAN_ROBOT)
o_icobase='icons/mob/human_races/o_robot.dmi'
temp = new /icon(o_icobase, "[E.name]")
//if(E.status & ORGAN_ROBOT)
// temp.MapColors(rgb(77,77,77), rgb(150,150,150), rgb(28,28,28), rgb(0,0,0))
preview_icon.Blend(temp, ICON_OVERLAY)
// Skin tone
if(H.species.anatomy_flags & HAS_SKIN_TONE)
if (H.my_appearance.s_tone >= 0)
preview_icon.Blend(rgb(H.my_appearance.s_tone, H.my_appearance.s_tone, H.my_appearance.s_tone), ICON_ADD)
else
preview_icon.Blend(rgb(-H.my_appearance.s_tone, -H.my_appearance.s_tone, -H.my_appearance.s_tone), ICON_SUBTRACT)
else if(H.species.anatomy_flags & RGBSKINTONE)
preview_icon.Blend(rgb(H.my_appearance.r_hair, H.my_appearance.g_hair, H.my_appearance.b_hair), ICON_ADD)
var/icon/eyes_s = new/icon("icon" = 'icons/mob/hair_styles.dmi', "icon_state" = H.species ? H.species.eyes : "eyes_s")
eyes_s.Blend(rgb(H.my_appearance.r_eyes, H.my_appearance.g_eyes, H.my_appearance.b_eyes), ICON_ADD)
var/datum/sprite_accessory/hair_style = hair_styles_list[H.my_appearance.h_style]
if(hair_style)
var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s")
hair_s.Blend(rgb(H.my_appearance.r_hair, H.my_appearance.g_hair, H.my_appearance.b_hair), ICON_ADD)
eyes_s.Blend(hair_s, ICON_OVERLAY)
var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[H.my_appearance.f_style]
if(facial_hair_style)
var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s")
facial_s.Blend(rgb(H.my_appearance.r_facial, H.my_appearance.g_facial, H.my_appearance.b_facial), ICON_ADD)
eyes_s.Blend(facial_s, ICON_OVERLAY)
var/icon/clothes_s = null
switch(H.mind.assigned_role)
if("Head of Personnel")
clothes_s = new /icon('icons/mob/uniform.dmi', "hop_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
if("Bartender")
clothes_s = new /icon('icons/mob/uniform.dmi', "ba_suit_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
if("Botanist")
clothes_s = new /icon('icons/mob/uniform.dmi', "hydroponics_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
if("Chef")
clothes_s = new /icon('icons/mob/uniform.dmi', "chef_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
if("Janitor")
clothes_s = new /icon('icons/mob/uniform.dmi', "janitor_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
if("Librarian")
clothes_s = new /icon('icons/mob/uniform.dmi', "red_suit_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
if("Quartermaster")
clothes_s = new /icon('icons/mob/uniform.dmi', "qm_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
if("Cargo Technician")
clothes_s = new /icon('icons/mob/uniform.dmi', "cargotech_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
if("Shaft Miner")
clothes_s = new /icon('icons/mob/uniform.dmi', "miner_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
if("Lawyer")
clothes_s = new /icon('icons/mob/uniform.dmi', "internalaffairs_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
if("Chaplain")
clothes_s = new /icon('icons/mob/uniform.dmi', "chapblack_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
if("Research Director")
clothes_s = new /icon('icons/mob/uniform.dmi', "director_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_open"), ICON_OVERLAY)
if("Scientist")
clothes_s = new /icon('icons/mob/uniform.dmi', "toxinswhite_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_tox_open"), ICON_OVERLAY)
if("Xenoarchaeologist")
clothes_s = new /icon('icons/mob/uniform.dmi', "xenoarch")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_tox_open"), ICON_OVERLAY)
if("Xenobiologist")
clothes_s = new /icon('icons/mob/uniform.dmi', "xenobio")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_tox_open"), ICON_OVERLAY)
if("Chemist")
clothes_s = new /icon('icons/mob/uniform.dmi', "chemistrywhite_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_chem_open"), ICON_OVERLAY)
if("Chief Medical Officer")
clothes_s = new /icon('icons/mob/uniform.dmi', "cmo_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_cmo_open"), ICON_OVERLAY)
if("Medical Doctor")
clothes_s = new /icon('icons/mob/uniform.dmi', "medical_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_open"), ICON_OVERLAY)
if("Geneticist")
clothes_s = new /icon('icons/mob/uniform.dmi', "geneticswhite_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_gen_open"), ICON_OVERLAY)
if("Virologist")
clothes_s = new /icon('icons/mob/uniform.dmi', "virologywhite_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_vir_open"), ICON_OVERLAY)
if("Captain")
clothes_s = new /icon('icons/mob/uniform.dmi', "captain_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
if("Head of Security")
clothes_s = new /icon('icons/mob/uniform.dmi', "hosred_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY)
if("Warden")
clothes_s = new /icon('icons/mob/uniform.dmi', "warden_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY)
if("Detective")
clothes_s = new /icon('icons/mob/uniform.dmi', "detective_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "detective"), ICON_OVERLAY)
if("Security Officer")
clothes_s = new /icon('icons/mob/uniform.dmi', "security_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY)
if("Chief Engineer")
clothes_s = new /icon('icons/mob/uniform.dmi', "chief_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY)
if("Station Engineer")
clothes_s = new /icon('icons/mob/uniform.dmi', "engine_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "orange"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY)
if("Atmospheric Technician")
clothes_s = new /icon('icons/mob/uniform.dmi', "atmos_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY)
if("Roboticist")
clothes_s = new /icon('icons/mob/uniform.dmi', "robotics_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_open"), ICON_OVERLAY)
else
clothes_s = new /icon('icons/mob/uniform.dmi', "grey_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
preview_icon.Blend(eyes_s, ICON_OVERLAY)
if(clothes_s)
preview_icon.Blend(clothes_s, ICON_OVERLAY)
del(eyes_s)
del(clothes_s)
return preview_icon

View File

@@ -474,173 +474,173 @@ var/runedec = 0 // Rune cap ?
/obj/item/weapon/tome_legacy/imbued //admin tome, spawns working runes without waiting
w_class = W_CLASS_SMALL
var/cultistsonly = 1
attack_self(mob/user as mob)
if(src.cultistsonly && !islegacycultist(usr))
return
if(!cultwords["travel"])
my_cult.randomiseWords()
if(user)
var/r
if (!istype(user.loc,/turf))
to_chat(user, "<span class='warning'>You do not have enough space to write a proper rune.</span>")
var/list/runes = list("teleport", "itemport", "tome", "armor", "convert", "tear in reality", "emp", "drain", "seer", "raise", "obscure", "reveal", "astral journey", "manifest", "imbue talisman", "sacrifice", "wall", "freedom", "cultsummon", "deafen", "blind", "bloodboil", "communicate", "stun")
r = input("Choose a rune to scribe", "Rune Scribing") in runes //not cancellable.
var/obj/effect/rune_legacy/R = new /obj/effect/rune_legacy
if(istype(user, /mob/living/carbon/human))
var/mob/living/carbon/human/H = user
R.blood_DNA = list()
R.blood_DNA[H.dna.unique_enzymes] = H.dna.b_type
R.blood_color = H.species.blood_color
switch(r)
if("teleport")
var/list/words = list("ire", "ego", "nahlizet", "certum", "veri", "jatkaa", "balaq", "mgar", "karazet", "geeri")
var/beacon
if(usr)
beacon = input("Select the last rune", "Rune Scribing") in words
R.word1=cultwords["travel"]
R.word2=cultwords["self"]
R.word3=beacon
R.forceMove(user.loc)
R.check_icon()
if("itemport")
var/list/words = list("ire", "ego", "nahlizet", "certum", "veri", "jatkaa", "balaq", "mgar", "karazet", "geeri")
var/beacon
if(usr)
beacon = input("Select the last rune", "Rune Scribing") in words
R.word1=cultwords["travel"]
R.word2=cultwords["other"]
R.word3=beacon
R.forceMove(user.loc)
R.check_icon()
if("tome")
R.word1=cultwords["see"]
R.word2=cultwords["blood"]
R.word3=cultwords["hell"]
R.forceMove(user.loc)
R.check_icon()
if("armor")
R.word1=cultwords["hell"]
R.word2=cultwords["destroy"]
R.word3=cultwords["other"]
R.forceMove(user.loc)
R.check_icon()
if("convert")
R.word1=cultwords["join"]
R.word2=cultwords["blood"]
R.word3=cultwords["self"]
R.forceMove(user.loc)
R.check_icon()
if("tear in reality")
R.word1=cultwords["hell"]
R.word2=cultwords["join"]
R.word3=cultwords["self"]
R.forceMove(user.loc)
R.check_icon()
if("emp")
R.word1=cultwords["destroy"]
R.word2=cultwords["see"]
R.word3=cultwords["technology"]
R.forceMove(user.loc)
R.check_icon()
if("drain")
R.word1=cultwords["travel"]
R.word2=cultwords["blood"]
R.word3=cultwords["self"]
R.forceMove(user.loc)
R.check_icon()
if("seer")
R.word1=cultwords["see"]
R.word2=cultwords["hell"]
R.word3=cultwords["join"]
R.forceMove(user.loc)
R.check_icon()
if("raise")
R.word1=cultwords["blood"]
R.word2=cultwords["join"]
R.word3=cultwords["hell"]
R.forceMove(user.loc)
R.check_icon()
if("obscure")
R.word1=cultwords["hide"]
R.word2=cultwords["see"]
R.word3=cultwords["blood"]
R.forceMove(user.loc)
R.check_icon()
if("astral journey")
R.word1=cultwords["hell"]
R.word2=cultwords["travel"]
R.word3=cultwords["self"]
R.forceMove(user.loc)
R.check_icon()
if("manifest")
R.word1=cultwords["blood"]
R.word2=cultwords["see"]
R.word3=cultwords["travel"]
R.forceMove(user.loc)
R.check_icon()
if("imbue talisman")
R.word1=cultwords["hell"]
R.word2=cultwords["technology"]
R.word3=cultwords["join"]
R.forceMove(user.loc)
R.check_icon()
if("sacrifice")
R.word1=cultwords["hell"]
R.word2=cultwords["blood"]
R.word3=cultwords["join"]
R.forceMove(user.loc)
R.check_icon()
if("reveal")
R.word1=cultwords["blood"]
R.word2=cultwords["see"]
R.word3=cultwords["hide"]
R.forceMove(user.loc)
R.check_icon()
if("wall")
R.word1=cultwords["destroy"]
R.word2=cultwords["travel"]
R.word3=cultwords["self"]
R.forceMove(user.loc)
R.check_icon()
if("freedom")
R.word1=cultwords["travel"]
R.word2=cultwords["technology"]
R.word3=cultwords["other"]
R.forceMove(user.loc)
R.check_icon()
if("cultsummon")
R.word1=cultwords["join"]
R.word2=cultwords["other"]
R.word3=cultwords["self"]
R.forceMove(user.loc)
R.check_icon()
if("deafen")
R.word1=cultwords["hide"]
R.word2=cultwords["other"]
R.word3=cultwords["see"]
R.forceMove(user.loc)
R.check_icon()
if("blind")
R.word1=cultwords["destroy"]
R.word2=cultwords["see"]
R.word3=cultwords["other"]
R.forceMove(user.loc)
R.check_icon()
if("bloodboil")
R.word1=cultwords["destroy"]
R.word2=cultwords["see"]
R.word3=cultwords["blood"]
R.forceMove(user.loc)
R.check_icon()
if("communicate")
R.word1=cultwords["self"]
R.word2=cultwords["other"]
R.word3=cultwords["technology"]
R.forceMove(user.loc)
R.check_icon()
if("stun")
R.word1=cultwords["join"]
R.word2=cultwords["hide"]
R.word3=cultwords["technology"]
R.forceMove(user.loc)
R.check_icon()
/obj/item/weapon/tome_legacy/imbued/attack_self(mob/user as mob)
if(src.cultistsonly && !islegacycultist(usr))
return
if(!cultwords["travel"])
my_cult.randomiseWords()
if(user)
var/r
if (!istype(user.loc,/turf))
to_chat(user, "<span class='warning'>You do not have enough space to write a proper rune.</span>")
var/list/runes = list("teleport", "itemport", "tome", "armor", "convert", "tear in reality", "emp", "drain", "seer", "raise", "obscure", "reveal", "astral journey", "manifest", "imbue talisman", "sacrifice", "wall", "freedom", "cultsummon", "deafen", "blind", "bloodboil", "communicate", "stun")
r = input("Choose a rune to scribe", "Rune Scribing") in runes //not cancellable.
var/obj/effect/rune_legacy/R = new /obj/effect/rune_legacy
if(istype(user, /mob/living/carbon/human))
var/mob/living/carbon/human/H = user
R.blood_DNA = list()
R.blood_DNA[H.dna.unique_enzymes] = H.dna.b_type
R.blood_color = H.species.blood_color
switch(r)
if("teleport")
var/list/words = list("ire", "ego", "nahlizet", "certum", "veri", "jatkaa", "balaq", "mgar", "karazet", "geeri")
var/beacon
if(usr)
beacon = input("Select the last rune", "Rune Scribing") in words
R.word1=cultwords["travel"]
R.word2=cultwords["self"]
R.word3=beacon
R.forceMove(user.loc)
R.check_icon()
if("itemport")
var/list/words = list("ire", "ego", "nahlizet", "certum", "veri", "jatkaa", "balaq", "mgar", "karazet", "geeri")
var/beacon
if(usr)
beacon = input("Select the last rune", "Rune Scribing") in words
R.word1=cultwords["travel"]
R.word2=cultwords["other"]
R.word3=beacon
R.forceMove(user.loc)
R.check_icon()
if("tome")
R.word1=cultwords["see"]
R.word2=cultwords["blood"]
R.word3=cultwords["hell"]
R.forceMove(user.loc)
R.check_icon()
if("armor")
R.word1=cultwords["hell"]
R.word2=cultwords["destroy"]
R.word3=cultwords["other"]
R.forceMove(user.loc)
R.check_icon()
if("convert")
R.word1=cultwords["join"]
R.word2=cultwords["blood"]
R.word3=cultwords["self"]
R.forceMove(user.loc)
R.check_icon()
if("tear in reality")
R.word1=cultwords["hell"]
R.word2=cultwords["join"]
R.word3=cultwords["self"]
R.forceMove(user.loc)
R.check_icon()
if("emp")
R.word1=cultwords["destroy"]
R.word2=cultwords["see"]
R.word3=cultwords["technology"]
R.forceMove(user.loc)
R.check_icon()
if("drain")
R.word1=cultwords["travel"]
R.word2=cultwords["blood"]
R.word3=cultwords["self"]
R.forceMove(user.loc)
R.check_icon()
if("seer")
R.word1=cultwords["see"]
R.word2=cultwords["hell"]
R.word3=cultwords["join"]
R.forceMove(user.loc)
R.check_icon()
if("raise")
R.word1=cultwords["blood"]
R.word2=cultwords["join"]
R.word3=cultwords["hell"]
R.forceMove(user.loc)
R.check_icon()
if("obscure")
R.word1=cultwords["hide"]
R.word2=cultwords["see"]
R.word3=cultwords["blood"]
R.forceMove(user.loc)
R.check_icon()
if("astral journey")
R.word1=cultwords["hell"]
R.word2=cultwords["travel"]
R.word3=cultwords["self"]
R.forceMove(user.loc)
R.check_icon()
if("manifest")
R.word1=cultwords["blood"]
R.word2=cultwords["see"]
R.word3=cultwords["travel"]
R.forceMove(user.loc)
R.check_icon()
if("imbue talisman")
R.word1=cultwords["hell"]
R.word2=cultwords["technology"]
R.word3=cultwords["join"]
R.forceMove(user.loc)
R.check_icon()
if("sacrifice")
R.word1=cultwords["hell"]
R.word2=cultwords["blood"]
R.word3=cultwords["join"]
R.forceMove(user.loc)
R.check_icon()
if("reveal")
R.word1=cultwords["blood"]
R.word2=cultwords["see"]
R.word3=cultwords["hide"]
R.forceMove(user.loc)
R.check_icon()
if("wall")
R.word1=cultwords["destroy"]
R.word2=cultwords["travel"]
R.word3=cultwords["self"]
R.forceMove(user.loc)
R.check_icon()
if("freedom")
R.word1=cultwords["travel"]
R.word2=cultwords["technology"]
R.word3=cultwords["other"]
R.forceMove(user.loc)
R.check_icon()
if("cultsummon")
R.word1=cultwords["join"]
R.word2=cultwords["other"]
R.word3=cultwords["self"]
R.forceMove(user.loc)
R.check_icon()
if("deafen")
R.word1=cultwords["hide"]
R.word2=cultwords["other"]
R.word3=cultwords["see"]
R.forceMove(user.loc)
R.check_icon()
if("blind")
R.word1=cultwords["destroy"]
R.word2=cultwords["see"]
R.word3=cultwords["other"]
R.forceMove(user.loc)
R.check_icon()
if("bloodboil")
R.word1=cultwords["destroy"]
R.word2=cultwords["see"]
R.word3=cultwords["blood"]
R.forceMove(user.loc)
R.check_icon()
if("communicate")
R.word1=cultwords["self"]
R.word2=cultwords["other"]
R.word3=cultwords["technology"]
R.forceMove(user.loc)
R.check_icon()
if("stun")
R.word1=cultwords["join"]
R.word2=cultwords["hide"]
R.word3=cultwords["technology"]
R.forceMove(user.loc)
R.check_icon()

View File

@@ -10,7 +10,7 @@
default_admin_voice = "Your Spider Senses"
admin_voice_style = "skeleton"
datum/role/giant_spider/Greet(var/greeting,var/custom)
/datum/role/giant_spider/Greet(var/greeting,var/custom)
if(!greeting)
return

View File

@@ -37,7 +37,7 @@
admin_voice_style = "rough"
var/countdown = 60
datum/role/madmonkey/Greet(var/greeting,var/custom)
/datum/role/madmonkey/Greet(var/greeting,var/custom)
if(!greeting)
return

View File

@@ -10,7 +10,7 @@
default_admin_voice = "Big Rat"
admin_voice_style = "skeleton" // grey, bold and italic
datum/role/plague_mouse/Greet(var/greeting,var/custom)
/datum/role/plague_mouse/Greet(var/greeting,var/custom)
if(!greeting)
return

View File

@@ -9,109 +9,109 @@
channel_name = "Tau Ceti Daily"
can_be_redacted = 0
revolution_inciting_event
/datum/news_announcement/revolution_inciting_event
paycuts_suspicion
round_time = 60*10
message = {"Reports have leaked that Nanotrasen Inc. is planning to put paycuts into
effect on many of its Research Stations in Tau Ceti. Apparently these research
stations haven't been able to yield the expected revenue, and thus adjustments
have to be made."}
author = "Unauthorized"
/datum/news_announcement/revolution_inciting_event/paycuts_suspicion
round_time = 60*10
message = {"Reports have leaked that Nanotrasen Inc. is planning to put paycuts into
effect on many of its Research Stations in Tau Ceti. Apparently these research
stations haven't been able to yield the expected revenue, and thus adjustments
have to be made."}
author = "Unauthorized"
paycuts_confirmation
round_time = 60*40
message = {"Earlier rumours about paycuts on Research Stations in the Tau Ceti system have
been confirmed. Shockingly, however, the cuts will only affect lower tier
personnel. Heads of Staff will, according to our sources, not be affected."}
author = "Unauthorized"
/datum/news_announcement/revolution_inciting_event/paycuts_confirmation
round_time = 60*40
message = {"Earlier rumours about paycuts on Research Stations in the Tau Ceti system have
been confirmed. Shockingly, however, the cuts will only affect lower tier
personnel. Heads of Staff will, according to our sources, not be affected."}
author = "Unauthorized"
human_experiments
round_time = 60*90
message = {"Unbelievable reports about human experimentation have reached our ears. According
to a refugee from one of the Tau Ceti Research Stations, their station, in order
to increase revenue, has refactored several of their facilities to perform experiments
on live humans, including virology research, genetic manipulation, and \"feeding them
to the slimes to see what happens\". Allegedly, these test subjects were neither
humanified monkeys nor volunteers, but rather unqualified staff that were forced into
the experiments, and reported to have died in a \"work accident\" by Nanotrasen Inc."}
author = "Unauthorized"
/datum/news_announcement/revolution_inciting_event/human_experiments
round_time = 60*90
message = {"Unbelievable reports about human experimentation have reached our ears. According
to a refugee from one of the Tau Ceti Research Stations, their station, in order
to increase revenue, has refactored several of their facilities to perform experiments
on live humans, including virology research, genetic manipulation, and \"feeding them
to the slimes to see what happens\". Allegedly, these test subjects were neither
humanified monkeys nor volunteers, but rather unqualified staff that were forced into
the experiments, and reported to have died in a \"work accident\" by Nanotrasen Inc."}
author = "Unauthorized"
bluespace_research
/datum/news_announcement/bluespace_research
announcement
round_time = 60*20
message = {"The new field of research trying to explain several interesting spacetime oddities,
also known as \"Bluespace Research\", has reached new heights. Of the several
hundred space stations now orbiting in Tau Ceti, fifteen are now specially equipped
to experiment with and research Bluespace effects. Rumours have it some of these
stations even sport functional \"travel gates\" that can instantly move a whole research
team to an alternate reality."}
/datum/news_announcement/bluespace_research/announcement
round_time = 60*20
message = {"The new field of research trying to explain several interesting spacetime oddities,
also known as \"Bluespace Research\", has reached new heights. Of the several
hundred space stations now orbiting in Tau Ceti, fifteen are now specially equipped
to experiment with and research Bluespace effects. Rumours have it some of these
stations even sport functional \"travel gates\" that can instantly move a whole research
team to an alternate reality."}
random_junk
/datum/news_announcement/random_junk
cheesy_honkers
author = "Assistant Editor Carl Ritz"
channel_name = "The Gibson Gazette"
message = {"Do cheesy honkers increase risk of having a miscarriage? Several health administrations
say so!"}
round_time = 60 * 15
/datum/news_announcement/random_junk/cheesy_honkers
author = "Assistant Editor Carl Ritz"
channel_name = "The Gibson Gazette"
message = {"Do cheesy honkers increase risk of having a miscarriage? Several health administrations
say so!"}
round_time = 60 * 15
net_block
author = "Assistant Editor Carl Ritz"
channel_name = "The Gibson Gazette"
message = {"Several corporations banding together to block access to 'wetskrell.nt', site administrators
claiming violation of net laws."}
round_time = 60 * 50
/datum/news_announcement/random_junk/net_block
author = "Assistant Editor Carl Ritz"
channel_name = "The Gibson Gazette"
message = {"Several corporations banding together to block access to 'wetskrell.nt', site administrators
claiming violation of net laws."}
round_time = 60 * 50
found_ssd
channel_name = "Tau Ceti Daily"
author = "Doctor Eric Hanfield"
/datum/news_announcement/random_junk/found_ssd
channel_name = "Tau Ceti Daily"
author = "Doctor Eric Hanfield"
message = {"Several people have been found unconscious at their terminals. It is thought that it was due
to a lack of sleep or of simply migraines from staring at the screen too long. Camera footage
reveals that many of them were playing games instead of working and their pay has been docked
accordingly."}
round_time = 60 * 90
message = {"Several people have been found unconscious at their terminals. It is thought that it was due
to a lack of sleep or of simply migraines from staring at the screen too long. Camera footage
reveals that many of them were playing games instead of working and their pay has been docked
accordingly."}
round_time = 60 * 90
lotus_tree
/datum/news_announcement/lotus_tree
explosions
channel_name = "Tau Ceti Daily"
author = "Reporter Leland H. Howards"
/datum/news_announcement/lotus_tree/explosions
channel_name = "Tau Ceti Daily"
author = "Reporter Leland H. Howards"
message = {"The newly-christened civillian transport Lotus Tree suffered two very large explosions near the
bridge today, and there are unconfirmed reports that the death toll has passed 50. The cause of
the explosions remain unknown, but there is speculation that it might have something to do with
the recent change of regulation in the Moore-Lee Corporation, a major funder of the ship, when M-L
announced that they were officially acknowledging inter-species marriage and providing couples
with marriage tax-benefits."}
round_time = 60 * 30
message = {"The newly-christened civillian transport Lotus Tree suffered two very large explosions near the
bridge today, and there are unconfirmed reports that the death toll has passed 50. The cause of
the explosions remain unknown, but there is speculation that it might have something to do with
the recent change of regulation in the Moore-Lee Corporation, a major funder of the ship, when M-L
announced that they were officially acknowledging inter-species marriage and providing couples
with marriage tax-benefits."}
round_time = 60 * 30
food_riots
/datum/news_announcement/food_riots
breaking_news
channel_name = "Tau Ceti Daily"
author = "Reporter Ro'kii Ar-Raqis"
/datum/news_announcement/food_riots/breaking_news
channel_name = "Tau Ceti Daily"
author = "Reporter Ro'kii Ar-Raqis"
message = {"Breaking news: Food riots have broken out throughout the Refuge asteroid colony in the Tenebrae
Lupus system. This comes only hours after Nanotrasen officials announced they will no longer trade with the
colony, citing the increased presence of \"hostile factions\" on the colony has made trade too dangerous to
continue. Nanotrasen officials have not given any details about said factions. More on that at the top of
the hour."}
round_time = 60 * 10
message = {"Breaking news: Food riots have broken out throughout the Refuge asteroid colony in the Tenebrae
Lupus system. This comes only hours after Nanotrasen officials announced they will no longer trade with the
colony, citing the increased presence of \"hostile factions\" on the colony has made trade too dangerous to
continue. Nanotrasen officials have not given any details about said factions. More on that at the top of
the hour."}
round_time = 60 * 10
more
channel_name = "Tau Ceti Daily"
author = "Reporter Ro'kii Ar-Raqis"
/datum/news_announcement/food_riots/more
channel_name = "Tau Ceti Daily"
author = "Reporter Ro'kii Ar-Raqis"
message = {"More on the Refuge food riots: The Refuge Council has condemned Nanotrasen's withdrawal from
the colony, claiming \"there has been no increase in anti-Nanotrasen activity\", and \"\[the only] reason
Nanotrasen withdrew was because the \[Tenebrae Lupus] system's Plasma deposits have been completely mined out.
We have little to trade with them now\". Nanotrasen officials have denied these allegations, calling them
\"further proof\" of the colony's anti-Nanotrasen stance. Meanwhile, Refuge Security has been unable to quell
the riots. More on this at 6."}
round_time = 60 * 60
message = {"More on the Refuge food riots: The Refuge Council has condemned Nanotrasen's withdrawal from
the colony, claiming \"there has been no increase in anti-Nanotrasen activity\", and \"\[the only] reason
Nanotrasen withdrew was because the \[Tenebrae Lupus] system's Plasma deposits have been completely mined out.
We have little to trade with them now\". Nanotrasen officials have denied these allegations, calling them
\"further proof\" of the colony's anti-Nanotrasen stance. Meanwhile, Refuge Security has been unable to quell
the riots. More on this at 6."}
round_time = 60 * 60
var/global/list/newscaster_standard_feeds = list(/datum/news_announcement/bluespace_research, /datum/news_announcement/lotus_tree, /datum/news_announcement/random_junk, /datum/news_announcement/food_riots)
@@ -121,14 +121,14 @@ proc/process_newscaster()
check_for_newscaster_updates(ticker.mode.newscaster_announcements)*/
var/global/tmp/announced_news_types = list()
proc/check_for_newscaster_updates(type)
/proc/check_for_newscaster_updates(type)
for(var/subtype in typesof(type)-type)
var/datum/news_announcement/news = new subtype()
if(news.round_time * 10 <= world.time && !(subtype in announced_news_types))
announced_news_types += subtype
announce_newscaster_news(news)
proc/announce_newscaster_news(datum/news_announcement/news)
/proc/announce_newscaster_news(datum/news_announcement/news)
var/datum/feed_message/newMsg = new /datum/feed_message

View File

@@ -7,7 +7,7 @@ var/list/datum_donotcopy = list("tag", "type", "parent_type", "vars", "gcDestroy
// thing3 referencing thing1
// you'll end up in an infinite loop
// don't use it for that that's bad
proc/datum2list(var/datum/D, var/list/do_not_copy=datum_donotcopy, parent_datum=null)
/proc/datum2list(var/datum/D, var/list/do_not_copy=datum_donotcopy, parent_datum=null)
var/list/L = list()
for(var/I in D.vars)
if(I in do_not_copy)
@@ -33,7 +33,7 @@ proc/datum2list(var/datum/D, var/list/do_not_copy=datum_donotcopy, parent_datum=
// converts a datum (including atoms!) to a JSON object
// do_not_copy is a list of vars to not include in the JSON output
proc/datum2json(var/datum/D, var/list/do_not_copy=datum_donotcopy)
/proc/datum2json(var/datum/D, var/list/do_not_copy=datum_donotcopy)
ASSERT(istype(D))
var/list/L = datum2list(D, do_not_copy)

View File

@@ -124,7 +124,7 @@
/datum/tether/equal/restrictive //A restrictive equal tether disallows pulling from either side. If either the master or slave attempts to exceed the tether's distance, they simply fail.
proc/tether_equal(atom/movable/first, atom/movable/second, var/distance, var/restrictive = FALSE)
/proc/tether_equal(atom/movable/first, atom/movable/second, var/distance, var/restrictive = FALSE)
if(!istype(first) || !istype(second) || !distance)
return FALSE
if(first.tether_master || second.tether_master) //an atom can only have a single master or equal tether
@@ -137,10 +137,10 @@ proc/tether_equal(atom/movable/first, atom/movable/second, var/distance, var/res
E.make_tether(first,second,distance)
return TRUE
proc/tether_equal_restrictive(atom/movable/first, atom/movable/second, var/distance)
/proc/tether_equal_restrictive(atom/movable/first, atom/movable/second, var/distance)
return tether_equal(first, second, distance, TRUE)
proc/tether_master_slave(atom/movable/M, atom/movable/S, var/distance)
/proc/tether_master_slave(atom/movable/M, atom/movable/S, var/distance)
if(!istype(M) || !istype(S) || !distance)
return FALSE
if(S.tether_master) //an atom can only have a single master or equal tether

View File

@@ -4,18 +4,18 @@
anchored = 1
density = 1
attackby(obj/item/weapon/W as obj, mob/user as mob)
return attack_hand(user)
/obj/structure/signpost/attackby(obj/item/weapon/W as obj, mob/user as mob)
return attack_hand(user)
attack_hand(mob/user as mob)
switch(alert("Travel back to ss13?",,"Yes","No"))
if("Yes")
if(user.z != src.z)
return
user.loc.loc.Exited(user)
user.forceMove(pick(latejoin))
if("No")
/obj/structure/signpost/attack_hand(mob/user as mob)
switch(alert("Travel back to ss13?",,"Yes","No"))
if("Yes")
if(user.z != src.z)
return
user.loc.loc.Exited(user)
user.forceMove(pick(latejoin))
if("No")
return
/obj/effect/mark
var/mark = ""

View File

@@ -1,183 +0,0 @@
/* sd_Alert library
by Shadowdarke (shadowdarke@byond.com)
sd_Alert() is a powerful and flexible alternative to the built in BYOND
alert() proc. sd_Alert offers timed popups, unlimited buttons, custom
appearance, and even the option to popup without stealing keyboard focus
from the map or command line.
Please see demo.dm for detailed examples.
FORMAT
sd_Alert(who, message, title, buttons, default, duration, unfocus, \
size, table, style, tag, select, flags)
ARGUMENTS
who - the client or mob to display the alert to.
message - text message to display
title - title of the alert box
buttons - list of buttons
Default Value: list("Ok")
default - default button selestion
Default Value: the first button in the list
duration - the number of ticks before this alert expires. If not
set, the alert lasts until a button is clicked.
Default Value: 0 (unlimited)
unfocus - if this value is set, the popup will not steal keyboard
focus from the map or command line.
Default Value: 1 (do not take focus)
size - size of the popup window in px
Default Value: "300x200"
table - optional parameters for the HTML table in the alert
Default Value: "width=100% height=100%" (fill the window)
style - optional style sheet information
tag - lets you specify a certain tag for this sd_Alert so you may manipulate it
externally. (i.e. force the alert to close, change options and redisplay,
reuse the same window, etc.)
select - if set, the buttons will be replaced with a selection box with a number of
lines displayed equal to this value.
Default value: 0 (use buttons)
flags - optional flags effecting the alert display. These flags may be ORed (|)
together for multiple effects.
SD_ALERT_SCROLL = display a scrollbar
SD_ALERT_SELECT_MULTI = forces selection box display (instead of
buttons) allows the user to select multiple
choices.
SD_ALERT_LINKS = display each choice as a plain text link.
Any selection box style overrides this flag.
SD_ALERT_NOVALIDATE = don't validate responses
Default value: SD_ALERT_SCROLL
(button display with scroll bar, validate responses)
RETURNS
The text of the selected button, or null if the alert duration expired
without a button click.
Version 1 changes (from version 0):
* Added the tag, select, and flags arguments, thanks to several suggestions from Foomer.
* Split the sd_Alert/Alert() proc into New(), Display(), and Response() to allow more
customization by developers. Primarily developers would want to use Display() to change
the display of active tagged windows
*/
#define SD_ALERT_SCROLL 1
#define SD_ALERT_SELECT_MULTI 2
#define SD_ALERT_LINKS 4
#define SD_ALERT_NOVALIDATE 8
proc/sd_Alert(client/who, message, title, buttons = list("Ok"), default, duration = 0, unfocus = 1, size = "300x200", table = "width=100% height=100%", style, tag, select, flags = SD_ALERT_SCROLL)
if(ismob(who))
var/mob/M = who
who = M.client
if(!istype(who))
CRASH("sd_Alert: Invalid target:[who] (\ref[who])")
var/sd_alert/T = locate(tag)
if(T)
if(istype(T))
qdel(T)
T = null
else
CRASH("sd_Alert: tag \"[tag]\" is already in use by datum '[T]' (type: [T.type])")
T = new(who, tag)
if(duration)
spawn(duration)
if(T)
qdel(T)
T = null
return
T.Display(message,title,buttons,default,unfocus,size,table,style,select,flags)
. = T.Response()
sd_alert
var/client/target
var/response
var/list/validation
sd_alert/Del()
target << browse(null,"window=\ref[src]")
..()
sd_alert/New(who, tag)
..()
target = who
src.tag = tag
sd_alert/Topic(href,params[])
if(usr.client != target)
return
response = params["clk"]
sd_alert/proc/Display(message,title,list/buttons,default,unfocus,size,table,style,select,flags)
if(unfocus)
spawn() target << browse(null,null)
if(istext(buttons))
buttons = list(buttons)
if(!default)
default = buttons[1]
if(!(flags & SD_ALERT_NOVALIDATE))
validation = buttons.Copy()
var/html = {"<head><title>[title]</title>[style]<script>\
function c(x) {document.location.href='BYOND://?src=\ref[src];'+x;}\
</script></head><body onLoad="fcs.focus();"\
[(flags&SD_ALERT_SCROLL)?"":" scroll=no"]><table [table]><tr>\
<td>[message]</td></tr><tr><th>"}
if(select || (flags & SD_ALERT_SELECT_MULTI)) // select style choices
html += {"<FORM ID=fcs ACTION='BYOND://?' METHOD=GET>\
<INPUT TYPE=HIDDEN NAME=src VALUE='\ref[src]'>
<SELECT NAME=clk SIZE=[select]\
[(flags & SD_ALERT_SELECT_MULTI)?" MULTIPLE":""]>"}
for(var/b in buttons)
html += "<OPTION[(b == default)?" SELECTED":""]>\
[html_encode(b)]</OPTION>"
html += "</SELECT><BR><INPUT TYPE=SUBMIT VALUE=Submit></FORM>"
else if(flags & SD_ALERT_LINKS) // text link style
for(var/b in buttons)
var/list/L = list()
L["clk"] = b
var/html_string=list2params(L)
var/focus
if(b == default)
focus = " ID=fcs"
html += "<A[focus] href=# onClick=\"c('[html_string]')\">[html_encode(b)]</A>\
<BR>"
else // button style choices
for(var/b in buttons)
var/list/L = list()
L["clk"] = b
var/html_string=list2params(L)
var/focus
if(b == default)
focus = " ID=fcs"
html += "<INPUT[focus] TYPE=button VALUE='[html_encode(b)]' \
onClick=\"c('[html_string]')\"> "
html += "</th></tr></table></body>"
target << browse(html,"window=\ref[src];size=[size];can_close=0")
sd_alert/proc/Response()
var/validated
while(!validated)
while(target && !response) // wait for a response
sleep(2)
if(response && validation)
if(istype(response, /list))
var/list/L = response - validation
if(L.len)
response = null
else
validated = 1
else if(response in validation)
validated = 1
else
response=null
else
validated = 1
spawn(2) qdel(src)
return response

View File

@@ -96,7 +96,7 @@
log_game("SQL ERROR during death reporting. Error : \[[err]\]\n")
qdel(query)
proc/statistic_cycle()
/proc/statistic_cycle()
if(!sqllogging)
return
while(1)
@@ -106,7 +106,7 @@ proc/statistic_cycle()
sleep(6000) // Poll every ten minutes
//This proc is used for feedback. It is executed at round end.
proc/sql_commit_feedback()
/proc/sql_commit_feedback()
if(!blackbox)
log_game("Round ended without a blackbox recorder. No feedback was sent to the database.")
return

View File

@@ -100,7 +100,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
/*I am far too lazy to make it a proper list of areas so I'll just make it run the usual telepot routine at the start of the game*/
var/list/teleportlocs = list()
proc/process_teleport_locs()
/proc/process_teleport_locs()
for(var/area/AR in areas)
if(istype(AR, /area/shuttle) || istype(AR, /area/wizard_station))
continue
@@ -115,7 +115,7 @@ proc/process_teleport_locs()
var/list/ghostteleportlocs = list()
proc/process_ghost_teleport_locs()
/proc/process_ghost_teleport_locs()
for(var/area/AR in areas)
if(ghostteleportlocs.Find(AR.name))
continue
@@ -131,7 +131,7 @@ proc/process_ghost_teleport_locs()
var/global/list/adminbusteleportlocs = list()
proc/process_adminbus_teleport_locs()
/proc/process_adminbus_teleport_locs()
for(var/area/AR in areas)
if(adminbusteleportlocs.Find(AR.name))
continue

View File

@@ -29,7 +29,7 @@ proc/admin_spawn_room_at_pos()
return
*/
proc/check_complex_placement(var/turf/T,var/size_x,var/size_y,var/ignore_walls=0)
/proc/check_complex_placement(var/turf/T,var/size_x,var/size_y,var/ignore_walls=0)
var/list/surroundings = list()
surroundings |= range(7, locate(T.x,T.y,T.z))
@@ -46,7 +46,7 @@ proc/check_complex_placement(var/turf/T,var/size_x,var/size_y,var/ignore_walls=0
return 1
proc/make_mining_asteroid_secret()
/proc/make_mining_asteroid_secret()
var/turf/T = null
var/sanity = 0
var/list/turfs = null

View File

@@ -3,7 +3,7 @@ Use the regular_hud_updates() proc before process_med_hud(mob) or process_sec_hu
the HUD updates properly! */
//Deletes the current HUD images so they can be refreshed with new ones.
mob/proc/regular_hud_updates() //Used in the life.dm of mobs that can use HUDs.
/mob/proc/regular_hud_updates() //Used in the life.dm of mobs that can use HUDs.
if(client)
for(var/image/hud in client.images)
if(findtext(hud.icon_state, "hud", 1, 4))
@@ -14,7 +14,7 @@ mob/proc/regular_hud_updates() //Used in the life.dm of mobs that can use HUDs.
sec_hud_users -= src
diagnostic_hud_users -= src
proc/check_HUD_visibility(var/atom/target, var/mob/user)
/proc/check_HUD_visibility(var/atom/target, var/mob/user)
if (user in confusion_victims)
return FALSE
if(user.see_invisible < target.invisibility)
@@ -34,7 +34,7 @@ proc/check_HUD_visibility(var/atom/target, var/mob/user)
return TRUE
//Medical HUD outputs. Called by the Life() proc of the mob using it, usually.
proc/process_med_hud(var/mob/M, var/mob/eye)
/proc/process_med_hud(var/mob/M, var/mob/eye)
if(!M)
return
if(!M.client)
@@ -150,7 +150,7 @@ proc/process_med_hud(var/mob/M, var/mob/eye)
//Security HUDs. Pass a value for the second argument to enable implant viewing or other special features.
proc/process_sec_hud(var/mob/M, var/advanced_mode,var/mob/eye)
/proc/process_sec_hud(var/mob/M, var/advanced_mode,var/mob/eye)
if(!M)
return
if(!M.client)
@@ -312,7 +312,7 @@ proc/process_sec_hud(var/mob/M, var/advanced_mode,var/mob/eye)
see_invisible = SEE_INVISIBLE_LIVING
//Artificer HUD
proc/process_construct_hud(var/mob/M, var/mob/eye)
/proc/process_construct_hud(var/mob/M, var/mob/eye)
if(!M)
return
if(!M.client)

View File

@@ -206,7 +206,7 @@
if(T)
. += power_list(T, src, turn(dir, 180), powernetless_only)
obj/structure/cable/powercreeper/mergeConnectedNetworks(var/direction)
/obj/structure/cable/powercreeper/mergeConnectedNetworks(var/direction)
var/turf/TB = get_step(src, direction)
for(var/obj/structure/cable/C in TB)

View File

@@ -48,7 +48,7 @@ var/global/list/banned_sandbox_types=list(
// /obj/item/weapon/gun/energy/staff
)
proc/is_banned_type(typepath)
/proc/is_banned_type(typepath)
for(var/btype in banned_sandbox_types)
if(findtext("[typepath]", "[btype]")!=0)
return 1
@@ -90,11 +90,11 @@ proc/is_banned_type(typepath)
//send2adminirc("\[SANDBOX\] [key_name(usr)] spawned [chosen] at ([usr.x],[usr.y],[usr.z])")
feedback_add_details("admin_verb","hSBSA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
datum/hSB
/datum/hSB
var/owner = null
var/admin = 0
datum/hSB/proc/update()
/datum/hSB/proc/update()
var/hsbpanel = "<center><b>h_Sandbox Panel</b></center><hr>"
if(admin)
@@ -107,7 +107,7 @@ datum/hSB/proc/update()
hsbpanel += "- <a href=\"?\ref[src];hsb=hsbobj\">Spawn Object</a><br><br>"
usr << browse(hsbpanel, "window=hsbpanel")
datum/hSB/Topic(href, href_list)
/datum/hSB/Topic(href, href_list)
if(!(src.owner == usr.ckey))
return
if(!usr)

View File

@@ -482,7 +482,7 @@ var/global/list/all_jobs
return list("VIP Guest","Custodian","Thunderdome Overseer","Intel Officer","Medical Officer","Death Commando","Research Officer","BlackOps Commander","Supreme Commander")
proc/FindNameFromID(var/mob/living/carbon/human/H)
/proc/FindNameFromID(var/mob/living/carbon/human/H)
ASSERT(istype(H))
var/obj/item/weapon/card/id/C = H.get_active_hand()
if( istype(C) || istype(C, /obj/item/device/pda) )
@@ -511,5 +511,5 @@ proc/FindNameFromID(var/mob/living/carbon/human/H)
if(ID)
return ID.registered_name
proc/get_all_job_icons() //For all existing HUD icons
/proc/get_all_job_icons() //For all existing HUD icons
return get_all_jobs() + list("Prisoner", "visitor")

View File

@@ -49,7 +49,7 @@
outfit_datum = /datum/outfit/xenoarchaeologist
datum/job/xenobiologist
/datum/job/xenobiologist
title = "Xenobiologist"
faction = "Station"
total_positions = 2

View File

@@ -23,12 +23,6 @@
light_color = LIGHT_COLOR_CYAN
light_range_on = 3
light_power_on = 2
power_change()
..()
if(!(stat & (BROKEN|NOPOWER)) && occupant)
set_light(light_range_on, light_power_on)
else
set_light(0)
var/on = FALSE
var/target_time = 0
var/setting
@@ -38,6 +32,13 @@
var/cools = 0
var/works_in_crit = FALSE //Will it let you inject chemicals into people in critical condition
/obj/machinery/sleeper/power_change()
..()
if(!(stat & (BROKEN|NOPOWER)) && occupant)
set_light(light_range_on, light_power_on)
else
set_light(0)
/obj/machinery/sleeper/New()
..()
if(map.nameShort == "deff")

View File

@@ -98,7 +98,7 @@
send_status()
obj/machinery/door/airlock/proc/send_status()
/obj/machinery/door/airlock/proc/send_status()
if(radio_connection)
var/datum/signal/signal = new /datum/signal
signal.transmission_method = 1 //radio signal
@@ -111,19 +111,19 @@ obj/machinery/door/airlock/proc/send_status()
radio_connection.post_signal(src, signal, range = AIRLOCK_CONTROL_RANGE, filter = RADIO_AIRLOCK)
obj/machinery/door/airlock/open(surpress_send)
/obj/machinery/door/airlock/open(surpress_send)
. = ..()
if(!surpress_send)
send_status()
obj/machinery/door/airlock/close(surpress_send)
/obj/machinery/door/airlock/close(surpress_send)
. = ..()
if(!surpress_send)
send_status()
obj/machinery/door/airlock/Bumped(atom/AM)
/obj/machinery/door/airlock/Bumped(atom/AM)
..(AM)
if(istype(AM, /obj/mecha))
var/obj/mecha/mecha = AM
@@ -141,7 +141,7 @@ obj/machinery/door/airlock/Bumped(atom/AM)
radio_connection.post_signal(src, signal, range = AIRLOCK_CONTROL_RANGE, filter = RADIO_AIRLOCK)
return
obj/machinery/door/airlock/proc/set_frequency(new_frequency)
/obj/machinery/door/airlock/proc/set_frequency(new_frequency)
radio_controller.remove_object(src, frequency)
if(new_frequency)
frequency = new_frequency

View File

@@ -76,12 +76,12 @@
/obj/machinery/portable_atmospherics/scrubber/huge/stationary
name = "Stationary Air Scrubber"
attackby(var/obj/item/weapon/W as obj, var/mob/user as mob)
if(W.is_wrench(user))
to_chat(user, "<span class='notice'>The bolts are too tight for you to unscrew!</span>")
return
/obj/machinery/portable_atmospherics/scrubber/huge/stationary/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob)
if(W.is_wrench(user))
to_chat(user, "<span class='notice'>The bolts are too tight for you to unscrew!</span>")
return
..()
..()
/obj/machinery/portable_atmospherics/scrubber/update_icon()

View File

@@ -7,62 +7,61 @@
light_color = LIGHT_COLOR_CYAN
attackby(var/obj/item/weapon/card/W as obj, var/mob/user as mob)
if(stat & (BROKEN|NOPOWER))
return
..()
if ((!( istype(W, /obj/item/weapon/card) ) || !( ticker ) || emergency_shuttle.location != 1 || !( user )))
return
if (istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda))
if (istype(W, /obj/item/device/pda))
var/obj/item/device/pda/pda = W
W = pda.id
if (!W:access) //no access
to_chat(user, "The access level of [W:registered_name]\'s card is not high enough. ")
return
var/list/cardaccess = W:access
if(!istype(cardaccess, /list) || !cardaccess.len) //no access
to_chat(user, "The access level of [W:registered_name]\'s card is not high enough. ")
return
if(!(access_heads in W:access)) //doesn't have this access
to_chat(user, "The access level of [W:registered_name]\'s card is not high enough. ")
return 0
var/choice = alert(user, text("Would you like to (un)authorize a shortened launch time? [] authorization\s are still needed. Use abort to cancel all authorizations.", src.auth_need - src.authorized.len), "Shuttle Launch", "Authorize", "Repeal", "Abort")
if(emergency_shuttle.location != 1 && user.get_active_hand() != W)
return 0
switch(choice)
if("Authorize")
if(!emergency_shuttle.location == 1)
return
src.authorized -= W:registered_name
src.authorized += W:registered_name
if (src.auth_need - src.authorized.len > 0)
message_admins("[key_name_admin(user)] has authorized early shuttle launch")
log_game("[user.ckey] has authorized early shuttle launch")
to_chat(world, text("<span class='notice'><B>Alert: [] authorizations needed until shuttle is launched early</B></span>", src.auth_need - src.authorized.len))
else
message_admins("[key_name_admin(user)] has launched the shuttle")
log_game("[user.ckey] has launched the shuttle early")
to_chat(world, "<span class='notice'><B>Alert: Shuttle launch time shortened to 10 seconds!</B></span>")
emergency_shuttle.online = 1
emergency_shuttle.settimeleft(10)
emergency_shuttle.was_early_launched = TRUE
//src.authorized = null
del(src.authorized)
src.authorized = list( )
if("Repeal")
src.authorized -= W:registered_name
to_chat(world, text("<span class='notice'><B>Alert: [] authorizations needed until shuttle is launched early</B></span>", src.auth_need - src.authorized.len))
if("Abort")
to_chat(world, "<span class='notice'><B>All authorizations to shortening time for shuttle launch have been revoked!</B></span>")
src.authorized.len = 0
src.authorized = list( )
/obj/machinery/computer/shuttle/attackby(var/obj/item/weapon/card/W as obj, var/mob/user as mob)
if(stat & (BROKEN|NOPOWER))
return
..()
if ((!( istype(W, /obj/item/weapon/card) ) || !( ticker ) || emergency_shuttle.location != 1 || !( user )))
return
if (istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda))
if (istype(W, /obj/item/device/pda))
var/obj/item/device/pda/pda = W
W = pda.id
if (!W:access) //no access
to_chat(user, "The access level of [W:registered_name]\'s card is not high enough. ")
return
var/list/cardaccess = W:access
if(!istype(cardaccess, /list) || !cardaccess.len) //no access
to_chat(user, "The access level of [W:registered_name]\'s card is not high enough. ")
return
if(!(access_heads in W:access)) //doesn't have this access
to_chat(user, "The access level of [W:registered_name]\'s card is not high enough. ")
return 0
var/choice = alert(user, text("Would you like to (un)authorize a shortened launch time? [] authorization\s are still needed. Use abort to cancel all authorizations.", src.auth_need - src.authorized.len), "Shuttle Launch", "Authorize", "Repeal", "Abort")
if(emergency_shuttle.location != 1 && user.get_active_hand() != W)
return 0
switch(choice)
if("Authorize")
if(!emergency_shuttle.location == 1)
return
src.authorized -= W:registered_name
src.authorized += W:registered_name
if (src.auth_need - src.authorized.len > 0)
message_admins("[key_name_admin(user)] has authorized early shuttle launch")
log_game("[user.ckey] has authorized early shuttle launch")
to_chat(world, text("<span class='notice'><B>Alert: [] authorizations needed until shuttle is launched early</B></span>", src.auth_need - src.authorized.len))
else
message_admins("[key_name_admin(user)] has launched the shuttle")
log_game("[user.ckey] has launched the shuttle early")
to_chat(world, "<span class='notice'><B>Alert: Shuttle launch time shortened to 10 seconds!</B></span>")
emergency_shuttle.online = 1
emergency_shuttle.settimeleft(10)
emergency_shuttle.was_early_launched = TRUE
//src.authorized = null
del(src.authorized)
src.authorized = list( )
if("Repeal")
src.authorized -= W:registered_name
to_chat(world, text("<span class='notice'><B>Alert: [] authorizations needed until shuttle is launched early</B></span>", src.auth_need - src.authorized.len))
if("Abort")
to_chat(world, "<span class='notice'><B>All authorizations to shortening time for shuttle launch have been revoked!</B></span>")
src.authorized.len = 0
src.authorized = list( )
/obj/machinery/computer/shuttle/emag(mob/user as mob)
if(!emagged)

View File

@@ -452,7 +452,7 @@ to destroy them and players will be able to make replacements.
icon_state = "door_electronics"
//origin_tech = Tc_PROGRAMMING + "=2"
obj/item/weapon/circuitboard/rdserver
/obj/item/weapon/circuitboard/rdserver
name = "Circuit Board (R&D Server)"
desc = "A circuit board used to run a R&D server."
build_path = /obj/machinery/r_n_d/server
@@ -1428,7 +1428,7 @@ obj/item/weapon/circuitboard/rdserver
/obj/item/weapon/stock_parts/capacitor = 2,
/obj/item/weapon/stock_parts/micro_laser = 3,
/obj/item/weapon/stock_parts/console_screen = 1)
/obj/item/weapon/circuitboard/cooking/candy
name = "circuit board (candy machine)"
desc = "A circuit board for a candy machine."
@@ -1438,7 +1438,7 @@ obj/item/weapon/circuitboard/rdserver
req_components = list(
/obj/item/weapon/stock_parts/manipulator = 3,
/obj/item/weapon/stock_parts/console_screen = 1) //boring recipe I know, but they're very simple machines
/obj/item/weapon/circuitboard/cooking/cerealmaker
name = "circuit board (cereal maker)"
desc = "A circuit board for a cereal maker."

View File

@@ -1,4 +1,4 @@
obj/machinery/recharger/defibcharger/wallcharger // obj/machinery/recharger/defibcharger define doesn't exist, don't bother trying to look for it
/obj/machinery/recharger/defibcharger/wallcharger // obj/machinery/recharger/defibcharger define doesn't exist, don't bother trying to look for it
name = "defibrillator recharger"
desc = "A special wall-mounted recharger used to recharge defibrillators."
icon = 'icons/obj/stationobjs.dmi'
@@ -29,7 +29,7 @@ obj/machinery/recharger/defibcharger/wallcharger // obj/machinery/recharger/defi
RefreshParts()
obj/machinery/recharger/defibcharger/wallcharger/attack_hand(mob/user as mob)
/obj/machinery/recharger/defibcharger/wallcharger/attack_hand(mob/user as mob)
add_fingerprint(user)
if(charging)
@@ -39,10 +39,10 @@ obj/machinery/recharger/defibcharger/wallcharger/attack_hand(mob/user as mob)
use_power = 1
update_icon()
obj/machinery/recharger/defibcharger/wallcharger/attack_paw(mob/user as mob)
/obj/machinery/recharger/defibcharger/wallcharger/attack_paw(mob/user as mob)
return attack_hand(user)
obj/machinery/recharger/defibcharger/wallcharger/emp_act(severity)
/obj/machinery/recharger/defibcharger/wallcharger/emp_act(severity)
if(stat & (NOPOWER|BROKEN) || !anchored)
..(severity)
return
@@ -52,7 +52,7 @@ obj/machinery/recharger/defibcharger/wallcharger/emp_act(severity)
B.charges = 0
..(severity)
obj/machinery/recharger/defibcharger/wallcharger/update_icon() //we have an update_icon() in addition to the stuff in process to make it feel a tiny bit snappier.
/obj/machinery/recharger/defibcharger/wallcharger/update_icon() //we have an update_icon() in addition to the stuff in process to make it feel a tiny bit snappier.
if(charging)
icon_state = "wrecharger1"
else
@@ -60,7 +60,7 @@ obj/machinery/recharger/defibcharger/wallcharger/update_icon() //we have an upda
obj/machinery/recharger/defibcharger/wallcharger/process()
/obj/machinery/recharger/defibcharger/wallcharger/process()
if(stat & (NOPOWER|BROKEN) || !anchored)
return
@@ -91,7 +91,7 @@ obj/machinery/recharger/defibcharger/wallcharger/process()
return TRUE
return FALSE
obj/machinery/recharger/defibcharger/wallcharger/attackby(obj/item/weapon/G as obj, mob/user as mob)
/obj/machinery/recharger/defibcharger/wallcharger/attackby(obj/item/weapon/G as obj, mob/user as mob)
if(istype(G, /obj/item/weapon/melee/defibrillator))
if(..())
return

View File

@@ -152,9 +152,9 @@
/obj/machinery/door/mineral/transparent
opacity = 0
close()
..()
opacity = 0
/obj/machinery/door/mineral/transparent/close()
..()
opacity = 0
/obj/machinery/door/mineral/transparent/plasma
prefix = "plasma"

View File

@@ -2,24 +2,24 @@
/obj/machinery/embedded_controller/radio/advanced_airlock_controller
name = "Advanced Airlock Controller"
multitool_menu(var/mob/user, var/obj/item/device/multitool/P)
return {"
<ul>
<li><b>Frequency:</b> <a href="?src=\ref[src];set_freq=-1">[format_frequency(frequency)] GHz</a> (<a href="?src=\ref[src];set_freq=[1449]">Reset</a>)</li>
<li>[format_tag("ID Tag","id_tag")]</li>
<li>[format_tag("Pump ID","tag_airpump")]</li>
</ul>
<b>Doors:</b>
<ul>
<li>[format_tag("Exterior","tag_exterior_door")]</li>
<li>[format_tag("Interior","tag_interior_door")]</li>
</ul>
<b>Sensors:</b>
<ul>
<li>[format_tag("Chamber","tag_chamber_sensor")]</li>
<li>[format_tag("Interior","tag_interior_sensor")]</li>
<li>[format_tag("Exterior","tag_exterior_sensor")]</li>
</ul>"}
/obj/machinery/embedded_controller/radio/advanced_airlock_controller/multitool_menu(var/mob/user, var/obj/item/device/multitool/P)
return {"
<ul>
<li><b>Frequency:</b> <a href="?src=\ref[src];set_freq=-1">[format_frequency(frequency)] GHz</a> (<a href="?src=\ref[src];set_freq=[1449]">Reset</a>)</li>
<li>[format_tag("ID Tag","id_tag")]</li>
<li>[format_tag("Pump ID","tag_airpump")]</li>
</ul>
<b>Doors:</b>
<ul>
<li>[format_tag("Exterior","tag_exterior_door")]</li>
<li>[format_tag("Interior","tag_interior_door")]</li>
</ul>
<b>Sensors:</b>
<ul>
<li>[format_tag("Chamber","tag_chamber_sensor")]</li>
<li>[format_tag("Interior","tag_interior_sensor")]</li>
<li>[format_tag("Exterior","tag_exterior_sensor")]</li>
</ul>"}
/obj/machinery/embedded_controller/radio/advanced_airlock_controller/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open=NANOUI_FOCUS)
if(!program)//we need to initialize the controller to get a program
@@ -192,22 +192,22 @@
name = "Airlock Controller"
tag_secure = 1
multitool_menu(var/mob/user, var/obj/item/device/multitool/P)
return {"
<ul>
<li><b>Frequency:</b> <a href="?src=\ref[src];set_freq=-1">[format_frequency(frequency)] GHz</a> (<a href="?src=\ref[src];set_freq=[1449]">Reset</a>)</li>
<li>[format_tag("ID Tag","id_tag")]</li>
<li>[format_tag("Pump ID","tag_airpump")]</li>
</ul>
<b>Doors:</b>
<ul>
<li>[format_tag("Exterior","tag_exterior_door")]</li>
<li>[format_tag("Interior","tag_interior_door")]</li>
</ul>
<b>Sensors:</b>
<ul>
<li>[format_tag("Chamber","tag_chamber_sensor")]</li>
</ul>"}
/obj/machinery/embedded_controller/radio/airlock_controller/multitool_menu(var/mob/user, var/obj/item/device/multitool/P)
return {"
<ul>
<li><b>Frequency:</b> <a href="?src=\ref[src];set_freq=-1">[format_frequency(frequency)] GHz</a> (<a href="?src=\ref[src];set_freq=[1449]">Reset</a>)</li>
<li>[format_tag("ID Tag","id_tag")]</li>
<li>[format_tag("Pump ID","tag_airpump")]</li>
</ul>
<b>Doors:</b>
<ul>
<li>[format_tag("Exterior","tag_exterior_door")]</li>
<li>[format_tag("Interior","tag_interior_door")]</li>
</ul>
<b>Sensors:</b>
<ul>
<li>[format_tag("Chamber","tag_chamber_sensor")]</li>
</ul>"}
/obj/machinery/embedded_controller/radio/airlock_controller/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open=NANOUI_FOCUS)
if(!program)//we need to initialize the controller to get a program
@@ -355,17 +355,17 @@
name = "Access Controller"
tag_secure = 1
multitool_menu(var/mob/user, var/obj/item/device/multitool/P)
return {"
<ul>
<li><b>Frequency:</b> <a href="?src=\ref[src];set_freq=-1">[format_frequency(frequency)] GHz</a> (<a href="?src=\ref[src];set_freq=[1449]">Reset</a>)</li>
<li>[format_tag("ID Tag","id_tag")]</li>
</ul>
<b>Doors:</b>
<ul>
<li>[format_tag("Exterior","tag_exterior_door")]</a></li>
<li>[format_tag("Interior","tag_interior_door")]</a></li>
</ul>"}
/obj/machinery/embedded_controller/radio/access_controller/multitool_menu(var/mob/user, var/obj/item/device/multitool/P)
return {"
<ul>
<li><b>Frequency:</b> <a href="?src=\ref[src];set_freq=-1">[format_frequency(frequency)] GHz</a> (<a href="?src=\ref[src];set_freq=[1449]">Reset</a>)</li>
<li>[format_tag("ID Tag","id_tag")]</li>
</ul>
<b>Doors:</b>
<ul>
<li>[format_tag("Exterior","tag_exterior_door")]</a></li>
<li>[format_tag("Interior","tag_interior_door")]</a></li>
</ul>"}
/obj/machinery/embedded_controller/radio/access_controller/update_icon()
@@ -476,17 +476,17 @@
name = "Pressure Regulator"
tag_secure = 1
multitool_menu(var/mob/user, var/obj/item/device/multitool/P)
return {"
<ul>
<li><b>Frequency:</b> <a href="?src=\ref[src];set_freq=-1">[format_frequency(frequency)] GHz</a> (<a href="?src=\ref[src];set_freq=[1449]">Reset</a>)</li>
<li>[format_tag("ID Tag","id_tag")]</li>
<li>[format_tag("Pump ID","tag_airpump")]</li>
</ul>
<b>Sensors:</b>
<ul>
<li>[format_tag("Chamber","tag_chamber_sensor")]</li>
</ul>"}
/obj/machinery/embedded_controller/radio/pressure_regulator/multitool_menu(var/mob/user, var/obj/item/device/multitool/P)
return {"
<ul>
<li><b>Frequency:</b> <a href="?src=\ref[src];set_freq=-1">[format_frequency(frequency)] GHz</a> (<a href="?src=\ref[src];set_freq=[1449]">Reset</a>)</li>
<li>[format_tag("ID Tag","id_tag")]</li>
<li>[format_tag("Pump ID","tag_airpump")]</li>
</ul>
<b>Sensors:</b>
<ul>
<li>[format_tag("Chamber","tag_chamber_sensor")]</li>
</ul>"}
/obj/machinery/embedded_controller/radio/pressure_regulator/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open=NANOUI_FOCUS)
if(!program)//we need to initialize the controller to get a program

View File

@@ -26,7 +26,7 @@
/********************************************************************
** Adding Stock Parts to VV so preconstructed shit has its candy **
********************************************************************/
obj/machinery/gibber/New()
/obj/machinery/gibber/New()
. = ..()
component_parts = newlist(

View File

@@ -1251,7 +1251,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
attack_self(loc)
obj/item/weapon/newspaper/attackby(obj/item/weapon/W as obj, mob/user as mob)
/obj/item/weapon/newspaper/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W, /obj/item/weapon/pen))
if(scribble_page == curr_page)
to_chat(user, "<span class='notice'>There's already a scribble in this page... You wouldn't want to make things too cluttered, would you?</span>")

View File

@@ -344,13 +344,13 @@
return
proc/getr(col)
/proc/getr(col)
return hex2num( copytext(col, 2,4))
proc/getg(col)
/proc/getg(col)
return hex2num( copytext(col, 4,6))
proc/getb(col)
/proc/getb(col)
return hex2num( copytext(col, 6))

View File

@@ -146,20 +146,12 @@
squeak = 0
return result
obj/mecha/combat/honker/Topic(href, href_list)
/obj/mecha/combat/honker/Topic(href, href_list)
..()
if (href_list["play_sound"])
switch(href_list["play_sound"])
if("sadtrombone")
playsound(src, 'sound/misc/sadtrombone.ogg', 50)
return
proc/rand_hex_color()
var/list/colors = list("0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f")
var/color=""
for (var/i=0;i<6;i++)
color = color+pick(colors)
return color
/obj/mecha/combat/honker/startMechWalking()
icon_state = initial_icon + "-move"

View File

@@ -2156,92 +2156,88 @@
/datum/global_iterator/mecha_preserve_temp //normalizing cabin air temperature to 20 degrees celsium
delay = 20
process(var/obj/mecha/mecha)
if(mecha.cabin_air && mecha.cabin_air.return_volume() > 0)
var/delta = mecha.cabin_air.temperature - T20C
mecha.cabin_air.temperature -= max(-10, min(10, round(delta/4,0.1)))
return
/datum/global_iterator/mecha_preserve_temp/process(var/obj/mecha/mecha)
if(mecha.cabin_air && mecha.cabin_air.return_volume() > 0)
var/delta = mecha.cabin_air.temperature - T20C
mecha.cabin_air.temperature -= max(-10, min(10, round(delta/4,0.1)))
/datum/global_iterator/mecha_tank_give_air
delay = 15
process(var/obj/mecha/mecha)
if(mecha.internal_tank)
var/datum/gas_mixture/tank_air = mecha.internal_tank.return_air()
var/datum/gas_mixture/cabin_air = mecha.cabin_air
/datum/global_iterator/mecha_tank_give_air/process(var/obj/mecha/mecha)
if(mecha.internal_tank)
var/datum/gas_mixture/tank_air = mecha.internal_tank.return_air()
var/datum/gas_mixture/cabin_air = mecha.cabin_air
var/release_pressure = mecha.internal_tank_valve
var/cabin_pressure = cabin_air.return_pressure()
var/pressure_delta = min(release_pressure - cabin_pressure, (tank_air.return_pressure() - cabin_pressure)/2)
var/transfer_moles = 0
if(pressure_delta > 0) //cabin pressure lower than release pressure
if(tank_air.return_temperature() > 0)
transfer_moles = pressure_delta * cabin_air.return_volume() / (cabin_air.return_temperature() * R_IDEAL_GAS_EQUATION)
var/datum/gas_mixture/removed = tank_air.remove(transfer_moles)
cabin_air.merge(removed)
else if(pressure_delta < 0) //cabin pressure higher than release pressure
var/datum/gas_mixture/t_air = mecha.get_turf_air()
pressure_delta = cabin_pressure - release_pressure
var/release_pressure = mecha.internal_tank_valve
var/cabin_pressure = cabin_air.return_pressure()
var/pressure_delta = min(release_pressure - cabin_pressure, (tank_air.return_pressure() - cabin_pressure)/2)
var/transfer_moles = 0
if(pressure_delta > 0) //cabin pressure lower than release pressure
if(tank_air.return_temperature() > 0)
transfer_moles = pressure_delta * cabin_air.return_volume() / (cabin_air.return_temperature() * R_IDEAL_GAS_EQUATION)
var/datum/gas_mixture/removed = tank_air.remove(transfer_moles)
cabin_air.merge(removed)
else if(pressure_delta < 0) //cabin pressure higher than release pressure
var/datum/gas_mixture/t_air = mecha.get_turf_air()
pressure_delta = cabin_pressure - release_pressure
if(t_air)
pressure_delta = min(cabin_pressure - t_air.return_pressure(), pressure_delta)
if(pressure_delta > 0) //if location pressure is lower than cabin pressure
transfer_moles = pressure_delta * cabin_air.return_volume() / (cabin_air.return_temperature() * R_IDEAL_GAS_EQUATION)
var/datum/gas_mixture/removed = cabin_air.remove(transfer_moles)
if(t_air)
pressure_delta = min(cabin_pressure - t_air.return_pressure(), pressure_delta)
if(pressure_delta > 0) //if location pressure is lower than cabin pressure
transfer_moles = pressure_delta * cabin_air.return_volume() / (cabin_air.return_temperature() * R_IDEAL_GAS_EQUATION)
var/datum/gas_mixture/removed = cabin_air.remove(transfer_moles)
if(t_air)
t_air.merge(removed)
else //just delete the cabin gas, we're in space or some shit
qdel(removed)
removed = null
else
return stop()
return
t_air.merge(removed)
else //just delete the cabin gas, we're in space or some shit
qdel(removed)
removed = null
else
return stop()
/datum/global_iterator/mecha_intertial_movement //inertial movement in space
delay = 7
process(var/obj/mecha/mecha as obj,direction)
if(direction)
if(!step(mecha, direction)||mecha.check_for_support())
src.stop()
else
/datum/global_iterator/mecha_intertial_movement/process(var/obj/mecha/mecha as obj,direction)
if(direction)
if(!step(mecha, direction)||mecha.check_for_support())
src.stop()
return
else
src.stop()
/datum/global_iterator/mecha_internal_damage // processing internal damage
process(var/obj/mecha/mecha)
if(!mecha.hasInternalDamage())
return stop()
if(mecha.hasInternalDamage(MECHA_INT_FIRE))
if(!mecha.hasInternalDamage(MECHA_INT_TEMP_CONTROL) && prob(5))
mecha.clearInternalDamage(MECHA_INT_FIRE)
if(mecha.internal_tank)
if(mecha.internal_tank.return_pressure()>mecha.internal_tank.maximum_pressure && !(mecha.hasInternalDamage(MECHA_INT_TANK_BREACH)))
mecha.setInternalDamage(MECHA_INT_TANK_BREACH)
var/datum/gas_mixture/int_tank_air = mecha.internal_tank.return_air()
if(int_tank_air && int_tank_air.return_volume()>0) //heat the air_contents
int_tank_air.temperature = min(6000+T0C, int_tank_air.temperature+rand(10,15))
if(mecha.cabin_air && mecha.cabin_air.return_volume()>0)
mecha.cabin_air.temperature = min(6000+T0C, mecha.cabin_air.return_temperature()+rand(10,15))
if(mecha.cabin_air.return_temperature()>mecha.max_temperature/2)
mecha.take_damage(4/round(mecha.max_temperature/mecha.cabin_air.return_temperature(),0.1),"fire")
if(mecha.hasInternalDamage(MECHA_INT_TEMP_CONTROL)) //stop the mecha_preserve_temp loop datum
mecha.pr_int_temp_processor.stop()
if(mecha.hasInternalDamage(MECHA_INT_TANK_BREACH)) //remove some air from internal tank
if(mecha.internal_tank)
var/datum/gas_mixture/int_tank_air = mecha.internal_tank.return_air()
var/datum/gas_mixture/leaked_gas = int_tank_air.remove_ratio(0.10)
if(mecha.loc && hascall(mecha.loc,"assume_air"))
mecha.loc.assume_air(leaked_gas)
else
qdel(leaked_gas)
leaked_gas = null
if(mecha.hasInternalDamage(MECHA_INT_SHORT_CIRCUIT))
if(mecha.get_charge())
spark(mecha, 2, FALSE)
mecha.cell.charge -= min(20,mecha.cell.charge)
mecha.cell.maxcharge -= min(20,mecha.cell.maxcharge)
return
/datum/global_iterator/mecha_internal_damage/process(var/obj/mecha/mecha)
if(!mecha.hasInternalDamage())
return stop()
if(mecha.hasInternalDamage(MECHA_INT_FIRE))
if(!mecha.hasInternalDamage(MECHA_INT_TEMP_CONTROL) && prob(5))
mecha.clearInternalDamage(MECHA_INT_FIRE)
if(mecha.internal_tank)
if(mecha.internal_tank.return_pressure()>mecha.internal_tank.maximum_pressure && !(mecha.hasInternalDamage(MECHA_INT_TANK_BREACH)))
mecha.setInternalDamage(MECHA_INT_TANK_BREACH)
var/datum/gas_mixture/int_tank_air = mecha.internal_tank.return_air()
if(int_tank_air && int_tank_air.return_volume()>0) //heat the air_contents
int_tank_air.temperature = min(6000+T0C, int_tank_air.temperature+rand(10,15))
if(mecha.cabin_air && mecha.cabin_air.return_volume()>0)
mecha.cabin_air.temperature = min(6000+T0C, mecha.cabin_air.return_temperature()+rand(10,15))
if(mecha.cabin_air.return_temperature()>mecha.max_temperature/2)
mecha.take_damage(4/round(mecha.max_temperature/mecha.cabin_air.return_temperature(),0.1),"fire")
if(mecha.hasInternalDamage(MECHA_INT_TEMP_CONTROL)) //stop the mecha_preserve_temp loop datum
mecha.pr_int_temp_processor.stop()
if(mecha.hasInternalDamage(MECHA_INT_TANK_BREACH)) //remove some air from internal tank
if(mecha.internal_tank)
var/datum/gas_mixture/int_tank_air = mecha.internal_tank.return_air()
var/datum/gas_mixture/leaked_gas = int_tank_air.remove_ratio(0.10)
if(mecha.loc && hascall(mecha.loc,"assume_air"))
mecha.loc.assume_air(leaked_gas)
else
qdel(leaked_gas)
leaked_gas = null
if(mecha.hasInternalDamage(MECHA_INT_SHORT_CIRCUIT))
if(mecha.get_charge())
spark(mecha, 2, FALSE)
mecha.cell.charge -= min(20,mecha.cell.charge)
mecha.cell.maxcharge -= min(20,mecha.cell.maxcharge)
/////////////

View File

@@ -35,57 +35,57 @@
var/nostop = 0 // if 1: will only be stopped by teleporters
var/list/affecting = list()
Trigger(var/atom/A)
if(!A || !istype(A, /atom/movable) || isobserver(A))
/obj/effect/step_trigger/thrower/Trigger(var/atom/A)
if(!A || !istype(A, /atom/movable) || isobserver(A))
return
var/atom/movable/AM = A
var/curtiles = 0
var/stopthrow = 0
for(var/obj/effect/step_trigger/thrower/T in orange(2, src))
if(AM in T.affecting)
return
var/atom/movable/AM = A
var/curtiles = 0
var/stopthrow = 0
for(var/obj/effect/step_trigger/thrower/T in orange(2, src))
if(AM in T.affecting)
return
if(ismob(AM))
var/mob/M = AM
if(immobilize)
M.canmove = 0
if(ismob(AM))
var/mob/M = AM
if(immobilize)
M.canmove = 0
affecting.Add(AM)
while(AM && !stopthrow)
if(tiles)
if(curtiles >= tiles)
break
if(AM.z != src.z)
affecting.Add(AM)
while(AM && !stopthrow)
if(tiles)
if(curtiles >= tiles)
break
if(AM.z != src.z)
break
curtiles++
curtiles++
sleep(speed)
sleep(speed)
// Calculate if we should stop the process
if(!nostop)
for(var/obj/effect/step_trigger/T in get_step(AM, direction))
if(T.stopper && T != src)
stopthrow = 1
else
for(var/obj/effect/step_trigger/teleporter/T in get_step(AM, direction))
if(T.stopper)
stopthrow = 1
// Calculate if we should stop the process
if(!nostop)
for(var/obj/effect/step_trigger/T in get_step(AM, direction))
if(T.stopper && T != src)
stopthrow = 1
else
for(var/obj/effect/step_trigger/teleporter/T in get_step(AM, direction))
if(T.stopper)
stopthrow = 1
if(AM)
var/predir = AM.dir
step(AM, direction)
if(!facedir)
AM.dir = predir
if(AM)
var/predir = AM.dir
step(AM, direction)
if(!facedir)
AM.dir = predir
affecting.Remove(AM)
affecting.Remove(AM)
if(ismob(AM))
var/mob/M = AM
if(immobilize)
M.canmove = 1
if(ismob(AM))
var/mob/M = AM
if(immobilize)
M.canmove = 1
/obj/effect/step_trigger/thrower/north
dir = NORTH
@@ -111,12 +111,12 @@
var/teleport_y = 0
var/teleport_z = 0
Trigger(var/atom/movable/A)
if(teleport_x && teleport_y && teleport_z)
/obj/effect/step_trigger/teleporter/Trigger(var/atom/movable/A)
if(teleport_x && teleport_y && teleport_z)
A.x = teleport_x
A.y = teleport_y
A.z = teleport_z
A.x = teleport_x
A.y = teleport_y
A.z = teleport_z
/* Random teleporter, teleports atoms to locations ranging from teleport_x - teleport_x_offset, etc */

View File

@@ -141,10 +141,10 @@ var/explosion_shake_message_cooldown = 0
var/x0 = offcenter.x
var/y0 = offcenter.y
var/z0 = offcenter.z
if(epicenter != offcenter) // Not relevant if not in multi-z
log_debug("Destroying size ([devastation_range], [heavy_impact_range], [light_impact_range]) in area [offcenter.loc.name] ([x0],[y0],[z0])")
for(var/turf/T in spiral_block(offcenter,max_range,1))
var/dist = cheap_pythag(T.x - x0, T.y - y0)
var/_dist = dist
@@ -208,8 +208,5 @@ var/explosion_shake_message_cooldown = 0
CHECK_TICK
explosion_destroy_multi_z(epicenter, offcenter, devastation_range / 2, heavy_impact_range / 2, light_impact_range / 2, flash_range / 2, explosion_time)
explosion_destroy_multi_z(epicenter, offcenter, devastation_range / 2, heavy_impact_range / 2, light_impact_range / 2, flash_range / 2, explosion_time, whodunnit)
proc/secondaryexplosion(turf/epicenter, range)
for(var/turf/tile in trange(range, epicenter))
tile.ex_act(2)

View File

@@ -25,7 +25,7 @@
var/list/datum/explosion_turf/explosion_turfs = list()
var/explosion_in_progress = 0
proc/get_explosion_turf(var/turf/T)
/proc/get_explosion_turf(var/turf/T)
for( var/datum/explosion_turf/ET in explosion_turfs )
if( T == ET.turf )
return ET
@@ -34,7 +34,7 @@ proc/get_explosion_turf(var/turf/T)
explosion_turfs += ET
return ET
proc/explosion_rec(turf/epicenter, power)
/proc/explosion_rec(turf/epicenter, power)
var/loopbreak = 0
@@ -160,4 +160,4 @@ proc/explosion_rec(turf/epicenter, power)
*/
/turf/unsimulated/explosion_spread(power)
return //So it doesn't get to the parent proc, which simulates explosions
return //So it doesn't get to the parent proc, which simulates explosions

View File

@@ -2568,7 +2568,7 @@ var/global/msg_id = 0
else
to_chat(usr, "<span class='notice'>You cannot do this while restrained.</span>")
obj/item/device/pda/CtrlClick()
/obj/item/device/pda/CtrlClick()
if ( can_use(usr) ) // Checks that the PDA is in our inventory. This will be checked by the proc anyways, but we don't want to generate an error message if not.
verb_remove_pen(usr)
return
@@ -2597,7 +2597,7 @@ obj/item/device/pda/CtrlClick()
else
to_chat(usr, "<span class='notice'>You cannot do this while restrained.</span>")
obj/item/device/pda/AltClick()
/obj/item/device/pda/AltClick()
if ( can_use(usr) ) // Checks that the PDA is in our inventory. This will be checked by the proc anyways, but we don't want to generate an error message if not.
verb_remove_id(usr)
return

View File

@@ -333,5 +333,5 @@
last_spoken = "<i>At the current rates you will get [nanocoins_rates] dollars per nanocoins.</i>"
proc/nano2dollar(var/nanocoins)
/proc/nano2dollar(var/nanocoins)
return round(nanocoins * nanocoins_rates)

View File

@@ -157,7 +157,7 @@
return 1
return 0
obj/item/device/multitool/ai_detect/update_icon()
/obj/item/device/multitool/ai_detect/update_icon()
if(src.detected)
if(src.detected & DETECT_AI)
src.icon_state = "[initial(src.icon_state)]_red"
@@ -171,7 +171,7 @@ obj/item/device/multitool/ai_detect/update_icon()
src.icon_state = initial(src.icon_state)
return
obj/item/device/multitool/ai_detect/examine(mob/user)
/obj/item/device/multitool/ai_detect/examine(mob/user)
..()
if(src.detected)
user << "<span class='info'>The screen displays:</span>"

View File

@@ -130,7 +130,8 @@ BREATHALYZER
var/datum/disease2/disease/D = I.virus2[ID]
if(ID in virusDB)
var/datum/data/record/V = virusDB[ID]
to_chat(user,"<span class='warning'>Warning: [V.fields["name"]][V.fields["nickname"] ? " \"[V.fields["nickname"]]\"" : ""] detected on \the [src]. Antigen: [D.get_antigen_string()]</span>")
var/nickname = V.fields["nickname"]
to_chat(user,"<span class='warning'>Warning: [V.fields["name"]][nickname ? " [nickname]" : ""] detected on \the [src]. Antigen: [D.get_antigen_string()]</span>")
else
to_chat(user,"<span class='warning'>Warning: Unknown [D.form] detected on \the [src].</span>")
else
@@ -149,7 +150,7 @@ BREATHALYZER
to_chat(user, last_reading)
//Note : Used directly by other objects. Could benefit of OOP, maybe ?
proc/healthanalyze(mob/living/M as mob, mob/living/user as mob, var/mode = 0, var/skip_checks = 0, var/silent = 0)
/proc/healthanalyze(mob/living/M as mob, mob/living/user as mob, var/mode = 0, var/skip_checks = 0, var/silent = 0)
var/message = ""
if(!skip_checks)
if(((M_CLUMSY in user.mutations) || user.getBrainLoss() >= 60) && prob(50))

View File

@@ -1,4 +1,4 @@
obj/item/mounted/frame/firealarm
/obj/item/mounted/frame/firealarm
name = "fire alarm frame"
desc = "Used for building fire alarms."
icon = 'icons/obj/monitors.dmi'

View File

@@ -3,7 +3,7 @@
icon = 'icons/obj/decals.dmi'
icon_state = "shock"
obj/item/borg/stun/attack(mob/M as mob, mob/living/silicon/robot/user as mob)
/obj/item/borg/stun/attack(mob/M as mob, mob/living/silicon/robot/user as mob)
user.do_attack_animation(M, src)
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been attacked with [src.name] by [user.name] ([user.ckey])</font>")
user.attack_log += text("\[[time_stamp()]\] <span class='danger'>Used the [src.name] to attack [M.name] ([M.ckey])</font>")

View File

@@ -542,7 +542,7 @@ var/list/datum/stack_recipe/mythril_recipes = list ( \
origin_tech = Tc_MATERIALS + "=5"
perunit = CC_PER_SHEET_MOLITZ
obj/item/stack/sheet/mineral/gingerbread
/obj/item/stack/sheet/mineral/gingerbread
name = "gingerbread"
icon_state = "sheet-gingerbread"
force = 5.0

View File

@@ -147,7 +147,7 @@
material = "fabric"
obj/item/stack/tile/slime
/obj/item/stack/tile/slime
name = "tile of slime"
desc = "A flat piece of slime made through xenobiology."
icon_state = "tile-slime"

View File

@@ -329,7 +329,7 @@
origin_tech = Tc_COMBAT + "=3;" + Tc_MATERIALS + "=3"
affected_area = 4
obj/item/weapon/grenade/chem_grenade/exgrenade
/obj/item/weapon/grenade/chem_grenade/exgrenade
name = "EX Chem Grenade"
desc = "A specially designed large grenade that can hold three containers."
icon_state = "ex_grenade"
@@ -337,7 +337,7 @@ obj/item/weapon/grenade/chem_grenade/exgrenade
origin_tech = Tc_COMBAT + "=4;" + Tc_MATERIALS + "=3;" + Tc_ENGINEERING + "=2"
affected_area = 4
obj/item/weapon/grenade/chem_grenade/exgrenade/attackby(obj/item/weapon/W as obj, mob/user as mob)
/obj/item/weapon/grenade/chem_grenade/exgrenade/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W,/obj/item/device/assembly_holder) && (!stage || stage==GRENADE_STAGE_ASSEMBLY_INSERTED) && path != PATH_STAGE_COMPLETE)
var/obj/item/device/assembly_holder/det = W
if(istype(det.a_left,det.a_right.type) || (!isigniter(det.a_left) && !isigniter(det.a_right)))

View File

@@ -8,7 +8,7 @@
/obj/item/weapon/grenade/flashbang/prime(banglet)
flashbangprime(delsrc = TRUE, isbanglet = banglet)
atom/proc/flashbangprime(var/delsrc = FALSE, var/ignore_protection = FALSE, isbanglet = FALSE)
/atom/proc/flashbangprime(var/delsrc = FALSE, var/ignore_protection = FALSE, isbanglet = FALSE)
var/turf/flashbang_turf = get_turf(src)
if(!flashbang_turf)
return
@@ -36,7 +36,7 @@ atom/proc/flashbangprime(var/delsrc = FALSE, var/ignore_protection = FALSE, isba
if(delsrc)
qdel(src)
atom/proc/flashbang(var/turf/T, var/mob/living/M, var/ignore_protection = 0, var/isbanglet = FALSE)
/atom/proc/flashbang(var/turf/T, var/mob/living/M, var/ignore_protection = 0, var/isbanglet = FALSE)
if (locate(/obj/item/weapon/cloaking_device, M)) // Called during the loop that bangs people in lockers/containers and when banging
for(var/obj/item/weapon/cloaking_device/S in M) // people in normal view. Could theroetically be called during other explosions.
S.active = 0 // -- Polymorph

View File

@@ -184,54 +184,53 @@ var/global/list/paint_types = subtypesof(/datum/reagent/paint)
density = 1.808
specheatcap = 0.85
reaction_turf(var/turf/T, var/volume)
if(!istype(T) || istype(T, /turf/space))
return
var/ind = "[initial(T.icon)][color]"
if(!cached_icons[ind])
var/icon/overlay = new/icon(initial(T.icon))
overlay.Blend(color,ICON_MULTIPLY)
overlay.SetIntensity(1.4)
T.icon = overlay
cached_icons[ind] = T.icon
else
T.icon = cached_icons[ind]
/datum/reagent/paint/reaction_turf(var/turf/T, var/volume)
if(!istype(T) || istype(T, /turf/space))
return
var/ind = "[initial(T.icon)][color]"
if(!cached_icons[ind])
var/icon/overlay = new/icon(initial(T.icon))
overlay.Blend(color,ICON_MULTIPLY)
overlay.SetIntensity(1.4)
T.icon = overlay
cached_icons[ind] = T.icon
else
T.icon = cached_icons[ind]
red
name = "Red Paint"
id = "paint_red"
color = "#FF0000"
/datum/reagent/paint/red
name = "Red Paint"
id = "paint_red"
color = "#FF0000"
green
name = "Green Paint"
color = "#00FF00"
id = "paint_green"
/datum/reagent/paint/green
name = "Green Paint"
color = "#00FF00"
id = "paint_green"
blue
name = "Blue Paint"
color = "#0000FF"
id = "paint_blue"
/datum/reagent/paint/blue
name = "Blue Paint"
color = "#0000FF"
id = "paint_blue"
yellow
name = "Yellow Paint"
color = "#FFFF00"
id = "paint_yellow"
/datum/reagent/paint/yellow
name = "Yellow Paint"
color = "#FFFF00"
id = "paint_yellow"
purple
name = "Purple Paint"
color = "#FF00FF"
id = "paint_purple"
/datum/reagent/paint/purple
name = "Purple Paint"
color = "#FF00FF"
id = "paint_purple"
black
name = "Black Paint"
color = "#333333"
id = "paint_black"
/datum/reagent/paint/black
name = "Black Paint"
color = "#333333"
id = "paint_black"
white
name = "White Paint"
color = "#FFFFFF"
id = "paint_white"
/datum/reagent/paint/white
name = "White Paint"
color = "#FFFFFF"
id = "paint_white"
/datum/reagent/paint_remover
name = "Paint Remover"
@@ -240,10 +239,9 @@ var/global/list/paint_types = subtypesof(/datum/reagent/paint)
reagent_state = 2
color = "#808080"
reaction_turf(var/turf/T, var/volume)
if(istype(T) && T.icon != initial(T.icon))
T.icon = initial(T.icon)
return
/datum/reagent/paint_remover/reaction_turf(var/turf/T, var/volume)
if(istype(T) && T.icon != initial(T.icon))
T.icon = initial(T.icon)
/datum/reagent/paint_remover/on_mob_life(var/mob/living/M)
if(..())

View File

@@ -108,10 +108,10 @@
no_storage_slot = list(slot_head)
foldable = /obj/item/folded_bag
obj/item/weapon/storage/bag/plasticbag/can_quick_store(var/obj/item/I)
/obj/item/weapon/storage/bag/plasticbag/can_quick_store(var/obj/item/I)
return can_be_inserted(I,1)
obj/item/weapon/storage/bag/plasticbag/quick_store(var/obj/item/I)
/obj/item/weapon/storage/bag/plasticbag/quick_store(var/obj/item/I)
return handle_item_insertion(I,0)
/obj/item/weapon/storage/bag/plasticbag/suicide_act(var/mob/living/user)

View File

@@ -329,7 +329,7 @@
new /obj/item/ammo_storage/speedloader/a357(src)
return
obj/item/weapon/storage/box/syndie_kit/cheaptide
/obj/item/weapon/storage/box/syndie_kit/cheaptide
name = "box (CT)"
/obj/item/weapon/storage/box/syndie_kit/cheaptide/New()

View File

@@ -120,7 +120,7 @@
w_class = W_CLASS_MEDIUM
attack_verb = list("jabs","stabs","rips")
obj/item/weapon/wirerod
/obj/item/weapon/wirerod
name = "wired rod"
desc = "A rod with some wire wrapped around the top. It'd be easy to attach something to the top bit."
icon_state = "wiredrod"
@@ -135,7 +135,7 @@ obj/item/weapon/wirerod
attack_verb = list("hits", "bludgeons", "whacks", "bonks")
obj/item/weapon/wirerod/attackby(var/obj/item/I, mob/user as mob)
/obj/item/weapon/wirerod/attackby(var/obj/item/I, mob/user as mob)
..()
if(istype(I, /obj/item/weapon/shard))
user.visible_message("<span class='notice'>[user] starts securing \the [I] to the top of \the [src].</span>",\
@@ -227,7 +227,7 @@ obj/item/weapon/wirerod/attackby(var/obj/item/I, mob/user as mob)
item_state = "skinningknife"
force = 10
obj/item/weapon/banhammer/admin
/obj/item/weapon/banhammer/admin
desc = "A banhammer specifically reserved for admins. Legends tell of a weapon that destroys the target to the utmost capacity."
throwforce = 999
force = 999

View File

@@ -1,13 +1,13 @@
obj/structure
/obj/structure
icon = 'icons/obj/structures.dmi'
penetration_dampening = 5
obj/structure/blob_act(var/destroy = 0)
/obj/structure/blob_act(var/destroy = 0)
..()
if(destroy || (prob(50)))
qdel(src)
obj/structure/ex_act(severity)
/obj/structure/ex_act(severity)
switch(severity)
if(1.0)
qdel(src)

View File

@@ -30,10 +30,10 @@
/obj/structure/altar/cultify()
return
obj/structure/altar/blob_act()
/obj/structure/altar/blob_act()
return
obj/structure/altar/ex_act(severity)
/obj/structure/altar/ex_act(severity)
return
@@ -58,7 +58,7 @@ obj/structure/altar/ex_act(severity)
if(prob(66))
qdel(src)
obj/structure/altar/podium/ex_act(severity)
/obj/structure/altar/podium/ex_act(severity)
if(prob(10*severity))
qdel(src)

View File

@@ -122,21 +122,21 @@
var/target_temp = T0C - 40
var/cooling_power = 40
return_air()
var/datum/gas_mixture/gas = (..())
if(!gas)
return null
var/datum/gas_mixture/newgas = new/datum/gas_mixture()
newgas.copy_from(gas)
if(newgas.temperature <= target_temp)
return
/obj/structure/closet/crate/freezer/return_air()
var/datum/gas_mixture/gas = (..())
if(!gas)
return null
var/datum/gas_mixture/newgas = new/datum/gas_mixture()
newgas.copy_from(gas)
if(newgas.temperature <= target_temp)
return
if((newgas.temperature - cooling_power) > target_temp)
newgas.temperature -= cooling_power
else
newgas.temperature = target_temp
newgas.update_values()
return newgas
if((newgas.temperature - cooling_power) > target_temp)
newgas.temperature -= cooling_power
else
newgas.temperature = target_temp
newgas.update_values()
return newgas
/obj/structure/closet/crate/freezer/surgery
desc = "A freezer specifically designed to store organic material."

View File

@@ -68,7 +68,7 @@
spear = new (src)
..(A, H)
obj/structure/bigpeppermint_red
/obj/structure/bigpeppermint_red
name = "mounted peppermint"
icon = 'icons/obj/structures.dmi'
icon_state = "bigpeppermint_red"
@@ -76,10 +76,10 @@ obj/structure/bigpeppermint_red
density = 0
anchored = 1
obj/structure/bigpeppermint_green
/obj/structure/bigpeppermint_green
name = "mounted peppermint"
icon = 'icons/obj/structures.dmi'
icon_state = "bigpeppermint_green"
desc = "Must be a culture thing."
density = 0
anchored = 1
anchored = 1

View File

@@ -199,10 +199,10 @@ FLOOR SAFES
if(istype(I, /obj/item/clothing/accessory/stethoscope))
recursive_dial(user, show_radial_menu(user,src,choices,'icons/obj/safe_radial.dmi',"radial-safe", custom_check = new /callback(src, .proc/radial_check, user), recursive = TRUE))
obj/structure/safe/blob_act()
/obj/structure/safe/blob_act()
return
obj/structure/safe/ex_act(severity)
/obj/structure/safe/ex_act(severity)
return
//FLOOR SAFES

View File

@@ -34,7 +34,7 @@
/obj/structure/skele_stand/attackby(obj/item/weapon/W, mob/user)
rattle_bones(user, W)
obj/structure/skele_stand/spook(mob/user)
/obj/structure/skele_stand/spook(mob/user)
rattle_bones(user, null)
/obj/structure/skele_stand/mrbones

View File

@@ -716,7 +716,7 @@
/*
* Plastic
*/
obj/structure/table/plastic
/obj/structure/table/plastic
name = "plastic table"
desc = "A plastic table perfect for on a space patio."
icon_state = "plastictable"

View File

@@ -54,7 +54,7 @@
..()
// When destroyed by explosions, properly handle contents.
obj/structure/transit_tube_pod/ex_act(severity)
/obj/structure/transit_tube_pod/ex_act(severity)
switch(severity)
if(1.0)
for(var/atom/movable/AM in contents)

View File

@@ -37,7 +37,7 @@
..()
update_nearby_tiles()
obj/structure/windoor_assembly/Destroy()
/obj/structure/windoor_assembly/Destroy()
setDensity(FALSE)
update_nearby_tiles()
..()

View File

@@ -115,7 +115,7 @@ var/global/list/turf/simulated/floor/phazontiles = list()
if(!(locate(/obj/effect/decal/cleanable/dirt) in contents))
new /obj/effect/decal/cleanable/dirt(src)
turf/simulated/floor/update_icon()
/turf/simulated/floor/update_icon()
if(lava)
return

View File

@@ -28,7 +28,7 @@
//Does not require sleeptime, specifies for how long the animation should be allowed to exist before returning to pool
//Does not require animation direction, but you can specify
//Does not require a name
proc/anim(turf/location as turf,target as mob|obj,a_icon,a_icon_state as text,flick_anim as text,sleeptime = 0,direction as num, name as text, lay as num, offX as num, offY as num, col as text, alph as num,plane as num, var/trans, var/invis)
/proc/anim(turf/location as turf,target as mob|obj,a_icon,a_icon_state as text,flick_anim as text,sleeptime = 0,direction as num, name as text, lay as num, offX as num, offY as num, col as text, alph as num,plane as num, var/trans, var/invis)
//This proc throws up either an icon or an animation for a specified amount of time.
//The variables should be apparent enough.
if(!location && target)

View File

@@ -38,7 +38,7 @@ callback_args - arguments for callback function
Be sure to include required js functions in your page, or it'll raise an exception.
*/
proc/send_byjax(receiver, control_id, target_element, new_content=null, callback=null, list/callback_args=null)
/proc/send_byjax(receiver, control_id, target_element, new_content=null, callback=null, list/callback_args=null)
if(receiver && target_element && control_id) // && winexists(receiver, control_id))
var/list/argums = list(target_element, new_content)
if(callback)

View File

@@ -43,7 +43,7 @@ cons:
#define GFI_DX_MAX 12 // Remember to keep this updated should you need to keep track of more variables
proc/getFlatIconDeluxe(list/image_datas, var/turf/center, var/radius = 0, var/override_dir = 0, var/ignore_spawn_items = FALSE)
/proc/getFlatIconDeluxe(list/image_datas, var/turf/center, var/radius = 0, var/override_dir = 0, var/ignore_spawn_items = FALSE)
var/icon/flat = icon('icons/effects/224x224.dmi',"empty") // Final flattened icon
var/icon/add // Icon of overlay being added

View File

@@ -69,7 +69,7 @@ var/list/exception = list(
sorted.Insert(compare_index+1, current_atom) // insert it just above the atom it was higher than - or at the bottom if it was higher than nothing.
return sorted // return the sorted list.
proc/getFlatIcon(atom/A, dir, cache=1, exact=0) // 1 = use cache, 2 = override cache, 0 = ignore cache //exact = 1 means the atom won't be rotated if it's a lying mob/living/carbon
/proc/getFlatIcon(atom/A, dir, cache=1, exact=0) // 1 = use cache, 2 = override cache, 0 = ignore cache //exact = 1 means the atom won't be rotated if it's a lying mob/living/carbon
var/hash = "" // Hash of overlay combination

View File

@@ -11,14 +11,14 @@
#define TO_HEX_DIGIT(n) ascii2text((n&15) + ((n&15)<10 ? 48 : 87))
// Multiply all alpha values by this float
icon/proc/ChangeOpacity(opacity = 1.0)
/icon/proc/ChangeOpacity(opacity = 1.0)
MapColors(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,opacity, 0,0,0,0)
// Convert to grayscale
icon/proc/GrayScale()
/icon/proc/GrayScale()
MapColors(0.3,0.3,0.3, 0.59,0.59,0.59, 0.11,0.11,0.11, 0,0,0)
icon/proc/ColorTone(tone)
/icon/proc/ColorTone(tone)
GrayScale()
var/list/TONE = ReadRGB(tone)
@@ -37,14 +37,14 @@ icon/proc/ColorTone(tone)
Blend(upper, ICON_ADD)
// Take the minimum color of two icons; combine transparency as if blending with ICON_ADD
icon/proc/MinColors(icon)
/icon/proc/MinColors(icon)
var/icon/I = new(src)
I.Opaque()
I.Blend(icon, ICON_SUBTRACT)
Blend(I, ICON_SUBTRACT)
// Take the maximum color of two icons; combine opacity as if blending with ICON_OR
icon/proc/MaxColors(icon)
/icon/proc/MaxColors(icon)
var/icon/I
if(isicon(icon))
I = new(icon)
@@ -60,21 +60,21 @@ icon/proc/MaxColors(icon)
Blend(I, ICON_OR)
// make this icon fully opaque--transparent pixels become black
icon/proc/Opaque(background = "#000000")
/icon/proc/Opaque(background = "#000000")
SwapColor(null, background)
MapColors(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,0, 0,0,0,1)
// Change a grayscale icon into a white icon where the original color becomes the alpha
// I.e., black -> transparent, gray -> translucent white, white -> solid white
icon/proc/BecomeAlphaMask()
/icon/proc/BecomeAlphaMask()
SwapColor(null, "#000000ff") // don't let transparent become gray
MapColors(0,0,0,0.3, 0,0,0,0.59, 0,0,0,0.11, 0,0,0,0, 1,1,1,0)
icon/proc/UseAlphaMask(mask)
/icon/proc/UseAlphaMask(mask)
Opaque()
AddAlphaMask(mask)
icon/proc/AddAlphaMask(mask)
/icon/proc/AddAlphaMask(mask)
var/icon/M = new(mask)
M.Blend("#ffffff", ICON_SUBTRACT)
// apply mask
@@ -102,7 +102,7 @@ icon/proc/AddAlphaMask(mask)
Higher value means brighter color
*/
proc/ReadRGB(rgb)
/proc/ReadRGB(rgb)
if(!rgb)
return
@@ -167,7 +167,7 @@ proc/ReadRGB(rgb)
if(usealpha)
. += alpha
proc/ReadHSV(hsv)
/proc/ReadHSV(hsv)
if(!hsv)
return
@@ -221,7 +221,7 @@ proc/ReadHSV(hsv)
if(usealpha)
. += alpha
proc/HSVtoRGB(hsv)
/proc/HSVtoRGB(hsv)
if(!hsv)
return "#000000"
var/list/HSV = ReadHSV(hsv)
@@ -270,7 +270,7 @@ proc/HSVtoRGB(hsv)
return (HSV.len > 3) ? rgb(r,g,b,HSV[4]) : rgb(r,g,b)
proc/RGBtoHSV(rgb)
/proc/RGBtoHSV(rgb)
if(!rgb)
return "#0000000"
var/list/RGB = ReadRGB(rgb)
@@ -321,7 +321,7 @@ proc/RGBtoHSV(rgb)
return hsv(hue, sat, val, (RGB.len>3 ? RGB[4] : null))
proc/hsv(hue, sat, val, alpha)
/proc/hsv(hue, sat, val, alpha)
if(hue < 0 || hue >= 1536)
hue %= 1536
if(hue < 0)
@@ -363,7 +363,7 @@ proc/hsv(hue, sat, val, alpha)
amount<0 or amount>1 are allowed
*/
proc/BlendHSV(hsv1, hsv2, amount)
/proc/BlendHSV(hsv1, hsv2, amount)
var/list/HSV1 = ReadHSV(hsv1)
var/list/HSV2 = ReadHSV(hsv2)
@@ -435,7 +435,7 @@ proc/BlendHSV(hsv1, hsv2, amount)
amount<0 or amount>1 are allowed
*/
proc/BlendRGB(rgb1, rgb2, amount)
/proc/BlendRGB(rgb1, rgb2, amount)
var/list/RGB1 = ReadRGB(rgb1)
var/list/RGB2 = ReadRGB(rgb2)
@@ -453,10 +453,10 @@ proc/BlendRGB(rgb1, rgb2, amount)
return isnull(alpha) ? rgb(r, g, b) : rgb(r, g, b, alpha)
proc/BlendRGBasHSV(rgb1, rgb2, amount)
/proc/BlendRGBasHSV(rgb1, rgb2, amount)
return HSVtoRGB(RGBtoHSV(rgb1), RGBtoHSV(rgb2), amount)
proc/HueToAngle(hue)
/proc/HueToAngle(hue)
// normalize hsv in case anything is screwy
if(hue < 0 || hue >= 1536)
hue %= 1536
@@ -466,7 +466,7 @@ proc/HueToAngle(hue)
hue -= hue >> 8
return hue / (1530/360)
proc/AngleToHue(angle)
/proc/AngleToHue(angle)
// normalize hsv in case anything is screwy
if(angle < 0 || angle >= 360)
angle -= 360 * round(angle / 360)
@@ -477,7 +477,7 @@ proc/AngleToHue(angle)
// positive angle rotates forward through red->green->blue
proc/RotateHue(hsv, angle)
/proc/RotateHue(hsv, angle)
var/list/HSV = ReadHSV(hsv)
// normalize hsv in case anything is screwy
@@ -504,13 +504,13 @@ proc/RotateHue(hsv, angle)
return hsv(HSV[1], HSV[2], HSV[3], (HSV.len > 3 ? HSV[4] : null))
// Convert an rgb color to grayscale
proc/GrayScale(rgb)
/proc/GrayScale(rgb)
var/list/RGB = ReadRGB(rgb)
var/gray = RGB[1]*0.3 + RGB[2]*0.59 + RGB[3]*0.11
return (RGB.len > 3) ? rgb(gray, gray, gray, RGB[4]) : rgb(gray, gray, gray)
// Change grayscale color to black->tone->white range
proc/ColorTone(rgb, tone)
/proc/ColorTone(rgb, tone)
var/list/RGB = ReadRGB(rgb)
var/list/TONE = ReadRGB(tone)

View File

@@ -12,7 +12,7 @@ encompasses a larger field.
**************************************/
proc/hex2num(hex)
/proc/hex2num(hex)
//Converts a hexadecimal string (eg. "9F") into a numeral (eg. 159).
if(!istext(hex))

View File

@@ -4,7 +4,7 @@
//This will *ONLY* accept a colour in the
// form "#XXXXXX". Nothing else will work!
proc/invertHTML(HTMLstring)
/proc/invertHTML(HTMLstring)
if(!istext(HTMLstring))
CRASH("Given non-text argument!")
else if(length(HTMLstring) != 7)

View File

@@ -1464,7 +1464,7 @@ var/global/floorIsLava = 0
var/admin_shuttle_location = 0 // 0 = centcom 13, 1 = station
proc/move_admin_shuttle()
/proc/move_admin_shuttle()
var/area/fromArea
var/area/toArea
if (admin_shuttle_location == 1)
@@ -1484,7 +1484,7 @@ proc/move_admin_shuttle()
var/alien_ship_location = 1 // 0 = base , 1 = mine
proc/move_alien_ship()
/proc/move_alien_ship()
var/area/fromArea
var/area/toArea
if (alien_ship_location == 1)
@@ -1500,7 +1500,7 @@ proc/move_alien_ship()
alien_ship_location = 1
return
proc/formatJumpTo(location, where = "")
/proc/formatJumpTo(location, where = "")
var/turf/loc
if (isturf(location))
@@ -1513,7 +1513,7 @@ proc/formatJumpTo(location, where = "")
return "<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[loc ? loc.x : "mystery"];Y=[loc ? loc.y : "mystery"];Z=[loc ? loc.z : "mystery"]'>[where]</a>"
proc/formatLocation(location)
/proc/formatLocation(location)
var/turf/loc
if (isturf(location))
@@ -1525,7 +1525,7 @@ proc/formatLocation(location)
var/answer = "[istype(A) ? "[A.name]" : "UNKNOWN"] - [istype(loc) ? "[loc.x],[loc.y],[loc.z]" : "UNKNOWN"]"
return answer
proc/formatPlayerPanel(var/mob/U,var/text="PP")
/proc/formatPlayerPanel(var/mob/U,var/text="PP")
return "<A HREF='?_src_=holder;adminplayeropts=\ref[U]'>[text]</A>"
//Credit to MrStonedOne from TG for this QoL improvement

View File

@@ -54,19 +54,19 @@
/obj/effect/bmode/builddir
icon_state = "build"
screen_loc = "NORTH,WEST"
Click()
switch(dir)
if(NORTH)
dir = EAST
if(EAST)
dir = SOUTH
if(SOUTH)
dir = WEST
if(WEST)
dir = SOUTHWEST
if(SOUTHWEST)
dir = NORTH
return 1
/obj/effect/bmode/builddir/Click()
switch(dir)
if(NORTH)
dir = EAST
if(EAST)
dir = SOUTH
if(SOUTH)
dir = WEST
if(WEST)
dir = SOUTHWEST
if(SOUTHWEST)
dir = NORTH
return 1
/obj/effect/bmode/buildhelp
icon = 'icons/misc/buildmode.dmi'
@@ -159,7 +159,7 @@ var/global/list/obj/effect/bmode/buildholder/buildmodeholders = list()
var/strictness = FALSE
var/warnings = TRUE
obj/effect/bmode/buildholder/New()
/obj/effect/bmode/buildholder/New()
..()
buildmodeholders |= src

View File

@@ -874,7 +874,7 @@ var/global/blood_virus_spreading_disabled = 0
else
alert("Invalid mob, needs to be a human.")
client/proc/make_invulnerable(var/mob/M in mob_list)
/client/proc/make_invulnerable(var/mob/M in mob_list)
set name = "Toggle Invulnerability"
set desc = "Make the target atom invulnerable to all form of damage."
set category = "Fun"
@@ -896,7 +896,7 @@ client/proc/make_invulnerable(var/mob/M in mob_list)
log_admin("[ckey(key)]/([mob]) has toggled [M]'s invulnerability [(M.flags & INVULNERABLE) ? "on" : "off"]")
message_admins("[ckey(key)]/([mob]) has toggled [M]'s invulnerability [(M.flags & INVULNERABLE) ? "on" : "off"]")
client/proc/delete_all_adminbus()
/client/proc/delete_all_adminbus()
set name = "Delete every Adminbus"
set desc = "When the world cannot handle them anymore."
set category = "Fun"
@@ -907,7 +907,7 @@ client/proc/delete_all_adminbus()
for(var/obj/structure/bed/chair/vehicle/adminbus/AB in world)
AB.Adminbus_Deletion()
client/proc/delete_all_bomberman()
/client/proc/delete_all_bomberman()
set name = "Remove all that Bomberman shit"
set desc = "4th wall ointment."
set category = "Fun"
@@ -963,7 +963,7 @@ client/proc/delete_all_bomberman()
for(var/obj/structure/powerup/O in bombermangear)
qdel(O)
client/proc/create_bomberman_arena()
/client/proc/create_bomberman_arena()
set name = "Create a Bomberman Arena"
set desc = "Create a customizable Bomberman-type arena."
set category = "Fun"
@@ -985,7 +985,7 @@ client/proc/create_bomberman_arena()
var/datum/bomberman_arena/A = new /datum/bomberman_arena(T, arena_type, src.mob)
arenas += A
client/proc/control_bomberman_arena()
/client/proc/control_bomberman_arena()
set name = "Arena Control Panel"
set desc = "Control or Remove an existing Bomberman-type arena."
set category = "Fun"
@@ -1069,7 +1069,7 @@ client/proc/control_bomberman_arena()
client/proc/mob_list()
/client/proc/mob_list()
set name = "show mob list"
set category = "Debug"
@@ -1088,7 +1088,7 @@ client/proc/mob_list()
to_chat(usr, "Found [foundnull] null entries in the mob list, running null clearer.")
listclearnulls(mob_list)
client/proc/check_bomb()
/client/proc/check_bomb()
set name = "Check Bomb Impact"
set category = "Debug"
@@ -1167,7 +1167,7 @@ client/proc/check_bomb()
if("Stealthy")
stealthy_level = input("How long do you want the fade-in to last? (in tenth of seconds)","Stealthy Preferences") as num
client/proc/cure_disease()
/client/proc/cure_disease()
set name = "Cure Disease"
set category = "Debug"
if(!holder)
@@ -1207,7 +1207,7 @@ client/proc/cure_disease()
log_admin("[src]/([ckey(src.key)] Cured all mobs of [disease_name == "-Cure All-" ? "all diseases." : "[disease_name]"]")
message_admins("[src]/([ckey(src.key)] Cured all mobs of [disease_name == "-Cure All-" ? "all diseases." : "[disease_name]"]")
client/proc/check_convertables()
/client/proc/check_convertables()
set name = "Check Convertables (Cult v2.0)"
set category = "Debug"
if(!holder || !ticker || !ticker.mode)
@@ -1231,7 +1231,7 @@ client/proc/check_convertables()
to_chat(usr, dat)
client/proc/toggle_convertibles()
/client/proc/toggle_convertibles()
set name = "Toggle Convertibles HUD (Cult 3.0+)"
set category = "Debug"
set desc = "Displays a marker over crew members showing their propension to get converted."

View File

@@ -1,4 +1,4 @@
client/proc/one_click_antag()
/client/proc/one_click_antag()
set name = "Create Antagonist"
set desc = "Auto-create an antagonist of your choice"
set category = "Admin"

View File

@@ -163,7 +163,7 @@
feedback_add_details("admin_verb","GOD") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
proc/cmd_admin_mute(mob/M as mob, mute_type, automute = 0)
/proc/cmd_admin_mute(mob/M as mob, mute_type, automute = 0)
if(automute)
if(!config.automute_on)
return

View File

@@ -5,38 +5,38 @@
var/valve=null
var/state=0
Export()
var/list/json = ..()
json["valve"]=valve
json["state"]=state
return json
/datum/automation/set_valve_state/Export()
var/list/json = ..()
json["valve"]=valve
json["state"]=state
return json
Import(var/list/json)
..(json)
valve = json["valve"]
state = text2num(json["state"])
/datum/automation/set_valve_state/Import(var/list/json)
..(json)
valve = json["valve"]
state = text2num(json["state"])
process()
if(valve)
parent.send_signal(list ("tag" = valve, "command"="valve_set","state"=state))
return 0
/datum/automation/set_valve_state/process()
if(valve)
parent.send_signal(list ("tag" = valve, "command"="valve_set","state"=state))
return 0
GetText()
return "Set digital valve <a href=\"?src=\ref[src];set_subject=1\">[fmtString(valve)]</a> to <a href=\"?src=\ref[src];set_state=1\">[state?"open":"closed"]</a>."
/datum/automation/set_valve_state/GetText()
return "Set digital valve <a href=\"?src=\ref[src];set_subject=1\">[fmtString(valve)]</a> to <a href=\"?src=\ref[src];set_state=1\">[state?"open":"closed"]</a>."
Topic(href,href_list)
if(href_list["set_state"])
state=!state
parent.updateUsrDialog()
return 1
if(href_list["set_subject"])
var/list/valves=list()
for(var/obj/machinery/atmospherics/binary/valve/digital/V in atmos_machines)
if(!isnull(V.id_tag) && V.frequency == parent.frequency)
valves|=V.id_tag
if(valves.len==0)
to_chat(usr, "<span class='warning'>Unable to find any digital valves on this frequency.</span>")
return
valve = input("Select a valve:", "Sensor Data", valve) as null|anything in valves
parent.updateUsrDialog()
return 1
/datum/automation/set_valve_state/Topic(href,href_list)
if(href_list["set_state"])
state=!state
parent.updateUsrDialog()
return 1
if(href_list["set_subject"])
var/list/valves=list()
for(var/obj/machinery/atmospherics/binary/valve/digital/V in atmos_machines)
if(!isnull(V.id_tag) && V.frequency == parent.frequency)
valves|=V.id_tag
if(valves.len==0)
to_chat(usr, "<span class='warning'>Unable to find any digital valves on this frequency.</span>")
return
valve = input("Select a valve:", "Sensor Data", valve) as null|anything in valves
parent.updateUsrDialog()
return 1

View File

@@ -3,38 +3,38 @@
var/gate=null
var/state=0
Export()
var/list/json = ..()
json["gate"]=gate
json["state"]=state
return json
/datum/automation/set_passive_gate_state/Export()
var/list/json = ..()
json["gate"]=gate
json["state"]=state
return json
Import(var/list/json)
..(json)
gate = json["gate"]
state = text2num(json["state"])
/datum/automation/set_passive_gate_state/Import(var/list/json)
..(json)
gate = json["gate"]
state = text2num(json["state"])
process()
if(gate)
parent.send_signal(list ("tag" = gate, "command"="gate_set","state"=state))
return 0
/datum/automation/set_passive_gate_state/process()
if(gate)
parent.send_signal(list ("tag" = gate, "command"="gate_set","state"=state))
return 0
GetText()
return "Set passive gate <a href=\"?src=\ref[src];set_subject=1\">[fmtString(gate)]</a> to <a href=\"?src=\ref[src];set_state=1\">[state?"open":"closed"]</a>."
/datum/automation/set_passive_gate_state/GetText()
return "Set passive gate <a href=\"?src=\ref[src];set_subject=1\">[fmtString(gate)]</a> to <a href=\"?src=\ref[src];set_state=1\">[state?"open":"closed"]</a>."
Topic(href,href_list)
if(href_list["set_state"])
state=!state
parent.updateUsrDialog()
return 1
if(href_list["set_subject"])
var/list/gates=list()
for(var/obj/machinery/atmospherics/binary/passive_gate/G in atmos_machines)
if(!isnull(G.id_tag) && G.frequency == parent.frequency)
gates|=G.id_tag
if(gates.len==0)
to_chat(usr, "<span class='warning'>Unable to find any passive gates on this frequency.</span>")
return
gate = input("Select a gate:", "Sensor Data", gate) as null|anything in gates
parent.updateUsrDialog()
return 1
/datum/automation/set_passive_gate_state/Topic(href,href_list)
if(href_list["set_state"])
state=!state
parent.updateUsrDialog()
return 1
if(href_list["set_subject"])
var/list/gates=list()
for(var/obj/machinery/atmospherics/binary/passive_gate/G in atmos_machines)
if(!isnull(G.id_tag) && G.frequency == parent.frequency)
gates|=G.id_tag
if(gates.len==0)
to_chat(usr, "<span class='warning'>Unable to find any passive gates on this frequency.</span>")
return
gate = input("Select a gate:", "Sensor Data", gate) as null|anything in gates
parent.updateUsrDialog()
return 1

View File

@@ -83,7 +83,7 @@
out += ")"
return out
datum/automation/set_register_data/Topic(href, href_list)
/datum/automation/set_register_data/Topic(href, href_list)
. = ..()
if(.)
return

View File

@@ -57,7 +57,7 @@ var/list/gateways = list() //List containing the gateways on away missions
obj/machinery/gateway/centerstation/process()
/obj/machinery/gateway/centerstation/process()
if(stat & (NOPOWER))
if(active)
toggleoff()
@@ -179,7 +179,7 @@ obj/machinery/gateway/centerstation/process()
/obj/machinery/gateway/centeraway/Destroy()
gateways.Remove(src)
..()
/obj/machinery/gateway/centeraway/initialize()

View File

@@ -1,6 +1,6 @@
var/global/dmm_suite/maploader = new
dmm_suite{
/dmm_suite
/*
dmm_suite version 1.0
@@ -53,27 +53,23 @@ dmm_suite{
*/
verb/load_map(var/dmm_file as file, var/z_offset as num, var/x_offset as num, var/y_offset as num, var/datum/map_element/map_element as null, var/fast_load as null){
// dmm_file: A .dmm file to load (Required).
// z_offset: A number representing the z-level on which to start loading the map (Optional).
// map_element: The map element that the .dmm file belongs to (Optional).
// fast_load: If true,
}
verb/write_map(var/turf/t1 as turf, var/turf/t2 as turf, var/flags as num){
// t1: A turf representing one corner of a three dimensional grid (Required).
// t2: Another turf representing the other corner of the same grid (Required).
// flags: Any, or a combination, of several bit flags (Optional, see documentation).
}
// dmm_file: A .dmm file to load (Required).
// z_offset: A number representing the z-level on which to start loading the map (Optional).
// map_element: The map element that the .dmm file belongs to (Optional).
// fast_load: If true,
/dmm_suite/proc/load_map(var/dmm_file as file, var/z_offset as num, var/x_offset as num, var/y_offset as num, var/datum/map_element/map_element as null, var/fast_load as null)
// save_map is included as a legacy proc. Use write_map instead.
verb/save_map(var/turf/t1 as turf, var/turf/t2 as turf, var/map_name as text, var/flags as num){
// t1: A turf representing one corner of a three dimensional grid (Required).
// t2: Another turf representing the other corner of the same grid (Required).
// map_name: A valid name for the map to be saved, such as "castle" (Required).
// flags: Any, or a combination, of several bit flags (Optional, see documentation).
}
// t1: A turf representing one corner of a three dimensional grid (Required).
// t2: Another turf representing the other corner of the same grid (Required).
// flags: Any, or a combination, of several bit flags (Optional, see documentation).
/dmm_suite/proc/write_map(var/turf/t1 as turf, var/turf/t2 as turf, var/flags as num)
verb/get_map_dimensions(var/dmm_file as file){
// dmm_file: A .dmm file to check (Required).
}
}
// save_map is included as a legacy proc. Use write_map instead.
// t1: A turf representing one corner of a three dimensional grid (Required).
// t2: Another turf representing the other corner of the same grid (Required).
// map_name: A valid name for the map to be saved, such as "castle" (Required).
// flags: Any, or a combination, of several bit flags (Optional, see documentation).
/dmm_suite/proc/save_map(var/turf/t1 as turf, var/turf/t2 as turf, var/map_name as text, var/flags as num)
// dmm_file: A .dmm file to check (Required).
/dmm_suite/proc/get_map_dimensions(var/dmm_file as file)

Some files were not shown because too many files have changed in this diff Show More