From 7f17505e48a2f462f857d23adc3b49b1f7872b06 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Tue, 18 Aug 2015 21:58:52 -0400 Subject: [PATCH 01/10] Cleans up mob_grab.dm Moves all of the grab abilities into their own proc instead of having them all dumped into /obj/item/weapon/grab/attack(). --- baystation12.dme | 1 + code/modules/mob/mob_grab.dm | 225 ++++++-------------------- code/modules/mob/mob_grab_specials.dm | 165 +++++++++++++++++++ code/modules/mob/mob_movement.dm | 10 -- 4 files changed, 218 insertions(+), 183 deletions(-) create mode 100644 code/modules/mob/mob_grab_specials.dm diff --git a/baystation12.dme b/baystation12.dme index e0333a2e08..2e5a2cc8ea 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -1096,6 +1096,7 @@ #include "code\modules\mob\mob_cleanup.dm" #include "code\modules\mob\mob_defines.dm" #include "code\modules\mob\mob_grab.dm" +#include "code\modules\mob\mob_grab_specials.dm" #include "code\modules\mob\mob_helpers.dm" #include "code\modules\mob\mob_movement.dm" #include "code\modules\mob\mob_transformation_simple.dm" diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm index acc95fbe40..af17182d7f 100644 --- a/code/modules/mob/mob_grab.dm +++ b/code/modules/mob/mob_grab.dm @@ -1,6 +1,13 @@ #define UPGRADE_COOLDOWN 40 #define UPGRADE_KILL_TIMER 100 +///Process_Grab() +///Called by client/Move() +///Checks to see if you are grabbing anything and if moving will affect your grab. +/client/proc/Process_Grab() + for(var/obj/item/weapon/grab/G in list(mob.l_hand, mob.r_hand)) + G.reset_kill_state() //no wandering across the station/asteroid while choking someone + /obj/item/weapon/grab name = "grab" icon = 'icons/mob/screen1.dmi' @@ -69,7 +76,6 @@ else hud.screen_loc = ui_lhand - /obj/item/weapon/grab/process() if(gcDestroyed) // GC is trying to delete us, we'll kill our processing so we can cleanly GC return PROCESS_KILL @@ -116,23 +122,9 @@ affecting.drop_l_hand() affecting.drop_r_hand() - var/hit_zone = assailant.zone_sel.selecting - var/announce = 0 - if(hit_zone != last_hit_zone) - announce = 1 - last_hit_zone = hit_zone - if(ishuman(affecting)) - switch(hit_zone) - if("mouth") - if(announce) - assailant.visible_message("[assailant] covers [affecting]'s mouth!") - if(affecting:silent < 3) - affecting:silent = 3 - if("eyes") - if(announce) - assailant.visible_message("[assailant] covers [affecting]'s eyes!") - if(affecting:eye_blind < 3) - affecting:eye_blind = 3 + if(iscarbon(affecting)) + handle_eye_mouth_covering(affecting, assailant, assailant.zone_sel.selecting) + if(force_down) if(affecting.loc != assailant.loc) force_down = 0 @@ -153,6 +145,21 @@ adjust_position() +/obj/item/weapon/grab/proc/handle_eye_mouth_covering(mob/living/carbon/target, mob/user, var/target_zone) + var/announce = (target_zone != last_hit_zone) //only display messages when switching between different target zones + last_hit_zone = target_zone + + switch(target_zone) + if("mouth") + if(announce) + user.visible_message("\The [user] covers [target]'s mouth!") + if(target.silent < 3) + target.silent = 3 + if("eyes") + if(announce) + assailant.visible_message("[assailant] covers [affecting]'s eyes!") + if(affecting.eye_blind < 3) + affecting.eye_blind = 3 /obj/item/weapon/grab/attack_self() return s_click(hud) @@ -202,8 +209,6 @@ if(EAST) animate(affecting, pixel_x =-shift, pixel_y = 0, 5, 1, LINEAR_EASING) - - /obj/item/weapon/grab/proc/s_click(obj/screen/S) if(!affecting) return @@ -226,11 +231,8 @@ assailant.visible_message("[assailant] has grabbed [affecting] aggressively (now hands)!") else assailant.visible_message("[assailant] pins [affecting] down to the ground (now hands)!") - force_down = 1 - affecting.Weaken(3) - step_to(assailant, affecting) - assailant.set_dir(EAST) //face the victim - affecting.set_dir(SOUTH) //face up + apply_pinning(affecting, assailant) + state = GRAB_AGGRESSIVE icon_state = "grabbed1" hud.icon_state = "reinforce1" @@ -264,7 +266,6 @@ affecting.set_dir(WEST) adjust_position() - //This is used to make sure the victim hasn't managed to yackety sax away before using the grab. /obj/item/weapon/grab/proc/confirm() if(!assailant || !affecting) @@ -278,17 +279,18 @@ return 1 - /obj/item/weapon/grab/attack(mob/M, mob/living/user) if(!affecting) return - if(world.time < (last_action + 20)) return - + + last_action = world.time + reset_kill_state() //using special grab moves will interrupt choking them + + //clicking on the victim while grabbing them if(M == affecting) - if(ishuman(M)) - last_action = world.time + if(ishuman(affecting)) var/hit_zone = assailant.zone_sel.selecting flick(hud.icon_state, hud) switch(assailant.a_intent) @@ -297,160 +299,37 @@ assailant << "You are no longer pinning [affecting] to the ground." force_down = 0 return - var/mob/living/carbon/human/H = M - var/obj/item/organ/external/E = H.get_organ(hit_zone) - if(E && !(E.status & ORGAN_DESTROYED)) - assailant.visible_message("[assailant] starts inspecting [affecting]'s [E.name] carefully.") - if(do_mob(assailant,H, 10)) - if(E.wounds.len) - assailant << "You find [E.get_wounds_desc()]" - else - assailant << "You find no visible wounds." - else - assailant << "You must stand still to inspect [E] for wounds." - assailant << "Checking bones now..." - if(do_mob(assailant, H, 20)) - if(E.status & ORGAN_BROKEN) - assailant << "The [E.encased ? E.encased : "bone in the [E.name]"] moves slightly when you poke it!" - H.custom_pain("Your [E.name] hurts where it's poked.") - else - assailant << "The [E.encased ? E.encased : "bones in the [E.name]"] seem to be fine." - else - assailant << "You must stand still to feel [E] for fractures." - assailant << "Checking skin now..." - if(do_mob(assailant, H, 10)) - var/bad = 0 - if(H.getToxLoss() >= 40) - assailant << "[H] has an unhealthy skin discoloration." - bad = 1 - if(H.getOxyLoss() >= 20) - assailant << "[H]'s skin is unusaly pale." - bad = 1 - if(E.status & ORGAN_DEAD) - assailant << "[E] is decaying!" - bad = 1 - if(!bad) - assailant << "[H]'s skin is normal." - else - assailant << "You must stand still to check [H]'s skin for abnormalities." - else - assailant << "[H] is missing that bodypart." + inspect_organ(affecting, assailant, hit_zone) + if(I_GRAB) - if(state < GRAB_AGGRESSIVE) - assailant << "You require a better grab to do this." - return - var/obj/item/organ/external/organ = affecting:get_organ(check_zone(hit_zone)) - if(!organ || organ.dislocated == -1) - return - assailant.visible_message("[assailant] [pick("bent", "twisted")] [affecting]'s [organ.name] into a jointlock!") - var/armor = affecting:run_armor_check(affecting, "melee") - if(armor < 2) - affecting << "You feel extreme pain!" - affecting.adjustHalLoss(Clamp(0, 40-affecting.halloss, 40)) //up to 40 halloss - return + jointlock(affecting, assailant, hit_zone) + if(I_HURT) - if(hit_zone == "eyes") - var/mob/living/carbon/human/H = affecting - var/datum/unarmed_attack/attack = H.get_unarmed_attack(src, hit_zone) - if(!attack) - return - - if(state < GRAB_NECK) - assailant << "You require a better grab to do this." - return - if((affecting:head && affecting:head.flags & HEADCOVERSEYES) || \ - (affecting:wear_mask && affecting:wear_mask.flags & MASKCOVERSEYES) || \ - (affecting:glasses && affecting:glasses.flags & GLASSESCOVERSEYES)) - assailant << "You're going to need to remove the eye covering first." - return - if(!affecting.has_eyes()) - assailant << "You cannot locate any eyes on [affecting]!" - return - assailant.attack_log += text("\[[time_stamp()]\] Attacked [affecting.name]'s eyes using grab ([affecting.ckey])") - affecting.attack_log += text("\[[time_stamp()]\] Had eyes attacked by [assailant.name]'s grab ([assailant.ckey])") - msg_admin_attack("[key_name(assailant)] attacked [key_name(affecting)]'s eyes using a grab action.") - - attack.handle_eye_attack(assailant, affecting) - else if(hit_zone != "head") - if(state < GRAB_NECK) - assailant << "You require a better grab to do this." - return - if(affecting:grab_joint(assailant)) - playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) - return + attack_eye(affecting, assailant) + else if(hit_zone == "head") + headbut(affecting, assailant) else - if(affecting.lying) - return - assailant.visible_message("[assailant] thrusts \his head into [affecting]'s skull!") - var/damage = 20 - var/obj/item/clothing/hat = assailant.head - if(istype(hat)) - damage += hat.force * 10 - var/armor = affecting:run_armor_check(affecting, "melee") - affecting.apply_damage(damage*rand(90, 110)/100, BRUTE, "head", armor) - assailant.apply_damage(10*rand(90, 110)/100, BRUTE, "head", assailant:run_armor_check("head", "melee")) - if(!armor && prob(damage)) - affecting.apply_effect(20, PARALYZE) - affecting.visible_message("[affecting] has been knocked unconscious!") - playsound(assailant.loc, "swing_hit", 25, 1, -1) - assailant.attack_log += text("\[[time_stamp()]\] Headbutted [affecting.name] ([affecting.ckey])") - affecting.attack_log += text("\[[time_stamp()]\] Headbutted by [assailant.name] ([assailant.ckey])") - msg_admin_attack("[key_name(assailant)] has headbutted [key_name(affecting)]") - assailant.drop_from_inventory(src) - src.loc = null - qdel(src) - return + dislocate(affecting, assailant, hit_zone) + if(I_DISARM) - if(state < GRAB_AGGRESSIVE) - assailant << "You require a better grab to do this." - return - assailant << "You start forcing [affecting] to the ground." - if(!force_down) - if(do_after(assailant, 20) && affecting) - assailant.visible_message("[assailant] is forcing [affecting] to the ground!") - force_down = 1 - affecting.Weaken(3) - affecting.lying = 1 - step_to(assailant, affecting) - assailant.set_dir(EAST) //face the victim - affecting.set_dir(SOUTH) //face up - return - else - assailant << "You are already pinning [affecting] to the ground." - return - + pin_down(affecting, assailant) + + //clicking on yourself while grabbing them if(M == assailant && state >= GRAB_AGGRESSIVE) - - var/can_eat - if((FAT in user.mutations) && issmall(affecting)) - can_eat = 1 - else - var/mob/living/carbon/human/H = user - if(istype(H) && H.species.gluttonous) - if(H.species.gluttonous == 2) - can_eat = 2 - else if(!ishuman(affecting) && !issmall(affecting) && (affecting.small || iscarbon(affecting))) - can_eat = 1 - - if(can_eat) - var/mob/living/carbon/attacker = user - user.visible_message("[user] is attempting to devour [affecting]!") - if(can_eat == 2) - if(!do_mob(user, affecting)||!do_after(user, 30)) return - else - if(!do_mob(user, affecting)||!do_after(user, 100)) return - user.visible_message("[user] devours [affecting]!") - affecting.loc = user - attacker.stomach_contents.Add(affecting) - qdel(src) - + devour(affecting, assailant) /obj/item/weapon/grab/dropped() loc = null if(!destroying) qdel(src) +/obj/item/weapon/grab/proc/reset_kill_state() + if(state == GRAB_KILL) + assailant.visible_message("[assailant] lost \his tight grip on [affecting]'s neck!") + hud.icon_state = "kill" + state = GRAB_NECK + /obj/item/weapon/grab var/destroying = 0 diff --git a/code/modules/mob/mob_grab_specials.dm b/code/modules/mob/mob_grab_specials.dm new file mode 100644 index 0000000000..f4364dc684 --- /dev/null +++ b/code/modules/mob/mob_grab_specials.dm @@ -0,0 +1,165 @@ + +/obj/item/weapon/grab/proc/inspect_organ(mob/living/carbon/human/H, mob/user, var/target_zone) + + var/obj/item/organ/external/E = H.get_organ(target_zone) + + if(!E || (E.status & ORGAN_DESTROYED)) + user << "[H] is missing that bodypart." + return + + user.visible_message("[user] starts inspecting [affecting]'s [E.name] carefully.") + if(!do_mob(user,H, 10)) + user << "You must stand still to inspect [E] for wounds." + else if(E.wounds.len) + user << "You find [E.get_wounds_desc()]" + else + user << "You find no visible wounds." + + user << "Checking bones now..." + if(!do_mob(user, H, 20)) + user << "You must stand still to feel [E] for fractures." + else if(E.status & ORGAN_BROKEN) + user << "The [E.encased ? E.encased : "bone in the [E.name]"] moves slightly when you poke it!" + H.custom_pain("Your [E.name] hurts where it's poked.") + else + user << "The [E.encased ? E.encased : "bones in the [E.name]"] seem to be fine." + + user << "Checking skin now..." + if(!do_mob(user, H, 10)) + user << "You must stand still to check [H]'s skin for abnormalities." + else + var/bad = 0 + if(H.getToxLoss() >= 40) + user << "[H] has an unhealthy skin discoloration." + bad = 1 + if(H.getOxyLoss() >= 20) + user << "[H]'s skin is unusaly pale." + bad = 1 + if(E.status & ORGAN_DEAD) + user << "[E] is decaying!" + bad = 1 + if(!bad) + user << "[H]'s skin is normal." + +/obj/item/weapon/grab/proc/jointlock(mob/living/carbon/human/target, mob/attacker, var/target_zone) + if(state < GRAB_AGGRESSIVE) + attacker << "You require a better grab to do this." + return + + var/obj/item/organ/external/organ = target.get_organ(check_zone(target_zone)) + if(!organ || organ.dislocated == -1) + return + + attacker.visible_message("[attacker] [pick("bent", "twisted")] [target]'s [organ.name] into a jointlock!") + var/armor = target.run_armor_check(target, "melee") + if(armor < 2) + target << "You feel extreme pain!" + affecting.adjustHalLoss(Clamp(0, 60-affecting.halloss, 30)) //up to 60 halloss + +/obj/item/weapon/grab/proc/attack_eye(mob/living/carbon/human/target, mob/living/carbon/human/attacker) + if(!istype(attacker)) + return + + var/datum/unarmed_attack/attack = attacker.get_unarmed_attack(target, "eyes") + + if(!attack) + return + if(state < GRAB_NECK) + attacker << "You require a better grab to do this." + return + for(var/obj/item/protection in list(target.head, target.wear_mask, target.glasses)) + if(protection && (protection.flags & HEADCOVERSEYES)) + attacker << "You're going to need to remove the eye covering first." + return + if(!target.has_eyes()) + attacker << "You cannot locate any eyes on [target]!" + return + + attacker.attack_log += text("\[[time_stamp()]\] Attacked [target.name]'s eyes using grab ([target.ckey])") + target.attack_log += text("\[[time_stamp()]\] Had eyes attacked by [attacker.name]'s grab ([attacker.ckey])") + msg_admin_attack("[key_name(attacker)] attacked [key_name(target)]'s eyes using a grab action.") + + attack.handle_eye_attack(attacker, target) + +/obj/item/weapon/grab/proc/headbut(mob/living/carbon/human/target, mob/living/carbon/human/attacker) + if(!istype(attacker)) + return + if(target.lying) + return + attacker.visible_message("[attacker] thrusts \his head into [target]'s skull!") + + var/damage = 20 + var/obj/item/clothing/hat = attacker.head + if(istype(hat)) + damage += hat.force * 10 + + var/armor = target.run_armor_check("head", "melee") + target.apply_damage(damage*rand(90, 110)/100, BRUTE, "head", armor) + attacker.apply_damage(10*rand(90, 110)/100, BRUTE, "head", attacker.run_armor_check("head", "melee")) + + if(!armor && prob(damage)) + target.apply_effect(20, PARALYZE) + target.visible_message("[target] has been knocked unconscious!") + + playsound(attacker.loc, "swing_hit", 25, 1, -1) + attacker.attack_log += text("\[[time_stamp()]\] Headbutted [target.name] ([target.ckey])") + target.attack_log += text("\[[time_stamp()]\] Headbutted by [attacker.name] ([attacker.ckey])") + msg_admin_attack("[key_name(attacker)] has headbutted [key_name(target)]") + + attacker.drop_from_inventory(src) + src.loc = null + qdel(src) + return + +/obj/item/weapon/grab/proc/dislocate(mob/living/carbon/human/target, mob/living/attacker, var/target_zone) + if(state < GRAB_NECK) + attacker << "You require a better grab to do this." + return + if(target.grab_joint(attacker, target_zone)) + playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) + return + +/obj/item/weapon/grab/proc/pin_down(mob/target, mob/attacker) + if(state < GRAB_AGGRESSIVE) + attacker << "You require a better grab to do this." + return + if(force_down) + attacker << "You are already pinning [target] to the ground." + + attacker.visible_message("[attacker] starts forcing [target] to the ground!") + if(do_after(attacker, 20) && target) + last_action = world.time + attacker.visible_message("[attacker] forces [target] to the ground!") + apply_pinning(target, attacker) + +/obj/item/weapon/grab/proc/apply_pinning(mob/target, mob/attacker) + force_down = 1 + target.Weaken(3) + target.lying = 1 + step_to(attacker, target) + attacker.set_dir(EAST) //face the victim + target.set_dir(SOUTH) //face up + +/obj/item/weapon/grab/proc/devour(mob/target, mob/user) + var/can_eat + if((FAT in user.mutations) && issmall(target)) + can_eat = 1 + else + var/mob/living/carbon/human/H = user + if(istype(H) && H.species.gluttonous) + if(H.species.gluttonous == 2) + can_eat = 2 + else if(!ishuman(target) && !issmall(target) && (target.small || iscarbon(target))) + can_eat = 1 + + if(can_eat) + var/mob/living/carbon/attacker = user + user.visible_message("[user] is attempting to devour [target]!") + if(can_eat == 2) + if(!do_mob(user, target)||!do_after(user, 30)) return + else + if(!do_mob(user, target)||!do_after(user, 100)) return + user.visible_message("[user] devours [target]!") + target.loc = user + attacker.stomach_contents.Add(target) + qdel(src) \ No newline at end of file diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index 0404131642..7ed4f4d280 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -360,16 +360,6 @@ return Move(n, direct) -///Process_Grab() -///Called by client/Move() -///Checks to see if you are grabbing anything and if moving will affect your grab. -/client/proc/Process_Grab() - for(var/obj/item/weapon/grab/G in list(mob.l_hand, mob.r_hand)) - if(G.state == GRAB_KILL) //no wandering across the station/asteroid while choking someone - mob.visible_message("[mob] lost \his tight grip on [G.affecting]'s neck!") - G.hud.icon_state = "kill" - G.state = GRAB_NECK - ///Process_Incorpmove ///Called by client/Move() ///Allows mobs to run though walls From 3e967872a3d45b34dca828353fd09e777c66dd3f Mon Sep 17 00:00:00 2001 From: mwerezak Date: Wed, 26 Aug 2015 14:55:38 -0400 Subject: [PATCH 02/10] Allows grabs to be resisted while weakened --- code/modules/mob/living/living.dm | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 2c19a5a9df..173dd91516 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -576,12 +576,14 @@ default behaviour is: if(can_resist()) next_move = world.time + 20 - process_resist() + resist_grab() + if(!weakened && !restrained()) + process_resist() /mob/living/proc/can_resist() //need to allow !canmove, or otherwise neck grabs can't be resisted - //so just check weakened instead. - if(stat || weakened) + //similar thing with weakened and pinning + if(stat) return 0 if(next_move > world.time) return 0 @@ -593,10 +595,6 @@ default behaviour is: escape_inventory(src.loc) return - //resisting grabs (as if it helps anyone...) - if (!restrained()) - resist_grab() - //unbuckling yourself if(buckled) spawn() escape_buckle() From 8f05e2f63a01dacc33c0de0bd8e495f90bcb438b Mon Sep 17 00:00:00 2001 From: Cael Aislinn Date: Mon, 31 Aug 2015 18:57:42 +1000 Subject: [PATCH 03/10] fixes an obscure runtime in telecomms code Signed-off-by: Cael Aislinn --- code/game/machinery/telecomms/broadcaster.dm | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/code/game/machinery/telecomms/broadcaster.dm b/code/game/machinery/telecomms/broadcaster.dm index c6fee28b40..57b9876f15 100644 --- a/code/game/machinery/telecomms/broadcaster.dm +++ b/code/game/machinery/telecomms/broadcaster.dm @@ -287,14 +287,18 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept /* --- Loop through the receivers and categorize them --- */ - if (R.client && !(R.client.prefs.toggles & CHAT_RADIO)) //Adminning with 80 people on can be fun when you're trying to talk and all you can hear is radios. - continue + if (R.client) + if(R.client.prefs) + if(!(R.client.prefs.toggles & CHAT_RADIO)) //Adminning with 80 people on can be fun when you're trying to talk and all you can hear is radios. + continue + else + log_debug("Client prefs found to be null in /proc/Broadcast_Message() for mob [R] and client [R.ckey], this should be investigated.") if(istype(R, /mob/new_player)) // we don't want new players to hear messages. rare but generates runtimes. continue // Ghosts hearing all radio chat don't want to hear syndicate intercepts, they're duplicates - if(data == 3 && istype(R, /mob/dead/observer) && R.client && (R.client.prefs.toggles & CHAT_GHOSTRADIO)) + if(data == 3 && istype(R, /mob/dead/observer) && R.client && R.client.prefs && (R.client.prefs.toggles & CHAT_GHOSTRADIO)) continue // --- Check for compression --- @@ -490,8 +494,12 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept /* --- Loop through the receivers and categorize them --- */ - if (R.client && !(R.client.prefs.toggles & CHAT_RADIO)) //Adminning with 80 people on can be fun when you're trying to talk and all you can hear is radios. - continue + if (R.client) + if(R.client.prefs) + if(!(R.client.prefs.toggles & CHAT_RADIO)) //Adminning with 80 people on can be fun when you're trying to talk and all you can hear is radios. + continue + else + log_debug("Client prefs found to be null in /proc/Broadcast_SimpleMessage() for mob [R] and client [R.ckey], this should be investigated.") // --- Check for compression --- From a6906ab7f3c7f72129e8d229f06231c0529d2f06 Mon Sep 17 00:00:00 2001 From: PsiOmega Date: Tue, 1 Sep 2015 11:01:46 +0200 Subject: [PATCH 04/10] Removes stray ninja spawn point. Fixes #10974. --- maps/exodus-1.dmm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/maps/exodus-1.dmm b/maps/exodus-1.dmm index 00b9cf2acf..35fbd9fb6f 100644 --- a/maps/exodus-1.dmm +++ b/maps/exodus-1.dmm @@ -7364,7 +7364,6 @@ "cLG" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow{dir = 8},/obj/machinery/meter,/obj/machinery/camera/network/engine{c_tag = "Engine Core East"; dir = 4},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/engineering/engine_room) "cLH" = (/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for the engine radiator viewport shutters."; id = "EngineRadiatorViewport"; name = "Engine Radiator Viewport Shutters"; pixel_x = 25; pixel_y = 0; req_access = list(10)},/obj/machinery/atmospherics/pipe/manifold/visible/purple{dir = 4},/obj/machinery/meter,/turf/simulated/floor/plating,/area/engineering/engine_room) "cLI" = (/obj/machinery/button/remote/blast_door{id = "EngineVent"; name = "Reactor Ventillatory Control"; pixel_x = -25; pixel_y = 0; req_access = list(10)},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/engineering/engine_room) -"cLJ" = (/obj/effect/landmark{name = "ninjastart"},/turf/simulated/floor/plating/airless,/area/solar/port) "cLK" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "robotics_solar_outer"; locked = 1; name = "Engineering External Access"; req_access = list(11,13)},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/portsolar) "cLL" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; layer = 3.3; master_tag = "robotics_solar_airlock"; name = "exterior access button"; pixel_x = 25; pixel_y = 25; req_access = list(11,13)},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating/airless,/area/solar/port) "cLM" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "robotics_solar_inner"; locked = 1; name = "Engineering External Access"; req_access = list(11,13)},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/portsolar) @@ -7576,7 +7575,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaacHncjWcHpaafcHncjWcHpaaacHncjWcHpaaaaaaaaaaaaaafaafaaaaafaaaaaaaaaaaaaafcIpcIrcIqcItcIscIucGJcIvcHbcHbcHbcIxcIwcIzcIycIBcLBcIDcICcIFcIEcIHcIGcINcIIcImcIOcIPcIOcIPcIOcIPcIOcIPcIOcIPcIOcHyaafcHdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczLczLczLczLczLczLczLczLczLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaamaaIaafaaacHncjWcHpaafcHncjWcHpaaacHncjWcHpaafaaaaaaaaaaaaaafaafcIJcIKcIKcIKcIKcILcILcILcILcILcLCcILcGtcIQcHbcHbcHbcLDcGtcLEcIScLFcGtcLGcJdcJicIfcJkcJjcLHcGtaaacHPcHPcHPcHPcJmcHPcHPcHPcHPcHPcHPcHPaafcHdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczLczLczLczLczLczLczLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaafaaaaafaafczCaafaafaafczCaafaaaaafczCaafaaaaaaaaaaaaaaacIUcIVcIWcIXcIYcJncJacJbcJcciFcJecJfcJgcJecGtcLIcJocHbcHbcJrcJqcJtcJscJucJNcJwcJvcIgcIfcJycJxcJLcGtaafcHycHycHycHycHycHycHycHycHycHycHycHyaafaanaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafcydcxzcxycLJcxxcxxcxxcxxcxxcxxcxxcxxcxxcxxczicxzcxzcxzcLLcLKcLNcLMcLOcJDcJEcLPcJGcJHcJHcJHcJIcJJcJKcGtcJMcJMcHbcHbcJrcKbcJPcJOcJQcLVcJwcHbcIFcJZcIHcHbcKacGtaafcHycHycHycHycHycHycHycHycHycHycHycHyaafcHdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafcydcxzcxycxxcxxcxxcxxcxxcxxcxxcxxcxxcxxcxxczicxzcxzcxzcLLcLKcLNcLMcLOcJDcJEcLPcJGcJHcJHcJHcJIcJJcJKcGtcJMcJMcHbcHbcJrcKbcJPcJOcJQcLVcJwcHbcIFcJZcIHcHbcKacGtaafcHycHycHycHycHycHycHycHycHycHycHycHyaafcHdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYaaactYctYctYctYctYaaactYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaafaaaaafaafcxfaafaaaaafcxfaafaaaaafcxfaafaaaaaaaaaaaaaaacIUcIVcJRcJScJTcLQcIKcLRcJWcJecJecJXcJXcJYcGtcJMcJMcHbcHbcJrcLWcJPcKccLScLXcKkcKecKscKmcKucKtcKvcGtaaacHPcHPcHPcHPcJmcHPcHPcHPcHPcHPcHPcHPaafaamaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYaaactYctYctYctYctYaaactYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaamaaIaafaafcHncwrcHpaaacHncwrcHpaaacHncwrcHpaafaaaaaaaaaaaaaafaafcKfcIKcIKcIKcIKcKgcKhcKicKicKjcKgcKgcGtcGtcGJcGtcGtcGtcGtcGtcKwcGtcGtcGtcGtcGtcGJcGtcGtcGtcGtaafcHycHycHycHycHycHycHycHycHycHycHycHyaafaamaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacHncwrcHpaafcHncwrcHpaaacHncwrcHpaaaaaaaaaaafaaaaafaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaafaaacKxaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaacHqcKycHqcKycKzcKycHqcKycHqcKycHqcKyaafaamaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacKlcKlcKlcKlcKlcKlcKlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa From 0228ca4959029c9ba15e317fcf074f8f544745e6 Mon Sep 17 00:00:00 2001 From: Cael Aislinn Date: Tue, 1 Sep 2015 20:05:42 +1000 Subject: [PATCH 05/10] fix for runtime in skills computer Signed-off-by: Cael Aislinn --- code/game/machinery/computer/skills.dm | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/code/game/machinery/computer/skills.dm b/code/game/machinery/computer/skills.dm index e0c6f724ab..5c585e3f2d 100644 --- a/code/game/machinery/computer/skills.dm +++ b/code/game/machinery/computer/skills.dm @@ -277,7 +277,11 @@ What a mess.*/ else P.info += "General Record Lost!
" P.info += "" - P.name = "Employment Record ([active1.fields["name"]])" + if(active1) + P.name = "Employment Record ([active1.fields["name"]])" + else + P.name = "Employment Record (Unknown/Invald Entry)" + log_debug("[usr] ([usr.ckey]) attempted to print a null employee record, this should be investigated.") printing = null //RECORD DELETE if ("Delete All Records") From 6e2514d72860c834163215990997ff0e2c732e48 Mon Sep 17 00:00:00 2001 From: PsiOmega Date: Tue, 1 Sep 2015 18:25:51 +0200 Subject: [PATCH 06/10] Beepsky should no longer attempt to arrest himself. Adds additional threat check. --- code/modules/mob/living/bot/secbot.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/bot/secbot.dm b/code/modules/mob/living/bot/secbot.dm index 547361f400..351eddd44c 100644 --- a/code/modules/mob/living/bot/secbot.dm +++ b/code/modules/mob/living/bot/secbot.dm @@ -336,7 +336,7 @@ path = list() /mob/living/bot/secbot/proc/check_threat(var/mob/living/M) - if(!M || !istype(M) || M.stat) + if(!M || !istype(M) || M.stat || src == M) return 0 if(emagged) From 4aa35c364a9ccc5d06f7cccac8d78f68ff72fed6 Mon Sep 17 00:00:00 2001 From: PsiOmega Date: Wed, 2 Sep 2015 14:48:24 +0200 Subject: [PATCH 07/10] Updates macro count. --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 5e014dd7f3..c7e7fc778b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,7 +5,7 @@ sudo: false env: BYOND_MAJOR="508" BYOND_MINOR="1293" - MACRO_COUNT=1231 + MACRO_COUNT=1230 cache: directories: From 95f840679568dfd5d2e1a9b1246cdc5a67b1a7d3 Mon Sep 17 00:00:00 2001 From: PsiOmega Date: Wed, 2 Sep 2015 15:01:38 +0200 Subject: [PATCH 08/10] Re-removes ninja spawn point. --- maps/exodus-1.dmm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/maps/exodus-1.dmm b/maps/exodus-1.dmm index f8286304e7..d99135675f 100644 --- a/maps/exodus-1.dmm +++ b/maps/exodus-1.dmm @@ -7283,7 +7283,6 @@ "cKc" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/black,/turf/simulated/floor/plating,/area/engineering/engine_room) "cKd" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/airless,/area/solar/port) "cKe" = (/obj/machinery/power/tracker,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/airless,/area/solar/port) -"cKf" = (/obj/effect/landmark{name = "ninjastart"},/turf/simulated/floor/airless,/area/solar/port) "cKg" = (/turf/simulated/wall,/area/maintenance/engi_engine) "cKh" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/engi_engine) "cKi" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/maintenance/engi_engine) @@ -7557,7 +7556,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaacHAcIecHBaafcHAcIecHBaaacHAcIecHBaaaaaaaaaaaaaafaafaaaaafaaaaaaaaaaaaaafcIpcIrcIqcItcIXcIYcGJcHbcHbcHbcHbcJbcIZcJhcJdcJjcJicJlcJkcIFcIEcIHcJpcJrcIIcImcIOcIPcIOcIPcIOcIPcIOcIPcIOcIPcIOcHyaafcHdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczLczLczLczLczLczLczLczLczLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaamaaIaafaaacHAcIecHBaafcHAcIecHBaaacHAcIecHBaafaaaaaaaaaaaaaafaafcJscIKcIKcIKcIKcILcILcILcILcILcLCcILcGtcIQcHbcHbcHbcJtcGtcLEcIScLFcGtcJvcJucJxcJwcJzcJycJAcGtaaacHPcHPcHPcHPcJmcHPcHPcHPcHPcHPcHPcHPaafcHdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczLczLczLczLczLczLczLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaafaaaaafaafcJBaafaafaafcJBaafaaaaafcJBaafaaaaaaaaaaaaaaacJDcJFcJEcJLcJGcJncJacJMcJcciFcJecJfcJgcJecGtcLIcJocHbcHbcJOcJqcJQcJPcJRcJNcJUcJScITcIRcKacJVcKccGtaafcHycHycHycHycHycHycHycHycHycHycHycHyaafaanaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafcKecKdcKkcKfcKmcKmcKmcKmcKmcKmcKmcKmcKmcKmcKocKdcKdcKdcKqcLKcKrcLMcKtcKscKucLPcKvcJHcJHcJHcJIcJJcJKcGtcKwcKwcHbcHbcJOcKbcKCcKBcKEcLVcJUcJOcIFcJZcIHcKJcKKcGtaafcHycHycHycHycHycHycHycHycHycHycHycHyaafcHdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafcKecKdcKkcKmcKmcKmcKmcKmcKmcKmcKmcKmcKmcKmcKocKdcKdcKdcKqcLKcKrcLMcKtcKscKucLPcKvcJHcJHcJHcJIcJJcJKcGtcKwcKwcHbcHbcJOcKbcKCcKBcKEcLVcJUcJOcIFcJZcIHcKJcKKcGtaafcHycHycHycHycHycHycHycHycHycHycHycHyaafcHdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYaaactYctYctYctYctYaaactYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaafaaaaafaafcKLaafaaaaafcKLaafaaaaafcKLaafaaaaaaaaaaaaaaacJDcJFcKMcKNcJTcLQcIKcKQcJWcJecJecJXcJXcJYcGtcKwcKwcHbcHbcJOcLWcKCcKRcKScLXcKUcKTcKWcKVcKZcKYcLacGtaaacHPcHPcHPcHPcJmcHPcHPcHPcHPcHPcHPcHPaafaamaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYaaactYctYctYctYctYaaactYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaamaaIaafaafcHAcLdcHBaaacHAcLdcHBaaacHAcLdcHBaafaaaaaaaaaaaaaafaafcLhcIKcIKcIKcIKcKgcKhcKicKicKjcKgcKgcGtcGtcGJcGtcGtcGtcGtcGtcLicGtcGtcGtcGtcGtcGJcGtcGtcGtcGtaafcHycHycHycHycHycHycHycHycHycHycHycHyaafaamaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacHAcLdcHBaafcHAcLdcHBaaacHAcLdcHBaaaaaaaaaaafaaaaafaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaafaaacKxaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaacHqcKycHqcKycKzcKycHqcKycHqcKycHqcKyaafaamaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacKlcKlcKlcKlcKlcKlcKlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa From 49637da3be542542f54dd6ff13d73a08cbd04241 Mon Sep 17 00:00:00 2001 From: PsiOmega Date: Wed, 2 Sep 2015 15:02:04 +0200 Subject: [PATCH 09/10] Updates changelog. --- html/changelog.html | 31 ++++++++++++++++ html/changelogs/.all_changelog.yml | 28 +++++++++++++++ html/changelogs/Atlantis-PR-10336.yml | 7 ---- html/changelogs/Hubblenaut-dev.yml | 35 ------------------- .../changelogs/Kelenius-ofMechbabAndPanic.yml | 6 ---- html/changelogs/Matthew951-Volaju-hair.yml | 5 --- html/changelogs/Zuhayr-hardsuits.yml | 4 --- html/changelogs/zuhayr-pods.yml | 6 ---- 8 files changed, 59 insertions(+), 63 deletions(-) delete mode 100644 html/changelogs/Atlantis-PR-10336.yml delete mode 100644 html/changelogs/Hubblenaut-dev.yml delete mode 100644 html/changelogs/Kelenius-ofMechbabAndPanic.yml delete mode 100644 html/changelogs/Matthew951-Volaju-hair.yml delete mode 100644 html/changelogs/Zuhayr-hardsuits.yml delete mode 100644 html/changelogs/zuhayr-pods.yml diff --git a/html/changelog.html b/html/changelog.html index d7fd8db0e4..dd54c8a5fe 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -56,6 +56,37 @@ -->
+

