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:

+ +

Kyep updated:

+ + +

07 January 2017

+

Markolie updated:

+ +

06 January 2017

Crazylemon64 updated:

+

Fethas updated:

+ +

KasparoVy updated:

+ +

Krausus updated:

+

Kyep updated: