From e5e9a9f659b0c6f1078ac5c9a833c6831fbe152c Mon Sep 17 00:00:00 2001 From: SoundScopes Date: Fri, 29 Aug 2014 07:00:08 +0100 Subject: [PATCH 01/69] Modkit fix Not like we are going to use the items anymore, but just in case. --- code/modules/customitems/item_defines.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm index 4eeac4b7..b29c0487 100644 --- a/code/modules/customitems/item_defines.dm +++ b/code/modules/customitems/item_defines.dm @@ -331,8 +331,8 @@ icon = 'icons/obj/custom_items.dmi' icon_state = "omni_modkit" parts = MODKIT_HELMET - from_helmet = /obj/item/weapon/melee - to_helmet = /obj/item/weapon/melee/baton/fluff/omnivac_baton + from_helmet = list(/obj/item/weapon/melee) + to_helmet = list(/obj/item/weapon/melee/baton/fluff/omnivac_baton) /obj/item/clothing/head/soft/fluff/nebula_cap //Black baseball cap - Roxy Wallace - nebulaflare - DONE name = "black baseball cap" @@ -739,8 +739,8 @@ icon = 'icons/obj/custom_items.dmi' icon_state = "leo_mod" parts = MODKIT_HELMET - from_helmet = /obj/item/weapon/gun/projectile/detective/semiauto - to_helmet = /obj/item/weapon/gun/projectile/detective/semiauto/fluff/leo_gun + from_helmet = list(/obj/item/weapon/gun/projectile/detective/semiauto) + to_helmet = list(/obj/item/weapon/gun/projectile/detective/semiauto/fluff/leo_gun) /obj/item/weapon/gun/projectile/detective/semiauto/fluff/leo_gun //Instant Prosecutor - Leo Wyatt - keinto - DONE (stab) name = "\improper Instant Prosecutor" From 051c31ed9148c5e17eca0c73cc66d7c036a4c910 Mon Sep 17 00:00:00 2001 From: SoundScopes Date: Fri, 29 Aug 2014 13:49:18 +0100 Subject: [PATCH 02/69] Equipment Fix & AI Central Fax - You can no longer cook everything - AI's can contact CentComm once every half an hour --- code/modules/food/cooker.dm | 3 +++ code/modules/food/oven.dm | 6 +++++- code/modules/mob/living/silicon/ai/ai.dm | 20 +++++++++++++++++++- html/changelog.html | 13 +++++++++++++ 4 files changed, 40 insertions(+), 2 deletions(-) diff --git a/code/modules/food/cooker.dm b/code/modules/food/cooker.dm index edd74e9a..d71b779e 100644 --- a/code/modules/food/cooker.dm +++ b/code/modules/food/cooker.dm @@ -49,6 +49,9 @@ obj/machinery/cooker/proc/checkValid(obj/item/check, mob/user) /* if(istype(check, /obj/item/flag)) user << "That isn't going to fit." return 0*/ + if(!istype(check, /obj/item/weapon/reagent_containers/food)) + user << "That isn't going to work." + return 0 return 1 obj/machinery/cooker/proc/setIcon(obj/item/copyme, obj/item/copyto) diff --git a/code/modules/food/oven.dm b/code/modules/food/oven.dm index 2dd97fce..f0f213f6 100644 --- a/code/modules/food/oven.dm +++ b/code/modules/food/oven.dm @@ -20,9 +20,13 @@ user << "The machine is already running." return else + if(!istype(I, /obj/item/weapon/reagent_containers/food)) + user << "You think yourself better than to place [I] in there" + return + var/obj/item/F = I var/obj/item/weapon/reagent_containers/food/snacks/customizable/C - C = input("Select food to make.", "Cooking", C) in food_choices + C = input("Select food to make.", "Cooking", C) as null|obj in food_choices if(!C) return else diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 720e7556..4b684828 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -51,6 +51,8 @@ var/list/ai_list = list() var/datum/trackable/track = null var/last_announcement = "" + var/centcomm_message_cooldown = 0 + /mob/living/silicon/ai/New(loc, var/datum/ai_laws/L, var/obj/item/device/mmi/B, var/safety = 0) var/list/possibleNames = ai_names @@ -92,7 +94,7 @@ var/list/ai_list = list() verbs.Add(/mob/living/silicon/ai/proc/ai_call_shuttle,/mob/living/silicon/ai/proc/ai_camera_track, \ /mob/living/silicon/ai/proc/ai_camera_list, /mob/living/silicon/ai/proc/ai_network_change, \ /mob/living/silicon/ai/proc/ai_statuschange, /mob/living/silicon/ai/proc/ai_hologram_change, \ - /mob/living/silicon/ai/proc/toggle_camera_light) + /mob/living/silicon/ai/proc/toggle_camera_light, /mob/living/silicon/ai/proc/MessageCentcomm) if(!safety)//Only used by AIize() to successfully spawn an AI. @@ -738,3 +740,19 @@ var/list/ai_list = list() ..(0) else ..(on) + +/mob/living/silicon/ai/proc/MessageCentcomm() + set category = "AI Commands" + set name = "Message Centcomm" + if(centcomm_message_cooldown) + usr << "\red Arrays recycling. Please stand by." + return + var/input = stripped_input(usr, "Please choose a message to transmit to Centcomm via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response. There is a 30 second delay before you may send another message, be clear, full and concise.", "To abort, send an empty message.", "") + if(!input || !(usr in view(1,src))) + return + Centcomm_announce(input, usr) + usr << "\blue Message transmitted." + log_say("[key_name(usr)] has made an IA Centcomm announcement: [input]") + centcomm_message_cooldown = 1 + spawn(300)//10 minute cooldown + centcomm_message_cooldown = 0 diff --git a/html/changelog.html b/html/changelog.html index 442d7a10..86ebfd3e 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -56,6 +56,19 @@ should be listed in the changelog upon commit though. Thanks. --> +
+

29 August 2014

+

SoundScopes updated:

+
    +
  • AI's can contact CentComm once every half an hour
  • +
  • Cancel button on kitchen equipment
  • +
  • You can no longer turn everything into candy
  • +
  • You can no longer put everything in the oven
  • +
  • You can no longer put everything in the grill
  • +
+
+ +

27 August 2014

SoundScopes updated:

From 5259c3564ee061cb506eb3ed113f97b32a1f5383 Mon Sep 17 00:00:00 2001 From: SoundScopes Date: Fri, 29 Aug 2014 14:34:02 +0100 Subject: [PATCH 03/69] HTML log fix, Fryer messages - HTML code for logs - Better fryer messages --- code/game/machinery/kitchen/deep_fryer.dm | 30 +++++++++++-------- .../objects/items/weapons/cigs_lighters.dm | 4 +-- .../reagents/reagent_containers/glass.dm | 6 ++-- html/changelog.html | 2 ++ 4 files changed, 25 insertions(+), 17 deletions(-) diff --git a/code/game/machinery/kitchen/deep_fryer.dm b/code/game/machinery/kitchen/deep_fryer.dm index d75c7e54..fc52da11 100644 --- a/code/game/machinery/kitchen/deep_fryer.dm +++ b/code/game/machinery/kitchen/deep_fryer.dm @@ -22,29 +22,26 @@ if(istype(G)) // handle grabbed mob if(ismob(G.affecting)) var/mob/living/GM = G.affecting - for (var/mob/V in viewers(usr)) - V.show_message("[usr] starts pushing [GM.name] into the fryer.", 3) +// for (var/mob/V in viewers(usr)) +// V.show_message("[usr] starts pushing [GM.name] into the fryer.", 3) + user.visible_message("[user] starts pushing [GM.name] into the fryer.", "You try to force [src] towards the fryer.", "You hear a struggle.") if(do_after(usr, 20)) var/body_part = fry_mob_by_limb(GM, user.zone_sel.selecting) if(!body_part) //If you fry a valid part this will be set - for (var/mob/V in viewers(usr)) - if(GM.sleeping||GM.resting) - V.show_message("[GM.name] is to much of a dead weight to be place in the fryer") - else - V.show_message("[GM.name] breaks free.", 3) + if(GM.sleeping||GM.resting) + user.visible_message("[GM.name] falls limp.", "[GM.name] is to much of a dead weight to be place in the fryer", "You hear a thump.") + else + GM.visible_message("[GM.name] breaks free.", "You broke free from [user]'s grip", "You stop hearing a struggle.") return - for (var/mob/C in viewers(src)) - C.show_message("\red [GM.name]'s [body_part] has been placed in the [src] by [user].", 3) - + user.visible_message("[GM.name]'s [body_part] has been placed in the [src] by [user]", "You place [GM.name]'s [body_part] in the fryer", "You hear a sizzling.") del(G) usr.attack_log += text("\[[time_stamp()]\] Has placed [GM.name] ([GM.ckey]) in in the fryer.") GM.attack_log += text("\[[time_stamp()]\] Has been fried by [usr.name] ([usr.ckey])") msg_admin_attack("[usr] ([usr.ckey]) placed [GM] ([GM.ckey]) in a fryer. (JMP)") else - for (var/mob/V in viewers(usr)) - V.show_message("[usr] broke free") + GM.visible_message("[GM.name] breaks free.", "You broke free from [user]'s grip", "You stop hearing a struggle.") return else @@ -65,42 +62,51 @@ if("head") M.apply_damage(40, BURN, limb) M << "\red Your thoughts are overwritten by the pain, as searing hot oil encompasses your head." + M.say("*scream") return "head" if("l_leg") M.apply_damage(20, BURN, limb) M.apply_damage(30, BURN, "l_foot") M << "\red Your thoughts are overwritten by the pain, as searing hot oil encompasses your left leg and foot." + M.say("*scream") return "left leg" if("l_foot") M.apply_damage(20, BURN, limb) M << "\red Your thoughts are overwritten by the pain, as searing hot oil encompasses your left foot." + M.say("*scream") return "left foot" if("r_leg") M.apply_damage(20, BURN, limb) M.apply_damage(30, BURN, "r_foot") M << "\red Your thoughts are overwritten by the pain, as searing hot oil encompasses your right leg and foot." + M.say("*scream") return "right leg" if("r_foot") M.apply_damage(20, BURN, limb) M << "\red Your thoughts are overwritten by the pain, as searing hot oil encompasses your right foot." + M.say("*scream") return "right foot" if("l_arm") M.apply_damage(20, BURN, limb) M.apply_damage(30, BURN, "l_hand") M << "\red Your thoughts are overwritten by the pain, as searing hot oil encompasses your left arm and hand." + M.say("*scream") return "left arm" if("l_hand") M.apply_damage(20, BURN, limb) M << "\red Your thoughts are overwritten by the pain, as searing hot oil encompasses your left hand." + M.say("*scream") return "left hand" if("r_arm") M.apply_damage(20, BURN, limb) M.apply_damage(30, BURN, "r_hand") M << "\red Your thoughts are overwritten by the pain, as searing hot oil encompasses your right arm and hand." + M.say("*scream") return "right arm" if("r_hand") M.apply_damage(20, BURN, limb) M << "\red Your thoughts are overwritten by the pain, as searing hot oil encompasses your right hand." + M.say("*scream") return "right hand" return null diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm index 723f7726..08321d8b 100644 --- a/code/game/objects/items/weapons/cigs_lighters.dm +++ b/code/game/objects/items/weapons/cigs_lighters.dm @@ -430,9 +430,9 @@ CIGARETTE PACKETS ARE IN FANCY.DM icon_state = icon_off item_state = icon_off if(istype(src, /obj/item/weapon/lighter/zippo) ) - user.visible_message("You hear a quiet click, as [user] shuts off [src] without even looking at what they're doing.") + user.visible_message("You hear a quiet click, as [user] shuts off [src] without even looking at what they're doing.") else - user.visible_message("[user] quietly shuts off the [src].") + user.visible_message("[user] quietly shuts off the [src].") user.SetLuminosity(user.luminosity - 2) processing_objects.Remove(src) diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index 5aea9ff6..7ff400b8 100644 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -61,10 +61,10 @@ attack_self() ..() if (is_open_container()) - usr << "You put the lid on \the [src]." + usr << "You put the lid on \the [src]." flags ^= OPENCONTAINER else - usr << "You take the lid off \the [src]." + usr << "You take the lid off \the [src]." flags |= OPENCONTAINER update_icon() @@ -280,7 +280,7 @@ user.put_in_hands(new /obj/item/weapon/bucket_sensor) user.drop_from_inventory(src) del(src) - + update_icon() overlays.Cut() diff --git a/html/changelog.html b/html/changelog.html index 86ebfd3e..1509774c 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -62,9 +62,11 @@ should be listed in the changelog upon commit though. Thanks. -->
  • AI's can contact CentComm once every half an hour
  • Cancel button on kitchen equipment
  • +
  • Messages when frying people
  • You can no longer turn everything into candy
  • You can no longer put everything in the oven
  • You can no longer put everything in the grill
  • +
  • HTML Log tags
From fd5bb446117440d91d560205ed0b888267ef588a Mon Sep 17 00:00:00 2001 From: SoundScopes Date: Fri, 29 Aug 2014 16:17:49 +0100 Subject: [PATCH 04/69] Messages Wrong name said to someone --- code/game/machinery/kitchen/deep_fryer.dm | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/code/game/machinery/kitchen/deep_fryer.dm b/code/game/machinery/kitchen/deep_fryer.dm index fc52da11..4a9691b4 100644 --- a/code/game/machinery/kitchen/deep_fryer.dm +++ b/code/game/machinery/kitchen/deep_fryer.dm @@ -22,9 +22,7 @@ if(istype(G)) // handle grabbed mob if(ismob(G.affecting)) var/mob/living/GM = G.affecting -// for (var/mob/V in viewers(usr)) -// V.show_message("[usr] starts pushing [GM.name] into the fryer.", 3) - user.visible_message("[user] starts pushing [GM.name] into the fryer.", "You try to force [src] towards the fryer.", "You hear a struggle.") + user.visible_message("[user] starts pushing [GM.name] into the fryer.", "You try to force [GM.name] towards the fryer.", "You hear a struggle.") if(do_after(usr, 20)) var/body_part = fry_mob_by_limb(GM, user.zone_sel.selecting) From 7663cd053b25d7ee9d9c338923417f25f8f51869 Mon Sep 17 00:00:00 2001 From: SoundScopes Date: Fri, 29 Aug 2014 16:48:19 +0100 Subject: [PATCH 05/69] Area fix Grav gen includes gas_chamber --- Scopes Files/gravitygenerator.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Scopes Files/gravitygenerator.dm b/Scopes Files/gravitygenerator.dm index ffb004fc..affa4f5a 100644 --- a/Scopes Files/gravitygenerator.dm +++ b/Scopes Files/gravitygenerator.dm @@ -488,6 +488,8 @@ var/list/gravity_field_generators = list() // We will keep track of this by addi ) for (var/type in SPECIALS) if ( istype(A,type) ) + if(A.type == /area/prison/gas_chamber) + return AREA_STATION return AREA_SPECIAL return AREA_STATION From 05133fe5918fa5d970c62a1991e051b997809708 Mon Sep 17 00:00:00 2001 From: SoundScopes Date: Fri, 29 Aug 2014 19:03:45 +0100 Subject: [PATCH 06/69] Floating Fix Buckled mobs no longer float. --- Scopes Files/space_cooler.dm | 2 ++ code/game/objects/structures/stool_bed_chair_nest/bed.dm | 4 ++++ code/game/objects/structures/target_stake.dm | 6 ++++++ code/modules/mob/mob_movement.dm | 2 +- html/changelog.html | 4 +++- 5 files changed, 16 insertions(+), 2 deletions(-) diff --git a/Scopes Files/space_cooler.dm b/Scopes Files/space_cooler.dm index 7a7e9aef..4a6db8a2 100644 --- a/Scopes Files/space_cooler.dm +++ b/Scopes Files/space_cooler.dm @@ -179,10 +179,12 @@ if(env.temperature != set_temperature + T0C) var/transfer_moles = 0.25 * env.total_moles() + msg_scopes("transfer_moles: [transfer_moles]") var/datum/gas_mixture/removed = env.remove(transfer_moles) if(removed) var/heat_capacity = removed.heat_capacity() + msg_scopes("heat_capacity: [heat_capacity]") if(heat_capacity) // Added check to avoid divide by zero (oshi-) runtime errors -- TLE if(removed.temperature > set_temperature + T0C) removed.temperature = min(removed.temperature - cooling_power/heat_capacity, TCMB) // Added min() check to try and avoid wacky superheating issues in low gas scenarios -- TLE diff --git a/code/game/objects/structures/stool_bed_chair_nest/bed.dm b/code/game/objects/structures/stool_bed_chair_nest/bed.dm index 85540156..3160e681 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/bed.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/bed.dm @@ -49,6 +49,8 @@ buckled_mob.buckled = null buckled_mob.anchored = initial(buckled_mob.anchored) buckled_mob.update_canmove() + if(!buckled_mob.mob_has_gravity(buckled_mob.loc)) + buckled_mob.float(1) buckled_mob = null return @@ -95,6 +97,8 @@ M.loc = src.loc M.dir = src.dir M.update_canmove() + if(!M.mob_has_gravity(M.loc)) + M.float(0) src.buckled_mob = M src.add_fingerprint(user) return diff --git a/code/game/objects/structures/target_stake.dm b/code/game/objects/structures/target_stake.dm index 8a0b54e4..ff11c310 100644 --- a/code/game/objects/structures/target_stake.dm +++ b/code/game/objects/structures/target_stake.dm @@ -79,10 +79,14 @@ /obj/structure/target_stake/proc/unbuckle() if(buckled_mob) if(buckled_mob.buckled == src) //this is probably unneccesary, but it doesn't hurt + if(!buckled_mob.mob_has_gravity(buckled_mob.loc)) + buckled_mob.float(1) + buckled_mob.buckled = null buckled_mob.anchored = initial(buckled_mob.anchored) buckled_mob.update_canmove() buckled_mob = null + return /obj/structure/target_stake/proc/manual_unbuckle(mob/user as mob) @@ -138,6 +142,8 @@ M.loc = src.loc M.dir = src.dir M.update_canmove() + if(!M.mob_has_gravity(M.loc)) + M.float(0) src.buckled_mob = M src.add_fingerprint(user) return \ No newline at end of file diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index f005c06e..d57addd8 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -469,7 +469,7 @@ return 0 /mob/proc/float(var/on) - if(on) + if(on && !buckled) if(!real_name) msg_scopes("[name] was made to float") else diff --git a/html/changelog.html b/html/changelog.html index 1509774c..0ec432d7 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -57,7 +57,7 @@ should be listed in the changelog upon commit though. Thanks. -->
-

29 August 2014

+

30 August 2014

SoundScopes updated:

  • AI's can contact CentComm once every half an hour
  • @@ -67,6 +67,8 @@ should be listed in the changelog upon commit though. Thanks. -->
  • You can no longer put everything in the oven
  • You can no longer put everything in the grill
  • HTML Log tags
  • +
  • Gravity Generator Area fix
  • +
  • Mob buckled to chairs no longer float until unbuckled