02 September 2015

+

Atlantis updated:

+
    +
  • Converted phoron glass to borosilicate glass, adjusted heat resistances accordingly, got rid of copypaste fire code. Fire resistance is now handled by variables so completely fireproof windows are possible with varedit.
  • +
  • Windows take fire damage when heat exceeds 100C regular windows, 750C reinforced regular, 2000C borosilicate and 4000C reinforced borosilicate. For comparsions, reinforced walls begin taking damage around 6000.
  • +
+

Hubblenaut updated:

+
    +
  • Adds glass bottles for Cola, Space Up and Space Mountain Wind to Booze-O-Mat.
  • +
  • Some bar drink recipes have been amended to easily sum to 30 units for drinking glasses.
  • +
  • Vendors now have a product receptor for accepting goods. Opening the maintenance painel is no longer required.
  • +
  • Wrenching a vending machine is no longer a silent action.
  • +
  • Stepup: Item placement on 4x4 grids seemed to work great. Now we'll try 8x8.
  • +
+

Kelenius updated:

+
    +
  • Mechfab can now be upgraded using RPED, and now uses NanoUI.
  • +
+

Matthew951 updated:

+
    +
  • Added Vincent Volaju's hair.
  • +
  • Added Vincent Volaju's beard.
  • +
+

Zuhayr updated:

