mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-22 19:47:22 +01:00
Makes the code pass dreamchecker (#13161)
* Initial Commit - Trying to add DC to Travis * Forgot to chmod * This took too long * Farie Fixes * Fixes new code * Job factions are fucking smelly * Loadouts work again * Runtime fixes
This commit is contained in:
@@ -261,7 +261,7 @@
|
||||
/datum/pm_tracker
|
||||
var/current_title = ""
|
||||
var/open = FALSE
|
||||
var/list/pms = list()
|
||||
var/list/datum/pm_convo/pms = list()
|
||||
var/show_archived = FALSE
|
||||
var/window_id = "pms_window"
|
||||
|
||||
|
||||
@@ -85,7 +85,7 @@
|
||||
var/output = "<b>Radio Report</b><hr>"
|
||||
for(var/fq in SSradio.frequencies)
|
||||
output += "<b>Freq: [fq]</b><br>"
|
||||
var/list/datum/radio_frequency/fqs = SSradio.frequencies[fq]
|
||||
var/datum/radio_frequency/fqs = SSradio.frequencies[fq]
|
||||
if(!fqs)
|
||||
output += " <b>ERROR</b><br>"
|
||||
continue
|
||||
|
||||
@@ -7,4 +7,5 @@ GLOBAL_LIST_INIT(open_logging_views, list())
|
||||
|
||||
if(!GLOB.open_logging_views[usr.client.ckey])
|
||||
GLOB.open_logging_views[usr.client.ckey] = new /datum/log_viewer()
|
||||
GLOB.open_logging_views[usr.client.ckey].show_ui(usr)
|
||||
var/datum/log_viewer/LV = GLOB.open_logging_views[usr.client.ckey]
|
||||
LV.show_ui(usr)
|
||||
|
||||
@@ -543,7 +543,7 @@ GLOBAL_LIST_INIT(VVpixelmovement, list("step_x", "step_y", "step_size", "bound_h
|
||||
var/var_value
|
||||
|
||||
if(param_var_name)
|
||||
if(!param_var_name in O.vars)
|
||||
if(!(param_var_name in O.vars))
|
||||
to_chat(src, "A variable with this name ([param_var_name]) doesn't exist in this datum ([O])")
|
||||
return
|
||||
variable = param_var_name
|
||||
|
||||
@@ -82,7 +82,7 @@
|
||||
else if((H in GLOB.team_bravo) && (A in GLOB.team_bravo))
|
||||
to_chat(A, "<span class='warning'>He's on your team!</span>")
|
||||
return
|
||||
else if(!A in GLOB.team_alpha && !A in GLOB.team_bravo)
|
||||
else if(!(A in GLOB.team_alpha) && !(A in GLOB.team_bravo))
|
||||
to_chat(A, "<span class='warning'>You're not part of the dodgeball game, sorry!</span>")
|
||||
return
|
||||
else
|
||||
|
||||
@@ -533,7 +533,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
var/list/mobs = list()
|
||||
var/list/ghosts = list()
|
||||
var/list/sortmob = sortAtom(GLOB.mob_list) // get the mob list.
|
||||
/var/any=0
|
||||
var/any=0
|
||||
for(var/mob/dead/observer/M in sortmob)
|
||||
mobs.Add(M) //filter it where it's only ghosts
|
||||
any = 1 //if no ghosts show up, any will just be 0
|
||||
|
||||
@@ -58,7 +58,7 @@ GLOBAL_VAR(claw_game_html)
|
||||
atom_say("WINNER!")
|
||||
new /obj/item/toy/prizeball(get_turf(src))
|
||||
playsound(src.loc, 'sound/arcade/win.ogg', 50, 1, extrarange = -3, falloff = 10)
|
||||
addtimer(CALLBACK(src, .update_icon), 10)
|
||||
addtimer(CALLBACK(src, .proc/update_icon), 10)
|
||||
|
||||
/obj/machinery/arcade/claw/start_play(mob/user as mob)
|
||||
..()
|
||||
|
||||
@@ -89,7 +89,7 @@
|
||||
|
||||
/obj/item/assembly/mousetrap/attack_hand(mob/living/user)
|
||||
if(armed)
|
||||
if((user.getBrainLoss() >= 60 || CLUMSY in user.mutations) && prob(50))
|
||||
if((user.getBrainLoss() >= 60 || (CLUMSY in user.mutations)) && prob(50))
|
||||
var/which_hand = "l_hand"
|
||||
if(!user.hand)
|
||||
which_hand = "r_hand"
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
field = json["field"]
|
||||
|
||||
Evaluate()
|
||||
if(sensor && field && sensor in parent.sensor_information)
|
||||
if(sensor && field && (sensor in parent.sensor_information))
|
||||
return parent.sensor_information[sensor][field]
|
||||
return 0
|
||||
|
||||
|
||||
@@ -172,87 +172,3 @@ GLOBAL_LIST_INIT(potentialRandomZlevels, generateMapList(filename = "config/away
|
||||
new /obj/effect/landmark/ruin(central_turf, src)
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/proc/seedRuins(list/z_levels = null, budget = 0, whitelist = /area/space, list/potentialRuins)
|
||||
if(!z_levels || !z_levels.len)
|
||||
WARNING("No Z levels provided - Not generating ruins")
|
||||
return
|
||||
|
||||
for(var/zl in z_levels)
|
||||
var/turf/T = locate(1, 1, zl)
|
||||
if(!T)
|
||||
WARNING("Z level [zl] does not exist - Not generating ruins")
|
||||
return
|
||||
|
||||
var/list/ruins = potentialRuins.Copy()
|
||||
|
||||
var/list/forced_ruins = list() //These go first on the z level associated (same random one by default)
|
||||
var/list/ruins_availible = list() //we can try these in the current pass
|
||||
var/forced_z //If set we won't pick z level and use this one instead.
|
||||
|
||||
//Set up the starting ruin list
|
||||
for(var/key in ruins)
|
||||
var/datum/map_template/ruin/R = ruins[key]
|
||||
if(R.cost > budget) //Why would you do that
|
||||
continue
|
||||
if(R.always_place)
|
||||
forced_ruins[R] = -1
|
||||
if(R.unpickable)
|
||||
continue
|
||||
ruins_availible[R] = R.placement_weight
|
||||
|
||||
while(budget > 0 && (ruins_availible.len || forced_ruins.len))
|
||||
var/datum/map_template/ruin/current_pick
|
||||
var/forced = FALSE
|
||||
if(forced_ruins.len) //We have something we need to load right now, so just pick it
|
||||
for(var/ruin in forced_ruins)
|
||||
current_pick = ruin
|
||||
if(forced_ruins[ruin] > 0) //Load into designated z
|
||||
forced_z = forced_ruins[ruin]
|
||||
forced = TRUE
|
||||
break
|
||||
else //Otherwise just pick random one
|
||||
current_pick = pickweight(ruins_availible)
|
||||
|
||||
var/placement_tries = PLACEMENT_TRIES
|
||||
var/failed_to_place = TRUE
|
||||
var/z_placed = 0
|
||||
while(placement_tries > 0)
|
||||
placement_tries--
|
||||
z_placed = pick(z_levels)
|
||||
if(!current_pick.try_to_place(forced_z ? forced_z : z_placed,whitelist))
|
||||
continue
|
||||
else
|
||||
failed_to_place = FALSE
|
||||
break
|
||||
|
||||
//That's done remove from priority even if it failed
|
||||
if(forced)
|
||||
//TODO : handle forced ruins with multiple variants
|
||||
forced_ruins -= current_pick
|
||||
forced = FALSE
|
||||
|
||||
if(failed_to_place)
|
||||
for(var/datum/map_template/ruin/R in ruins_availible)
|
||||
if(R.id == current_pick.id)
|
||||
ruins_availible -= R
|
||||
log_world("Failed to place [current_pick.name] ruin.")
|
||||
else
|
||||
budget -= current_pick.cost
|
||||
if(!current_pick.allow_duplicates)
|
||||
for(var/datum/map_template/ruin/R in ruins_availible)
|
||||
if(R.id == current_pick.id)
|
||||
ruins_availible -= R
|
||||
if(current_pick.never_spawn_with)
|
||||
for(var/blacklisted_type in current_pick.never_spawn_with)
|
||||
for(var/possible_exclusion in ruins_availible)
|
||||
if(istype(possible_exclusion,blacklisted_type))
|
||||
ruins_availible -= possible_exclusion
|
||||
forced_z = 0
|
||||
|
||||
//Update the availible list
|
||||
for(var/datum/map_template/ruin/R in ruins_availible)
|
||||
if(R.cost > budget)
|
||||
ruins_availible -= R
|
||||
|
||||
log_world("Ruin loader finished with [budget] left to spend.")
|
||||
|
||||
@@ -46,17 +46,21 @@
|
||||
if(!M.id || M.id == "")
|
||||
M.id = input(user, "Please select an ID for the button", "Buildmode", "")
|
||||
if(!M.id || M.id == "")
|
||||
goto line_jump
|
||||
speed_execute()
|
||||
return
|
||||
if(P.id_tag == M.id && P.id_tag && P.id_tag != "")
|
||||
P.id_tag = null
|
||||
to_chat(user, "[P] unlinked.")
|
||||
goto line_jump
|
||||
speed_execute()
|
||||
return
|
||||
if(!M.normaldoorcontrol)
|
||||
if(link_lines.len && alert(user, "Warning: This will disable links to connected pod doors. Continue?", "Buildmode", "Yes", "No") == "No")
|
||||
goto line_jump
|
||||
speed_execute()
|
||||
return
|
||||
M.normaldoorcontrol = 1
|
||||
if(P.id_tag && alert(user, "Warning: This will unlink something else from the door. Continue?", "Buildmode", "Yes", "No") == "No")
|
||||
goto line_jump
|
||||
speed_execute()
|
||||
return
|
||||
P.id_tag = M.id
|
||||
if(istype(link_obj, /obj/machinery/door_control) && istype(object, /obj/machinery/door/poddoor))
|
||||
var/obj/machinery/door_control/M = link_obj
|
||||
@@ -64,24 +68,29 @@
|
||||
if(!M.id || M.id == "")
|
||||
M.id = input(user, "Please select an ID for the button", "Buildmode", "")
|
||||
if(!M.id || M.id == "")
|
||||
goto line_jump
|
||||
speed_execute()
|
||||
return
|
||||
if(P.id_tag == M.id && P.id_tag && P.id_tag != "")
|
||||
P.id_tag = null
|
||||
to_chat(user, "[P] unlinked.")
|
||||
goto line_jump
|
||||
speed_execute()
|
||||
return
|
||||
if(M.normaldoorcontrol)
|
||||
if(link_lines.len && alert(user, "Warning: This will disable links to connected airlocks. Continue?", "Buildmode", "Yes", "No") == "No")
|
||||
goto line_jump
|
||||
speed_execute()
|
||||
return
|
||||
M.normaldoorcontrol = 0
|
||||
if(!M.id || M.id == "")
|
||||
M.id = input(user, "Please select an ID for the button", "Buildmode", "")
|
||||
if(!M.id || M.id == "")
|
||||
goto line_jump
|
||||
speed_execute()
|
||||
return
|
||||
if(P.id_tag && P.id_tag != 1 && alert(user, "Warning: This will unlink something else from the door. Continue?", "Buildmode", "Yes", "No") == "No")
|
||||
goto line_jump
|
||||
speed_execute()
|
||||
return
|
||||
P.id_tag = M.id
|
||||
|
||||
line_jump // For the goto
|
||||
/datum/buildmode_mode/link/proc/speed_execute() // For exiting out of hell
|
||||
clear_lines()
|
||||
|
||||
if(istype(link_obj, /obj/machinery/door_control))
|
||||
|
||||
@@ -427,7 +427,7 @@
|
||||
|
||||
/client/proc/is_connecting_from_localhost()
|
||||
var/localhost_addresses = list("127.0.0.1", "::1") // Adresses
|
||||
if(!isnull(address) && address in localhost_addresses)
|
||||
if(!isnull(address) && (address in localhost_addresses))
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
|
||||
@@ -200,7 +200,7 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts
|
||||
var/unlock_content = 0
|
||||
|
||||
//Gear stuff
|
||||
var/list/gear = list()
|
||||
var/list/loadout_gear = list()
|
||||
var/gear_tab = "General"
|
||||
// Parallax
|
||||
var/parallax = PARALLAX_HIGH
|
||||
@@ -508,9 +508,9 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts
|
||||
if(TAB_GEAR)
|
||||
var/total_cost = 0
|
||||
var/list/type_blacklist = list()
|
||||
if(gear && gear.len)
|
||||
for(var/i = 1, i <= gear.len, i++)
|
||||
var/datum/gear/G = GLOB.gear_datums[gear[i]]
|
||||
if(loadout_gear && loadout_gear.len)
|
||||
for(var/i = 1, i <= loadout_gear.len, i++)
|
||||
var/datum/gear/G = GLOB.gear_datums[loadout_gear[i]]
|
||||
if(G)
|
||||
if(!G.subtype_cost_overlap)
|
||||
if(G.subtype_path in type_blacklist)
|
||||
@@ -543,7 +543,7 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts
|
||||
dat += "<tr><td colspan=4><hr></td></tr>"
|
||||
for(var/gear_name in LC.gear)
|
||||
var/datum/gear/G = LC.gear[gear_name]
|
||||
var/ticked = (G.display_name in gear)
|
||||
var/ticked = (G.display_name in loadout_gear)
|
||||
if(G.donator_tier > user.client.donator_level)
|
||||
dat += "<tr style='vertical-align:top;'><td width=15%><B>[G.display_name]</B></td>"
|
||||
else
|
||||
@@ -576,10 +576,10 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts
|
||||
|
||||
|
||||
/datum/preferences/proc/get_gear_metadata(var/datum/gear/G)
|
||||
. = gear[G.display_name]
|
||||
. = loadout_gear[G.display_name]
|
||||
if(!.)
|
||||
. = list()
|
||||
gear[G.display_name] = .
|
||||
loadout_gear[G.display_name] = .
|
||||
|
||||
/datum/preferences/proc/get_tweak_metadata(var/datum/gear/G, var/datum/gear_tweak/tweak)
|
||||
var/list/metadata = get_gear_metadata(G)
|
||||
@@ -721,7 +721,7 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts
|
||||
HTML += "</td></tr>"
|
||||
|
||||
for(var/i = 1, i < (limit - index), i += 1) // Finish the column so it is even
|
||||
HTML += "<tr bgcolor='[lastJob.selection_color]'><td width='60%' align='right'> </td><td> </td></tr>"
|
||||
HTML += "<tr bgcolor='[lastJob ? lastJob.selection_color : "#ffffff"]'><td width='60%' align='right'> </td><td> </td></tr>"
|
||||
|
||||
HTML += "</td'></tr></table>"
|
||||
|
||||
@@ -1162,15 +1162,15 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts
|
||||
if(href_list["preference"] == "gear")
|
||||
if(href_list["toggle_gear"])
|
||||
var/datum/gear/TG = GLOB.gear_datums[href_list["toggle_gear"]]
|
||||
if(TG.display_name in gear)
|
||||
gear -= TG.display_name
|
||||
if(TG.display_name in loadout_gear)
|
||||
loadout_gear -= TG.display_name
|
||||
else
|
||||
if(TG.donator_tier && user.client.donator_level < TG.donator_tier)
|
||||
to_chat(user, "<span class='warning'>That gear is only available at a higher donation tier than you are on.</span>")
|
||||
return
|
||||
var/total_cost = 0
|
||||
var/list/type_blacklist = list()
|
||||
for(var/gear_name in gear)
|
||||
for(var/gear_name in loadout_gear)
|
||||
var/datum/gear/G = GLOB.gear_datums[gear_name]
|
||||
if(istype(G))
|
||||
if(!G.subtype_cost_overlap)
|
||||
@@ -1180,7 +1180,7 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts
|
||||
total_cost += G.cost
|
||||
|
||||
if((total_cost + TG.cost) <= max_gear_slots)
|
||||
gear += TG.display_name
|
||||
loadout_gear += TG.display_name
|
||||
|
||||
else if(href_list["gear"] && href_list["tweak"])
|
||||
var/datum/gear/gear = GLOB.gear_datums[href_list["gear"]]
|
||||
@@ -1194,7 +1194,7 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts
|
||||
else if(href_list["select_category"])
|
||||
gear_tab = href_list["select_category"]
|
||||
else if(href_list["clear_loadout"])
|
||||
gear.Cut()
|
||||
loadout_gear.Cut()
|
||||
|
||||
ShowChoices(user)
|
||||
return
|
||||
|
||||
@@ -259,7 +259,7 @@
|
||||
//socks
|
||||
socks = query.item[49]
|
||||
body_accessory = query.item[50]
|
||||
gear = params2list(query.item[51])
|
||||
loadout_gear = params2list(query.item[51])
|
||||
autohiss_mode = text2num(query.item[52])
|
||||
|
||||
//Sanitize
|
||||
@@ -318,7 +318,7 @@
|
||||
if(!player_alt_titles) player_alt_titles = new()
|
||||
if(!organ_data) src.organ_data = list()
|
||||
if(!rlimb_data) src.rlimb_data = list()
|
||||
if(!gear) gear = list()
|
||||
if(!loadout_gear) loadout_gear = list()
|
||||
|
||||
return 1
|
||||
|
||||
@@ -336,8 +336,8 @@
|
||||
rlimblist = list2params(rlimb_data)
|
||||
if(!isemptylist(player_alt_titles))
|
||||
playertitlelist = list2params(player_alt_titles)
|
||||
if(!isemptylist(gear))
|
||||
gearlist = list2params(gear)
|
||||
if(!isemptylist(loadout_gear))
|
||||
gearlist = list2params(loadout_gear)
|
||||
|
||||
var/DBQuery/firstquery = GLOB.dbcon.NewQuery("SELECT slot FROM [format_table_name("characters")] WHERE ckey='[C.ckey]' ORDER BY slot")
|
||||
firstquery.Execute()
|
||||
@@ -493,7 +493,8 @@
|
||||
|
||||
/datum/preferences/proc/SetChangelog(client/C,hash)
|
||||
lastchangelog=hash
|
||||
if(GLOB.preferences_datums[C.ckey].toggles & UI_DARKMODE)
|
||||
var/datum/preferences/P = GLOB.preferences_datums[C.ckey]
|
||||
if(P.toggles & UI_DARKMODE)
|
||||
winset(C, "rpane.changelog", "background-color=#40628a;font-color=#ffffff;font-style=none")
|
||||
else
|
||||
winset(C, "rpane.changelog", "background-color=none;font-style=none")
|
||||
|
||||
@@ -335,7 +335,6 @@ BLIND // can't see anything
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
set_sensors(usr)
|
||||
..()
|
||||
|
||||
//Head
|
||||
/obj/item/clothing/head
|
||||
@@ -739,7 +738,7 @@ BLIND // can't see anything
|
||||
if(!usr.incapacitated())
|
||||
if(copytext(item_color,-2) != "_d")
|
||||
basecolor = item_color
|
||||
if(basecolor + "_d_s" in icon_states('icons/mob/uniform.dmi'))
|
||||
if((basecolor + "_d_s") in icon_states('icons/mob/uniform.dmi'))
|
||||
item_color = item_color == "[basecolor]" ? "[basecolor]_d" : "[basecolor]"
|
||||
usr.update_inv_w_uniform()
|
||||
else
|
||||
|
||||
@@ -95,7 +95,7 @@
|
||||
phaseanim.loc = to_turf
|
||||
sleep(7)
|
||||
if(holder)
|
||||
if(user && user in holder.contents)
|
||||
if(user && (user in holder.contents))
|
||||
user.loc = to_turf
|
||||
if(user.client)
|
||||
if(camera)
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
to_chat(usr, "Your module is not installed in a hardsuit.")
|
||||
return
|
||||
|
||||
module.holder.ui_interact(usr, nano_state = GLOB.contained_state)
|
||||
module.holder.ui_interact(usr, state = GLOB.contained_state)
|
||||
|
||||
/obj/item/rig_module/ai_container
|
||||
|
||||
|
||||
@@ -958,7 +958,7 @@
|
||||
if(linked_staff.faith >= 100) //if the linked staff is fully recharged, do nothing
|
||||
return
|
||||
|
||||
if(!linked_staff in range(3, get_turf(src))) //staff won't charge at range (to prevent it from being handed off / stolen and used)
|
||||
if(!(linked_staff in range(3, get_turf(src)))) //staff won't charge at range (to prevent it from being handed off / stolen and used)
|
||||
if(prob(10)) //10% chance per process should avoid being too spammy, can tweak if it ends up still being too frequent.
|
||||
to_chat(H, "<span class='warning'>Your staff is unable to charge at this range. Get closer!</span>")
|
||||
return
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
|
||||
/obj/item/reagent_containers/glass/rag/afterattack(atom/A as obj|turf|area, mob/user as mob,proximity)
|
||||
if(!proximity) return
|
||||
if(istype(A) && src in user)
|
||||
if(istype(A) && (src in user))
|
||||
user.visible_message("[user] starts to wipe down [A] with [src]!")
|
||||
if(do_after(user, wipespeed, target = A))
|
||||
user.visible_message("[user] finishes wiping off the [A]!")
|
||||
|
||||
@@ -40,7 +40,7 @@ GLOBAL_VAR(current_date_string)
|
||||
return 0
|
||||
if(ACCESS_CENT_COMMANDER in held_card.access)
|
||||
return 2
|
||||
else if(ACCESS_HOP in held_card.access || ACCESS_CAPTAIN in held_card.access)
|
||||
else if((ACCESS_HOP in held_card.access) || (ACCESS_CAPTAIN in held_card.access))
|
||||
return 1
|
||||
|
||||
/obj/machinery/computer/account_database/proc/accounting_letterhead(report_name)
|
||||
|
||||
@@ -150,7 +150,7 @@
|
||||
var/obj/item/I = usr.get_active_hand()
|
||||
if(istype(I, /obj/item/card))
|
||||
var/obj/item/card/id/C = I
|
||||
if(ACCESS_CENT_COMMANDER in C.access || ACCESS_HOP in C.access || ACCESS_CAPTAIN in C.access)
|
||||
if((ACCESS_CENT_COMMANDER in C.access) || (ACCESS_HOP in C.access) || (ACCESS_CAPTAIN in C.access))
|
||||
access_code = 0
|
||||
to_chat(usr, "[bicon(src)]<span class='info'>Access code reset to 0.</span>")
|
||||
else if(istype(I, /obj/item/card/emag))
|
||||
@@ -190,8 +190,4 @@
|
||||
playsound(src, 'sound/machines/chime.ogg', 50, 1)
|
||||
visible_message("[bicon(src)] The [src] chimes.")
|
||||
transaction_paid = 1
|
||||
|
||||
else
|
||||
..()
|
||||
|
||||
//emag?
|
||||
|
||||
@@ -80,18 +80,23 @@
|
||||
if(!M.mind || !M.client || M.client.inactivity > 10 * 10 * 60) // longer than 10 minutes AFK counts them as inactive
|
||||
continue
|
||||
|
||||
if(istype(M, /mob/living/silicon/robot) && M:module && M:module.name == "engineering robot module")
|
||||
active_with_role["Engineer"]++
|
||||
if(istype(M, /mob/living/silicon/robot))
|
||||
var/mob/living/silicon/robot/R = M
|
||||
if(R.module && (R.module.name == "engineering robot module"))
|
||||
active_with_role["Engineer"]++
|
||||
|
||||
if(R.module && (R.module.name == "medical robot module"))
|
||||
active_with_role["Medical"]++
|
||||
|
||||
if(R.module && (R.module.name == "security robot module"))
|
||||
active_with_role["Security"]++
|
||||
|
||||
if(M.mind.assigned_role in list("Chief Engineer", "Station Engineer"))
|
||||
active_with_role["Engineer"]++
|
||||
|
||||
if(istype(M, /mob/living/silicon/robot) && M:module && M:module.name == "medical robot module")
|
||||
active_with_role["Medical"]++
|
||||
if(M.mind.assigned_role in list("Chief Medical Officer", "Medical Doctor"))
|
||||
active_with_role["Medical"]++
|
||||
|
||||
if(istype(M, /mob/living/silicon/robot) && M:module && M:module.name == "security robot module")
|
||||
active_with_role["Security"]++
|
||||
if(M.mind.assigned_role in GLOB.security_positions)
|
||||
active_with_role["Security"]++
|
||||
|
||||
|
||||
@@ -491,7 +491,7 @@
|
||||
return message
|
||||
|
||||
/proc/generate_static_ion_law()
|
||||
/var/list/players = list()
|
||||
var/list/players = list()
|
||||
for(var/mob/living/carbon/human/player in GLOB.player_list)
|
||||
if( !player.mind || player.mind.assigned_role == player.mind.special_role || player.client.inactivity > MinutesToTicks(10))
|
||||
continue
|
||||
|
||||
@@ -19,7 +19,7 @@ GLOBAL_LIST_INIT(unused_trade_stations, list("sol"))
|
||||
if(seclevel2num(get_security_level()) >= SEC_LEVEL_RED)
|
||||
GLOB.event_announcement.Announce("A trading shuttle from Jupiter Station has been denied docking permission due to the heightened security alert aboard [station_name()].", "Trader Shuttle Docking Request Refused")
|
||||
// if the docking request was refused, fire another major event in 60 seconds
|
||||
var/list/datum/event_container/EC = SSevents.event_containers[EVENT_LEVEL_MAJOR]
|
||||
var/datum/event_container/EC = SSevents.event_containers[EVENT_LEVEL_MAJOR]
|
||||
EC.next_event_time = world.time + (60 * 10)
|
||||
return
|
||||
|
||||
|
||||
@@ -732,7 +732,7 @@ GLOBAL_LIST_INIT(non_fakeattack_weapons, list(/obj/item/gun/projectile, /obj/ite
|
||||
var/radio_messages = list("Xenos!","Singularity loose!","Comms down!","They are arming the nuke!","They butchered Ian!","H-help!","[pick("Cult", "Wizard", "Ling", "Ops", "Revenant", "Murderer", "Harm", "I hear flashing", "Help")] in [pick(GLOB.teleportlocs)][prob(50)?"!":"!!"]","Where's [target.name]?","Call the shuttle!","AI rogue!!")
|
||||
|
||||
var/list/mob/living/carbon/people = list()
|
||||
var/list/mob/living/carbon/person = null
|
||||
var/mob/living/carbon/person = null
|
||||
for(var/mob/living/carbon/H in view(target))
|
||||
if(H == target)
|
||||
continue
|
||||
|
||||
@@ -88,7 +88,7 @@
|
||||
bro.cell.use(chargeAmount)
|
||||
to_chat(user, "<span class='notice'>Now synthesizing [trans] units of [refillName]...</span>")
|
||||
addtimer(CALLBACK(reagents, /datum/reagents.proc/add_reagent, refill, trans), 300)
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/__to_chat, user, "<span class='notice'>Cyborg [src] refilled.</span>"), 300)
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, user, "<span class='notice'>Cyborg [src] refilled.</span>"), 300)
|
||||
|
||||
else if(target.is_drainable()) //A dispenser. Transfer FROM it TO us.
|
||||
if(!is_refillable())
|
||||
|
||||
@@ -348,14 +348,14 @@
|
||||
for(var/i in 1 to seed.growthstages)
|
||||
if("[seed.icon_grow][i]" in states)
|
||||
continue
|
||||
log_runtime("[seed.name] ([seed.type]) lacks the [seed.icon_grow][i] icon!", src)
|
||||
log_runtime("[seed.name] ([seed.type]) lacks the [seed.icon_grow][i] icon!")
|
||||
|
||||
if(!(seed.icon_dead in states))
|
||||
log_runtime("[seed.name] ([seed.type]) lacks the [seed.icon_dead] icon!", src)
|
||||
log_runtime("[seed.name] ([seed.type]) lacks the [seed.icon_dead] icon!")
|
||||
|
||||
if(seed.icon_harvest) // mushrooms have no grown sprites, same for items with no product
|
||||
if(!(seed.icon_harvest in states))
|
||||
log_runtime("[seed.name] ([seed.type]) lacks the [seed.icon_harvest] icon!", src)
|
||||
log_runtime("[seed.name] ([seed.type]) lacks the [seed.icon_harvest] icon!")
|
||||
|
||||
/obj/item/seeds/proc/randomize_stats()
|
||||
set_lifespan(rand(25, 60))
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
var/points = 0 //How many points this ore gets you from the ore redemption machine
|
||||
var/refined_type = null //What this ore defaults to being refined into
|
||||
|
||||
/obj/item/stack/ore/New()
|
||||
/obj/item/stack/ore/New(loc, new_amount, merge = TRUE)
|
||||
..()
|
||||
pixel_x = rand(0, 16) - 8
|
||||
pixel_y = rand(0, 8) - 8
|
||||
|
||||
@@ -117,7 +117,6 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER)
|
||||
MA.blend_mode = COPY.blend_mode
|
||||
MA.color = COPY.color
|
||||
MA.dir = COPY.dir
|
||||
MA.gender = COPY.gender
|
||||
MA.icon = COPY.icon
|
||||
MA.icon_state = COPY.icon_state
|
||||
MA.layer = COPY.layer
|
||||
@@ -131,7 +130,6 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER)
|
||||
if(!isicon(MA.icon) && !LAZYLEN(MA.overlays)) // Gibbing/dusting/melting removes the icon before ghostize()ing the mob, so we need to account for that
|
||||
MA.icon = initial(icon)
|
||||
MA.icon_state = initial(icon_state)
|
||||
MA.suffix = COPY.suffix
|
||||
MA.underlays = COPY.underlays
|
||||
|
||||
. = MA
|
||||
|
||||
@@ -90,7 +90,7 @@
|
||||
if(speaker_name != speaker.real_name && speaker.real_name)
|
||||
speaker_name = "[speaker.real_name] ([speaker_name])"
|
||||
track = "([ghost_follow_link(speaker, ghost=src)]) "
|
||||
if(client.prefs.toggles & CHAT_GHOSTEARS && speaker in view(src))
|
||||
if(client.prefs.toggles & CHAT_GHOSTEARS && (speaker in view(src)))
|
||||
message = "<b>[message]</b>"
|
||||
|
||||
if(!can_hear())
|
||||
|
||||
@@ -83,7 +83,7 @@
|
||||
else //Maybe uses plasma in the future, although that wouldn't make any sense...
|
||||
leaping = 1
|
||||
update_icons()
|
||||
throw_at(A, MAX_ALIEN_LEAP_DIST, 1, spin = 0, diagonals_first = 1, callback = CALLBACK(src, .leap_end))
|
||||
throw_at(A, MAX_ALIEN_LEAP_DIST, 1, spin = 0, diagonals_first = 1, callback = CALLBACK(src, .proc/leap_end))
|
||||
|
||||
/mob/living/carbon/alien/humanoid/hunter/proc/leap_end()
|
||||
leaping = 0
|
||||
|
||||
@@ -83,7 +83,7 @@
|
||||
return Attach(AM)
|
||||
return 0
|
||||
|
||||
/obj/item/clothing/mask/facehugger/throw_at(atom/target, range, speed)
|
||||
/obj/item/clothing/mask/facehugger/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback, force)
|
||||
if(!..())
|
||||
return
|
||||
if(stat == CONSCIOUS)
|
||||
|
||||
@@ -111,7 +111,7 @@
|
||||
var/obj/item/organ/external/O = get_organ(organ_name)
|
||||
|
||||
if(amount > 0)
|
||||
O.receive_damage(amount, 0, sharp=is_sharp(damage_source), used_weapon=damage_source, list(), FALSE, updating_health)
|
||||
O.receive_damage(amount, 0, sharp=is_sharp(damage_source), used_weapon=damage_source, forbidden_limbs = list(), ignore_resists=FALSE, updating_health=updating_health)
|
||||
else
|
||||
//if you don't want to heal robot organs, they you will have to check that yourself before using this proc.
|
||||
O.heal_damage(-amount, 0, internal = 0, robo_repair = O.is_robotic(), updating_health = updating_health)
|
||||
|
||||
@@ -23,7 +23,7 @@ GLOBAL_DATUM_INIT(default_martial_art, /datum/martial_art, new())
|
||||
var/backbag = 2 //Which backpack type the player has chosen. Nothing, Satchel or Backpack.
|
||||
|
||||
//Equipment slots
|
||||
var/obj/item/w_uniform = null
|
||||
var/obj/item/clothing/under/w_uniform = null
|
||||
var/obj/item/shoes = null
|
||||
var/obj/item/belt = null
|
||||
var/obj/item/gloves = null
|
||||
|
||||
@@ -897,7 +897,7 @@
|
||||
|
||||
// Not on the station or mining?
|
||||
var/turf/temp_turf = get_turf(remoteview_target)
|
||||
if(!temp_turf in config.contact_levels)
|
||||
if(!(temp_turf in config.contact_levels))
|
||||
to_chat(src, "<span class='alert'>Your psy-connection grows too faint to maintain!</span>")
|
||||
isRemoteObserve = 0
|
||||
|
||||
@@ -1123,4 +1123,4 @@
|
||||
|
||||
// Need this in species.
|
||||
//#undef HUMAN_MAX_OXYLOSS
|
||||
//#undef HUMAN_CRIT_MAX_OXYLOSS
|
||||
//#undef HUMAN_CRIT_MAX_OXYLOSS
|
||||
|
||||
@@ -347,7 +347,7 @@
|
||||
|
||||
if(H.LAssailant && ishuman(H.LAssailant)) //superheros still get the comical hit markers
|
||||
var/mob/living/carbon/human/A = H.LAssailant
|
||||
if(A.mind && A.mind in (SSticker.mode.superheroes || SSticker.mode.supervillains || SSticker.mode.greyshirts))
|
||||
if(A.mind && (A.mind in (SSticker.mode.superheroes) || SSticker.mode.supervillains || SSticker.mode.greyshirts))
|
||||
var/list/attack_bubble_recipients = list()
|
||||
var/mob/living/user
|
||||
for(var/mob/O in viewers(user, src))
|
||||
@@ -963,7 +963,7 @@ It'll return null if the organ doesn't correspond, so include null checks when u
|
||||
|
||||
/datum/species/proc/spec_hitby(atom/movable/AM, mob/living/carbon/human/H)
|
||||
|
||||
/datum/species/proc/spec_attacked_by(obj/item/I, mob/living/user, obj/item/bodypart/affecting, intent, mob/living/carbon/human/H)
|
||||
/datum/species/proc/spec_attacked_by(obj/item/I, mob/living/user, obj/item/organ/external/affecting, intent, mob/living/carbon/human/H)
|
||||
|
||||
/proc/get_random_species(species_name = FALSE) // Returns a random non black-listed or hazardous species, either as a string or datum
|
||||
var/static/list/random_species = list()
|
||||
|
||||
@@ -474,7 +474,7 @@
|
||||
if(P.is_reflectable)
|
||||
H.visible_message("<span class='danger'>The [P.name] gets reflected by [H]'s glass skin!</span>", \
|
||||
"<span class='userdanger'>The [P.name] gets reflected by [H]'s glass skin!</span>")
|
||||
|
||||
|
||||
P.reflect_back(H)
|
||||
|
||||
return FALSE
|
||||
@@ -534,7 +534,7 @@
|
||||
if(world.time > last_teleport + teleport_cooldown && M != H && M.a_intent != INTENT_HELP)
|
||||
reactive_teleport(H)
|
||||
|
||||
/datum/species/golem/bluespace/spec_attacked_by(obj/item/I, mob/living/user, obj/item/bodypart/affecting, intent, mob/living/carbon/human/H)
|
||||
/datum/species/golem/bluespace/spec_attacked_by(obj/item/I, mob/living/user, obj/item/organ/external/affecting, intent, mob/living/carbon/human/H)
|
||||
..()
|
||||
if(world.time > last_teleport + teleport_cooldown && user != H)
|
||||
reactive_teleport(H)
|
||||
@@ -654,7 +654,7 @@
|
||||
new/obj/item/grown/bananapeel/specialpeel(get_turf(H))
|
||||
last_banana = world.time
|
||||
|
||||
/datum/species/golem/bananium/spec_attacked_by(obj/item/I, mob/living/user, obj/item/bodypart/affecting, intent, mob/living/carbon/human/H)
|
||||
/datum/species/golem/bananium/spec_attacked_by(obj/item/I, mob/living/user, obj/item/organ/external/affecting, intent, mob/living/carbon/human/H)
|
||||
..()
|
||||
if(world.time > last_banana + banana_cooldown && user != H)
|
||||
new/obj/item/grown/bananapeel/specialpeel(get_turf(H))
|
||||
|
||||
@@ -575,7 +575,7 @@ GLOBAL_LIST_EMPTY(damage_icon_parts)
|
||||
bloodsies.color = w_uniform.blood_color
|
||||
standing.overlays += bloodsies
|
||||
|
||||
if(w_uniform:accessories.len) //WE CHECKED THE TYPE ABOVE. THIS REALLY SHOULD BE FINE. // oh my god kys whoever made this if statement jfc :gun:
|
||||
if(w_uniform.accessories.len) //WE CHECKED THE TYPE ABOVE. THIS REALLY SHOULD BE FINE. // oh my god kys whoever made this if statement jfc :gun:
|
||||
for(var/obj/item/clothing/accessory/A in w_uniform:accessories)
|
||||
var/tie_color = A.item_color
|
||||
if(!tie_color)
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
prepare_data_huds()
|
||||
|
||||
/mob/living/proc/prepare_data_huds()
|
||||
..()
|
||||
med_hud_set_health()
|
||||
med_hud_set_status()
|
||||
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
if(radio)
|
||||
radio.wires.CutWireIndex(RADIO_WIRE_TRANSMIT)
|
||||
|
||||
if(camera && "Robots" in camera.network)
|
||||
if(camera && ("Robots" in camera.network))
|
||||
camera.network.Add("Engineering")
|
||||
|
||||
//They are unable to be upgraded, so let's give them a bit of a better battery.
|
||||
|
||||
@@ -328,7 +328,7 @@ GLOBAL_LIST_INIT(robot_verbs_default, list(
|
||||
if("Miner")
|
||||
module = new /obj/item/robot_module/miner(src)
|
||||
module.channels = list("Supply" = 1)
|
||||
if(camera && "Robots" in camera.network)
|
||||
if(camera && ("Robots" in camera.network))
|
||||
camera.network.Add("Mining Outpost")
|
||||
module_sprites["Basic"] = "Miner_old"
|
||||
module_sprites["Advanced Droid"] = "droid-miner"
|
||||
@@ -340,7 +340,7 @@ GLOBAL_LIST_INIT(robot_verbs_default, list(
|
||||
if("Medical")
|
||||
module = new /obj/item/robot_module/medical(src)
|
||||
module.channels = list("Medical" = 1)
|
||||
if(camera && "Robots" in camera.network)
|
||||
if(camera && ("Robots" in camera.network))
|
||||
camera.network.Add("Medical")
|
||||
module_sprites["Basic"] = "Medbot"
|
||||
module_sprites["Surgeon"] = "surgeon"
|
||||
@@ -366,7 +366,7 @@ GLOBAL_LIST_INIT(robot_verbs_default, list(
|
||||
if("Engineering")
|
||||
module = new /obj/item/robot_module/engineering(src)
|
||||
module.channels = list("Engineering" = 1)
|
||||
if(camera && "Robots" in camera.network)
|
||||
if(camera && ("Robots" in camera.network))
|
||||
camera.network.Add("Engineering")
|
||||
module_sprites["Basic"] = "Engineering"
|
||||
module_sprites["Antique"] = "engineerrobot"
|
||||
|
||||
@@ -184,7 +184,7 @@
|
||||
if(L == user)
|
||||
continue
|
||||
var/turf/T = get_turf(L.loc)
|
||||
if(T && T in targets)
|
||||
if(T && (T in targets))
|
||||
L.EyeBlind(4)
|
||||
return
|
||||
|
||||
|
||||
@@ -374,11 +374,11 @@
|
||||
return
|
||||
return
|
||||
|
||||
if(parrot_interest && parrot_interest in view(src))
|
||||
if(parrot_interest && (parrot_interest in view(src)))
|
||||
parrot_state = PARROT_SWOOP | PARROT_STEAL
|
||||
return
|
||||
|
||||
if(parrot_perch && parrot_perch in view(src))
|
||||
if(parrot_perch && (parrot_perch in view(src)))
|
||||
parrot_state = PARROT_SWOOP | PARROT_RETURN
|
||||
return
|
||||
|
||||
|
||||
@@ -261,7 +261,7 @@
|
||||
Feedon(Food)
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/slime/unEquip(obj/item/I)
|
||||
/mob/living/simple_animal/slime/unEquip(obj/item/I, force)
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/slime/start_pulling(atom/movable/AM, state, force = move_force, supress_message = FALSE)
|
||||
|
||||
@@ -60,7 +60,6 @@ GLOBAL_VAR_INIT(totaltribbles, 0) //global variable so it updates for all trib
|
||||
|
||||
|
||||
/mob/living/simple_animal/tribble/proc/procreate()
|
||||
..()
|
||||
if(GLOB.totaltribbles <= maxtribbles)
|
||||
for(var/mob/living/simple_animal/tribble/F in src.loc)
|
||||
if(!F || F == src)
|
||||
|
||||
@@ -384,7 +384,7 @@
|
||||
if(GLOB.summon_magic_triggered)
|
||||
give_magic(character)
|
||||
|
||||
if(!thisjob.is_position_available() && thisjob in SSjobs.prioritized_jobs)
|
||||
if(!thisjob.is_position_available() && (thisjob in SSjobs.prioritized_jobs))
|
||||
SSjobs.prioritized_jobs -= thisjob
|
||||
qdel(src)
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
if(monitored_alarm_ids)
|
||||
for(var/obj/machinery/alarm/alarm in GLOB.machines)
|
||||
if(alarm.alarm_id && alarm.alarm_id in monitored_alarm_ids)
|
||||
if(alarm.alarm_id && (alarm.alarm_id in monitored_alarm_ids))
|
||||
monitored_alarms += alarm
|
||||
// machines may not yet be ordered at this point
|
||||
monitored_alarms = dd_sortedObjectList(monitored_alarms)
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
*
|
||||
* @return nothing
|
||||
*/
|
||||
/datum/proc/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/nano_ui/master_ui = null, var/datum/topic_state/state = GLOB.default_state)
|
||||
/datum/proc/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/nanoui/master_ui = null, var/datum/topic_state/state = GLOB.default_state)
|
||||
return
|
||||
|
||||
/**
|
||||
|
||||
@@ -135,7 +135,6 @@
|
||||
P.name = "paper - '[G.fields["name"]]'"
|
||||
virgin = 0 //tabbing here is correct- it's possible for people to try and use it
|
||||
//before the records have been generated, so we do this inside the loop.
|
||||
..()
|
||||
|
||||
/obj/structure/filingcabinet/security/attack_hand()
|
||||
populate()
|
||||
@@ -169,7 +168,6 @@
|
||||
P.name = "paper - '[G.fields["name"]]'"
|
||||
virgin = 0 //tabbing here is correct- it's possible for people to try and use it
|
||||
//before the records have been generated, so we do this inside the loop.
|
||||
..()
|
||||
|
||||
/obj/structure/filingcabinet/medical/attack_hand()
|
||||
populate()
|
||||
|
||||
@@ -1,8 +1,3 @@
|
||||
#define APC_WIRE_IDSCAN 1
|
||||
#define APC_WIRE_MAIN_POWER1 2
|
||||
#define APC_WIRE_MAIN_POWER2 3
|
||||
#define APC_WIRE_AI_CONTROL 4
|
||||
|
||||
//update_state
|
||||
#define UPSTATE_CELL_IN 1
|
||||
#define UPSTATE_OPENED1 2
|
||||
@@ -430,11 +425,11 @@
|
||||
if(stat & (NOPOWER | BROKEN))
|
||||
return
|
||||
if(!second_pass) //The first time, we just cut overlays
|
||||
addtimer(CALLBACK(src, .get_spooked, TRUE), 1)
|
||||
addtimer(CALLBACK(src, /obj/machinery/power/apc/proc.get_spooked, TRUE), 1)
|
||||
cut_overlays()
|
||||
else
|
||||
flick("apcemag", src) //Second time we cause the APC to update its icon, then add a timer to update icon later
|
||||
addtimer(CALLBACK(src, .proc/update_icon, TRUE), 10)
|
||||
addtimer(CALLBACK(src, /obj/machinery/power/apc/proc.update_icon, TRUE), 10)
|
||||
|
||||
//attack with an item - open/close cover, insert cell, or (un)lock interface
|
||||
/obj/machinery/power/apc/attackby(obj/item/W, mob/living/user, params)
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
chambered.newshot(params)
|
||||
return
|
||||
|
||||
/obj/item/gun/magic/process_fire()
|
||||
/obj/item/gun/magic/process_fire(atom/target as mob|obj|turf, mob/living/user as mob|obj, message = 1, params, zone_override, bonus_spread = 0)
|
||||
newshot()
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -106,7 +106,7 @@
|
||||
target.adjustBruteLoss(-4)
|
||||
target.adjustFireLoss(-4)
|
||||
if(ishuman(target))
|
||||
var/var/mob/living/carbon/human/H = target
|
||||
var/mob/living/carbon/human/H = target
|
||||
for(var/obj/item/organ/external/E in H.bodyparts)
|
||||
if(prob(10))
|
||||
E.mend_fracture()
|
||||
|
||||
@@ -178,7 +178,7 @@
|
||||
|
||||
/datum/reagent/consumable/drink/banana/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
if((ishuman(M) && COMIC in M.mutations) || issmall(M))
|
||||
if((ishuman(M) && (COMIC in M.mutations)) || issmall(M))
|
||||
update_flags |= M.adjustBruteLoss(-1, FALSE)
|
||||
update_flags |= M.adjustFireLoss(-1, FALSE)
|
||||
return ..() | update_flags
|
||||
@@ -409,7 +409,7 @@
|
||||
|
||||
/datum/reagent/consumable/drink/bananahonk/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
if((ishuman(M) && COMIC in M.mutations) || issmall(M))
|
||||
if((ishuman(M) && (COMIC in M.mutations)) || issmall(M))
|
||||
update_flags |= M.adjustBruteLoss(-1, FALSE)
|
||||
update_flags |= M.adjustFireLoss(-1, FALSE)
|
||||
return ..() | update_flags
|
||||
@@ -426,7 +426,7 @@
|
||||
|
||||
/datum/reagent/consumable/drink/silencer/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
if(ishuman(M) && M.job in list("Mime"))
|
||||
if(ishuman(M) && (M.job in list("Mime")))
|
||||
update_flags |= M.adjustBruteLoss(-1, FALSE)
|
||||
update_flags |= M.adjustFireLoss(-1, FALSE)
|
||||
return ..() | update_flags
|
||||
|
||||
@@ -376,7 +376,7 @@
|
||||
|
||||
/datum/reagent/consumable/sprinkles/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
if(ishuman(M) && M.job in list("Security Officer", "Security Pod Pilot", "Detective", "Warden", "Head of Security", "Brig Physician", "Internal Affairs Agent", "Magistrate"))
|
||||
if(ishuman(M) && (M.job in list("Security Officer", "Security Pod Pilot", "Detective", "Warden", "Head of Security", "Brig Physician", "Internal Affairs Agent", "Magistrate")))
|
||||
update_flags |= M.adjustBruteLoss(-1, FALSE)
|
||||
update_flags |= M.adjustFireLoss(-1, FALSE)
|
||||
return ..() | update_flags
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
var/datum/reagents/R = reagent_list[reagent_list.len]
|
||||
R.add_reagent(reagent, 30)
|
||||
|
||||
/obj/item/reagent_containers/borghypo/attack(mob/living/M, mob/user)
|
||||
/obj/item/reagent_containers/borghypo/attack(mob/living/carbon/human/M, mob/user)
|
||||
var/datum/reagents/R = reagent_list[mode]
|
||||
if(!R.total_volume)
|
||||
to_chat(user, "<span class='warning'>The injector is empty.</span>")
|
||||
|
||||
@@ -98,7 +98,7 @@ GLOBAL_VAR_INIT(ert_request_answered, FALSE)
|
||||
ert_role_prefs.Add(input_ranked_async(M, "Please order ERT roles from most to least preferred (20 seconds):", GLOB.active_team.get_slot_list()))
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/dispatch_response_team, response_team_members, ert_gender_prefs, ert_role_prefs), 200)
|
||||
|
||||
/proc/dispatch_response_team(list/response_team_members, list/ert_gender_prefs, list/ert_role_prefs)
|
||||
/proc/dispatch_response_team(list/response_team_members, list/datum/async_input/ert_gender_prefs, list/datum/async_input/ert_role_prefs)
|
||||
var/spawn_index = 1
|
||||
|
||||
for(var/i = 1, i <= response_team_members.len, i++)
|
||||
@@ -227,6 +227,7 @@ GLOBAL_VAR_INIT(ert_request_answered, FALSE)
|
||||
return cyborg_unlock
|
||||
|
||||
/datum/response_team/proc/get_slot_list()
|
||||
RETURN_TYPE(/list)
|
||||
var/list/slots_available = list()
|
||||
for(var/role in slots)
|
||||
if(slots[role])
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
layer = 3.9
|
||||
infra_luminosity = 15
|
||||
|
||||
var/list/mob/pilot //There is only ever one pilot and he gets all the privledge
|
||||
var/mob/pilot //There is only ever one pilot and he gets all the privledge
|
||||
var/list/mob/passengers = list() //passengers can't do anything and are variable in number
|
||||
var/max_passengers = 0
|
||||
var/obj/item/storage/internal/cargo_hold
|
||||
@@ -698,7 +698,7 @@
|
||||
return 1
|
||||
|
||||
/obj/spacepod/MouseDrop_T(atom/A, mob/user)
|
||||
if(user == pilot || user in passengers)
|
||||
if(user == pilot || (user in passengers))
|
||||
return
|
||||
|
||||
if(istype(A,/mob))
|
||||
|
||||
@@ -111,9 +111,9 @@
|
||||
|
||||
/obj/item/organ/internal/cyberimp/brain/anti_drop/proc/release_items()
|
||||
active = FALSE
|
||||
if(!l_hand_ignore && l_hand_obj in owner.contents)
|
||||
if(!l_hand_ignore && (l_hand_obj in owner.contents))
|
||||
l_hand_obj.flags ^= NODROP
|
||||
if(!r_hand_ignore && r_hand_obj in owner.contents)
|
||||
if(!r_hand_ignore && (r_hand_obj in owner.contents))
|
||||
r_hand_obj.flags ^= NODROP
|
||||
|
||||
/obj/item/organ/internal/cyberimp/brain/anti_drop/remove(var/mob/living/carbon/M, special = 0)
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
owner.SetEyeBlurry(0)
|
||||
owner.SetEyeBlind(0)
|
||||
|
||||
/obj/item/organ/internal/eyes/robotize()
|
||||
/obj/item/organ/internal/eyes/robotize(make_tough)
|
||||
colourmatrix = null
|
||||
..() //Make sure the organ's got the robotic status indicators before updating the client colour.
|
||||
if(owner)
|
||||
|
||||
@@ -248,7 +248,7 @@
|
||||
return
|
||||
damage = max(damage - amount, 0)
|
||||
|
||||
/obj/item/organ/proc/robotize() //Being used to make robutt hearts, etc
|
||||
/obj/item/organ/proc/robotize(make_tough) //Being used to make robutt hearts, etc
|
||||
status &= ~ORGAN_BROKEN
|
||||
status &= ~ORGAN_SPLINTED
|
||||
status |= ORGAN_ROBOT
|
||||
|
||||
@@ -404,7 +404,7 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
fracture()
|
||||
|
||||
/obj/item/organ/external/proc/check_for_internal_bleeding(damage)
|
||||
if(owner && NO_BLOOD in owner.dna.species.species_traits)
|
||||
if(owner && (NO_BLOOD in owner.dna.species.species_traits))
|
||||
return
|
||||
var/local_damage = brute_dam + damage
|
||||
if(damage > 15 && local_damage > 30 && prob(damage) && !is_robotic())
|
||||
@@ -589,12 +589,12 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
holder = owner
|
||||
if(!holder)
|
||||
return
|
||||
if(holder.handcuffed && body_part in list(ARM_LEFT, ARM_RIGHT, HAND_LEFT, HAND_RIGHT))
|
||||
if(holder.handcuffed && (body_part in list(ARM_LEFT, ARM_RIGHT, HAND_LEFT, HAND_RIGHT)))
|
||||
holder.visible_message(\
|
||||
"\The [holder.handcuffed.name] falls off of [holder.name].",\
|
||||
"\The [holder.handcuffed.name] falls off you.")
|
||||
holder.unEquip(holder.handcuffed)
|
||||
if(holder.legcuffed && body_part in list(FOOT_LEFT, FOOT_RIGHT, LEG_LEFT, LEG_RIGHT))
|
||||
if(holder.legcuffed && (body_part in list(FOOT_LEFT, FOOT_RIGHT, LEG_LEFT, LEG_RIGHT)))
|
||||
holder.visible_message(\
|
||||
"\The [holder.legcuffed.name] falls off of [holder.name].",\
|
||||
"\The [holder.legcuffed.name] falls off you.")
|
||||
|
||||
@@ -141,7 +141,7 @@
|
||||
|
||||
// Brain is defined in brain_item.dm.
|
||||
|
||||
/obj/item/organ/internal/robotize()
|
||||
/obj/item/organ/internal/robotize(make_tough)
|
||||
if(!is_robotic())
|
||||
var/list/states = icon_states('icons/obj/surgery.dmi') //Insensitive to specially-defined icon files for species like the Drask or whomever else. Everyone gets the same robotic heart.
|
||||
if(slot == "heart" && ("[slot]-c-on" in states) && ("[slot]-c-off" in states)) //Give the robotic heart its robotic heart icons if they exist.
|
||||
|
||||
@@ -152,7 +152,7 @@ GLOBAL_DATUM_INIT(multispin_words, /regex, regex("like a record baby"))
|
||||
message = lowertext(message)
|
||||
playsound(get_turf(owner), 'sound/magic/invoke_general.ogg', 300, 1, 5)
|
||||
|
||||
var/mob/living/list/listeners = list()
|
||||
var/list/mob/living/listeners = list()
|
||||
for(var/mob/living/L in get_mobs_in_view(8, owner, TRUE))
|
||||
if(L.can_hear() && !L.null_rod_check() && L != owner && L.stat != DEAD)
|
||||
if(ishuman(L))
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
toolspeed = 1
|
||||
usesound = 'sound/items/deconstruct.ogg'
|
||||
|
||||
/obj/item/stack/ore/bluespace_crystal/New()
|
||||
/obj/item/stack/ore/bluespace_crystal/New(loc, new_amount, merge = TRUE)
|
||||
..()
|
||||
pixel_x = rand(-5, 5)
|
||||
pixel_y = rand(-5, 5)
|
||||
|
||||
Reference in New Issue
Block a user