From 83a06403dc67cec8aa3e409d94727fbbe440cbc6 Mon Sep 17 00:00:00 2001 From: Duck- Date: Fri, 29 Aug 2014 21:39:51 -0400 Subject: [PATCH 07/69] Laser pointers, overchargeflashes, various fixes Alcohol and thermite now flammable. Laser pointers added! Flash now comes in delicious incendiary flavor. Robot fire overlay bug fixed-ish. Being lit on fire turns off a borg's lights but the fire still shows. I'll take it. Shield gens actually useable by the people they were meant for. --- aurora.dme | 1 + .../ShieldGen/circuits_and_designs.dm | 12 +- code/__HELPERS/game.dm | 8 + code/game/machinery/camera/camera.dm | 3 + code/game/machinery/shieldgen.dm | 4 +- code/game/objects/items/devices/flash.dm | 70 +++++- .../objects/items/devices/laserpointer.dm | 208 ++++++++++++++++++ code/modules/mob/living/silicon/robot/life.dm | 2 +- .../modules/mob/living/silicon/robot/robot.dm | 7 +- code/modules/projectiles/projectile/beams.dm | 5 + code/modules/reagents/Chemistry-Reagents.dm | 14 ++ code/modules/research/designs.dm | 11 +- data/investigate/gravity.html | 4 +- icons/obj/device.dmi | Bin 21872 -> 23494 bytes icons/obj/projectiles.dmi | Bin 28160 -> 31208 bytes 15 files changed, 327 insertions(+), 22 deletions(-) create mode 100644 code/game/objects/items/devices/laserpointer.dm diff --git a/aurora.dme b/aurora.dme index f2092f19..072ce7b4 100644 --- a/aurora.dme +++ b/aurora.dme @@ -552,6 +552,7 @@ #include "code\game\objects\items\devices\debugger.dm" #include "code\game\objects\items\devices\flash.dm" #include "code\game\objects\items\devices\flashlight.dm" +#include "code\game\objects\items\devices\laserpointer.dm" #include "code\game\objects\items\devices\lightreplacer.dm" #include "code\game\objects\items\devices\megaphone.dm" #include "code\game\objects\items\devices\modkit.dm" diff --git a/code/WorkInProgress/Cael_Aislinn/ShieldGen/circuits_and_designs.dm b/code/WorkInProgress/Cael_Aislinn/ShieldGen/circuits_and_designs.dm index b85be8f7..c387bccc 100644 --- a/code/WorkInProgress/Cael_Aislinn/ShieldGen/circuits_and_designs.dm +++ b/code/WorkInProgress/Cael_Aislinn/ShieldGen/circuits_and_designs.dm @@ -21,8 +21,8 @@ datum/design/shield_gen_ex desc = "Allows for the construction of circuit boards used to build an experimental hull shield generator." id = "shield_gen" req_tech = list("bluespace" = 4, "plasmatech" = 3) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20, "$plasma" = 10000, "$diamond" = 5000, "$gold" = 10000) + build_type = PROTOLATHE + materials = list("$glass" = 2000, "$plasma" = 5000, "$diamond" = 5000, "$gold" = 5000) build_path = "/obj/machinery/shield_gen/external" //////////////////////////////////////// @@ -47,8 +47,8 @@ datum/design/shield_gen desc = "Allows for the construction of circuit boards used to build an experimental shield generator." id = "shield_gen" req_tech = list("bluespace" = 4, "plasmatech" = 3) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20, "$plasma" = 10000, "$diamond" = 5000, "$gold" = 10000) + build_type = PROTOLATHE + materials = list("$glass" = 2000, "$plasma" = 5000, "$diamond" = 5000, "$gold" = 5000) build_path = "/obj/machinery/shield_gen/external" //////////////////////////////////////// @@ -73,6 +73,6 @@ datum/design/shield_cap desc = "Allows for the construction of circuit boards used to build an experimental shielding capacitor." id = "shield_cap" req_tech = list("magnets" = 3, "powerstorage" = 4) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20, "$plasma" = 10000, "$diamond" = 5000, "$silver" = 10000) + build_type = PROTOLATHE + materials = list("$glass" = 2000, "$plasma" = 5000, "$diamond" = 5000, "$silver" = 5000) build_path = "/obj/machinery/shield_gen/external" diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index f8a13e15..687ef35b 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -366,3 +366,11 @@ datum/projectile_data var/dest_y = src_y + distance*cos(rotation); return new /datum/projectile_data(src_x, src_y, time, distance, power_x, power_y, dest_x, dest_y) + + +/proc/flick_overlay(image/I, list/show_to, duration) + for(var/client/C in show_to) + C.images += I + sleep(duration) + for(var/client/C in show_to) + C.images -= I \ No newline at end of file diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index 966741aa..d5f6ed1e 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -178,6 +178,9 @@ playsound(loc, "sparks", 50, 1) visible_message("\blue The camera has been sliced apart by [] with an energy blade!") del(src) + else if(istype(W, /obj/item/device/laser_pointer)) + var/obj/item/device/laser_pointer/L = W + L.laser_act(src, user) else ..() return diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm index e4957ea1..acc0a5bd 100644 --- a/code/game/machinery/shieldgen.dm +++ b/code/game/machinery/shieldgen.dm @@ -322,7 +322,7 @@ icon_state = "Shield_Gen" anchored = 0 density = 1 - req_access = list(access_teleporter) + req_access = list(access_research) var/active = 0 var/power = 0 var/state = 0 @@ -330,7 +330,7 @@ var/last_check = 0 var/check_delay = 10 var/recalc = 0 - var/locked = 1 + var/locked = 0 var/destroyed = 0 var/directwired = 1 // var/maxshieldload = 200 diff --git a/code/game/objects/items/devices/flash.dm b/code/game/objects/items/devices/flash.dm index e108a312..3a8d3734 100644 --- a/code/game/objects/items/devices/flash.dm +++ b/code/game/objects/items/devices/flash.dm @@ -13,6 +13,8 @@ var/times_used = 0 //Number of times it's been used. var/broken = 0 //Is the flash burnt out? var/last_used = 0 //last world.time it was used. + var/flashready = 0 //overcharge flashes + var/overcharge = 0 //overcharge check /obj/item/device/flash/proc/clown_check(var/mob/user) if(user && (CLUMSY in user.mutations) && prob(50)) @@ -51,7 +53,11 @@ switch(times_used) if(0 to 5) last_used = world.time - if(prob(times_used)) //if you use it 5 times in a minute it has a 10% chance to break! + if(overcharge == 1) + icon_state = "cellflashburnt" + broken = 1 + user << "The bulb has burnt out!" + else if(prob(times_used)) //if you use it 5 times in a minute it has a 10% chance to break! broken = 1 user << "The bulb has burnt out!" icon_state = "flashburnt" @@ -65,6 +71,13 @@ if(iscarbon(M)) var/safety = M:eyecheck() + if(overcharge == 1) + M.adjust_fire_stacks(5) + M.IgniteMob() + user.visible_message("[user]'s supercharged flash ignites [M]!") +// broken = 1 +// if(overcharge == 1) +// icon_state = "cellflashburnt" if(safety <= 0) M.Weaken(10) flick("e_flash", M.flash) @@ -90,7 +103,11 @@ flashfail = 1 else if(issilicon(M)) - M.Weaken(rand(5,10)) + M.Weaken(10) //why are robots more resistant to flashes than humans when it is their only weakness. besides ion rifles. used to be rand(5,10). changed to 10. + if(overcharge == 1) + M.adjust_fire_stacks(5) + M.IgniteMob() + user.visible_message("[user]'s supercharged flash ignites [M]!") else flashfail = 1 @@ -106,7 +123,10 @@ del(animation) if(!flashfail) - flick("flash2", src) + if(overcharge == 0) + flick("flash2", src) + else if(overcharge == 1) + flick("cellflash2", src) if(!issilicon(M)) user.visible_message("[user] blinds [M] with the flash!") @@ -134,7 +154,11 @@ //It will never break on the first use. switch(times_used) if(0 to 5) - if(prob(2*times_used)) //if you use it 5 times in a minute it has a 10% chance to break! + if(overcharge == 1) + icon_state = "cellflashburnt" + broken = 1 + user << "The bulb has burnt out!" + else if(prob(2*times_used)) //if you use it 5 times in a minute it has a 10% chance to break! broken = 1 user << "The bulb has burnt out!" icon_state = "flashburnt" @@ -144,7 +168,10 @@ user.show_message("*click* *click*", 2) return playsound(src.loc, 'sound/weapons/flash.ogg', 100, 1) - flick("flash2", src) + if(overcharge == 0) + flick("flash2", src) + else if(overcharge == 1) + flick("cellflash2", src) if(user && isrobot(user)) spawn(0) var/atom/movable/overlay/animation = new(user.loc) @@ -176,7 +203,10 @@ if(0 to 5) if(prob(2*times_used)) broken = 1 - icon_state = "flashburnt" + if(overcharge == 1) + icon_state = "cellflashburnt" + else if(overcharge == 0) + icon_state = "flashburnt" return times_used++ if(istype(loc, /mob/living/carbon)) @@ -202,11 +232,35 @@ if(!broken) broken = 1 user << "\red The bulb has burnt out!" - icon_state = "flashburnt" + if(overcharge == 0) + icon_state = "flashburnt" + else if(overcharge == 1) + icon_state = "cellflashburnt" /obj/item/device/flash/synthetic/attack_self(mob/living/carbon/user as mob, flag = 0, emp = 0) ..() if(!broken) broken = 1 user << "\red The bulb has burnt out!" - icon_state = "flashburnt" + if(overcharge == 0) + icon_state = "flashburnt" + else if(overcharge == 1) + icon_state = "cellflashburnt" + +/obj/item/device/flash/attackby(obj/item/W, mob/user) + if(istype(W,/obj/item/weapon/cell)) + if(flashready == 1 && overcharge == 0) + del(W) + overcharge = 1 + icon_state = "cellflash" + user << "\red You attach the cell to the flash." + name = "cell/flash assembly" + desc = "When blinding and being an asshole just isn't enough." + else if(overcharge == 1) + user << "\red This flash already has a cell attached!" + else if(istype(W, /obj/item/weapon/screwdriver)) + if(overcharge == 0) + user << "\red You ready the flash for modification." + flashready = 1 + else if(flashready == 1) + user << "\red This flash has already been modified!." \ No newline at end of file diff --git a/code/game/objects/items/devices/laserpointer.dm b/code/game/objects/items/devices/laserpointer.dm new file mode 100644 index 00000000..4a0c3687 --- /dev/null +++ b/code/game/objects/items/devices/laserpointer.dm @@ -0,0 +1,208 @@ +/obj/item/device/laser_pointer + name = "laser pointer" + desc = "Don't shine it in your eyes!" + icon = 'icons/obj/device.dmi' + icon_state = "pointer" + item_state = "pen" + var/pointer_icon_state + flags = FPRINT | TABLEPASS | CONDUCT | USEDELAY + slot_flags = SLOT_BELT + m_amt = 500 + g_amt = 500 + w_class = 2 //Increased to 2, because diodes are w_class 2. Conservation of matter. + origin_tech = "combat=1" + origin_tech = "magnets=2" + var/turf/pointer_loc + var/energy = 8 + var/max_energy = 8 + var/effectchance = 33 + var/recharging = 0 + var/recharge_locked = 0 + var/obj/item/weapon/stock_parts/micro_laser/diode //used for upgrading! + + +/obj/item/device/laser_pointer/red + pointer_icon_state = "red_laser" +/obj/item/device/laser_pointer/green + pointer_icon_state = "green_laser" +/obj/item/device/laser_pointer/blue + pointer_icon_state = "blue_laser" +/obj/item/device/laser_pointer/purple + pointer_icon_state = "purple_laser" + +/obj/item/device/laser_pointer/New() + ..() + diode = new(src) + if(!pointer_icon_state) + pointer_icon_state = pick("red_laser","green_laser","blue_laser","purple_laser") + +/obj/item/device/laser_pointer/upgraded/New() + ..() + diode = new /obj/item/weapon/stock_parts/micro_laser/ultra + + + +/obj/item/device/laser_pointer/attack(mob/living/M, mob/user) + laser_act(M, user) + +/obj/item/device/laser_pointer/attackby(obj/item/W, mob/user) + if(istype(W, /obj/item/weapon/stock_parts/micro_laser)) + if(!diode) + user.drop_item() + W.loc = src + diode = W + user << "You install a [diode.name] in [src]." + else + user << "[src] already has a cell." + + else if(istype(W, /obj/item/weapon/screwdriver)) + if(diode) + user << "You remove the [diode.name] from the [src]." + diode.loc = get_turf(src.loc) + diode = null + return + ..() + return + +/obj/item/device/laser_pointer/afterattack(var/atom/target, var/mob/living/user, flag, params) + if(flag) //we're placing the object on a table or in backpack + return + laser_act(target, user) + +/obj/item/device/laser_pointer/proc/laser_act(var/atom/target, var/mob/living/user) + if( !(user in (viewers(7,target))) ) + return + if (!diode) + user << "You point [src] at [target], but nothing happens!" + return + if (!user.IsAdvancedToolUser()) + user << "You don't have the dexterity to do this!" + return + + add_fingerprint(user) + + //nothing happens if the battery is drained + if(recharge_locked) + user << "You point [src] at [target], but it's still charging." + return + + var/outmsg + var/turf/targloc = get_turf(target) + + //human/alien mobs + if(iscarbon(target)) + if(user.zone_sel.selecting == "eyes") + var/mob/living/carbon/C = target + + //20% chance to actually hit the eyes + + if(prob(effectchance * diode.rating)) + msg_admin_attack(user, C, "shone in the eyes", object="laser pointer") + + + //eye target check + outmsg = "You blind [C] by shining [src] in their eyes." + var/eye_prot = C.eyecheck() + if(C.blinded || eye_prot >= 2) + eye_prot = 4 + var/severity = 3 - eye_prot + if(prob(33)) + severity += 1 + else if(prob(50)) + severity -= 1 + severity = min(max(severity, 0), 4) + var/mob/living/carbon/human/H = C + var/datum/organ/internal/eyes/E = H.internal_organs_by_name["eyes"] + + switch(severity) + if(0) + //no effect + C << "A small, bright dot appears in your vision." + if(1) + //industrial grade eye protection + E.damage += rand(0, 2) + C << "Something bright flashes in the corner of your vision!" + if(2) + //basic eye protection (sunglasses) + flick("flash", C.flash) + E.damage += rand(2, 4) + C << "Your eyes were blinded!" + if(3) + //no eye protection + if(prob(10)) + C.Weaken(1) + flick("e_flash", C.flash) + E.damage += rand(3, 5) + C << "Your eyes were blinded!" + if(4) + //the effect has been worsened by something + if(prob(5)) + C.Weaken(1) + flick("e_flash", C.flash) + E.damage += rand(5, 10) + C << "Your eyes were blinded!" + else + outmsg = "You fail to blind [C] by shining [src] at their eyes." + + //robots and AI + else if(issilicon(target)) + var/mob/living/silicon/S = target + //20% chance to actually hit the sensors + if(prob(effectchance * diode.rating)) + S.Weaken(rand(5,10)) + S << "Your sensors were overloaded by a laser!" + outmsg = "You overload [S] by shining [src] at their sensors." + + S.attack_log += text("\[[time_stamp()]\] Has had a laser pointer shone in their eyes by [user.name] ([user.ckey])") + user.attack_log += text("\[[time_stamp()]\] Shone a laser pointer in the eyes of [S.name] ([S.ckey])") + log_attack("[user.name] ([user.ckey]) Shone a laser pointer in the eyes of [S.name] ([S.ckey])") + else + outmsg = "You fail to overload [S] by shining [src] at their sensors." + + //cameras + else if(istype(target, /obj/machinery/camera)) + var/obj/machinery/camera/C = target + if(prob(effectchance * diode.rating)) + C.emp_act(1) + outmsg = "You hit the lens of [C] with [src], temporarily disabling the camera!" + + msg_admin_attack("\[[time_stamp()]\] [user.name] ([user.ckey]) EMPd a camera with a laser pointer") + user.attack_log += text("\[[time_stamp()]\] [user.name] ([user.ckey]) EMPd a camera with a laser pointer") + else + outmsg = "You missed the lens of [C] with [src]." + + //laser pointer image + icon_state = "pointer_[pointer_icon_state]" + var/list/showto = list() + for(var/mob/M in range(7,targloc)) + if(M.client) + showto.Add(M.client) + var/image/I = image('icons/obj/projectiles.dmi',targloc,pointer_icon_state,10) + I.pixel_x = target.pixel_x + rand(-5,5) + I.pixel_y = target.pixel_y + rand(-5,5) + + if(outmsg) + user << outmsg + else + user << "You point [src] at [target]." + + energy -= 1 + if(energy <= max_energy) + if(!recharging) + recharging = 1 + processing_objects.Add(src) + if(energy <= 0) + user << "You've overused the battery of [src], now it needs time to recharge!" + recharge_locked = 1 + + flick_overlay(I, showto, 10) + icon_state = "pointer" + +/obj/item/device/laser_pointer/process() + if(prob(20 - recharge_locked*5)) + energy += 1 + if(energy >= max_energy) + energy = max_energy + recharging = 0 + recharge_locked = 0 + ..() diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm index 6bf5fa9b..252a94aa 100644 --- a/code/modules/mob/living/silicon/robot/life.dm +++ b/code/modules/mob/living/silicon/robot/life.dm @@ -337,7 +337,7 @@ overlays -= image("icon"='icons/mob/OnFire.dmi', "icon_state"="Standing") if(on_fire) overlays += image("icon"='icons/mob/OnFire.dmi', "icon_state"="Standing") - update_icons() +// update_icons() return /mob/living/silicon/robot/fire_act() diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 9f1eba57..cba6b0f6 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -483,6 +483,7 @@ ..(Proj) updatehealth() if(prob(75) && Proj.damage > 0) spark_system.start() + update_fire() return 2 @@ -784,6 +785,7 @@ else if( !(istype(W, /obj/item/device/robotanalyzer) || istype(W, /obj/item/device/healthanalyzer)) ) spark_system.start() + update_fire() return ..() /mob/living/silicon/robot/attack_alien(mob/living/carbon/alien/humanoid/M as mob) @@ -979,6 +981,7 @@ /mob/living/silicon/robot/proc/updateicon() overlays.Cut() + update_fire() if(stat == 0) overlays += "eyes" overlays.Cut() @@ -1013,10 +1016,10 @@ else icon_state = base_icon return - +/* /mob/living/silicon/robot/proc/updatefire() return - +* //Call when target overlay should be added/removed /mob/living/silicon/robot/update_targeted() if(!targeted_by && target_locked) diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index fc89e557..23abaaef 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -122,6 +122,11 @@ var/list/beam_master = list() icon_state = "emitter" damage = 30 +/obj/item/projectile/beam/stunrevolver + name = "stun beam" + icon_state = "stun" + damage = 10 + agony = 45 /obj/item/projectile/beam/lastertag/blue name = "lasertag beam" diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index dbebe839..ae505252 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -777,6 +777,13 @@ datum reagent_state = SOLID color = "#673910" // rgb: 103, 57, 16 + reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)//Splashing people with welding fuel to make them easy to ignite! + if(!istype(M, /mob/living)) + return + if(method == TOUCH) + M.adjust_fire_stacks(volume / 10) + return + reaction_turf(var/turf/T, var/volume) src = null if(volume >= 5) @@ -3068,6 +3075,13 @@ datum var/blur_start = 300 //amount absorbed after which mob starts getting blurred vision var/pass_out = 400 //amount absorbed after which mob starts passing out + reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)//Splashing people with welding fuel to make them easy to ignite! + if(!istype(M, /mob/living)) + return + if(method == TOUCH) + M.adjust_fire_stacks(volume / 10) + return + on_mob_life(var/mob/living/M as mob) M:nutrition += nutriment_factor holder.remove_reagent(src.id, FOOD_METABOLISM) diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index 206d0f85..74a93fc4 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -1377,6 +1377,15 @@ datum/design/nanopaste materials = list("$metal" = 7000, "$glass" = 7000) build_path = "/obj/item/stack/nanopaste" +datum/design/laserpointer + name = "laser pointer" + desc = "Don't shine it in your eyes!" + id = "laser_pointer" + req_tech = list("magnets" = 3) + build_type = PROTOLATHE + materials = list("$metal" = 100, "$glass" = 50) + build_path = "/obj/item/device/laser_pointer" + datum/design/implant_loyal name = "loyalty implant" desc = "Makes you loyal or such." @@ -1497,7 +1506,7 @@ datum/design/nuclear_gun datum/design/stunrevolver name = "Stun Revolver" - desc = "The prize of the Head of Security." + desc = "Occasionally prize of the Head of Security, but usually of asshole scientists." id = "stunrevolver" req_tech = list("combat" = 3, "materials" = 3, "powerstorage" = 2) build_type = PROTOLATHE diff --git a/data/investigate/gravity.html b/data/investigate/gravity.html index c3b98f4e..ef0b20af 100644 --- a/data/investigate/gravity.html +++ b/data/investigate/gravity.html @@ -1,2 +1,2 @@ -14:59 [0x200777c] (92,152,1) || the gravitational generator has regained power.
-14:59 [0x200777c] (92,152,1) || the gravitational generator is now charging.
+21:21 [0x20077ce] (92,152,1) || the gravitational generator has regained power.
+21:21 [0x20077ce] (92,152,1) || the gravitational generator is now charging.
diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi index 437dd056c2691605c537d9beec6421f1e4514ba0..f9f0aa9f048a2bcfe7b2d5e15567cc130bd04511 100644 GIT binary patch literal 23494 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%0A6rUm23$mB})iOe3<dQ}g*eyuQ%Eq1= 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 bh-}044~XKt?Qa2|8-fs5ObyEP9HRdNMh%sn literal 21872 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 diff --git a/icons/obj/projectiles.dmi b/icons/obj/projectiles.dmi index 14e1f5a1888f6240a66080073641319992ccd7bf..da413aa54b7ea2ba10a5264ff6cbcfea764aa701 100644 GIT binary patch literal 31208 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 z z-g)ddZuQz_>iu2c`rzgPyxTn-e><_ZZM$))nIYkF@rxA>X2(>4;z)6MyMjK`*=e%D z&>*9!u}kInkCx@fS1$+R-@VV}e$ub@DBpU7vE%Q59gup`bCbIK2h|iwW+9w)Vf=Zk z3b~aY*P-NeVYt?6&vGv~A@o7Z_I-rl)!#y3q^wj{uaUpa`0<97Hy!X$2&Z0SdRl2% z8v0|{!$XRWr^T~nqL}kW%BXm?X^Oa6Ne?GnVENz@9gk~sK|k&$r`DRr&!+ua&LYs3 z7LCkVAUypSw?WZUqn3*^?+s<79|B#&s2=t6sq$NvHZkWe==23Q=(x!tA#GCd94tnpFXl>J8>}fM7;)Z9w=l40_qi+aT~~C(DDhCq>@`H zlrl?vGd;Kt+Ef3zkReXsIt2fe|MEtaz{YOa({AWe2*pD$P*vaEmD=CQTw!G)rU6xgjEf6eSWvU}(}~VP05rAr924kd-Ap;0c<=KxA9x zXmS!$egQWRKQO(bqlxAJ-Z0E?<+F?mDg3u?*0wY9-}Uv?C-Hb)-_XmQQRVPxuF8H7 z-1*~bh7*!ZmP0$SzRZoP&h+q;2U@XptjT_sn(Y$U3rkZpvfm4QPtHLkEaG5#Lcyi) zM~sRjgTcV|?fw9_XYc46xe}~yTDGid$*kNz=Qv+y@cHM>LJw~}xqD1e#wn$g_DF?J zArew&Qq;R23IJ-tm%7A={LgpRKLGFF=-zE1UVnxjNP*M}tY{h1R5pu{3MJk>RM?MM zJ-FPY2-hFMp?`@ty*^P&B*0Lg=CpcADeY9|bwWnxmLWl3W{KR;`Fm}Jl8`-#eM|n zA?Ze9`{Y2HkO;3HYv`Dp3X~nS@l97>TZNGEaE^8E-|6;iuX7JO`^$a{#kL!w^9ZM! zo7dB1^rWu!-^uIEH9O_>C<7lhf79)FJY8hesqfI=_9Hc;+-gNgmaYerymF=F2WuOV zR1?VvtiK3AwykE>YP|+e&wO13QO{-Zdx*E=Gj&Q~j6m>&{=1%_#UIj4R-}3==d4_B zu`c@7WU7{!Dyz|hcDHezhHtcN>_G~YI+vPYNFO!HgR0MD+RjB1ic*bER6h5MTRntr z``@QMf0`9}=V)MAp`VD5Es~>canRQ86m)NgoF}F@2Jev06b^a{@ajEGW~3D4P*(sn zuK<)RxRERQq@!N})$(!S)Kj-t8W8zOeGhpnC2D{yX8Y39p6YwK0N1vC%Bgq>@j+fv zi2fyJ0aA;{9gUCz2CqpSxTo{T&?R@@Qq!=h{OnK{#|aKE?zOhv{vP|41jRqr^|UU2 z7Ho}Y>RM_(JJtHARSB1;=M+gp2M3;L%MIzj`lfWMWj=sZ3uMTgK4(fp#ZeAu9)%1V zlm1`YL>BmJ|7L7@-Z9lQQY38Dt4z|l=n0T=s;L7y3ei5$VD50Fy6@EO6rX>CV9Gul znpPr?-_5)%L2?|Rw99|xvvx0pA}Z+H9paP}E2$)zQb7vwvLpk{=Uh6`vQ&zYzVb>n zJcmNbb~GX6q-e1&D#)&7-_>G~aHFY1jcQ8@UijLpXQq_tUnMx`my66`WIu=qv6qsu z8r!r~WO{1XNy?Ie_FzP2u<>&D91i`3(i;mMgBLW8^% zK>sL%I1*l4gD$5Bijr(qy&lgMB>N;tRKrtUqQ&__HCBkEadgYVCfr@E;2WF)od?;gC)2G2^!qpVQ>o;+}+)E;2wVe=Y7{* zcij)HnK?73Pgi&Cs$ILgiBMLQMnfh>27y3mvN95?AQ060+aDr4aK(4JBMJCm@1?Hg zB4Ori;$-RIVrg#&0(oTQt5@4~v*TuLReA)~m&nM_CNtyJ83*K3U<%P!Mtm8Fwm}$N zb2pL+2>7X7Ame^Fw&$JMv$yNr8g^qhf^J$ify^PZM!?J;`EMq+i{q<`LT<^*!vMbv zEYV+^s9pR1Tvb98qF&}luKCzdRBZetn(8pr%|?&xbH&e2F!W@OQdL3DERZUVTw905 zu7S|tD;{=Q9S#HEE+i7Rk`aoc6||s1rsHebqPt|$f(tICQ?4^IdF57Mz5|Z(!W-GrsQZnzkD>`!Wz`jQwh9pRed2Y@y z7RTy5=&Iw8KUQ@(v*-`%SlkSALFz(wvOtt?Ln zXM-~cv|C%UAP^-;RzghOBjb3**M;Qfx5(q&57Qxxn%}$)CiKxr?`XdBDk0)8u1JXQ zLz^8y;X9#dkDXm#pSrsFx3lD|+BJ7hwJX@)9p_^#{5y4W->U5t66zeGo4AG=i&;`_ zK*OGZhTDkcT^B|4bl4o|RjMf;NPQZx_)|@_RP!e_uIw&q%Oof4!N(kT+`J=(+N0e7 z6ALS@S)vq0R6;^M@>f7acsMf{R$fBF6pGG>ii!$lzMK_=g=IG8T%;y@*JeKsm4myf z%aZlP=79SVOT|%H>E(sbz?CEuwmjOt-semNhaF1=OD5xa<@DPA{OPMHb{&7m%#Zok zGVH2>JdG~jj(pGTi16!OD>wOpaM-%_Awv^oY~~;LsqYK6I`?6ZFI*V+p?yeFeIhIl z(mNME{C=j(E>(OXb8f3HV{tZ{ecC?gfCBak0;ezvv#DK`2rHt?z6ckCqtG&dDOO9;~w|xG7PKs{z z*Bmv^MWW`cCQu z;#m?gn%iJgLhr+KnRd+)`8&MwH6q3A!%E%NudDmbgj11UV`F^&T=g$xJ<{~iQU&5BQ=@{+Hk^V0b40GC*mKOfwmDaiSPT!TG zn-XG5RjW@@^g)Tljb_)f1N%`JkPgs`Ua8$DrA zq90yjMA|*{}YIbH3aec*k^4T-fAX44> z+xXTEf}{Z74w#^h1s?s}5p!sHg|^gQp3;85HQ&39^NpUSvyP{~h&=XuWfRlWG=O0Q zAY7*5>?p&U!^1;%K0Zq?7QL+J8v;=&#i&bobj0{lwTH0!PL)Rg#>Z#CIsT|?YNq>O z<(|PbFkjpvc7M!yy|w1a;I4nRYmsTM$Gz6BR1=&{%%=}&>06blvlyAt zGi#x;dD#SHv>3a@MqlK8r|Vp_gfKL-V9RAc$))hy_K_LNL)DI#E?TU)z*N`y83k*E zq>&lk!GJSf)~B)79Rl z0@UBSBATi{XHupL&-p&jslXNd*atGtAjQ z{_n~Cfq<4v#i2>X!T*5!*{5{J`StDQaOT)6$lI&M#s8o1#}0*qg{2LSeS%W6JomY+ zMR+=Eb3O`-5%JS~-_Pdy@BMg8{lMza4z@&{XI1)UmjMx@t~-0jXP?1l_~V0PA7%=; z_p|r;6%RWpYfL-$`JefB9zHx`}l{a~%jMRCtXDStH8LcX}7 zErczj6)BC+p1FwlywDI4W&606kKZ}1?fYCForS?S7x47_Qh2EnYy4A5-Rh58CdJ%q zcH@oKs1*oYoi+S`n&4mQ|Ga^SYmj>@@L}E$$w-F}xL)b?BaNxC6e;a^>W{FRmcjsx8!z)bcZp zc&!#$R(LoALbHlWf$M{70y{afP=LgMW!!)v%a*-q8;K|p`5irvCV zB4)Xm0nD4($E!bF@_Hv!(LaTqGjk#LJK5ui;>4DVc9rvDi{jij5Q&$yI?>E0ltny9 zu*4sF!^<%01YOU!_)9rCR{Z z%&7NZmwAxn(gVt)l_Vq*e;(tU1Lm#=uE2l-5Zo{$B<}+Is{g6;KG1QMe)s0YCsLOITq6vC$4y)E)F6~;_fH<)Kl~q`V(k@^ z(2mplElsPrr&2m1rd|fb8;eOA&AmxA0a?W1ARQ0qpo)Fb8hK6F4^3`{z;oC$1rX>Z?9EMyA{ zKW}U%SX5+<^B-ER0qEBKsX|H%Pp%UuugCC+ ziSY%id+;Jgg(v?J&m7Am+XsPMa-w8^F`&HN!iYVZIiyl4U7m`EUAcE|QEUD$-pNxa zOhJh5;RjDCd|78}NL=L27@j&Ix+i~iB`U8sr7-eZD5;Bpsi(^rai&>Gy zr8H|O&UZq2{Ucmh00)d5?@l-ag99$x!#cw%g`T)Ra&aZ;VecpMC%NN-kIzKqnt%s~ zjEVmq&J-H@Vk!7g^7Yl$xHD~ZkP|sf!(Cezlw3*2kqBL;m``jv;OlAg=B>$gVpc-Yye96Zi*$2OG|wzr}k0{W?Hryo;QU> zF;1I7<$*7ldc5v80xw|{zPSdpVh*in9!?d|m1S=zf9Xp;cY<}1A_EX19uHY5PS8v+ z7~lFmYWL?aR!APjXrHziEExH9&~RTChQ`YRwE#{ux!GO0nz(u#sFe{Wmj?7(pSe^@ zmyKo#1qQ&DWZ{)^p_5UJt3pSZ;P20EssDyKfb5OOM`y&y_^4Cix1IpUr95JMG_364 z8?VkA`SpFj>HvVYx?bFoQN+(=Z;?vp)Ad~~;E9`YXhVx-L|KJ@Km0FkDNIO6mJk+> z#`4X>>XQOsi&UmVkyf_cqAcqM8c{dp&~E(|j!g0NAEN*hv#Vek<9t-PFoC9HR3#0O zRA2r-av}U*{`()T$S%S;f2XvkVk_oFMU`u;T8E_7N~Vjz52le<_X3a;(;`@S->4*6 zY60LksR7+38%1A(Aeg~gQV2QiPMj9F=gTzGucBB_p+lXPc(&Gh7iWkd79KaZ7!DEm zh)=L&Md^#&pKpGd;bm_Sv%QrcdukkcEAJA`W7Z8w`=hQp!T{6Yzv6tv8Vy7G6&^ka zEx7`Fa+$IDi4>>^6C?Sd+;f;5)toq_Yt5ay0^u|mrk&y(^)l7;!h<7q6cr{GMP35z zsrNQihpcYpqsjZD3T|essQ*0q&K#4_F&f|M3IFYFmckmz$s$c&u$wb6WfEQG$WR$)WsgL#F+cO=NBKwzp|>YW<|2;f+)D z4^}}G2pVghn=75Q?$ue_IRMVumnU=RG3vahKMQ*b>TUQst!dV}DddXc9FwZHLENoM z|Bi(=6{`9$$7Ljc2k;@5u{&U5V@+=EBnH&`$;~f-lX`afDMxz|;mAZd>_kC#J+zFrKs3x?1E)M* z*2n{qG|_z#*>Pcb+pncB+81m}xQdYyZeho#Bn};EzkvwU)TL%Cu)l{E`y}dIF8r1y zn!i%8W0{3oC*bUS|Ly*rIrT1Gv2Ik|f&Hp1-I)Bv2$0yaul@x11|M?UCM&f|; zG#Z%9KjXyhzbhPnlscN}z5-mA@v{KBaFLcie6Aill$y$=pyS>b`nBJ$P6SGWwB61= zG0-3Z#aE$DXO0=EEc+CSfEV+;@st@ILV2*di(nW(-t)<9@78bgj$#nF)E{Eq^)Dzc z=i7`&B}}jMZ&3WuuR-QVnhe`ZID8p!^XhoqAf|g1SdQamo9B*U*p?O19uS;#s0#8A z>f1$dKwKNc;~|uHYlzhkzJvB5*k@mBKc<@HjW;r-Y@;y81~|88QO98!pJj$PrK5l- zvph+fbVK%r=WtoDrv7cGM$Wlx)f)o$_G+94-M^<7RP)9izYvN{{u2?|)rO>XDOA(8 zra9_e9l!I|b96R2t&5Ya4!K7YMw}pLRkGJJ$2*Sj?lE-NPE_-?50NzjM!g zD4=R13g~!UXxt0P`5*)g$TADGS>q=nVW_VQAC=vhFg;N~*+0GzcdU6WegLmf0Rx1H zmLB-}0H3&|_dTh{dB-~P7P9psf{^*jXLGj(dhVd8RyqqR_fNH4>%7bo!n9MNyf#3g zd|i8e8_UWQNa}j(V%~iTI#TE@#M%tky)ymoY3{b?uTyFlUKR>!5ll6-_AMNN8T2eR z#kDkOm-f^6yYcjhdE(B93#HNOS2|kb@#6cJqphc(KRd4sPgO&tUmLfF%w1uON>vSi zD2Va#CGjE=rlP)?<8!KZ7*Tnwk$r&*66NDFv)F{1PAHSIm@g9!PZ0;q+!zhmAb=JX ze6Wk8c#7&dbpKGt`taRD6)fkp8PfLFyc1FWDKHCN_5KE!Yn}gYkwWU{Qg0!Ej?zDT z=0DJdfakbYe)#(L26Cql3%YM0)o~gkVAy~aWO^u|0fFyne#vxLVpkE#dT3lKG`_;q zZkto`E(XKHonW#A*O)-G4j>zc$$OoBc`_Xsl-BgfMA-u zaQR5!Ri3B~?Su#X@X&io;ZOW$W)o?UG##LeuCLDs)4gq1+dN5nN&%Vlr|NrroiyTY zC;036qBY~*u3tDFDr#ZE&-|wp*Eh#0+up+*;iJasH>0~U-WzI`R9`=#-$*dqsIq-h z6-kKsW_h8eNa^=%LKu9KOcpU`{4!@W<@+jtPR9Lbf%5{=SVzgd46{^r)(OAap&OXG zyk!xg=|>HF!A~Dz0u%mQsF=HTpaN7w-SK+(A^gEG7%iacmVZ#%E1E6;cs1#`Q9j|%_G$*|G+3~;Td-K>_(=Ja^H)0}zGr-~jA-T}HKW2|VnV z+kp(?(JcKG^+1U$$P%Sfod=s${PcVn)M{@qwoPnIo&ds2tdIC190>F=^TYP0c;51E z+R9uZUzT1e{p~Y?az7)M_Z%G=>hDOndAgiNVX*YX3FU61#LR)M+srfx_u=RXA^xe-QZRuK z_Zw{fNy5UKzm-qXnh53@E0JK@JjQcFtEsfycwrHCm3_<^x39l>%Yf8v*Vtl1NAsM> zfcGVtzsc~+Q7StoBbGlae7{mgZ@td>Ln7QFya61j$0{HK1q5n(_Fk9&sQvva&+2&w z?J#3oFj1_O&+00}RiTwpa!nHXIB<|c3@4wC5M7m5-r%&TtlWh$zBtg6o;cfFz zRtXhXxsOkGkccyp>Q{)!2<>z(gFVUxlm^?F@Qdi?)11{|_o7ni_-g}6z+!0Cw3K+O zU}jz>Y2iDw83Y?X7NkE!A*NQxfJ%u_HMz~PZ<79wtKr2n_|A|F&I`I5OjJL_#)SmA z6Kk`YU{K!SCSZr>@^j8h3+ZELN9B6A2p{;OBxV6R7g-x@rnsGPUBj+o<%8x|iB3?% zw2__`w%>>E>NVuFdJVjn6kGVlmFf1JH#217=tp>&x}E*uVWshFt9Qa8w|^kokN_2@Nm4N>e~jjN-)8O!5oMnbJhfd^6E0%Wj~{zS>JmMjk4 zP*mz~36lndJ~2T*sGyVZ#XVm?T!+O#kv5P7eRf6-(IW%}h@U&hNQg}KA>}#xKiBT4 zjK}J$`a1pFjzUig6vFGdp@PrEpVfURXOo{(=qZA;o#N7jQ%i!Fn|9Qs+Si5fk>Sl5Yt`P8$!?G6$p5{~nT0YW$Ek{kN5kK?7_H}`+RfMrr`NXq5Z-Hy8rO(=6gD@&(FUmD?L(aA}XT z=vSEjB(LM~mG#kyp|Lr@uoG$7mE?_8bOC&(y2eII2J+(gngtWEDB?{PFkvNb1v$X& zMpj#NKL%21+!|t6(Sek6bqf+d1wckQVtE%Vd~4W-!nyon32ERctIvDKIGe}e3cBmI z)`KJeJ!m5iz-MPb+85VO+KN~OzdAwZZfdIMWk;0d&g}ZQuHjraivMW$R{iZwYL5Js&{Ngp#%d^-6()kR={i2ZLJkWxLRlYkMPsvwq1{+Cy9h zDDcUrWd6tt#rF&r?$6aTJ45(@bc1DK*v&XfF!N8l33t?F+N0Io(@wBW~ zw6|_Ef7M+5z&~n^R&wDHT|l=GYG7#b^bP6Wr`1OTE^9#ben88{<1c}EPUqUE`=^4w zDIMd#{A?{-A5wzKtiT5q9=oNf`+Kfdl}FMItZ$-+ zgzB(zST6jse{xQWD2g@v0>k|jY5qkJL>kHu%EeXs z+{cY*lXF&})hSSGy{pl9ukzwR?m(WXisO<)$IrxyihN@nGRP3>HEAx{e2JBS^ov0* z)a%11iM~Ljc~QN{xbX1Z?xZTz+$^1>(ei62pyJnNn!{Ua+FbfK0BZvR>dm6M3%{mB zr2nnpR$_HYOG+*lct^R!0Ec#IOvXhPiiRPen-{GZ}J8laxmsR2-t zU4C;oqU6Y6-U^p(Oj6Z~pv4N^voy13e+VVDvu)iUM-x-->3r7kokV|0QVbJHR0DUx z?g)=|$oYrtyvN1vo)tnB5y<8|s?Fs8*$V(ZilZIj-r}zLh@hSX&Kd^ws5lumnxUo9T?-S7(N06yj7Tz)Qi)|)kQxWK--k$~ zN}AAHl4*)(Gw?=PU;h^tGajyGttEqwoEdG6VvWF&!oo>*OeD$f4|^6gxjvqxLW5OO zV?gkdsM}t;gxJ<*`rq3}Z!C<jh@Cs%ChJ#RFw@9~i@bmjkS->Wxov2ZRoR6KBm=yEQ+!;gwx8?nIWKBn>=CtMGuc!TRbYNBG_)mFIr-80-k zYss<}1BTKj%c%XLMGXzC1;$0`MiBIHM$*8^4uz}qg-j!j0y&Jqj~%9WB@uT9OOXmO zHnm%MCzD2fw=xzsDA}UX{n66jG}`FH?D^?VQU#;sDBgqVIWXgA>;kDj3qNiH*!1fl zW=+iV-T5_NRnyhssokDO4C}2N(Q^{KiN-BvQ4iPa6wC_hct3wJc^gSQ+3wTa=DOmV+rFHWxfT3XMNj~9Nk@fx z*bQ+7%(FJ?x*b3x3w;j$R&TgejaRf_=gzn^ypvsS1!447a1JgnXx1px`buDuLrA4I zshi7LZNiCDvxa_eQa$c2r>Z;V`!9aGdZw{_`CDzoQVKA8OjZ(&?cMd|WhGtToEO=h z`5vWlAX}FbuMRd=_o^TF)r}{WM?V;~kra7gc&z`TksWYW2seZ$CBU^=p5AObNF&av zwo~}x-NPu&2U0gcZcNdX&nb{1;(t)te@>a%An`1Rn~PwmEW+h!CLZCLtuQ=sGVl(j z-iRq0gGc=pvqrZ=dU8=5sPz$|H2ytl_l z=86C*lQ-9K5jHFtPky9)lTiy^2bJt+xmnmfYH zJJeS9BjG{?_vG#@#>tHro@?FRDS7?)6XXPdhOWxDhNa`c6ZC=g?FImB>&-MP|JpDGo^$kdFl;2Y$2*-XC zV+E&-k8nTTKSerK3lKkKlkDHYFttF11R63t6#c9KWz4wgwpyDtw>r8?_FR6svDU0C zbpe6&rbvz}u)>)5IrSj2*Vo9s9H+sfi9PUPYT){r(qa9bxsOPjHP-LuHK0I=kxq$* zQ#9(8jP87JdL*@7aR+V-unLmn$H{~Z&!9qSDF-j3-rjH?4QvkyEne?&p)hl|6RU!d)bdb-VKJ874<)^=KScFTI-8_>kcii$&+nVL8> zzKL8_x78O5Gh`h_4cBbO=T%SD(0H!t9>YZdbNZb`)84XavcBEyZ+**pnPX%+ zqh_*wMWtH&ZttsR_;+=9gia=jLtiOZ(qiK!PYJ;ScIM%oFy@0uJeKLwf)#!8YLmIOG3g{L967ESZ_9$Zw- z(~C~;GMd*nI;rEriP;oY;HF!V87lyRC=6OsnN4^Mz16|8I}|C0ysKvBwu+-_#o*=Q zo3!i5?l~_v48b#abS0jqJ;hqYArxk3=1ccYeR&esOu03w>s)OTbPD_|>o+$|Z z;@LyNb!PttOL|uUoEi_u@D&b=4_B?5S}mwY7&V6j6{K7+fJL4fL>gIqhQ;wJUG)e1 z{1blK+>mFM`rs-O$odJ|pqboNYYQ5#E~gEz{%~`R zjpcZ2xF1vF0fFHC;7CW9Es=lhE0nl%n%bTUo-t+oSvHXcOPeyvldDUB-DS7@br_`0f^&H^N zYH)wyWwg_RlU5@M8P)-bN-ppclcuoayv%R7AX{6Pa@a$UP2b~oH^e%*c^Q4v2RjaF z6PzmOfnc8o9Co(kFcH3W=K$aNAa4w#HnzUm3sC)C*KZtWwV2kOHbE?C1G(V#LKwt0 z57ZlfJQ>vf$Xht}%gVy9_Rbqx(@n6)H{3}6H|nB9`$)!+Md1vgQmGn*r->_7A-$WO zbFXw%QaBb${K%Z#{sKUg;|76|HE9{GrsrZkkJhMu$5C@Kt)}l&q`XC)8N4@yw7l*wmh8s_>pqS9u_%7)+urtq=>5K8N%v@Hz* zcReD`(ArQ<&ko+;kpDY)3HHz;&-^i5qxuddSLi4TN~~_ACU+2EZ%#WNTKJ^se1!OY z!^4Qgde9P{#2b^CbV(zGKT)N~KCQP~IJ5`|F6<#ZK8yBzSSP6V`4NPVhlmbkmODkq zdss@T!2{yH`J_~Z2F5D?G-!!K3XMMln^By~9+aRqEWNc?XrD>isZ8?wJ)1RZiNd;g zA$?-b6am%D))da$4>-TVa;}`le+K85sHYjpt%w86G|*mVSj`?t}@k>Q^sf zC1D(J#}YKV6EZgF$944AKX+Ldf-mqDUN?eMSO2)L+h2UA8zE=#QsgNk0A-;DGAt;( zrYyVSv#(?_9tavpxmu~U|FVhqpCU;+4(5R*`u7`!|Er#7k&sryB04B9u4{k4&q#@x zzfA>Qi40~{(@6m=o5x{v6u7L$?fc-gknIu70wgLrAl}lMTlH>S=%`O4f?$7ONaW__ zb$h2gjmqAEf<5vZlj0t2!e&SQs85h3}4oHw_movk@ttD5ARTvyH#khiDDR>7^o0GqXy+R zTr++~bz%q_^pHT3PLkw;GC%YI<;=$VIC-&q7;j&SiZc`HGbw7efU;lzx)@#m8`ReQ z$Sa5yuat>FS;yLQ!U5FaSZ4yFhPd|^oKQYchlzORk>b|2zieyEAGkWtbW0Db8;0^5be*B~50zdGL&h&NuLDrv{&OPRO zmm6*9=%$Zm$e9`YAQWKonmQvpk;Ezun)3}wUlz8eVi~s`nxvv7!+4N`j`+Q``(P#~ zlI}nLiD*+0M;^dzczn(T&Kv2xWAydf&rDP~cT!m6$VRQMPwUC1u13jBDHtn`fvm zC^McW|3JGw>*_Z{)wuO6N22-0jh|ucpTfkBxw-xEchrrN z==~nFqQZ6Pst^wyH>|m-yrE+mLO^w#!}z+xbf#*p+~Ia^)48 z~+xZQ)Ue@LE7umU?RXKk8VQ>w$A+nQ^AhY2i+Znll z$U&!%)8#KmIVwM@(kS`sr$RP=Qb+Yh8~A{8(<}<7SI7EYo_BlHP%uMF%v5HKF*Kg9 z0jVTw8q(fJDIsktjkx)VDI7&Rv8I%ia{r?IT;s4hixlhsZ5n8#KQ&K-S;mQ&6C z8=Bdbt;dNI&7b_U?-UeJ{eGvn_s1~>>Q^dk(ExXGDn=+@6}j9)a_bR8p~PJ->Ndit zKH)VXPS&Ws$K11k&<- z6+;vfVQ7BOK&qIbFgiMhEUy4F!${6yp?|kcXBWlLEyw6cJCr_f}x6dg0*_N zQv*_}^v=xFk036V2ePwnP?dL2-FlToIJ)t)#V12|R`)Eo z(V(QvTs(YaNmF~;#UvY_{o7_{rX=3C{&8-Qa8W4m)fjTz-0|v2JnR>I3YRhF zPBWy9u7?2A*l2LH6wuBr{Qkdoar{5q zW8dV}$V6b1=pO!n|KH*JzGz?rP7z{XLgjb~O;Mj2_858LJG>7=I|~PB_XhRsFITGp zXMUxdI7w728$b1%&Zld*tZ$*tDLdAGpMe7@((pvcI5*j7%b*C5hIX`5FJA?2I`_ON zuvioVbKYG)K$LDCAQ)O$BIHlS!kw@0nKs$rjGCy8*W7k5Hm=;xo8G zYC@pJ`n_}T=@Jy-9BNsN;m=0w@pL@@h_7f(gMVn&D#tF`Ce1v^?TY*z%HVLc^Xk#& z*ERghvilksU$B8)l2N%z*9dzanc?C1{dD`xGOXh*F5})X9h`LdTcr+pNPa$eV39P! zl<;t1o8`J>tX`&T%eJ@pu+rg?963qmUwT(J#-V|DD%a1STjo&N2Hwj~zW%~XaVaTd z1?^a=a2Ww&BpXaLUO?>(oH;%TaJBg1M3U`N06k(4@r27O8ioDhN9(6f&fWcr4a z;Yu}3)?oVg;(dsDH)1BnHruyFr@xAApeonsMnB4C!6VcPH2*Ja2-X@b9y#B>mG04| zz(T&nED7CN!^bPiezvk0Vtc>()8HM1eh|~PWq?8l)9}?E-~n=?QvZpL(g9n0r5i2T zMke(uvj$tZJYO`C<^+Cs>x2c=IH*U=6rfsqF=^z zY|6^3>gNDS<%@b`dIofbD^Mv_1%HZ87h`^X*U z^qv7Ea@&n|mEf@VPBu`WdG1@^tkts}=o|*&R?B5W1kR#0&|SEhF?+_Cpo9aK_NmxEJD)FCbx9%(30fBS19P-crn{Zk1=!TnLy>(SrdGcxO!xlKrdxq-Gt zK5Ok3+phq?v<^gGHh7g7f}aW$U^R zZ3j(!BQkABIn_kaWfdRwgrfI7GY8Qr!tgPZqwNvbPCBt&nQf(x?ux;}zor~Fh?V98 zmqO4!v$%)pXGC6BKKcQ+>1aK23&J!+u1pdf68K;z1yqO6@wh|HNP@murxcCXo8%B2 z-$RO?v+Hq|dYvlmf1|Dj%#giW1)m4fh2NDZ(48cptnYb43T9W zz55Nf){XCLu{u@4ae&%rrRV<4Zb3k0SMCZ9;P`9hHn;gO;{j}v?xKw3Yf!l=%#{~g z8FrNT*={`^jT}~3hvgNc8N0&3(tbzYqYu)$4XiCV2;yA!8d{ieS#5q?5tHsq4R>&i zGlN9kV1AoT;+3em8oN^<}GR+u6N1$q6j9oJH{MK`TWuNEU%2riYs)kiMy!7+){Cs~ZuePCnGGj5a4$5Z0 z%n+MrtPn*ErBsg=E5i>QK3)p6W(pj(!ZJ%rs`|qHsZ0y0YXP;Z0T~k(G3jd}51Y72 zl@w+nlRiL(3oChN*+`;Ru#h(-2t691d2>MY?$n(M|9ox10vDaH={a;?hez8YG)Y{N zPZ}UrpY$29=&|jiFE(MeK>Ad(w`@xi%bqf-6FIvJtWA?xN?!U7JtrC@Ap#h(kt)9N z5y;tV7@e&sLw}a?g%M0xk!R@c?uGkH+x`3nPg=Gv>S=6@oSTFnN(d<=R&+|Kj+d=4UN@op+Kd7A zWwE;xRx;l+(P8;WzBaXYCz9=3kx#6qxoA}a%C;M2tS@XwLpf4-C~uyK>e%yNKwmG$ zZ+s%i98RJj7~gR#Cm=fWE`qoc*t-HF)tBUY4oT+2?}I$LBWt&{hU7QJnR<9 zLO;Gh#^%TCG_-Y_F?I#Vu-5zHBiwFxK71*aExF2=$y+}SpL@ok4d+1_NYDP6ZKqob zS31x+LKd?McXR)=VwJ`96u`MD;IJO1LHku7jqn#6QcQ1HTGohBo(^=THt%x=*Sd$H zC88*BmT`zp>cfW*)Cg}&440Ab=k=-4bswZjPVmH}gSW6rCm9EG5QFyM6ECI+#HW14 zbBb#da^4u|-ne8pBv|Tty!MPbfIC8_SW^|kMTGDTJ=%0)Fhszu!Y_9oD}yOUzr zzV2U#4({j2)oQZJ-=LyPLvT2248u2ju_&`|p8R~{F4Qc1n{}a{D=HOEu4d?0JGh^* zhs3nbxbu ze=9RW*fdW^g82E4t3~rxgObD7^R?>>0-K;)ul7jI_)oyHSG7~Bpq^SDYI81U&znfQ z`EZezdOi@X>_n_e$&UNXJ|Qy2>GiE;Pt|bS)CM-|7=db4GTB`O)6)wxDOYji{7w3gXy+2KS~6HCQ+_l}HikRLhf-qkc7J4^S4~g?eLmmQtTyE6xsI z0@m_{yRaq}QcZAOW>J2cCfv6{twBP$k@-^*>!73;{}Ax3pACC&$_|_$JTLB7O2BIf zd|C;3hvYH)k;dJpu5syi8)!O4>idTQQGr`gr#e@`JvutrRw$XU&AhtQA5m%wGXsR} z#($3w(@FxT3psuxkUpq@D01*2^diW=D_>~5TKf4`)bzRdt=~n*1}V`M?j(rk4G&$U zYAIQe7T&^Wv-EBNixaZ(1-CKT?jNyLtPr4c-qx&Uk~U-g-bE|>yo-(igc}axBW>z+ zb(#S13v>Jn^mV-vr9$^lriev0qvgNjpHiJm*QA6CBzGF&+wMw2+5fJGEz&Rpwl13~AZwKlaz%R0NwZ z&p)uMW@%VtRqsav{Nap+$}4_xVjD(s6zN7feUfruP?A%zlD!|<+DH01Ak2v1XGtOL z`8WATY76d;$;Gc#o8ST_=^FeprLtls<932qNZ@U%AU@P;fW5MlCw`eBVLfspkqeW; zj*F5Bb+lNUM&{IKt;Id(_l8!^3?T6|{k;My4V;RWTNe(oG=UFeC3r>O$jq4#GPH$m zdjp^lfHPzZkdV>n&LWkG$Bqq`N=;}jcv0(0Uv_|Bk>hwqr#6rtBvh>;Jl+wjfA=IP zVs|9l^$!toF#Yaxc0@n!!Jwrs8d^YJMMiQVrJvw6F`N6#*!e7MwrVqkjjO>;L^Si>q$kE)ij0(0*lm&;FEUrL2U<2J( zO^m|+i0T}VY?6yuzws((g#ilF_!m22pq-cH?t9IZ^-PW)It$<|EUuDQGL50W58WDR z75sl^{$~SdXF5Z>I%-HT?|@|6d^ypGT&|GxHYL{6EmY9YFvNF*so2BiFfdAne>1Qp0{tHazrOQ>Fc!OZQ`LB0Z6T0V}Eb?EOYnPv$B2VwBS%B;be zSu)5S(Cg9xXZ{z+o-BBi&~=^x0gKWaf2rR^SX@w93ra^p?6Z8q5{cD=Y27xi9$tga zA8Y#4oKjb?dy*->q=@h-mus2*e>!{1u&BPUZ*&L+q)R|bx?4g-22i?GN{|jg8fk$c z97>ds6p)k>=@JlT=uU~Dh7P4`7#M~*+yC>N^PbP|hq?B?X6==CuC?#qy}yQC5Fl_| z=S`^;YzqCaJ>y;mO5VIE^e{<>{d9(rR#;e&xx8Zdt69}mkv8J`x~kt$Lr6&#$OJG! zP#SvS!0=(+BUBXS3P!K)aK-jDZ5Q#!$pXN97R6x3izWZuNdUI}c4UQsfZz`37l5Qk zR9}0p+4lbs4euU6M=(uP8au`Mw@2cgy?1WEc{MgM1!?=AIH*ft4CzM87r}#~XupuM ziN7yW(roo1ueC2OvU~whBjzCMd_gcl;iSLQV^C^LpS$OjRx@yu@AKQE6=er&Yo&?L z`KG{>N)@h;x&l@s89wVnRIw5+o{KMj;*Y4cWa9n>N6l1@+Pm#uHd>XAbQZz)(lTsa zFHN1dzMqfHl1t7md+3G0qbb=(H`gEj{yg@B+rGMcrLJmNv=7)XxH@~Ik!?Ydj=3Rz zs9WO+aAhxE{`%K1%ZCj9hU8f}pY2OZF=etQNG9vbYUrJYQ37N6hyAZj#tOA$BKLWD zSu3KN*_{o3r4ee^FfD4$8#&}pbxOHK=*c#418)H%#|gg`n{aRSrGrwBc7*s%s<19__MToM|;c$yO@am3kl=%rkhvI zeJ!9fU@BbE+%(=E*Zd9R{^1>u@Th7dg$w6535?3{ASp~m*T>kLk?wDghJ?UhLb6iL zjDgu;;Ap3);+dG*2h9mS>)QBf-El)i0NA|X5(tiajy!%%_>^@0Mat6@lP|+AGAE}` zdm{b^Xa%tFkD7$|txjI2f=CHG1LJ^*Z;_rvND1Cg8GH$i+Fx_CJto1kwL5cgO$4XodX?Ap0k;&a$`oIL(B4 ztqX*Ge@?3s1E}qe=l{S>cdf|-NP+;qH_Q_D=mD@zPVT@VTuP&{OZ1~=+fQF|`8ZuR z<<&T9qZn4y07M(7Sp*OZHNL5j^o;!2p}4{$JlkN_JR?M%?3VC~VOH_TWOci9Sc z1&;x$hEq`9q_f~;0e2|U^Bs-J33yTFFEaFo8Kscg^I$$NqLwsrTG*^~lXLy(5nt`- zGGtQ-6!z$5&-k|;_+qgtb!`79D_3|;cB6rh^hzyhyG3L`XI-uN>jdMCJI}tWV4E}y z@3dnI**hA3417lH%N{BjENo>rNeSV3BOSdYgX%d=!Z-z4lBBmRsj^r-M6nF`#2?9D z(ggkXO;s6tRJHo);2^s(Sp)uM7?WMKWk77DQFisBuvxn1UuP^#76Es!n9WOzxRcZ9 zZoV?G)xEO4Q?$v)h=$kR69;X~<4A>TNiwC`3)UK*X_IV+ypUkpjWfF!YN~zkq!e(0 z1ZM(s&Gwgml-Ks(8=DXfJ!a)ADC*zq@MH-#Vay3Sm>pzZS_=3(z*n1dJ0&ieU0(={ zMuv95u)7APeYvTfankut(x+n5nY3ch4SrhdDR5?H&BZ3h&c5RV=NQj>AZ^|-WzPP5 z>y9th@rRJVI0LV;G{vR(@%n$UJ8IJ0tpuWH!Z;bVOY{uH%G;RjfY%Ib>=r4Ih(a*60!WDY28bS zF~c%Ob$2iBOJ7#pQu~w;f)fmUpzyw?^{=HVDd=JarO!hD5_Qev)qFe=%Ww6PfOl}x z>SL(ezKGuP{HyHthER!{hKAQYFvFr=8!9C+ zsRl&`2I4z8<7Z}0^*uH80pcMIp^N(rUY9$Rv1>_HV|^T(m@ z+R6WGeWk9}C%&Ky7I0at+%ES|rC^X}*C$w9pDHIrQj>|^N?Yd7IsuT1$8w#o zsf-opm?4)$j>yd;=NSY|sXRopvb!Ac!t?-PYZOpR@{#Bio0cBf{ZsyWf7h3wvMqmW)drHALS`39!)8Q5L$8`2~H(~bs=$tE2q}=62 zS~mpCtS`vcb1ST2OZgfEJ0y7<#Qs9xObEp9+VpcDSU0%)V)bw4UT1x=+dkut%axFCff~YIpP*y8R?Xh60LMnyYE6Uf(gZ{8(I^z8QqSkMO<8hSYt<6lw_N`o&v@PQJ+Q1B;P*WnTxF{R!Nb4!$|{C%Hr*ga7GHEzHQH>OU=7U3Mb&Z=b=3 zQ=}Ub;w~CUt3uZ`Hy59Ypq4S}Y3y;+VrTqgZCK8mjl*2=dg1>{Pn#CwfJa}oj~Tyh zvg(dTl_?j;RpUGR8tvEAzLl<{2tQz0 zYE#d|QsN)vc6>@bvN9qa`jn|e6aN6SFxl-vu*i2xhr8@9F|aN9v04VOk5?#9`2i$|fd{PU0vWd9U-;9t#kJ^25t((y`Te*y(VW_$ep zOJQ5mqE4IT-u=bd*(G8(^ZyK203E|kYwYnnQXyaAY|8)mcSva5fHK~1hR{#3ae8Pd zNHKJ%?TB9#-G2Pd){tgKw$&xU#W?y|^OdM!m0@0L#YN)?&(~~*bq&|0h6|+|?%6C& zbdYh^5=5eKS$5g5EfHCe;z5FI*|B;x!{jX2vSxdM=RFES>Qt)|DrcS&2lt7q; zk`~RVtaNNQ?fBv`o-2MB7u=eyp#5G#g=Tm3!ebx8x^;qs{3S6<`en+7yBTgYNRklp z2hVp6*M;04+)+ByxPGW)B4p%}H-LTli@m$))L=h$sl0l(zYUS!liP-KzVw5|2&s#% z^2;BE7LxjN&OvY7zG-$c@vR)-f(bxJq1aqp7#smIAIhwJH@5A!7{8r^X|R2&i*DYA zR0O;C?K6^mwAuJNd!**?zt#Xp;IjDjFGAbH0T*Q^I9lIjt>AZxoOhWiD}I!aZrsJJ zdR5<>1!?pY3>N>TEUqOk!R)#?=-yEI4Grih3(#Vy!!eJFVB8Iue@N(}gVMSlBR5Ju z4IFrOrDj|%)s>c-ePROY?-tIk*DRbcH9rVO1bFD>Rv~W%$LyP6+kbgIw2TKKh<~x* zjbhL30{pE(lybP-hJWS{v{Kn(GUGP~Bf9oYZfWVBZo#=mP@g{@l)tyvz0MV5~W%(`7C9PE5(JUw4R(dan4fZiZ=%gUOWlM(pM9+ z&ie-bc$}b#ja$St+F-V3XrYEo$1bMh_l(MRja2)mr?B?Bj+I#O^&qKZzm-C~u|~omzg_IeeHSErPVeg$6k?bI$rAk8x(q z0yeVGUz4!aBfF1#(;ONjGF*D3;~(28n-gDISKloOk07y4%Tu8$ri#w^#=oNEh2`ON z67R5Dx{ zuT4RR-Uqulg|WcVhs#$xQ?lca{_K@Ff}2jSJZ^4j1;7$p+^EkEAs4fc{FhFfxTyX3 zRJ$)t?Q$_YC#Kt<&BIvNl0`q`ktsEVe)rGcYmH%#g51%9^2E*FTH&r zF1+KOc{o$KXvf@PfNG^H}e4IZ#FGCvFsM#+NrD3lLz8ZsO^CKtw>hn(gl zUCz`XvM~dZX_d@)+77UwE3)uL&Q4}8Pc){%YrRQ$Z_9mpB(I z90>QtpXrLnhP?l&3{4H_E7mmtVg@n?y+SrIE1{X*ULj0uRsvZLj-I9-nG+huAV^^! zLNxJf-z32}J}~?#QWSw6oB?(*QieKT zHmwW&Q$?v4vi^#_=)#4BBI-F~ck){-_#8eRy5;e8_ggp6w~)#I0JB zDG2>Za(=nb1}qq*U_83UJR!XAEX8gj{T+h|U^;tzy#UniIOfKCxm|E1?{qAwy0$y* zLVK^PL!6hE%h2haXfg4S%TfMu|cGcDUXGghTIY7 zknplutJtnxPcJybiMg36K7SM)sj74f zFs&)hJ7+fd`Q&UZz|zhhmX2_RQz5^h974L~ zdIyJgL*3v#d42DF3dff7e4Rp1_P`FmLaBRyXxr@nCgA1fJqwF_f2p)DTdtQ$88XkV zjRAjXvH1Vyb#)~>g<-FZcK}<{d=+LttG5!ykSWvBBnPqG5FQ=0!dnl&UqGp7@F-L@ zHOTDI-LNk~mvx{c4`xd21dFAF_SHykR-bqVH1W)uI5UwkW_&Q^9oS3cpB^F)Y7MfeG2M)#H-3^ySN3ij-qrC1Op<$!)#zQZDMaaqu1Z+N zkZ?euj-?0gQi_`>2OaUUgfonec&!(b_FAEu>+|6C=<2ef+5AY&dw6sSJQ0!$(B8xPxt**>THOTFB`V8tW$hcEe8f8J`$jom+ZZ1x`xKc=SP+|6v&Urt7Q~1~;Qz4dVOGSm z>)gmd^_(gaJ*4neh`pCXftYge_M-WUL}%w_N3!+3)3K2ylpKtS>7^h0w=%cEgiAcc zTF|k=sKRFvF9=rPszaoz>=rrE&SC!dcjd<;xH+fh^jLC|dofJ>HWhdv=YV?@gRCfv zdVEw5ilke8(EZ&~yaz4(M1cZm!}IvV^Qe1afHk9&&Zc~wkkE>zk)*gTI(sG%8^CK3 zI{DDYGl{wyN~YB*A1gnKUNsuqJyRX)3!$T63yU-PwansS8sJt)$+Aaq4b{>2|y5< zS;Aw0sg5wSqAOSz1_U{W`av5;Dd-L4-3CoW+E&TJ1u_J#)ePKuKjsZwU^YU+{P2Pp zDCR|bU;dt^{8_$l^2>_)0YlZlZhI9kKrGvBn{@~$mX5^}Q`ZNm)dCt`N|M>Dh$2S0 z0z)y3)^HBg*RmfzS5 z1&_DymC!89hgDRgG*M@}tqP(cnd!j5>NXdS%a<+h35@L_TPf>hUzvD%g*=*lJ8%pN zQ`p;f^Pq~R5Us?AmorqxpGj+9(W-?t5dF>j@ykNrGrrUz1udu?6=xzZv$M7>DMuu3 z9u|x#?sNK(7iR*xm}o~$pE%|%#PX0~4ec?$3M52U2QTjr-;_VA->vW(T|i#e6Y&Ei z@=9fM;(LFaC{f}^_~=CIRS3IZYd4$fU2B?8HW$^Of`SpxQYbq$0?Z&p+H!H9dZ~%X zt=;=NMhxJ71fZ2)M6+#7p5q2#1qF|1X%ltqfCNZ^Rry!*qx+!W207Txy1^mC&12fy zZ{%q1@g$|YQQkL}8n?QAJ))$>Z(a~k>CZ>XM{TQouXnjZ%9n$PauTtPH<sU2_8uY z^Zu7E8TM<8_N#K5+e2A^l0Uv_AeGTcFn{;~dHbDLNNY+7*wqHbFg-zza)C%grwV!YRo&y8Z`I^4ERLjQiLId-WIDKN|A7Sv8dXrzF%or6HWzT zLP+=I&&a&@T{?bzHXS;hZ$+h1%1tmo6lwed zy{4&Q&Not%&($gDShvm8N9p&}kHRKy$`fVG&vg$q>E3ZU$Xqy7hiG=b=Dnm`|@0^*SSNv zxqR%07Q6*4o@!$Vc#1}nY0LC?M7kDk`(%|9AEwnn9@y__h_s(ze_PIetKIXrV=YHo z^GF^=e?&AmxJnou^Kg^>Gr)S1ar%?znvK8StqPV9uz0^Ct-d>SAY(8~N#5F94yjTf z{k*qM8^%WPP$&Q6v;EsXm_KRYnc7OmpW#NEr*-4`+ZwCOaJdo5w6nV2e&e=_SJ=bU zKdge6LV_%@AIKt3S7{`#(D*EL>QA6Dd67=#Ra64U5^aj6vkbX}oMdw7_KU#sF29nU zTaU+_+{U8Neu&ww=Yp8Q;=9(HOxitmq%CVne|Ai=sj|-gYmCiDw|CsJn2jV~OU^j9 z1~T1QvhYbYIDSa2U=)9YG<~?LyyUW+sZqB>H^ptyNcmZ^z>a4tW9a^~iu4kgaZ6x=)Bozo$H5K%yLqYPDnP=-skg5m%=L>R03H zOSejb3k%9oi2xjV(x}~Fhu0USFobevuUC)MpDXTH2y(CMKRZzm_{l^fj8%&cdvzw5 z>&;o@8<(^{8szNcRbh2g%6F`ooFKk#1X=ujW%f_=z0ZnAYvM@oK9llA`uo_(b`Rt^ zf>)F~Cl<|xOk4)KdCJ5cIO=QWi^*&6nkPeONuNPUIP8NNWtg5Y*hKP*NesTP#<=i$ z>Q3I!s;H6rJ;^3}2l%UMx#G0MR4T+w7W{BKvgB%FpiVxBR)v`3F5?3x0uCtEWb)rV z+TD}(=F8#WiMUXzcL9Q$-{GCz=d|{yjOk zU4YOh`B!unTneRnG0VTZAn4-%+jl(7P)So6->J!%tOZ0ST?pQrya*QjxRU;ZO!|HLQEgfobf`FvbhQ`|u@`2VEPN+=qH<0Ec*V!ShC^V*QD`egJn2E}XR6O^ zG=W3qD%nkKoX;u@bI07|w23^VXEPHB=vEB-AH7PFMLNCRSy}sgzbZKNjf?MLXGePu zrh2&xasM*;0^5%PTYRt6|ItPMaVrV6!sgzGA()=yo5{)=8#V|d86bJ==Xi)1#_$XFk+@~2P;Xa&5O?f`ujH|jjdW) z5I@^L%O2@g2~E5aC)Do!vb803YT*VCA(Wz@bSD_aL{&dj87`e^cT3T30evbkQ6uKC zp;jJ_l*XpH!Ks;~SLt0-;ySg7IgVE~UP7r+l=q@uyg{dFvjt364RuZ~+7cvPcCbN-bL@WBTX%{ZO9yoc zQD0acFamI@2eBjh@8ik=1DH*bNTp({gvVPGh?~E)XCdd*$_S-$nIZ)^jLw=SOLkr= z`XM6`$F1&;S0Ep>i6TP}L`z3HOLxKHK9oxGwV`9~%k+zp5y!2#*I;sf_X z!a%Fsc+*3vj&ZKA9YdkiP0j_rfjnT7ocwolkP;L;86=X8E#O*n)FyNTN`MH=yccDo zbD{(_gTlt1LSb_e^L)6Mo)~Uwx|NK8wVgYys_={3%KWsQX6= zFFu?vxG9j`qmBdm;`WDXRda>KV}SWpx6{LC3+DJ@^Faw5YPaBcst8eO7XEr{fnDog zy9Gtf?w6#V=Wlyz%%Q&nnfK_H=imG%?7~d1@G31UsW6rRMdolC@02 zoAvxxcidn{!9^=5(%wIBy#>)r$GgX>f%2wa8q^y1EUjL-xPLRct3q5eaJ)PH)u1)Y zps&){Kj)RJo?8=M%K4#C#a}(K{DWJ!GJGbUczWzMTch`TXl(9)IqVIoIvzK?iruYb z;^|ec`6?Q@Tr38k);bUTiPkZTWQ}>>l<6|k=Ut=9NzG{gR3rNhn-LU~!d0tFd*{Tn zmhE|Y;P(7_AwVVj#|6gTZWR)PD54q{HJH^KBmZJ;xF55e(}klS%#ieM`l~)BUQ1V1PmK-tQsN}OG{6)e# zl`(1h>Br^@4>cl>YQE9RM;g8?&?E-BVGBA_ZzLONQeUsBTOuI-qOWxeRbjco-PE2zxj15 zZ;0T$N4Wd(B2TaiInfF_0Zu_V)rc+lZT`vy5D|yqJ`CqhIC6d)V@VjPAHWC?`6{E{ z17Ym0`?om61Xrigvnlu0DU@YpbH5xq6O6tPpS!IvNvJAVc3+*ojZO&9gI7R3$qCtv zx(J)S?LusH+mDT16{A|x#oXqBm>k&un28n7o?ptAZ-2H#onS(U?oFeyH02$X389oT zQ8phMq0z)+?o5p$Ht;O8dzI(9ASSO#=uERmxjuEUMR(UI>oDgQeLSiSd2)3AzM7ea z$+TBl35+{gz;@-_sy1umUQ)ig=ZJMVEo6Jw+Cvq7V3PhEp@ z8}}L57LX-w|H-yQ7wJ$t$yZ*6mN-h_u?ZX3TR#K0Gf5dP9vqt2&2+@pQ3D(L*dfFn z@s(K5QJ;5t=k$nkC6g#Iz|7dwF}dJ1s@^9XKJrL<&LvDg3z-=B(RY%8;ET-z^*w!x zFlIO1QRaP#R~<>ln6wI~=5mAWEHVU$WQKfZyyJ=QdMDR0YyI9UPC4tRNCFK6z?cyP zY8#Kkpup%@|5@@Lf5OD$xHxCnPOu}Ilh!SlI|5%vL#KPUelz4BAOG)-{%5IaR~fhT zaKHr+U|}K61XSSj3S&2h@Rv|PPZM)=r?rYu3(m15ln_fe^@_Tb@s%&XQ0F-FLEE|SUXlQ-d zF!}wUpMXRA>amYr`m`4nuMu6uHl*cSdz0@C5L?=JgP3-$dcV@hcdih<+N|ok*tCEe z#c7qdoGuo$^Cno0Z9i1vjYcF(^bd~=V;Bi;yK3}Ck;@Eh4MiCUj6e`HI$BNAqs zvWYPA?aJCr%mTk`w_Gk60Gg1pc+m$Li>M^q9H=Ru{%Row|5On?1|zmYVsiTe$>RcX z1edv?zahvAST>IN)!)U?09_N}g3g+}I9+?nmz`nkmIk?-(`x*$TPtq-Ms|pl*)rB# z=2Nj_f0e0z4Pd5k>Vg?RG>OqyJtl2o34CY&Pl2L@osQdTQqvuLM?GBsxQrF!G&@sx?0_eDX@&$dOb!$Mi!khFCh1sCHXC7~LPQF9qXvHmF%qm&tJJkry zLM&%lzv!rtR+}%r{k?>kWPsg2tZSjx+jrOdDk@vD!NI=@t`VUO7nV?6K8vVxCrZn@ z?s93Nx!<^{eE)fjaD11Rwws9{yYko*sCYS1K9iAnR{|&TYq=BxzX|B2LM(o4@W zFiq>A%gnpqU(-)B=SU4{-YV9fv&4*ve76Ue`3$yaIed2Ej{6X12pRD+QDP?$nEhuT z%RiLHWEm=Lu=Uq5X^pnM@o%j-3}J2-w+|)}fxkwTncFL`KDIEXjQzp>bn6N7OzjjE zwwcdGxh&jvzivc(FUzttp!j!@D;s`o!kCCm$wt0Q&U-*2QixU3C^?!(hrO+%2m>1vyxwc0VK)@j0b&A=uJQB%g{8XE|1w)FzBXSAEiXmUnSEHg74GPg|u>rDHCI zkw1LOB86ET1~pAHbL?V5GTeS+#&)l>+U|dzcev|QL$Z%Y)TVvxQ?wdYjq1T~{(g=ZQt? z+-vUcRthRv*k^HX$ Date: Sat, 30 Aug 2014 07:57:49 +0100 Subject: [PATCH 08/69] Auto Shutdown if damaged - Particle Accelerator now shuts down if any of it's parts are missing --- code/modules/client/preferences.dm | 1 + code/modules/food/customizables.dm | 2 +- .../particle_accelerator/particle_accelerator.dm | 14 +++++++++----- .../particle_accelerator/particle_control.dm | 9 ++++++++- html/changelog.html | 7 +++++++ 5 files changed, 26 insertions(+), 7 deletions(-) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 1e3cc796..a5375661 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -1416,6 +1416,7 @@ datum/preferences //Debugging report to track down a bug, which randomly assigned the plural gender to people. if(character.gender in list(PLURAL, NEUTER)) if(isliving(src)) //Ghosts get neuter by default + msg_scopes("[character] ([character.ckey]) has spawned with their gender as plural or neuter.") message_admins("[character] ([character.ckey]) has spawned with their gender as plural or neuter. Please notify coders.") character.gender = MALE diff --git a/code/modules/food/customizables.dm b/code/modules/food/customizables.dm index d59f9b00..db02f4ef 100644 --- a/code/modules/food/customizables.dm +++ b/code/modules/food/customizables.dm @@ -33,7 +33,7 @@ /obj/item/trash/bowl/attackby(obj/item/W as obj, mob/user as mob) - if(istype(W,/obj/item/)) + if(istype(W,/obj/item/weapon/reagent_containers/food)) var/obj/item/weapon/reagent_containers/food/snacks/customizable/soup/S = new(get_turf(user)) S.attackby(W,user) del(src) diff --git a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm index 55ebd91a..9df76a4f 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm @@ -71,6 +71,7 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin var/strength = null var/desc_holder = null + /obj/structure/particle_accelerator/end_cap name = "Alpha Particle Generation Array" desc_holder = "This is where Alpha particles are generated from \[REDACTED\]" @@ -137,29 +138,32 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin /obj/structure/particle_accelerator/ex_act(severity) switch(severity) if(1.0) - del(src) + Del(src) return if(2.0) if (prob(50)) - del(src) + Del(src) return if(3.0) if (prob(25)) - del(src) + Del(src) return else return +/obj/structure/particle_accelerator/Del() + master.connected_parts.Remove(src) + ..() /obj/structure/particle_accelerator/blob_act() if(prob(50)) - del(src) + Del() return /obj/structure/particle_accelerator/meteorhit() if(prob(50)) - del(src) + Del() return /obj/structure/particle_accelerator/update_icon() diff --git a/code/modules/power/singularity/particle_accelerator/particle_control.dm b/code/modules/power/singularity/particle_accelerator/particle_control.dm index ae76fc92..85cd68cd 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_control.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_control.dm @@ -45,6 +45,12 @@ return +/obj/machinery/particle_accelerator/control_box/Del() + if(active) + toggle_power() + process() + ..() + /obj/machinery/particle_accelerator/control_box/update_icon() if(active) icon_state = "[reference]p1" @@ -181,6 +187,7 @@ if(PA.connect_master(src)) if(PA.report_ready(src)) src.connected_parts.Add(PA) + PA.master = src return 1 return 0 @@ -214,7 +221,7 @@ dat += "Particle Accelerator Control Panel
" dat += "
Close

" dat += "Status:
" - if(!assembled) + if(!assembled || connected_parts.len < 6) dat += "Unable to detect all parts!
" dat += "Run Scan

" else diff --git a/html/changelog.html b/html/changelog.html index 0ec432d7..5f663eb9 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -60,15 +60,22 @@ should be listed in the changelog upon commit though. Thanks. -->

30 August 2014

SoundScopes updated:

    +
  • Lazer Pointers
  • +
  • Alcohol and thermite now flammable
  • +
  • Flash's available in delicious incendiary flavor
  • AI's can contact CentComm once every half an hour
  • Cancel button on kitchen equipment
  • Messages when frying people
  • +
  • Splashing people with welding fuel to make them easy to ignite
  • +
  • Shield Generator Circuit boards costs changed
  • You can no longer turn everything into candy
  • You can no longer put everything in the oven
  • You can no longer put everything in the grill
  • HTML Log tags
  • Gravity Generator Area fix
  • +
  • Particle Accelerator now shuts down if any of it's parts are missing
  • Mob buckled to chairs no longer float until unbuckled
  • +
  • Robots on fire sprites
From 5dc791f58e055f43196778a3882265e01dffc20a Mon Sep 17 00:00:00 2001 From: SoundScopes Date: Sat, 30 Aug 2014 08:21:55 +0100 Subject: [PATCH 09/69] Food Fix & Runtime Fix Missing null checks and food stuff --- code/modules/food/customizables.dm | 38 +++++++++++-------- .../particle_accelerator.dm | 3 +- 2 files changed, 25 insertions(+), 16 deletions(-) diff --git a/code/modules/food/customizables.dm b/code/modules/food/customizables.dm index db02f4ef..a7e21e4d 100644 --- a/code/modules/food/customizables.dm +++ b/code/modules/food/customizables.dm @@ -1,29 +1,34 @@ /obj/item/weapon/reagent_containers/food/snacks/breadslice/attackby(obj/item/W as obj, mob/user as mob) - var/obj/item/weapon/reagent_containers/food/snacks/customizable/sandwich/S = new(get_turf(user)) - S.attackby(W,user) - del(src) + if(istype(W,/obj/item/weapon/reagent_containers/food)) + var/obj/item/weapon/reagent_containers/food/snacks/customizable/sandwich/S = new(get_turf(user)) + S.attackby(W,user) + del(src) /obj/item/weapon/reagent_containers/food/snacks/bun/attackby(obj/item/W as obj, mob/user as mob) - var/obj/item/weapon/reagent_containers/food/snacks/customizable/burger/S = new(get_turf(user)) - S.attackby(W,user) - del(src) + if(istype(W,/obj/item/weapon/reagent_containers/food)) + var/obj/item/weapon/reagent_containers/food/snacks/customizable/burger/S = new(get_turf(user)) + S.attackby(W,user) + del(src) /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough/attackby(obj/item/W as obj, mob/user as mob) - var/obj/item/weapon/reagent_containers/food/snacks/customizable/pizza/S = new(get_turf(user)) - S.attackby(W,user) - del(src) + if(istype(W,/obj/item/weapon/reagent_containers/food)) + var/obj/item/weapon/reagent_containers/food/snacks/customizable/pizza/S = new(get_turf(user)) + S.attackby(W,user) + del(src) /obj/item/weapon/reagent_containers/food/snacks/boiledspagetti/attackby(obj/item/W as obj, mob/user as mob) - var/obj/item/weapon/reagent_containers/food/snacks/customizable/pasta/S = new(get_turf(user)) - S.attackby(W,user) - del(src) + if(istype(W,/obj/item/weapon/reagent_containers/food)) + var/obj/item/weapon/reagent_containers/food/snacks/customizable/pasta/S = new(get_turf(user)) + S.attackby(W,user) + del(src) /obj/item/trash/plate/attackby(obj/item/W as obj, mob/user as mob) - var/obj/item/weapon/reagent_containers/food/snacks/customizable/fullycustom/S = new(get_turf(user)) - S.attackby(W,user) - del(src) + if(istype(W,/obj/item/weapon/reagent_containers/food)) + var/obj/item/weapon/reagent_containers/food/snacks/customizable/fullycustom/S = new(get_turf(user)) + S.attackby(W,user) + del(src) /obj/item/trash/bowl name = "bowl" @@ -318,6 +323,9 @@ /* if(istype(I, /obj/item/flag/nation)) user << "That's not going to fit!" return*/ + if(!istype(I,/obj/item/weapon/reagent_containers/food)) + user << "You think about it for a few seconds, then you realize it wouldn't make sense." + return user << "You add [I] to [src]." if(istype(I, /obj/item/weapon/reagent_containers/)) var/obj/item/weapon/reagent_containers/F = I diff --git a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm index 9df76a4f..783cdcfc 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm @@ -152,7 +152,8 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin return /obj/structure/particle_accelerator/Del() - master.connected_parts.Remove(src) + if(master && master.connected_parts) + master.connected_parts.Remove(src) ..() /obj/structure/particle_accelerator/blob_act() From eb0d2559c5040bba033c49cb157e7b8b2720e51d Mon Sep 17 00:00:00 2001 From: SoundScopes Date: Sun, 31 Aug 2014 05:05:44 +0100 Subject: [PATCH 10/69] Grilling people - grill people --- code/modules/food/food_grill.dm | 87 +++++++++++++++++++++++++++++++++ html/changelog.html | 1 + 2 files changed, 88 insertions(+) diff --git a/code/modules/food/food_grill.dm b/code/modules/food/food_grill.dm index 54290c80..3964b635 100644 --- a/code/modules/food/food_grill.dm +++ b/code/modules/food/food_grill.dm @@ -27,3 +27,90 @@ obj/machinery/cooker/foodgrill/putIn(obj/item/In, mob/chef) sleep(50) overlays = 0 + +//Lets grill people, because why not. +/obj/machinery/cooker/foodgrill/proc/fry_mob_by_limb(var/mob/living/M, var/limb) + switch(limb) + if("head") + M.apply_damage(40, BURN, limb) + M << "\red Your thoughts are overwritten by the pain from the searing hot metal pressed against your face." + M.say("*scream") + return "face" + if("l_leg") + M.apply_damage(20, BURN, limb) + M.apply_damage(30, BURN, "l_foot") + M << "\red Your thoughts are overwritten by the pain from the searing hot metal pressed against your left leg and foot." + M.say("*scream") + return "left leg" + if("l_foot") + M.apply_damage(20, BURN, limb) + M << "\red Your thoughts are overwritten by the pain from the searing hot metal pressed against your left foot." + M.say("*scream") + return "left foot" + if("r_leg") + M.apply_damage(20, BURN, limb) + M.apply_damage(30, BURN, "r_foot") + M << "\red Your thoughts are overwritten by the pain from the searing hot metal pressed against your right leg and foot." + M.say("*scream") + return "right leg" + if("r_foot") + M.apply_damage(20, BURN, limb) + M << "\red Your thoughts are overwritten by the pain from the searing hot metal pressed against your right foot." + M.say("*scream") + return "right foot" + if("l_arm") + M.apply_damage(20, BURN, limb) + M.apply_damage(30, BURN, "l_hand") + M << "\red Your thoughts are overwritten by the pain from the searing hot metal pressed against your left arm and hand." + M.say("*scream") + return "left arm" + if("l_hand") + M.apply_damage(20, BURN, limb) + M << "\red Your thoughts are overwritten by the pain from the searing hot metal pressed against your left hand." + M.say("*scream") + return "left hand" + if("r_arm") + M.apply_damage(20, BURN, limb) + M.apply_damage(30, BURN, "r_hand") + M << "\red Your thoughts are overwritten by the pain from the searing hot metal pressed against your right arm and hand." + M.say("*scream") + return "right arm" + if("r_hand") + M.apply_damage(20, BURN, limb) + M << "\red Your thoughts are overwritten by the pain from the searing hot metal pressed against your right hand." + M.say("*scream") + return "right hand" + return null + +/obj/machinery/cooker/foodgrill/attackby(obj/item/I, mob/user) + if(on) + var/obj/item/weapon/grab/G = I + if(istype(G)) // handle grabbed mob + if(ismob(G.affecting)) + var/mob/living/GM = G.affecting + user.visible_message("[user] starts pushing [GM.name] into the grill.", "You try to force [GM.name] towards the grill.", "You hear a struggle.") + + if(do_after(usr, 20)) + var/body_part = fry_mob_by_limb(GM, user.zone_sel.selecting) + if(!body_part) //If you fry a valid part this will be set + if(GM.sleeping||GM.resting) + user.visible_message("[GM.name] falls limp.", "[GM.name] is to much of a dead weight to be place in the grill", "You hear a thump.") + else + GM.visible_message("[GM.name] breaks free.", "You broke free from [user]'s grip", "You stop hearing a struggle.") + return + + user.visible_message("[GM.name]'s [body_part] has been placed in the [src] by [user]", "You place [GM.name]'s [body_part] in the grill", "You hear a sizzling.") + del(G) + usr.attack_log += text("\[[time_stamp()]\] Has placed [GM.name] ([GM.ckey]) in in the grill.") + GM.attack_log += text("\[[time_stamp()]\] Has been fried by [usr.name] ([usr.ckey])") + msg_admin_attack("[usr] ([usr.ckey]) placed [GM] ([GM.ckey])'s [body_part] in a grill. (JMP)") + else + GM.visible_message("[GM.name] breaks free.", "You broke free from [user]'s grip", "You stop hearing a struggle.") + return + + else + user << "[src] is still active!" + return + + else + ..() \ No newline at end of file diff --git a/html/changelog.html b/html/changelog.html index 5f663eb9..78449662 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -64,6 +64,7 @@ should be listed in the changelog upon commit though. Thanks. -->
  • Alcohol and thermite now flammable
  • Flash's available in delicious incendiary flavor
  • AI's can contact CentComm once every half an hour
  • +
  • Grilling people
  • Cancel button on kitchen equipment
  • Messages when frying people
  • Splashing people with welding fuel to make them easy to ignite
  • From e026c65a6f38628ea5c69411c229a01f43b5ca1d Mon Sep 17 00:00:00 2001 From: Duck- Date: Sun, 31 Aug 2014 00:20:25 -0400 Subject: [PATCH 11/69] Protolasers (WIP/unobtainable), beginnings of accuracy rework. My first project! Done by myself! Yesss. okay, sounds helped. but it was mostly me. --- aurora.dme | 1 + code/modules/mob/living/carbon/human/life.dm | 4 + .../modules/mob/living/silicon/robot/robot.dm | 2 +- code/modules/mob/mob_movement.dm | 5 + code/modules/projectiles/gun.dm | 3 + code/modules/projectiles/guns/energy/laser.dm | 2 +- .../projectiles/guns/energy/modular.dm | 374 ++++++++++++++++++ code/modules/projectiles/projectile.dm | 2 +- code/modules/projectiles/projectile/beams.dm | 40 +- .../modules/projectiles/projectile/bullets.dm | 5 +- code/setup.dm | 6 +- data/investigate/gravity.html | 4 +- icons/obj/projectiles.dmi | Bin 31208 -> 32559 bytes 13 files changed, 438 insertions(+), 10 deletions(-) create mode 100644 code/modules/projectiles/guns/energy/modular.dm diff --git a/aurora.dme b/aurora.dme index 072ce7b4..558067c9 100644 --- a/aurora.dme +++ b/aurora.dme @@ -1231,6 +1231,7 @@ #include "code\modules\projectiles\guns\energy\erifles.dm" #include "code\modules\projectiles\guns\energy\laser.dm" #include "code\modules\projectiles\guns\energy\lawgiver.dm" +#include "code\modules\projectiles\guns\energy\modular.dm" #include "code\modules\projectiles\guns\energy\nuclear.dm" #include "code\modules\projectiles\guns\energy\pulse.dm" #include "code\modules\projectiles\guns\energy\special.dm" diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index c1146fe5..e630823d 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -1321,6 +1321,10 @@ var/obj/item/weapon/gun/energy/rifle/sniperrifle/s = locate() in src if(s.zoom) s.zoom() + if(locate(/obj/item/weapon/gun/energy/laser/modular, contents)) + var/obj/item/weapon/gun/energy/laser/modular/s = locate() in src + if(s.zoom) + s.zoom() else sight &= ~(SEE_TURFS|SEE_MOBS|SEE_OBJS) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index cba6b0f6..407ef126 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -1019,7 +1019,7 @@ /* /mob/living/silicon/robot/proc/updatefire() return -* +*/ //Call when target overlay should be added/removed /mob/living/silicon/robot/update_targeted() if(!targeted_by && target_locked) diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index f005c06e..95b412f7 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -192,6 +192,11 @@ var/obj/item/weapon/gun/energy/rifle/sniperrifle/s = locate() in mob if(s.zoom) s.zoom() + if(locate(/obj/item/weapon/gun/energy/laser/modular, mob.contents)) // If mob moves while zoomed in with modular rifle, unzoom them. + var/obj/item/weapon/gun/energy/laser/modular/s = locate() in mob + if(s.zoom) + s.zoom() + if(Process_Grab()) return diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 5fa82687..ea46b882 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -44,6 +44,9 @@ var/force_unwielded = 0 //Force modification, because striking someone with a rifle held in two hands -hurts- var/force_wielded = 0 + var/accuracy = -30 //goes into projectile.dm to provide individual offsets for each gun. negative to increase base accuracy + var/rangedrop = 5 //how much accuracy the average gun loses for every tile + proc/can_wield() //Override in order to make a weapon two handed, remember to add toggle_wield(mob/user as mob) in the weapon somewhere return 0 //Override /Fire(..) to force the weapon to be two handed diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm index 6d1a5deb..2535afc7 100644 --- a/code/modules/projectiles/guns/energy/laser.dm +++ b/code/modules/projectiles/guns/energy/laser.dm @@ -21,7 +21,7 @@ isHandgun() return 1 -obj/item/weapon/gun/energy/laser/retro +/obj/item/weapon/gun/energy/laser/retro name ="retro laser" icon_state = "retro" desc = "An older model of the basic lasergun, no longer used by Nanotrasen's security or military forces. Nevertheless, it is still quite deadly and easy to maintain, making it a favorite amongst pirates and other outlaws." diff --git a/code/modules/projectiles/guns/energy/modular.dm b/code/modules/projectiles/guns/energy/modular.dm new file mode 100644 index 00000000..4912e167 --- /dev/null +++ b/code/modules/projectiles/guns/energy/modular.dm @@ -0,0 +1,374 @@ +/obj/item/weapon/gun/energy/laser/modular/ + name = "basic protolaser" + desc = "A basic, modular laser rifle." + icon_state = "laser" + item_state = "laser" + fire_sound = 'sound/weapons/Laser.ogg' + slot_flags = SLOT_BACK + w_class = 4 + m_amt = 2000 + origin_tech = "combat=3;magnets=2" + projectile_type = "/obj/item/projectile/beam/reallyweak" + fire_delay = 16 + cell_type = "/obj/item/weapon/cell" + + var/canzoom = 0 + var/zoom = 0 + var/open = 0 + + var/upgradepointtotal = 16 //KNOWN BUG: Crashes if you try to VV it with a lot of stuff inside. By a lot, I mean 'everything.' At least in all my tests. + var/upgradepoints = 0 + + //Changeable part mods// + + var/obj/item/weapon/stock_parts/micro_laser/lasertype + var/obj/item/weapon/stock_parts/manipulator/delaymod + var/obj/item/weapon/stock_parts/scanning_module/targetmod + var/obj/item/weapon/stock_parts/console_screen/screen + var/obj/item/weapon/stock_parts/capacitor/powermod +// var/obj/item/weapon/stock_parts/matter_bin/heatsink //i have no idea what this is for yet so. + + var/hasscreen = 0 // for scoping. + + +/obj/item/weapon/gun/energy/laser/modular/pistol // small modular laser pistol. + name = "basic protopistol" + desc = "A basic, modular laser pistol." + + w_class = 2 + upgradepointtotal = 10 + +/obj/item/weapon/gun/energy/laser/modular/pistol/advanced //better version of the pistol + name = "advanced protopistol" + desc = "A protopistol with an improved frame, capable of holding more upgrades." + + w_class = 2 + upgradepointtotal = 16 + +/obj/item/weapon/gun/energy/laser/modular/advanced //better version of the rifle. + name = "advanced protolaser" + desc = "A protolaser with an improved frame, capable of holding more upgrades." + + upgradepointtotal = 22 + +/obj/item/weapon/gun/energy/laser/modular/advanced/bluespace //for admins. maybe r&d with cell nerf if feeling generous + name = "bluespace protolaser" + desc = "A highly-advanced laser, capable of holding all your upgrades. Powered by bluespace." + + upgradepointtotal = 35 //enough for everything + cell_type = "/obj/item/weapon/cell/infinite" + +/obj/item/weapon/gun/energy/laser/modular/pistol/bluespace //for admins + name = "bluespace protopistol" + desc = "A highly-advanced pistol, capable of holding all your upgrades. Powered by bluespace." + + w_class = 2 + upgradepointtotal = 35 //enough for all of the things + cell_type = "/obj/item/weapon/cell/infinite" + +/obj/item/weapon/gun/energy/laser/modular/attackby(obj/item/W, mob/user) //the modding stuffs + + if (istype(W, /obj/item/weapon/screwdriver)) + if(open == 1) + user << "You secure the parts and close the [src]." + open = 0 + checkparts() //applies the upgrades. + else if(open == 0) + user << "You open the gun and remove the parts from [src]." + open = 1 + upgradepoints = 0 //you open the gun and everything falls out. reset this stuff here. + hasscreen = 0 + canzoom = 0 + /* + Have it reset all the gun's stats here. Do it after the gun has stats. Gun does not have stats yet + */ + if(lasertype) //if lasertype exists ie is not null + lasertype.loc = get_turf(src.loc) + lasertype = null // drop to floor and set to null + if(delaymod) + delaymod.loc = get_turf(src.loc) + delaymod = null + if(targetmod) + targetmod.loc = get_turf(src.loc) + targetmod = null + if(powermod) + powermod.loc = get_turf(src.loc) + powermod = null + if(screen) + screen.loc = get_turf(src.loc) + screen = null +/* if(heatsink) + heatsink.loc = get_turf(src.loc) + heatsink = null */ +/* if(cell_type) + cell_type.loc = get_turf(src.loc) + cell_type = null +*/ + checkparts() //resets all values since everything popped out. + + if (open == 1) + if (istype(W, /obj/item/weapon/stock_parts/micro_laser)) + if (!lasertype) + lasertype = W + if(lasertype.rating == 1) + if(assignpoints(3, user)) + user.drop_item() + W.loc = src + user << "You install a [lasertype.name] in [src]." + else + lasertype = null + return + else if(lasertype.rating == 2) + if(assignpoints(5, user)) + user.drop_item() + W.loc = src + user << "You install a [lasertype.name] in [src]." + else + lasertype = null + return + else if(lasertype.rating == 3) + if(assignpoints(8, user)) + user.drop_item() + W.loc = src + user << "You install a [lasertype.name] in [src]." + else + lasertype = null + return + + else if (lasertype) + user << "There's already a laser inside!" + + else if (istype(W, /obj/item/weapon/stock_parts/manipulator)) + if (!delaymod) + delaymod = W + user.drop_item() + W.loc = src + user << "You install a [delaymod.name] in [src]." + if(delaymod.rating == 1) + if(assignpoints(2, user)) + user.drop_item() + W.loc = src + user << "You install a [delaymod.name] in [src]." + else + delaymod = null + return + else if(delaymod.rating == 2) + if(assignpoints(6, user)) + user.drop_item() + W.loc = src + user << "You install a [delaymod.name] in [src]." + else + delaymod = null + return + else if(delaymod.rating == 3) + if(assignpoints(12, user)) + user.drop_item() + W.loc = src + user << "You install a [delaymod.name] in [src]." + else + delaymod = null + return + + else if (delaymod) + user << "There's already a manipulator inside!" + + else if (istype(W, /obj/item/weapon/stock_parts/scanning_module)) + if (!targetmod) + targetmod = W + if(targetmod.rating == 1) + if(assignpoints(2, user)) + user.drop_item() + W.loc = src + user << "You install a [targetmod.name] in [src]." + else + targetmod = null + return + else if(targetmod.rating == 2) + if(assignpoints(4, user)) + user.drop_item() + W.loc = src + user << "You install a [targetmod.name] in [src]." + else + targetmod = null + return + + else if(targetmod.rating == 3) + if(assignpoints(6, user)) + user.drop_item() + W.loc = src + user << "You install a [targetmod.name] in [src]." + else + targetmod = null + return + + else if (targetmod) + user << "There's already a scanning module inside!" + + else if (istype(W, /obj/item/weapon/stock_parts/console_screen)) + if (!screen) + screen = W + if(assignpoints(3, user)) + user.drop_item() + W.loc = src + hasscreen = 1 + user << "You install a screen in [src]." + else + screen = null + return + + + else if (screen) + user << "There's already a screen inside!" + else if (istype(W, /obj/item/weapon/stock_parts/capacitor)) + if (!powermod) + powermod = W + if(powermod.rating == 1) + if(assignpoints(1, user)) + user.drop_item() + W.loc = src + user << "You install a [powermod.name] in [src]." + else + powermod = null + return + + else if(powermod.rating == 2) + if(assignpoints(3, user)) + user.drop_item() + W.loc = src + user << "You install a [powermod.name] in [src]." + else + powermod = null + return + + else if(powermod.rating == 3) + if(assignpoints(6, user)) + user.drop_item() + W.loc = src + user << "You install a [powermod.name] in [src]." + else + powermod = null + return + + + else if (powermod) + user << "There's already a capacitor inside!" + +/* else if (istype(W, /obj/item/weapon/stock_parts/matter_bin)) + if (!heatsink) + user.drop_item() + W.loc = src + heatsink = W + user << "You install a [heatsink.name] in [src]." + if(heatsink.rating == 1) + upgradepoints += 2 + else if(heatsink.rating == 2) + upgradepoints += 5 + else if(heatsink.rating == 3) + upgradepoints += 10 + + else if (heatsink) + user << "There's already a heatsink inside!" +*/ +/obj/item/weapon/gun/energy/laser/modular/proc/checkparts() //updates parts and values + + if(!lasertype) + projectile_type = "/obj/item/projectile/beam/reallyweak" + charge_cost = 150 + else if(lasertype.rating == 1) + projectile_type = "/obj/item/projectile/beam/green" // preferably a green laser. expecting standard 40 damage. + charge_cost = 200 + else if(lasertype.rating == 2) + projectile_type = "/obj/item/projectile/beam/blue" //powerful. eight shots with highest-end power equipment. + charge_cost = 500 + else if(lasertype.rating == 3) + projectile_type = "/obj/item/projectile/beam/violet" //extremely high-powered. you get four shots -with- top-tier powermods. less without. + charge_cost = 1000 + + if(!delaymod) + fire_delay = 16 + else if(delaymod.rating == 1) + fire_delay = 8 + else if(delaymod.rating == 2) + fire_delay = 4 + else if(delaymod.rating == 3) + fire_delay = 2 + + if(!targetmod) // TBD after projectile accuracy. extreme placeholder values. +// miss_modifier = 0 + canzoom = 0 + else if(targetmod.rating == 1) +// miss_modifier = -30 + canzoom = 0 + else if(targetmod.rating == 2) +// miss_modifier = -60 + canzoom = 1 //advanced and up scanning modules let you zoom in. + else if(targetmod.rating == 3) +// miss_modifier = -90 + canzoom = 1 + if(!powermod) + charge_cost = 1.5*charge_cost + else if(powermod.rating == 1) + charge_cost = charge_cost + else if(powermod.rating == 2) + charge_cost = charge_cost/2 + else if(powermod.rating == 3) + charge_cost = charge_cost/4 + +/* if(!heatsink) + + else if(heatsink.rating == 1) + + else if(heatsink.rating == 2) + + else if(heatsink.rating == 3)*/ + +/obj/item/weapon/gun/energy/laser/modular/proc/assignpoints(var/newpoints, var/mob/user as mob) + if((upgradepointtotal) >= (upgradepoints + newpoints)) + upgradepoints += newpoints + user << "You have used [upgradepoints]/[upgradepointtotal] upgrade points. This upgrade costs [newpoints] points." + return 1 + else + user << "The frame cannot handle this many upgrades!" + user << "You have used [upgradepoints]/[upgradepointtotal] upgrade points. This upgrade costs [newpoints] points." + return 0 + +/obj/item/weapon/gun/energy/laser/modular/Fire(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, params, reflex = 0) + if(open == 1) + user << "Secure the gun with a screwdriver first!" + return + ..() + +/obj/item/weapon/gun/energy/laser/modular/dropped(mob/user) + user.client.view = world.view + +/obj/item/weapon/gun/energy/laser/modular/verb/zoom() + set category = "Object" + set name = "Use Scan-Screen" + set popup_menu = 0 + + if(usr.stat || !(istype(usr,/mob/living/carbon/human))) + usr << "You are unable to focus on the screen." + return + if(!zoom && global_hud.darkMask[1] in usr.client.screen) + usr << "Your welding equipment makes it hard to see the screen." + return + if(!zoom && usr.get_active_hand() != src) + usr << "You are too distracted to watch the screen, perhaps if it was in your active hand this might work better" + return + if((hasscreen == 0) || (canzoom == 0)) + usr << "This gun lacks the parts for components for zooming." + return + + if(usr.client.view == world.view) + if(!usr.hud_used.hud_shown) + usr.button_pressed_F12(1) // If the user has already limited their HUD this avoids them having a HUD when they zoom in + usr.button_pressed_F12(1) + usr.client.view = 12 + zoom = 1 + else + usr.client.view = world.view + if(!usr.hud_used.hud_shown) + usr.button_pressed_F12(1) + zoom = 0 + usr << "Zoom mode [zoom?"en":"dis"]abled." + return \ No newline at end of file diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 8e19a9d1..7aee9719 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -93,7 +93,7 @@ var/obj/item/weapon/gun/daddy = shot_from //Kinda balanced by fact you need like 2 seconds to aim if (daddy.target && original in daddy.target) //As opposed to no-delay pew pew miss_modifier += -30 - def_zone = get_zone_with_miss_chance(def_zone, M, miss_modifier + 5*distance) + def_zone = get_zone_with_miss_chance(def_zone, M, miss_modifier + 10*distance) // add +daddy.missmod vars to gun and this. snowflake accuracy if(!def_zone) visible_message("\blue \The [src] misses [M] narrowly!") diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index 23abaaef..236517f3 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -188,4 +188,42 @@ var/list/beam_master = list() damage = 30 damage_type = BURN flag = "laser" - eyeblur = 4 \ No newline at end of file + eyeblur = 4 + +//modular laser projectiles + +/obj/item/projectile/beam/reallyweak + name = "unfocused laser" + icon_state = "laser" + damage = 20 + +/obj/item/projectile/beam/green + name = "green laser" + icon_state = "lasergreen" + damage = 40 + agony = 25 //these extra values and below are all timed so they knock you out only on the killing/critting blow. more for coolness than effect. + +/obj/item/projectile/beam/blue + name = "blue laser" + icon_state = "laserblue" + damage = 60 + irradiate = 40 + agony = 40 + + +/obj/item/projectile/beam/violet + name = "violet laser" + icon_state = "laserviolet" + damage = 80 + irradiate = 50 + agony = 50 + +/obj/item/projectile/beam/violet/on_hit(var/atom/target, var/blocked = 0) + if(istype(target, /mob/living/carbon)) + var/mob/living/carbon/M = target + M.adjust_fire_stacks(1) + M.IgniteMob() + else if(istype(target, /mob/living/silicon/robot)) + var/mob/living/silicon/robot/M = target + M.adjust_fire_stacks(1) + M.IgniteMob() \ No newline at end of file diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index 933a5021..2b21cc6b 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -43,7 +43,10 @@ var/mob/living/carbon/M = target M.adjust_fire_stacks(1) M.IgniteMob() - + else if(istype(target, /mob/living/silicon/robot)) + var/mob/living/silicon/robot/M = target + M.adjust_fire_stacks(1) + M.IgniteMob() /obj/item/projectile/bullet/incendiary/shell name = "incendiary shell" damage_type = BURN diff --git a/code/setup.dm b/code/setup.dm index c0259f40..ee89e314 100644 --- a/code/setup.dm +++ b/code/setup.dm @@ -62,9 +62,9 @@ #define PRESSURE_DAMAGE_COEFFICIENT 4 //The amount of pressure damage someone takes is equal to (pressure / HAZARD_HIGH_PRESSURE)*PRESSURE_DAMAGE_COEFFICIENT, with the maximum of MAX_PRESSURE_DAMAGE #define MAX_HIGH_PRESSURE_DAMAGE 4 //This used to be 20... I got this much random rage for some retarded decision by polymorph?! Polymorph now lies in a pool of blood with a katana jammed in his spleen. ~Errorage --PS: The katana did less than 20 damage to him :( -#define LOW_PRESSURE_DAMAGE 6 //The amount of damage someone takes when in a low pressure area (The pressure threshold is so low that it doesn't make sense to do any calculations, so it just applies this flat value). -//low pressure damage bumped to 6 because current ZAS means cold does not proc half the time. You can waltz in space and be totally fine. -#define PRESSURE_SUIT_REDUCTION_COEFFICIENT 0.8 //This is how much (percentual) a suit with the flag STOPSPRESSUREDMAGE reduces pressure. +#define LOW_PRESSURE_DAMAGE 4 //The amount of damage someone takes when in a low pressure area (The pressure threshold is so low that it doesn't make sense to do any calculations, so it just applies this flat value). +//low pressure damage bumped to 4 because current ZAS means cold does not proc half the time. 6 was too much. +#define PRESSURE_SUIT_REDUCTION_COEFFICIENT 0.6 //This is how much (percentual) a suit with the flag STOPSPRESSUREDMAGE reduces pressure. orig. .8 but we had spacewalkers without helmets. #define PRESSURE_HEAD_REDUCTION_COEFFICIENT 0.4 //This is how much (percentual) a helmet/hat with the flag STOPSPRESSUREDMAGE reduces pressure. // Doors! diff --git a/data/investigate/gravity.html b/data/investigate/gravity.html index ef0b20af..cbf8cd75 100644 --- a/data/investigate/gravity.html +++ b/data/investigate/gravity.html @@ -1,2 +1,2 @@ -21:21 [0x20077ce] (92,152,1) || the gravitational generator has regained power.
    -21:21 [0x20077ce] (92,152,1) || the gravitational generator is now charging.
    +22:48 [0x200779e] (92,152,1) || the gravitational generator has regained power.
    +22:48 [0x200779e] (92,152,1) || the gravitational generator is now charging.
    diff --git a/icons/obj/projectiles.dmi b/icons/obj/projectiles.dmi index da413aa54b7ea2ba10a5264ff6cbcfea764aa701..495db1b1cee13f06d7e524d7cf7a3a1728605123 100644 GIT binary patch delta 12297 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 delta 10935 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 From 26b6df341f65fdeccb3dd3cfd9d2bb519df48cdf Mon Sep 17 00:00:00 2001 From: SoundScopes Date: Sun, 31 Aug 2014 06:49:16 +0100 Subject: [PATCH 12/69] Burning people with cigarettes - Harm intent with a lit cigarette burns people --- .../objects/items/weapons/cigs_lighters.dm | 86 +++++++++++++++++++ code/modules/customitems/item_defines.dm | 1 + html/changelog.html | 1 + 3 files changed, 88 insertions(+) diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm index 08321d8b..c0fdee0c 100644 --- a/code/game/objects/items/weapons/cigs_lighters.dm +++ b/code/game/objects/items/weapons/cigs_lighters.dm @@ -71,6 +71,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM var/lastHolder = null var/smoketime = 300 var/chem_volume = 15 + var/can_hurt_mob = 1 /obj/item/clothing/mask/cigarette/New() ..() @@ -117,6 +118,86 @@ CIGARETTE PACKETS ARE IN FANCY.DM user.update_inv_r_hand(1) return +/obj/item/clothing/mask/cigarette/attack(mob/M as mob, mob/user as mob) + if(!can_hurt_mob) + return ..() + + var/mob/living/carbon/human/H + if(ishuman(M)) + H = M + else + return ..() + + if(lit) + if (user.a_intent == "hurt") + switch(user.zone_sel.selecting) + if("eyes") + H.apply_damage(6, BURN, "eyes") + for(var/mob/O in viewers(H, null)) + O.show_message("\red [user] has shoved [src] in [M] eyes!", 1) + H.say("*scream") + if("mouth") + H.apply_damage(6, BURN, "mouth") + for(var/mob/O in viewers(H, null)) + O.show_message("\red [user] has shoved [src] in [M] mouth!", 1) + H.say("*scream") + if("head") + H.apply_damage(6, BURN, "head") + for(var/mob/O in viewers(H, null)) + O.show_message("\red [user] has shoved [src] in [M] face!", 1) + H.say("*scream") + if("chest") + H.apply_damage(6, BURN, "chest") + for(var/mob/O in viewers(H, null)) + O.show_message("\red [user] has shoved [src] in [M] chest!", 1) + H.say("*scream") + if("groin") + H.apply_damage(6, BURN, "groin") + for(var/mob/O in viewers(H, null)) + O.show_message("\red [user] has shoved [src] in [M] groin!", 1) + H.say("*scream") + if("l_arm") + H.apply_damage(6, BURN, "l_arm") + for(var/mob/O in viewers(H, null)) + O.show_message("\red [user] has shoved [src] in [M] left arm!", 1) + H.say("*scream") + if("r_arm") + H.apply_damage(6, BURN, "r_arm") + for(var/mob/O in viewers(H, null)) + O.show_message("\red [user] has shoved [src] in [M] right arm!", 1) + H.say("*scream") + if("l_leg") + H.apply_damage(6, BURN, "l_leg") + for(var/mob/O in viewers(H, null)) + O.show_message("\red [user] has shoved [src] in [M] left leg!", 1) + H.say("*scream") + if("l_hand") + H.apply_damage(6, BURN, "l_hand") + for(var/mob/O in viewers(H, null)) + O.show_message("\red [user] has shoved [src] in [M] left hand!", 1) + H.say("*scream") + if("r_hand") + H.apply_damage(6, BURN, "r_hand") + for(var/mob/O in viewers(H, null)) + O.show_message("\red [user] has shoved [src] in [M] right hand!", 1) + H.say("*scream") + if("r_foot") + H.apply_damage(6, BURN, "r_foot") + for(var/mob/O in viewers(H, null)) + O.show_message("\red [user] has shoved [src] in [M] left foot!", 1) + H.say("*scream") + if("l_foot") + H.apply_damage(6, BURN, "l_foot") + for(var/mob/O in viewers(H, null)) + O.show_message("\red [user] has shoved [src] in [M] right foot!", 1) + H.say("*scream") + else + return ..() + + M.attack_log += text("\[[time_stamp()]\] Has been burnt with [src.name] by [user.name] ([user.ckey])") + user.attack_log += text("\[[time_stamp()]\] Used the [src.name] to burn [M.name] ([M.ckey])") + msg_admin_attack("[key_name(user)] burnt [key_name(user)] with [src.name] (INTENT: [uppertext(user.a_intent)])") + /obj/item/clothing/mask/cigarette/afterattack(obj/item/weapon/reagent_containers/glass/glass, mob/user as mob, proximity) ..() @@ -217,6 +298,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM item_state = "cigaroff" smoketime = 1500 chem_volume = 20 + can_hurt_mob = 1 /obj/item/clothing/mask/cigarette/cigar/cohiba name = "\improper Cohiba Robusto cigar" @@ -224,6 +306,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM icon_state = "cigar2off" icon_on = "cigar2on" icon_off = "cigar2off" + can_hurt_mob = 1 /obj/item/clothing/mask/cigarette/cigar/havana name = "premium Havanian cigar" @@ -233,6 +316,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM icon_off = "cigar2off" smoketime = 7200 chem_volume = 30 + can_hurt_mob = 1 /obj/item/weapon/cigbutt name = "cigarette butt" @@ -294,6 +378,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM icon_on = "pipeon" //Note - these are in masks.dmi icon_off = "pipeoff" smoketime = 100 + can_hurt_mob = 0 /obj/item/clothing/mask/cigarette/pipe/light(var/flavor_text = "[usr] lights the [name].") if(!src.lit) @@ -368,6 +453,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM icon_on = "cobpipeon" //Note - these are in masks.dmi icon_off = "cobpipeoff" smoketime = 400 + can_hurt_mob = 0 diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm index b29c0487..bf12bc27 100644 --- a/code/modules/customitems/item_defines.dm +++ b/code/modules/customitems/item_defines.dm @@ -283,6 +283,7 @@ icon_on = "toolpipeon" //Note - these are in masks.dmi icon_off = "pipeoff" smoketime = 100 + can_hurt_mob = 0 /obj/item/weapon/reagent_containers/food/drinks/flask/fluff/tool_flask //Worn flask - Michael Tool - mrimatool - DONE name = "worn flask" diff --git a/html/changelog.html b/html/changelog.html index 78449662..3bffc89b 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -65,6 +65,7 @@ should be listed in the changelog upon commit though. Thanks. -->
  • Flash's available in delicious incendiary flavor
  • AI's can contact CentComm once every half an hour
  • Grilling people
  • +
  • Bruning people with cigarettes
  • Cancel button on kitchen equipment
  • Messages when frying people
  • Splashing people with welding fuel to make them easy to ignite
  • From c2c5e6668fd5bc3dc623c243c1fe92037ba578d6 Mon Sep 17 00:00:00 2001 From: Duck- Date: Sun, 31 Aug 2014 02:52:33 -0400 Subject: [PATCH 13/69] Fixes shotgun boxes, energy shields, nerfs pressure Adds energy shields under illegal research. Because why not. Fixes those shotgun boxes I tried to steal earlier. Latheable for your convenience. Pressure nerfs in previous commit, forgot to mention. --- code/game/machinery/autolathe.dm | 5 +++++ code/modules/projectiles/ammunition/boxes.dm | 18 +++++++++++++----- code/modules/projectiles/ammunition/bullets.dm | 14 +++++++++++++- code/modules/projectiles/guns/energy/laser.dm | 1 + code/modules/research/designs.dm | 18 ++++++++++++++++++ data/investigate/gravity.html | 4 ++-- 6 files changed, 52 insertions(+), 8 deletions(-) diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index e9fbe390..240d631e 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -61,6 +61,11 @@ var/global/list/autolathe_recipes_hidden = list( \ new /obj/item/ammo_magazine/c45m(), \ new /obj/item/ammo_casing/shotgun(), \ new /obj/item/ammo_casing/shotgun/dart(), \ + new /obj/item/ammo_casing/shotgun/incendiary(), \ + new /obj/item/ammo_magazine/shotgun(), \ + new /obj/item/ammo_magazine/shotgun/beanbag(), \ + new /obj/item/ammo_magazine/a12mm(), \ + new /obj/item/ammo_magazine/shotgun/incendiary, \ /* new /obj/item/weapon/shield/riot(), */ \ ) diff --git a/code/modules/projectiles/ammunition/boxes.dm b/code/modules/projectiles/ammunition/boxes.dm index 4eea2e42..f93c3c77 100644 --- a/code/modules/projectiles/ammunition/boxes.dm +++ b/code/modules/projectiles/ammunition/boxes.dm @@ -150,7 +150,7 @@ ammo_type = "/obj/item/ammo_casing/chameleon" max_ammo = 0 multiple_sprites = 1 -/* + // Tried to steal these from Para. They're kind of funky. /obj/item/ammo_magazine/a12mm @@ -167,19 +167,27 @@ ammo_type = "/obj/item/ammo_casing/shotgun" max_ammo = 8 m_amt = 100000 - +/* no buckshots. never again. too hard to steal forever. /obj/item/ammo_magazine/shotgun/buck name = "Ammunition Box (buckshot)" ammo_type = "/obj/item/ammo_casing/buck" +*/ /obj/item/ammo_magazine/shotgun/stun name = "Ammunition Box (stun shells)" - ammo_type = "/obj/item/ammo_casing/stunshell" + ammo_type = "/obj/item/ammo_casing/shotgun/stunshell" + max_ammo = 8 m_amt = 20000 /obj/item/ammo_magazine/shotgun/beanbag name = "Ammunition Box (beanbag shells)" - ammo_type = "/obj/item/ammo_casing/beanbag" + ammo_type = "/obj/item/ammo_casing/shotgun/beanbag" + max_ammo = 8 m_amt = 4000 - */ \ No newline at end of file +/obj/item/ammo_magazine/shotgun/incendiary + name = "Ammunition Box (incendiary shells)" + ammo_type = "/obj/item/ammo_casing/shotgun/incendiary" + max_ammo = 8 + m_amt = 100000 + diff --git a/code/modules/projectiles/ammunition/bullets.dm b/code/modules/projectiles/ammunition/bullets.dm index f3e479b6..3dcb0b9f 100644 --- a/code/modules/projectiles/ammunition/bullets.dm +++ b/code/modules/projectiles/ammunition/bullets.dm @@ -36,7 +36,12 @@ desc = "A 9mm bullet casing." caliber = "9mm" projectile_type = "/obj/item/projectile/bullet/midbullet2" - +/* do this later +/obj/item/ammo_casing/c9mmsilver + desc = "A silver 9mm bullet casing." + caliber = "9mm" + projectile_type = "/obj/item/projectile/bullet/midbullet2" +*/ /obj/item/ammo_casing/c45 desc = "A .45 bullet casing." @@ -62,6 +67,13 @@ projectile_type = "/obj/item/projectile/bullet" m_amt = 12500 +/obj/item/ammo_casing/shotgun/incendiary + name = "shotgun shell" + desc = "A 12 gauge shell." + icon_state = "ishell" + projectile_type = "/obj/item/projectile/bullet/incendiary/shell" + m_amt = 12500 + /obj/item/ammo_casing/shotgun/blank name = "shotgun shell" diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm index 2535afc7..b07e64dd 100644 --- a/code/modules/projectiles/guns/energy/laser.dm +++ b/code/modules/projectiles/guns/energy/laser.dm @@ -32,6 +32,7 @@ /obj/item/weapon/gun/energy/laser/captain icon_state = "caplaser" + name ="antique laser gun" desc = "This is an antique laser gun. All craftsmanship is of the highest quality. It is decorated with assistant leather and chrome. The object menaces with spikes of energy. On the item is an image of Space Station 13. The station is exploding." force = 10 origin_tech = null diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index 74a93fc4..54372d68 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -1413,6 +1413,15 @@ datum/design/implant_free materials = list("$metal" = 50, "$glass" = 50) build_path = "/obj/item/weapon/implantcase/freedom" +datum/design/energy_shield + name = "energy shield" + desc = "An energy shield." + id = "energy_shield" + req_tech = list("syndicate" = 4, "materials" = 4, "magnets" = 3) + build_type = PROTOLATHE + materials = list("$metal" = 1000, "$glass" = 3000, "$plasma" = 1000) + build_path = "/obj/item/weapon/shield/energy" + datum/design/implant_death_alarm name = "death alarm implant" desc = "Alerts others to your death." @@ -1629,6 +1638,15 @@ datum/design/stunshell materials = list("$metal" = 4000) build_path = "/obj/item/ammo_casing/shotgun/stunshell" +datum/design/stunshellbox + name = "Stun Shell box" + desc = "A box full of stun shells." + id = "stunshellbox" + req_tech = list("combat" = 3, "materials" = 3) + build_type = PROTOLATHE + materials = list("$metal" = 20000) + build_path = "/obj/item/ammo_magazine/shotgun/stun" + datum/design/plasmapistol name = "plasma pistol" desc = "A specialized firearm designed to fire lethal bolts of toxins." diff --git a/data/investigate/gravity.html b/data/investigate/gravity.html index cbf8cd75..00a9afb7 100644 --- a/data/investigate/gravity.html +++ b/data/investigate/gravity.html @@ -1,2 +1,2 @@ -22:48 [0x200779e] (92,152,1) || the gravitational generator has regained power.
    -22:48 [0x200779e] (92,152,1) || the gravitational generator is now charging.
    +02:39 [0x200783d] (92,152,1) || the gravitational generator has regained power.
    +02:39 [0x200783d] (92,152,1) || the gravitational generator is now charging.
    From 98858241f7ed35a47e1aab4ded9df59260ce59ae Mon Sep 17 00:00:00 2001 From: SoundScopes Date: Sun, 31 Aug 2014 16:36:13 +0100 Subject: [PATCH 14/69] Mod attack log jump - Duck's updates - Mods can jump to attack logs --- code/modules/admin/topic.dm | 2 +- html/changelog.html | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 7713a735..5779bc7f 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1306,7 +1306,7 @@ check_antagonists() else if(href_list["adminplayerobservecoodjump"]) - if(!check_rights(R_ADMIN)) return + if(!check_rights(R_MOD,0) && !check_rights(R_ADMIN)) return var/x = text2num(href_list["X"]) var/y = text2num(href_list["Y"]) diff --git a/html/changelog.html b/html/changelog.html index 3bffc89b..d639f764 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -64,12 +64,15 @@ should be listed in the changelog upon commit though. Thanks. -->
  • Alcohol and thermite now flammable
  • Flash's available in delicious incendiary flavor
  • AI's can contact CentComm once every half an hour
  • +
  • Energy shields under illegal research
  • Grilling people
  • Bruning people with cigarettes
  • Cancel button on kitchen equipment
  • Messages when frying people
  • Splashing people with welding fuel to make them easy to ignite
  • Shield Generator Circuit boards costs changed
  • +
  • Space a little less deadly
  • +
  • Mod Jump
  • You can no longer turn everything into candy
  • You can no longer put everything in the oven
  • You can no longer put everything in the grill
  • @@ -78,6 +81,8 @@ should be listed in the changelog upon commit though. Thanks. -->
  • Particle Accelerator now shuts down if any of it's parts are missing
  • Mob buckled to chairs no longer float until unbuckled
  • Robots on fire sprites
  • +
  • Basic Protolaser
  • +
  • New projectiles
  • From 78fa3ce8d05bd33cceb6c464bd257cd32533c1e5 Mon Sep 17 00:00:00 2001 From: Duck- Date: Sun, 31 Aug 2014 23:15:43 -0400 Subject: [PATCH 15/69] Snowflake accuracy rework. shotguns accurate up close. rapid accuracy drops after five tiles. sniper rifles accuracybuffed. Added accuracy to modularguns, which are now finished except for sprites. Energy weapons made slightly more accurate than bulletweapons. --- code/modules/projectiles/gun.dm | 4 ++-- code/modules/projectiles/guns/energy/erifles.dm | 5 ++++- code/modules/projectiles/guns/energy/modular.dm | 14 ++++++++------ .../modules/projectiles/guns/projectile/shotgun.dm | 6 ++++++ code/modules/projectiles/projectile.dm | 5 +++-- data/investigate/gravity.html | 4 ++-- 6 files changed, 25 insertions(+), 13 deletions(-) diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index ea46b882..44229ddb 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -44,8 +44,8 @@ var/force_unwielded = 0 //Force modification, because striking someone with a rifle held in two hands -hurts- var/force_wielded = 0 - var/accuracy = -30 //goes into projectile.dm to provide individual offsets for each gun. negative to increase base accuracy - var/rangedrop = 5 //how much accuracy the average gun loses for every tile + var/accuracy = 0 //goes into projectile.dm to provide individual offsets for each gun. negative to increase base accuracy + var/rangedrop = 0 //how much accuracy the average gun loses for every tile proc/can_wield() //Override in order to make a weapon two handed, remember to add toggle_wield(mob/user as mob) in the weapon somewhere return 0 //Override /Fire(..) to force the weapon to be two handed diff --git a/code/modules/projectiles/guns/energy/erifles.dm b/code/modules/projectiles/guns/energy/erifles.dm index bf62b849..99d73049 100644 --- a/code/modules/projectiles/guns/energy/erifles.dm +++ b/code/modules/projectiles/guns/energy/erifles.dm @@ -59,7 +59,7 @@ fire_delay_unwielded = 24 //4x difference, let's be an arse about this, and push the issue force_wielded = 10 //10 is amped force, due to better grip force_unwielded = 5 //5 is normal force - + rangedrop = -5 //lasers are more accurate than bullets. fully accurate up to three tiles unaimed. 40% miss at 7 tiles. aimed: 6 tiles accurate, 10% miss at 7 /* /obj/item/weapon/gun/energy/rifle/laser/update_icon() //Currently only here to fuck with the on-mob icons. icon_state = "laser[wielded]" @@ -128,6 +128,9 @@ Commenting out right now, due to a lack of sprites existing. I hate on-mob weapo fire_delay_unwielded = 105 //3x difference, let's be an arse about this, and push the issue var/zoom = 0 + accuracy = -90 + rangedrop = -5 // fully accurate up to first 10 tiles. the last 4 zoomed tiles you are on your + /obj/item/weapon/gun/energy/rifle/sniperrifle/dropped(mob/user) user.client.view = world.view ..() diff --git a/code/modules/projectiles/guns/energy/modular.dm b/code/modules/projectiles/guns/energy/modular.dm index 4912e167..7d06e5ef 100644 --- a/code/modules/projectiles/guns/energy/modular.dm +++ b/code/modules/projectiles/guns/energy/modular.dm @@ -293,18 +293,20 @@ else if(delaymod.rating == 3) fire_delay = 2 - if(!targetmod) // TBD after projectile accuracy. extreme placeholder values. -// miss_modifier = 0 + if(!targetmod) + accuracy = 30 //positive. subtracts to 0 accuracy base, 30 if aimed. fully accurate up to two tiles *if aimed*, -15% per tile after canzoom = 0 else if(targetmod.rating == 1) -// miss_modifier = -30 + accuracy = -30 //standard accuracy. standard gun. canzoom = 0 else if(targetmod.rating == 2) -// miss_modifier = -60 - canzoom = 1 //advanced and up scanning modules let you zoom in. + accuracy = -60 //Fully accurate up to 6 tiles aimed. 15% drop per tile after that for ~-120% accuracy at 14 tiles. If you want to snipe things, get phasic. + canzoom = 1 //advanced and up scanning modules let you zoom in. good luck hitting without phasic though pal. good luck. else if(targetmod.rating == 3) -// miss_modifier = -90 + rangedrop = -5 //Accurate aimed up to 12 tiles. 20% miss at 14. 9 tiles and 50% miss at 14 without aiming. + accuracy = -90 //If you're paying a premium for accuracy, you can have accuracy. canzoom = 1 + if(!powermod) charge_cost = 1.5*charge_cost else if(powermod.rating == 1) diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm index 5c70c715..4c5fbf0c 100644 --- a/code/modules/projectiles/guns/projectile/shotgun.dm +++ b/code/modules/projectiles/guns/projectile/shotgun.dm @@ -20,6 +20,9 @@ var/pumped = 0 var/obj/item/ammo_casing/current_shell = null + accuracy = -40 //-60 full accuracy up to 3 tiles unaimed. aimed 5 tiles accurate. 40% misschance at 7. + rangedrop = 5 //loses 20 accuracy per distance tile. unaimed 70% chance to miss at 7 tiles. + icon_action_button = "action_blank" action_button_name = "Wield the shotgun" @@ -91,6 +94,9 @@ origin_tech = "combat=3;materials=1" ammo_type = "/obj/item/ammo_casing/shotgun/beanbag" + accuracy = -40 //-60 full accuracy up to 3 tiles unaimed. aimed 5 tiles accurate. 40% misschance at 7. + rangedrop = 5 //loses 20 accuracy per distance tile. unaimed 70% chance to miss at 7 tiles. + icon_action_button = "action_blank" action_button_name = "Wield the double-barreled shotgun" diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 7aee9719..fbc06c80 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -93,8 +93,9 @@ var/obj/item/weapon/gun/daddy = shot_from //Kinda balanced by fact you need like 2 seconds to aim if (daddy.target && original in daddy.target) //As opposed to no-delay pew pew miss_modifier += -30 - def_zone = get_zone_with_miss_chance(def_zone, M, miss_modifier + 10*distance) // add +daddy.missmod vars to gun and this. snowflake accuracy - + M << "\red [miss_modifier]!" + def_zone = get_zone_with_miss_chance(def_zone, M, miss_modifier + 15*distance + daddy.accuracy + daddy.rangedrop) // add +daddy.missmod vars to gun and this. snowflake accuracy +//moving def_zone to be a child of the daddyblock because i need the daddy if(!def_zone) visible_message("\blue \The [src] misses [M] narrowly!") forcedodge = -1 diff --git a/data/investigate/gravity.html b/data/investigate/gravity.html index 00a9afb7..67ff95de 100644 --- a/data/investigate/gravity.html +++ b/data/investigate/gravity.html @@ -1,2 +1,2 @@ -02:39 [0x200783d] (92,152,1) || the gravitational generator has regained power.
    -02:39 [0x200783d] (92,152,1) || the gravitational generator is now charging.
    +13:02 [0x20077ee] (92,152,1) || the gravitational generator has regained power.
    +13:02 [0x20077ee] (92,152,1) || the gravitational generator is now charging.
    From 4f910418f7b7eac77beca3407a816d1c5e4a373b Mon Sep 17 00:00:00 2001 From: SoundScopes Date: Mon, 1 Sep 2014 08:23:36 +0100 Subject: [PATCH 16/69] Meow's change log Meow's change log --- html/changelog.html | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/html/changelog.html b/html/changelog.html index d639f764..79637f0e 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -57,7 +57,7 @@ should be listed in the changelog upon commit though. Thanks. -->
    -

    30 August 2014

    +

    1 September 2014

    SoundScopes updated: