diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm
index 753a953b8f9..6b4b3f4837d 100644
--- a/code/__HELPERS/game.dm
+++ b/code/__HELPERS/game.dm
@@ -418,7 +418,7 @@
/proc/SecondsToTicks(var/seconds)
return seconds * 10
-proc/pollCandidates(var/Question, var/be_special_type, var/antag_age_check = 0, var/poll_time = 300, var/ignore_respawnability = 0)
+proc/pollCandidates(var/Question, var/be_special_type, var/antag_age_check = 0, var/poll_time = 300, var/ignore_respawnability = 0, var/min_hours = 0)
var/roletext = be_special_type ? get_roletext(be_special_type) : null
var/list/mob/dead/observer/candidates = list()
var/time_passed = world.time
@@ -437,12 +437,15 @@ proc/pollCandidates(var/Question, var/be_special_type, var/antag_age_check = 0,
if(roletext)
if(jobban_isbanned(G, roletext) || jobban_isbanned(G, "Syndicate"))
continue
+ if(min_hours)
+ if(G.client.get_exp_living_num() < min_hours * 60)
+ continue
if(G.has_enabled_antagHUD)
continue
spawn(0)
G << 'sound/misc/notice2.ogg'//Alerting them to their consideration
- switch(alert(G,Question,"Please answer in [poll_time/10] seconds!","Yes","No"))
+ switch(alert(G,Question,"Please answer in [poll_time/10] seconds!","Yes","No","Not This Round"))
if("Yes")
to_chat(G, "Choice registered: Yes.")
if((world.time-time_passed)>poll_time)//If more than 30 game seconds passed.
@@ -453,6 +456,11 @@ proc/pollCandidates(var/Question, var/be_special_type, var/antag_age_check = 0,
if("No")
to_chat(G, "Choice registered: No.")
return
+ if("Not This Round")
+ to_chat(G, "Choice registered: No.")
+ to_chat(G, "You will no longer receive notifications for the role '[roletext]' for the rest of the round.")
+ G.client.prefs.be_special -= be_special_type
+ return
else
return
sleep(poll_time)
diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm
index a2e8542b825..f59774142bd 100644
--- a/code/__HELPERS/mobs.dm
+++ b/code/__HELPERS/mobs.dm
@@ -249,8 +249,8 @@ Proc for attack log creation, because really why not
6 is whether the attack should be logged to the log file and shown to admins
*/
-proc/add_logs(mob/user, mob/target, what_done, var/object=null, var/addition=null, var/admin=1)
- var/list/ignore=list("shaked","CPRed","grabbed","punched")
+proc/add_logs(mob/user, mob/target, what_done, var/object=null, var/addition=null, var/admin=1, var/print_attack_log = 1)//print_attack_log notifies admins with attack logs on
+ var/list/ignore=list("shaked", "CPRed", "grabbed", "punched", "disarmed")
if(!user)
return
if(ismob(user))
@@ -259,10 +259,13 @@ proc/add_logs(mob/user, mob/target, what_done, var/object=null, var/addition=nul
target.attack_log += text("\[[time_stamp()]\] Has been [what_done] by [key_name(user)][object ? " with [object]" : " "][addition]")
if(admin)
log_attack("[key_name(user)] [what_done] [key_name(target)][object ? " with [object]" : " "][addition]")
- if(istype(target) && (target.client || target.player_logged))
- if(what_done in ignore) return
- if(target == user)return
- if(!admin) return
+ if(istype(target) && (target.key))
+ if(what_done in ignore)
+ return
+ if(target == user)
+ return
+ if(!print_attack_log)
+ return
msg_admin_attack("[key_name_admin(user)] [what_done] [key_name_admin(target)][object ? " with [object]" : " "][addition]")
/proc/do_mob(var/mob/user, var/mob/target, var/time = 30, var/uninterruptible = 0, progress = 1)
diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm
index f8aed0096b8..14481772b88 100644
--- a/code/__HELPERS/unsorted.dm
+++ b/code/__HELPERS/unsorted.dm
@@ -1014,7 +1014,7 @@ proc/get_mob_with_client_list()
else if(zone == "l_foot") return "left foot"
else if(zone == "r_foot") return "right foot"
else return zone
-
+
/*
Gets the turf this atom's *ICON* appears to inhabit
@@ -1227,7 +1227,7 @@ var/global/list/common_tools = list(
//check if mob is lying down on something we can operate him on.
/proc/can_operate(mob/living/carbon/M)
- return (locate(/obj/machinery/optable, M.loc) && M.resting) || \
+ return (locate(/obj/machinery/optable, M.loc) && (M.lying || M.resting)) || \
(locate(/obj/structure/stool/bed/roller, M.loc) && \
(M.buckled || M.lying || M.weakened || M.stunned || M.paralysis || M.sleeping || M.stat)) && prob(75) || \
(locate(/obj/structure/table/, M.loc) && \
@@ -1887,4 +1887,4 @@ var/global/list/g_fancy_list_of_types = null
var/num = pick(num_sample)
num_sample -= num
result += (1 << num)
- return result
\ No newline at end of file
+ return result
diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm
index 6c0da65ee44..46368def984 100644
--- a/code/_onclick/item_attack.dm
+++ b/code/_onclick/item_attack.dm
@@ -65,8 +65,7 @@
/////////////////////////
user.lastattacked = M
M.lastattacker = user
-
- add_logs(user, M, "attacked", name, "(INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(damtype)])")
+ add_logs(user, M, "attacked", name, "(INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(damtype)])", print_attack_log = (force > 0))//print it if stuff deals damage
if(!iscarbon(user))
M.LAssailant = null
diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm
index dfe7d746955..31b789844be 100644
--- a/code/datums/datumvars.dm
+++ b/code/datums/datumvars.dm
@@ -12,7 +12,7 @@
//set src in world
- if(!usr.client || !usr.client.holder)
+ if(!is_admin(usr))
to_chat(usr, "You need to be an administrator to access this.")
return
@@ -622,8 +622,9 @@ body
return
to_chat(M, "Control of your mob has been offered to dead players.")
log_admin("[key_name(usr)] has offered control of ([key_name(M)]) to ghosts.")
- message_admins("[key_name_admin(usr)] has offered control of ([key_name_admin(M)]) to ghosts")
- var/list/mob/dead/observer/candidates = pollCandidates("Do you want to play as [M.real_name]?", poll_time = 100)
+ var/minhours = input(usr, "Minimum hours required to play [M]?", "Set Min Hrs", 10) as num
+ message_admins("[key_name_admin(usr)] has offered control of ([key_name_admin(M)]) to ghosts with [minhours] hrs playtime")
+ var/list/mob/dead/observer/candidates = pollCandidates("Do you want to play as [M.real_name]?", poll_time = 100, min_hours = minhours)
var/mob/dead/observer/theghost = null
if(candidates.len)
diff --git a/code/datums/statclick.dm b/code/datums/statclick.dm
index 51018fae9cb..e10a63b8356 100644
--- a/code/datums/statclick.dm
+++ b/code/datums/statclick.dm
@@ -31,7 +31,7 @@
// This bit is called when clicked in the stat panel
/obj/effect/statclick/debug/Click()
- if(!usr.client.holder)
+ if(!is_admin(usr))
return
usr.client.debug_variables(target)
diff --git a/code/defines/procs/admin.dm b/code/defines/procs/admin.dm
index c05819995ec..fb9bc232e12 100644
--- a/code/defines/procs/admin.dm
+++ b/code/defines/procs/admin.dm
@@ -45,7 +45,7 @@
return .
/proc/key_name_admin(var/whom, var/include_name = 1)
- var/message = "[key_name(whom, 1, include_name)](?)[isAntag(whom) ? "(A)" : ""][isLivingSSD(whom) ? "(SSD!)" : ""] ([admin_jump_link(whom)])"
+ var/message = "[key_name(whom, 1, include_name)](?)[isAntag(whom) ? "(A)" : ""][isLivingSSD(whom) ? "(SSD!)" : ""] ([admin_jump_link(whom)])"
return message
/proc/log_and_message_admins(var/message as text)
diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm
index 93d048ce96e..5128521d6f7 100644
--- a/code/game/jobs/job_controller.dm
+++ b/code/game/jobs/job_controller.dm
@@ -358,19 +358,19 @@ var/global/datum/controller/occupations/job_master
Debug("DO, Running AC2")
- // For those who wanted to be civilians if their preferences were filled, here you go.
+ // Antags, who have to get in, come first
+ for(var/mob/new_player/player in unassigned)
+ if(player.mind.special_role)
+ GiveRandomJob(player)
+ if(player in unassigned)
+ AssignRole(player, "Civilian")
+
+ // Then we assign what we can to everyone else.
for(var/mob/new_player/player in unassigned)
if(player.client.prefs.alternate_option == BE_ASSISTANT)
Debug("AC2 Assistant located, Player: [player]")
AssignRole(player, "Civilian")
-
- for(var/mob/new_player/player in unassigned)
- if(player.mind.special_role)
- GiveRandomJob(player)
-
- //For ones returning to lobby
- for(var/mob/new_player/player in unassigned)
- if(player.client.prefs.alternate_option == RETURN_TO_LOBBY)
+ else if(player.client.prefs.alternate_option == RETURN_TO_LOBBY)
player.ready = 0
unassigned -= player
return 1
diff --git a/code/game/jobs/job_exp.dm b/code/game/jobs/job_exp.dm
index 23d217a83bc..746dfcacf44 100644
--- a/code/game/jobs/job_exp.dm
+++ b/code/game/jobs/job_exp.dm
@@ -106,9 +106,12 @@
/client/proc/get_exp_living()
+ return get_exp_format(get_exp_living_num())
+
+/client/proc/get_exp_living_num()
var/list/play_records = params2list(prefs.exp)
var/exp_living = text2num(play_records[EXP_TYPE_LIVING])
- return get_exp_format(exp_living)
+ return exp_living
/proc/get_exp_format(var/expnum)
if(expnum > 60)
diff --git a/code/game/machinery/poolcontroller.dm b/code/game/machinery/poolcontroller.dm
index db60adb5c9a..f9f1f40264d 100644
--- a/code/game/machinery/poolcontroller.dm
+++ b/code/game/machinery/poolcontroller.dm
@@ -103,13 +103,12 @@
if(drownee.losebreath > 20) //You've probably got bigger problems than drowning at this point, so we won't add to it until you get that under control.
return
+ add_logs(src, drownee, "drowned", null, null, 0) //log it to their VV, but don't spam the admins' chats with the logs
if(drownee.stat) //Mob is in critical.
drownee.AdjustLoseBreath(3, bound_lower = 0, bound_upper = 20)
- add_logs(src, drownee, "drowned", null, null, 0) //log it to their VV, but don't spam the admins' chats with the logs
drownee.visible_message("\The [drownee] appears to be drowning!","You're quickly drowning!") //inform them that they are fucked.
else
drownee.AdjustLoseBreath(2, bound_lower = 0, bound_upper = 20) //For every time you drown, you miss 2 breath attempts. Hope you catch on quick!
- add_logs(src, drownee, "drowned", null, null, 0) //log it to their VV, but don't spam the admins' chats with the logs
if(prob(35)) //35% chance to tell them what is going on. They should probably figure it out before then.
drownee.visible_message("\The [drownee] flails, almost like they are drowning!","You're lacking air!") //*gasp* *gasp* *gasp* *gasp* *gasp*
diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm
index b449e8f4f73..a10d5add7fb 100644
--- a/code/game/objects/structures/false_walls.dm
+++ b/code/game/objects/structures/false_walls.dm
@@ -25,6 +25,18 @@
/turf/simulated/wall/rust,
/turf/simulated/wall/r_wall/rust)
smooth = SMOOTH_TRUE
+
+/obj/structure/falsewall/New(loc)
+ ..()
+ air_update_turf(1)
+
+/obj/structure/falsewall/Destroy()
+ density = 0
+ air_update_turf(1)
+ return ..()
+
+/obj/structure/falsewall/CanAtmosPass(turf/T)
+ return !density
/obj/structure/falsewall/attack_hand(mob/user)
if(opening)
@@ -47,6 +59,7 @@
sleep(4)
set_opacity(1)
update_icon()
+ air_update_turf(1)
opening = 0
/obj/structure/falsewall/proc/do_the_flick()
diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm
index 68bd915ac77..2a22ffd563c 100644
--- a/code/game/objects/structures/morgue.dm
+++ b/code/game/objects/structures/morgue.dm
@@ -18,11 +18,24 @@
density = 1
dir = EAST
var/obj/structure/m_tray/connected = null
+ var/list/status_descriptors = list(
+ "The tray is currently extended.",
+ "The tray is currently empty.",
+ "The tray contains an unviable body.",
+ "The tray contains a body that is responsive to revival techniques.",
+ "The tray contains something that is not a body.",
+ "The tray contains a body that might be responsive."
+ )
anchored = 1.0
+/obj/structure/morgue/initialize()
+ . = ..()
+ update()
+
/obj/structure/morgue/proc/update()
if(connected)
icon_state = "morgue0"
+ desc = initial(desc) + "\n[status_descriptors[1]]"
else
if(contents.len)
@@ -36,13 +49,21 @@
if(M.client)
icon_state = "morgue3"
+ desc = initial(desc) + "\n[status_descriptors[4]]"
else if(G && G.client) //There is a ghost and it is connected to the server
icon_state = "morgue5"
+ desc = initial(desc) + "\n[status_descriptors[6]]"
else
icon_state = "morgue2"
+ desc = initial(desc) + "\n[status_descriptors[3]]"
- else icon_state = "morgue4"
- else icon_state = "morgue1"
+
+ else
+ icon_state = "morgue4"
+ desc = initial(desc) + "\n[status_descriptors[5]]"
+ else
+ icon_state = "morgue1"
+ desc = initial(desc) + "\n[status_descriptors[2]]"
return
diff --git a/code/modules/mob/living/carbon/alien/alien_defenses.dm b/code/modules/mob/living/carbon/alien/alien_defenses.dm
index c6e2bcc510d..c1ce34bf8e7 100644
--- a/code/modules/mob/living/carbon/alien/alien_defenses.dm
+++ b/code/modules/mob/living/carbon/alien/alien_defenses.dm
@@ -35,7 +35,7 @@ In all, this is a lot like the monkey code. /N
visible_message("[M.name] bites [src]!", \
"[M.name] bites [src]!")
adjustBruteLoss(damage)
- add_logs(M, src, "attacked", admin=0)
+ add_logs(M, src, "attacked", admin=0, print_attack_log = 0)
updatehealth()
else
to_chat(M, "[name] is too injured for that.")
diff --git a/code/modules/mob/living/carbon/alien/larva/larva.dm b/code/modules/mob/living/carbon/alien/larva/larva.dm
index c7c8c1cefa8..a78ab9c4c77 100644
--- a/code/modules/mob/living/carbon/alien/larva/larva.dm
+++ b/code/modules/mob/living/carbon/alien/larva/larva.dm
@@ -116,7 +116,7 @@
"[M] [M.attacktext] [src]!")
var/damage = rand(M.melee_damage_lower, M.melee_damage_upper)
adjustBruteLoss(damage)
- add_logs(M, src, "attacked", admin=0)
+ add_logs(M, src, "attacked", admin=0, print_attack_log = 0)
updatehealth()
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index cd0e9d751c9..b429c34f734 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -805,10 +805,12 @@
unEquip(pocket_item)
if(thief_mode)
usr.put_in_hands(pocket_item)
+ add_logs(usr, src, "stripped", addition="of [pocket_item]", print_attack_log = isLivingSSD(src))
else
if(place_item)
usr.unEquip(place_item)
equip_to_slot_if_possible(place_item, pocket_id, 0, 1)
+ add_logs(usr, src, "equipped", addition="with [pocket_item]", print_attack_log = isLivingSSD(src))
// Update strip window
if(usr.machine == src && in_range(src, usr))
@@ -817,6 +819,7 @@
// Display a warning if the user mocks up if they don't have pickpocket gloves.
if(!thief_mode)
to_chat(src, "You feel your [pocket_side] pocket being fumbled with!")
+ add_logs(usr, src, "attempted to strip", addition="of [pocket_item]", print_attack_log = isLivingSSD(src))
if(href_list["set_sensor"])
if(istype(w_uniform, /obj/item/clothing/under))
diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm
index a0e84e1a7db..4b764b9b4e2 100644
--- a/code/modules/mob/living/carbon/human/human_defense.dm
+++ b/code/modules/mob/living/carbon/human/human_defense.dm
@@ -353,8 +353,7 @@ emp_act
if(M)
src.attack_log += text("\[[time_stamp()]\] Has been hit with a [I], thrown by [key_name(M)]")
M.attack_log += text("\[[time_stamp()]\] Hit [key_name(src)] with a thrown [I]")
- if(!istype(src,/mob/living/simple_animal/mouse))
- msg_admin_attack("[key_name_admin(src)] was hit by a [I], thrown by [key_name_admin(M)]")
+ msg_admin_attack("[key_name_admin(src)] was hit by a [I], thrown by [key_name_admin(M)]", print_attack_log = I.throwforce)
//thrown weapon embedded object code.
if(dtype == BRUTE && istype(I))
diff --git a/code/modules/mob/living/carbon/update_status.dm b/code/modules/mob/living/carbon/update_status.dm
index 3b0d3a045fc..33838b3e8f2 100644
--- a/code/modules/mob/living/carbon/update_status.dm
+++ b/code/modules/mob/living/carbon/update_status.dm
@@ -12,6 +12,4 @@
KnockOut()
else
if(stat == UNCONSCIOUS)
- // updating=FALSE because `WakeUp` will handle canmove up for us
- StopResting(updating=FALSE)
WakeUp()
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index df6e913007e..373e2a7e4fd 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -650,7 +650,7 @@
who.unEquip(what)
if(silent)
put_in_hands(what)
- add_logs(src, who, "stripped", addition="of [what]")
+ add_logs(src, who, "stripped", addition="of [what]", print_attack_log = isLivingSSD(who))
// The src mob is trying to place an item on someone
// Override if a certain mob should be behave differently when placing items (can't, for example)
@@ -669,7 +669,7 @@
if(what && Adjacent(who))
unEquip(what)
who.equip_to_slot_if_possible(what, where, 0, 1)
- add_logs(src, who, "equipped", what)
+ add_logs(src, who, "equipped", what, print_attack_log = isLivingSSD(who))
/mob/living/singularity_act()
diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm
index 37414012206..60005b04a74 100644
--- a/code/modules/mob/living/living_defense.dm
+++ b/code/modules/mob/living/living_defense.dm
@@ -147,7 +147,7 @@
else
step_away(src,M)
- add_logs(M.occupant, src, "pushed", object=M, admin=0)
+ add_logs(M.occupant, src, "pushed", object=M, admin=0, print_attack_log = 0)
M.occupant_message("You push [src] out of the way.")
visible_message("[M] pushes [src] out of the way.")
return
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index 00a141f60f8..710f8d8dff1 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -603,7 +603,7 @@ var/list/ai_verbs_default = list(
if(M.attack_sound)
playsound(loc, M.attack_sound, 50, 1, 1)
visible_message("[M] [M.attacktext] [src]!")
- add_logs(M, src, "attacked", admin=0)
+ add_logs(M, src, "attacked", admin=0, print_attack_log = 0)
var/damage = rand(M.melee_damage_lower, M.melee_damage_upper)
adjustBruteLoss(damage)
updatehealth()
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index 02d3401c080..64b6da638c0 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -920,7 +920,7 @@ var/list/robot_verbs_default = list(
if(M.attack_sound)
playsound(loc, M.attack_sound, 50, 1, 1)
visible_message("[M] [M.attacktext] [src]!")
- add_logs(M, src, "attacked", admin=0)
+ add_logs(M, src, "attacked", admin=0, print_attack_log = 0)
var/damage = rand(M.melee_damage_lower, M.melee_damage_upper)
switch(M.melee_damage_type)
if(BRUTE)
@@ -1467,4 +1467,4 @@ var/list/robot_verbs_default = list(
borked_part.installed = 1
borked_part.wrapped = new borked_part.external_type
borked_part.heal_damage(brute,burn)
- borked_part.install()
\ No newline at end of file
+ borked_part.install()
diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm
index 48f75ede66d..ffd3f91cf5c 100644
--- a/code/modules/mob/living/simple_animal/bot/bot.dm
+++ b/code/modules/mob/living/simple_animal/bot/bot.dm
@@ -254,7 +254,7 @@
return
apply_damage(M.melee_damage_upper, BRUTE)
visible_message("[M] has [M.attacktext] [src]!")
- add_logs(M, src, "attacked", admin=0)
+ add_logs(M, src, "attacked", admin=0, print_attack_log = 0)
if(prob(10))
new /obj/effect/decal/cleanable/blood/oil(loc)
@@ -1010,4 +1010,4 @@ Pass a positive integer as an argument to override a bot's default speed.
throw_alert("temp", /obj/screen/alert/cold/robot, 2)
/mob/living/simple_animal/bot/is_mechanical()
- return 1
\ No newline at end of file
+ return 1
diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm
index cd06b8c85f5..6a21f421716 100644
--- a/code/modules/mob/living/simple_animal/simple_animal.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal.dm
@@ -297,7 +297,7 @@
playsound(loc, M.attack_sound, 50, 1, 1)
visible_message("\The [M] [M.attacktext] [src]!", \
"\The [M] [M.attacktext] [src]!")
- add_logs(M, src, "attacked", admin=0)
+ add_logs(M, src, "attacked", admin=0, print_attack_log = 0)
var/damage = rand(M.melee_damage_lower, M.melee_damage_upper)
attack_threshold_check(damage,M.melee_damage_type)
diff --git a/code/modules/mob/living/stat_states.dm b/code/modules/mob/living/stat_states.dm
index f04196f9fc9..58c4221504d 100644
--- a/code/modules/mob/living/stat_states.dm
+++ b/code/modules/mob/living/stat_states.dm
@@ -6,7 +6,7 @@
return 0
else if(stat == UNCONSCIOUS)
return 0
- add_logs(src, null, "fallen unconscious at [atom_loc_line(get_turf(src))]", admin=0)
+ add_logs(src, null, "fallen unconscious at [atom_loc_line(get_turf(src))]", admin=0, print_attack_log = 0)
stat = UNCONSCIOUS
if(updating)
// update_blind_effects()
@@ -19,7 +19,7 @@
return 0
else if(stat == CONSCIOUS)
return 0
- add_logs(src, null, "woken up at [atom_loc_line(get_turf(src))]", admin=0)
+ add_logs(src, null, "woken up at [atom_loc_line(get_turf(src))]", admin=0, print_attack_log = 0)
stat = CONSCIOUS
if(updating)
// update_blind_effects()
@@ -40,7 +40,7 @@
return
if(!can_be_revived())
return
- add_logs(src, null, "came back to life at [atom_loc_line(get_turf(src))]", admin=0)
+ add_logs(src, null, "came back to life at [atom_loc_line(get_turf(src))]", admin=0, print_attack_log = 0)
stat = CONSCIOUS
dead_mob_list -= src
living_mob_list += src
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index 44ba3cb99c3..6293707cdc8 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -946,8 +946,7 @@ var/list/slot_equipment_priority = list( \
add_spell_to_statpanel(S)
- if(client && client.holder)
-
+ if(is_admin(src))
if(statpanel("DI")) //not looking at that panel
stat("Loc", "([x], [y], [z]) [loc]")
stat("CPU", "[world.cpu]")
diff --git a/code/modules/mob/new_player/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories.dm
index 2e40b49db36..a29a2e9480a 100644
--- a/code/modules/mob/new_player/sprite_accessories.dm
+++ b/code/modules/mob/new_player/sprite_accessories.dm
@@ -2028,7 +2028,7 @@
models_allowed = list("Xion Manufacturing Group alt.")
/datum/sprite_accessory/body_markings/tattoo // Tattoos applied post-round startup with tattoo guns in item_defines.dm
- species_allowed = list("Human", "Unathi", "Grey", "Vulpkanin", "Tajaran", "Skrell")
+ species_allowed = list("Human", "Unathi", "Vulpkanin", "Tajaran", "Skrell")
icon_state = "accessory_none"
/datum/sprite_accessory/body_markings/tattoo/elliot
@@ -2053,6 +2053,25 @@
name = "Nightling Tattoo"
icon_state = "markings_tattoo_nightling"
+/datum/sprite_accessory/body_markings/tattoo/grey
+ species_allowed = list("Grey")
+
+/datum/sprite_accessory/body_markings/tattoo/grey/heart_grey
+ name = "Grey Heart Tattoo"
+ icon_state = "markings_tattoo_heart_grey"
+
+/datum/sprite_accessory/body_markings/tattoo/grey/hive_grey
+ name = "Grey Hive Tattoo"
+ icon_state = "markings_tattoo_hive_grey"
+
+/datum/sprite_accessory/body_markings/tattoo/grey/nightling_grey
+ name = "Grey Nightling Tattoo"
+ icon_state = "markings_tattoo_nightling_grey"
+
+/datum/sprite_accessory/body_markings/tattoo/grey/tiger_body_grey
+ name = "Grey Tiger-stripe Tattoo"
+ icon_state = "markings_tattoo_tiger_grey"
+
/datum/sprite_accessory/body_markings/tattoo/vox
species_allowed = list("Vox")
@@ -2068,6 +2087,10 @@
name = "Vox Nightling Tattoo"
icon_state = "markings_tattoo_nightling_vox"
+/datum/sprite_accessory/body_markings/tattoo/vox/tiger_body_vox
+ name = "Vox Tiger-stripe Tattoo"
+ icon_state = "markings_tattoo_tiger_vox"
+
/datum/sprite_accessory/body_markings/tail
species_allowed = list()
icon_state = "accessory_none"
diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm
index d6e7a2e710c..7b0bcda17d0 100644
--- a/code/modules/projectiles/projectile.dm
+++ b/code/modules/projectiles/projectile.dm
@@ -52,6 +52,8 @@
var/forcedodge = 0 //to pass through everything
var/dismemberment = 0 //The higher the number, the greater the bonus to dismembering. 0 will not dismember at all.
+ var/log = 1 //whether print to admin attack logs or just keep it in the diary
+
/obj/item/projectile/New()
permutated = list()
return ..()
@@ -88,7 +90,7 @@
for(var/datum/reagent/R in reagents.reagent_list)
reagent_note += R.id + " ("
reagent_note += num2text(R.volume) + ") "
- add_logs(firer, L, "shot", src, reagent_note)
+ add_logs(firer, L, "shot", src, reagent_note, print_attack_log = log)
return L.apply_effects(stun, weaken, paralyze, irradiate, slur, stutter, eyeblur, drowsy, blocked, stamina, jitter)
/obj/item/projectile/proc/vol_by_damage()
diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm
index d9cf8360d2a..872ee7c3f26 100644
--- a/code/modules/projectiles/projectile/beams.dm
+++ b/code/modules/projectiles/projectile/beams.dm
@@ -20,6 +20,7 @@
name = "practice laser"
damage = 0
nodamage = 1
+ log = 0
/obj/item/projectile/beam/scatter
name = "laser pellet"
@@ -74,6 +75,7 @@
damage_type = STAMINA
flag = "laser"
var/suit_types = list(/obj/item/clothing/suit/redtag, /obj/item/clothing/suit/bluetag)
+ log = 0
/obj/item/projectile/beam/lasertag/on_hit(atom/target, blocked = 0)
. = ..()
diff --git a/code/modules/projectiles/projectile/reusable.dm b/code/modules/projectiles/projectile/reusable.dm
index 12e7b30c759..17aaad71a2a 100644
--- a/code/modules/projectiles/projectile/reusable.dm
+++ b/code/modules/projectiles/projectile/reusable.dm
@@ -37,6 +37,7 @@
var/obj/item/weapon/pen/pen = null
edge = 0
embed = 0
+ log = 0//it won't log even when there's a pen inside, but since the damage will be so low, I don't think there's any point in making it any more complex
/obj/item/projectile/bullet/reusable/foam_dart/handle_drop()
if(dropped)
@@ -64,3 +65,4 @@
icon_state = "foamdart_riot"
ammo_type = /obj/item/ammo_casing/caseless/foam_dart/riot
stamina = 25
+ log = 1
diff --git a/html/changelog.html b/html/changelog.html
index ad5adf00e12..11d88e379af 100644
--- a/html/changelog.html
+++ b/html/changelog.html
@@ -55,11 +55,45 @@
-->
+
09 January 2017
+
Crazylemon64 updated:
+
+ - The operating table now checks for both either `lying` or `resting` - so surgery will work no matter what on unconscious people lying on your table.
+
+
Kyep updated:
+
+ - Antags should no longer get bounced to lobby at round start in certain rare situations.
+
+
+
07 January 2017
+
Markolie updated:
+
+ - False walls now block atmospherics, unless it's open.
+
+
06 January 2017
Crazylemon64 updated:
- pAI UIs no longer break
- The chem dispenser's UI now displays the remaining energy again
+ - Shuttles no longer make buckling useless
+ - You should no longer go mute randomly
+ - You can now opt out of all requests on a role for a round
+ - Morgue trays now have descriptions that correspond to each of the morgue light states
+ - Waking up no longer auto-cancels resting.
+
+
Fethas updated:
+
+ - ports parts TG neo-oldcult rscadd:Ports parts of cult from VG
+
+
KasparoVy updated:
+
+ - Grey sprites have been tidied up and no longer have any random pixels hanging off.
+ - Grey species-fitted tattoo sprites and the last Vox species-fitted tattoo sprite.
+
+
Krausus updated:
+
+ - SDQL2 can now directly manipulate clients.
Kyep updated:
diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml
index 2e2a987390e..4de6bf51203 100644
--- a/html/changelogs/.all_changelog.yml
+++ b/html/changelogs/.all_changelog.yml
@@ -3262,6 +3262,31 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
Crazylemon64:
- bugfix: pAI UIs no longer break
- bugfix: The chem dispenser's UI now displays the remaining energy again
+ - bugfix: Shuttles no longer make buckling useless
+ - bugfix: You should no longer go mute randomly
+ - tweak: You can now opt out of all requests on a role for a round
+ - tweak: Morgue trays now have descriptions that correspond to each of the morgue
+ light states
+ - tweak: Waking up no longer auto-cancels resting.
+ Fethas:
+ - rscadd: ports parts TG neo-oldcult rscadd:Ports parts of cult from VG
+ KasparoVy:
+ - bugfix: Grey sprites have been tidied up and no longer have any random pixels
+ hanging off.
+ - rscadd: Grey species-fitted tattoo sprites and the last Vox species-fitted tattoo
+ sprite.
+ Krausus:
+ - bugfix: SDQL2 can now directly manipulate clients.
Kyep:
- bugfix: Mobs in vents no longer see vents/scrubbers as unwelded when they are
welded, and vice versa.
+2017-01-07:
+ Markolie:
+ - bugfix: False walls now block atmospherics, unless it's open.
+2017-01-09:
+ Crazylemon64:
+ - tweak: The operating table now checks for both either `lying` or `resting` - so
+ surgery will work no matter what on unconscious people lying on your table.
+ Kyep:
+ - bugfix: Antags should no longer get bounced to lobby at round start in certain
+ rare situations.
diff --git a/html/changelogs/AutoChangeLog-pr-4392.yml b/html/changelogs/AutoChangeLog-pr-4392.yml
deleted file mode 100644
index 9202b4256f7..00000000000
--- a/html/changelogs/AutoChangeLog-pr-4392.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-author: "Fethas"
-delete-after: True
-changes:
- - rscadd: "ports parts TG neo-oldcult
-rscadd:Ports parts of cult from VG"
diff --git a/html/changelogs/AutoChangeLog-pr-6053.yml b/html/changelogs/AutoChangeLog-pr-6053.yml
deleted file mode 100644
index 7e3d32275c8..00000000000
--- a/html/changelogs/AutoChangeLog-pr-6053.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Crazylemon64"
-delete-after: True
-changes:
- - bugfix: "Shuttles no longer make buckling useless"
diff --git a/html/changelogs/AutoChangeLog-pr-6064.yml b/html/changelogs/AutoChangeLog-pr-6064.yml
deleted file mode 100644
index bd8b2386e35..00000000000
--- a/html/changelogs/AutoChangeLog-pr-6064.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Krausus"
-delete-after: True
-changes:
- - bugfix: "SDQL2 can now directly manipulate clients."
diff --git a/html/changelogs/AutoChangeLog-pr-6065.yml b/html/changelogs/AutoChangeLog-pr-6065.yml
deleted file mode 100644
index d4f9dfcfd61..00000000000
--- a/html/changelogs/AutoChangeLog-pr-6065.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Crazylemon64"
-delete-after: True
-changes:
- - bugfix: "You should no longer go mute randomly"
diff --git a/icons/mob/body_accessory.dmi b/icons/mob/body_accessory.dmi
index 6e94d89854d..8d635c2c2df 100644
Binary files a/icons/mob/body_accessory.dmi and b/icons/mob/body_accessory.dmi differ
diff --git a/icons/mob/human_face.dmi b/icons/mob/human_face.dmi
index c61955bf778..25722400d84 100644
Binary files a/icons/mob/human_face.dmi and b/icons/mob/human_face.dmi differ
diff --git a/icons/mob/human_races/r_def_grey.dmi b/icons/mob/human_races/r_def_grey.dmi
index d270ab83934..b243f88e401 100644
Binary files a/icons/mob/human_races/r_def_grey.dmi and b/icons/mob/human_races/r_def_grey.dmi differ
diff --git a/icons/mob/human_races/r_grey.dmi b/icons/mob/human_races/r_grey.dmi
index 4f603380545..b243f88e401 100644
Binary files a/icons/mob/human_races/r_grey.dmi and b/icons/mob/human_races/r_grey.dmi differ