+
    +
  • Added the ability for AIs in hardsuits to control suit modules and movement with a dead or unconcious wearer.
  • +
  • Added ballistic supply drop pods.
  • +
  • Added diona gestalt random map template.
  • +
  • Swapped the singularity beacon out for a hacked supply beacon.
  • +
+

24 August 2015

HarpyEagle updated:

    diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 9db06b4b84..1511938579 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -2231,3 +2231,31 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - rscadd: Vox can now eat monkeys and small animals. - rscadd: Tajarans can now eat small animals. - rscadd: Unarmed attack damage has been lowered across the board. +2015-09-02: + Atlantis: + - rscadd: Converted phoron glass to borosilicate glass, adjusted heat resistances + accordingly, got rid of copypaste fire code. Fire resistance is now handled + by variables so completely fireproof windows are possible with varedit. + - rscadd: Windows take fire damage when heat exceeds 100C regular windows, 750C + reinforced regular, 2000C borosilicate and 4000C reinforced borosilicate. For + comparsions, reinforced walls begin taking damage around 6000. + Hubblenaut: + - rscadd: Adds glass bottles for Cola, Space Up and Space Mountain Wind to Booze-O-Mat. + - tweak: Some bar drink recipes have been amended to easily sum to 30 units for + drinking glasses. + - tweak: Vendors now have a product receptor for accepting goods. Opening the maintenance + painel is no longer required. + - tweak: Wrenching a vending machine is no longer a silent action. + - tweak: 'Stepup: Item placement on 4x4 grids seemed to work great. Now we''ll try + 8x8.' + Kelenius: + - tweak: Mechfab can now be upgraded using RPED, and now uses NanoUI. + Matthew951: + - rscadd: Added Vincent Volaju's hair. + - rscadd: Added Vincent Volaju's beard. + Zuhayr: + - rscadd: Added the ability for AIs in hardsuits to control suit modules and movement + with a dead or unconcious wearer. + - rscadd: Added ballistic supply drop pods. + - rscadd: Added diona gestalt random map template. + - tweak: Swapped the singularity beacon out for a hacked supply beacon. diff --git a/html/changelogs/Atlantis-PR-10336.yml b/html/changelogs/Atlantis-PR-10336.yml deleted file mode 100644 index f041e8d89e..0000000000 --- a/html/changelogs/Atlantis-PR-10336.yml +++ /dev/null @@ -1,7 +0,0 @@ -author: Atlantis - -delete-after: True - -changes: - - rscadd: "Converted phoron glass to borosilicate glass, adjusted heat resistances accordingly, got rid of copypaste fire code. Fire resistance is now handled by variables so completely fireproof windows are possible with varedit." - - rscadd: "Windows take fire damage when heat exceeds 100C regular windows, 750C reinforced regular, 2000C borosilicate and 4000C reinforced borosilicate. For comparsions, reinforced walls begin taking damage around 6000." diff --git a/html/changelogs/Hubblenaut-dev.yml b/html/changelogs/Hubblenaut-dev.yml deleted file mode 100644 index dd90f083d3..0000000000 --- a/html/changelogs/Hubblenaut-dev.yml +++ /dev/null @@ -1,35 +0,0 @@ -################################ -# Example Changelog File -# -# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. -# -# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) -# When it is, any changes listed below will disappear. -# -# Valid Prefixes: -# bugfix -# wip (For works in progress) -# tweak -# soundadd -# sounddel -# rscadd (general adding of nice things) -# rscdel (general deleting of nice things) -# imageadd -# imagedel -# maptweak -# spellcheck (typo fixes) -# experiment -################################# - -# Your name. -author: Hubblenaut - -# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. -delete-after: True - -changes: - - rscadd: "Adds glass bottles for Cola, Space Up and Space Mountain Wind to Booze-O-Mat." - - tweak: "Some bar drink recipes have been amended to easily sum to 30 units for drinking glasses." - - tweak: "Vendors now have a product receptor for accepting goods. Opening the maintenance painel is no longer required." - - tweak: "Wrenching a vending machine is no longer a silent action." - - tweak: "Stepup: Item placement on 4x4 grids seemed to work great. Now we'll try 8x8." \ No newline at end of file diff --git a/html/changelogs/Kelenius-ofMechbabAndPanic.yml b/html/changelogs/Kelenius-ofMechbabAndPanic.yml deleted file mode 100644 index 67f0c0806c..0000000000 --- a/html/changelogs/Kelenius-ofMechbabAndPanic.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: Kelenius - -delete-after: True - -changes: - - tweak: "Mechfab can now be upgraded using RPED, and now uses NanoUI." diff --git a/html/changelogs/Matthew951-Volaju-hair.yml b/html/changelogs/Matthew951-Volaju-hair.yml deleted file mode 100644 index be87392bb6..0000000000 --- a/html/changelogs/Matthew951-Volaju-hair.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: Matthew951 -delete-after: True -changes: - - rscadd: "Added Vincent Volaju's hair." - - rscadd: "Added Vincent Volaju's beard." diff --git a/html/changelogs/Zuhayr-hardsuits.yml b/html/changelogs/Zuhayr-hardsuits.yml deleted file mode 100644 index 187e90e25f..0000000000 --- a/html/changelogs/Zuhayr-hardsuits.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Zuhayr -delete-after: True -changes: - - rscadd: "Added the ability for AIs in hardsuits to control suit modules and movement with a dead or unconcious wearer." \ No newline at end of file diff --git a/html/changelogs/zuhayr-pods.yml b/html/changelogs/zuhayr-pods.yml deleted file mode 100644 index 64661a09e3..0000000000 --- a/html/changelogs/zuhayr-pods.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: Zuhayr -delete-after: True -changes: - - rscadd: "Added ballistic supply drop pods." - - rscadd: "Added diona gestalt random map template." - - tweak: "Swapped the singularity beacon out for a hacked supply beacon." From a7c527f491bb0c0f90503f771e1f7389a25b54af Mon Sep 17 00:00:00 2001 From: PsiOmega Date: Wed, 2 Sep 2015 15:14:24 +0200 Subject: [PATCH 10/10] Compilation fixes. --- code/modules/mob/mob_grab_specials.dm | 28 +++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/code/modules/mob/mob_grab_specials.dm b/code/modules/mob/mob_grab_specials.dm index f4364dc684..a151b97aae 100644 --- a/code/modules/mob/mob_grab_specials.dm +++ b/code/modules/mob/mob_grab_specials.dm @@ -1,8 +1,8 @@ /obj/item/weapon/grab/proc/inspect_organ(mob/living/carbon/human/H, mob/user, var/target_zone) - + var/obj/item/organ/external/E = H.get_organ(target_zone) - + if(!E || (E.status & ORGAN_DESTROYED)) user << "[H] is missing that bodypart." return @@ -14,7 +14,7 @@ user << "You find [E.get_wounds_desc()]" else user << "You find no visible wounds." - + user << "Checking bones now..." if(!do_mob(user, H, 20)) user << "You must stand still to feel [E] for fractures." @@ -23,7 +23,7 @@ H.custom_pain("Your [E.name] hurts where it's poked.") else user << "The [E.encased ? E.encased : "bones in the [E.name]"] seem to be fine." - + user << "Checking skin now..." if(!do_mob(user, H, 10)) user << "You must stand still to check [H]'s skin for abnormalities." @@ -45,7 +45,7 @@ if(state < GRAB_AGGRESSIVE) attacker << "You require a better grab to do this." return - + var/obj/item/organ/external/organ = target.get_organ(check_zone(target_zone)) if(!organ || organ.dislocated == -1) return @@ -61,14 +61,14 @@ return var/datum/unarmed_attack/attack = attacker.get_unarmed_attack(target, "eyes") - + if(!attack) return if(state < GRAB_NECK) attacker << "You require a better grab to do this." return for(var/obj/item/protection in list(target.head, target.wear_mask, target.glasses)) - if(protection && (protection.flags & HEADCOVERSEYES)) + if(protection && (protection.body_parts_covered & EYES)) attacker << "You're going to need to remove the eye covering first." return if(!target.has_eyes()) @@ -78,7 +78,7 @@ attacker.attack_log += text("\[[time_stamp()]\] Attacked [target.name]'s eyes using grab ([target.ckey])") target.attack_log += text("\[[time_stamp()]\] Had eyes attacked by [attacker.name]'s grab ([attacker.ckey])") msg_admin_attack("[key_name(attacker)] attacked [key_name(target)]'s eyes using a grab action.") - + attack.handle_eye_attack(attacker, target) /obj/item/weapon/grab/proc/headbut(mob/living/carbon/human/target, mob/living/carbon/human/attacker) @@ -87,25 +87,25 @@ if(target.lying) return attacker.visible_message("[attacker] thrusts \his head into [target]'s skull!") - + var/damage = 20 var/obj/item/clothing/hat = attacker.head if(istype(hat)) damage += hat.force * 10 - + var/armor = target.run_armor_check("head", "melee") target.apply_damage(damage*rand(90, 110)/100, BRUTE, "head", armor) attacker.apply_damage(10*rand(90, 110)/100, BRUTE, "head", attacker.run_armor_check("head", "melee")) - + if(!armor && prob(damage)) target.apply_effect(20, PARALYZE) target.visible_message("[target] has been knocked unconscious!") - + playsound(attacker.loc, "swing_hit", 25, 1, -1) attacker.attack_log += text("\[[time_stamp()]\] Headbutted [target.name] ([target.ckey])") target.attack_log += text("\[[time_stamp()]\] Headbutted by [attacker.name] ([attacker.ckey])") msg_admin_attack("[key_name(attacker)] has headbutted [key_name(target)]") - + attacker.drop_from_inventory(src) src.loc = null qdel(src) @@ -125,7 +125,7 @@ return if(force_down) attacker << "You are already pinning [target] to the ground." - + attacker.visible_message("[attacker] starts forcing [target] to the ground!") if(do_after(attacker, 20) && target) last_action = world.time