From 74f04671f850ed2246926ea864153823b346363d Mon Sep 17 00:00:00 2001 From: GinjaNinja32 Date: Tue, 28 Jul 2015 13:37:15 +0100 Subject: [PATCH 01/12] His book? Her book. --- code/modules/mob/dead/observer/observer.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index c7dea3bb9d1..ecea7745dce 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -567,7 +567,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp toggle_visibility(1) else user.visible_message ( \ - "[user] just tried to smash his book into that ghost! It's not very effective.", \ + "[user] just tried to smash \his book into that ghost! It's not very effective.", \ "You get the feeling that the ghost can't become any more visible." \ ) From d203362d38317ff27ae58c0b8ba31aa2e8e54613 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Mon, 27 Jul 2015 17:45:27 -0400 Subject: [PATCH 02/12] Fixes #10258 Turrets now aim at the chest/groin unless the target has a neck grab on someone, otherwise they aim elsewhere. Projectiles are now able to miss targets that are lying or buckled, except when the target is at point blank range and is the original target for the projectile. --- code/game/machinery/portable_turret.dm | 8 ++++++++ code/game/machinery/turrets.dm | 9 +++++++++ code/modules/mob/mob_helpers.dm | 8 ++++---- code/modules/projectiles/projectile.dm | 2 +- 4 files changed, 22 insertions(+), 5 deletions(-) diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm index 934aeec09c3..7f7a02b5f0b 100644 --- a/code/game/machinery/portable_turret.dm +++ b/code/game/machinery/portable_turret.dm @@ -624,6 +624,14 @@ var/list/turret_icons // Emagged turrets again use twice as much power due to higher firing rates use_power(reqpower * (2 * (emagged || lethal)) * (2 * emagged)) + //Turrets aim for the center of mass by default. + //If the target is grabbing someone then the turret smartly aims for extremities + var/obj/item/weapon/grab/G = locate() in target + if(G && G.state >= GRAB_NECK) //works because mobs are currently not allowed to upgrade to NECK if they are grabbing two people. + A.def_zone = pick("head", "l_hand", "r_hand", "l_foot", "r_foot", "l_arm", "r_arm", "l_leg", "r_leg") + else + A.def_zone = pick("chest", "groin") + //Shooting Code: A.current = T A.starting = T diff --git a/code/game/machinery/turrets.dm b/code/game/machinery/turrets.dm index 3581c51e182..87edc01204c 100644 --- a/code/game/machinery/turrets.dm +++ b/code/game/machinery/turrets.dm @@ -266,6 +266,15 @@ else A = new /obj/item/projectile/energy/electrode( loc ) use_power(200) + + //Turrets aim for the center of mass by default. + //If the target is grabbing someone then the turret smartly aims for extremities + var/obj/item/weapon/grab/G = locate() in target + if(G && G.state >= GRAB_NECK) //works because mobs are currently not allowed to upgrade to NECK if they are grabbing two people. + A.def_zone = pick("head", "l_hand", "r_hand", "l_foot", "r_foot", "l_arm", "r_arm", "l_leg", "r_leg") + else + A.def_zone = pick("chest", "groin") + A.current = T A.starting = T A.yo = U.y - T.y diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 0a716ded345..0911a225934 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -264,11 +264,11 @@ var/list/global/organ_rel_size = list( /proc/get_zone_with_miss_chance(zone, var/mob/target, var/miss_chance_mod = 0, var/ranged_attack=0) zone = check_zone(zone) - // you cannot miss if your target is prone or restrained - if(target.buckled || target.lying) - return zone - // if your target is being grabbed aggressively by someone you cannot miss either if(!ranged_attack) + // you cannot miss if your target is prone or restrained + if(target.buckled || target.lying) + return zone + // if your target is being grabbed aggressively by someone you cannot miss either for(var/obj/item/weapon/grab/G in target.grabbed_by) if(G.state >= GRAB_AGGRESSIVE) return zone diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index f13ad242873..4b5b1aab7ea 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -165,7 +165,7 @@ //roll to-hit miss_modifier = max(15*(distance-2) - round(15*accuracy) + miss_modifier, 0) - var/hit_zone = get_zone_with_miss_chance(def_zone, target_mob, miss_modifier, ranged_attack=(distance > 1)) + var/hit_zone = get_zone_with_miss_chance(def_zone, target_mob, miss_modifier, ranged_attack=(distance > 1 || original != target_mob)) //if the projectile hits a target we weren't originally aiming at then retain the chance to miss if(!hit_zone) visible_message("\The [src] misses [target_mob] narrowly!") return 0 From 6df770cab3cb795341ab8ae84535ff49dc6429d3 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Mon, 27 Jul 2015 19:04:47 -0400 Subject: [PATCH 03/12] Fixes projectiles being able to hit humans in organs they do not have. Will also prevent body shields blocking bullets with non-existant limbs. Expands on the special return values for bullet_act(), adds defines for them. --- code/game/machinery/alarm.dm | 2 +- code/game/objects/items/shooting_range.dm | 2 +- code/game/objects/structures/girders.dm | 2 +- code/game/objects/structures/grille.dm | 2 +- .../mob/living/carbon/human/human_defense.dm | 10 ++++++---- code/modules/projectiles/projectile.dm | 15 +++++++++------ code/setup.dm | 4 ++++ html/changelogs/HarpyEagle-dev-freeze.yml | 3 ++- 8 files changed, 25 insertions(+), 15 deletions(-) diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index a5106be41ea..9c4d3009e42 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -919,7 +919,7 @@ FIRE ALARM /obj/machinery/firealarm/attack_ai(mob/user as mob) return src.attack_hand(user) -/obj/machinery/firealarm/bullet_act(BLAH) +/obj/machinery/firealarm/bullet_act() return src.alarm() /obj/machinery/firealarm/emp_act(severity) diff --git a/code/game/objects/items/shooting_range.dm b/code/game/objects/items/shooting_range.dm index 2893b4f3a10..8f24a93c10d 100644 --- a/code/game/objects/items/shooting_range.dm +++ b/code/game/objects/items/shooting_range.dm @@ -146,7 +146,7 @@ return - return -1 // the bullet/projectile goes through the target! Ie, you missed + return PROJECTILE_CONTINUE // the bullet/projectile goes through the target! // Small memory holder entity for transparent bullet holes diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index 38caaa3230b..67bf484f39c 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -25,7 +25,7 @@ /obj/structure/girder/bullet_act(var/obj/item/projectile/Proj) //Girders only provide partial cover. There's a chance that the projectiles will just pass through. (unless you are trying to shoot the girder) if(Proj.original != src && !prob(cover)) - return -1 //pass through + return PROJECTILE_CONTINUE //pass through //Tasers and the like should not damage girders. if(!(Proj.damage_type == BRUTE || Proj.damage_type == BURN)) diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index 569a4eb3b95..5f5dcaa48ab 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -94,7 +94,7 @@ passthrough = 1 if(passthrough) - . = -1 + . = PROJECTILE_CONTINUE damage = between(0, (damage - Proj.damage)*(Proj.damage_type == BRUTE? 0.4 : 1), 10) //if the bullet passes through then the grille avoids most of the damage src.health -= damage*0.2 diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 29832ae1ecd..0de5729ec99 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -10,9 +10,11 @@ emp_act /mob/living/carbon/human/bullet_act(var/obj/item/projectile/P, var/def_zone) - var/obj/item/organ/external/organ = get_organ(check_zone(def_zone)) - if(!organ) - return + def_zone = check_zone(def_zone) + if(!has_organ(def_zone)) + return PROJECTILE_FORCE_MISS //if they don't have the organ in question then the projectile just passes by. + + var/obj/item/organ/external/organ = get_organ() //Shields if(check_shields(P.damage, "the [P.name]")) @@ -37,7 +39,7 @@ emp_act // redirect the projectile P.redirect(new_x, new_y, curloc, src) - return -1 // complete projectile permutation + return PROJECTILE_CONTINUE // complete projectile permutation //Shrapnel if(P.can_embed()) diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 4b5b1aab7ea..6d8c40c16c2 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -166,13 +166,16 @@ //roll to-hit miss_modifier = max(15*(distance-2) - round(15*accuracy) + miss_modifier, 0) var/hit_zone = get_zone_with_miss_chance(def_zone, target_mob, miss_modifier, ranged_attack=(distance > 1 || original != target_mob)) //if the projectile hits a target we weren't originally aiming at then retain the chance to miss - if(!hit_zone) + + var/result = PROJECTILE_FORCE_MISS + if(hit_zone) + def_zone = hit_zone //set def_zone, so if the projectile ends up hitting someone else later (to be implemented), it is more likely to hit the same part + result = target_mob.bullet_act(src, def_zone) + + if(result == PROJECTILE_FORCE_MISS) visible_message("\The [src] misses [target_mob] narrowly!") return 0 - //set def_zone, so if the projectile ends up hitting someone else later (to be implemented), it is more likely to hit the same part - def_zone = hit_zone - //hit messages if(silenced) target_mob << "You've been hit in the [parse_zone(def_zone)] by \the [src]!" @@ -193,7 +196,7 @@ msg_admin_attack("UNKNOWN shot [target_mob] ([target_mob.ckey]) with \a [src] (JMP)") //sometimes bullet_act() will want the projectile to continue flying - if (target_mob.bullet_act(src, def_zone) == -1) + if (result == PROJECTILE_CONTINUE) return 0 return 1 @@ -227,7 +230,7 @@ else passthrough = 1 //so ghosts don't stop bullets else - passthrough = (A.bullet_act(src, def_zone) == -1) //backwards compatibility + passthrough = (A.bullet_act(src, def_zone) == PROJECTILE_CONTINUE) //backwards compatibility if(isturf(A)) for(var/obj/O in A) O.bullet_act(src) diff --git a/code/setup.dm b/code/setup.dm index 62fe99ac67f..73d0f1611ab 100644 --- a/code/setup.dm +++ b/code/setup.dm @@ -720,6 +720,10 @@ var/list/be_special_flags = list( #define FILE_DRM 16 // Some files want to not be copied/moved. This is them complaining that you tried. #define NETWORK_FAILURE 32 +// Special return values from bullet_act(). Positive return values are already used to indicate the blocked level of the projectile. +#define PROJECTILE_CONTINUE -1 //if the projectile should continue flying after calling bullet_act() +#define PROJECTILE_FORCE_MISS -2 //if the projectile should treat the attack as a miss (suppresses attack and admin logs) - only applies to mobs. + // Some on_mob_life() procs check for alien races. #define IS_DIONA 1 #define IS_VOX 2 diff --git a/html/changelogs/HarpyEagle-dev-freeze.yml b/html/changelogs/HarpyEagle-dev-freeze.yml index a999f1236dc..d7bf101a08f 100644 --- a/html/changelogs/HarpyEagle-dev-freeze.yml +++ b/html/changelogs/HarpyEagle-dev-freeze.yml @@ -1,3 +1,4 @@ author: HarpyEagle -changes: [] delete-after: false +changes: + - bugfix: "Fixed projectiles being able to hit people in body parts that they don't have. This will also mean that the less limbs someone has the less effective they will be as a body shield." \ No newline at end of file From 2cf4f6e4db593b740d71bbd941f580e66e36880e Mon Sep 17 00:00:00 2001 From: GinjaNinja32 Date: Wed, 29 Jul 2015 06:39:03 +0100 Subject: [PATCH 04/12] Change Topic() 'status' command to make more sense --- code/world.dm | 43 ++++++++++++++++++++++++++++++------------- 1 file changed, 30 insertions(+), 13 deletions(-) diff --git a/code/world.dm b/code/world.dm index 8737f69b0dc..14cfbe6196b 100644 --- a/code/world.dm +++ b/code/world.dm @@ -104,7 +104,8 @@ var/world_topic_spam_protect_time = world.timeofday n++ return n - else if (T == "status") + else if (copytext(T,1,7) == "status") + var/input[] = params2list(T) var/list/s = list() s["version"] = game_version s["mode"] = master_mode @@ -113,21 +114,37 @@ var/world_topic_spam_protect_time = world.timeofday s["vote"] = config.allow_vote_mode s["ai"] = config.allow_ai s["host"] = host ? host : null - s["players"] = list() s["stationtime"] = worldtime2text() - var/n = 0 - var/admins = 0 - for(var/client/C in clients) - if(C.holder) - if(C.holder.fakekey) - continue //so stealthmins aren't revealed by the hub - admins++ - s["player[n]"] = C.key - n++ - s["players"] = n + if(input["status"] == "2") + var/list/players = list() + var/list/admins = list() - s["admins"] = admins + for(var/client/C in clients) + if(C.holder) + if(C.holder.fakekey) + continue + admins[C.key] = C.holder.rank + players += C.key + + s["players"] = players.len + s["playerlist"] = list2params(players) + s["admins"] = admins.len + s["adminlist"] = list2params(admins) + else + var/n = 0 + var/admins = 0 + + for(var/client/C in clients) + if(C.holder) + if(C.holder.fakekey) + continue //so stealthmins aren't revealed by the hub + admins++ + s["player[n]"] = C.key + n++ + + s["players"] = n + s["admins"] = admins return list2params(s) From 84c76254903837940ac6ede58399ddc57dd3894d Mon Sep 17 00:00:00 2001 From: GinjaNinja32 Date: Wed, 29 Jul 2015 07:55:30 +0100 Subject: [PATCH 05/12] Chemical logging improvements --- baystation12.dme | 1 + code/modules/admin/admin_verbs.dm | 3 +- code/modules/reagents/Chemistry-Holder.dm | 1 + code/modules/reagents/Chemistry-Logging.dm | 28 +++++++++++++++++++ code/modules/reagents/Chemistry-Recipes.dm | 4 +++ .../reagents/reagent_containers/syringes.dm | 14 ++++++---- 6 files changed, 45 insertions(+), 6 deletions(-) create mode 100644 code/modules/reagents/Chemistry-Logging.dm diff --git a/baystation12.dme b/baystation12.dme index dbed3c8fc38..e286a177bc9 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -1383,6 +1383,7 @@ #include "code\modules\random_map\random_map.dm" #include "code\modules\reagents\Chemistry-Colours.dm" #include "code\modules\reagents\Chemistry-Holder.dm" +#include "code\modules\reagents\Chemistry-Logging.dm" #include "code\modules\reagents\Chemistry-Machinery.dm" #include "code\modules\reagents\Chemistry-Readme.dm" #include "code\modules\reagents\Chemistry-Reagents-Antidepressants.dm" diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index a07b05dec2b..c0c92a81c7e 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -79,7 +79,8 @@ var/list/admin_verbs_admin = list( /client/proc/toggle_antagHUD_restrictions, /client/proc/allow_character_respawn, /* Allows a ghost to respawn */ /client/proc/event_manager_panel, - /client/proc/empty_ai_core_toggle_latejoin + /client/proc/empty_ai_core_toggle_latejoin, + /client/proc/view_chemical_reaction_logs ) var/list/admin_verbs_ban = list( /client/proc/unban_panel, diff --git a/code/modules/reagents/Chemistry-Holder.dm b/code/modules/reagents/Chemistry-Holder.dm index 6c6c194af58..14d3f4e6547 100644 --- a/code/modules/reagents/Chemistry-Holder.dm +++ b/code/modules/reagents/Chemistry-Holder.dm @@ -363,6 +363,7 @@ datum for(var/S in C.secondary_results) add_reagent(S, C.result_amount * C.secondary_results[S] * multiplier) + log_chemical_reaction(my_atom, C, multiplier) var/list/seen = viewers(4, get_turf(my_atom)) for(var/mob/M in seen) M << "\blue \icon[my_atom] The solution begins to bubble." diff --git a/code/modules/reagents/Chemistry-Logging.dm b/code/modules/reagents/Chemistry-Logging.dm new file mode 100644 index 00000000000..1432b18a2e8 --- /dev/null +++ b/code/modules/reagents/Chemistry-Logging.dm @@ -0,0 +1,28 @@ + +/var/list/chemical_reaction_logs = list() + +/proc/log_chemical_reaction(atom/A, datum/chemical_reaction/R, multiplier) + if(!A || !R) + return + + var/turf/T = get_turf(A) + var/logstr = "[usr ? key_name(usr) : "EVENT"] mixed [R.name] ([R.result]) (x[multiplier]) in \the [A] at [T ? "[T.x],[T.y],[T.z]" : "*null*"]" + + chemical_reaction_logs += "\[[time_stamp()]\] [logstr]" + + if(R.log_is_important) + message_admins(logstr) + log_admin(logstr) + +/client/proc/view_chemical_reaction_logs() + set name = "Show Chemical Reactions" + set category = "Admin" + + if(!check_rights(R_ADMIN)) + return + + var/html = "" + for(var/entry in chemical_reaction_logs) + html += "[entry]
" + + usr << browse(html, "window=chemlogs") diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm index 96730fb25b0..6f17798c81a 100644 --- a/code/modules/reagents/Chemistry-Recipes.dm +++ b/code/modules/reagents/Chemistry-Recipes.dm @@ -17,6 +17,8 @@ datum var/list/secondary_results = list() //additional reagents produced by the reaction var/requires_heating = 0 + var/log_is_important = 0 // If this reaction should be considered important for logging. Important recipes message admins when mixed, non-important ones just log to file. + proc on_reaction(var/datum/reagents/holder, var/created_volume) return @@ -169,6 +171,7 @@ datum result = "pacid" required_reagents = list("sacid" = 1, "chlorine" = 1, "potassium" = 1) result_amount = 3 + log_is_important = 1 synaptizine name = "Synaptizine" @@ -456,6 +459,7 @@ datum result = "chloralhydrate" required_reagents = list("ethanol" = 1, "chlorine" = 3, "water" = 1) result_amount = 1 + log_is_important = 1 potassium_chloride name = "Potassium Chloride" diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index 8aa34a7dcab..191dd5834ae 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -170,10 +170,7 @@ if(istype(target,/mob/living)) var/mob/living/M = target - var/list/injected = list() - for(var/datum/reagent/R in src.reagents.reagent_list) - injected += R.name - var/contained = english_list(injected) + var/contained = reagents.get_reagents() M.attack_log += text("\[[time_stamp()]\] Has been injected with [src.name] by [user.name] ([user.ckey]). Reagents: [contained]") user.attack_log += text("\[[time_stamp()]\] Used the [src.name] to inject [M.name] ([M.key]). Reagents: [contained]") msg_admin_attack("[user.name] ([user.ckey]) injected [M.name] ([M.key]) with [src.name]. Reagents: [contained] (INTENT: [uppertext(user.a_intent)]) (JMP)") @@ -181,6 +178,13 @@ src.reagents.reaction(target, INGEST) if(ismob(target) && target == user) src.reagents.reaction(target, INGEST) + + if(!ismob(target) && !istype(target, /obj/item/weapon/reagent_containers/glass)) // It's not a mob (which is logged above) and it's not a beaker or similar (which is a fairly normal thing to inject into) + usr = user + var/contained = reagents.get_reagents() + user.attack_log += "\[[time_stamp()]\] Injected \the [target] with \the [src]. Reagents: [contained]" + log_and_message_admins("injected \the [target] with \the [src]. Reagents: [contained]") + spawn(5) var/datum/reagent/blood/B for(var/datum/reagent/blood/d in src.reagents.reagent_list) @@ -472,4 +476,4 @@ reagents.add_reagent("inaprovaline", 7) reagents.add_reagent("anti_toxin", 8) mode = SYRINGE_INJECT - update_icon() \ No newline at end of file + update_icon() From 7a6599fdf487bacc4278cc123da1b21195aaa24f Mon Sep 17 00:00:00 2001 From: GinjaNinja32 Date: Wed, 29 Jul 2015 12:36:00 +0100 Subject: [PATCH 06/12] Add logging to potassium-water and nitroglycerin reactions --- code/modules/reagents/Chemistry-Recipes.dm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm index 6f17798c81a..821830efc65 100644 --- a/code/modules/reagents/Chemistry-Recipes.dm +++ b/code/modules/reagents/Chemistry-Recipes.dm @@ -31,6 +31,8 @@ datum result = null required_reagents = list("water" = 1, "potassium" = 1) result_amount = 2 + log_is_important = 1 + on_reaction(var/datum/reagents/holder, var/created_volume) var/datum/effect/effect/system/reagents_explosion/e = new() e.set_up(round (created_volume/10, 1), holder.my_atom, 0, 0) @@ -344,6 +346,8 @@ datum result = "nitroglycerin" required_reagents = list("glycerol" = 1, "pacid" = 1, "sacid" = 1) result_amount = 2 + log_is_important = 1 + on_reaction(var/datum/reagents/holder, var/created_volume) var/datum/effect/effect/system/reagents_explosion/e = new() e.set_up(round (created_volume/2, 1), holder.my_atom, 0, 0) From d143a35eca0bc307b21b2bff952350c03903cc38 Mon Sep 17 00:00:00 2001 From: Atlantis Date: Wed, 29 Jul 2015 20:56:01 +0200 Subject: [PATCH 07/12] Fixes #10357 - Adjusts layer defines. - Screen Layer (UI) is now 22. That should mean i will be above all else. This also prevents laser fire from overlapping the UI. - Obfuscation Layer (AI's "cameraless zones") is now 21. That makes it above laser fire effects, fixing #10357 --- code/setup.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/setup.dm b/code/setup.dm index 73d0f1611ab..98957e23046 100644 --- a/code/setup.dm +++ b/code/setup.dm @@ -877,8 +877,8 @@ var/list/be_special_flags = list( #define DOOR_OPEN_LAYER 2.7 //Under all objects if opened. 2.7 due to tables being at 2.6 #define DOOR_CLOSED_LAYER 3.1 //Above most items if closed #define LIGHTING_LAYER 11 -#define OBFUSCATION_LAYER 14 //Where images covering the view for eyes are put -#define SCREEN_LAYER 17 //Mob HUD/effects layer +#define OBFUSCATION_LAYER 21 //Where images covering the view for eyes are put +#define SCREEN_LAYER 22 //Mob HUD/effects layer ///////////////// From 3bb88b327cffae2800a845cbe4aa9264e18735d3 Mon Sep 17 00:00:00 2001 From: Atlantis Date: Wed, 29 Jul 2015 23:16:27 +0200 Subject: [PATCH 08/12] Fixes #10353 - Fixes icons not updating properly - Also fixes a runtime. --- code/game/objects/items/robot/robot_upgrades.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index 3f11eb4bbe9..678a8b178a7 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -30,14 +30,14 @@ R.uneq_all() R.hands.icon_state = "nomod" R.icon_state = "robot" + R.icontype = "Basic" //world << R.custom_sprite if(R.custom_sprite == 1) //world << R.icon_state icon = 'icons/mob/custom-synthetic.dmi' R.icon_state = "[R.ckey]-Standard" - del(R.module) R.notify_ai(ROBOT_NOTIFICATION_MODULE_RESET, R.module.name) - R.module = null + del(R.module) R.camera.remove_networks(list("Engineering","Medical","MINE")) R.updatename("Default") R.status_flags |= CANPUSH From 4af4e38571e4170c36db6aadaab5461e4e1b19d4 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Wed, 29 Jul 2015 22:48:11 -0400 Subject: [PATCH 09/12] Fixes #10368 --- code/game/gamemodes/heist/heist.dm | 9 --------- 1 file changed, 9 deletions(-) diff --git a/code/game/gamemodes/heist/heist.dm b/code/game/gamemodes/heist/heist.dm index 7e1ba6d3684..03680c8ff34 100644 --- a/code/game/gamemodes/heist/heist.dm +++ b/code/game/gamemodes/heist/heist.dm @@ -20,12 +20,3 @@ var/global/list/obj/cortical_stacks = list() //Stacks for 'leave nobody behind' if (skipjack && skipjack.returned_home) return 1 return 0 - -/datum/game_mode/heist/cleanup() - //the skipjack and everything in it have left and aren't coming back, so get rid of them. - var/area/skipjack = locate(/area/shuttle/skipjack/station) - for (var/mob/living/M in skipjack.contents) - //maybe send the player a message that they've gone home/been kidnapped? Someone responsible for vox lore should write that. - qdel(M) - for (var/obj/O in skipjack.contents) - qdel(O) //no hiding in lockers or anything \ No newline at end of file From 10df6b94030e7e6d457fc886779e6c494a667776 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Thu, 30 Jul 2015 00:57:31 -0400 Subject: [PATCH 10/12] Fixes #10363 --- code/modules/clothing/masks/gasmask.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm index 9552a0f17d5..f3eb8a81831 100644 --- a/code/modules/clothing/masks/gasmask.dm +++ b/code/modules/clothing/masks/gasmask.dm @@ -46,6 +46,8 @@ /obj/item/clothing/mask/gas/swat/vox name = "\improper alien mask" desc = "Clearly not designed for a human face." + body_parts_covered = 0 //Hack to allow vox to eat while wearing this mask. + species_restricted = list("Vox") /obj/item/clothing/mask/gas/syndicate name = "tactical mask" From 841f7f6db2d01828f501cf5db3d2f3d2840b1812 Mon Sep 17 00:00:00 2001 From: PsiOmegaDelta Date: Thu, 30 Jul 2015 10:41:01 +0200 Subject: [PATCH 11/12] Compilation fixes. --- code/modules/reagents/Chemistry-Recipes.dm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm index 677ffb910ab..829dcf19dc6 100644 --- a/code/modules/reagents/Chemistry-Recipes.dm +++ b/code/modules/reagents/Chemistry-Recipes.dm @@ -147,7 +147,7 @@ result = "kelotane" required_reagents = list("silicon" = 1, "carbon" = 1) result_amount = 2 - log_is_important = 1 + log_is_important = 1 /datum/chemical_reaction/peridaxon name = "Peridaxon" @@ -394,7 +394,7 @@ result = "coolant" required_reagents = list("tungsten" = 1, "oxygen" = 1, "water" = 1) result_amount = 3 - log_is_important = 1 + log_is_important = 1 /datum/chemical_reaction/rezadone name = "Rezadone" @@ -530,6 +530,7 @@ result = "nitroglycerin" required_reagents = list("glycerol" = 1, "pacid" = 1, "sacid" = 1) result_amount = 2 + log_is_important = 1 /datum/chemical_reaction/nitroglycerin/on_reaction(var/datum/reagents/holder, var/created_volume) var/datum/effect/effect/system/reagents_explosion/e = new() From de3c24c29f5a3a5c9e5a8e9f2c0f1fb9596a878d Mon Sep 17 00:00:00 2001 From: PsiOmegaDelta Date: Thu, 30 Jul 2015 10:51:40 +0200 Subject: [PATCH 12/12] Code relocation. --- code/__defines/misc.dm | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/code/__defines/misc.dm b/code/__defines/misc.dm index ecca29bfd19..8936151992a 100644 --- a/code/__defines/misc.dm +++ b/code/__defines/misc.dm @@ -117,8 +117,8 @@ #define DOOR_OPEN_LAYER 2.7 //Under all objects if opened. 2.7 due to tables being at 2.6 #define DOOR_CLOSED_LAYER 3.1 //Above most items if closed #define LIGHTING_LAYER 11 -#define OBFUSCATION_LAYER 14 //Where images covering the view for eyes are put -#define SCREEN_LAYER 17 //Mob HUD/effects layer +#define OBFUSCATION_LAYER 21 //Where images covering the view for eyes are put +#define SCREEN_LAYER 22 //Mob HUD/effects layer // Convoluted setup so defines can be supplied by Bay12 main server compile script. // Should still work fine for people jamming the icons into their repo. @@ -154,3 +154,7 @@ #define BOMBCAP_HEAVY_RADIUS (max_explosion_range/2) #define BOMBCAP_LIGHT_RADIUS max_explosion_range #define BOMBCAP_FLASH_RADIUS (max_explosion_range*1.5) + +// Special return values from bullet_act(). Positive return values are already used to indicate the blocked level of the projectile. +#define PROJECTILE_CONTINUE -1 //if the projectile should continue flying after calling bullet_act() +#define PROJECTILE_FORCE_MISS -2 //if the projectile should treat the attack as a miss (suppresses attack and admin logs) - only applies to mobs.