From 47f0b47c465e0f53e091ae2ff40ddc515472bb0c Mon Sep 17 00:00:00 2001 From: Atlantis Date: Mon, 27 Jul 2015 13:49:12 +0200 Subject: [PATCH 01/11] Borosilicate windows - This is the second part of my PR that added phoron windows to protect the SM core from fires - Borosilicate windows are heat resistant versions of regular glass windows. This PR renames them (from phoron windows/phoron glass/etc.) and adjusts the fire resistances - They are no longer completely fireproof. Instead, all window types have fire resistance variables - maximal safe temperature and amount of damage taken if temperature exceeds this limit. - Regular: 100C, Regular Reinforced: 750C, Borosilicate: 2000C, Borosilicate Reinforced: 4000C. - Adds alloying recipe to make borosilicate glass. 2 sand + 1 platinum alloy. --- code/game/objects/structures/window.dm | 36 +++++++++++++---------- code/modules/materials/material_sheets.dm | 13 ++++---- code/modules/materials/materials.dm | 11 ++++--- code/modules/mining/alloys.dm | 10 ++++++- html/changelogs/Atlantis-PR-10336.yml | 7 +++++ 5 files changed, 49 insertions(+), 28 deletions(-) create mode 100644 html/changelogs/Atlantis-PR-10336.yml diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 1fec557b8d..365c88cf22 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -8,6 +8,8 @@ anchored = 1.0 flags = ON_BORDER var/maxhealth = 14.0 + var/maximal_heat = T0C + 100 // Maximal heat before this window begins taking damage from fire + var/damage_per_fire_tick = 2.0 // Amount of damage per fire tick. Regular windows are not fireproof so they might as well break quickly. var/health var/ini_dir = null var/state = 2 @@ -388,8 +390,8 @@ return /obj/structure/window/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) - if(exposed_temperature > T0C + 800) - hit(round(exposed_volume / 100), 0) + if(exposed_temperature > maximal_heat) + hit(damage_per_fire_tick, 0) ..() @@ -399,44 +401,46 @@ icon_state = "window" basestate = "window" glasstype = /obj/item/stack/material/glass - + maximal_heat = T0C + 100 + damage_per_fire_tick = 2.0 + maxhealth = 12.0 /obj/structure/window/phoronbasic name = "phoron window" - desc = "A phoron-glass alloy window. It looks insanely tough to break. It appears it's also insanely tough to burn through." + desc = "A borosilicate alloy window. It seems to be quite strong." basestate = "phoronwindow" icon_state = "phoronwindow" shardtype = /obj/item/weapon/material/shard/phoron glasstype = /obj/item/stack/material/glass/phoronglass - maxhealth = 120 - -/obj/structure/window/phoronbasic/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) - if(exposed_temperature > T0C + 32000) - hit(round(exposed_volume / 1000), 0) - ..() + maximal_heat = T0C + 2000 + damage_per_fire_tick = 1.0 + maxhealth = 40.0 /obj/structure/window/phoronreinforced - name = "reinforced phoron window" - desc = "A phoron-glass alloy window, with rods supporting it. It looks hopelessly tough to break. It also looks completely fireproof, considering how basic phoron windows are insanely fireproof." + name = "reinforced borosilicate window" + desc = "A borosilicate alloy window, with rods supporting it. It seems to be very strong." basestate = "phoronrwindow" icon_state = "phoronrwindow" shardtype = /obj/item/weapon/material/shard/phoron glasstype = /obj/item/stack/material/glass/phoronrglass reinf = 1 - maxhealth = 160 + maximal_heat = T0C + 4000 + damage_per_fire_tick = 1.0 // This should last for 80 fire ticks if the window is not damaged at all. The idea is that borosilicate windows have something like ablative layer that protects them for a while. + maxhealth = 80.0 -/obj/structure/window/phoronreinforced/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) - return /obj/structure/window/reinforced name = "reinforced window" desc = "It looks rather strong. Might take a few good hits to shatter it." icon_state = "rwindow" basestate = "rwindow" - maxhealth = 40 + maxhealth = 40.0 reinf = 1 + maximal_heat = T0C + 750 + damage_per_fire_tick = 2.0 glasstype = /obj/item/stack/material/glass/reinforced + /obj/structure/window/New(Loc, constructed=0) ..() diff --git a/code/modules/materials/material_sheets.dm b/code/modules/materials/material_sheets.dm index 4d4f6033e6..e999a30a79 100644 --- a/code/modules/materials/material_sheets.dm +++ b/code/modules/materials/material_sheets.dm @@ -191,12 +191,15 @@ default_type = "reinforced glass" /obj/item/stack/material/glass/phoronglass - name = "phoron glass" - singular_name = "phoron glass sheet" + name = "borosilicate glass" + desc = "This sheet is special platinum-glass alloy designed to withstand large temperatures" + singular_name = "borosilicate glass sheet" icon_state = "sheet-phoronglass" - default_type = "phoron glass" + default_type = "borosilicate glass" /obj/item/stack/material/glass/phoronrglass - name = "reinforced phoron glass" + name = "reinforced borosilicate glass" + desc = "This sheet is special platinum-glass alloy designed to withstand large temperatures. It is reinforced with few rods." + singular_name = "reinforced borosilicate glass sheet" icon_state = "sheet-phoronrglass" - default_type = "reinforced phoron glass" + default_type = "reinforced borosilicate glass" diff --git a/code/modules/materials/materials.dm b/code/modules/materials/materials.dm index 49ddcfa300..3f77f5fe57 100644 --- a/code/modules/materials/materials.dm +++ b/code/modules/materials/materials.dm @@ -438,21 +438,20 @@ var/list/name_to_material rod_product = null /material/glass/phoron - name = "phoron glass" + name = "borosilicate glass" stack_type = /obj/item/stack/material/glass/phoronglass flags = MATERIAL_BRITTLE - ignition_point = PHORON_MINIMUM_BURN_TEMPERATURE+300 - integrity = 200 // idk why but phoron windows are strong, so. + integrity = 100 icon_colour = "#FC2BC5" - stack_origin_tech = list(TECH_MATERIAL = 3, TECH_PHORON = 2) + stack_origin_tech = list(TECH_MATERIAL = 4) created_window = /obj/structure/window/phoronbasic wire_product = null rod_product = /obj/item/stack/material/glass/phoronrglass /material/glass/phoron/reinforced - name = "reinforced phoron glass" + name = "reinforced borosilicate glass" stack_type = /obj/item/stack/material/glass/phoronrglass - stack_origin_tech = list(TECH_MATERIAL = 4, TECH_PHORON = 2) + stack_origin_tech = list(TECH_MATERIAL = 5) composite_material = list() //todo created_window = /obj/structure/window/phoronreinforced hardness = 40 diff --git a/code/modules/mining/alloys.dm b/code/modules/mining/alloys.dm index 9461c1e6b9..dc1a471c6a 100644 --- a/code/modules/mining/alloys.dm +++ b/code/modules/mining/alloys.dm @@ -24,4 +24,12 @@ "coal" = 1, "hematite" = 1 ) - product = /obj/item/stack/material/steel \ No newline at end of file + product = /obj/item/stack/material/steel + +/datum/alloy/borosilicate + metaltag = "borosilicate glass" + requires = list( + "platinum" = 1, + "sand" = 2 + ) + product = /obj/item/stack/material/glass/phoronglass \ No newline at end of file diff --git a/html/changelogs/Atlantis-PR-10336.yml b/html/changelogs/Atlantis-PR-10336.yml new file mode 100644 index 0000000000..f041e8d89e --- /dev/null +++ b/html/changelogs/Atlantis-PR-10336.yml @@ -0,0 +1,7 @@ +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." From 7f17505e48a2f462f857d23adc3b49b1f7872b06 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Tue, 18 Aug 2015 21:58:52 -0400 Subject: [PATCH 02/11] 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 03/11] 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 04/11] 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 05/11] 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 06/11] 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 07/11] 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 08/11] 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 09/11] 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 10/11] 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 11/11] 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