From 44d0c051006c8bb5ca53514407886a4fb886f147 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Fri, 7 Dec 2018 13:40:37 -0800 Subject: [PATCH 001/104] Update toolbox.dm --- code/game/objects/items/storage/toolbox.dm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/code/game/objects/items/storage/toolbox.dm b/code/game/objects/items/storage/toolbox.dm index 6667cee76a..5c6bd7602a 100644 --- a/code/game/objects/items/storage/toolbox.dm +++ b/code/game/objects/items/storage/toolbox.dm @@ -87,8 +87,10 @@ /obj/item/storage/toolbox/mechanical/old/heirloom/afterattack(atom/A, mob/user, proximity) //Citadel Adds massive buff to machinery destruction . = ..() if(proximity) - if(isobj(A)) + if(isobj(A) && !isitem(A)) var/obj/O = A + if(O.damage_deflection >= 18) //Eh fine. + return O.take_damage(20) /obj/item/storage/toolbox/mechanical/old/heirloom/PopulateContents() From a58da4c1c8ceb1d6a0812b26e856bf07835c187f Mon Sep 17 00:00:00 2001 From: Trilbyspaceclone <30435998+Trilbyspaceclone@users.noreply.github.com> Date: Sun, 9 Dec 2018 14:09:04 -0500 Subject: [PATCH 002/104] Update all_nodes.dme.dm --- .../code/modules/research/techweb/all_nodes.dme.dm | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/modular_citadel/code/modules/research/techweb/all_nodes.dme.dm b/modular_citadel/code/modules/research/techweb/all_nodes.dme.dm index d968cfdcc7..113d4115ac 100644 --- a/modular_citadel/code/modules/research/techweb/all_nodes.dme.dm +++ b/modular_citadel/code/modules/research/techweb/all_nodes.dme.dm @@ -10,10 +10,6 @@ . = ..() design_ids += "xenobio_slimeadv" -/datum/techweb_node/ballistic_weapons/New() - . = ..() - design_ids += "mag_oldsmg_rubber" - /datum/techweb_node/computer_board_gaming id = "computer_board_gaming" display_name = "Games and Toys" @@ -22,12 +18,3 @@ design_ids = list("arcade_battle", "arcade_orion", "slotmachine", "autoylathe") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1000) export_price = 5000 - -/datum/techweb_node/advanced_illegl_ballistics - id = "advanced_illegal_ballistics" - display_name = "Advanced Illegal Ballistics - description = "Advanced Ballistic for Illegal weaponds." - design_ids = list("10mm","10mmap","10mminc","10mmhp","9mm","point_45","bolt_clip") - prereq_ids = list("ballistic_weapons","syndicate_basic","explosive_weapons") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 25000) //This gives sec lethal mags/clips for guns form traitors or space. - export_price = 7000 From 6481b27cbe83baa8b8f3a56cfa7bc71e70bc5a10 Mon Sep 17 00:00:00 2001 From: Trilbyspaceclone <30435998+Trilbyspaceclone@users.noreply.github.com> Date: Sun, 9 Dec 2018 15:04:13 -0500 Subject: [PATCH 003/104] Update all_nodes.dme.dm --- .../code/modules/research/techweb/all_nodes.dme.dm | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/modular_citadel/code/modules/research/techweb/all_nodes.dme.dm b/modular_citadel/code/modules/research/techweb/all_nodes.dme.dm index 113d4115ac..16c70b50c6 100644 --- a/modular_citadel/code/modules/research/techweb/all_nodes.dme.dm +++ b/modular_citadel/code/modules/research/techweb/all_nodes.dme.dm @@ -10,6 +10,10 @@ . = ..() design_ids += "xenobio_slimeadv" +/datum/techweb_node/ballistic_weapons/New() + . = ..() + design_ids += "mag_oldsmg_rubber" + /datum/techweb_node/computer_board_gaming id = "computer_board_gaming" display_name = "Games and Toys" @@ -18,3 +22,13 @@ design_ids = list("arcade_battle", "arcade_orion", "slotmachine", "autoylathe") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1000) export_price = 5000 + +/datum/techweb_node/advanced_illegl_ballistics + id = "advanced_illegal_ballistics" + display_name = "Advanced Illegal Ballistics + description = "Advanced Ballistic for Illegal weaponds." + design_ids = list("10mm","10mmap","10mminc","10mmhp","9mm","point_45","bolt_clip") + prereq_ids = list("ballistic_weapons","syndicate_basic","explosive_weapons") + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 25000) //This gives sec lethal mags/clips for guns form traitors or space. + export_price = 7000 + From bcfccda9862fc547ab240c870abf0d01e8b05d04 Mon Sep 17 00:00:00 2001 From: Trilbyspaceclone <30435998+Trilbyspaceclone@users.noreply.github.com> Date: Sun, 9 Dec 2018 15:04:47 -0500 Subject: [PATCH 004/104] Update all_nodes.dme.dm --- modular_citadel/code/modules/research/techweb/all_nodes.dme.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/modular_citadel/code/modules/research/techweb/all_nodes.dme.dm b/modular_citadel/code/modules/research/techweb/all_nodes.dme.dm index 16c70b50c6..d968cfdcc7 100644 --- a/modular_citadel/code/modules/research/techweb/all_nodes.dme.dm +++ b/modular_citadel/code/modules/research/techweb/all_nodes.dme.dm @@ -31,4 +31,3 @@ prereq_ids = list("ballistic_weapons","syndicate_basic","explosive_weapons") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 25000) //This gives sec lethal mags/clips for guns form traitors or space. export_price = 7000 - From 63ad6f11755f710874a8b6933bbc09836a8db36a Mon Sep 17 00:00:00 2001 From: Trilbyspaceclone <30435998+Trilbyspaceclone@users.noreply.github.com> Date: Sun, 9 Dec 2018 15:15:23 -0500 Subject: [PATCH 005/104] Update vent_clog.dm --- code/modules/events/vent_clog.dm | 43 +++++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/code/modules/events/vent_clog.dm b/code/modules/events/vent_clog.dm index 160304b1c3..1554e1ec72 100644 --- a/code/modules/events/vent_clog.dm +++ b/code/modules/events/vent_clog.dm @@ -79,12 +79,28 @@ typepath = /datum/round_event/vent_clog/beer max_occurrences = 0 +/datum/round_event/vent_clog/beer + reagentsAmount = 100 + /datum/round_event_control/vent_clog/plasma_decon name = "Plasma decontamination" typepath = /datum/round_event/vent_clog/plasma_decon max_occurrences = 0 -/datum/round_event/vent_clog/beer +/datum/round_event_control/vent_clog/female + name = "FemCum stationwide" + typepath = /datum/round_event/vent_clog/female + max_occurrences = 0 + +/datum/round_event/vent_clog/female + reagentsAmount = 100 + +/datum/round_event_control/vent_clog/male + name = "Semen stationwide" + typepath = /datum/round_event/vent_clog/male + max_occurrences = 0 + +/datum/round_event/vent_clog/male reagentsAmount = 100 /datum/round_event/vent_clog/beer/announce() @@ -102,6 +118,31 @@ foam.start() CHECK_TICK +/datum/round_event/vent_clog/male/start() + for(var/obj/machinery/atmospherics/components/unary/vent in vents) + if(vent && vent.loc) + var/datum/reagents/R = new/datum/reagents(1000) + R.my_atom = vent + R.add_reagent("semen", reagentsAmount) + + var/datum/effect_system/foam_spread/foam = new + foam.set_up(200, get_turf(vent), R) + foam.start() + CHECK_TICK + +/datum/round_event/vent_clog/female/start() + for(var/obj/machinery/atmospherics/components/unary/vent in vents) + if(vent && vent.loc) + var/datum/reagents/R = new/datum/reagents(1000) + R.my_atom = vent + R.add_reagent("femcum", reagentsAmount) + + var/datum/effect_system/foam_spread/foam = new + foam.set_up(200, get_turf(vent), R) + foam.start() + CHECK_TICK + + /datum/round_event/vent_clog/plasma_decon/announce() priority_announce("We are deploying an experimental plasma decontamination system. Please stand away from the vents and do not breathe the smoke that comes out.", "Central Command Update") From 170a8432889abd1b3d6fa4974beffa45195c3cad Mon Sep 17 00:00:00 2001 From: Trilbyspaceclone <30435998+Trilbyspaceclone@users.noreply.github.com> Date: Sun, 9 Dec 2018 19:20:02 -0500 Subject: [PATCH 006/104] recheck --- code/modules/events/vent_clog.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/modules/events/vent_clog.dm b/code/modules/events/vent_clog.dm index 1554e1ec72..3945a12a40 100644 --- a/code/modules/events/vent_clog.dm +++ b/code/modules/events/vent_clog.dm @@ -142,7 +142,6 @@ foam.start() CHECK_TICK - /datum/round_event/vent_clog/plasma_decon/announce() priority_announce("We are deploying an experimental plasma decontamination system. Please stand away from the vents and do not breathe the smoke that comes out.", "Central Command Update") From 552a9622c77df54bb090dafd57d1ee8d9c6ae4f1 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Tue, 11 Dec 2018 01:09:03 -0800 Subject: [PATCH 007/104] Update human.dm --- code/modules/mob/living/carbon/human/human.dm | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 548381ba8a..7582d7fb0e 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -599,11 +599,7 @@ //Check for dresscode violations if(istype(head, /obj/item/clothing/head/wizard) || istype(head, /obj/item/clothing/head/helmet/space/hardsuit/wizard) || istype(head, /obj/item/clothing/head/helmet/space/hardsuit/shielded/wizard) || istype(head, /obj/item/clothing/head/helmet/space/hardsuit/syndi) || istype(head, /obj/item/clothing/head/helmet/space/hardsuit/shielded/syndi)) - threatcount += 6 //fuk u antags <3 - - //Check for nonhuman scum - if(dna && dna.species.id && dna.species.id != "human") - threatcount += 1 + threatcount += 4 //fuk u antags <3 //no you //mindshield implants imply trustworthyness if(has_trait(TRAIT_MINDSHIELD)) From 900da0624bbb961026b50bbef671a09bc2ea3d6e Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Tue, 11 Dec 2018 01:53:27 -0800 Subject: [PATCH 008/104] Update toolbox.dm --- code/game/objects/items/storage/toolbox.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/game/objects/items/storage/toolbox.dm b/code/game/objects/items/storage/toolbox.dm index 5c6bd7602a..c28f7e2aaa 100644 --- a/code/game/objects/items/storage/toolbox.dm +++ b/code/game/objects/items/storage/toolbox.dm @@ -87,9 +87,9 @@ /obj/item/storage/toolbox/mechanical/old/heirloom/afterattack(atom/A, mob/user, proximity) //Citadel Adds massive buff to machinery destruction . = ..() if(proximity) - if(isobj(A) && !isitem(A)) - var/obj/O = A - if(O.damage_deflection >= 18) //Eh fine. + if(isobj(A)) + var/obj/machinery/door/O = A + if(istype(O) && (O.damage_deflection >= 18)) //Eh fine. //This is a meme cast do not do what I did! return O.take_damage(20) From 33f997c10d240624cf02295a2bc27850aeeb157b Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Tue, 11 Dec 2018 08:34:22 -0800 Subject: [PATCH 009/104] Update banana_spider.dm --- .../mob/living/simple_animal/banana_spider.dm | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/modular_citadel/code/modules/mob/living/simple_animal/banana_spider.dm b/modular_citadel/code/modules/mob/living/simple_animal/banana_spider.dm index 80e8234914..e896ca5bc2 100644 --- a/modular_citadel/code/modules/mob/living/simple_animal/banana_spider.dm +++ b/modular_citadel/code/modules/mob/living/simple_animal/banana_spider.dm @@ -38,7 +38,7 @@ return to_chat(user, "You decide to wake up the banana spider...") awakening = 1 - + spawn(30) if(!QDELETED(src)) var/mob/living/simple_animal/banana_spider/S = new /mob/living/simple_animal/banana_spider(get_turf(src.loc)) @@ -67,7 +67,7 @@ response_harm = "splats" speak_emote = list("chitters") mouse_opacity = 2 - density = FALSE + density = TRUE ventcrawler = VENTCRAWLER_ALWAYS gold_core_spawnable = FRIENDLY_SPAWN verb_say = "chitters" @@ -75,9 +75,9 @@ verb_exclaim = "chitters loudly" verb_yell = "chitters loudly" var/squish_chance = 50 + var/projectile_density = TRUE //griffons get shot del_on_death = 1 - /mob/living/simple_animal/banana_spider/Initialize() . = ..() var/area/A = get_area(src) @@ -85,9 +85,8 @@ notify_ghosts("A banana spider has been created in \the [A.name].", source = src, action=NOTIFY_ATTACK, flashwindow = FALSE) GLOB.poi_list |= src - /mob/living/simple_animal/banana_spider/attack_ghost(mob/user) - if(src.key) + if(key) //please stop using src. without a good reason. return if(CONFIG_GET(flag/use_age_restriction_for_jobs)) if(!isnum(user.client.player_age)) @@ -104,11 +103,13 @@ /mob/living/simple_animal/banana_spider/ComponentInitialize() . = ..() - AddComponent(/datum/component/slippery, 80) + AddComponent(/datum/component/slippery, 40) - -/mob/living/simple_animal/banana_spider/Crossed(var/atom/movable/AM) +/mob/living/simple_animal/banana_spider/Crossed(atom/movable/AM) //no /var in proc headers . = ..() + if(istype(AM, /obj/item/projectile) && projectile_density) //forced projectile density + var/obj/item/projectile/P = AM + P.Bump(src) if(ismob(AM)) if(isliving(AM)) var/mob/living/A = AM @@ -147,4 +148,4 @@ /obj/item/reagent_containers/food/snacks/deadbanana_spider/Initialize() . = ..() - AddComponent(/datum/component/slippery, 80) + AddComponent(/datum/component/slippery, 20) From df55b465b1cad91134c316d5f66524bf68fe225d Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Tue, 11 Dec 2018 08:37:10 -0800 Subject: [PATCH 010/104] removes poi spam and cleans up code --- .../modules/mob/living/simple_animal/banana_spider.dm | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/modular_citadel/code/modules/mob/living/simple_animal/banana_spider.dm b/modular_citadel/code/modules/mob/living/simple_animal/banana_spider.dm index e896ca5bc2..d2006cd12c 100644 --- a/modular_citadel/code/modules/mob/living/simple_animal/banana_spider.dm +++ b/modular_citadel/code/modules/mob/living/simple_animal/banana_spider.dm @@ -55,7 +55,8 @@ icon_dead = "banana_peel" health = 1 maxHealth = 1 - turns_per_move = 5 + turns_per_move = 5 //this isn't player speed =| + speed = 2 //this is player speed loot = list(/obj/item/reagent_containers/food/snacks/deadbanana_spider) atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) minbodytemp = 270 @@ -76,14 +77,13 @@ verb_yell = "chitters loudly" var/squish_chance = 50 var/projectile_density = TRUE //griffons get shot - del_on_death = 1 + del_on_death = TRUE /mob/living/simple_animal/banana_spider/Initialize() . = ..() var/area/A = get_area(src) if(A) notify_ghosts("A banana spider has been created in \the [A.name].", source = src, action=NOTIFY_ATTACK, flashwindow = FALSE) - GLOB.poi_list |= src /mob/living/simple_animal/banana_spider/attack_ghost(mob/user) if(key) //please stop using src. without a good reason. @@ -97,8 +97,8 @@ var/be_spider = alert("Become a banana spider? (Warning, You can no longer be cloned!)",,"Yes","No") if(be_spider == "No" || QDELETED(src) || !isobserver(user)) return - src.sentience_act() - src.key = user.key + sentience_act() + key = user.key density = TRUE /mob/living/simple_animal/banana_spider/ComponentInitialize() From 415c1de16d37dd57e2519c4211834ee7f12cdfde Mon Sep 17 00:00:00 2001 From: Trilbyspaceclone <30435998+Trilbyspaceclone@users.noreply.github.com> Date: Thu, 13 Dec 2018 11:13:11 -0500 Subject: [PATCH 011/104] adds magboots --- code/game/machinery/suit_storage_unit.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index a157f9c485..43e8dff2b9 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -41,6 +41,7 @@ /obj/machinery/suit_storage_unit/engine suit_type = /obj/item/clothing/suit/space/hardsuit/engine mask_type = /obj/item/clothing/mask/breath + storage_type= /obj/item/clothing/shoes/magboots /obj/machinery/suit_storage_unit/ce suit_type = /obj/item/clothing/suit/space/hardsuit/engine/elite From 941d5fcfba0486c8a411cab3c8293788dfe64ff8 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Fri, 14 Dec 2018 01:34:39 -0800 Subject: [PATCH 012/104] Update aooc.dm --- code/modules/client/verbs/aooc.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/client/verbs/aooc.dm b/code/modules/client/verbs/aooc.dm index 90c0dc5a55..893501a852 100644 --- a/code/modules/client/verbs/aooc.dm +++ b/code/modules/client/verbs/aooc.dm @@ -61,7 +61,7 @@ antaglisting |= M.current.client for(var/mob/M in GLOB.player_list) - if(M.client && (M.stat == DEAD || M.client.holder)) + if(M.client && (M.stat == DEAD || M.client.holder) && !istype(M, /mob/dead/new_player)) antaglisting |= M.client for(var/client/C in antaglisting) From 828b6315703100e6b9de3d0d4bcd5ce77523e196 Mon Sep 17 00:00:00 2001 From: Tupinambis Date: Sat, 15 Dec 2018 15:33:19 -0600 Subject: [PATCH 013/104] Increased Ash Walker resistances, makes them ash proof. Improves the Base. --- .../lavaland_surface_ash_walker1.dmm | 24 ++++++++++++++++--- .../datums/weather/weather_types/ash_storm.dm | 4 ++++ .../human/species_types/lizardpeople.dm | 2 ++ 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm index 7ad773e601..63d2acdf46 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm @@ -173,6 +173,7 @@ /obj/structure/stone_tile{ dir = 4 }, +/obj/item/t_scanner/adv_mining_scanner/lesser, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/ruin/unpowered/ash_walkers) "aC" = ( @@ -186,6 +187,7 @@ }, /obj/structure/closet/crate/medical, /obj/item/storage/firstaid/regular, +/obj/item/storage/firstaid/ancient, /obj/item/reagent_containers/blood/random, /obj/item/reagent_containers/blood/lizard, /obj/item/reagent_containers/blood/lizard, @@ -269,6 +271,7 @@ /area/ruin/unpowered/ash_walkers) "aP" = ( /obj/structure/stone_tile, +/obj/item/shard, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/ruin/unpowered/ash_walkers) "aQ" = ( @@ -575,6 +578,7 @@ /obj/item/stack/sheet/mineral/wood, /obj/item/stack/sheet/mineral/wood, /obj/item/seeds/tower, +/obj/item/seeds/tower, /turf/open/indestructible/boss, /area/ruin/unpowered/ash_walkers) "bx" = ( @@ -1086,7 +1090,7 @@ dir = 8 }, /obj/structure/table/wood, -/obj/item/twohanded/spear, +/obj/item/kitchen/knife/combat/bone, /turf/open/indestructible/boss, /area/ruin/unpowered/ash_walkers) "cN" = ( @@ -1142,6 +1146,7 @@ /obj/structure/stone_tile{ dir = 1 }, +/obj/item/surgical_drapes, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/ruin/unpowered/ash_walkers) "cX" = ( @@ -1301,6 +1306,7 @@ }, /obj/structure/stone_tile/center, /obj/effect/mapping_helpers/no_lava, +/obj/item/hatchet, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) "du" = ( @@ -1392,6 +1398,18 @@ }, /turf/closed/mineral/volcanic/lava_land_surface, /area/lavaland/surface/outdoors) +"nS" = ( +/obj/item/toy/cards/deck/syndicate, +/turf/closed/mineral/volcanic/lava_land_surface, +/area/lavaland/surface/outdoors) +"Bv" = ( +/obj/structure/stone_tile{ + dir = 1 + }, +/obj/effect/mapping_helpers/no_lava, +/obj/item/cultivator, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) (1,1,1) = {" aa @@ -1407,7 +1425,7 @@ ah ah aa aa -ah +nS ah ah ah @@ -1558,7 +1576,7 @@ ba bn bz ak -cb +Bv df bX co diff --git a/code/datums/weather/weather_types/ash_storm.dm b/code/datums/weather/weather_types/ash_storm.dm index 173f7e6b33..345212cc1b 100644 --- a/code/datums/weather/weather_types/ash_storm.dm +++ b/code/datums/weather/weather_types/ash_storm.dm @@ -93,6 +93,10 @@ /datum/weather/ash_storm/weather_act(mob/living/L) if(is_ash_immune(L)) return + if(is_species(L, /datum/species/lizard/ashwalker)) + if(L.getStaminaLoss() <= STAMINA_SOFTCRIT) + L.adjustStaminaLossBuffered(4) + return L.adjustFireLoss(4) diff --git a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm index 617e62773d..e3164e0dcb 100644 --- a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm @@ -92,3 +92,5 @@ limbs_id = "lizard" species_traits = list(MUTCOLORS,EYECOLOR,LIPS,DIGITIGRADE) inherent_traits = list(TRAIT_NOGUNS,TRAIT_NOBREATH) + burnmod = 0.9 + brutemod = 0.9 \ No newline at end of file From 44acfd9858f3f24a3e6d60541b73023342e1fe46 Mon Sep 17 00:00:00 2001 From: Poojawa Date: Sun, 16 Dec 2018 01:25:37 -0600 Subject: [PATCH 014/104] Re adds missed QOL with posibrain sounds christ --- code/modules/mob/living/brain/posibrain.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/brain/posibrain.dm b/code/modules/mob/living/brain/posibrain.dm index 90d20bc236..9e0bb0428b 100644 --- a/code/modules/mob/living/brain/posibrain.dm +++ b/code/modules/mob/living/brain/posibrain.dm @@ -36,7 +36,7 @@ GLOBAL_VAR(posibrain_notify_cooldown) /obj/item/mmi/posibrain/proc/ping_ghosts(msg, newlymade) if(newlymade || GLOB.posibrain_notify_cooldown <= world.time) - notify_ghosts("[name] [msg] in [get_area(src)]!", ghost_sound = !newlymade ? 'sound/effects/ghost2.ogg':null, enter_link = "(Click to enter)", source = src, action = NOTIFY_ATTACK, flashwindow = FALSE, ignore_key = POLL_IGNORE_POSIBRAIN) + notify_ghosts("[name] [msg] in [get_area(src)]!", ghost_sound = !newlymade ? 'sound/misc/server-ready.ogg':null, enter_link = "(Click to enter)", source = src, action = NOTIFY_ATTACK, flashwindow = FALSE, ignore_key = POLL_IGNORE_POSIBRAIN) if(!newlymade) GLOB.posibrain_notify_cooldown = world.time + askDelay From 1034a6ad0e0b7b396cdd96558ebf2aabc3526bda Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Sun, 16 Dec 2018 03:41:37 -0800 Subject: [PATCH 015/104] ball stuff --- code/game/area/areas/centcom.dm | 7 ++++ .../items/stacks/sheets/sheet_types.dm | 2 ++ code/game/objects/items/toys.dm | 1 + .../objects/structures/beds_chairs/chair.dm | 11 ++++++ code/game/objects/structures/fluff.dm | 15 ++++++++ code/game/objects/structures/mineral_doors.dm | 10 ++++++ .../objects/structures/signs/signs_maps.dm | 9 +++++ code/game/turfs/closed.dm | 8 +++++ code/game/turfs/open.dm | 14 ++++++++ .../awaymissions/mission_code/snowdin.dm | 6 +++- code/modules/holodeck/turfs.dm | 33 +++++++++++++++++- icons/obj/2x2.dmi | Bin 24355 -> 25962 bytes icons/obj/chairs.dmi | Bin 25121 -> 33141 bytes icons/obj/doors/mineral_doors.dmi | Bin 43115 -> 47856 bytes icons/obj/fluff.dmi | Bin 12352 -> 13260 bytes icons/turf/floors.dmi | Bin 311410 -> 318802 bytes 16 files changed, 114 insertions(+), 2 deletions(-) diff --git a/code/game/area/areas/centcom.dm b/code/game/area/areas/centcom.dm index d5c8a8c841..1241b7a240 100644 --- a/code/game/area/areas/centcom.dm +++ b/code/game/area/areas/centcom.dm @@ -29,6 +29,13 @@ /area/centcom/holding name = "Holding Facility" +/area/centcom/vip + name = "VIP Zone" + dynamic_lighting = DYNAMIC_LIGHTING_DISABLED + /area/centcom/winterball + name = "winterball Zone" + dynamic_lighting = DYNAMIC_LIGHTING_DISABLED + /area/centcom/supplypod name = "Supplypod Facility" icon_state = "supplypod" diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index bbace70bec..e63ddd1c02 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -190,8 +190,10 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \ new/datum/stack_recipe("rolling pin", /obj/item/kitchen/rollingpin, 2, time = 30), \ new/datum/stack_recipe("wooden chair", /obj/structure/chair/wood/, 3, time = 10, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("winged wooden chair", /obj/structure/chair/wood/wings, 3, time = 10, one_per_turf = TRUE, on_floor = TRUE), \ + new/datum/stack_recipe("plywood chair", /obj/structure/chair/comfy/plywood, 4, time = 10, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("wooden barricade", /obj/structure/barricade/wooden, 5, time = 50, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("wooden door", /obj/structure/mineral_door/wood, 10, time = 20, one_per_turf = TRUE, on_floor = TRUE), \ + new/datum/stack_recipe("rustic wooden door", /obj/structure/mineral_door/woodrustic, 10, time = 20, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("coffin", /obj/structure/closet/crate/coffin, 5, time = 15, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("book case", /obj/structure/bookcase, 4, time = 15, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("drying rack", /obj/machinery/smartfridge/drying_rack, 10, time = 15, one_per_turf = TRUE, on_floor = TRUE), \ diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 7b52ca7af1..7aaee7c5d4 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -1039,6 +1039,7 @@ icon = 'icons/obj/toy.dmi' icon_state = "snowball" throwforce = 12 //pelt your enemies to death with lumps of snow + damtype = STAMINA /obj/item/toy/snowball/afterattack(atom/target as mob|obj|turf|area, mob/user) . = ..() diff --git a/code/game/objects/structures/beds_chairs/chair.dm b/code/game/objects/structures/beds_chairs/chair.dm index 840ca74143..e944eb32da 100644 --- a/code/game/objects/structures/beds_chairs/chair.dm +++ b/code/game/objects/structures/beds_chairs/chair.dm @@ -192,6 +192,17 @@ /obj/structure/chair/comfy/lime color = rgb(255,251,0) +/obj/structure/chair/comfy/plywood + name = "plywood chair" + desc = "A relaxing plywood chair." + icon_state = "plywood_chair" + anchored = FALSE + buildstacktype = /obj/item/stack/sheet/mineral/wood + buildstackamount = 4 + +/obj/structure/chair/comfy/plywood/GetArmrest() + return mutable_appearance('icons/obj/chairs.dmi', "plywood_chair_armrest") + /obj/structure/chair/comfy/shuttle name = "shuttle seat" desc = "A comfortable, secure seat. It has a more sturdy looking buckling system, for smoother flights." diff --git a/code/game/objects/structures/fluff.dm b/code/game/objects/structures/fluff.dm index d9a4406acd..baf0cf312f 100644 --- a/code/game/objects/structures/fluff.dm +++ b/code/game/objects/structures/fluff.dm @@ -70,6 +70,13 @@ desc = "A towering basalt sculpture of a drake. Cracks run down its surface and parts of it have fallen off." icon_state = "drake_statue_falling" +/obj/structure/fluff/lightpost + name = "lightpost" + desc = "A homely lightpost adorned with festive decor." + icon = 'icons/obj/2x2.dmi' + icon_state = "lightpost" + deconstructible = FALSE + layer = EDGED_TURF_LAYER /obj/structure/fluff/bus name = "bus" @@ -167,3 +174,11 @@ desc = "A crudely-made sign with the words 'fok of' written in some sort of red paint." icon = 'icons/obj/fluff.dmi' icon_state = "fokof" + +/obj/structure/fluff/snowlegion + name = "snowlegion" + desc = "Looks like that weird kid with the tiger plushie has been round here again." + icon = 'icons/obj/fluff.dmi' + icon_state = "snowlegion" + anchored = TRUE + deconstructible = FALSE diff --git a/code/game/objects/structures/mineral_doors.dm b/code/game/objects/structures/mineral_doors.dm index 3c9b70e967..13ca421daa 100644 --- a/code/game/objects/structures/mineral_doors.dm +++ b/code/game/objects/structures/mineral_doors.dm @@ -223,6 +223,16 @@ max_integrity = 200 rad_insulation = RAD_VERY_LIGHT_INSULATION +/obj/structure/mineral_door/woodrustic + name = "rustic wood door" + icon_state = "woodrustic" + openSound = 'sound/effects/doorcreaky.ogg' + closeSound = 'sound/effects/doorcreaky.ogg' + sheetType = /obj/item/stack/sheet/mineral/wood + sheetAmount = 10 + max_integrity = 200 + rad_insulation = RAD_VERY_LIGHT_INSULATION + /obj/structure/mineral_door/paperframe name = "paper frame door" icon_state = "paperframe" diff --git a/code/game/objects/structures/signs/signs_maps.dm b/code/game/objects/structures/signs/signs_maps.dm index 8468516502..f3188b90c2 100644 --- a/code/game/objects/structures/signs/signs_maps.dm +++ b/code/game/objects/structures/signs/signs_maps.dm @@ -45,3 +45,12 @@ name = "command department" desc = "A direction sign, pointing out which way the Command department is." icon_state = "direction_bridge" + +/obj/structure/sign/directions/bar + name = "bar" + desc = "A direction sign, pointing out which way the Bar is." + icon_state = "direction_bar" + /obj/structure/sign/directions/cafe + name = "cafe" + desc = "A direction sign, pointing out which way the Cafe is." + icon_state = "direction_cafe" diff --git a/code/game/turfs/closed.dm b/code/game/turfs/closed.dm index 2165dbd8db..bcffd728c6 100644 --- a/code/game/turfs/closed.dm +++ b/code/game/turfs/closed.dm @@ -49,6 +49,14 @@ baseturfs = /turf/closed/indestructible/sandstone smooth = SMOOTH_TRUE +/turf/closed/indestructible/wood + name = "wooden wall" + desc = "A wall with wooden plating. Stiff." + icon = 'icons/turf/walls/wood_wall.dmi' + icon_state = "wood" + baseturfs = /turf/closed/indestructible/wood + smooth = SMOOTH_TRUE + /turf/closed/indestructible/oldshuttle/corner icon_state = "corner" diff --git a/code/game/turfs/open.dm b/code/game/turfs/open.dm index 7aa1183512..659a58b2dc 100644 --- a/code/game/turfs/open.dm +++ b/code/game/turfs/open.dm @@ -49,6 +49,20 @@ if(istype(AM)) playsound(src,sound,50,1) +/turf/open/indestructible/cobble/side + icon_state = "cobble_side" + +/turf/open/indestructible/cobble/corner + icon_state = "cobble_corner" + +/turf/open/indestructible/cobble + name = "cobblestone path" + desc = "A simple but beautiful path made of various sized stones." + icon = 'icons/turf/floors.dmi' + icon_state = "cobble" + baseturfs = /turf/open/indestructible/cobble + tiled_dirt = FALSE + /turf/open/indestructible/necropolis name = "necropolis floor" desc = "It's regarding you suspiciously." diff --git a/code/modules/awaymissions/mission_code/snowdin.dm b/code/modules/awaymissions/mission_code/snowdin.dm index 16ecae7a5f..7cb771737e 100644 --- a/code/modules/awaymissions/mission_code/snowdin.dm +++ b/code/modules/awaymissions/mission_code/snowdin.dm @@ -10,6 +10,10 @@ name = "Snowdin Tundra Plains" icon_state = "awaycontent25" +/area/awaymission/snowdin/outside/vip + name = "Snowdin Tundra Plains" + icon_state = "awaycontent25" + /area/awaymission/snowdin/post name = "Snowdin Outpost" icon_state = "awaycontent2" @@ -116,7 +120,7 @@ name = "Snowdin Main Base" icon_state = "awaycontent16" dynamic_lighting = DYNAMIC_LIGHTING_ENABLED - requires_power = TRUE + requires_power = FALSE /area/awaymission/snowdin/dungeon1 name = "Snowdin Depths" diff --git a/code/modules/holodeck/turfs.dm b/code/modules/holodeck/turfs.dm index 2a36983561..67ae789a1b 100644 --- a/code/modules/holodeck/turfs.dm +++ b/code/modules/holodeck/turfs.dm @@ -122,7 +122,7 @@ /turf/open/floor/holofloor/wood icon_state = "wood" tiled_dirt = FALSE - + /turf/open/floor/holofloor/snow gender = PLURAL name = "snow" @@ -133,6 +133,15 @@ bullet_sizzle = TRUE bullet_bounce_sound = null tiled_dirt = FALSE + baseturfs = /turf/open/floor/holofloor/snow + +/turf/open/floor/holofloor/snow/attack_hand(mob/living/user) + . = ..() + if(.) + return + user.visible_message("[user] scroops up some snow from [src].", "You scoop up some snow from [src].") + var/obj/item/toy/snowball/S = new(get_turf(src)) + user.put_in_hands(S) /turf/open/floor/holofloor/snow/cold initial_gas_mix = "nob=7500;TEMP=2.7" @@ -143,3 +152,25 @@ icon = 'icons/turf/floors.dmi' icon_state = "asteroid" tiled_dirt = FALSE + +/turf/open/floor/holofloor/ice + name = "ice sheet" + desc = "A sheet of solid ice. Looks slippery." + icon = 'icons/turf/floors/ice_turf.dmi' + icon_state = "unsmooth" + baseturfs = /turf/open/floor/holofloor/ice + slowdown = 1 + footstep = FOOTSTEP_FLOOR + barefootstep = FOOTSTEP_HARD_BAREFOOT + clawfootstep = FOOTSTEP_HARD_CLAW + heavyfootstep = FOOTSTEP_GENERIC_HEAVY + +/turf/open/floor/holofloor/ice/smooth + icon_state = "smooth" + smooth = SMOOTH_MORE | SMOOTH_BORDER + canSmoothWith = list(/turf/open/floor/plating/ice/smooth, /turf/open/floor/plating/ice, /turf/open/floor/holofloor/ice) + baseturfs = /turf/open/floor/holofloor/ice/smooth + +/turf/open/floor/holofloor/ice/Initialize() + . = ..() + MakeSlippery(TURF_WET_PERMAFROST, INFINITY, 0, INFINITY, TRUE) diff --git a/icons/obj/2x2.dmi b/icons/obj/2x2.dmi index a72a86f3d8393062ac7df381140bc157ec5cd6b5..c5b1df680a25271552f82aec3dc65a6023765fc3 100644 GIT binary patch literal 25962 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

vf(cGf-?&J7bKwNa@CSk%k$y`ofAY31-?M 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

q>S?*r$i~X(l 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 Xmmt9`)V2(&-b1>Yh8kt+Hevq*a3oad diff --git a/icons/obj/chairs.dmi b/icons/obj/chairs.dmi index 96e4a4228ecade21ad9c71e76e4e453ff00ff76e..3754ff052c08b0210ec481838fec39c2a840e2b3 100644 GIT binary patch literal 33141 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 literal 25121 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 delta 7675 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 q-d?;PmrZSXH%$ZbtMjW23e!T$qku4}~r diff --git a/icons/obj/fluff.dmi b/icons/obj/fluff.dmi index b476d252287ad3ef694a7f4eb4d25392c5343a6c..72edaa05283709e99722682396c6584edc87a23a 100644 GIT binary patch literal 13260 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 literal 12352 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

Q}Nv+MBWauGuhLZPqZE(1qUjb(;KopvW361V4W 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 AVgLXD delta 17679 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 Date: Sun, 16 Dec 2018 03:45:15 -0800 Subject: [PATCH 016/104] shit we don't have --- code/modules/holodeck/turfs.dm | 3 --- 1 file changed, 3 deletions(-) diff --git a/code/modules/holodeck/turfs.dm b/code/modules/holodeck/turfs.dm index 67ae789a1b..a4c89b8874 100644 --- a/code/modules/holodeck/turfs.dm +++ b/code/modules/holodeck/turfs.dm @@ -161,9 +161,6 @@ baseturfs = /turf/open/floor/holofloor/ice slowdown = 1 footstep = FOOTSTEP_FLOOR - barefootstep = FOOTSTEP_HARD_BAREFOOT - clawfootstep = FOOTSTEP_HARD_CLAW - heavyfootstep = FOOTSTEP_GENERIC_HEAVY /turf/open/floor/holofloor/ice/smooth icon_state = "smooth" From 9c16527cd4423f20ef1894283e1524137139b7f2 Mon Sep 17 00:00:00 2001 From: Ignari-Coldstorm <43045900+Ignari-Coldstorm@users.noreply.github.com> Date: Sun, 16 Dec 2018 05:56:21 -0600 Subject: [PATCH 017/104] Mining Vendor and PPKA changes! (#7817) * Mining Vendor and PPKA changes! Adjusted the prices on a couple items as well as added in the pocket extinguisher to the vendor. Adjusted the Premium Proto-Kinetic Accelerator to have one less range. * Update machine_vending.dm --- code/modules/mining/machine_vending.dm | 7 +++++-- .../modules/projectiles/guns/energy/kinetic_accelerator.dm | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm index ca1fd7f9bb..7010d081a5 100644 --- a/code/modules/mining/machine_vending.dm +++ b/code/modules/mining/machine_vending.dm @@ -19,14 +19,16 @@ new /datum/data/mining_equipment("Soap", /obj/item/soap/nanotrasen, 200), new /datum/data/mining_equipment("Laser Pointer", /obj/item/laser_pointer, 300), new /datum/data/mining_equipment("Alien Toy", /obj/item/clothing/mask/facehugger/toy, 300), - new /datum/data/mining_equipment("Stabilizing Serum", /obj/item/hivelordstabilizer, 400), new /datum/data/mining_equipment("Fulton Beacon", /obj/item/fulton_core, 400), new /datum/data/mining_equipment("Shelter Capsule", /obj/item/survivalcapsule, 400), new /datum/data/mining_equipment("GAR Meson Scanners", /obj/item/clothing/glasses/meson/gar, 500), new /datum/data/mining_equipment("Explorer's Webbing", /obj/item/storage/belt/mining, 500), new /datum/data/mining_equipment("Point Transfer Card", /obj/item/card/mining_point_card, 500), + new /datum/data/mining_equipment("Brute First-Aid Kit", /obj/item/storage/firstaid/brute, 600), new /datum/data/mining_equipment("Survival Medipen", /obj/item/reagent_containers/hypospray/medipen/survival, 500), new /datum/data/mining_equipment("Tracking Implant Kit", /obj/item/storage/box/minertracker, 600), + new /datum/data/mining_equipment("Survival Medipen", /obj/item/reagent_containers/hypospray/medipen/survival, 750), + new /datum/data/mining_equipment("Stabilizing Serum", /obj/item/hivelordstabilizer, 750), new /datum/data/mining_equipment("Jaunter", /obj/item/wormhole_jaunter, 750), new /datum/data/mining_equipment("Kinetic Crusher", /obj/item/twohanded/required/kinetic_crusher, 750), new /datum/data/mining_equipment("Kinetic Accelerator", /obj/item/gun/energy/kinetic_accelerator, 750), @@ -35,6 +37,7 @@ new /datum/data/mining_equipment("First-Aid Kit", /obj/item/storage/firstaid/regular, 800), new /datum/data/mining_equipment("Advanced Scanner", /obj/item/t_scanner/adv_mining_scanner, 800), new /datum/data/mining_equipment("Resonator", /obj/item/resonator, 800), + new /datum/data/mining_equipment("Mini Extinguisher", /obj/item/extinguisher/mini, 1000), new /datum/data/mining_equipment("Fulton Pack", /obj/item/extraction_pack, 1000), new /datum/data/mining_equipment("Lazarus Injector", /obj/item/lazarus_injector, 1000), new /datum/data/mining_equipment("Silver Pickaxe", /obj/item/pickaxe/silver, 1000), @@ -315,4 +318,4 @@ new /obj/item/clothing/mask/gas/seva(drop_location) SSblackbox.record_feedback("tally", "suit_voucher_redeemed", 1, selection) - qdel(voucher) \ No newline at end of file + qdel(voucher) diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index ad2949892e..fba355d738 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -50,7 +50,7 @@ damage = 50 damage_type = BRUTE flag = "bomb" - range = 5 + range = 4 log_override = TRUE /obj/item/gun/energy/kinetic_accelerator/premiumka/update_icon() From 8812ef9ddd4bc4dafe719b81acab3c5455c799d8 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Sun, 16 Dec 2018 11:05:26 -0800 Subject: [PATCH 018/104] exemption --- code/modules/jobs/job_types/job.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/jobs/job_types/job.dm b/code/modules/jobs/job_types/job.dm index 16e1ccdfb7..0e1daff5e0 100644 --- a/code/modules/jobs/job_types/job.dm +++ b/code/modules/jobs/job_types/job.dm @@ -127,6 +127,8 @@ return 0 if(!CONFIG_GET(flag/use_age_restriction_for_jobs)) return 0 + if(C.prefs.db_flags & DB_FLAG_EXEMPT) + return 0 if(!isnum(C.player_age)) return 0 //This is only a number if the db connection is established, otherwise it is text: "Requires database", meaning these restrictions cannot be enforced if(!isnum(minimal_player_age)) From c6f11fdf777b5e32879ec1a15ac060357381219b Mon Sep 17 00:00:00 2001 From: Poojawa Date: Mon, 17 Dec 2018 08:41:59 -0600 Subject: [PATCH 019/104] Fixes star trek memes --- .../code/modules/clothing/under/trek_under.dm | 20 ++++++++++-------- .../icons/mob/clothing/trek_mob_icon.dmi | Bin 8965 -> 8961 bytes .../icons/obj/clothing/trek_item_icon.dmi | Bin 0 -> 5381 bytes 3 files changed, 11 insertions(+), 9 deletions(-) create mode 100644 modular_citadel/icons/obj/clothing/trek_item_icon.dmi diff --git a/modular_citadel/code/modules/clothing/under/trek_under.dm b/modular_citadel/code/modules/clothing/under/trek_under.dm index 00f84b7583..ddcf0e6344 100644 --- a/modular_citadel/code/modules/clothing/under/trek_under.dm +++ b/modular_citadel/code/modules/clothing/under/trek_under.dm @@ -11,7 +11,7 @@ /obj/item/clothing/under/rank/trek name = "Section 31 Uniform" desc = "Oooh... right." - icon = 'modular_citadel/icons/mob/clothing/trek_item_icon.dmi' + icon = 'modular_citadel/icons/obj/clothing/trek_item_icon.dmi' alternate_worn_icon = 'modular_citadel/icons/mob/clothing/trek_mob_icon.dmi' item_state = "" can_adjust = FALSE //to prevent you from "wearing it casually" @@ -91,11 +91,12 @@ /obj/item/clothing/suit/storage/trek/ds9 name = "Padded Overcoat" desc = "The overcoat worn by all officers of the 2380s." - icon = 'modular_citadel/icons/mob/clothing/trek_item_icon.dmi' + icon = 'modular_citadel/icons/obj/clothing/trek_item_icon.dmi' icon_state = "trek_ds9_coat" alternate_worn_icon = 'modular_citadel/icons/mob/clothing/trek_mob_icon.dmi' item_state = "trek_ds9_coat" body_parts_covered = CHEST|GROIN|ARMS + mutantrace_variation = NO_MUTANTRACE_VARIATION permeability_coefficient = 0.50 allowed = list( /obj/item/flashlight, /obj/item/analyzer, @@ -136,10 +137,11 @@ name = "Federation Uniform Jacket (Red)" desc = "A uniform jacket from the United Federation. Starfleet still uses this uniform and there are variations of it. Set phasers to awesome." - icon = 'modular_citadel/icons/mob/clothing/trek_item_icon.dmi' + icon = 'modular_citadel/icons/obj/clothing/trek_item_icon.dmi' alternate_worn_icon = 'modular_citadel/icons/mob/clothing/trek_mob_icon.dmi' icon_state = "fedcoat" item_state = "fedcoat" + mutantrace_variation = NO_MUTANTRACE_VARIATION blood_overlay_type = "coat" body_parts_covered = CHEST|GROIN|ARMS @@ -204,7 +206,7 @@ /obj/item/clothing/suit/storage/fluff/modernfedcoat name = "Modern Federation Uniform Jacket" desc = "A modern uniform jacket from the United Federation. Their Starfleet had recently started using these uniforms. Wearing this makes you feel like a competant commander." - icon = 'modular_citadel/icons/mob/clothing/trek_item_icon.dmi' + icon = 'modular_citadel/icons/obj/clothing/trek_item_icon.dmi' alternate_worn_icon = 'modular_citadel/icons/mob/clothing/trek_mob_icon.dmi' icon_state = "fedmodern" item_state = "fedmodern" @@ -237,20 +239,20 @@ /obj/item/clothing/head/caphat/formal/fedcover name = "Federation Officer's Cap" desc = "An officer's cap that demands discipline from the one who wears it." - icon = 'modular_citadel/icons/mob/clothing/trek_item_icon.dmi' + icon = 'modular_citadel/icons/obj/clothing/trek_item_icon.dmi' icon_state = "fedcapofficer" alternate_worn_icon = 'modular_citadel/icons/mob/clothing/trek_mob_icon.dmi' - item_state = "fedcapofficer_mob" + item_state = "fedcapofficer" //Variants /obj/item/clothing/head/caphat/formal/fedcover/medsci icon_state = "fedcapsci" - item_state = "fedcapsci_mob" + item_state = "fedcapsci" /obj/item/clothing/head/caphat/formal/fedcover/eng icon_state = "fedcapeng" - item_state = "fedcapeng_mob" + item_state = "fedcapeng" /obj/item/clothing/head/caphat/formal/fedcover/sec icon_state = "fedcapsec" - item_state = "fedcapsec_mob" + item_state = "fedcapsec" diff --git a/modular_citadel/icons/mob/clothing/trek_mob_icon.dmi b/modular_citadel/icons/mob/clothing/trek_mob_icon.dmi index 9323ea9f3c046bac5c946a909a5c0e6b7ef2ceac..45045b05801e5cdbbef702007ba73a1dc2a9c3b2 100644 GIT binary patch delta 308 zcmV-40n7e{MuA4K$O3;HdQ@0+L}hbha%pgMX>V=-0C=3GmBCH}ArOYo@D!xIHl}X9 zc<^G{m>%paY!GIfJsHKB^#;lR&HVE-*Q3EU zt)+N%wv6?%>7*FJ9mn!{$we2a$3;nS>P_@s2fL8Mx|ETXVn~151D>zHi6I;_7@F3D z&BoER0p1F$_yn-5PXx!)CBCyPp`PUk0gfS?Z+Q(6;7ovez9C(B>Rww<-8SYMBfuFL z^~8Y(utuLLmA{nan$<8-8Hd3cNEEe?7E<_4DaKgxIpX(Vz3RHv<_Gra`33&NH^!pi zjilRnYa#z8`&cL6gA(xkc#tHwnVn(<$xZ5N&5f**%{EK5J8Y+)(+6jM`bG38(F?Qj G0~8;n&YjZ$ delta 312 zcmV-80muGV=-0C=3GmAh^OArM7t_zGmVR^+VH zq(~Flid@9Mu);9wMG0U5@#F8!Y`Q4f%&a?*?wPss5X{x<=54!E>-ViZLCP)$^`f30 zmQtLZEq%SL8Yy~khrWDYa?u6qaaIz1v?hA5gPloXUCPKx(ItQF0nd*=#1IY{3{C67 zX5(nu0GGlFJ^(E11HtihidU8;)UzBRz%gX=GcN%GoC;9SH>3+s-D>Np+s2$R0-S3ZhhQS)y6T@)i^^PyUrO%RKiCKDg31reJuGH@qJh>nr5;3h24LC!99E} z?;d<)rsMe7g8nN{wz1BI(%|XsL6V$iau;#Cs7dO2O>J2vN7KyJX15+bs~gEV0LUYo KrYy7V0~8-)y_i1$ diff --git a/modular_citadel/icons/obj/clothing/trek_item_icon.dmi b/modular_citadel/icons/obj/clothing/trek_item_icon.dmi new file mode 100644 index 0000000000000000000000000000000000000000..4ac77773a0160f2c105f1eaee059a79f65d5b453 GIT binary patch literal 5381 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 p8a0zw Date: Mon, 17 Dec 2018 20:28:04 -0600 Subject: [PATCH 020/104] Fixes duplicate medipen. Fixes a duplicate medipen showing up in vendor list. --- code/modules/mining/machine_vending.dm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm index 7010d081a5..1e77a907c6 100644 --- a/code/modules/mining/machine_vending.dm +++ b/code/modules/mining/machine_vending.dm @@ -25,7 +25,6 @@ new /datum/data/mining_equipment("Explorer's Webbing", /obj/item/storage/belt/mining, 500), new /datum/data/mining_equipment("Point Transfer Card", /obj/item/card/mining_point_card, 500), new /datum/data/mining_equipment("Brute First-Aid Kit", /obj/item/storage/firstaid/brute, 600), - new /datum/data/mining_equipment("Survival Medipen", /obj/item/reagent_containers/hypospray/medipen/survival, 500), new /datum/data/mining_equipment("Tracking Implant Kit", /obj/item/storage/box/minertracker, 600), new /datum/data/mining_equipment("Survival Medipen", /obj/item/reagent_containers/hypospray/medipen/survival, 750), new /datum/data/mining_equipment("Stabilizing Serum", /obj/item/hivelordstabilizer, 750), @@ -34,7 +33,7 @@ new /datum/data/mining_equipment("Kinetic Accelerator", /obj/item/gun/energy/kinetic_accelerator, 750), new /datum/data/mining_equipment("Brute First-Aid Kit", /obj/item/storage/firstaid/brute, 800), new /datum/data/mining_equipment("Burn First-Aid Kit", /obj/item/storage/firstaid/fire, 800), - new /datum/data/mining_equipment("First-Aid Kit", /obj/item/storage/firstaid/regular, 800), + new /datum/data/mining_equipment("First-Aid Kit", /obj/item/storage/firstaid/regular, 800), new /datum/data/mining_equipment("Advanced Scanner", /obj/item/t_scanner/adv_mining_scanner, 800), new /datum/data/mining_equipment("Resonator", /obj/item/resonator, 800), new /datum/data/mining_equipment("Mini Extinguisher", /obj/item/extinguisher/mini, 1000), From b079a5e8df19357adfb4af771b3434202dcdc645 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Tue, 18 Dec 2018 18:06:04 -0800 Subject: [PATCH 021/104] Update toolbox.dm --- code/game/objects/items/storage/toolbox.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/objects/items/storage/toolbox.dm b/code/game/objects/items/storage/toolbox.dm index c28f7e2aaa..0a02cc0d4c 100644 --- a/code/game/objects/items/storage/toolbox.dm +++ b/code/game/objects/items/storage/toolbox.dm @@ -89,9 +89,9 @@ if(proximity) if(isobj(A)) var/obj/machinery/door/O = A - if(istype(O) && (O.damage_deflection >= 18)) //Eh fine. //This is a meme cast do not do what I did! + if(istype(O) && (O.damage_deflection >= 10)) //Eh fine. //This is a meme cast do not do what I did! return - O.take_damage(20) + O.take_damage(13) /obj/item/storage/toolbox/mechanical/old/heirloom/PopulateContents() return From a47426ef48b5b02984e34cfa64d772539aa67544 Mon Sep 17 00:00:00 2001 From: Trilbyspaceclone <30435998+Trilbyspaceclone@users.noreply.github.com> Date: Wed, 19 Dec 2018 00:25:40 -0500 Subject: [PATCH 022/104] Makes pinapple pizza eatable (#7821) >Not just removing it --- code/modules/food_and_drinks/food/snacks_pizza.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/modules/food_and_drinks/food/snacks_pizza.dm b/code/modules/food_and_drinks/food/snacks_pizza.dm index a6b026ac30..5bf5abacb0 100644 --- a/code/modules/food_and_drinks/food/snacks_pizza.dm +++ b/code/modules/food_and_drinks/food/snacks_pizza.dm @@ -149,16 +149,16 @@ icon_state = "pineapplepizza" slice_path = /obj/item/reagent_containers/food/snacks/pizzaslice/pineapple bonus_reagents = list("nutriment" = 6, "vitamin" = 6) - tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1, "pineapple" = 2, "ham" = 2) - foodtype = GRAIN | VEGETABLES | DAIRY | MEAT | FRUIT | PINEAPPLE + tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1, "pineapple" = 6, "ham" = 2) + foodtype = PINEAPPLE //Over powering tast of gods fruit /obj/item/reagent_containers/food/snacks/pizzaslice/pineapple name = "\improper Hawaiian pizza slice" desc = "A slice of delicious controversy." icon_state = "pineapplepizzaslice" filling_color = "#FF4500" - tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1, "pineapple" = 2, "ham" = 2) - foodtype = GRAIN | VEGETABLES | DAIRY | MEAT | FRUIT | PINEAPPLE + tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1, "pineapple" = 6, "ham" = 2) + foodtype = PINEAPPLE //Over powering tast of gods fruit /obj/item/reagent_containers/food/snacks/pizza/arnold name = "\improper Arnold pizza" From 5f0462b604f307c29f6cc832a4bed039bead1aae Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Thu, 20 Dec 2018 01:00:36 -0800 Subject: [PATCH 023/104] Update river.dm --- code/game/turfs/simulated/river.dm | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/code/game/turfs/simulated/river.dm b/code/game/turfs/simulated/river.dm index e451fe4892..83fade33b2 100644 --- a/code/game/turfs/simulated/river.dm +++ b/code/game/turfs/simulated/river.dm @@ -4,11 +4,14 @@ #define RANDOM_LOWER_X 50 #define RANDOM_LOWER_Y 50 +#define RIVERGEN_SAFETY_LOCK 1000000 + /proc/spawn_rivers(target_z, nodes = 4, turf_type = /turf/open/lava/smooth/lava_land_surface, whitelist_area = /area/lavaland/surface/outdoors/unexplored, min_x = RANDOM_LOWER_X, min_y = RANDOM_LOWER_Y, max_x = RANDOM_UPPER_X, max_y = RANDOM_UPPER_Y) var/list/river_nodes = list() var/num_spawned = 0 var/list/possible_locs = block(locate(min_x, min_y, target_z), locate(max_x, max_y, target_z)) - while(num_spawned < nodes && possible_locs.len) + var/safety = 0 + while(num_spawned < nodes && possible_locs.len && (safety++ < RIVERGEN_SAFETY_LOCK)) var/turf/T = pick(possible_locs) var/area/A = get_area(T) if(!istype(A, whitelist_area) || (T.flags_1 & NO_LAVA_GEN_1)) @@ -16,7 +19,8 @@ else river_nodes += new /obj/effect/landmark/river_waypoint(T) num_spawned++ - + + safety = 0 //make some randomly pathing rivers for(var/A in river_nodes) var/obj/effect/landmark/river_waypoint/W = A @@ -30,7 +34,7 @@ break var/detouring = 0 var/cur_dir = get_dir(cur_turf, target_turf) - while(cur_turf != target_turf) + while(cur_turf != target_turf && (safety++ < RIVERGEN_SAFETY_LOCK)) if(detouring) //randomly snake around a bit if(prob(20)) From f50b839c252c65c740991086bb8671acff16784b Mon Sep 17 00:00:00 2001 From: BlackMajor Date: Thu, 20 Dec 2018 22:04:51 +1300 Subject: [PATCH 024/104] Wizard objectives are shit and nobody follows them anyway. (#7835) * Update wizard.dm * Update wizard.dm * Update wizard.dm --- code/modules/antagonists/wizard/wizard.dm | 49 +++-------------------- 1 file changed, 6 insertions(+), 43 deletions(-) diff --git a/code/modules/antagonists/wizard/wizard.dm b/code/modules/antagonists/wizard/wizard.dm index 6fac9730f3..e6cae518b6 100644 --- a/code/modules/antagonists/wizard/wizard.dm +++ b/code/modules/antagonists/wizard/wizard.dm @@ -60,50 +60,13 @@ owner.current.forceMove(pick(GLOB.wizardstart)) /datum/antagonist/wizard/proc/create_objectives() - switch(rand(1,100)) - if(1 to 30) - var/datum/objective/assassinate/kill_objective = new - kill_objective.owner = owner - kill_objective.find_target() - objectives += kill_objective + var/datum/objective/new_objective = new("Cause as much creative mayhem as you can aboard the station! The more outlandish your methods of achieving this, the better! Make sure there's a decent amount of crew alive to tell of your tale.") + new_objective.owner = owner + objectives += new_objective - if (!(locate(/datum/objective/escape) in owner.objectives)) - var/datum/objective/escape/escape_objective = new - escape_objective.owner = owner - objectives += escape_objective - - if(31 to 60) - var/datum/objective/steal/steal_objective = new - steal_objective.owner = owner - steal_objective.find_target() - objectives += steal_objective - - if (!(locate(/datum/objective/escape) in owner.objectives)) - var/datum/objective/escape/escape_objective = new - escape_objective.owner = owner - objectives += escape_objective - - if(61 to 85) - var/datum/objective/assassinate/kill_objective = new - kill_objective.owner = owner - kill_objective.find_target() - objectives += kill_objective - - var/datum/objective/steal/steal_objective = new - steal_objective.owner = owner - steal_objective.find_target() - objectives += steal_objective - - if (!(locate(/datum/objective/survive) in owner.objectives)) - var/datum/objective/survive/survive_objective = new - survive_objective.owner = owner - objectives += survive_objective - - else - if (!(locate(/datum/objective/hijack) in owner.objectives)) - var/datum/objective/hijack/hijack_objective = new - hijack_objective.owner = owner - objectives += hijack_objective + var/datum/objective/escape/escape_objective = new + escape_objective.owner = owner + objectives += escape_objective for(var/datum/objective/O in objectives) owner.objectives += O From 4a63be40e56dc344309a04e1ada08aaed1c2607a Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Fri, 21 Dec 2018 18:53:49 -0800 Subject: [PATCH 025/104] Update who.dm --- .../code/modules/client/verbs/who.dm | 28 +++++++++++-------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/modular_citadel/code/modules/client/verbs/who.dm b/modular_citadel/code/modules/client/verbs/who.dm index 091dd7bf79..8000e80f84 100644 --- a/modular_citadel/code/modules/client/verbs/who.dm +++ b/modular_citadel/code/modules/client/verbs/who.dm @@ -28,28 +28,37 @@ var/msg = "" var/list/Lines = list() + var/list/assembled = list() + var/admin_mode = check_rights_for(src, R_ADMIN) && isobserver(mob) + if(admin_mode) + log_admin("[key_name(usr)] checked advanced who in-round") if(length(GLOB.admins)) Lines += "Admins:" for(var/X in GLOB.admins) var/client/C = X if(C && C.holder && !C.holder.fakekey) - Lines += "\t [C.key][show_admin_info(C)] ([round(C.avgping, 1)]ms)" + assembled += "\t [C.key][admin_mode? "[show_admin_info(C)]":""] ([round(C.avgping, 1)]ms)" + Lines += sortList(assembled) + assembled.len = 0 if(length(GLOB.mentors)) - Lines += "Mentors:" + Lines += "Mentors:"https://github.com/Citadel-Station-13/Citadel-Station-13 for(var/X in GLOB.mentors) var/client/C = X - if(C) - Lines += "\t [C.key][show_admin_info(C)] ([round(C.avgping, 1)]ms)" - + if(C && (!C.holder || (C.holder && !C.holder.fakekey))) //>using stuff this complex instead of just using if/else lmao + assembled += "\t [C.key][admin_mode? "[show_admin_info(C)]":""] ([round(C.avgping, 1)]ms)" + Lines += sortList(assembled) + assembled.len = 0 Lines += "Players:" for(var/X in sortList(GLOB.clients)) var/client/C = X - if(!C) continue + if(!C) + continue var/key = C.key if(C.holder && C.holder.fakekey) key = C.holder.fakekey - Lines += "\t [key][show_admin_info(C)] ([round(C.avgping, 1)]ms)" - + assembled += "\t [key][admin_mode? "[show_admin_info(C)]":""] ([round(C.avgping, 1)]ms)" + Lines += sortList(assembled) + for(var/line in Lines) msg += "[line]\n" @@ -60,9 +69,6 @@ if(!C) return "" - if(!check_rights_for(src, R_ADMIN)) - return "" - var/entry = "" if(C.holder && C.holder.fakekey) entry += " (as [C.holder.fakekey])" From 721dd82c948c22ddcc670559aa6779305605fd84 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Fri, 21 Dec 2018 19:08:53 -0800 Subject: [PATCH 026/104] Update who.dm --- modular_citadel/code/modules/client/verbs/who.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modular_citadel/code/modules/client/verbs/who.dm b/modular_citadel/code/modules/client/verbs/who.dm index 8000e80f84..7640595e18 100644 --- a/modular_citadel/code/modules/client/verbs/who.dm +++ b/modular_citadel/code/modules/client/verbs/who.dm @@ -41,7 +41,7 @@ Lines += sortList(assembled) assembled.len = 0 if(length(GLOB.mentors)) - Lines += "Mentors:"https://github.com/Citadel-Station-13/Citadel-Station-13 + Lines += "Mentors:" for(var/X in GLOB.mentors) var/client/C = X if(C && (!C.holder || (C.holder && !C.holder.fakekey))) //>using stuff this complex instead of just using if/else lmao From 451dd8948add028823d3cb2e9adfb881536edb31 Mon Sep 17 00:00:00 2001 From: Trilbyspaceclone <30435998+Trilbyspaceclone@users.noreply.github.com> Date: Sat, 22 Dec 2018 11:22:48 -0500 Subject: [PATCH 027/104] Update bio.dm --- code/modules/clothing/suits/bio.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/clothing/suits/bio.dm b/code/modules/clothing/suits/bio.dm index cbc8f33e3a..d4a382ef3f 100644 --- a/code/modules/clothing/suits/bio.dm +++ b/code/modules/clothing/suits/bio.dm @@ -5,7 +5,7 @@ desc = "A hood that protects the head and face from biological contaminants." permeability_coefficient = 0.01 clothing_flags = THICKMATERIAL | BLOCK_GAS_SMOKE_EFFECT - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 80, "fire" = 30, "acid" = 100) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 45, "fire" = 30, "acid" = 100) flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEHAIR|HIDEFACIALHAIR|HIDEFACE resistance_flags = ACID_PROOF flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH @@ -22,7 +22,7 @@ body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS slowdown = 1 allowed = list(/obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/pen, /obj/item/flashlight/pen, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray) - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 80, "fire" = 30, "acid" = 100) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 45, "fire" = 30, "acid" = 100) flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAUR strip_delay = 70 equip_delay_other = 70 From 687bbb13976aaab02dca7720e99b63742ee09987 Mon Sep 17 00:00:00 2001 From: Trilbyspaceclone <30435998+Trilbyspaceclone@users.noreply.github.com> Date: Sat, 22 Dec 2018 11:36:20 -0500 Subject: [PATCH 028/104] makes them = --- code/modules/clothing/suits/bio.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/clothing/suits/bio.dm b/code/modules/clothing/suits/bio.dm index d4a382ef3f..6d9a02e05a 100644 --- a/code/modules/clothing/suits/bio.dm +++ b/code/modules/clothing/suits/bio.dm @@ -5,7 +5,7 @@ desc = "A hood that protects the head and face from biological contaminants." permeability_coefficient = 0.01 clothing_flags = THICKMATERIAL | BLOCK_GAS_SMOKE_EFFECT - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 45, "fire" = 30, "acid" = 100) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 60, "fire" = 30, "acid" = 100) flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEHAIR|HIDEFACIALHAIR|HIDEFACE resistance_flags = ACID_PROOF flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH @@ -22,7 +22,7 @@ body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS slowdown = 1 allowed = list(/obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/pen, /obj/item/flashlight/pen, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray) - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 45, "fire" = 30, "acid" = 100) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 60, "fire" = 30, "acid" = 100) flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAUR strip_delay = 70 equip_delay_other = 70 From 2de19690e28294aa26a3bed379ddbb14a488535a Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Sun, 23 Dec 2018 11:53:10 -0800 Subject: [PATCH 029/104] SDQL2 upgrades! --- code/__DEFINES/_tick.dm | 5 +- code/__DEFINES/flags.dm | 5 + code/__HELPERS/time.dm | 115 +- code/modules/admin/verbs/SDQL2/SDQL_2.dm | 1217 ++++++++++++----- .../admin/verbs/SDQL2/SDQL_2_parser.dm | 403 ++++-- .../admin/verbs/SDQL2/SDQL_2_wrappers.dm | 7 +- code/modules/mob/mob.dm | 7 +- 7 files changed, 1251 insertions(+), 508 deletions(-) diff --git a/code/__DEFINES/_tick.dm b/code/__DEFINES/_tick.dm index 20eb648fe6..10b815e547 100644 --- a/code/__DEFINES/_tick.dm +++ b/code/__DEFINES/_tick.dm @@ -7,4 +7,7 @@ #define TICK_USAGE_REAL world.tick_usage //to be used where the result isn't checked #define TICK_CHECK ( TICK_USAGE > Master.current_ticklimit ) -#define CHECK_TICK if TICK_CHECK stoplag() +#define CHECK_TICK ( TICK_CHECK ? stoplag() : 0 ) + +#define TICK_CHECK_HIGH_PRIORITY ( TICK_USAGE > 95 ) +#define CHECK_TICK_HIGH_PRIORITY ( TICK_CHECK_HIGH_PRIORITY? stoplag() : 0 ) diff --git a/code/__DEFINES/flags.dm b/code/__DEFINES/flags.dm index 1b64ce7e6c..ad9aef5a8b 100644 --- a/code/__DEFINES/flags.dm +++ b/code/__DEFINES/flags.dm @@ -4,6 +4,11 @@ #define ALL (~0) //For convenience. #define NONE 0 +//for convenience +#define ENABLE_BITFIELD(variable, flag) (variable |= (flag)) +#define DISABLE_BITFIELD(variable, flag) (variable &= ~(flag)) +#define CHECK_BITFIELD(variable, flag) (variable & flag) + GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768)) // for /datum/var/datum_flags diff --git a/code/__HELPERS/time.dm b/code/__HELPERS/time.dm index 3ffb583332..aaf7ced922 100644 --- a/code/__HELPERS/time.dm +++ b/code/__HELPERS/time.dm @@ -63,96 +63,29 @@ GLOBAL_VAR_INIT(rollovercheck_last_timeofday, 0) //Takes a value of time in deciseconds. //Returns a text value of that number in hours, minutes, or seconds. -/proc/DisplayTimeText(time_value, truncate = FALSE) - var/second = (time_value)*0.1 - var/second_adjusted = null - var/second_rounded = FALSE - var/minute = null - var/hour = null - var/day = null - +/proc/DisplayTimeText(time_value, round_seconds_to = 0.1) + var/second = round(time_value * 0.1, round_seconds_to) if(!second) - return "0 seconds" - if(second >= 60) - minute = FLOOR(second/60, 1) - second = round(second - (minute*60), 0.1) - second_rounded = TRUE - if(second) //check if we still have seconds remaining to format, or if everything went into minute. - second_adjusted = round(second) //used to prevent '1 seconds' being shown - if(day || hour || minute) - if(second_adjusted == 1 && second >= 1) - second = " and 1 second" - else if(second > 1) - second = " and [second_adjusted] seconds" - else //shows a fraction if seconds is < 1 - if(second_rounded) //no sense rounding again if it's already done - second = " and [second] seconds" - else - second = " and [round(second, 0.1)] seconds" - else - if(second_adjusted == 1 && second >= 1) - second = "[truncate ? "second" : "1 second"]" - else if(second > 1) - second = "[second_adjusted] seconds" - else - if(second_rounded) - second = "[second] seconds" - else - second = "[round(second, 0.1)] seconds" - else - second = null - - if(!minute) - return "[second]" - if(minute >= 60) - hour = FLOOR(minute/60, 1) - minute = (minute - (hour*60)) - if(minute) //alot simpler from here since you don't have to worry about fractions - if(minute != 1) - if((day || hour) && second) - minute = ", [minute] minutes" - else if((day || hour) && !second) - minute = " and [minute] minutes" - else - minute = "[minute] minutes" - else - if((day || hour) && second) - minute = ", 1 minute" - else if((day || hour) && !second) - minute = " and 1 minute" - else - minute = "[truncate ? "minute" : "1 minute"]" - else - minute = null - - if(!hour) - return "[minute][second]" - if(hour >= 24) - day = FLOOR(hour/24, 1) - hour = (hour - (day*24)) + return "right now" + if(second < 60) + return "[second] second[(second != 1)? "s":""]" + var/minute = FLOOR(second / 60, 1) + second = MODULUS(second, 60) + var/secondT + if(second) + secondT = " and [second] second[(second != 1)? "s":""]" + if(minute < 60) + return "[minute] minute[(minute != 1)? "s":""][secondT]" + var/hour = FLOOR(minute / 60, 1) + minute = MODULUS(minute, 60) + var/minuteT + if(minute) + minuteT = " and [minute] minute[(minute != 1)? "s":""]" + if(hour < 24) + return "[hour] hour[(hour != 1)? "s":""][minuteT][secondT]" + var/day = FLOOR(hour / 24, 1) + hour = MODULUS(hour, 24) + var/hourT if(hour) - if(hour != 1) - if(day && (minute || second)) - hour = ", [hour] hours" - else if(day && (!minute || !second)) - hour = " and [hour] hours" - else - hour = "[hour] hours" - else - if(day && (minute || second)) - hour = ", 1 hour" - else if(day && (!minute || !second)) - hour = " and 1 hour" - else - hour = "[truncate ? "hour" : "1 hour"]" - else - hour = null - - if(!day) - return "[hour][minute][second]" - if(day > 1) - day = "[day] days" - else - day = "[truncate ? "day" : "1 day"]" - - return "[day][hour][minute][second]" + hourT = " and [hour] hour[(hour != 1)? "s":""]" + return "[day] day[(day != 1)? "s":""][hourT][minuteT][secondT]" diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2.dm b/code/modules/admin/verbs/SDQL2/SDQL_2.dm index 603e4daf2d..06a1362b38 100644 --- a/code/modules/admin/verbs/SDQL2/SDQL_2.dm +++ b/code/modules/admin/verbs/SDQL2/SDQL_2.dm @@ -1,23 +1,195 @@ -// Code taken from /bay/station. -// Modified to allow consequtive querys in one invocation, terminated with ";" +#define SDQL_qdel_datum(d) qdel(d) + +//SDQL2 datumized, /tg/station special! -// Examples /* - -- Will call the proc for all computers in the world, thats dir is 2. - CALL ex_act(EXPLODE_DEVASTATE) ON /obj/machinery/computer IN world WHERE dir == 2 - -- Will open a window with a list of all the closets in the world, with a link to VV them. - SELECT /obj/structure/closet/secure_closet/security/cargo IN world WHERE icon_off == "secoff" - -- Will change all the tube lights to green - UPDATE /obj/machinery/light IN world SET color = "#0F0" WHERE icon_state == "tube1" - -- Will delete all pickaxes. "IN world" is not required. - DELETE /obj/item/pickaxe - -- Will flicker the lights once, then turn all mobs green. The semicolon is important to separate the consecutive querys, but is not required for standard one-query use - CALL flicker(1) ON /obj/machinery/light; UPDATE /mob SET color = "#00cc00" + Welcome admins, badmins and coders alike, to Structured Datum Query Language. + SDQL allows you to powerfully run code on batches of objects (or single objects, it's still unmatched + even there.) + When I say "powerfully" I mean it you're in for a ride. - --You can use operators other than ==, such as >, <=, != and etc.. + Ok so say you want to get a list of every mob. How does one do this? + "SELECT /mob" + This will open a list of every object in world that is a /mob. + And you can VV them if you need. + + What if you want to get every mob on a *specific z-level*? + "SELECT /mob WHERE z == 4" + + What if you want to select every mob on even numbered z-levels? + "SELECT /mob WHERE z % 2 == 0" + + Can you see where this is going? You can select objects with an arbitrary expression. + These expressions can also do variable access and proc calls (yes, both on-object and globals!) + Keep reading! + + Ok. What if you want to get every machine in the SSmachine process list? Looping through world is kinda + slow. + + "SELECT * IN SSmachines.machinery" + + Here "*" as type functions as a wildcard. + We know everything in the global SSmachines.machinery list is a machine. + + You can specify "IN " to return a list to operate on. + This can be any list that you can wizard together from global variables and global proc calls. + Every variable/proc name in the "IN" block is global. + It can also be a single object, in which case the object is wrapped in a list for you. + So yeah SDQL is unironically better than VV for complex single-object operations. + + You can of course combine these. + "SELECT * IN SSmachines.machinery WHERE z == 4" + "SELECT * IN SSmachines.machinery WHERE stat & 2" // (2 is NOPOWER, can't use defines from SDQL. Sorry!) + "SELECT * IN SSmachines.machinery WHERE stat & 2 && z == 4" + + The possibilities are endless (just don't crash the server, ok?). + + Oh it gets better. + + You can use "MAP " to run some code per object and use the result. For example: + + "SELECT /obj/machinery/power/smes MAP [charge / capacity * 100, RCon_tag, src]" + + This will give you a list of all the APCs, their charge AND RCon tag. Useful eh? + + [] being a list here. Yeah you can write out lists directly without > lol lists in VV. Color matrix + shenanigans inbound. + + After the "MAP" segment is executed, the rest of the query executes as if it's THAT object you just made + (here the list). + Yeah, by the way, you can chain these MAP / WHERE things FOREVER! + + "SELECT /mob WHERE client MAP client WHERE holder MAP holder" + + What if some dumbass admin spawned a bajillion spiders and you need to kill them all? + Oh yeah you'd rather not delete all the spiders in maintenace. Only that one room the spiders were + spawned in. + + "DELETE /mob/living/carbon/superior_animal/giant_spider WHERE loc.loc == marked" + + Here I used VV to mark the area they were in, and since loc.loc = area, voila. + Only the spiders in a specific area are gone. + + Or you know if you want to catch spiders that crawled into lockers too (how even?) + + "DELETE /mob/living/carbon/superior_animal/giant_spider WHERE global.get_area(src) == marked" + + What else can you do? + + Well suppose you'd rather gib those spiders instead of simply flat deleting them... + + "CALL gib() ON /mob/living/carbon/superior_animal/giant_spider WHERE global.get_area(src) == marked" + + Or you can have some fun.. + + "CALL forceMove(marked) ON /mob/living/carbon/superior_animal" + + You can also run multiple queries sequentially: + + "CALL forceMove(marked) ON /mob/living/carbon/superior_animal; CALL gib() ON + /mob/living/carbon/superior_animal" + + And finally, you can directly modify variables on objects. + + "UPDATE /mob WHERE client SET client.color = [0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0]" + + Don't crash the server, OK? + + A quick recommendation: before you run something like a DELETE or another query.. Run it through SELECT + first. + You'd rather not gib every player on accident. + Or crash the server. + + By the way, queries are slow and take a while. Be patient. + They don't hang the entire server though. + + With great power comes great responsability. + + Here's a slightly more formal quick reference. + + The 4 queries you can do are: + + "SELECT " + "CALL ON " + "UPDATE SET var=,var2=" + "DELETE " + + "" in this context is " [IN ] [chain of MAP/WHERE modifiers]" + + "IN" (or "FROM", that works too but it's kinda weird to read), + is the list of objects to work on. This defaults to world if not provided. + But doing something like "IN living_mob_list" is quite handy and can optimize your query. + All names inside the IN block are global scope, so you can do living_mob_list (a global var) easily. + You can also run it on a single object. Because SDQL is that convenient even for single operations. + + filters out objects of, well, that type easily. "*" is a wildcard and just takes everything in + the source list. + + And then there's the MAP/WHERE chain. + These operate on each individual object being ran through the query. + They're both expressions like IN, but unlike it the expression is scoped *on the object*. + So if you do "WHERE z == 4", this does "src.z", effectively. + If you want to access global variables, you can do `global.living_mob_list`. + Same goes for procs. + + MAP "changes" the object into the result of the expression. + WHERE "drops" the object if the expression is falsey (0, null or "") + + What can you do inside expressions? + + * Proc calls + * Variable reads + * Literals (numbers, strings, type paths, etc...) + * \ref referencing: {0x30000cc} grabs the object with \ref [0x30000cc] + * Lists: [a, b, c] or [a: b, c: d] + * Math and stuff. + * A few special variables: src (the object currently scoped on), usr (your mob), + marked (your marked datum), global(global scope) + + TG ADDITIONS START: + Add USING keyword to the front of the query to use options system + The defaults aren't necessarily implemented, as there is no need to. + Available options: (D) means default + PROCCALL = (D)ASYNC, BLOCKING + SELECT = FORCE_NULLS, (D)SKIP_NULLS + PRIORITY = HIGH, (D) NORMAL + AUTOGC = (D) AUTOGC, KEEP_ALIVE + + Example: USING PROCCALL = BLOCKING, SELECT = FORCE_NULLS, PRIORITY = HIGH SELECT /mob FROM world WHERE z == 1 */ + +#define SDQL2_STATE_ERROR 0 +#define SDQL2_STATE_IDLE 1 +#define SDQL2_STATE_PRESEARCH 2 +#define SDQL2_STATE_SEARCHING 3 +#define SDQL2_STATE_EXECUTING 4 +#define SDQL2_STATE_SWITCHING 5 +#define SDQL2_STATE_HALTING 6 + +#define SDQL2_VALID_OPTION_TYPES list("proccall", "select", "priority", "autogc") +#define SDQL2_VALID_OPTION_VALUES list("async", "blocking", "force_nulls", "skip_nulls", "high", "normal", "keep_alive") + +#define SDQL2_OPTION_SELECT_OUTPUT_SKIP_NULLS (1<<0) +#define SDQL2_OPTION_BLOCKING_CALLS (1<<1) +#define SDQL2_OPTION_HIGH_PRIORITY (1<<2) //High priority SDQL query, allow using almost all of the tick. +#define SDQL2_OPTION_DO_NOT_AUTOGC (1<<3) + +#define SDQL2_OPTIONS_DEFAULT (SDQL2_OPTION_SELECT_OUTPUT_SKIP_NULLS) + +#define SDQL2_IS_RUNNING (state == SDQL2_STATE_EXECUTING || state == SDQL2_STATE_SEARCHING || state == SDQL2_STATE_SWITCHING || state == SDQL2_STATE_PRESEARCH) +#define SDQL2_HALT_CHECK if(!SDQL2_IS_RUNNING) {state = SDQL2_STATE_HALTING; return FALSE;}; + +#define SDQL2_TICK_CHECK ((options & SDQL2_OPTION_HIGH_PRIORITY)? CHECK_TICK_HIGH_PRIORITY : CHECK_TICK) + +#define SDQL2_STAGE_SWITCH_CHECK if(state != SDQL2_STATE_SWITCHING){\ + if(state == SDQL2_STATE_HALTING){\ + state = SDQL2_STATE_IDLE;\ + return FALSE}\ + state = SDQL2_STATE_ERROR;\ + CRASH("SDQL2 fatal error");}; + /client/proc/SDQL2_query(query_text as message) set category = "Debug" if(!check_rights(R_DEBUG)) //Shouldn't happen... but just to be safe. @@ -25,139 +197,685 @@ log_admin("Non-admin [key_name(usr)] attempted to execute a SDQL query!") return FALSE var/list/results = world.SDQL2_query(query_text, key_name_admin(usr), "[key_name(usr)]") - for(var/I in 1 to 3) - to_chat(usr, results[I]) + if(length(results) == 3) + for(var/I in 1 to 3) + to_chat(usr, results[I]) SSblackbox.record_feedback("nested tally", "SDQL query", 1, list(ckey, query_text)) /world/proc/SDQL2_query(query_text, log_entry1, log_entry2) - var/query_log = "executed SDQL query: \"[query_text]\"." + var/query_log = "executed SDQL query(s): \"[query_text]\"." message_admins("[log_entry1] [query_log]") query_log = "[log_entry2] [query_log]" log_game(query_log) NOTICE(query_log) + + var/start_time_total = REALTIMEOFDAY + + if(!length(query_text)) + return + var/list/query_list = SDQL2_tokenize(query_text) + if(!length(query_list)) + return + var/list/querys = SDQL_parse(query_list) + if(!length(querys)) + return + var/list/datum/SDQL2_query/running = list() + for(var/list/query_tree in querys) + var/datum/SDQL2_query/query = new /datum/SDQL2_query(query_tree) + if(QDELETED(query)) + continue + running += query + var/msg = "Starting query #[query.id] - [query.get_query_text()]." + if(usr) + to_chat(usr, "[msg]") + log_admin(msg) + query.ARun() + var/finished = FALSE var/objs_all = 0 var/objs_eligible = 0 - var/start_time = REALTIMEOFDAY - - if(!query_text || length(query_text) < 1) - return - - - var/list/query_list = SDQL2_tokenize(query_text) - - if(!query_list || query_list.len < 1) - return - - var/list/querys = SDQL_parse(query_list) - - - if(!querys || querys.len < 1) - return - - var/list/refs = list() - var/where_used = FALSE - for(var/list/query_tree in querys) - var/list/from_objs = list() - var/list/select_types = list() - - switch(query_tree[1]) - if("explain") - SDQL_testout(query_tree["explain"]) - return - - if("call") - if("on" in query_tree) - select_types = query_tree["on"] + var/selectors_used = FALSE + var/list/combined_refs = list() + do + CHECK_TICK + finished = TRUE + for(var/i in running) + var/datum/SDQL2_query/query = i + if(QDELETED(query)) + running -= query + continue + else if(query.state != SDQL2_STATE_IDLE) + finished = FALSE + else if(query.state == SDQL2_STATE_ERROR) + if(usr) + to_chat(usr, "SDQL query [query.get_query_text()] errored. It will NOT be automatically garbage collected. Please remove manually.") + running -= query + else + if(query.finished) + if(length(query.select_text)) + var/text = islist(query.select_text)? query.select_text.Join() : query.select_text + var/static/result_offset = 0 + usr << browse(text, "window=SDQL-result-[result_offset++]") + objs_all += islist(query.obj_count_all)? length(query.obj_count_all) : query.obj_count_all + objs_eligible += islist(query.obj_count_eligible)? length(query.obj_count_eligible) : query.obj_count_eligible + selectors_used |= query.where_switched + combined_refs |= query.select_refs + if(usr) + to_chat(usr, "SDQL query results: [query.get_query_text()]
\ + SDQL query completed: [islist(query.obj_count_all)? length(query.obj_count_all) : query.obj_count_all] objects selected by path, and \ + [query.where_switched? "[islist(query.obj_count_eligible)? length(query.obj_count_eligible) : query.obj_count_eligible] objects executed on after WHERE keyword selection." : ""]
\ + SDQL query took [DisplayTimeText(query.end_time - query.start_time)] to complete.
") + running -= query + if(!CHECK_BITFIELD(query.options, SDQL2_OPTION_DO_NOT_AUTOGC)) + QDEL_IN(query, 50) else - return + if(usr) + to_chat(usr, "SDQL query [query.get_query_text()] was halted. It will NOT be automatically garbage collected. Please remove manually.") + running -= query + while(!finished) - if("select", "delete", "update") - select_types = query_tree[query_tree[1]] + var/end_time_total = REALTIMEOFDAY - start_time_total + return list("SDQL query combined results: [query_text]",\ + "SDQL query completed: [objs_all] objects selected by path, and [selectors_used ? objs_eligible : objs_all] objects executed on after WHERE filtering/MAPping if applicable.",\ + "SDQL combined querys took [DisplayTimeText(end_time_total)] to complete.") + combined_refs - from_objs = world.SDQL_from_objs(query_tree["from"]) +GLOBAL_LIST_INIT(sdql2_queries, GLOB.sdql2_queries || list()) +GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null, "VIEW VARIABLES (all)", null)) - var/list/objs = list() +/datum/SDQL2_query + var/list/query_tree + var/state = SDQL2_STATE_IDLE + var/options = SDQL2_OPTIONS_DEFAULT + var/superuser = FALSE //Run things like proccalls without using admin protections + var/allow_admin_interact = TRUE //Allow admins to do things to this excluding varedit these two vars + var/static/id_assign = 1 + var/id = 0 - for(var/type in select_types) - objs += SDQL_get_all(type, from_objs) - CHECK_TICK - objs_all = objs.len + var/qdel_on_finish = FALSE - if("where" in query_tree) - where_used = TRUE - var/objs_temp = objs - objs = list() - for(var/datum/d in objs_temp) - if(SDQL_expression(d, query_tree["where"])) - objs += d - objs_eligible++ - CHECK_TICK + //Last run + //General + var/finished = FALSE + var/start_time + var/end_time + var/where_switched = FALSE + //Select query only + var/list/select_refs + var/list/select_text + //Runtime tracked + //These three are weird. For best performance, they are only a number when they're not being changed by the SDQL searching/execution code. They only become numbers when they finish changing. + var/list/obj_count_all + var/list/obj_count_eligible + var/list/obj_count_finished - switch(query_tree[1]) - if("call") - for(var/datum/d in objs) - world.SDQL_var(d, query_tree["call"][1], source = d) - CHECK_TICK + //Statclick + var/obj/effect/statclick/SDQL2_delete/delete_click + var/obj/effect/statclick/SDQL2_action/action_click - if("delete") - for(var/datum/d in objs) - SDQL_qdel_datum(d) - CHECK_TICK +/datum/SDQL2_query/New(list/tree, SU = FALSE, admin_interact = TRUE, _options = SDQL2_OPTIONS_DEFAULT, finished_qdel = FALSE) + if(IsAdminAdvancedProcCall() || !LAZYLEN(tree)) + qdel(src) + return + LAZYADD(GLOB.sdql2_queries, src) + superuser = SU + allow_admin_interact = admin_interact + query_tree = tree + options = _options + id = id_assign++ + qdel_on_finish = finished_qdel - if("select") - var/text = "" - for(var/datum/t in objs) - text += SDQL_gen_vv_href(t) - refs[REF(t)] = TRUE - CHECK_TICK - usr << browse(text, "window=SDQL-result") +/datum/SDQL2_query/Destroy() + state = SDQL2_STATE_HALTING + query_tree = null + obj_count_all = null + obj_count_eligible = null + obj_count_finished = null + select_text = null + select_refs = null + GLOB.sdql2_queries -= src + return ..() - if("update") - if("set" in query_tree) - var/list/set_list = query_tree["set"] - for(var/datum/d in objs) - SDQL_internal_vv(d, set_list) - CHECK_TICK +/datum/SDQL2_query/proc/get_query_text() + var/list/out = list() + recursive_list_print(out, query_tree) + return out.Join() - var/end_time = REALTIMEOFDAY - end_time -= start_time - return list("SDQL query results: [query_text]",\ - "SDQL query completed: [objs_all] objects selected by path, and [where_used ? objs_eligible : objs_all] objects executed on after WHERE filtering if applicable.",\ - "SDQL query took [DisplayTimeText(end_time)] to complete.") + refs +/proc/recursive_list_print(list/output = list(), list/input, datum/callback/datum_handler, datum/callback/atom_handler) + output += "\[ " + for(var/i in 1 to input.len) + var/final = i == input.len + var/key = input[i] -/proc/SDQL_qdel_datum(datum/d) - qdel(d) - -/proc/SDQL_gen_vv_href(t) - var/text = "" - text += "
[REF(t)]" - if(istype(t, /atom)) - var/atom/a = t - var/turf/T = a.loc - var/turf/actual = get_turf(a) - if(istype(T)) - text += ": [t] at turf [T] [ADMIN_COORDJMP(T)]
" - else if(a.loc && istype(actual)) - text += ": [t] in [a.loc] at turf [actual] [ADMIN_COORDJMP(actual)]
" + //print the key + if(islist(key)) + recursive_list_print(output, key, datum_handler, atom_handler) + else if(is_proper_datum(key) && (datum_handler || (isatom(key) && atom_handler))) + if(isatom(key) && atom_handler) + output += atom_handler.Invoke(key) + else + output += datum_handler.Invoke(key) else - text += ": [t]
" - else - text += ": [t]
" - return text + output += "[key]" -/proc/SDQL_internal_vv(d, list/set_list) + //print the value + var/is_value = (!isnum(key) && !isnull(input[key])) + if(is_value) + var/value = input[key] + if(islist(value)) + recursive_list_print(output, value, datum_handler, atom_handler) + else if(is_proper_datum(value) && (datum_handler || (isatom(value) && atom_handler))) + if(isatom(value) && atom_handler) + output += atom_handler.Invoke(value) + else + output += datum_handler.Invoke(value) + else + output += " = [value]" + + if(!final) + output += " , " + + output += " \]" + +/datum/SDQL2_query/proc/text_state() + switch(state) + if(SDQL2_STATE_ERROR) + return "###ERROR" + if(SDQL2_STATE_IDLE) + return "####IDLE" + if(SDQL2_STATE_PRESEARCH) + return "PRESEARCH" + if(SDQL2_STATE_SEARCHING) + return "SEARCHING" + if(SDQL2_STATE_EXECUTING) + return "EXECUTING" + if(SDQL2_STATE_SWITCHING) + return "SWITCHING" + if(SDQL2_STATE_HALTING) + return "##HALTING" + +/datum/SDQL2_query/proc/generate_stat() + if(!allow_admin_interact) + return + if(!delete_click) + delete_click = new(null, "INITIALIZING", src) + if(!action_click) + action_click = new(null, "INITIALIZNG", src) + stat("[id] ", delete_click.update("DELETE QUERY | STATE : [text_state()] | ALL/ELIG/FIN \ + [islist(obj_count_all)? length(obj_count_all) : (isnull(obj_count_all)? "0" : obj_count_all)]/\ + [islist(obj_count_eligible)? length(obj_count_eligible) : (isnull(obj_count_eligible)? "0" : obj_count_eligible)]/\ + [islist(obj_count_finished)? length(obj_count_finished) : (isnull(obj_count_finished)? "0" : obj_count_finished)]")) + stat(" ", action_click.update("[SDQL2_IS_RUNNING? "HALT" : "RUN"]")) + +/datum/SDQL2_query/proc/delete_click() + admin_del(usr) + +/datum/SDQL2_query/proc/action_click() + if(SDQL2_IS_RUNNING) + admin_halt(usr) + else + admin_run(usr) + +/datum/SDQL2_query/proc/admin_halt(user = usr) + if(!SDQL2_IS_RUNNING) + return + var/msg = "[key_name(user)] has halted query #[id]" + message_admins(msg) + log_admin(msg) + state = SDQL2_STATE_HALTING + +/datum/SDQL2_query/proc/admin_run(user = usr) + if(SDQL2_IS_RUNNING) + return + var/msg = "[key_name(user)] has (re)started query #[id]" + message_admins(msg) + log_admin(msg) + ARun() + +/datum/SDQL2_query/proc/admin_del(user = usr) + var/msg = "[key_name(user)] has stopped + deleted query #[id]" + message_admins(msg) + log_admin(msg) + qdel(src) + +/datum/SDQL2_query/proc/set_option(name, value) + switch(name) + if("select") + switch(value) + if("force_nulls") + DISABLE_BITFIELD(options, SDQL2_OPTION_SELECT_OUTPUT_SKIP_NULLS) + if("proccall") + switch(value) + if("blocking") + ENABLE_BITFIELD(options, SDQL2_OPTION_BLOCKING_CALLS) + if("priority") + switch(value) + if("high") + ENABLE_BITFIELD(options, SDQL2_OPTION_HIGH_PRIORITY) + if("autogc") + switch(value) + if("keep_alive") + ENABLE_BITFIELD(options, SDQL2_OPTION_DO_NOT_AUTOGC) + +/datum/SDQL2_query/proc/ARun() + INVOKE_ASYNC(src, .proc/Run) + +/datum/SDQL2_query/proc/Run() + if(SDQL2_IS_RUNNING) + return FALSE + if(query_tree["options"]) + for(var/name in query_tree["options"]) + var/value = query_tree["options"][name] + set_option(name, value) + select_refs = list() + obj_count_all = 0 + obj_count_eligible = 0 + obj_count_finished = 0 + start_time = REALTIMEOFDAY + + state = SDQL2_STATE_PRESEARCH + var/list/search_tree = PreSearch() + SDQL2_STAGE_SWITCH_CHECK + + state = SDQL2_STATE_SEARCHING + var/list/found = Search(search_tree) + SDQL2_STAGE_SWITCH_CHECK + + state = SDQL2_STATE_EXECUTING + Execute(found) + SDQL2_STAGE_SWITCH_CHECK + + end_time = REALTIMEOFDAY + state = SDQL2_STATE_IDLE + finished = TRUE + . = TRUE + if(qdel_on_finish) + qdel(src) + +/datum/SDQL2_query/proc/PreSearch() + SDQL2_HALT_CHECK + switch(query_tree[1]) + if("explain") + SDQL_testout(query_tree["explain"]) + state = SDQL2_STATE_HALTING + return + if("call") + . = query_tree["on"] + if("select", "delete", "update") + . = query_tree[query_tree[1]] + state = SDQL2_STATE_SWITCHING + +/datum/SDQL2_query/proc/Search(list/tree) + SDQL2_HALT_CHECK + var/type = tree[1] + var/list/from = tree[2] + var/list/objs = SDQL_from_objs(from) + SDQL2_TICK_CHECK + SDQL2_HALT_CHECK + objs = SDQL_get_all(type, objs) + SDQL2_TICK_CHECK + SDQL2_HALT_CHECK + + // 1 and 2 are type and FROM. + var/i = 3 + while (i <= tree.len) + var/key = tree[i++] + var/list/expression = tree[i++] + switch (key) + if ("map") + for(var/j = 1 to objs.len) + var/x = objs[j] + objs[j] = SDQL_expression(x, expression) + SDQL2_TICK_CHECK + SDQL2_HALT_CHECK + + if ("where") + where_switched = TRUE + var/list/out = list() + obj_count_eligible = out + for(var/x in objs) + if(SDQL_expression(x, expression)) + out += x + SDQL2_TICK_CHECK + SDQL2_HALT_CHECK + objs = out + if(islist(obj_count_eligible)) + obj_count_eligible = objs.len + else + obj_count_eligible = obj_count_all + . = objs + state = SDQL2_STATE_SWITCHING + +/datum/SDQL2_query/proc/SDQL_from_objs(list/tree) + if(IsAdminAdvancedProcCall()) + if("world" in tree) + var/text = "[key_name(usr)] attempted to grab world with a procedure call to a SDQL datum." + message_admins(text) + log_admin(text) + return + if("world" in tree) + return world + return SDQL_expression(world, tree) + +/datum/SDQL2_query/proc/SDQL_get_all(type, location) + var/list/out = list() + obj_count_all = out + +// If only a single object got returned, wrap it into a list so the for loops run on it. + if(!islist(location) && location != world) + location = list(location) + + if(type == "*") + for(var/i in location) + var/datum/d = i + if(d.can_vv_get() || superuser) + out += d + SDQL2_TICK_CHECK + SDQL2_HALT_CHECK + return out + if(istext(type)) + type = text2path(type) + var/typecache = typecacheof(type) + + if(ispath(type, /mob)) + for(var/mob/d in location) + if(typecache[d.type] && (d.can_vv_get() || superuser)) + out += d + SDQL2_TICK_CHECK + SDQL2_HALT_CHECK + + else if(ispath(type, /turf)) + for(var/turf/d in location) + if(typecache[d.type] && (d.can_vv_get() || superuser)) + out += d + SDQL2_TICK_CHECK + SDQL2_HALT_CHECK + + else if(ispath(type, /obj)) + for(var/obj/d in location) + if(typecache[d.type] && (d.can_vv_get() || superuser)) + out += d + SDQL2_TICK_CHECK + SDQL2_HALT_CHECK + + else if(ispath(type, /area)) + for(var/area/d in location) + if(typecache[d.type] && (d.can_vv_get() || superuser)) + out += d + SDQL2_TICK_CHECK + SDQL2_HALT_CHECK + + else if(ispath(type, /atom)) + for(var/atom/d in location) + if(typecache[d.type] && (d.can_vv_get() || superuser)) + out += d + SDQL2_TICK_CHECK + SDQL2_HALT_CHECK + + else if(ispath(type, /datum)) + if(location == world) //snowflake for byond shortcut + for(var/datum/d) //stupid byond trick to have it not return atoms to make this less laggy + if(typecache[d.type] && (d.can_vv_get() || superuser)) + out += d + SDQL2_TICK_CHECK + SDQL2_HALT_CHECK + else + for(var/datum/d in location) + if(typecache[d.type] && (d.can_vv_get() || superuser)) + out += d + SDQL2_TICK_CHECK + SDQL2_HALT_CHECK + obj_count_all = out.len + return out + +/datum/SDQL2_query/proc/Execute(list/found) + SDQL2_HALT_CHECK + select_refs = list() + select_text = list() + switch(query_tree[1]) + if("call") + for(var/i in found) + if(!is_proper_datum(i)) + continue + world.SDQL_var(i, query_tree["call"][1], source = i, superuser) + obj_count_finished++ + SDQL2_TICK_CHECK + SDQL2_HALT_CHECK + + if("delete") + for(var/datum/d in found) + SDQL_qdel_datum(d) + obj_count_finished++ + SDQL2_TICK_CHECK + SDQL2_HALT_CHECK + + if("select") + var/list/text_list = list() + var/print_nulls = !(options & SDQL2_OPTION_SELECT_OUTPUT_SKIP_NULLS) + obj_count_finished = select_refs + for(var/i in found) + SDQL_print(i, text_list, print_nulls) + select_refs[REF(i)] = TRUE + SDQL2_TICK_CHECK + SDQL2_HALT_CHECK + select_text = text_list.Join() + + if("update") + if("set" in query_tree) + var/list/set_list = query_tree["set"] + for(var/d in found) + if(!is_proper_datum(d)) + continue + SDQL_internal_vv(d, set_list) + obj_count_finished++ + SDQL2_TICK_CHECK + SDQL2_HALT_CHECK + if(islist(obj_count_finished)) + obj_count_finished = obj_count_finished.len + state = SDQL2_STATE_SWITCHING + +/datum/SDQL2_query/proc/SDQL_print(object, list/text_list, print_nulls = TRUE) + if(is_proper_datum(object)) + text_list += "[REF(object)] : [object]" + if(istype(object, /atom)) + var/atom/A = object + var/turf/T = A.loc + var/area/a + if(istype(T)) + text_list += " at [T] [ADMIN_COORDJMP(T)]" + a = T.loc + else + var/turf/final = get_turf(T) //Recursive, hopefully? + if(istype(final)) + text_list += " at [final] [ADMIN_COORDJMP(final)]" + a = final.loc + else + text_list += " at nonexistant location" + if(a) + text_list += " in area [a]" + if(T.loc != a) + text_list += " inside [T]" + text_list += "
" + else if(islist(object)) + var/list/L = object + var/first = TRUE + text_list += "\[" + for (var/x in L) + if (!first) + text_list += ", " + first = FALSE + SDQL_print(x, text_list) + if (!isnull(x) && !isnum(x) && L[x] != null) + text_list += " -> " + SDQL_print(L[L[x]]) + text_list += "]
" + else + if(isnull(object)) + if(print_nulls) + text_list += "NULL
" + else + text_list += "[object]
" + +/datum/SDQL2_query/CanProcCall() + if(!allow_admin_interact) + return FALSE + return ..() + +/datum/SDQL2_query/vv_edit_var(var_name, var_value) + if(!allow_admin_interact) + return FALSE + if(var_name == NAMEOF(src, superuser) || var_name == NAMEOF(src, allow_admin_interact) || var_name == NAMEOF(src, query_tree)) + return FALSE + return ..() + +/datum/SDQL2_query/proc/SDQL_internal_vv(d, list/set_list) for(var/list/sets in set_list) var/datum/temp = d var/i = 0 for(var/v in sets) if(++i == sets.len) - temp.vv_edit_var(v, SDQL_expression(d, set_list[sets])) + if(superuser) + if(temp.vars.Find(v)) + temp.vars[v] = SDQL_expression(d, set_list[sets]) + else + temp.vv_edit_var(v, SDQL_expression(d, set_list[sets])) break - if(temp.vars.Find(v) && (istype(temp.vars[v], /datum))) + if(temp.vars.Find(v) && (istype(temp.vars[v], /datum) || istype(temp.vars[v], /client))) temp = temp.vars[v] else break +/datum/SDQL2_query/proc/SDQL_function_blocking(datum/object, procname, list/arguments, source) + var/list/new_args = list() + for(var/arg in arguments) + new_args[++new_args.len] = SDQL_expression(source, arg) + if(object == GLOB) // Global proc. + procname = "/proc/[procname]" + return superuser? (call(procname)(new_args)) : (WrapAdminProcCall(GLOBAL_PROC, procname, new_args)) + return superuser? (call(object, procname)(new_args)) : (WrapAdminProcCall(object, procname, new_args)) + +/datum/SDQL2_query/proc/SDQL_function_async(datum/object, procname, list/arguments, source) + set waitfor = FALSE + return SDQL_function_blocking(object, procname, arguments, source) + +/datum/SDQL2_query/proc/SDQL_expression(datum/object, list/expression, start = 1) + var/result = 0 + var/val + + for(var/i = start, i <= expression.len, i++) + var/op = "" + + if(i > start) + op = expression[i] + i++ + + var/list/ret = SDQL_value(object, expression, i) + val = ret["val"] + i = ret["i"] + + if(op != "") + switch(op) + if("+") + result = (result + val) + if("-") + result = (result - val) + if("*") + result = (result * val) + if("/") + result = (result / val) + if("&") + result = (result & val) + if("|") + result = (result | val) + if("^") + result = (result ^ val) + if("%") + result = (result % val) + if("=", "==") + result = (result == val) + if("!=", "<>") + result = (result != val) + if("<") + result = (result < val) + if("<=") + result = (result <= val) + if(">") + result = (result > val) + if(">=") + result = (result >= val) + if("and", "&&") + result = (result && val) + if("or", "||") + result = (result || val) + else + to_chat(usr, "SDQL2: Unknown op [op]") + result = null + else + result = val + + return result + +/datum/SDQL2_query/proc/SDQL_value(datum/object, list/expression, start = 1) + var/i = start + var/val = null + + if(i > expression.len) + return list("val" = null, "i" = i) + + if(istype(expression[i], /list)) + val = SDQL_expression(object, expression[i]) + + else if(expression[i] == "TRUE") + val = TRUE + + else if(expression[i] == "FALSE") + val = FALSE + + else if(expression[i] == "!") + var/list/ret = SDQL_value(object, expression, i + 1) + val = !ret["val"] + i = ret["i"] + + else if(expression[i] == "~") + var/list/ret = SDQL_value(object, expression, i + 1) + val = ~ret["val"] + i = ret["i"] + + else if(expression[i] == "-") + var/list/ret = SDQL_value(object, expression, i + 1) + val = -ret["val"] + i = ret["i"] + + else if(expression[i] == "null") + val = null + + else if(isnum(expression[i])) + val = expression[i] + + else if(ispath(expression[i])) + val = expression[i] + + else if(copytext(expression[i], 1, 2) in list("'", "\"")) + val = copytext(expression[i], 2, length(expression[i])) + + else if(expression[i] == "\[") + var/list/expressions_list = expression[++i] + val = list() + for(var/list/expression_list in expressions_list) + var/result = SDQL_expression(object, expression_list) + var/assoc + if(expressions_list[expression_list] != null) + assoc = SDQL_expression(object, expressions_list[expression_list]) + if(assoc != null) + // Need to insert the key like this to prevent duplicate keys fucking up. + var/list/dummy = list() + dummy[result] = assoc + result = dummy + val += result + else + val = world.SDQL_var(object, expression, i, object, superuser) + i = expression.len + + return list("val" = val, "i" = i) + /proc/SDQL_parse(list/query_list) var/datum/SDQL_parser/parser = new() var/list/querys = list() @@ -193,8 +911,6 @@ qdel(parser) return querys - - /proc/SDQL_testout(list/query_tree, indent = 0) var/static/whitespace = "    " var/spaces = "" @@ -220,182 +936,19 @@ else to_chat(usr, "[spaces][whitespace][query_tree[item]]") - - -/world/proc/SDQL_from_objs(list/tree) - if("world" in tree) - return src - return SDQL_expression(src, tree) - -/proc/SDQL_get_all(type, location) - var/list/out = list() - -// If only a single object got returned, wrap it into a list so the for loops run on it. - if(!islist(location) && location != world) - location = list(location) - - type = text2path(type) - var/typecache = typecacheof(type) - - if(ispath(type, /mob)) - for(var/mob/d in location) - if(typecache[d.type] && d.can_vv_get()) - out += d - CHECK_TICK - - else if(ispath(type, /turf)) - for(var/turf/d in location) - if(typecache[d.type] && d.can_vv_get()) - out += d - CHECK_TICK - - else if(ispath(type, /obj)) - for(var/obj/d in location) - if(typecache[d.type] && d.can_vv_get()) - out += d - CHECK_TICK - - else if(ispath(type, /area)) - for(var/area/d in location) - if(typecache[d.type] && d.can_vv_get()) - out += d - CHECK_TICK - - else if(ispath(type, /atom)) - for(var/atom/d in location) - if(typecache[d.type] && d.can_vv_get()) - out += d - CHECK_TICK - else if(ispath(type, /datum)) - if(location == world) //snowflake for byond shortcut - for(var/datum/d) //stupid byond trick to have it not return atoms to make this less laggy - if(typecache[d.type] && d.can_vv_get()) - out += d - CHECK_TICK - else - for(var/datum/d in location) - if(typecache[d.type] && d.can_vv_get()) - out += d - CHECK_TICK - - return out - - -/proc/SDQL_expression(datum/object, list/expression, start = 1) - var/result = 0 - var/val - - for(var/i = start, i <= expression.len, i++) - var/op = "" - - if(i > start) - op = expression[i] - i++ - - var/list/ret = SDQL_value(object, expression, i) - val = ret["val"] - i = ret["i"] - - if(op != "") - switch(op) - if("+") - result = (result + val) - if("-") - result = (result - val) - if("*") - result = (result * val) - if("/") - result = (result / val) - if("&") - result = (result & val) - if("|") - result = (result | val) - if("^") - result = (result ^ val) - if("=", "==") - result = (result == val) - if("!=", "<>") - result = (result != val) - if("<") - result = (result < val) - if("<=") - result = (result <= val) - if(">") - result = (result > val) - if(">=") - result = (result >= val) - if("and", "&&") - result = (result && val) - if("or", "||") - result = (result || val) - else - to_chat(usr, "SDQL2: Unknown op [op]") - result = null - else - result = val - - return result - -/proc/SDQL_value(datum/object, list/expression, start = 1) - var/i = start - var/val = null - - if(i > expression.len) - return list("val" = null, "i" = i) - - if(istype(expression[i], /list)) - val = SDQL_expression(object, expression[i]) - - else if(expression[i] == "!") - var/list/ret = SDQL_value(object, expression, i + 1) - val = !ret["val"] - i = ret["i"] - - else if(expression[i] == "~") - var/list/ret = SDQL_value(object, expression, i + 1) - val = ~ret["val"] - i = ret["i"] - - else if(expression[i] == "-") - var/list/ret = SDQL_value(object, expression, i + 1) - val = -ret["val"] - i = ret["i"] - - else if(expression[i] == "null") - val = null - - else if(isnum(expression[i])) - val = expression[i] - - else if(copytext(expression[i], 1, 2) in list("'", "\"")) - val = copytext(expression[i], 2, length(expression[i])) - - else if(expression[i] == "\[") - var/list/expressions_list = expression[++i] - val = list() - for(var/list/expression_list in expressions_list) - var/result = SDQL_expression(object, expression_list) - var/assoc - if(expressions_list[expression_list] != null) - assoc = SDQL_expression(object, expressions_list[expression_list]) - if(assoc != null) - // Need to insert the key like this to prevent duplicate keys fucking up. - var/list/dummy = list() - dummy[result] = assoc - result = dummy - val += result - else - val = world.SDQL_var(object, expression, i, object) - i = expression.len - - return list("val" = val, "i" = i) - -/world/proc/SDQL_var(datum/object, list/expression, start = 1, source) +//Staying as a world proc as this is called too often for changes to offset the potential IsAdminAdvancedProcCall checking overhead. +/world/proc/SDQL_var(object, list/expression, start = 1, source, superuser, datum/SDQL2_query/query) var/v + var/static/list/exclude = list("usr", "src", "marked", "global") var/long = start < expression.len - if(object == world && long && expression[start + 1] == ".") - to_chat(usr, "Sorry, but world variables are not supported at the moment.") + var/datum/D + if(is_proper_datum(object)) + D = object + + if (object == world && (!long || expression[start + 1] == ".") && !(expression[start] in exclude)) + to_chat(usr, "World variables are not allowed to be accessed. Use global.") return null + else if(expression [start] == "{" && long) if(lowertext(copytext(expression[start + 1], 1, 3)) != "0x") to_chat(usr, "Invalid pointer syntax: [expression[start + 1]]") @@ -405,12 +958,13 @@ to_chat(usr, "Invalid pointer: [expression[start + 1]]") return null start++ - else if((!long || expression[start + 1] == ".") && (expression[start] in object.vars)) - if(object.can_vv_get(expression[start])) - v = object.vars[expression[start]] + long = start < expression.len + else if(D != null && (!long || expression[start + 1] == ".") && (expression[start] in D.vars)) + if(D.can_vv_get(expression[start]) || superuser) + v = D.vars[expression[start]] else v = "SECRET" - else if(long && expression[start + 1] == ":" && hascall(object, expression[start])) + else if(D != null && long && expression[start + 1] == ":" && hascall(D, expression[start])) v = expression[start] else if(!long || expression[start + 1] == ".") switch(expression[start]) @@ -427,38 +981,70 @@ v = world if("global") v = GLOB + if("MC") + v = Master + if("FS") + v = Failsafe + if("CFG") + v = config + //Subsystem switches + if("SSgarbage") + v = SSgarbage + if("SSmachines") + v = SSmachines + if("SSobj") + v = SSobj + if("SSresearch") + v = SSresearch + if("SSprojectiles") + v = SSprojectiles + if("SSfastprocess") + v = SSfastprocess + if("SSticker") + v = SSticker + if("SStimer") + v = SStimer + if("SSradiation") + v = SSradiation + if("SSnpcpool") + v = SSnpcpool + if("SSmobs") + v = SSmobs + if("SSmood") + v = SSmood + if("SSquirks") + v = SSquirks + if("SSwet_floors") + v = SSwet_floors + if("SSshuttle") + v = SSshuttle + if("SSmapping") + v = SSmapping + if("SSevents") + v = SSevents + //End else return null else if(object == GLOB) // Shitty ass hack kill me. v = expression[start] if(long) if(expression[start + 1] == ".") - return SDQL_var(v, expression[start + 2], source = source) + return SDQL_var(v, expression[start + 2], source = source, superuser = superuser, query = query) else if(expression[start + 1] == ":") - return SDQL_function(object, v, expression[start + 2], source) + return (query.options & SDQL2_OPTION_BLOCKING_CALLS)? query.SDQL_function_async(object, v, expression[start + 2], source) : query.SDQL_function_blocking(object, v, expression[start + 2], source) else if(expression[start + 1] == "\[" && islist(v)) var/list/L = v - var/index = SDQL_expression(source, expression[start + 2]) + var/index = query.SDQL_expression(source, expression[start + 2]) if(isnum(index) && (!ISINTEGER(index) || L.len < index)) to_chat(usr, "Invalid list index: [index]") return null return L[index] return v -/proc/SDQL_function(var/datum/object, var/procname, var/list/arguments, source) - set waitfor = FALSE - var/list/new_args = list() - for(var/arg in arguments) - new_args += SDQL_expression(source, arg) - if(object == GLOB) // Global proc. - procname = "/proc/[procname]" - return WrapAdminProcCall(GLOBAL_PROC, procname, new_args) - return WrapAdminProcCall(object, procname, new_args) - /proc/SDQL2_tokenize(query_text) var/list/whitespace = list(" ", "\n", "\t") - var/list/single = list("(", ")", ",", "+", "-", ".", ";", "{", "}", "\[", "]", ":") + var/list/single = list("(", ")", ",", "+", "-", ".", "\[", "]", "{", "}", ";", ":") var/list/multi = list( "=" = list("", "="), "<" = list("", "=", ">"), @@ -560,3 +1146,20 @@ if(word != "") query_list += word return query_list + +/proc/is_proper_datum(thing) + return istype(thing, /datum) || istype(thing, /client) + +/obj/effect/statclick/SDQL2_delete/Click() + var/datum/SDQL2_query/Q = target + Q.delete_click() + +/obj/effect/statclick/SDQL2_action/Click() + var/datum/SDQL2_query/Q = target + Q.action_click() + +/obj/effect/statclick/SDQL2_VV_all + name = "VIEW VARIABLES" + +/obj/effect/statclick/SDQL2_VV_all/Click() + usr.client.debug_variables(GLOB.sdql2_queries) \ No newline at end of file diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2_parser.dm b/code/modules/admin/verbs/SDQL2/SDQL_2_parser.dm index 1bd95bc239..fb857bfb02 100644 --- a/code/modules/admin/verbs/SDQL2/SDQL_2_parser.dm +++ b/code/modules/admin/verbs/SDQL2/SDQL_2_parser.dm @@ -7,36 +7,34 @@ // // query : select_query | delete_query | update_query | call_query | explain // explain : 'EXPLAIN' query +// select_query : 'SELECT' object_selectors +// delete_query : 'DELETE' object_selectors +// update_query : 'UPDATE' object_selectors 'SET' assignments +// call_query : 'CALL' variable 'ON' object_selectors // Note here: 'variable' does function calls. This simplifies parsing. // -// select_query : 'SELECT' select_list [('FROM' | 'IN') from_list] ['WHERE' bool_expression] -// delete_query : 'DELETE' select_list [('FROM' | 'IN') from_list] ['WHERE' bool_expression] -// update_query : 'UPDATE' select_list [('FROM' | 'IN') from_list] 'SET' assignments ['WHERE' bool_expression] -// call_query : 'CALL' call_function ['ON' select_list [('FROM' | 'IN') from_list] ['WHERE' bool_expression]] +// select_item : '*' | object_type // -// select_list : select_item [',' select_list] -// select_item : '*' | select_function | object_type -// select_function : count_function -// count_function : 'COUNT' '(' '*' ')' | 'COUNT' '(' object_types ')' +// object_selectors : select_item [('FROM' | 'IN') from_item] [modifier_list] +// modifier_list : ('WHERE' bool_expression | 'MAP' expression) [modifier_list] // -// from_list : from_item [',' from_list] -// from_item : 'world' | object_type +// from_item : 'world' | expression // -// call_function : ['(' [arguments] ')'] +// call_function : '(' [arguments] ')' // arguments : expression [',' arguments] // -// object_type : | string +// object_type : // -// assignments : assignment, [',' assignments] +// assignments : assignment [',' assignments] // assignment : '=' expression -// variable : | '.' variable +// variable : | '.' variable | '[' ']' | '[' ']' '.' variable // // bool_expression : expression comparitor expression [bool_operator bool_expression] // expression : ( unary_expression | '(' expression ')' | value ) [binary_operator expression] // unary_expression : unary_operator ( unary_expression | value | '(' expression ')' ) // comparitor : '=' | '==' | '!=' | '<>' | '<' | '<=' | '>' | '>=' -// value : variable | string | number | 'null' +// value : variable | string | number | 'null' | object_type // unary_operator : '!' | '-' | '~' -// binary_operator : comparitor | '+' | '-' | '/' | '*' | '&' | '|' | '^' +// binary_operator : comparitor | '+' | '-' | '/' | '*' | '&' | '|' | '^' | '%' // bool_operator : 'AND' | '&&' | 'OR' | '||' // // string : ''' ''' | '"' '"' @@ -51,10 +49,9 @@ var/list/query var/list/tree - var/list/select_functions = list("count") var/list/boolean_operators = list("and", "or", "&&", "||") var/list/unary_operators = list("!", "-", "~") - var/list/binary_operators = list("+", "-", "/", "*", "&", "|", "^") + var/list/binary_operators = list("+", "-", "/", "*", "&", "|", "^", "%") var/list/comparitors = list("=", "==", "!=", "<>", "<", "<=", ">", ">=") /datum/SDQL_parser/New(query_list) @@ -62,12 +59,12 @@ /datum/SDQL_parser/proc/parse_error(error_message) error = 1 - to_chat(usr, "SQDL2 Parsing Error: [error_message]") + to_chat(usr, "SQDL2 Parsing Error: [error_message]") return query.len + 1 /datum/SDQL_parser/proc/parse() tree = list() - query(1, tree) + query_options(1, tree) if(error) return list() @@ -91,354 +88,546 @@ /datum/SDQL_parser/proc/tokenl(i) return lowertext(token(i)) +/datum/SDQL_parser/proc/query_options(i, list/node) + var/list/options = list() + if(tokenl(i) == "using") + i = option_assignment(i + 1, node, options) + query(i, node) + node["options"] = options + +//option_assignment: query_option '=' define +/datum/SDQL_parser/proc/option_assignment(var/i, var/list/node, var/list/assignment_list = list()) + var/type = tokenl(i) + if(!(type in SDQL2_VALID_OPTION_TYPES)) + parse_error("Invalid option type: [type]") + if(!(token(i + 1) == "=")) + parse_error("Invalid option assignment symbol: [token(i + 1)]") + var/val = tokenl(i + 2) + if(!(val in SDQL2_VALID_OPTION_VALUES)) + parse_error("Invalid optoin value: [val]") + assignment_list[type] = val + return (i + 3) + +//option_assignments: option_assignment, [',' option_assignments] +/datum/SDQL_parser/proc/option_assignments(i, list/node) + i = option_assignment(i, node) + + if(token(i) == ",") + i = option_assignments(i + 1, node) + + return i //query: select_query | delete_query | update_query /datum/SDQL_parser/proc/query(i, list/node) query_type = tokenl(i) + switch(query_type) if("select") select_query(i, node) + if("delete") delete_query(i, node) + if("update") update_query(i, node) + if("call") call_query(i, node) + if("explain") node += "explain" node["explain"] = list() query(i + 1, node["explain"]) -// select_query: 'SELECT' select_list [('FROM' | 'IN') from_list] ['WHERE' bool_expression] +// select_query: 'SELECT' object_selectors /datum/SDQL_parser/proc/select_query(i, list/node) var/list/select = list() - i = select_list(i + 1, select) - node += "select" + i = object_selectors(i + 1, select) + node["select"] = select - selectors(i, node) return i -//delete_query: 'DELETE' select_list [('FROM' | 'IN') from_list] ['WHERE' bool_expression] + +//delete_query: 'DELETE' object_selectors /datum/SDQL_parser/proc/delete_query(i, list/node) var/list/select = list() - i = select_list(i + 1, select) - node += "delete" + i = object_selectors(i + 1, select) + node["delete"] = select - selectors(i, node) + return i -//update_query: 'UPDATE' select_list [('FROM' | 'IN') from_list] 'SET' assignments ['WHERE' bool_expression] + +//update_query: 'UPDATE' object_selectors 'SET' assignments /datum/SDQL_parser/proc/update_query(i, list/node) var/list/select = list() - i = select_list(i + 1, select) - node += "update" + i = object_selectors(i + 1, select) + node["update"] = select + if(tokenl(i) != "set") i = parse_error("UPDATE has misplaced SET") + var/list/set_assignments = list() i = assignments(i + 1, set_assignments) - node += "set" + node["set"] = set_assignments - selectors(i, node) + return i -//call_query: 'CALL' call_function ['ON' select_list [('FROM' | 'IN') from_list] ['WHERE' bool_expression]] + +//call_query: 'CALL' call_function ['ON' object_selectors] /datum/SDQL_parser/proc/call_query(i, list/node) var/list/func = list() i = variable(i + 1, func) // Yes technically does anything variable() matches but I don't care, if admins fuck up this badly then they shouldn't be allowed near SDQL. - node += "call" + node["call"] = func + if(tokenl(i) != "on") - return i + return parse_error("You need to specify what to call ON.") + var/list/select = list() - i = select_list(i + 1, select) - node += "on" + i = object_selectors(i + 1, select) + node["on"] = select - selectors(i, node) + return i -//select_list: select_item [',' select_list] +// object_selectors: select_item [('FROM' | 'IN') from_item] [modifier_list] +/datum/SDQL_parser/proc/object_selectors(i, list/node) + i = select_item(i, node) + + if (tokenl(i) == "from" || tokenl(i) == "in") + i++ + var/list/from = list() + i = from_item(i, from) + node[++node.len] = from + + else + node[++node.len] = list("world") + + i = modifier_list(i, node) + return i + +// modifier_list: ('WHERE' bool_expression | 'MAP' expression) [modifier_list] +/datum/SDQL_parser/proc/modifier_list(i, list/node) + while (TRUE) + if (tokenl(i) == "where") + i++ + node += "where" + var/list/expr = list() + i = bool_expression(i, expr) + node[++node.len] = expr + + else if (tokenl(i) == "map") + i++ + node += "map" + var/list/expr = list() + i = expression(i, expr) + node[++node.len] = expr + + else + return i + +//select_list:select_item [',' select_list] /datum/SDQL_parser/proc/select_list(i, list/node) i = select_item(i, node) + if(token(i) == ",") i = select_list(i + 1, node) + return i //assignments: assignment, [',' assignments] /datum/SDQL_parser/proc/assignments(i, list/node) i = assignment(i, node) + if(token(i) == ",") i = assignments(i + 1, node) + return i + //select_item: '*' | select_function | object_type /datum/SDQL_parser/proc/select_item(i, list/node) - if(token(i) == "*") + if (token(i) == "*") node += "*" i++ - else if(tokenl(i) in select_functions) - i = select_function(i, node) - else + + else if (copytext(token(i), 1, 2) == "/") i = object_type(i, node) + + else + i = parse_error("Expected '*' or type path for select item") + return i // Standardized method for handling the IN/FROM and WHERE options. /datum/SDQL_parser/proc/selectors(i, list/node) while (token(i)) var/tok = tokenl(i) - if(tok in list("from", "in")) + if (tok in list("from", "in")) var/list/from = list() i = from_item(i + 1, from) + node["from"] = from continue - if(tok == "where") + + if (tok == "where") var/list/where = list() i = bool_expression(i + 1, where) + node["where"] = where continue + parse_error("Expected either FROM, IN or WHERE token, found [token(i)] instead.") return i + 1 - if(!node.Find("from")) + + if (!node.Find("from")) node["from"] = list("world") + return i -//from_item: 'world' | object_type +//from_item: 'world' | expression /datum/SDQL_parser/proc/from_item(i, list/node) if(token(i) == "world") node += "world" i++ + else i = expression(i, node) + return i + //bool_expression: expression [bool_operator bool_expression] /datum/SDQL_parser/proc/bool_expression(i, list/node) + var/list/bool = list() i = expression(i, bool) + node[++node.len] = bool + if(tokenl(i) in boolean_operators) i = bool_operator(i, node) i = bool_expression(i, node) + return i + //assignment: '=' expression /datum/SDQL_parser/proc/assignment(var/i, var/list/node, var/list/assignment_list = list()) assignment_list += token(i) + if(token(i + 1) == ".") i = assignment(i + 2, node, assignment_list) + else if(token(i + 1) == "=") var/exp_list = list() node[assignment_list] = exp_list + i = expression(i + 2, exp_list) + else parse_error("Assignment expected, but no = found") + return i -//variable: | '.' variable + +//variable: | '.' variable | '[' ']' | '[' ']' '.' variable /datum/SDQL_parser/proc/variable(i, list/node) var/list/L = list(token(i)) node[++node.len] = L + if(token(i) == "{") - L += token(i+1) + L += token(i + 1) i += 2 + if(token(i) != "}") parse_error("Missing } at end of pointer.") + if(token(i + 1) == ".") L += "." i = variable(i + 2, L) - else if(token(i + 1) == "(") // OH BOY PROC + + else if (token(i + 1) == "(") // OH BOY PROC var/list/arguments = list() i = call_function(i, null, arguments) L += ":" L[++L.len] = arguments - else if(token(i + 1) == "\[") + + else if (token(i + 1) == "\[") var/list/expression = list() i = expression(i + 2, expression) if (token(i) != "]") parse_error("Missing ] at the end of list access.") + L += "\[" L[++L.len] = expression i++ + else i++ + return i + +//object_type: +/datum/SDQL_parser/proc/object_type(i, list/node) + + if (copytext(token(i), 1, 2) != "/") + return parse_error("Expected type, but it didn't begin with /") + + var/path = text2path(token(i)) + if (path == null) + return parse_error("Nonexistant type path: [token(i)]") + + node += path + + return i + 1 + + +//comparitor: '=' | '==' | '!=' | '<>' | '<' | '<=' | '>' | '>=' +/datum/SDQL_parser/proc/comparitor(i, list/node) + + if(token(i) in list("=", "==", "!=", "<>", "<", "<=", ">", ">=")) + node += token(i) + + else + parse_error("Unknown comparitor [token(i)]") + + return i + 1 + + +//bool_operator: 'AND' | '&&' | 'OR' | '||' +/datum/SDQL_parser/proc/bool_operator(i, list/node) + + if(tokenl(i) in list("and", "or", "&&", "||")) + node += token(i) + + else + parse_error("Unknown comparitor [token(i)]") + + return i + 1 + + +//string: ''' ''' | '"' '"' +/datum/SDQL_parser/proc/string(i, list/node) + + if(copytext(token(i), 1, 2) in list("'", "\"")) + node += token(i) + + else + parse_error("Expected string but found '[token(i)]'") + + return i + 1 + //array: '[' expression, expression, ... ']' -/datum/SDQL_parser/proc/array(i, list/node) +/datum/SDQL_parser/proc/array(var/i, var/list/node) + // Arrays get turned into this: list("[", list(exp_1a = exp_1b, ...), ...), "[" is to mark the next node as an array. if(copytext(token(i), 1, 2) != "\[") parse_error("Expected an array but found '[token(i)]'") return i + 1 - node += token(i) + + node += token(i) // Add the "[" + var/list/expression_list = list() + i++ if(token(i) != "]") var/list/temp_expression_list = list() var/tok do tok = token(i) - if(tok == "," || tok == ":") - if(temp_expression_list == null) + if (tok == "," || tok == ":") + if (temp_expression_list == null) parse_error("Found ',' or ':' without expression in an array.") return i + 1 + expression_list[++expression_list.len] = temp_expression_list temp_expression_list = null - if(tok == ":") + if (tok == ":") temp_expression_list = list() i = expression(i + 1, temp_expression_list) expression_list[expression_list[expression_list.len]] = temp_expression_list temp_expression_list = null tok = token(i) - if(tok != ",") - if(tok == "]") + if (tok != ",") + if (tok == "]") break + parse_error("Expected ',' or ']' after array assoc value, but found '[token(i)]'") return i + + i++ continue + temp_expression_list = list() i = expression(i, temp_expression_list) + + // Ok, what the fuck BYOND? + // Not having these lines here causes the parser to die + // on an error saying that list/token() doesn't exist as a proc. + // These lines prevent that. + // I assume the compiler/VM is shitting itself and swapping out some variables internally? + // While throwing in debug logging it disappeared + // And these 3 lines prevent it from happening while being quiet. + // So.. it works. + // Don't touch it. + var/whatthefuck = i + whatthefuck = src.type + whatthefuck = whatthefuck + while(token(i) && token(i) != "]") - if(temp_expression_list) + + if (temp_expression_list) expression_list[++expression_list.len] = temp_expression_list + node[++node.len] = expression_list - return i + 1 -//object_type: | string -/datum/SDQL_parser/proc/object_type(i, list/node) - if(copytext(token(i), 1, 2) == "/") - node += token(i) - else - i = string(i, node) - return i + 1 - -//comparitor: '=' | '==' | '!=' | '<>' | '<' | '<=' | '>' | '>=' -/datum/SDQL_parser/proc/comparitor(i, list/node) - if(token(i) in list("=", "==", "!=", "<>", "<", "<=", ">", ">=")) - node += token(i) - else - parse_error("Unknown comparitor [token(i)]") - return i + 1 - -//bool_operator: 'AND' | '&&' | 'OR' | '||' -/datum/SDQL_parser/proc/bool_operator(i, list/node) - if(tokenl(i) in list("and", "or", "&&", "||")) - node += token(i) - else - parse_error("Unknown comparitor [token(i)]") - return i + 1 - -//string: ''' ''' | '"' '"' -/datum/SDQL_parser/proc/string(i, list/node) - if(copytext(token(i), 1, 2) in list("'", "\"")) - node += token(i) - else - parse_error("Expected string but found '[token(i)]'") return i + 1 //call_function: ['(' [arguments] ')'] /datum/SDQL_parser/proc/call_function(i, list/node, list/arguments) if(length(tokenl(i))) var/procname = "" - if(token(i) == "global" && token(i+1) == ".") + if(tokenl(i) == "global" && token(i + 1) == ".") // Global proc. i += 2 procname = "global." node += procname + token(i++) if(token(i) != "(") parse_error("Expected ( but found '[token(i)]'") + else if(token(i + 1) != ")") - var/list/expression_list_temp = list() + var/list/temp_expression_list = list() do - i = expression(i + 1, expression_list_temp) + i = expression(i + 1, temp_expression_list) if(token(i) == ",") - arguments[++arguments.len] = expression_list_temp - expression_list_temp = list() + arguments[++arguments.len] = temp_expression_list + temp_expression_list = list() continue + while(token(i) && token(i) != ")") - arguments[++arguments.len] = expression_list_temp + + arguments[++arguments.len] = temp_expression_list // The code this is copy pasted from won't be executed when it's the last param, this fixes that. else i++ else parse_error("Expected a function but found nothing") return i + 1 -//select_function: count_function -/datum/SDQL_parser/proc/select_function(i, list/node) - parse_error("Sorry, function calls aren't available yet") - return i //expression: ( unary_expression | '(' expression ')' | value ) [binary_operator expression] /datum/SDQL_parser/proc/expression(i, list/node) + if(token(i) in unary_operators) i = unary_expression(i, node) + else if(token(i) == "(") var/list/expr = list() + i = expression(i + 1, expr) + if(token(i) != ")") parse_error("Missing ) at end of expression.") + else i++ + node[++node.len] = expr + else i = value(i, node) + if(token(i) in binary_operators) i = binary_operator(i, node) i = expression(i, node) + else if(token(i) in comparitors) i = binary_operator(i, node) + var/list/rhs = list() i = expression(i, rhs) + node[++node.len] = rhs + + return i + //unary_expression: unary_operator ( unary_expression | value | '(' expression ')' ) /datum/SDQL_parser/proc/unary_expression(i, list/node) + if(token(i) in unary_operators) var/list/unary_exp = list() + unary_exp += token(i) i++ + if(token(i) in unary_operators) i = unary_expression(i, unary_exp) + else if(token(i) == "(") var/list/expr = list() + i = expression(i + 1, expr) + if(token(i) != ")") parse_error("Missing ) at end of expression.") + else i++ + unary_exp[++unary_exp.len] = expr + else i = value(i, unary_exp) + node[++node.len] = unary_exp + + else parse_error("Expected unary operator but found '[token(i)]'") + return i -//binary_operator: comparitor | '+' | '-' | '/' | '*' | '&' | '|' | '^' + +//binary_operator: comparitor | '+' | '-' | '/' | '*' | '&' | '|' | '^' | '%' /datum/SDQL_parser/proc/binary_operator(i, list/node) + if(token(i) in (binary_operators + comparitors)) node += token(i) + else parse_error("Unknown binary operator [token(i)]") + return i + 1 -//value: variable | string | number | 'null' + +//value: variable | string | number | 'null' | object_type /datum/SDQL_parser/proc/value(i, list/node) if(token(i) == "null") node += "null" i++ - else if(lowertext(copytext(token(i),1,3)) == "0x" && isnum(hex2num(copytext(token(i),3)))) - node += hex2num(copytext(token(i),3)) + + else if(lowertext(copytext(token(i), 1, 3)) == "0x" && isnum(hex2num(copytext(token(i), 3)))) + node += hex2num(copytext(token(i), 3)) i++ + else if(isnum(text2num(token(i)))) node += text2num(token(i)) i++ + else if(copytext(token(i), 1, 2) in list("'", "\"")) i = string(i, node) + else if(copytext(token(i), 1, 2) == "\[") // Start a list. i = array(i, node) + else if(copytext(token(i), 1, 2) == "/") + i = object_type(i, node) else i = variable(i, node) - return i -/*EXPLAIN SELECT * WHERE 42 = 6 * 9 OR val = - 5 == 7*/ + return i \ No newline at end of file diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2_wrappers.dm b/code/modules/admin/verbs/SDQL2/SDQL_2_wrappers.dm index 56faa1f6c4..a984e40fee 100644 --- a/code/modules/admin/verbs/SDQL2/SDQL_2_wrappers.dm +++ b/code/modules/admin/verbs/SDQL2/SDQL_2_wrappers.dm @@ -48,6 +48,12 @@ /proc/_image(icon, loc, icon_state, layer, dir) return image(icon, loc, icon_state, layer, dir) +/proc/_istype(object, type) + return istype(object, type) + +/proc/_ispath(path, type) + return ispath(path, type) + /proc/_length(E) return length(E) @@ -208,4 +214,3 @@ /proc/_step_away(ref, trg, max) step_away(ref, trg, max) - diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index a563aef86a..79215ff5f5 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -564,7 +564,12 @@ GLOB.cameranet.stat_entry() if(statpanel("Tickets")) GLOB.ahelp_tickets.stat_entry() - + if(length(GLOB.sdql2_queries)) + if(statpanel("SDQL2")) + stat("Access Global SDQL2 List", GLOB.sdql2_vv_statobj) + for(var/i in GLOB.sdql2_queries) + var/datum/SDQL2_query/Q = i + Q.generate_stat() if(listed_turf && client) if(!TurfAdjacent(listed_turf)) listed_turf = null From 53abb3c3dd67d6f4af63ab028a1a1f6b0fe42ac7 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Sun, 23 Dec 2018 12:42:41 -0800 Subject: [PATCH 030/104] THAT WAS CLOSE --- code/modules/admin/verbs/SDQL2/SDQL_2.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2.dm b/code/modules/admin/verbs/SDQL2/SDQL_2.dm index 06a1362b38..7e87b266d0 100644 --- a/code/modules/admin/verbs/SDQL2/SDQL_2.dm +++ b/code/modules/admin/verbs/SDQL2/SDQL_2.dm @@ -635,7 +635,7 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null for(var/i in found) if(!is_proper_datum(i)) continue - world.SDQL_var(i, query_tree["call"][1], source = i, superuser) + world.SDQL_var(i, query_tree["call"][1], null, i, superuser, src) obj_count_finished++ SDQL2_TICK_CHECK SDQL2_HALT_CHECK @@ -871,7 +871,7 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null result = dummy val += result else - val = world.SDQL_var(object, expression, i, object, superuser) + val = world.SDQL_var(object, expression, i, object, superuser, src) i = expression.len return list("val" = val, "i" = i) @@ -1029,7 +1029,7 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null v = expression[start] if(long) if(expression[start + 1] == ".") - return SDQL_var(v, expression[start + 2], source = source, superuser = superuser, query = query) + return SDQL_var(v, expression[start + 2], null, source, superuser, query) else if(expression[start + 1] == ":") return (query.options & SDQL2_OPTION_BLOCKING_CALLS)? query.SDQL_function_async(object, v, expression[start + 2], source) : query.SDQL_function_blocking(object, v, expression[start + 2], source) else if(expression[start + 1] == "\[" && islist(v)) From a70691e8f0795997d3179c8ce483770739cbcda4 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Sun, 23 Dec 2018 13:04:38 -0800 Subject: [PATCH 031/104] Update SDQL_2_parser.dm --- code/modules/admin/verbs/SDQL2/SDQL_2_parser.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2_parser.dm b/code/modules/admin/verbs/SDQL2/SDQL_2_parser.dm index fb857bfb02..087dc569c1 100644 --- a/code/modules/admin/verbs/SDQL2/SDQL_2_parser.dm +++ b/code/modules/admin/verbs/SDQL2/SDQL_2_parser.dm @@ -91,7 +91,7 @@ /datum/SDQL_parser/proc/query_options(i, list/node) var/list/options = list() if(tokenl(i) == "using") - i = option_assignment(i + 1, node, options) + i = option_assignments(i + 1, node, options) query(i, node) node["options"] = options @@ -630,4 +630,4 @@ else i = variable(i, node) - return i \ No newline at end of file + return i From 91ec7056c99c77b6f1578e2823226cab51505855 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Sun, 23 Dec 2018 14:32:12 -0800 Subject: [PATCH 032/104] Update time.dm --- code/__HELPERS/time.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/__HELPERS/time.dm b/code/__HELPERS/time.dm index aaf7ced922..5fe65af8f3 100644 --- a/code/__HELPERS/time.dm +++ b/code/__HELPERS/time.dm @@ -64,13 +64,13 @@ GLOBAL_VAR_INIT(rollovercheck_last_timeofday, 0) //Takes a value of time in deciseconds. //Returns a text value of that number in hours, minutes, or seconds. /proc/DisplayTimeText(time_value, round_seconds_to = 0.1) - var/second = round(time_value * 0.1, round_seconds_to) + var/second = FLOOR(time_value * 0.1, round_seconds_to) if(!second) return "right now" if(second < 60) return "[second] second[(second != 1)? "s":""]" var/minute = FLOOR(second / 60, 1) - second = MODULUS(second, 60) + second = FLOOR(MODULUS(second, 60), round_seconds_to) var/secondT if(second) secondT = " and [second] second[(second != 1)? "s":""]" From 59b4f87313fb98e0afb174ac2d4d43ada61c1ff1 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Sun, 23 Dec 2018 15:18:32 -0800 Subject: [PATCH 033/104] Update SDQL_2_parser.dm --- code/modules/admin/verbs/SDQL2/SDQL_2_parser.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2_parser.dm b/code/modules/admin/verbs/SDQL2/SDQL_2_parser.dm index 087dc569c1..93250a3c85 100644 --- a/code/modules/admin/verbs/SDQL2/SDQL_2_parser.dm +++ b/code/modules/admin/verbs/SDQL2/SDQL_2_parser.dm @@ -93,7 +93,8 @@ if(tokenl(i) == "using") i = option_assignments(i + 1, node, options) query(i, node) - node["options"] = options + if(length(options)) + node["options"] = options //option_assignment: query_option '=' define /datum/SDQL_parser/proc/option_assignment(var/i, var/list/node, var/list/assignment_list = list()) From 0106867cac31898bd2c97e865b392463a9694623 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Sun, 23 Dec 2018 16:35:58 -0800 Subject: [PATCH 034/104] Update SDQL_2.dm --- code/modules/admin/verbs/SDQL2/SDQL_2.dm | 30 ++++++++++++++++-------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2.dm b/code/modules/admin/verbs/SDQL2/SDQL_2.dm index 7e87b266d0..612b0b82de 100644 --- a/code/modules/admin/verbs/SDQL2/SDQL_2.dm +++ b/code/modules/admin/verbs/SDQL2/SDQL_2.dm @@ -224,6 +224,8 @@ var/datum/SDQL2_query/query = new /datum/SDQL2_query(query_tree) if(QDELETED(query)) continue + if(usr) + query.show_next_to_key = usr.ckey running += query var/msg = "Starting query #[query.id] - [query.get_query_text()]." if(usr) @@ -251,19 +253,10 @@ running -= query else if(query.finished) - if(length(query.select_text)) - var/text = islist(query.select_text)? query.select_text.Join() : query.select_text - var/static/result_offset = 0 - usr << browse(text, "window=SDQL-result-[result_offset++]") objs_all += islist(query.obj_count_all)? length(query.obj_count_all) : query.obj_count_all objs_eligible += islist(query.obj_count_eligible)? length(query.obj_count_eligible) : query.obj_count_eligible selectors_used |= query.where_switched combined_refs |= query.select_refs - if(usr) - to_chat(usr, "SDQL query results: [query.get_query_text()]
\ - SDQL query completed: [islist(query.obj_count_all)? length(query.obj_count_all) : query.obj_count_all] objects selected by path, and \ - [query.where_switched? "[islist(query.obj_count_eligible)? length(query.obj_count_eligible) : query.obj_count_eligible] objects executed on after WHERE keyword selection." : ""]
\ - SDQL query took [DisplayTimeText(query.end_time - query.start_time)] to complete.
") running -= query if(!CHECK_BITFIELD(query.options, SDQL2_OPTION_DO_NOT_AUTOGC)) QDEL_IN(query, 50) @@ -298,6 +291,7 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null var/start_time var/end_time var/where_switched = FALSE + var/show_next_to_key //Select query only var/list/select_refs var/list/select_text @@ -428,6 +422,7 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null var/msg = "[key_name(user)] has (re)started query #[id]" message_admins(msg) log_admin(msg) + show_next_to_key = user ARun() /datum/SDQL2_query/proc/admin_del(user = usr) @@ -466,6 +461,7 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null var/value = query_tree["options"][name] set_option(name, value) select_refs = list() + select_text = null obj_count_all = 0 obj_count_eligible = 0 obj_count_finished = 0 @@ -487,6 +483,18 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null state = SDQL2_STATE_IDLE finished = TRUE . = TRUE + if(show_next_to_key) + var/mob/showmob = GLOB.directory[show_next_to_key] + if(showmob) + to_chat(showmob, "SDQL query results: [query.get_query_text()]
\ + SDQL query completed: [islist(query.obj_count_all)? length(query.obj_count_all) : query.obj_count_all] objects selected by path, and \ + [query.where_switched? "[islist(query.obj_count_eligible)? length(query.obj_count_eligible) : query.obj_count_eligible] objects executed on after WHERE keyword selection." : ""]
\ + SDQL query took [DisplayTimeText(query.end_time - query.start_time)] to complete.
") + if(length(query.select_text)) + var/text = islist(query.select_text)? query.select_text.Join() : query.select_text + var/static/result_offset = 0 + showmob << browse(text, "window=SDQL-result-[result_offset++]") + show_next_to_key = null if(qdel_on_finish) qdel(src) @@ -1022,6 +1030,8 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null v = SSmapping if("SSevents") v = SSevents + if("SSeconomy") + v = SSeconomy //End else return null @@ -1162,4 +1172,4 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null name = "VIEW VARIABLES" /obj/effect/statclick/SDQL2_VV_all/Click() - usr.client.debug_variables(GLOB.sdql2_queries) \ No newline at end of file + usr.client.debug_variables(GLOB.sdql2_queries) From 32b4a5e75a7f12032d79e45839a48c37847d9adb Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Sun, 23 Dec 2018 16:37:19 -0800 Subject: [PATCH 035/104] Update SDQL_2.dm --- code/modules/admin/verbs/SDQL2/SDQL_2.dm | 2 -- 1 file changed, 2 deletions(-) diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2.dm b/code/modules/admin/verbs/SDQL2/SDQL_2.dm index 612b0b82de..60af10ff4e 100644 --- a/code/modules/admin/verbs/SDQL2/SDQL_2.dm +++ b/code/modules/admin/verbs/SDQL2/SDQL_2.dm @@ -1030,8 +1030,6 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null v = SSmapping if("SSevents") v = SSevents - if("SSeconomy") - v = SSeconomy //End else return null From 8531ff85951c93f4ad6a96dd06f6a6c14158d690 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Sun, 23 Dec 2018 16:43:27 -0800 Subject: [PATCH 036/104] Update SDQL_2.dm --- code/modules/admin/verbs/SDQL2/SDQL_2.dm | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2.dm b/code/modules/admin/verbs/SDQL2/SDQL_2.dm index 60af10ff4e..8155c6c6b4 100644 --- a/code/modules/admin/verbs/SDQL2/SDQL_2.dm +++ b/code/modules/admin/verbs/SDQL2/SDQL_2.dm @@ -486,12 +486,12 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null if(show_next_to_key) var/mob/showmob = GLOB.directory[show_next_to_key] if(showmob) - to_chat(showmob, "SDQL query results: [query.get_query_text()]
\ - SDQL query completed: [islist(query.obj_count_all)? length(query.obj_count_all) : query.obj_count_all] objects selected by path, and \ - [query.where_switched? "[islist(query.obj_count_eligible)? length(query.obj_count_eligible) : query.obj_count_eligible] objects executed on after WHERE keyword selection." : ""]
\ - SDQL query took [DisplayTimeText(query.end_time - query.start_time)] to complete.
") - if(length(query.select_text)) - var/text = islist(query.select_text)? query.select_text.Join() : query.select_text + to_chat(showmob, "SDQL query results: [get_query_text()]
\ + SDQL query completed: [islist(obj_count_all)? length(obj_count_all) : obj_count_all] objects selected by path, and \ + [where_switched? "[islist(obj_count_eligible)? length(obj_count_eligible) : obj_count_eligible] objects executed on after WHERE keyword selection." : ""]
\ + SDQL query took [DisplayTimeText(end_time - start_time)] to complete.
") + if(length(select_text)) + var/text = islist(select_text)? select_text.Join() : select_text var/static/result_offset = 0 showmob << browse(text, "window=SDQL-result-[result_offset++]") show_next_to_key = null From 03b88acbdb1d3091c8b38eba693e0496d9ea35dc Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Sun, 23 Dec 2018 18:19:21 -0800 Subject: [PATCH 037/104] Update SDQL_2.dm --- code/modules/admin/verbs/SDQL2/SDQL_2.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2.dm b/code/modules/admin/verbs/SDQL2/SDQL_2.dm index 8155c6c6b4..78fbebf1c4 100644 --- a/code/modules/admin/verbs/SDQL2/SDQL_2.dm +++ b/code/modules/admin/verbs/SDQL2/SDQL_2.dm @@ -484,8 +484,9 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null finished = TRUE . = TRUE if(show_next_to_key) - var/mob/showmob = GLOB.directory[show_next_to_key] - if(showmob) + var/client/C = GLOB.directory[show_next_to_key] + if(C) + var/mob/showmob = C.mob to_chat(showmob, "SDQL query results: [get_query_text()]
\ SDQL query completed: [islist(obj_count_all)? length(obj_count_all) : obj_count_all] objects selected by path, and \ [where_switched? "[islist(obj_count_eligible)? length(obj_count_eligible) : obj_count_eligible] objects executed on after WHERE keyword selection." : ""]
\ @@ -493,8 +494,7 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null if(length(select_text)) var/text = islist(select_text)? select_text.Join() : select_text var/static/result_offset = 0 - showmob << browse(text, "window=SDQL-result-[result_offset++]") - show_next_to_key = null + showmob << browse(text, "window=SDQL-result-[result_offset++]") show_next_to_key = null if(qdel_on_finish) qdel(src) From 34c861368159b63718899cefaf507bd95d8d6407 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Sun, 23 Dec 2018 18:20:03 -0800 Subject: [PATCH 038/104] Update SDQL_2.dm --- code/modules/admin/verbs/SDQL2/SDQL_2.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2.dm b/code/modules/admin/verbs/SDQL2/SDQL_2.dm index 78fbebf1c4..80b4484ec9 100644 --- a/code/modules/admin/verbs/SDQL2/SDQL_2.dm +++ b/code/modules/admin/verbs/SDQL2/SDQL_2.dm @@ -494,7 +494,8 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null if(length(select_text)) var/text = islist(select_text)? select_text.Join() : select_text var/static/result_offset = 0 - showmob << browse(text, "window=SDQL-result-[result_offset++]") show_next_to_key = null + showmob << browse(text, "window=SDQL-result-[result_offset++]") + show_next_to_key = null if(qdel_on_finish) qdel(src) From b40e1cd73186c08437c0eeeb0f706b57ef85f83f Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Sun, 23 Dec 2018 20:18:37 -0800 Subject: [PATCH 039/104] Update SDQL_2_parser.dm --- code/modules/admin/verbs/SDQL2/SDQL_2_parser.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2_parser.dm b/code/modules/admin/verbs/SDQL2/SDQL_2_parser.dm index 93250a3c85..272bf83ca4 100644 --- a/code/modules/admin/verbs/SDQL2/SDQL_2_parser.dm +++ b/code/modules/admin/verbs/SDQL2/SDQL_2_parser.dm @@ -97,7 +97,7 @@ node["options"] = options //option_assignment: query_option '=' define -/datum/SDQL_parser/proc/option_assignment(var/i, var/list/node, var/list/assignment_list = list()) +/datum/SDQL_parser/proc/option_assignment(i, list/node, list/assignment_list = list()) var/type = tokenl(i) if(!(type in SDQL2_VALID_OPTION_TYPES)) parse_error("Invalid option type: [type]") @@ -110,11 +110,11 @@ return (i + 3) //option_assignments: option_assignment, [',' option_assignments] -/datum/SDQL_parser/proc/option_assignments(i, list/node) - i = option_assignment(i, node) +/datum/SDQL_parser/proc/option_assignments(i, list/node, list/store) + i = option_assignment(i, node, store) if(token(i) == ",") - i = option_assignments(i + 1, node) + i = option_assignments(i + 1, node, store) return i From 81f5bfa861caf3c7fb8283258a14a7a1f72b170f Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Sun, 23 Dec 2018 20:34:22 -0800 Subject: [PATCH 040/104] Update SDQL_2.dm --- code/modules/admin/verbs/SDQL2/SDQL_2.dm | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2.dm b/code/modules/admin/verbs/SDQL2/SDQL_2.dm index 80b4484ec9..d3cb654eeb 100644 --- a/code/modules/admin/verbs/SDQL2/SDQL_2.dm +++ b/code/modules/admin/verbs/SDQL2/SDQL_2.dm @@ -396,7 +396,7 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null stat("[id] ", delete_click.update("DELETE QUERY | STATE : [text_state()] | ALL/ELIG/FIN \ [islist(obj_count_all)? length(obj_count_all) : (isnull(obj_count_all)? "0" : obj_count_all)]/\ [islist(obj_count_eligible)? length(obj_count_eligible) : (isnull(obj_count_eligible)? "0" : obj_count_eligible)]/\ - [islist(obj_count_finished)? length(obj_count_finished) : (isnull(obj_count_finished)? "0" : obj_count_finished)]")) + [islist(obj_count_finished)? length(obj_count_finished) : (isnull(obj_count_finished)? "0" : obj_count_finished)] - [get_query_text()]")) stat(" ", action_click.update("[SDQL2_IS_RUNNING? "HALT" : "RUN"]")) /datum/SDQL2_query/proc/delete_click() @@ -416,13 +416,13 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null log_admin(msg) state = SDQL2_STATE_HALTING -/datum/SDQL2_query/proc/admin_run(user = usr) +/datum/SDQL2_query/proc/admin_run(mob/user = usr) if(SDQL2_IS_RUNNING) return var/msg = "[key_name(user)] has (re)started query #[id]" message_admins(msg) log_admin(msg) - show_next_to_key = user + show_next_to_key = user.ckey ARun() /datum/SDQL2_query/proc/admin_del(user = usr) @@ -665,7 +665,7 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null select_refs[REF(i)] = TRUE SDQL2_TICK_CHECK SDQL2_HALT_CHECK - select_text = text_list.Join() + select_text = text_list if("update") if("set" in query_tree) @@ -1031,6 +1031,8 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null v = SSmapping if("SSevents") v = SSevents + if("SSeconomy") + v = SSeconomy //End else return null From d7397d50195fced901a613d6d2760552826ac7d7 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Sun, 23 Dec 2018 20:44:32 -0800 Subject: [PATCH 041/104] Update SDQL_2.dm --- code/modules/admin/verbs/SDQL2/SDQL_2.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2.dm b/code/modules/admin/verbs/SDQL2/SDQL_2.dm index d3cb654eeb..d2a106f917 100644 --- a/code/modules/admin/verbs/SDQL2/SDQL_2.dm +++ b/code/modules/admin/verbs/SDQL2/SDQL_2.dm @@ -683,7 +683,7 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null /datum/SDQL2_query/proc/SDQL_print(object, list/text_list, print_nulls = TRUE) if(is_proper_datum(object)) - text_list += "[REF(object)] : [object]" + text_list += "[REF(object)] : [object]" if(istype(object, /atom)) var/atom/A = object var/turf/T = A.loc From 502fb7cec8c1ed49d79d48d5702b15bc63ea716a Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Sun, 23 Dec 2018 20:44:50 -0800 Subject: [PATCH 042/104] Update SDQL_2.dm --- code/modules/admin/verbs/SDQL2/SDQL_2.dm | 2 -- 1 file changed, 2 deletions(-) diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2.dm b/code/modules/admin/verbs/SDQL2/SDQL_2.dm index d2a106f917..85866d5c51 100644 --- a/code/modules/admin/verbs/SDQL2/SDQL_2.dm +++ b/code/modules/admin/verbs/SDQL2/SDQL_2.dm @@ -1031,8 +1031,6 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null v = SSmapping if("SSevents") v = SSevents - if("SSeconomy") - v = SSeconomy //End else return null From 96b4171044f43f912d52dccea33640d0791931ae Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Mon, 24 Dec 2018 01:52:08 -0800 Subject: [PATCH 043/104] Update neurotoxin.dm --- code/modules/projectiles/projectile/special/neurotoxin.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/projectiles/projectile/special/neurotoxin.dm b/code/modules/projectiles/projectile/special/neurotoxin.dm index def7ea187e..3a0bacd0f1 100644 --- a/code/modules/projectiles/projectile/special/neurotoxin.dm +++ b/code/modules/projectiles/projectile/special/neurotoxin.dm @@ -10,5 +10,5 @@ nodamage = TRUE else if(isliving(target)) var/mob/living/L = target - L.Knockdown(100, override_duration = 30, override_stam = 25) + L.Knockdown(100, override_hardstun = 30, override_stamdmg = 25) return ..() From 0d78a109f6a36be7ed07046cb11e90a98e7dd890 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Mon, 24 Dec 2018 01:52:24 -0800 Subject: [PATCH 044/104] Update human_defense.dm --- code/modules/mob/living/carbon/human/human_defense.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 4185f8f3aa..6e845330c8 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -273,7 +273,7 @@ else playsound(loc, 'sound/weapons/pierce.ogg', 25, 1, -1) if(!lying) //CITADEL EDIT - Knockdown(100, override_duration = 30, override_stam = 25) + Knockdown(100, override_hardstun = 30, override_stamdmg = 25) else Knockdown(100) log_combat(M, src, "tackled") From 1db9e44f5b5af24fc4ff9029f1b271098f47da41 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Fri, 28 Dec 2018 10:09:42 -0600 Subject: [PATCH 045/104] Adds two donation items --- icons/mob/custom_w.dmi | Bin 26388 -> 26662 bytes icons/obj/custom.dmi | Bin 19683 -> 20061 bytes .../code/modules/client/loadout/__donator.dm | 12 ++++++++++++ .../modules/custom_loadout/custom_items.dm | 10 ++++++++++ 4 files changed, 22 insertions(+) diff --git a/icons/mob/custom_w.dmi b/icons/mob/custom_w.dmi index dc79247d48cbc51bbe9296ebec85ae688f7b6a08..a3580bdc42f90926f0a49ff149497e7aab05bd1b 100644 GIT binary patch literal 26662 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 Z^NPCYGwL__0EkLKnyR`gpOkE0{2%eRVom@6 literal 26388 zcmb@tbyOWO_cnTPE$;5_#oZ~zifeIqEAH-2p}0#a?!~=8af-WBIB0=`f5ZE`@BQb> z`tDkHts^s;Op=}Ky`Lw^PV^^bxp&A!$RH5to%{!BH4q5O`0a}b52S>f6e|KZ7Css} z?$Q=+X0A5Q?lw-2Adpv1d|IDlKL={W6j)uynRO0XQRs#XSBYc`Hz}K6X(35NnIWWn zGk74gj7>oHAzdtZ zV@@@k4ZS_hD0^AGv~X^cf?x+-hT->c)&(z^VNo6w%5K9qgqbcMbrPlUj;e>;M?1tk zB`B(B7?YMqIv?eBXOp@RBIib{P)EXr-qd(>N1`?-jKS+jba{tsbdObn7MAWFrqn$YKhR-UsAmZ zHn`j-^WGuC+)nDX!!kR0(FO;$yB~gVg4q?e59=i#31rC&gMHNhe7TVmAm0wuv#7_< zyyRJqC2%zA>CgA|$x52LZn5M_P(BsPT2DEg+^l-2*2_>>BGtD>f4m~*$t==uG1<8X zfha)o(h?e8Ij6bae(DxKM*``Ozw*+q+bBTAuBhQzV9SowyTDj!5V*8|LW%Q)k160{ ziP`$&;tnE|(SUC*(1r_ZM{YB?L5?Ylp&Dab3NLM$_J8+zj@$d3oc{b+KC4N|by8k! zXD#C~hMcCFvt5&L* zSY3+xN}>~1sEbsou1zBdG!V+}ES^E2+(xIwxr$vQk9|t?^3t&Lm`h1YQWa*_HjwR9 zO;=b*2@0B?HqKP+1Z63be$opg_uj+28e^`7Cl z8UH&~RV$)IMLpm$lpgv?eJ)B$40oH5t{)0TL4xDq_gk^rh60FUet}SLUl;^gq|Mq+ zSByPnIeyUtBOY6g#C_LCE|*#7BX`WBBaYoh6_tX91__Uj^z?U-(>ZJ)O{zS$cTj!+ zcil0fsSXErfOTbc!rIYMQeU6hquY~!hlgj{x_@SaEs$v|d(c?;@w5>Zlmd?i3+k-5 z!LF?Mjy1M_us;zww5fI2{ZerS(z#DKKpd3Ug>L;`@wH}uID_YHs|hl zb<1VlpL*~np7nbYBQm59Qks&s`_GFKpgWh+u#;9NU^BPzs;j}7*~M}Su}HubB6<%p zCT3wpCFhvqV{(I_&T!e*M#t+4*wi<0QNes~#;xH|9IocfDK_d$9WEG*XVAG6^X*P$ zP>wuD($6o>zGZjUEa~nGlI4aNrlw{*A`()_$D!?rkMHrGKND`Rci#)Ra`zBbUS8Hc zc?j!uKai1XG0(Ec4hB9Q7B@WBUCe*vx(Ez$-f)M<(_bT3M8tcspZ-!13jLi_hG+YV$# z@GX;tFG=1@VkuhP5voZ^39i>j zK)sXr`Bbkf*M%jAy*;;nA3VAtI8Z^;o2W8&atJISezZ@O{LX(V!d@&HK*r-)`{uh= zLKaG+r^|H_^G`mgb5>K^XIUbVzGvjG6be*sqg9({E~_=GR^zj!3b{lsJVv%$ttava z9wNsMc{#V~b-PHe4-2*}TM2zyBw~7z=iMUcpv;Vka;WadTj2!q>H*TwYHJ?-Jy$5u z#bZy`wuZgILSM zh0&?X8OQ_$O9A3fkQ&|}a6ZxRjle}ufiK1cicX&I&ZKvc zAsc25whPoyu*cA-{01Fhoy1rVwUV&^osE^{LII< zSeI~wJhSp^FC;(-l7ft%P+GSy8m9VONNjEGk~z7tHUlqt441A7_qtiLpXDSqNF7G2R9#|nYcO4j?tv_ap#l-qC}=_=N=h3PgVTR zImo$qC{22-ieRt~Yq3Ab>pJ{!G(Y3A{j51rSbPi<$<2zMs(%2J2rDGw5z5nb#!=e{_SJH` zGJP+&(v5T5o(Ta|?ciX|_f7nVR#S89?xEAIF$lsPRM|z!%F5awi2m77apS?OQQvev z`}ylvJZF#w6D}epho>G!3B2HhB|*IG_RplT?)O{{W`?Z}zBHexh+lqA3GRH~$ z9GLGIJna0*T0<(bAv~V0ukj_0MOQl~PSe?HhLKM#SAwW(4>wn{*yE*p0+f%oHR<>Cu&M3hOnk4_cC}1AGKr)G$e?^~4QO0-a%Nq%TClfz|CAfllS2mShh zy2<-l>k(wkyV~lBj=W>GR5B<{(q2QLi&UC(aRq z13|sm!5%DHxbF4HfIy%|N`;nmFi_zKSi{o7VmDnIX}B^n0~jy^B3~>kOhvZw z*bF|@iPP&ke!B@X;~?HE&BzQd z*Gie;Q|t?h9K$3Wz2k4f3b|eX1KG@!+56W{#G>2!*^rX1WR*AIy3cLT7&CHum`b?e zK&kb#5eGK3?+E)(pH!03Y}^MkC|R@$N&ClI9gh)lMS@R>&u)0e|K6#;VU4aHENk>{ zT6D!+6mT)QX@8IpONSYS>1yE6FDT6@Zaj*f62d=yR~nts-$VpRRQAkKR@=_P@jqbI>o)=0q{Kio`U;E9Zaie7?jz9MK!bFAnySu{I5 z6v9RlDa>rBApuFeFL$q$rs7mZ^CVxVdPs{?n(FlSz~M+BF+c5S*&C2>voV^t&#}~A z;;xzT_nP5Hv4z3`TbY$#46O?zu$g_v|31uguw#r@dj6_lz-IG+H+$ZYJ*`a~VSk60 z7Ku6#+<-`un;Ziut-+B~#78nXcH!ofu$PEhb0I-$T!b;IPh?!EJ={8VJ)&eMcf32M zRvfZ2-;4!r&=`I0;FeeR*?j_t@1}DJqfimfdK_Stzbalh6hfHueN zr>j~Ey1LdKzsZ948JdT8>-iF?!7mn9XfdxgluWFgkb_0zQ_?vKNI0j7V{PpJ)Us%H z9i>$z(qo&w>DO(-O0Q&vc%L9q7gn*($vs5hX)HF|n{h%F5`h zxrr2`{(gT_gOaS}sH7M)teBOIxbE7_%EACLByAb%AoYQ>EvapGCmLD?bsD@l>vgIT zkq;1FJ?+u7^^MLK9x_4i3E~V3b6H;MOgII9TUKZ?!NS3rTxGux=K|GXF#pJ%y&Y}! z@aUENIqdyra6>;HSwliX3bZPxO?Y?FiSej4LfQy1R7fguj?PxXcbOm^OV=d#b9roSR%!3X$X zaK!NmqtO}(`Sv&L4)b#|4`qyxhy#1$Pw-Y`dO&rTFZcqU9aN2Z&Tm#6Fo8(hObW+8 zuM>l$Ds@U_T*~k6&ADvYg>OSSfO}^mZ_YOQF_R@)iLMtFo_Y(yL!IVl*rk1&7P`jq zW(ug}eXhWh&~56smZC-^8vmcOfzUo<2;$po|CbKeoACSWz#0bZYo)%|w4i9+i2h6Jw7a|(s6d8vxVMK<^#?gUrpHRB zTFbgw4**w`YY+t=pY{TS-+9+vN@r7(@hrJBvVQ43zbQiR|Z{Xes%8S6A1l zMzd4f?s*mfz?+(zw{I4W@a-q^#qt4F{9)8%i23+&=@M4JU+70qzCCev&}s3XrL-Cu zOB2eg*}3p3@9+uWcBr%8GLEm4xgEW>^MQi18CBX^8ds4OX2$E1r3l`D%`ZY$!(=CO z^>Vjfg^;)DGr7-w(?pU=g~aYK>mJ9D906%^?3JF|1mKj>e?wNxHKlk1wd(H9ra z2KokJFqJlMh6mW7om~}0KY)0Pc=)3}l#^LJu@o$*jWIDl(;eQS3@qq2{#vNkx9H$M zn9Nl;x}DwZ#xtph*f#6w`e%s+ib5HPfqw&{MTM)Pt*op7_y}tRdg-!uaBy(VYHsZD zx-{);sU6Zejm>#1z_0*efiCot5+r{4w_>m>6NKgW4?uBK3k#EkGYonWo@#4y?@n%B zLqB$GD)%OieCKe9gIudOHMJCeFIuj?`N`UgqEbyWGZa)=3`3WS6ienEMpI14?)V%9 z6U1laWq2hQoRdR>MMjnY$mc=zL#^_3&~vjF$HZGenxBmg4OG|MvS9ITOmiT2Xxf&plJzn*E)xY`YvLwz%0psqLX74}7Y>$d0L5dlY3CA+>hE4f7f; zB5Jy1pM&vV7`00R!JR>oq)9LV@Og5ebowBt-L5JYofI6 z-S7G_N|wm9t){N7s;l|N$ND9u>ixjXYbW*IC4ftmQkv~XN8UR3!jZ%Dz%jaPa4k#& z=5IotZ1NvJN~)`;a;Q}O*+HS%UC46v!_5EjL7D|`lU;fT1*D{;^x@;jlt1V`g@MmE zi?AS5Gc#OFLpeWEZ^1J0w5IB`Bf+;$%pXn|N}iAd98RZxRHr3O25sZ>aIBTf;rT0! z7}+C^Chi1BbB^S$%*%VAy$lS(k#gkzE7krx9%x>GQz5)BLdH!`ulQag+a?=&ARyso z{MVrK=F&3E-f`$5!!YHvclro_i@ICiZp?+E*%$3=j4Pmx94ccBUJERTqn=j3k|Uh` z<~{dTcBlXeSbTAWJRmJjN4 zGAD&Uj)o84H5xrq@B##135e5o3x zq8~denTpCtOFhyOFE7-wcyfjW0pl#>Pg(3csV-GYkn}OA_iPSaC@9GZ5)9IW4XE&JQ*z}i->pi0`@iV3 z9%qXi*^h1K>34jE@scRJ7OK{&^gD@QzJ%MG8dY_H3(^IHfx0m0h)B;9;)nkI6ckto z^`fjd56J-f(LY+XS8)v{rmrPREGeM@yoR}_nK8#6#S|XYVQKl}3hw9ygMq)rQ2yw( z-C~N9sMq9~s_*WvKO|AYH&7zc>=wX`Acr4;1-HJw{+EKn08oC%x%-%cg47Qszhlq# zikh0?3hYR@?dpmOP=S56v2E;%sP`YQI6)VJKY#vwZ0~J@9c5vWzMZi($HRL7>T}i) zY882ejqctNToe5m`f5`>oIS;ci*py9W6$N=@KlZACt<0Yi~$8BZm5^Vq3SU*Of@G@ zY*OhG=i@(vw=`46PVF*W3Kbg!RT3X38TltBKE8))*PJy0mD=l#pH;%SeJJ(;1wd-l z(8T=5zH3(T6Wu^#NH1Kb%J#ZS6&nWz%k-eq8e?(|-sL)_y@d?oH`SER%h3PL{&13*GCe)^eH`!Z1#>61!d&q5cdcW6JRSiznjvrA< zKlI;+-^B`+=}qG_@#|h3#?>~U{3ew!-Rb1z$@tg>J&|! z=S!DOa(~l*>^iWhTj7B(bIPz%f$ud0oz_a|CBFV-ZV;31&E|7DV8M&EKe@w;9opf8 zf#rN4*M*1S+qht(*Y-3s+G+tUE-bD_*BnP;fy6&KbFgSJe~o%5yQ5!=4%#m(Dw4Dg z-a?0Di=oOE0C_#_6~m8jYUG0AskPn8zv^%bv%dTJ>w}JkJ;JHNk#j0{SDo!2rpaX| zTGw8jz$o75J_LB`Pc9ww23q~*ifv*eXGQOyKZOu4R)<#lum`+YCc1AdJC~=18<27h znmr39Jg%yLGk~OCIBax&GlOY(PjI$-Yb;#zU#bESAV@q1Kt>|OsK33@5cmO+CH-VV z;9u^)EaiW7nq7c>*i%zDweWGNFei>DQA(<*&|$=h<$4@W&=a=ifVD1 zB!4RdqB<=MN3QHSY-K;))owRfFMZlTe0lBL{eLECKf_K*A)b8G;#cW?#?WghfsQ9X z3k0A$F&(#FX1~)rg?WBnbIZOlZ(Qh|aM;Nxg>JVAx`UoheeP+xuyB$l;1}=*fo#V~ zwtM<{5qz-hef8&wF<*|Uivyic`fEUH|=+sGNQ zQN{VxggPmH=a_shY!R_V9oRKFGR7HfjIH$XoK5hHPXaqaPzGCu=tI#hR1nPcCG)gj z)@yYa79y#s{wF$eONRrMhHAHGp$1eOF~Z={Y83BFFyu-1iR6_=cJU&AF(GG5mF71r zKZwz<@1B&;|66B~IwU0Tm&1TQbf288vFnMX$ng>!1?jKx_s-v!$+(`6?8pCSE)255X3ZE6pg?UWLlotLCRiQk=fb|(yKq*0=o`pz z=YTqc(fHTY6_vfvl0!npfM=*36|Q6Zh&o(4iBJ5F#QqC~cRGB{^7QY0%@wK*$tkAY zHLNZ0!x_GZvNGCo&0^|?AwCWL`SYcRZm}}x=!BW$*i|j2KuGkLiIJicAEnXGR5#}X zf_Hi+q7~g=q})%|+2>IHMCg#Zmw*Pw&#~SFVE~~>(bb9S{OA6%u6TU>VT9rdhb&>> z;c?V!prhe%^NknH+w!pBp#Z;*&~;0n`KYRBkT{F) z@FC3nx~m&-;{Tmr0=-vf^!Po`+QB17#KFdBI@L1VwYJ8d6u!sE*62@a8ypMz?<543 zp#?&JtS!kjN?|{iAj`1GNNUp1Bm~5M6mFF9(cDmdU=^*sxs1e!77hLxHpnhE)|o;x zZxO0epdi3y)5B*M3kLr+<;h!T#M+B$1cg0!F9?|=M>-2Yv*vx46;kw#5uH*J6OPUj z73drb4rgxxff5W0YllA`%;neDvvbL`?Xm0kRHB5oktzT+T3zL^efgW$HvjaeR{)!l zu~7220Ag(pbWZp0UY_wr+g2A^$nh4narn9khj7u9z}DKD0o%ComaCgvyJQ+vLH}wD zKr6xxYC}E4Vom|?=K`=Uz)$_yIk8EltIU=Z7=QiFFDmGn(|w#Y%f)Uzuu}55JO|az zjOsTc>RJFjNw3_X?iTa@0WL3$^)N>orC#BpOzdW)M?Mz(Gw8ufsYfW*r-$cypDz;X zaiz4GU0Z_{A$X5@cXpT>s%)>ceATsA9N=K>DQ$z!;h$eJdL1dqKy92F-8h31RU=BI zxQ7Ml`@w|4!P?*;H=xya31l(=1a-?uidykIG<$U49eka(4id>;r|u( zDwzc7{o#?HxG`M+o=%(OXJN47<^O$_p{-f7>H}O(t@EF!F-!q{3PlY86%l^rdG1t z?)47#&{wlCw4zsWSK1F+?F)SmRG3H%rpV|4ef1-Xr!#qWFYF66+5 zFY*gg;`}Z8iv5s6hu$)z4;rJt$T;G4KzT-V>-&z~;K5n)S*xXYQLQnLvoy}7A^Gpt zh&Ia1#JHiZ?UEK12RP&&lmmZDjwjOFk5udgH)VM_PmQk4r^AakVX~drnzy*lo6(LK z$pW(wX?^i0HiBR1b)G*g>=&?o=FC|s30{y--tWO72nK(E16T4JhbTD*HmzhFJFrrB zr+A@8ZNgo*q^&74LT1Ju&%Te6g>IwQ;YfopznN{JVH#T3Vy_Dh?J#TpQ*dd*WiY@W zWZEHkLB}>`Z{wWj^Ej?c{YKe|{;xHs1v*~*MhIin|4ZYJRNzB@83_l}EwquePO<>} znGpTNbhmY?=mQ+cmU;St5dDSw!P5rZw!=KNn|BnDzn$bj8UGGDH7GXqe1PFd`ex5!_=HMW!b@)w7E&DFxv_%FS>Q={WIpC$(g8(9AZ}%_fw|CRD;PE(r zNK)*1Ol(+L?>dp<687gW+w{*k*~JtGu-R}rt%}}NI`?b|p#*c&#pyWuj|{5IsTfQn zZeQlB#|EYB5R@F*(Ic<_%^z*$MYlO6J{OVnn=jA)&4Dx4V*Rt^=UK!4kUlw&TZAJj z+Sc;L-w1Q8Z zK7|kD9ZeksgzKZQm^7lQ>6AhV{(p;=J@t5$3MV4N@=zmZkF01`x@c~+`46uC<{FG_n} zMfJhRx1t+OvM9PiKv`+|OrPw@ISArjg7u+K75)4v`$6Pip#A;{{XEbm;cw17S)%P( zPx#y$tRCAw!!u>-*9R+P^hT3NJHLksb;>jGtqpKKysLafTud-fd230vA@iz|c-3Oc zzySL8O7e;PhjqF2qBqf<5n5p(vGMS1dqSdrh5RxTMQzA3zbgFAMUh<;w##@0N9EF` z@epTOTuXGGB`n!U!Wx8F#?^Rhu{EN?7w7M|(B|w4mojgo#Nf~YXhV+u9u3!w||B>$ZV3Y zR_$B1xMk7vJBB^S7j;Ld4Xl=&rW|WmpJXSX6p*+wCSI)4pyuadsivHxzf@IWpf0VZ zpbE={fuGc}svQZU)93T}?fwvhseI2?!k_t8BI)u&j{b|@VxP@{>Pw$5;5HtxlA!$< zCE;2e%#mEtUOQHUCrQOZt(D)wQ6wU&&%l6e9$+RBh3Q)Kr6P1O^Lm3aH0z5e1zuhRS$hez)H))>0Lf2!ZL-;69^Uct>kulFZEELqbh8M z>@=W7l7q}I%3x;Nh<{~f>zLGj8FOr(TbJ_qp)+9WA%8(>{f1$ckgqFaP&P6;EP$Gx zmdcshB{Mh=0OtIg64Q)J*QDX+@kq%8=|)-~NJ&s}NmW zH|u~WS3FsyR*AVsn5_q7yIP)VsiBiw{sB{fa%s-ptA_gQG}(Z!_uH0~VU5ZTL6mLa0JEA`&cHFaUM> zQ88_m#DkVDJM1zD);qbU7 z?JhVSBW85%I%4!=mhs9%=i+PQ2EY5m43Pai8SNc zMCr-4#JK|ZQ_gUbiqq=#I_z2bUn20q2-Bi#~wAzx~gaJXnZ0NMZ&75%>6}yoj;o%;bW8Q1s<(y z|Jm;hl#!48MwA!6 zbL=_3uFgGt{xbI!S+DO1nRZ3=5k^F_e{=$B#w?)OP-QT=Vpd>_KO240?}S+~2nNw5 z62Yj1LgW33cV9J`$s*eQ@n1|}1ZjN#$#odNxsxaPQ$uDw@uT=DT|O7a0#Y{XLm18` zsh~zfS2fDBa9QT{IJBO0Yo9Whi&#UI@3~8=g3x6eCpUZe`r6K(Ch5-4h%1&l%GM>! z39!eVybKvs7a8thTO*af^6=9TM=Whx2~l$licXMesSUOHZzbLAndtGUNq$nQ8wrO4 zy$J#*%@C`3N|kj2K1|vG7YR@?NgU;3BPQ`3H0l?e+*_*vRUI!V(UmVej7qG2tHjF4 zkBUK$nEseHm0-r1+pko39<<=wh$VahC()*I;`jg?eWR6o$?q*albMbj&bT0-?7cY2 za$-~iD2VFFV5-_o?NZ{i^3#PmH}}_&BRK}fj~`=2WOy14>qq=OT}X;`KIZVaU`?gE zkr>C+j%?iElY@?*jG;*=_=!>F;+01_ zz?DCGmdarxrI{_O*ni{)P$Qv5-x3EB_>WZ2OdnOL36!>_r zrfx@>=mJ)Ce*I_E= z2i1j{ma#}BAdrwLL}Y$#l@B)PSRVCWQ2#c6OA2nwB1in^&D}KRz@GcQzZrC=amLzl zRXq zQ3H5JcSl6K@)V)PH+yoklPJ>mHMD`fw{{Y$4>BGkLDb4)L)Ym)k%UotjT@U)YU%Tq zz^S0QBQ2}!!CINZeW~79YJc_bX;h~S-IE()GKb@g{r@KF1l_xGdC@-CN~=nS4ej`L z{fgAPc$7<6?0@TUc|=W060P}49utiY4%6?z^m`I$y0?Xl$uOWfgt|UQ~R8TK%KlQwHk1#&4 z_nTgpI$6GGXasbC8=j20`KS`(rRX|{Y+c~%T_!iD)K|Byt;G91 zVBg@xGBw62oY0!{*m<$+j&{|f9->vC0ISYs&|4r8>ea)qjL}2$fw@0n=aKOztTt*c zdpY9y+{q~ajMLw##tVa>$21tcSX-y*j)F9H#FAw8Y24?(BxAX()bw(_PUW?ja%8R& z>>f;x=j$S}ZAW+6-V&VwF!`Zy5I^(41{ME;nS)i&L@Bj8WM9j;fwVyKdKLdcIR(dT zEOPR7CBM7h1oTno`5s^HP0y^4{KNf&Vrr>9H@xW+$V8AqkiNnn^S5G^7_scr&*}gE zS*v4uq?aXy(6~oG@w>01=2d?0SI>F$*(?SH)||hr*jde#&kQ|H-T3S%;V4ooyG&*r z_{P^I`jBQ6zGetfl_tIpK>hfrIOr}A54Dt@8AZ>;47ML1dN}4wL6qJ_X6?zST>4b+ zh7)>qrT5fn&IQ_1Y(!(VzWAQ<*T9AL-t{=d@itc`5A<`n$6~$8T*tPEW@K}1rk9p} zBpG-`;^`T-cF#P_!hGvs zSXS8p3XlE)2Z53gKmr{NoYAQ%ISp?CG;&eJ;Y4!wXvD;&dKf}N!l>9-DS3IM`JU(M zx^;Xu199Nyw`HUL$*E@0=jaN|-i1Nw->#H`YNZsnLf_<=SB)QqQG78yZp12`X+5g2 zurF)kJSyXF&>jtP9=~QSO~cQBD+)hqtgM6|P{S5rvj2At3^Jhu_V9bpwJ6|mQ)Xu) zDLFaoQaP1h=Q1+Ox43+V@#(4E2`z(aO{5)S;uQ)7K?)MBQ-3e6l#oK}hu|Hicd8~4 zN#q$Rz&^#1yC6aQXRGIO5U>3bC|5aBwODqWF#(%t1SDR*n0v!-dg%yqgPA+5ADZ)$WWoL9gcv#VIj{-bZw(WL@Ax?VGOgpw?L0ysBdtPx;3m{ z_(IhC3Bl|(-U}+!ZrY$WLIPZ1mG3Vi0mxQyCJNmF)O#2-#eGtDky`6=W{_;3?qvE_ z3_{><`q5Dri19|3qz@h7PBV+3KBPXv1p$(x1?582$O0fHl+Yf2|9FYwbHJ};t7WQo zW@g2?kcAl0U6KIx$s7UdrMqDSIid`hGpH+WiK^b25Ii}MoNfEk(#eVE@5yraAGiy@cqRdu|OOV53*Y=QvX>pHE#Vm zQ!}GQ6|)M(U}L08V&V$M1!f(4mZ`vjFKOWT=zmG2S}`!_(T(?8zxfzl=zHYd($vHq zX6Gey8Hu#qkxu{Uy{O~=2>GMMW@uQ0n0cTl*VCqb3CwwljUSpQzTnd8etlT z6nOXMAP&JN<&ftkMAw4<3k_YpOwJNiZ<530z?E{UsIeIH}fm>X5 zb(QViu6tm4D4q5vMXRF1bcPG6tK$HP%gG@q(qRh<3Z9Pbhj|3nfHr4Bm2uJbT^j*H zpy4;y>M-!~{FojaG=zDsrOI7qPUF{}DsMw#*7*#QW#GUYL<|jfv)`uFW-`4zt8E9A zVk*vsfS2VRU<I;maIbYysW@Vh^aPXMx^Cm9Vp>$ zl4z^_G~3;1J>~L2*2Sh5)xEUMaw&A9N;2ewm9nfZo@ax7ufNC(=LmQ&k@ns^i(1uq`)5aPr1XN z`p}BmS?NVpZt%}%-}!Ph6!{3+kS`L6MU-55C9(ll4!1SpkD=039AyAZ?dvzA$z2m* z7c;C?#-3`uasi6;DcH${V}DaFsq0uFEen#`IuC2^^nj)Q;t%^~VoVq9ChgR7qr`q0 zucgz%7klq!n*?3(LqiTb#a0luJVsFD9)!v2s_2wm6JAfE{tp&!@mxU4a(m9+V5cqQ zu#VQTZ);1Gl$Qt9*@i!IxK0%f&dP%C3otS1p1xM*eyRODCA^|^zt&DQx(ZUq3%F|j z5qj1JgsC4>VaygWx@=ySkJ(TXaq|9-5xhMbph~ms!PDXp}z0>QB;SU>0&!LvaHR`AA|AC+Kd6b#}CI`c3Q)Gq9 z=E`Mb3SS-uX=!S5&$i;t?h3#;N6F32Jvu!-{gQ{}?%{zf@(zG3>*Xy3+l} zcIXzo3MZtit1Df)W2Wl~_T?s8d1JTs#25y(i>dT77JTE}pSZVq!+cCPpfk4~*sqdW?6kGDi9P zh>R+I2r_(g2u}D)kLEti^^lOMHMaBY#C4g|#I>F5vR#=x<%HY)h=;8cGmgm%C_Wrp zx^7<6cjs<;Z(OO~y^gBYf|ExisOEVud49GAsp+E#YKJKlqm8Zn44KCWu01rLybg9FR3urNfb3_xH>Ny+K8HB=z=s)0*UGh={8 zmEr@KIKK0u1dSLzb|^%Gk+I*rUMES=o&eNq&HdA2lNze#`}YRyP3o3=`Me*$m7e6o z(s7KmqrgnG{X1p_X-dPTqxmT*9Myv{C-L;Y{wER3_QN;BshL`)L-{Ess>NdECB}Nu zxMt%4;{KmW|DK!_YE>1^9f!$RYZZ5QlihszLZE*OQ zR0s1U5%w(M$2cF5oKsusVXB@3Z^BVRCnS_@;IVAs_3wKXP%(1xOw`hnPNpJV$3Ec3 zfsh^(ZX!;gL2|V}kuyGfd|RxH0(@bLur&smyvj%u7IRisR+wk+OjKromZnxwWhK(w z#~)raBBZ0C@HeB~tI&R{o}1hK;V2-;5#J~;`(Z!an*S+*?CH|X?rUj(IwHM4bq|FQ z_NMps!F@O)v%~eI_eXv34wA;hWE*+W;L9hU{Kdt^;+7V?!j`e;qfCOq;o*MUX6P+_ z8sLgbkPaS%Vaws%+}vDITbnW1U0;t0L?(s!gDPsP8t+v93C$aC0c|vH>SC|q6OIW| zC+R;qsp&uqg?}d*5Fk1>J}#nLD#wq#{ZI93#U1zFaiwYWFmdN&lj1b_eru0SejYb? z4m<6a!wgRq#gyG43@+_$FB^_^z%Bx$1+{853`}d>jB$2C7O+ws4*nFz$$S!1R2_L2*v^_7|XmAIzxfAzv?#8*|}|Z zT}q6OmoYalq38wWM=-E6hc4TDtah6V7#mSpiOxbw^GeX6%bx42ju%VWx(T35-a(5t zIR4dok=<`>+a(f}ybbn^3rJvNLT-2JoN>rwV;Ykq^Ny5*R*ZW6tnVrupneGl@7&iHyW)3=V@8z}FGmH#wIWgH<)Kunx`ozb&25gQ$S>^7;%B}T%uEj+Y~ z2+_T$ChM05ukZa0o6)8s=X3UP$Ux^dI%Yi%4GQ7dDyHsYU)|)4Yi@31*ex&dQ-xzt z5aYn<<%D*$vs0fBP)T<_+i`*I415hJaayH|s;eE+E=UVhTv$9Aea%aDY?h?)i!K)X zP9H%4qpg899j*0?^U~s%jFuLjYSo`<85xt~*-{USbX;8ETB2HunwePvk92HojH<7% zkHga)G2M~-As*;I9UX#@(9rdk^BH4dV79`*zyJc#(9nSX`~d~6g~4_LxGdTQdi69~ zy!++bg$=XL3SV4jZ_$GYtbk$ zcYJh|vWd>w(@$7XNa)hgv1W?>qm#@cCQwR3Gp_~56U+)GG{|xyOQywfeN137V^x&& zUNMe-2gOSOPul4-46srq#RS9#06W|m&w4C)AU_<%@jXfV0efE0Y!d$yX0m1&_#hz0 z02;Kty?u0aByMFz@A^yu4aD8XiT9oGnF4O>!!`ndNCvK6EWO+-4)*raR#xTiWSj)3 z!?YnIjEHZr<%RJ78*B*!;SXy2T>^YaFk+i`liE2|-T*Sr-~(p@{P%$5WEE?9R(^Fd{!Qb1V?nS=7}Uqo{-m$YAj8D}20cXiEz(5QBG{qYeVQSb#h!pCGWTV z5-CGN|74q{!?xq5?otcwr*F*^@g0Gp^`?!6s&f}T_Lp$>vq;&FA)Hst#7o)2Zb~fX z4V-xXlPdHjFHDkO$N4v|Z}V|v(A>5ct4q!X+`L6i1sIftlt7!=Jpmy~2Ihk)2j)1% z@x#ym>IGNu4!#;NMT@sLu%pRo1liyEUhNvyK8~PJkY(jd39oy!GHvrtwj~3iN#f&% zkE^NAY-}U|LYZ4xF~7)~*Fy}yW+8vpz@eh1u6G%ZPkEG-xpP-lO|0z|b$R0FCW_Df z;2Wyrr@)H;_%B~=Tn3Pg3J|a(Y6*J~2n8jSsP~x3+if6}cv>}8V8Q2Pf3nRO_c<9q zyDc(&eiQ24kv+wt!}Dx;eCX96CgVFB;tswobBEQKIW(vc^brNwWo9V~NdCYSFnNkj zn1_Z-p(qtmK5m&`#QCLnCNc8hFv<7E#}$x$FOM;GbZmdzLJVJv&4_KOL%Wt9ePW6- zVYPPE**czOK-A+XG^+VGKp+z|jVVIIS<#We4J7@a5)D8yD-uiH7uo6}ww| zppLZc65AD~M14p_OtHRTBAfO~q;)&{@267>$J7tzAPPg=GY#V%&Fv5eP=j>&riX!e zd^7HDD7LC?dlXR>7rW^x(%%8dmNW^k_U*mwF`CBj@Be(b%)Nec^fa^)L|0ZqbnT#s zcs?*d2+iKXJC-Znjytx?@SpKjX%G+*#bBi(l{;LIP38GxNa* z@0I$Wf?J+dbq(TThh+&_R;3(h%F0$I*oEBi*gZU`)+TP+X?v?uQ!lmT1waMEX^|;~ z*z4T%A~!cT1bSE0Wy@iA!F%TR8P3l;O_EN@tgN1jnqE?Ga+?M#eF~>mF0GGsl!F~A zS{QqTC|KoQh%uf{0fHwWJ9bWZYQ2vGT2vN6lz=oBtobOGW*4T~!xQ(sTM{6du z>~w!C-gt3@qatJOFUCP^$Q5=&3Yz%lt<_pp#>cSmM@1am+&Cw4X#G3t78SEHNc*n! zL&jTYfIUP}pH#LGW3A(-4-GXemuukROPQ^nb7Q?OP2bRY$dUUFfIqg$&CV6Z#`K?t zBGg+jgfRet_Z=Nfi2xYX>9D+wHX!A%A2eRBvoru`1(%g=Xm3%Pa&BBr3bi@T(sZPS zX%w9x;?99vtlJh=B330k&U)p3YeuQtTmYh$q&wj-*$chYMGaPR6PS*B&UVs+D5=sF zV2AiZMCe{5v$3*b0P6srN}98^BF;5Q0mEMUHI{%pCrYHubZ^zsuX%xY`Bs7$BKI;I zA_?mK3gQ1P>V+Yw4;Z%WxscG^>3-SYo4vihP=X3Ilgmo3v`j^Q?~8&@Y#9z#{kQdf zy-I&hkb2K!dkoTEjt2;d?H_X=DAs0jCCgS5kLlCvts6CWb%HD zQUA7lU!$lXqX<+L{9Cw?^y3AJjq^9V-Ozyl z`TTo&WhDkUXQRV{XR=W|{?*&o2nzr_fVfSsFrCX(#KwfM#RRTBYqh#U1tLX4RZb-`AT|G4#Aj&T_n{*275m?ASd zRrgbd4FV2vNM2^vcb$$U)l|A|&jaP((eZufzjF!pomm-%CPjSP|JW_M%8VpHgMiEh z8G&Bt&2MjN)qWoL?wDG~Gak|N2OK(Z>f$gSoh&&sZJu=}?dQ7-U|!hX+?G`I-&g?b zkwhV-T7KDHQ)PVI?ZM04*;e_NQ;V9?W;pz@`+0QS5S0DHnb{R8g%|DLzo!fju7pmU z2MuVsJ(-&g-V_D6_gkQA1@ixC){I%Ms;QP#u!}Xl9h{Cr4@$Z&naRZRv*&OIn!4k@ zlI~SrLsmXlBMsp1x@)0YquZ3>S>e5avXf)Nqm=UC;~F8L63MMtlbB{^)Op^wx=z}= zynu_2ksEm*Jo zv3ET!Y!%a4S$XmEQT_h7yr~*ip3jxMr}i!nCnx6z#gF}FMZ=4xn|tCckVz`zb|*v< zh#x)fdgaKE5X8GX5)RzghYmxm1ebx&?3j9lZPeB8kX&Fal%P%_15_y(e4j8L3jab` zW8A9)C+?-ACn?|DM1!5Jswo#`N7;hY&%H4vl~ux<7v-8k^OW^S03KA&&)ttBJ4X7! zh;7ZyxB>zKVWKasz%inGd_!kX9>ckX1v+jhU;BGkQ+xZgE-dBF03xV-Mus4*^3b(g z8|b=*)V+!m`_U=tM{q*w#`$VG>&I0rKEG-!(LbgEA_( zEZ))=8OKgQ8hd@zFM$m~yJ!+;3BirN|L_{0$9{K%4Ex67cK!eq(ME~e5{eY~$0uy4 z>Ei_+TBx@|N{t5a53pJ8vve;`#rAv-_Q4*{dInASDOtZborFJs@?s5FlIMoTL8EnAssae;~JM9XeLL+8zE=>w914zlX4 zbkhc}oegE-Ln-C7_=Kz1n;uJU?w2FbkM)Fd)knzE*VrX*ZSDI`tT+bdNT0 zj_J!3PgCo+^O)DRyIwdA!S~{`&U0ru6hp(;N7p(3h&61O8ENUoAF*jaOfpgevr$xk zN;%`$_o}(IsHKU3<`GGpm!45annPx$!`0DFj6L(zcM7t~Y#l*|F|Unv!cf?-Zc4x( zDIgqLiI$zHA`&_>q*YxW1FHeuk&*X8nJbFCH({j znQ^-ze~2btw>?8YV&a$e*Z}u?({^;dNX+?>w?5%V=s;ma_Pe)~i zhk>SxYF?Ruf8Q>C%h-b}@2)}o;xjq}7{^eGcjn_`bQ-cdO2DrfcI7VHG@Liob}Ph_ zqP|CB8)Q>{B8o-&llzF?CQ6+<(NubO++0~jvnw_NCOwfRTh~zEJ-eR6 z$nsmlTCQ!!qEnIVBlRH0?|*K)&=nD3-xK))z5HfXA3<#O^BKTMz@R&e@%3{iW&(5h zZUb3gNSwga{hf(a@_w-zgRmJ}R^RTUk%&I*C}^SskR1Y_(-AQg9o?k++r*x!VrEKR zbwd6A-+aOUs~q8fu@=zQ%t4W{#meq13PiAC;aB;O!R|k`7<4F=l5}HmJT^?dk=-dI z#V7f}1(WQp_9A9aK)$C~$!R2!&i|)QCWQAm6DBf5UOo)N>glJ0=jbKlx|88Y+s|jinu;jnTY+B5L$zbv#zKg9ux>Do<+(`rPjQ9@6DrVRg#j zvBOe1%Q7_F%C8Lb+pd`UW6b5)%y_blvzp1lfaCF<_pK%8CKd8ua#xB3&mOaG3H|JS z-6wtb&SWtGUN{I($ETZAtyF_Q-aN1CFmi#bkWZwZPx9D(-=u<=O= z#ywgs{e*!`hZ0{+VNU(@l9Aq;4Ju_dU14lFl>GE+J1_PTS7qo12UE{_kRWnumaT}{b-}~oR_GyeIfvBa{@f;Nz!4uXU^+B-n+o|`X7{Thj z!s4PtyR^h;SiiI1!kX7hBEw2;65jv&PH+t$%`2(Ew*T}*x#(lPf`Lu-^ z>52epqjZ}KvYjl9H*WRtt}}&JcfaMgn5(n(K-j?3a`;ihF%NOT&Tj~Nc3U=e*iy2}yN;_O_7z_*H&#d!k*QkI%Vek*Fc8aM(fmfj z+ED{u*z|7%#+kzNZtApC#Z}b2z6PfX+EYBE_yonq-tah>Q~1{o|EI=l!I!4a$j`4k zG_$Kyq{3jDiG{(Q+DLLZT*VpSSI~>ovj?5sPZ@8tP5M^p=2Jv8> zpRf`j*>km(J8f2PsI8|LetYZpIX-^n&-KmGS<+0EufXn@5E6v*t6ophiMGvX8dm6h zUw5U{5{eoNth^*d*MR5T*>PBOBjU+z>NJ?%(6?E7s*j|Ve2eDy&XfatE#B}`0ORNK z*2Y^3EWV<^LUY&}z5M>spagn2^qX+s$AI0FJX-RhXYxu)c{w>q2%|HKKrT9x(_2$h zbO@d-9wjAaz2T={zg|?@ZEbB4LJXey3IOCTT9E;WMr6)6{L-{TTCOgGK_Ecm;!Aq^ z#KHpSAa-Dl^9D&pb~ZRX&7WC{w3AiO!duXg@nY=MwQI1OwGdiLe_Pp6#jT?it?1>i z1J-rl=C5K)ESC$e+?V5Wm=jmf_f@NhXZ7(DsjRn>&a0u53-4rPkjO<`7@>5^ z>gw{~^p)|V-teiLsN`xvmag5C6rKMhG2`#*pO@%1fr{A1jkb;5(n=2>1|P2*)!3=6 zmycKD6&V~x*TTX-h6(LqTE2B?IF64v9+$iQG%)W^Ph$RIAu;-%Rq(HLEDW~D{o%uh ztJNs(W%gVuNk3uFlXVqd?-R>G``4T#U}&_Q(T)Ln`ufxMX#fz0Nc;MVaTztyHscb> zLMz&D-l3qQuMK(P1mgw2>5uWII`GX1hIm!as$41A!H6&lyf)Kp>^xzmRW$hony`h+ zJ7c?r-r3_rTqmRH!u`e8>4K{l;KaPiAAS*^?%3WukN8f<#Doe&JOJtG>dQM_;9qq z_}Wh;Wo2o-O&;69ZD3wDOh^4^#N6z9iF)IBf^#c zyLq(%V~OQ{0t8+4Y%TJ40C)oW5j|UfwMBo&d;gTVV^XP~mlpOFL1uqlN-q=_Ch#@5aq?U zewZ`$%pyX?e2Ewxhw8}CFGvzgsrmgh7eTSTq~|}sEFgjN*NucHP2F0E!7xfXC}q$|HFqP;h3NSCs-n0P;YXO3+KF#fx=&@S>R09_wS4FA`jj*^NW zXK8IsaJ*Guoi*2PjrApthgNaWxf7W|(N&3*_ zBWS{F3t$XybX;m(_0WeihprIxgH4Su{3_b`x$wZ7ob?Oj3-~fHk&lir*n<+=VNPrd zz&h7UE87V+D-Eh2y`L&WB3=iNqVIoGJtNtP`R|Ls`znjx$L493?Ki4|a6pCkrzJ6$ zZa?s>)7sJob-+va_mAJB4@03n@!Z560`I4w8@gDy)Z&pqJ7`c$LwJsKo;a%7=;G@& z?O*ivDy;+d`nx;)|5ki3cue0pj?mFML;Qv>GGun#^qO7qArT`@VlEt|=FBr_YFW8l zEn_j+C1_zZ&5J1PpA)xe6+7Oql7_4tD${p9gba`>uqMxPi7TxTnyv$4{<{t|={9@C zn&K*u%y6WP1n^1=5<0nx__jVbi9WaxStOM_i*Vklx~7&$Ypvb8y+K@zO0s@C{kyh= zTw0Zlq)Ut1T~R1c&LUtkQt*R$#h}^0S?Eh^?~whk0rf*8ADhST(xKCW+UV(`IE?P1 z?dzjQN(B6cF7-y0w$JPhN!?4BZ3PD1j}{eDp8jU%DG#hUT9CpSTiLI{gu9q{Y+R;^ z)cTHk3op@Z&EEYxyd8BNJqpd~vNs0t+;7L%? z7?N;qs(zXNB;?T-Q^@)`^*Oe38R@Hl9OA#;u<)(*z(jlYHxtsXH3o@N(q+z^9Aii) zlVwd4EA+_Bx)GF1?XR(z#>7KzV-l86-}4p3rY9>JIi{S!gi^)L7xjnbAc1qqM`sM* zko4^<&HTOyu#neoeKFU}`tZv2^M;*)`w1jkHKG~PH*zUrn|${fDeuhzKWzsOscZpc zYM_(CAED5$UQ85cnp)Z-D6~X*$K_RlL%X#@1V!*uW5z1QQj{4vJb&wYIx?u$`ze6* z1hc%QM^>GNVmgvjirheu(jc8J8yq0Q9iHvCGWicDkD#3-AlnqZd+ta&8_bx^|3q0u zC5J}gArG%gqsO}uinO{Rc`eeck+>N$P~-Fy7CQaq4C;8bC(tu$1Qob7(w#SuLocF z)}O0Q7FvUNl9?t98QZnXJD7fm&l;kQawF4Y6_V=G>*1RKw2?96N4WvkKT)YZgvT| zL-rf-wEMb1vP=E>(x{zDYqlh9Ky#$$$I{s6C64L$3Zr>!pSzqHHWRd?cYHOMlGc8D z^Y?ZJMxx_8G+<+6L;Pw@afFPmdbrAS6P zExWjnBRws{HP1Y!8y@BV;ktq&PWmr9;77WF>BYxyEUW+aJ3^wPu`Deu)%jN$Qq9_a zHcaFWpYbLSCuu0!Hq`8FUe$*P3e09G>BJ>ueatA*i92=s=*V0qBoeoJM+?0k>ZD%aY3?48(I32*~-@re4JmO@Bemnm*#CISI^wq_8vGac8A{f z_qw`wvh2O=lgFE|s5S(h3IiuvGj@RF{4;R=k!7A>I<|g=k&OFGVvoaF!g>!`*+*rk zTSGT00K9cOrl)@008Uwl; zn&F}J(=z1tNj;8CX@a)(DIO1JbXuup!+nBQYc(C)7hZ8ml9@=K(!41;GQ)e?LhQQ{ zU%HRE%Wk4bD5HU5#$3W*H6wFb&x8(NDx|<)!A?!0>5(+I236)8#pdaFN+d$Z+drFA zI+>g2bcTreUT`WZD)NYnV?nO=Ysb15jRrzp!jh7ihif%!y_LUEQ=It=;11gJTcJ@3 zEg8tgBC=8i!Lxhk)XlqR{z?m&F(pM%bExxvTU zP$j8-0u%>N|ymS zy&jA#vWam!H)4q95bqMg|6~3vJ$nSphd};SmwfczGYu^|UAn56|)| zo!cvZ;ziyJFLvIfJQdK-yqhF5lSQV&K~Ep{0ybzTNJ)hg!R%foeRDtS$ate|)d>P~ zNWRa}z(C|K%L)~kChAMd?mzZFOE)*$$i6#sXpGtTmHu+OOCCJn=T#f~)cPzPbrK4d z#RcAV;_|0sU5W|~9nH^#foYc@losl8-F4vcW+GRir8%St<|3yjK)6OuP5Ygl&t$`; z{Os;SygJ_|pKI`Qa;t;sjL!r~7)n;1ZR=plqK8trm1;|_q|?0Fv0pW-M*!2kaZpd? z?$_SKTUU$6kbTo;;;3%f^$u@>6{;yC6XbM#Vr30TFLBw6KLkP%(6RU3_B4;bWEx;b zkPZ6XX`5uo;2CDO^~~&@KY~z?j)o6f2Dg@~ovX!#?7*i3uKmCZAm^b?J353Re3Mg( zM*L}i+*_3TNi8dXQou}zR#4qJOb>YJa28wqY1MEd^$1Fb|X$G>3-JBL9EhMBaELPR92M(CbK^|Av|1`Xj7-cC~CgDkMh(jygD) z_xH?(>OXdgy$KR`q-aO`UWc^YFE)$?5p<-8{xD`#)=P*3eCWHeCD`n?Di@L8y^g*< z*?WR1)b8I%rdd~y1X}(bo^yCsHbO*}U5-CB&vdtht=Yz8dN?Cm4)2C#RbDqc_jP!m zS~skpsCb*~-CqhxGW{jTB|Ys}@SK{rbl)npe$(X$B87mfEz%{RjHC-Q2%b}e73<`1mFN(*kcP46TuN1;@C z52{_Yx0YAitbhX#p)DWNN}ek%H~qr(y+aV1s$PgOSubPjZ`*QnlVNt}*n|5pV^X3% zsww{&MCn33w6cs+Ve#~i%*O@4X@@`2y(Wi+H0R%SKwFIiQBo^Oi9_&$pVA4Zm(?O` zc!!zd2IY$g{q|>(E8MBaKU=h;*I)4qtW4utSFOi#(@rdYkoRP1n5i7vtGntz?t%x` z_68Wouw1WUdfk~R8cC3FfOzBl`fvsAdjWx%1ne-iJ=Y7jNY^kiJ@-6Kn~LaM@O!FP zdW%)~Lq)}Ftw;(LVpQ_&#mma(=CnV*e|Of{;EEb^8Iop4G-QUeIm;5-8#X!Gh)1~uJP&JjcV{Y%)x;xLz4y2!Y4P5D*tlTNWj`E)DW%| z)5g*STxRpNot#H<{+JN6tzFY<`>{tV5Q=GAdQhdX=Y-R)v)OgONM7vs2JaKMnj&Ws z3feKSxLaTCBIdbDnqjlQ7bbQm93uNOkmT)uJ?Y$w(+8oyzy%!wUQX4H%~4cQ%J&$o zhGSFTwOk_n3&}O+wXssI(SFRcB?Q_KIGCi>4X`BV)zomKq2ch%l z<+&(QA8xH_*}pLFfSL@{4ui!g@;7^g0^>>Q7Yit-s65tz$<-oJhm=<2`BX=)NS zYXv8w5NT)UXW#mHtH5j&t095R&XQ8dA@Qsf2(v9pNFWt;EVMuE$B>b>w=cIYh}`*w zs1CKgqJS*3wB}dZ0mGB5^b>JZ>Olvq$>G6#i;Y+g*vTivtYzQ*k4S@PgM_IK&8~Jf zE-5K&_Z$1mnq^P`Ww14ta-INWYIjz91MRtu+aiJ6I{QZn&JMWk!AAE(L*oL5W$j6E z)FLz=oHO3-PPjn={(ATwg81Re*bc|cy3XJ0uim&zG7xo>eR(JEX=6m*3OY!zIG1Sg zn;DpEuSFN^{wQKV6rO$@#@&|fp{|oFj`h#+FQ!dx-R;)`L?D3Z{+!>WU*_J%$vKIB z<&3L7!J64|lODwk|$bTlDx+8|mq{#;zUl4;w=W$+vJ18!;5-dVRU2EZ~{) z7lQ)l+Xw@5_f_<({@8S4}2c%5b_%c1uadk6}yz}v&#&T3JqUHD= zT*y9;Xd)X%D_Vy8h0y&Q;Ne#nJMKy(S9VbICCNp$vGHxE zbWYrSEW~FQYPh zR1t*o`Jwim&CSgKv>3MJtp>^}-c(MN`sXvjyRJXB-aJn_ejD~<#jH!S+xfp^6J|W+ zrHs$H>5?q}afY|ehsfHxy7})Bl->j}UQQUZfm&ZhdjSBm!JYmKDgre1Oc6KJ0&qyC zsQbI_hPyR3Zf@KeO|{Pn3Gqd>NXI8XEUlmd7zK#)nZt9B_^%|J1E)S`9c!iT=JwnR z7d>Z8xl#IOoFc5=2ldnA6BEzOo3)S0dY3x`Gw#0VyztvRryaj?R*wf4m z!e(7NW+O9p&r*onh~xL^;MR^!QVK>5aXQ=9HvjYOB^HF*w2e&a>enmF_9GdCtnXE- zcrNja77z%k;=?xrx+G_`BsQe&g(*KidWs#uE3ZxT*L&*;$?$R${#)`ay-f=Cpc}-Z z=aN-IxqkW_Nd!pD$zkk~+F9rpH_o*JNLiO(``4mKhnTUXGdpIJ0*84Hho#3tF+dkh7?C$a}>N=!p)?83Dy6Vc}KKt8Ov&Q+fX^zsj0O*J3XkigffL+#O4*eu5LSS{T8jz{%)x!6q|A;iPAc>6*pS`_FQk}CpO>1 zPcPwx#g`$A4mMy}W(8t#fKY#PbK^I4d45hOCPo<+76vGxfr}2fuM)6QY3bL0V*A&2 zOBo+_H*dXr2H-$1@x>;WA6T(Pl(ilQ4?i9k?d|?qt(+68PWK!U{`(9)wqZY#@^nLd zu14|=FCZh9(#{lFqUu(o`QC9Y3b>! zJ{n_FeSIaCwd?~7m3I5~F${V`@W5zk=8PE;|B=S>at%lzgHp_P;b47}pp5)uV-RvX z%c~3ym6acS!sw&1yACO=Y}6~3ryvBw>mg@i;^tc>gba0=p7S$02;Nuv?7;i87f20h zl9X9Y{4ag^5mNtY7^G;bzU30>0^5GmxofM9ok|b(N|hulNc@QFOy=qX&3Sd~g` zJU4U52$#b~gYIA4Z~m=yphBo5z{gVR z-w`7R&SzEjY|l;#e?4{`LAP8IJrZcxr6d=gn~T~CIKy6aOFHs*w)Exj;!NZAlTNW9 zK*8rVx9aqrzFZr)&=YU>svbM(C*|&oKPaDRZ8!b19Q@#~O0RvZ!Bbjx*;nAf>4zhF zqN%iXR^P7`RdI3q+!$k!j9}(QQ+WX`VRwf>v}j7sCyWI*V9@X#odr`^M8d@CNU+D5veFfNYCGr1$F2;ABW zKAX6dlnD6c;Tp&Ww|91Ae0)R!2}+3x8cZw8oR1|eAV5sxe-=MhQ&-1-og`K0yZu+f z?`%RzSwrKch`K3Q2jY^G!@=i6GQ>PJP3}|vnrOH;hxe}q^{>UJ6ciNXfbO~42h&n> b-qWm;(3_XAdc*|&f+emxVt+PcXxNU;&R0uzI)#9$KCDhWn+^` zW|HiF8sugsS`tulk&(1Rl^3D9k%(-skS?QUKml)8-v4FM)5l0@NGQZxk0 zUkYnf8JkaUENPR)AUih7ggOj zZG0pGcp~Vzf$bf2dwA%iq%(12kyZc%CYe_#xiD->d`QW>B_smUb-`XGWltL~T`t0` zuIgqMWJq=|0bMq_D=!0YRGj*eivzm6yLm2~PlF?c5NI`u=-}m&)&$rc<*r#? zT5^?2_F@-UgO1H%4iE+y0%!(N^vOJhka;_?MSf*F>+1SO!3v|nxOjn?IPCZr_#Ctx zF%{*!wljm}+hJHR?AcS(wYKAdc5-qu(dEcV0^G9b`&_jm7&Nb^@ju~9#0v^zr$;N4 zxT<#jN#07BCFxM;U>9f|1-d5YW6p$9w$g>TT_kdH}@*Fp|!+!MlS3U18L&JbV6j|Xa^*j}sMOfY} zxQxlzNwZk5i78*p*JITEpW5N{WeL^*Wq>P?t&K*_5L!0!uee-{e*oQkzt{n}| z)Cwx%-Umd0!*}-(7g2tr{aU4)sJWev(=*2{KJ( zUI~}n%xk4p@(7veQM-j8xaXuPOe{Xg5cIBGX8JNPb>G^@opU}>nO<$`8yHS1$oLqE z(zgW!k&7e16{g6fOg;{D2p{LI>MDK>5lTDY z-5v0t4w5WVDNwJNIYH{UT5DES)BI0=S6Kquo8msSN$HEA^MUPcVbvP6Ew2|6y_c>B z`}L*Mxg`GE88L{7YykrQWj)^rK2Y0qfj3~Y3z;RRV7x(EPIrbTq#saP7HHYs4@|xXG!K;=}6W%{t;db?G*G+8F?!zny` z{MHK-%yoS6@*-**tIM*P`uE&jOK1mWVwS3{1AuKo^qDq+A}%efR!!U7Rkdm50#I== zZCI^aw_UMu6IU+$^CvJpoi|#NNULfno{@}8LwdQ)wfvg^$*9l3^4vRaWf0&uQ>C8ug};v_~@G- zODbGOthnOmBIu>ERcPg+){VKbAV6_5zP~ar=P#`Lr7IogqE%z|# zd0BxZ&k~zrka`7{>D6dXP3Q9$^$PQcl>um8Z=o!O!s<0?TT{|T^YUCq2*9>98@~}& z&kw^oH+wAFy6%K-*7sh2!HUim!w#C_XRtwO^N$0K&{LbQOUL-7|HRNl3Z0X9HYMtL z#2oGeFNls1U*wYM(f`iO*)`wvK%<7!nS;3_Du!bs*nomlHDVFKpd^m2L=WgT_V-R^|QWD6He!r|7Nw(^F-dll2+Zqg5z>l z6yMwTCX!O~mjGX3;ffOi_Y3G94QM`VnS8e$sXo-Sm?S}wP*%S+*BAt5Yf7J2pY;6( zNc0_zc|q4Ry$pofGUiisvD2#t4I?fXgF1~LRd5ALL8e>$3xSZ40LMzDR?IE z<)MgDDpI*RjNy|ZpnDTkug}olA~@t8B4~1QR%DyOh3`qUE+WyCkl-*h>;=2G%B5#2 zjsoztjsQs@Q%5t7ilgxlyl?+Bc2ff+d zE!d#P>3UxV@mfa>hzCa80o1fry@o}#dm^ZfLI&(1A~DK363Y96_Z7q2Ah_O2o_|ZM z%+Ja~cT~WiMzrf){IS=@M}4j!TIHDShZSy2j_nHr|IP$+5Cvw{ zW^>$Hu*qvpSIBdZmklRJ~ z=;dd1#DW9*p@mn&tWhp+#>7X>>z+FS@LGw`2founA3iDXWsjmBtPh(n=DP<6iV?H3 z!0w6-rwcDbQWA&H>#ky{D(!+*N6oCi`|N70W zkxsz=<096oaZOqL*Baa+*hez*YRfJ;yGKY?rHec;+^spED4-tyr?*^sQGbH4qPk-7 zYptmf;<;7rvEh;R>*WIrJYKgIM_)x&tLF7lS_W7HaSMyEvp5f<0pw6vcz{pbL(uVW z(F+m4>Ziq##)pXKX~_-&s(#M)_ZOBrkh{_2`EQ_!mjYSKc7}uz&5;{F2Y8uiH0%k;IOmA7~PlJbEJvN!q&hq7W71(|Lfcf3RlcJ-RUL z?G@NUe70Of2*eyzU04E)nQ>RrTtojv^)utYwfGgrE4nQiH?I@!{U}?|;S!x*Kcqc9 zJzZ@tfr*g}nq)LuC}Xi&z->IeM{XCk#v&z+*by4PXJH*|W_oz+^J_QHjLI`ow=5I0 zv8{?jKsN0_wE@vHxqEco3r8yH&1*m zU9@ro@ds&DCG#qH)RDLS=ia2NF{ZUdwd6_C_SUCXy6U$Jw%}a`U!LYL#`dfj>znQ$ z#G`r3TBRYZDmni^YDqCsRy3kyDNOTajL)7S$C`z^bEXt5p4Mtrpb%(H)l3g*X< zm8n-0b?JF=j4D^(I7upFvQ|>|FYWeL*~t#ukL#0 z63{}}l!#eea;aO+os|~CNRkbiG}~{J3Fx@8WAW+)0=Tvq4#7j8>+Ycxw<>iyu!iv4 zW2`EWm0^O^Lb}@RP6;LPQkUhmtl<++PPR~UcNQg#UkhW0ts0$97t%t7 z1PQdNrmm?Q%xJboue*q1A3kh#2BRw5o z>ai@m#@OpSf>*U;7eY0~7tyy|_MA--kxW6~&?^kM>qBoL=Qn$D<_`nY350mAZN9;Q z3b+KIJhg|EPt4{?9F7LEgpP)+R1~O4{CGgG8?x#*YK+&gGd%xbz<_vv%Mprz;H$r$ zIYS0VL0my{?4H?+^Yv~9G~*y-Tn;NFEiAHTes7UiP0v7b;SkO;-=h!lH+jHXjh~4L zkbSkgF&xsHjpJL#^{VZ>!J@>3q@{78ko_7R7)UUI!W_}?R#fNC`YLY}3h4K@<;YAh zr*9BHN|yzn;Aen%{7$rGf?JS3!vcXRt)9(e_yCqB*V?eSE(JCm*tGr)V!Td3{|%hv)7@t-H=*mf115j9U~A?xLZf0kb-`!15Gt`;F09K1vR zC|YozCFS0KU?!pc31hKd0_a)7i}%_K-0d%qHwiR-AeuLvkb`QEo5znkiOn;-4- zF3N?lKvJHj{tgs3RXk4$R>DsCO;I*|<;Uak9d@RgRYUhuMNB7dR!tOYzm__#-9A%R zen0<=-c-9i`LLaN*vCf_AHroek%|&`)r4j`-5k`^nG?+)B-Io}e%pb!mjE(2T~U~h zJN&lSW{WT{<(lzU-Sx55H`Wwc-^cu zcKr9%f_RnbiJHaPxDeTxYX!9Tl0v5sA>|x2Xk@A3(bc2rNcYj&Po9*<8i%5OWX+U1q@;BhopMMB7srd%cIgBhs7Me41U`7i~t(_GUWzoX+RP5k zjnJcO5fAQV9GsVdcN8u4KitV?doOb#3M;I3Tw=e+IFoHF4b>|uuD4Ox|`U?(KR7Q-@O!2z!LHeENU6Q z!Yh#9aneE#S>V%YYZ*HU7vORLj6=!9pZ@uz=UnJCGa;5S^p3g|{cB5S&~EBUW%=FG z*H4sP{d9CUI4FotB0Y&%-!jCf)`Xz&vRFRkTde?h;Kpa5eN*6yg;VZpPR85(Ho87F zoEi6L3AU>7;#S>j)Ft_E*hHT?flXZ_{YP0Ab`pgCvb5Z*Z}nnV+t;30;85y@1Eg+IReV`;d2}GDPM**Hui7F)a7! z3@mm18`rka52euLUk=02W7jukVK!N^pT%k{O8uXDsY24PO^P+}@duBmbPDZ~Ag70) zR=om!HN!7I&&}UVNo0-#UaYouIM`mBUFyhuAwvqw#_Oe@-j>#2v+A(gQex9FriKk^ z=A4~8ifd=k_3T#bixzG56CokVL7a$MSm)}!jIDixma8h;Kl$*vw_T?z5dINLV8_!L zIUTKJhZ0H(?*CoPwmjU`lDipPzoLa?wDfo}Y$s}3-Ffj^F@jA1h=;tDkTiy1FUUM- zt8YXyy9llNh@g%#LMjiau2it1m!y+eNFx-#_Hbc8bdb<7})w8#uPC9LT9d{j7YzXX62da!Y&KeujUycGxF{}=eAxDls*Tm`7WsUE}3 z`aKkpQ&mME@B-~_(C??2ej zdPem&vud(K!5|xEo5MM;3JY+ZP38}A3z-ZB?&pxf5O06=oKbIc z^GR?SP=+a;A;VIi+!Q*0J(g z7gUxADS;)~et7zqtK46lrMAh{(0&6j79c3)>3R`ObR3=3`007Ef(E+At{d`(Rp2nN zarzmWKhi%(C7FUcq+1q8e%;Q(WVHr1Pgq9+cBxK}wf z?R4P)=%`9@do#kA9 z_tSgz$-;e{kDKs52Z`SMv+YHmeT?2V-e_KpR&4Ozxh+lpoT?(>mv&M}ti8;Mi-HXb zb(}6d>v;F}cz<>z?|~+R6{~N3iSE;}=w9fpbq5z6Uuy1>6!V@m9+G^t_V@xg>j)g?yqDj-&7Ywk~ z6k^V`2V${^4L+!`~4%Yy51Oh0i8DL=Hp_yM>D^{*%QV;@#4VBTqeG0I7+osBiRD6H+d;dO# zYaL$B;tS3jOi8R zt?a$Mn#Z+U&R`?Go=?NE9C~pElvZqwlhoO;nVG5^F9}e8tWdf*GqFE9l7F`N>(Y{9 zgYU!FmOi~IE#dhX!C3g>vS1A5= z8$~diNEch0((QO3TzXbc8L)aDh{jY&c#%RS)?@!-tyTi_2vW=W+zp(wDBCkT9FCv| zLP3wx@&Qv<`@`rG=s~k1aW9A+jDr5npj6>Ry$}+&$VJIZof}`o*-ri&);?Pf)q=h6 zRax+Y4i|2lr=J@3lc}p6Lk%Mc^a$yHYr|;hpy@S2y_Gi4Av0D?Ph|AC>@7WlOS8 z(7*BG*W!eC`KWa4_5wVcExR^fu^xopNt*>+YA!$C@BfNr|J}Xx?Z#}+?}J>2jdbP_%;g(T`m9?{RX7Fu;k$HVtBg{HAEbl{M#>1(w}B#Q>USS z@#hdmww=LZFv${|%$%7mF0Y6BJ)clRYjl6)T~0sv4isrzm>u5wA>FMHOXb*^&d=ie zCE1v~rcyZkV9m>qB|*L1cWn?#DXt`Au;jn7??|Kmcs=r+_j4D(8I*Xvad!u{6P}-= zm^>EbZ8bfLTXMN|g)!^2s$k$?&`5CLH46I<-!l0FWJ9wjwrqGZjHc{RH}7$plfng8+2@l~ml*v$Iyi3!lfL zA5`fMe=P!99A|ZJ5ozEJ=GysqT+74LKp;DnEobblX;cN69S2ipjN}f=d->DNOVIQI z+5)qDq~*&?(apOgGzhR~pV?;W9ONYRlw=|gORjJEYs&-Ux&`pIk112EX{JY^8a&^g z*hZl~f{r^?q}yt%ED8Chn~7|^Wqmw$&g>aKrrTJ5%8y8AXmCx?PCGPU_ z|77Z}zN~61^=3VEPF(e~5TZk^_>t%EerVm2b#hk_2X<*dkpMn&!G4M(6NxKqLHEQS ziytY*p4OppEq|TdZxYqqGGPZ#pnAgfe+Rc5BtW3Qr;Y{gxrn?P(?Wcz(VGO{hw%qP zh^nt%DG0^&^{EJd!RQIq?0C5TmOrpIZHR8tK#d)b>50AloZCrc z6OZo&viVH2O6pwcPtBV{INLV6ihvIqmKD1jg}&dNknD{DD+@VZnz@%Q%!Nn&@a_YMJ=3({Ykyxc|IzU<>Tj$&moA77Xr%v+*Cj$iTUh4 ztB_NO@%`C#VjJj-z!=1G)h62Gd%5S@cs{g%P+zdMCGP{r`_3(9A@@ri$J-nzBE!;# zWx#pM9X!?6lW1}&jCZmUQ+*+b0%Ox)=Z7h^Vk3{gWo^R=M;ek3#%hV*r&#hCmuGXa zIJ^>?+FL%0{XXYTeLXs%Wcnxl;$pz*FA7y0DyQoO87ta)kE;WwIt%e3J^o*g1y;vg zj}PZ#qh`Y0UBPhh7=?>h%Q){61{ZNaX4QPW*rz&M8X@(^RbK?)%wE}{w-1erv-sU;x++g$lXFkP)p8L=d1 zv+gH6;r-4i+8EPUo4yUhuSev8vpI$aM%=;CL|Sk&l&+>(WqUF z_q&g@=lU7`yL;cmiFe8zItDvxy0J5@S;1=2 zirV$!px<7z!CkZh$Iwg*?rk+~_=ij4Zu{w2y4cs>1stVxjea5#NJN~O#;pXWlOHeN z*^cUQ{k(ml^mAsfH@Vt*0PF7Pg>=wrBSqBQ7`n|?ZG?=5zJk^ojh<#}mT)j0BKDRy zSZnVuQ_0vGg~gO5nhHYA#rD6=w#%%hvxo6)`R`goVAi5=(H6tlLa^et3qS-gpM>m!0a`=43pR>9sCLi$Zbk5-gSw_H*C zYd*wk8c)|Cy+06qL|4TV-xlK z`KD1n+7VTryVdbHghP3M5p!VDRgz+h(TapqsiyoB@ye@gj#5QGlIU^Jl4OQd;p9=J zA`9#jo~iEamP5y(_)R~=bG^!O7iL~-^X;soi~~92jsPVN!HZb97~+4T1&x}h3S4pz zf3VpF1O$#rK0K@JPyGjkRF{9k!NNXjQppSI)&1**hZdtae|dkO84;oDsxoMK4)mO$0+>;2&8u{pV7kEDTn7+H+#*%br zlr(&@-UMu8M?8;suJXy^3quy1n)HTm^plh|@nq!Xk=1qeuN6NhPRQ;J?z!yt%ArQO zf9w!3(Rd5xQ`B_3({qTZaaWfToppkSBoJh+}gQti}nz; z${cRqOBnZppHm?^n>r8%Z*%_{9gMez){*^j83I~=G?na)^EzDfDyQ6exPWS-^gZ8@ zUGIC}z_qCUL5fg3yL3LB8w~<@2G6fKbM;2QRaEfO+*k$|>Ze}u#KMpyKu6Q7uZuQs z_qYc|?=RGPcx)DaF6h9j=2ShC-eG7Sh4r(<&*&e-FXL4>C6tPUD@?l|P_J)(V-pkn zXMpTG+{W#%+T&jM!I>Fpawu|P8~Su@dTcXa4=zp9;XK@EE<67Rs@<61GKPj_VybG= zyQYq|G=q(EZl&0<%c739wflre`yHo{rX~TFf`rt><;j1r!E1TClXxb-??ALKqXv)T zr~q|))Z;8>F7L@);i5r9Td9mA2nq821rQar4f+i}o)PMg3kwki6tlCsFU8-zt$%Oj zO-2PqO;h9tm{q2+`awok2E>CQ5$#@6Z}J_{s)o3HVHB74a(BzSMKF6W4XslVJ` z#YH6siyDSwItw8jWc>fzulV~zyhhLIe>XM#dT?-X>;mpCFit4`4AHGg;PFov7y#5K zKnrXH9IO)II@iBF&Lc7&%MA6@TdCN)b^$>>)M0D6j0OLDL>lU=QTO9gWHjC@K?C1o zuikYmhH6qSIqqc_Mm?axL(p4L-`Qa~cJOSeiwlF){iDH}kszMyrtTo+E{pBycidRu z*n~r2h-~}1B6Pcyg*J@VgFp=!hoaV&i>&PeSo09$&TBD@l%yx_Ma{ zuZo^lhd!Dro7XV)zo!RvS67LzPoC7rA98pc90wDv#z@v&Fvk217mv5-yam2<>~pt2 zLI~Inr)DhfUbdb<)-S*h#(;{F-m9ET8Qp6S`;DqkL|1aZ9q3`Nxa3F-CaVC+DwVuh zi`2(w8!2dhfB8QYYp0#}HsDbEq~<@S+`x0PnS~^%CN3dCw(XlDW@18fT_GJ-gBSMs z5&VDAH3>~Y{ktbnm~eY?lQj2}-Ws8DJ>X|C4WH`#PfdtlP^<$TiWtB#Vv16)`BT{|PQ zP<6FR<%>2oI!C9DQ#4Sj7AbI7uu$*9!Z};Yove15_ZIiN`rq%CyqfIBjrx)_(6ETR z?)Q4jSjP2y&xD>}OMq|m^i#03OI5zpbDi!EcJsz#fdA*s{pC0yrg9S@~FE z&(WDHttzUIdgXpaE&4_lOH1fa$S8v4^OiyP=K>CerKOMG4Gpi#LY=X$T>Zi6IGy}n z3^)i;6BCbxTCyN1EB4bZ^UqP!Yp1qFeC{6|M5Qn`(%IAQzA)1i;7VA_Ab2+LAsAF{ zOAR3!R0puqf_qKT@1-HrC(W)RsPV(PJ+4Qo zB_x7BclBxdR0pS2d|wW)j;tM4>tn~sAw>uW@<$RB1wDJc`fhJs(2swc8*pX}4o2Zn zM3SearFAvl{TeN>TP!}B&>LR{^KgX%b@ziH<8H`Rz+_>E9bb&b5;z`^tV$j%iOx#H#?BHi!DY+Se;;xMA>I7h^ue+a)q+Mmf1Ry5JgQkM~( z5Z3&VE#?blaCJXxdix-J{`Z)XJJrc7HgiZkvuv1W1G?hcEz|ZfR=oGC035fYMh(v# zEGu=~Fg=Gc#>gj%vdPbpq@)7-0U+Y9$~4MpxUf7Fe#&^1-6XOjqXBDLFm;X%@4xvF zT0slUo?#MT!<5rhy9>LWIyIXO5v+~ASaKPkehPjjIo0N1wr@0_jB?aK?hC&U3M6>VkL+HEB17i_lcD^ zV~nY|3dhNBX}CUr?s>M}QB;)4*%C&P>BNd16VG)^eBmz=Lp`SNnzq2)nabjeh=_pP zxe6ugJ8&7qplul^Z=eLCzfv{S4wztLS8+z5_xE!WS#226cStrOO3T!u-S<(R-)s#$3sLD28+w1tT zal)S@uyjiJ;Th96k3UUD$?svD{Q3bk{RV%CnzH09Yw#31bg?^I9i@ySVXnW>s^pSn z8OdF%`HvedM$TTAy<`)O-Sy5Y7E0s(1e(;xmNlZDI+M$uxZUjnYDbaXYb3Px2Y-5w zVtIS3ato;=3eN#h`vZGB=Q7}0ad!wQ)zu6B$#Zy@)uU`z=dRomh2tzkE1(ctuyz%~SB+~4>4mW-P__4>NF%ll-m2nHTLAvyVw26_wzUXB9h=*S!B zLkhWxlQ2v0n6(+%UT9$|fpLm7e6?j}#OKTk6cGz`KC}P|MmULJwTHr9uf!Q2d-eM+ z-7}Yyaam-xnw-NGa*P^mA1pNfBZcmdy$AiX#la8*_4vD|XX}hZ*E*g`3-h;W$nMmo zc{mt3D4Uq}`VyXjN0p(lOx}3Jx_>FBOM~H>T1y!|P6T%Q>iRQulV-bM-Dlozx=+~r z^J9%e1On#}YIe}&zMK6wiO-FkzrC61g&_7rU3{_*jbON4$(PB7#(bhA_?7UADFd{mv{juB==s90)z~ivO z41z~>`vaW~PQDlq$JQC1|16fzpz?d%4U0s;+Q{dJFISX3o1_D2h1V2b++`ZcSd6<% z=R?z!-X{O+h|?x^&@WFvZ?qnLxt-=$W&4E}|MF9tJA6DE{;A81bhOM$=~NeULmUMV z2@{xA61lbuD}neu!%1X|nck88!^bXa3a=Ta<;{j9HxG2x8d6aY7!1rls)^20!|%$AQrnEr)sw^}l8gk7&Y3 zFIqt*T0>0CHmv`ETqq(TurS-uCBOk}GyK2$7d6%QR8oah=DhJCR+TkKEKK}VX2ZZ1 zgI=HE=b;z^->pe`^jshi>i5oN$Bn}9PpP}R?3kMqMp=aN+?`;_g1nB7%$*&B@4C#D z#bA6PaBxVt5dNz+*lQShT;t*Yk;5MuwIr;mWk4T05Vwy|`UXv#dGkGoU73*Cga(4A z-M!APU!zJrw#7?FdxThN$c7V<3ha3#N@p#8)*1)~?g(@P2gwje6KNDs9dGyR40e^B z?Dk~qwd)s^T8(3d)D#qAs%3>?dvY&R_u%F!&WtL#^Ty#!9%u1Jt(ZkC+w1QgqvhKh zM~}_ZkFVRdYYunZ?x}*7`9Hb2i6blUFfOG)g_OnV-}4n}oDpoE3nPqlZHca+6ChVq zbdZDgBQn_mWf!SnXgH*uDL#;m3N&q$!){+lcs@JJ(Ku6gbhDMTZgTyrM01!{m0S40 z`a~L=)OP~@)RspNaJ74MWCZPC5Nsac;T#<5eVT7tbTkqRGc(#RNtj<3rY0sXn(Og4 z)>D~0`Q6<@5CH)Jf}{OleyOJ(Ua&My5_EXq0b1WLH*bE6;?Y^XKegdaCEs0nYb4fg zWiSR$5~!MLZ))Z}mCO>ST;pR1xIQOPD;}m>S38C)Da>0?3SqU~Ns{c58Wei}xV z2VAC3u2Fk&$bVg=q@?^%(fKZJLWv(UR3|PjsRAB>y_TZH<6fnsk%0keFBusn)mKBH z?kC~2@nX4}s75$5Slv2}R!O8n&QXJ+Mk-&xFfed%*Wf4g#)Ig)bk;Rv*QeTCrX1Hb zoovlJY5PVnRv|JOnD!rgZCsv{jnPhSd1FZ?4sAR&6P!2lIMByTyR56hCry1@VKh~7 zDJk!&&_DgnWLEN2SNkwn+puy4fB_B;PQmh7Sw+SEMe{cHA=nm9UH)6DpHNZZ4Q!tD zswW!@9{NZ->)&))QlREKFus2M%I$5OF)8`;XR0y6TOKv=FWuMtKK=XNJIslYwf-Cy zZj2<#`F5OERdIE7wS>hv;$H{tl6k|1RcRUdqT=FE5h*U{U+LD=lTi;q=PB1iL|MAS z@cp}&rN6=v+7E24oBa-~P^byp$6k1@;4}zWsW_+^zHbpZ&^AhDl<&3dvh&(m9&i{` z-_e9#&e;UtZhr`WmM8JpfdnUJ@r3;N!RNfcM@P=53*RQPe3pokA?;7*!?>Jp$PAe> zUVpC(ELkX>acXw94Y&>Sv36mv z=WLkP04K8E7xE>ibr|3{i!+K+s{zi8xO!j|q&Unqderr{(UTjS+}W zfPZMJ5A{oKN*!qlyvD$80#-Aahlhv%Uk`LFYtE?2m*F@P5ciS^YeW{hVLMbNn|W+% zYU)UTd^~@j$7isB|i{_!u(NUPNU}pPuPIW3_ zS*!AX#I*}I`*bUeMy-o~eqduL#0h`3T%Z9fDL23G?B0ZBbgOnmZ@%z*%e+@QLelJ+ zUJZ{cav-0d(q|?ONlA$RPzA2@kF%MekDUS6eyu7)+T`c8NIz9nM3t4}DKZg}5h?ij z36(Kh@0PSBlrh1UNX<@<1kt%lkBNn)tfDe^>8e}QQ5hW>8A-KkBI7te3X$1-XV##k ztW5TX>nrZ5i3h|*QGfztz1>^&H!?Tv=k>>ADS=TKKB;z@)FnK${OD_AMslj~q#5MM9%Vd8j2K?qg zmRW-)_|#^PfPzx2m?M})i{bVdRc3J?XT^^H2^q0K|KmM%((L&Tq-gOISF)gP^M=2u z@hmtbj8Ak1?9==D`n3u78D1vKfa>bv{Cp^IUpRRc9lwD!C%Eks3kyqCqg{w6yxoUY zd=N2+F5}$W(BW$i(n-1?k@@&IAr?c5_F3zO*0vF#vBQAgL=f17-9;qe1mnNu`^@aM zK=X`DC@s1`jOMD94AVJj4I@%n- zX!F26Vh|8XZIxjNHdoA_(QtbuLW+fcVK<@KzDzzWak2BUuL@nz@Sq@ceZj#X{37Zg zjR2wDY-?Qy@+skPe7KwsE9~-ZpMa*iyO0B^QwiO9BA*|9V3(Iy5E|V)AVQFW7CwOo zK3eb4Wk@UF1)aIs4vegJMlA;hdN9z8)NS&88&y^~r{z8Sw25s1o<&3CgU(rG7Wbb& zf2JghI`{`2_f@!X=7Lm9<~|&EgfYanVUhg3RjNCQM4_ zp>@SzTG92O6-~*}l9UWBRj>Gj@+l8&Vu7zdl5zMFB7TD4WddGA;5VIo)luSK^tH}T z36mJ>9}p1%RB$(A?xK~i9!hz2wb}dYQ~ql|$O=TgZ}Si@MS^uSox}88|HW+4{u1K{ zKK`0mpcrJh20X{A!ea2t0-~Q0C*sf=Z*-$8Jv}{nb5ruhnie)THW}!nkigvHUObpM zB$suHxR$PutTkFqMQ6jvQ33QheH)aW<9F?ehg1kSZGkVXxR~^sPZr+cYae>DsZOrl z;yZ_q$XzaXf15TZ9NcEP7e7QbJ7@&kb;tgFW#R){7*t@;HzvBX-?R>^e%6gKy5G90 z+m`Pg7@^%v{Vtz){OPSBDgJcID8V~UPjjz9xx3B&tvm{xS?kYQQ*P$Zoiua)!=t9E z`VW|D2YtS7%RHo0uhRND!da9SiglXX$-Y?zcdIsuW~eO}P3@2LK?r6RD1HIhBk3f(MO;OJui1Kf;5702lHoseUX z^`7`KZRPl{=bJCYIe%RjvtM4{b4ju802 zV3@Ek1VrOoZ{EC|4goX#gszh4xuO}b7p>;Or|DKsDCP~m!>9w2!@m<}QozK2kKpqg zZtG4Jm74Z$L*{Xo&dP=%wn2|rrK-z4$9k(f`EShit&YT z3`|5?t~0g%TEz)Pt_DE(mT#SLNKt0H(W0ybQ@X=hkCvqze1!M^yV)Y7(%hLCaIQ(| zSh7vk|Kw~b0{qdP5un7x%si>jJDFdu!VvP>g>{46FHr>1Hhlhk#ICysnGp^m1W8xq z&LlnR_(wisVy+F9K&cLtY$v>{ozDa1gIzNU?v)SrM&bA|w0oUq$Z(G4dOZi>JqO z^*2tgGPGa+itx#(XLmo1a4n-IEXN3r8TevRf374EA>w?FwaMO%(`C*p>^B5e z)_F4YkVSko56=?5jBSv-TrYi{%l$JY>avBCfDOn_xtDZU;`@({$!_^vU=81|(0z}+ z194_N*)^=5aZZ2L%d-2jkBn9p(i#s%2k^^^8s$^?dXQpj`5qx3kof6SypldPO6Q>2 z>`KSDWY&nc*d@zkqLFWwOhj#yn2ski7}?lV+8>5GVCg46{boFo04vik&+G7gr8xr4 z6sX~T818xuIpy(g3xzZ;&}N`>Oa2qZM0K$jmF9H89(LTdZeupqI8SJKL}9&D=@_nP zw$rDZSlf$*B_&bdWL)6u2_gZQ1$1z;s^J$spLj3}kNaO`UW?KmK zwFJx>4{^_dh?D;|JzV^OzioWP*8A|bxpR|MP*rlu59}*A04wPVagpuAA=0?>uQ)7h znCv%xtyrxBqusmi2RHSpZ%A-K2(_+f>gbd#&tu8-P3Aei*cPX6CivpZe?9Eim}qDW zZVo4HiGS$pPajTZeB<^_4+er^#AmtU#P07WpTM%1(7OVXV+x;UmiPD^cKi|kt#p`s zJWmzz|GvU`cNpI$6s70axioH{95MocDzBI)PlFbjM(ot?@P$so!b-j zl>E>-Ls09B9U2U==U;U23rS#w&UOO;*f$R@F=+F;R#A~1cX-~2`zO(9G<_@fyg7`Z z)2PO5D~}f-CCwdGHSrfSn2bxHu0}#Y`0uTa`%3GZ^amIdN89zL82hd#I8FaJfqPuw z?M&bEyl&XP7}&d&{F(kMbwt2@TV7Qa(|9O)7m*S*bv2R;A8ayVs3eDANe)9om8#gl z+qW+XzX|W}yaaewSCORccz!r5xN&-QW|x-IjJ_i>xvcqFCt~9?eC&wS=uVUM{KsC7 z?>*kxa*ccV_brf5A9zY6*RBtA*ZK#|8qf&{qJUmfH6fg4R-9mdq0T`gGA5?!WzAD3 zRyHd8sLr2-`IPhRM}>|2{~$TuMt$_GbuNrV~*Wqvr7IU(#%cuu)+eq z4g~Md|68tCfe;7G^q@XjnvS?qKRDr?JFu5QPl-3L5TAQ86(^<>is(<+OeM{X|CA3YS;= zxX5ru#>PA@$4VL|RdRJd=|#=Vs2~cY;;7iz=FzdCMl84T|Km~jMkT7Lvxz@<;^J(g zZ$nx{WqKk_uOTNTg}UkR4FZl5piW3il6dA$_$4?M&2`=kX6b_iAU4uI5Y=!q+P~uWGLI@r6Ii8gO|41O$@Ff6WAJl-*$R zuDVAT;Da_4T6qB2K9?`fILdd3x%M&SJaeQ*lcB2!t6nKLE@J^xj$ay@fgpzq7Q zu(GhQSg_+O7tDr(uVUSL=Den>m+jaF#**k@pNf&E`8N;t^^kj1s`;}2Ur~z%Zho-YY*;K7s;a86 z*=&wBz@VU@wl3o}E_AWg*GutMY)lM!Cr@^BZn_7#=CiY6Y*m2G#V79<1OaCeb|uZ5 z6;vt}1qB5_)5$sIeG1;k`Nt-Uuy?OsXfzt~PM-9CdKa{|>^Jvz@^)9*m;1cR%#9TI z!XAdkgMMW#PH9biaw9#!^5x5!KYu>+=FJngZrv*Sx+%iB9O%59J$u%%w6@>d;ip35 z4^5`NzMlH}dMp+T5#ixPw9!86Eo!Q(+br|7m*!2Hi_f_YQ2tYL2Zsl|@s69s(>W(e zNl9sc5_UpkWBjsZ%UHQ`r6U~eDikqwKPHn&IP?NyN7G@OOeUXvS0iI`;Ir_Z@l9s5#V&rNz7)m;M_G$6vYX^3NF#(8sgVKJVQ)QHqa+n+hl)!xs~i}i%&#oGPRrzOJ?uhy^eK7cna=+ z(xW_J;>fY$jMu+n>tmD2Za36XVGP~b6i?l8qidTzUKL< zo5Xr;k%IKUq;GHT9N@btg` z;*tGMc|dQ^mDUljZQX6|zx9RmYnOk2-)j2D^DpDj=zB768$HD2sSR0p%|*APm1BoD ze2!@NH2Zj*)aR#46NJ`l`(n9dpku$`$Af6B(gZQ*yAazFTUUs1#j4N6ZC|`kY~lbC z1|||26;9!qVsZ~2Bkx!aqprSzTQh#++3QH|l9!h!ju|tCS1wO-?2FV&(??Bzf7iDn zw0-=bc2>L}&FxEScy*DHTW>hU(@Rx6KJDmv?+v9P`bQxBMK=BP)eKP}i4P$E_;IT8 z^Jwk?{rkkyr(w`CcSPt>2r7$z@8rpolux~jeqX%gn6%J&4z-?yv-o7;fh0bM_iG3@ zWg(8)yVntdI$uX#_m&uC@!4V%_`^aw);>mVUm{J2cl(kWtbL69VPOr#CP1Eaye~yK zefo5lM?qM(Zk-SEk=4ehZ&|JSpNp=F(CuajS$qkJiHsgIhK!61PF(i@PoEIE|A5r=_KlmX<~qw7Hl}CQ)9zkuX1?Ij_}9> zwl(-oXU52Ph1a(3Hn0BELr(zQogQm;PJ8N$qlEiupWx5WncWRTojsK-me$IAGP2i` z|99IeA3Fapk7&4VXT0LAH%JqY&bg-)W0Jw)1?SvTinbxWD+cC&4-XF~J3E`?hItxF zN=n+@-x->h?OY8ry;&yQzvm$4uQofp+#mn^Xp8HX)!W77fr*&EYJ1L%*6372{MId7 zShZ>u{rmUtQt=rB0(fIbndyxkWu|ApEiyg(ZILN9D%4b5Z8d-N_r*`Vwsp6;Gq&z< zT6Ydfza(Zij>_GCUuQaSLr_n2Vk|(*6<>{r;SN7!W@+P11e)%|GA`cIlot;f~ zc6O8fr?STK^+UgK|DY^(JyXid*H?IK$GMiX`To{EJ37x@R;>D5Odgm>_Q7KSj?cDm zJ}!A+qDx-TYdvAMY}rC-E7OK~i{7y@3D+#V)7;T<(;j|*z}$D}#p#{3x1-r2d#Fu4n97%xlo%VSm!l9PUJpSpG=#OsVscXI_VC&~Rb2@@uGa>))UI(>%i?|=N}H4E=F2Sr4* zNRNn(VfW4*?EYx|8-77Ct(kyo>Ynh&+~o&peV`%0JM#9 zhkx$*>z!Z9DFaB0k65`S(G|D~(vz#WPiwebE`ikNpePEVPzVD91J}yHg+d`%t=2-@ zVzGed`I^_QHPc0@44Fz6PpRi*3ow3J3&2LxWVR!865vi4)_VLrA zK!WWL2WdPS8Z3k-fUC2joH=C+P+XSj`S>{g92_7Xj|-%)5%4_kPo+6ekF{5k`6`L8 zQg}jaIm-!AONhlME{s!7d<2GJ6cyorZ9Z2CK5>ZF`<*yWXAu!j5ee@B08Z0cbXxC$ zPslF}D@%Y|TU!EM5(5;+1Z^~p>FH^#tgHwV6BCNR0Al^f_LHJ0Pft%TqR~j*+fFg$ z90(Mrr2*30NbluG%CRCAVl$rqGG#p948vf5e;@4%mkm=h-K-jp(^({=e{qt3$rh!e z)ru?u&d<*y91dT*uXa@$LNa+#`KaA&DiWOC&Um;~B9KaR?o2xE?|bq3RlREw5fbm^ zQc0h9tk}wx6Pgyqm&@g_y}d2jSMGi(H`S8R5}Bg}j2&heJIu(PoZ|4{7rHEcFm{-6 zlF1@-RQem8n~}W*9UB`1mrNFa+Dg?)tA?|)vj70Jn@wf<`GAt^RcpPpD6VQyCy!IR zEPnf}`1_C@B`qz%WTR==X!=%#NZ@(ipGsX=McT%=)mo=n1*X$@Y6?SicXeTHZLP>5 zLqw>S0Nqa?+wtyw6ad=V+Qg2HXiICWy``lE-OpY+&hzKOo1q8&Wv0=8(YaH|65z(h zhJh5JcRHPzot>2&r-lOtxD=s|P7@*90?I8wsH3A(9{q0#b#xktF2FlZaB@xd533A9}IYB>N)_lmGw#07*qoM6N<$f+h=U$^ZZW delta 19420 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򼻡PPapgb4+oR7|G-B~n$H5f6PVbU^(&|O+%9i*$VD)x5*ZVK zH_QY%gl@Oqx}ya=5W~+~W0>6xkcqF#l}AQ4f`VW+lHxEVaY$6v!_vIga7cfn*=T8k z1w~8UG=w-~Y)=Nq9@+YHlnFRqG59#aI%-;blR0S2MANQ^`5H>!;asQIi7;0JcPyD&rKKfs{hjYnsm)x0*(l%00)&PuHb1vysi|E6g~Up;qU z8-`}XA_j4iMRk0X=eb{mJ^E;Jc zAi3^AQajWShY?V{D4;ZOEUe*V#dRpau4h6x!anC@y2m?g`b)%j0o30Tjy?fK09 zJdknvrV8F}#)<*coP11J4+W4gQhd8f9{r=fNe66evEUckrR6(AOGx_mjyw2Th9Q3`0PZmA9r`hiaua+ci^7Ic=Hr+}wtdmtC z%C7{(341!2_&yw18H>Fn$-AQ(g!bVGzYkUSQja&ErwbXQg@5V+0l7?yMd^Edw!apj zTS70G@nM>b22i%Qw?S@oKEZaJI#>RP88wsiAC0Pq=;_�|Mw|4QIc9XSC4zULbn@ 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 diff --git a/modular_citadel/code/modules/client/loadout/__donator.dm b/modular_citadel/code/modules/client/loadout/__donator.dm index eda53c0afe..4d9211f7a2 100644 --- a/modular_citadel/code/modules/client/loadout/__donator.dm +++ b/modular_citadel/code/modules/client/loadout/__donator.dm @@ -344,3 +344,15 @@ datum/gear/darksabresheath category = SLOT_WEAR_SUIT path = /obj/item/clothing/suit/hooded/ian_costume ckeywhitelist = list("cathodetherobot") + +/datum/gear/sharkcloth + name = "Leon's Skimpy Outfit" + category = SLOT_WEAR_SUIT + path = /obj/item/clothing/under/leoskimpy + ckeywhitelist = list("spectrosis") + +/datum/gear/mimemask + name = "Mime Mask" + category = SLOT_WEAR_MASK + path = /obj/item/clothing/mask/gas/mime + ckeywhitelist = list("pireamaineach") \ No newline at end of file diff --git a/modular_citadel/code/modules/custom_loadout/custom_items.dm b/modular_citadel/code/modules/custom_loadout/custom_items.dm index 8e26f8014f..2b4935ae7b 100644 --- a/modular_citadel/code/modules/custom_loadout/custom_items.dm +++ b/modular_citadel/code/modules/custom_loadout/custom_items.dm @@ -420,3 +420,13 @@ item_state = "Divine_robes" icon_state = "Divine_robes" mutantrace_variation = NO_MUTANTRACE_VARIATION + +/obj/item/clothing/under/leoskimpy + name = "Leon's Skimpy Outfit" + icon = 'icons/obj/custom.dmi' + alternate_worn_icon = 'icons/obj/custom_w.dmi' + desc = "A rather skimpy outfit." + item_state = "shark_cloth" + icon_state = "shark_cloth" + mutantrace_variation = NO_MUTANTRACE_VARIATION + From a73d43a664b7d34149d4b2314f2873a5797db81d Mon Sep 17 00:00:00 2001 From: deathride58 Date: Fri, 28 Dec 2018 19:48:12 -0500 Subject: [PATCH 046/104] FIXES MASTER --- modular_citadel/code/modules/custom_loadout/custom_items.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modular_citadel/code/modules/custom_loadout/custom_items.dm b/modular_citadel/code/modules/custom_loadout/custom_items.dm index 2b4935ae7b..0d9e81e15a 100644 --- a/modular_citadel/code/modules/custom_loadout/custom_items.dm +++ b/modular_citadel/code/modules/custom_loadout/custom_items.dm @@ -424,7 +424,7 @@ /obj/item/clothing/under/leoskimpy name = "Leon's Skimpy Outfit" icon = 'icons/obj/custom.dmi' - alternate_worn_icon = 'icons/obj/custom_w.dmi' + alternate_worn_icon = 'icons/mob/custom_w.dmi' desc = "A rather skimpy outfit." item_state = "shark_cloth" icon_state = "shark_cloth" From c1af846c58c6eca1b9a1700e0870e4af40c640fd Mon Sep 17 00:00:00 2001 From: deathride58 Date: Fri, 28 Dec 2018 20:26:38 -0500 Subject: [PATCH 047/104] fixes the syndicate mask --- modular_citadel/code/datums/components/phantomthief.dm | 2 +- modular_citadel/code/modules/clothing/glasses/phantomthief.dm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modular_citadel/code/datums/components/phantomthief.dm b/modular_citadel/code/datums/components/phantomthief.dm index c09d17d930..d34e16f6e9 100644 --- a/modular_citadel/code/datums/components/phantomthief.dm +++ b/modular_citadel/code/datums/components/phantomthief.dm @@ -39,7 +39,7 @@ if(!istype(user)) return if(!combattoggle_redir) - combattoggle_redir = user.AddComponent(/datum/component/redirect,list(COMSIG_COMBAT_TOGGLED),CALLBACK(src,.proc/handlefilterstuff)) + combattoggle_redir = user.AddComponent(/datum/component/redirect, list(COMSIG_COMBAT_TOGGLED = CALLBACK(src, .proc/handlefilterstuff))) /datum/component/phantomthief/proc/OnDropped(mob/user) if(!istype(user)) diff --git a/modular_citadel/code/modules/clothing/glasses/phantomthief.dm b/modular_citadel/code/modules/clothing/glasses/phantomthief.dm index e9d31f73d3..49eb089afa 100644 --- a/modular_citadel/code/modules/clothing/glasses/phantomthief.dm +++ b/modular_citadel/code/modules/clothing/glasses/phantomthief.dm @@ -36,7 +36,7 @@ if(!istype(user)) return if(!combattoggle_redir) - combattoggle_redir = user.AddComponent(/datum/component/redirect,list(COMSIG_COMBAT_TOGGLED),CALLBACK(src,.proc/injectadrenaline)) + combattoggle_redir = user.AddComponent(/datum/component/redirect, list(COMSIG_COMBAT_TOGGLED = CALLBACK(src, .proc/injectadrenaline))) /obj/item/clothing/glasses/phantomthief/syndicate/dropped(mob/user) . = ..() From 5c3eb5b00e26413bd72dc888ef6dfb466a3143b2 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Sun, 30 Dec 2018 22:22:45 -0800 Subject: [PATCH 048/104] Update neurotoxin.dm --- code/modules/projectiles/projectile/special/neurotoxin.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/projectiles/projectile/special/neurotoxin.dm b/code/modules/projectiles/projectile/special/neurotoxin.dm index 3a0bacd0f1..baf1495abb 100644 --- a/code/modules/projectiles/projectile/special/neurotoxin.dm +++ b/code/modules/projectiles/projectile/special/neurotoxin.dm @@ -10,5 +10,5 @@ nodamage = TRUE else if(isliving(target)) var/mob/living/L = target - L.Knockdown(100, override_hardstun = 30, override_stamdmg = 25) + L.Knockdown(100, TRUE, FALSE, 30, 25) return ..() From 8bada7f96198e2e102419b94bc6aba2b433f97ee Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Sun, 30 Dec 2018 22:23:13 -0800 Subject: [PATCH 049/104] Update human_defense.dm --- code/modules/mob/living/carbon/human/human_defense.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 6e845330c8..ce906565d2 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -273,7 +273,7 @@ else playsound(loc, 'sound/weapons/pierce.ogg', 25, 1, -1) if(!lying) //CITADEL EDIT - Knockdown(100, override_hardstun = 30, override_stamdmg = 25) + Knockdown(100, TRUE, FALSE, 30, 25) else Knockdown(100) log_combat(M, src, "tackled") From addea6f21c325a3e534a069b4fef91e597f0132a Mon Sep 17 00:00:00 2001 From: Trilbyspaceclone <30435998+Trilbyspaceclone@users.noreply.github.com> Date: Mon, 31 Dec 2018 06:05:39 -0500 Subject: [PATCH 050/104] Adds fans to each white ship hopefully at all doors leading to space! - Requested by Seras/Others (#7862) * Fixing updater * Adds fans * Adds fan * Update whiteship_meta.dmm * Update whiteship_delta.dmm --- _maps/shuttles/whiteship_box.dmm | 7 +++++++ _maps/shuttles/whiteship_delta.dmm | 7 +++++++ _maps/shuttles/whiteship_meta.dmm | 11 +++++++++++ _maps/shuttles/whiteship_pubby.dmm | 2 ++ 4 files changed, 27 insertions(+) diff --git a/_maps/shuttles/whiteship_box.dmm b/_maps/shuttles/whiteship_box.dmm index 8dc007ec95..3385f89dbd 100644 --- a/_maps/shuttles/whiteship_box.dmm +++ b/_maps/shuttles/whiteship_box.dmm @@ -14,6 +14,7 @@ /area/shuttle/abandoned/crew) "ae" = ( /obj/machinery/door/airlock/external, +/obj/structure/fans, /obj/effect/mapping_helpers/airlock/cyclelink_helper, /obj/docking_port/mobile{ callTime = 250; @@ -148,6 +149,7 @@ /area/shuttle/abandoned/crew) "ap" = ( /obj/machinery/door/airlock/external, +/obj/structure/fans, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 1 }, @@ -737,6 +739,7 @@ /obj/effect/turf_decal/bot, /obj/item/reagent_containers/glass/bucket, /obj/item/mop, +/obj/item/assembly/prox_sensor, /obj/item/storage/bag/trash{ pixel_x = 6 }, @@ -954,6 +957,7 @@ /area/shuttle/abandoned/engine) "bm" = ( /obj/machinery/door/airlock/external, +/obj/structure/fans, /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; name = "dust" @@ -1130,6 +1134,7 @@ /area/shuttle/abandoned/bridge) "by" = ( /obj/machinery/door/airlock/external, +/obj/structure/fans, /obj/effect/mapping_helpers/airlock/cyclelink_helper, /turf/open/floor/plating, /area/shuttle/abandoned/engine) @@ -2599,6 +2604,7 @@ /area/shuttle/abandoned/medbay) "do" = ( /obj/machinery/door/airlock/external, +/obj/structure/fans, /obj/effect/mapping_helpers/airlock/cyclelink_helper, /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; @@ -2670,6 +2676,7 @@ /area/shuttle/abandoned/medbay) "dt" = ( /obj/machinery/door/airlock/external, +/obj/structure/fans, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 1 }, diff --git a/_maps/shuttles/whiteship_delta.dmm b/_maps/shuttles/whiteship_delta.dmm index 160f6adfd5..88027243fb 100644 --- a/_maps/shuttles/whiteship_delta.dmm +++ b/_maps/shuttles/whiteship_delta.dmm @@ -19,6 +19,7 @@ /area/shuttle/abandoned/crew) "ad" = ( /obj/machinery/door/airlock/external, +/obj/structure/fans, /obj/effect/mapping_helpers/airlock/cyclelink_helper, /obj/docking_port/mobile{ callTime = 250; @@ -439,6 +440,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, +/obj/structure/fans, /obj/machinery/door/airlock/external/glass{ name = "E.V.A Access" }, @@ -624,6 +626,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, +/obj/structure/fans, /obj/machinery/door/airlock/external/glass{ name = "E.V.A Access" }, @@ -2528,6 +2531,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, +/obj/structure/fans, /obj/machinery/door/airlock/external/glass{ name = "E.V.A Access" }, @@ -2552,6 +2556,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, +/obj/structure/fans, /obj/machinery/door/airlock/external/glass{ name = "E.V.A Access" }, @@ -2782,6 +2787,7 @@ /area/shuttle/abandoned/medbay) "dI" = ( /obj/machinery/door/airlock/external, +/obj/structure/fans, /obj/effect/mapping_helpers/airlock/cyclelink_helper, /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; @@ -3103,6 +3109,7 @@ /area/shuttle/abandoned/cargo) "eb" = ( /obj/machinery/door/airlock/external, +/obj/structure/fans, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 1 }, diff --git a/_maps/shuttles/whiteship_meta.dmm b/_maps/shuttles/whiteship_meta.dmm index a7f977c34e..0a6a5d9b71 100644 --- a/_maps/shuttles/whiteship_meta.dmm +++ b/_maps/shuttles/whiteship_meta.dmm @@ -34,6 +34,7 @@ /area/shuttle/abandoned/crew) "ah" = ( /obj/machinery/door/airlock/external, +/obj/structure/fans, /obj/effect/mapping_helpers/airlock/cyclelink_helper, /obj/docking_port/mobile{ callTime = 250; @@ -458,6 +459,7 @@ /area/shuttle/abandoned/crew) "aI" = ( /obj/machinery/door/airlock/external, +/obj/structure/fans, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 1 }, @@ -583,6 +585,7 @@ name = "dust" }, /obj/machinery/door/airlock/external, +/obj/structure/fans, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 4 }, @@ -704,6 +707,7 @@ name = "dust" }, /obj/machinery/door/airlock/external, +/obj/structure/fans, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 8 }, @@ -1893,6 +1897,7 @@ /area/shuttle/abandoned/bridge) "ch" = ( /obj/machinery/door/airlock/external, +/obj/structure/fans, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 4 }, @@ -1915,6 +1920,7 @@ /area/shuttle/abandoned/engine) "cj" = ( /obj/machinery/door/airlock/external, +/obj/structure/fans, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 8 }, @@ -3094,6 +3100,7 @@ name = "dust" }, /obj/machinery/door/airlock/external, +/obj/structure/fans, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 4 }, @@ -3164,6 +3171,7 @@ name = "dust" }, /obj/machinery/door/airlock/external, +/obj/structure/fans, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 8 }, @@ -3432,6 +3440,7 @@ /obj/item/shovel, /obj/item/pickaxe, /obj/item/storage/box/lights/mixed, +/obj/item/storage/box/lights/mixed, /obj/item/mining_scanner, /obj/effect/turf_decal/bot, /turf/open/floor/plating, @@ -3514,6 +3523,7 @@ /area/shuttle/abandoned/bar) "dP" = ( /obj/machinery/door/airlock/external, +/obj/structure/fans, /obj/effect/mapping_helpers/airlock/cyclelink_helper, /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; @@ -3808,6 +3818,7 @@ /area/shuttle/abandoned/cargo) "ej" = ( /obj/machinery/door/airlock/external, +/obj/structure/fans, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 1 }, diff --git a/_maps/shuttles/whiteship_pubby.dmm b/_maps/shuttles/whiteship_pubby.dmm index 11214ef260..25c3250668 100644 --- a/_maps/shuttles/whiteship_pubby.dmm +++ b/_maps/shuttles/whiteship_pubby.dmm @@ -15,6 +15,7 @@ /obj/machinery/door/airlock/public/glass{ name = "Shuttle Airlock" }, +/obj/structure/fans, /turf/open/floor/plasteel/dark, /area/shuttle/abandoned) "e" = ( @@ -96,6 +97,7 @@ preferred_direction = 1; width = 9 }, +/obj/structure/fans, /turf/open/floor/plasteel/dark, /area/shuttle/abandoned) "p" = ( From f2ae556ee4dbe658b7106b8c656bf44c29b3c861 Mon Sep 17 00:00:00 2001 From: Trilbyspaceclone <30435998+Trilbyspaceclone@users.noreply.github.com> Date: Mon, 31 Dec 2018 06:06:50 -0500 Subject: [PATCH 051/104] Adds two boxes of candles to DEEP (#7851) --- _maps/RandomRuins/SpaceRuins/deepstorage.dmm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/_maps/RandomRuins/SpaceRuins/deepstorage.dmm b/_maps/RandomRuins/SpaceRuins/deepstorage.dmm index 0ff30453f2..bf4f0dbfa6 100644 --- a/_maps/RandomRuins/SpaceRuins/deepstorage.dmm +++ b/_maps/RandomRuins/SpaceRuins/deepstorage.dmm @@ -170,6 +170,8 @@ /obj/item/storage/box/monkeycubes, /obj/item/storage/toolbox/drone, /obj/item/storage/toolbox/drone, +/obj/item/storage/fancy/candle_box, +/obj/item/storage/fancy/candle_box, /obj/effect/turf_decal/delivery, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel, From cbae32f82d24ae01ed9ad373d1bbfd6fffe3c4fa Mon Sep 17 00:00:00 2001 From: Trilbyspaceclone <30435998+Trilbyspaceclone@users.noreply.github.com> Date: Mon, 31 Dec 2018 06:07:20 -0500 Subject: [PATCH 052/104] [Ready] Cargo packets with RLD RCD and IRCD! (#7840) * *oh no* * I know I know * Update packs.dm * Last touches * "Not that op" * Update packs.dm * makes the IRCD * Update packs.dm --- code/game/objects/items/RCD.dm | 12 +++++++- code/modules/cargo/packs.dm | 52 ++++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+), 1 deletion(-) diff --git a/code/game/objects/items/RCD.dm b/code/game/objects/items/RCD.dm index a1f6639865..82315b8f35 100644 --- a/code/game/objects/items/RCD.dm +++ b/code/game/objects/items/RCD.dm @@ -445,13 +445,23 @@ RLD matter = 160 /obj/item/construction/rcd/combat - name = "industrial RCD" + name = "Combat RCD" + desc = "A device used to rapidly build and deconstruct. Reload with metal, plasteel, glass or compressed matter cartridges. This RCD has been upgraded to be able to remove Rwalls!" icon_state = "ircd" item_state = "ircd" max_matter = 500 matter = 500 canRturf = TRUE +/obj/item/construction/rcd/industrial + name = "industrial RCD" + icon_state = "ircd" + item_state = "ircd" + max_matter = 500 + matter = 500 + delay_mod = 0.6 + sheetmultiplier = 8 + /obj/item/rcd_ammo name = "compressed matter cartridge" desc = "Highly compressed matter for the RCD." diff --git a/code/modules/cargo/packs.dm b/code/modules/cargo/packs.dm index 1bf41e3d25..a8874738f7 100644 --- a/code/modules/cargo/packs.dm +++ b/code/modules/cargo/packs.dm @@ -81,6 +81,15 @@ crate_name = "emergency crate" crate_type = /obj/structure/closet/crate/internals +/datum/supply_pack/emergency/rcds + name = "Emergency RCDs" + desc = "Bombs going off on station? SME blown and now you need to fix the hole it left behind? Well this crate has a pare of Rcds to be able to easily fix up any problem you may have!" + cost = 1500 + contains = list(/obj/item/construction/rcd, + /obj/item/construction/rcd) + crate_name = "emergency rcds" + crate_type = /obj/structure/closet/crate/internals + /datum/supply_pack/emergency/soft_suit name = "Emergency Space Suit " desc = "Is there bombs going off left and right? Is there meteors shooting around the station? Well we have two fragile space suit for emergencys as well as air and masks." @@ -666,6 +675,15 @@ /obj/item/clothing/suit/space/hardsuit/engine) crate_name = "engineering hardsuit" +/datum/supply_pack/engineering/industrialrcd + name = "Industrial RCD" + desc = "A industrial RCD in case the station has gone through more then one meteor storm and the CE needs to bring out the somthing a bit more reliable. Dose not contain spare ammo for the industrial RCD or any other RCD modles." + cost = 4500 + access = ACCESS_CE + contains = list(/obj/item/construction/rcd/industrial) + crate_name = "industrial rcd" + crate_type = /obj/structure/closet/crate/secure/engineering + /datum/supply_pack/engineering/powergamermitts name = "Insulated Gloves Crate" desc = "The backbone of modern society. Barely ever ordered for actual engineering. Contains three insulated gloves." @@ -1011,6 +1029,28 @@ contains = list(/obj/item/stack/sheet/mineral/wood/fifty) crate_name = "wood planks crate" +/datum/supply_pack/materials/rcdammo + name = "Spare RDC ammo" + desc = "This crate contains sixteen RCD ammo packs, to help with any holes or projects people mite be working on." + cost = 3750 + contains = list(/obj/item/rcd_ammo, + /obj/item/rcd_ammo, + /obj/item/rcd_ammo, + /obj/item/rcd_ammo, + /obj/item/rcd_ammo, + /obj/item/rcd_ammo, + /obj/item/rcd_ammo, + /obj/item/rcd_ammo, + /obj/item/rcd_ammo, + /obj/item/rcd_ammo, + /obj/item/rcd_ammo, + /obj/item/rcd_ammo, + /obj/item/rcd_ammo, + /obj/item/rcd_ammo, + /obj/item/rcd_ammo, + /obj/item/rcd_ammo) + crate_name = "rcd ammo" + /datum/supply_pack/materials/bz name = "BZ Canister Crate" desc = "Contains a canister of BZ. Requires Toxins access to open." @@ -1688,6 +1728,18 @@ crate_name = "hydroponics backpack crate" crate_type = /obj/structure/closet/crate/secure +/datum/supply_pack/organic/advlighting + name = "Advanced Lighting crate" + desc = "Thanks to advanced lighting tech we here at the Lamp Factor have be able to produce more lamps and lamp items! This crate has three lamps, a box of lights and a state of the art rapid-light-device!" + cost = 2500 //Fair + contains = list(/obj/item/construction/rld, + /obj/item/flashlight/lamp, + /obj/item/flashlight/lamp, + /obj/item/flashlight/lamp/green, + /obj/item/storage/box/lights/mixed) + crate_name = "advanced lighting crate" + crate_type = /obj/structure/closet/crate/secure + /datum/supply_pack/organic/pizza name = "Pizza Crate" desc = "Best prices on this side of the galaxy. All deliveries are guaranteed to be 99% anomaly-free!" From f2126c6d9e22440bc6efc493b8164573d6f0c349 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Mon, 31 Dec 2018 06:07:46 -0500 Subject: [PATCH 053/104] Makes stamcrit completely unaffected by health (#7865) * makes stamina completely unaffected by health * oh, and these lines too --- modular_citadel/code/modules/mob/living/living.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/modular_citadel/code/modules/mob/living/living.dm b/modular_citadel/code/modules/mob/living/living.dm index 955263b7af..b07b8ed64b 100644 --- a/modular_citadel/code/modules/mob/living/living.dm +++ b/modular_citadel/code/modules/mob/living/living.dm @@ -102,9 +102,9 @@ return FALSE /mob/living/carbon/update_stamina() - var/total_health = (min(health*2,100) - getStaminaLoss()) - if(getStaminaLoss()) - if(!recoveringstam && total_health <= STAMINA_CRIT_TRADITIONAL && !stat) + var/total_health = getStaminaLoss() + if(total_health) + if(!recoveringstam && total_health >= STAMINA_CRIT && !stat) to_chat(src, "You're too exhausted to keep going...") resting = TRUE if(combatmode) @@ -112,7 +112,7 @@ recoveringstam = TRUE filters += CIT_FILTER_STAMINACRIT update_canmove() - if(recoveringstam && total_health >= STAMINA_SOFTCRIT_TRADITIONAL) + if(recoveringstam && total_health <= STAMINA_SOFTCRIT) to_chat(src, "You don't feel nearly as exhausted anymore.") recoveringstam = FALSE filters -= CIT_FILTER_STAMINACRIT From 35a914778df5c84a545ef23113854bd92ba5b2bc Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Mon, 31 Dec 2018 05:07:48 -0600 Subject: [PATCH 054/104] Automatic changelog generation for PR #7865 [ci skip] --- html/changelogs/AutoChangeLog-pr-7865.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-7865.yml diff --git a/html/changelogs/AutoChangeLog-pr-7865.yml b/html/changelogs/AutoChangeLog-pr-7865.yml new file mode 100644 index 0000000000..a75282b293 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-7865.yml @@ -0,0 +1,4 @@ +author: "deathride58" +delete-after: True +changes: + - balance: "Stamina is no longer affected by health at all." From be568777d2e4dc4f31eea9eabe706b19e17bcd7e Mon Sep 17 00:00:00 2001 From: Trilbyspaceclone <30435998+Trilbyspaceclone@users.noreply.github.com> Date: Mon, 31 Dec 2018 06:10:47 -0500 Subject: [PATCH 055/104] [Ready] Buffs RPEDs (#7853) * Buffs RPEDs * maybe --- code/datums/components/storage/concrete/rped.dm | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/code/datums/components/storage/concrete/rped.dm b/code/datums/components/storage/concrete/rped.dm index adf08b089b..e1cc4ff6ae 100644 --- a/code/datums/components/storage/concrete/rped.dm +++ b/code/datums/components/storage/concrete/rped.dm @@ -5,7 +5,7 @@ click_gather = TRUE max_w_class = WEIGHT_CLASS_NORMAL max_combined_w_class = 100 - max_items = 75 + max_items = 100 display_numerical_stacking = TRUE /datum/component/storage/concrete/rped/can_be_inserted(obj/item/I, stop_messages, mob/M) @@ -22,7 +22,7 @@ click_gather = TRUE max_w_class = WEIGHT_CLASS_BULKY // can fit vending refills max_combined_w_class = 800 - max_items = 325 + max_items = 350 display_numerical_stacking = TRUE /datum/component/storage/concrete/bluespace/rped/can_be_inserted(obj/item/I, stop_messages, mob/M) @@ -31,3 +31,6 @@ if (!stop_messages) to_chat(M, "[parent] only accepts machine parts!") return FALSE + +/datum/component/storage/concrete/cyborg/rped + max_items = 150 From df2090a0872f224b6aacf353c4075c81b4b15cb7 Mon Sep 17 00:00:00 2001 From: Trilbyspaceclone <30435998+Trilbyspaceclone@users.noreply.github.com> Date: Mon, 31 Dec 2018 06:11:10 -0500 Subject: [PATCH 056/104] QM is a head (#7855) --- code/game/gamemodes/revolution/revolution.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm index 5029eaa03a..09047b05a9 100644 --- a/code/game/gamemodes/revolution/revolution.dm +++ b/code/game/gamemodes/revolution/revolution.dm @@ -36,7 +36,7 @@ /////////////////////////// /datum/game_mode/revolution/announce() to_chat(world, "The current game mode is - Revolution!") - to_chat(world, "Some crewmembers are attempting to start a revolution!
\nRevolutionaries - Kill the Captain, HoP, HoS, CE, RD and CMO. Convert other crewmembers (excluding the heads of staff, and security officers) to your cause by flashing them. Protect your leaders.
\nPersonnel - Protect the heads of staff. Kill the leaders of the revolution, and brainwash the other revolutionaries (by beating them in the head).
") + to_chat(world, "Some crewmembers are attempting to start a revolution!
\nRevolutionaries - Kill the Captain, HoP, HoS, CE, RD, QM and CMO. Convert other crewmembers (excluding the heads of staff, and security officers) to your cause by flashing them. Protect your leaders.
\nPersonnel - Protect the heads of staff. Kill the leaders of the revolution, and brainwash the other revolutionaries (by beating them in the head).
") /////////////////////////////////////////////////////////////////////////////// From 1f1c5b371066ec9d65bfc520788991832a8c6519 Mon Sep 17 00:00:00 2001 From: Trilbyspaceclone <30435998+Trilbyspaceclone@users.noreply.github.com> Date: Mon, 31 Dec 2018 06:11:44 -0500 Subject: [PATCH 057/104] [Ready] Adds in a scatter shot Bulldog drum! (#7863) * Fixing updater * adds the ammo * Update uplink_items.dm * Update shotgun.dm * Update uplink_items.dm --- .../modules/projectiles/boxes_magazines/external/shotgun.dm | 5 +++++ code/modules/uplink/uplink_items.dm | 6 ++++++ 2 files changed, 11 insertions(+) diff --git a/code/modules/projectiles/boxes_magazines/external/shotgun.dm b/code/modules/projectiles/boxes_magazines/external/shotgun.dm index bb04446129..1fa3db28b5 100644 --- a/code/modules/projectiles/boxes_magazines/external/shotgun.dm +++ b/code/modules/projectiles/boxes_magazines/external/shotgun.dm @@ -34,3 +34,8 @@ name = "shotgun magazine (12g meteor slugs)" icon_state = "m12gbc" ammo_type = /obj/item/ammo_casing/shotgun/meteorslug + +/obj/item/ammo_box/magazine/m12g/scatter + name = "shotgun magazine (12g scatter laser shot slugs)" + icon_state = "m12gb" + ammo_type = /obj/item/ammo_casing/shotgun/laserslug diff --git a/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm index 32eaf0cde9..ee4a0c3aad 100644 --- a/code/modules/uplink/uplink_items.dm +++ b/code/modules/uplink/uplink_items.dm @@ -506,6 +506,12 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) item = /obj/item/ammo_box/magazine/m12g/meteor include_modes = list(/datum/game_mode/nuclear) +/datum/uplink_item/ammo/shotgun/scatter + name = "12g Scatter Laser shot Slugs" + desc = "An alternative 8-round Scatter Laser Shot magazine for use in the Bulldog shotgun." + item = /obj/item/ammo_box/magazine/m12g/scatter + cost = 3 + /datum/uplink_item/ammo/shotgun/bag name = "12g Ammo Duffel Bag" desc = "A duffel bag filled with enough 12g ammo to supply an entire team, at a discounted price." From f140d56b437be725fbf2b9cc498bb0746f94f443 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Mon, 31 Dec 2018 23:41:01 -0800 Subject: [PATCH 058/104] Update coil.dm --- code/modules/power/tesla/coil.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/power/tesla/coil.dm b/code/modules/power/tesla/coil.dm index 33ebefbf4c..2265f806a5 100644 --- a/code/modules/power/tesla/coil.dm +++ b/code/modules/power/tesla/coil.dm @@ -94,7 +94,7 @@ var/power = (powernet.avail/2) add_load(power) playsound(src.loc, 'sound/magic/lightningshock.ogg', 100, 1, extrarange = 5) - tesla_zap(src, 10, power/(coeff/2)) + tesla_zap(src, 10, power/(coeff/2), TESLA_FUSION_FLAGS) tesla_buckle_check(power/(coeff/2)) // Tesla R&D researcher @@ -174,4 +174,4 @@ flick("grounding_rodhit", src) tesla_buckle_check(power) else - ..() \ No newline at end of file + ..() From c620beec65ebae68ea6403f70e11f13347a14b44 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Tue, 1 Jan 2019 00:05:53 -0800 Subject: [PATCH 059/104] Update ninja_event.dm --- code/modules/ninja/ninja_event.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/ninja/ninja_event.dm b/code/modules/ninja/ninja_event.dm index 9fd8e4baf2..ccd9b765c1 100644 --- a/code/modules/ninja/ninja_event.dm +++ b/code/modules/ninja/ninja_event.dm @@ -33,7 +33,6 @@ Contents: control.occurrences-- return ..() - /datum/round_event/ghost_role/ninja/spawn_role() //selecting a spawn_loc if(!spawn_loc) @@ -74,6 +73,7 @@ Contents: spawned_mobs += Ninja message_admins("[ADMIN_LOOKUPFLW(Ninja)] has been made into a ninja by an event.") log_game("[key_name(Ninja)] was spawned as a ninja by an event.") + success_spawn = TRUE return SUCCESSFUL_SPAWN @@ -86,4 +86,4 @@ Contents: A.real_name = "[pick(GLOB.ninja_titles)] [pick(GLOB.ninja_names)]" A.copy_to(new_ninja) new_ninja.dna.update_dna_identity() - return new_ninja \ No newline at end of file + return new_ninja From ba24207f86c8827e887453127ae15fe206f2f509 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Tue, 1 Jan 2019 00:06:13 -0800 Subject: [PATCH 060/104] Update devil.dm --- code/modules/events/devil.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/events/devil.dm b/code/modules/events/devil.dm index 3760cbe05d..7d6e0bd441 100644 --- a/code/modules/events/devil.dm +++ b/code/modules/events/devil.dm @@ -39,6 +39,7 @@ var/datum/job/jobdatum = SSjob.GetJob("Assistant") devil.job = jobdatum.title jobdatum.equip(devil) + success_spawn = TRUE return SUCCESSFUL_SPAWN From de551bc0c6fa61db93866d6170bb1c87e569e0e1 Mon Sep 17 00:00:00 2001 From: Trilbyspaceclone <30435998+Trilbyspaceclone@users.noreply.github.com> Date: Wed, 2 Jan 2019 02:21:23 -0500 Subject: [PATCH 068/104] Revert "Adds fans to each white ship hopefully at all doors leading to space! - Requested by Seras/Others (#7862)" This reverts commit addea6f21c325a3e534a069b4fef91e597f0132a. --- _maps/shuttles/whiteship_box.dmm | 7 ------- _maps/shuttles/whiteship_delta.dmm | 7 ------- _maps/shuttles/whiteship_meta.dmm | 11 ----------- _maps/shuttles/whiteship_pubby.dmm | 2 -- 4 files changed, 27 deletions(-) diff --git a/_maps/shuttles/whiteship_box.dmm b/_maps/shuttles/whiteship_box.dmm index 3385f89dbd..8dc007ec95 100644 --- a/_maps/shuttles/whiteship_box.dmm +++ b/_maps/shuttles/whiteship_box.dmm @@ -14,7 +14,6 @@ /area/shuttle/abandoned/crew) "ae" = ( /obj/machinery/door/airlock/external, -/obj/structure/fans, /obj/effect/mapping_helpers/airlock/cyclelink_helper, /obj/docking_port/mobile{ callTime = 250; @@ -149,7 +148,6 @@ /area/shuttle/abandoned/crew) "ap" = ( /obj/machinery/door/airlock/external, -/obj/structure/fans, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 1 }, @@ -739,7 +737,6 @@ /obj/effect/turf_decal/bot, /obj/item/reagent_containers/glass/bucket, /obj/item/mop, -/obj/item/assembly/prox_sensor, /obj/item/storage/bag/trash{ pixel_x = 6 }, @@ -957,7 +954,6 @@ /area/shuttle/abandoned/engine) "bm" = ( /obj/machinery/door/airlock/external, -/obj/structure/fans, /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; name = "dust" @@ -1134,7 +1130,6 @@ /area/shuttle/abandoned/bridge) "by" = ( /obj/machinery/door/airlock/external, -/obj/structure/fans, /obj/effect/mapping_helpers/airlock/cyclelink_helper, /turf/open/floor/plating, /area/shuttle/abandoned/engine) @@ -2604,7 +2599,6 @@ /area/shuttle/abandoned/medbay) "do" = ( /obj/machinery/door/airlock/external, -/obj/structure/fans, /obj/effect/mapping_helpers/airlock/cyclelink_helper, /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; @@ -2676,7 +2670,6 @@ /area/shuttle/abandoned/medbay) "dt" = ( /obj/machinery/door/airlock/external, -/obj/structure/fans, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 1 }, diff --git a/_maps/shuttles/whiteship_delta.dmm b/_maps/shuttles/whiteship_delta.dmm index 88027243fb..160f6adfd5 100644 --- a/_maps/shuttles/whiteship_delta.dmm +++ b/_maps/shuttles/whiteship_delta.dmm @@ -19,7 +19,6 @@ /area/shuttle/abandoned/crew) "ad" = ( /obj/machinery/door/airlock/external, -/obj/structure/fans, /obj/effect/mapping_helpers/airlock/cyclelink_helper, /obj/docking_port/mobile{ callTime = 250; @@ -440,7 +439,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/structure/fans, /obj/machinery/door/airlock/external/glass{ name = "E.V.A Access" }, @@ -626,7 +624,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/structure/fans, /obj/machinery/door/airlock/external/glass{ name = "E.V.A Access" }, @@ -2531,7 +2528,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/structure/fans, /obj/machinery/door/airlock/external/glass{ name = "E.V.A Access" }, @@ -2556,7 +2552,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/structure/fans, /obj/machinery/door/airlock/external/glass{ name = "E.V.A Access" }, @@ -2787,7 +2782,6 @@ /area/shuttle/abandoned/medbay) "dI" = ( /obj/machinery/door/airlock/external, -/obj/structure/fans, /obj/effect/mapping_helpers/airlock/cyclelink_helper, /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; @@ -3109,7 +3103,6 @@ /area/shuttle/abandoned/cargo) "eb" = ( /obj/machinery/door/airlock/external, -/obj/structure/fans, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 1 }, diff --git a/_maps/shuttles/whiteship_meta.dmm b/_maps/shuttles/whiteship_meta.dmm index 0a6a5d9b71..a7f977c34e 100644 --- a/_maps/shuttles/whiteship_meta.dmm +++ b/_maps/shuttles/whiteship_meta.dmm @@ -34,7 +34,6 @@ /area/shuttle/abandoned/crew) "ah" = ( /obj/machinery/door/airlock/external, -/obj/structure/fans, /obj/effect/mapping_helpers/airlock/cyclelink_helper, /obj/docking_port/mobile{ callTime = 250; @@ -459,7 +458,6 @@ /area/shuttle/abandoned/crew) "aI" = ( /obj/machinery/door/airlock/external, -/obj/structure/fans, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 1 }, @@ -585,7 +583,6 @@ name = "dust" }, /obj/machinery/door/airlock/external, -/obj/structure/fans, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 4 }, @@ -707,7 +704,6 @@ name = "dust" }, /obj/machinery/door/airlock/external, -/obj/structure/fans, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 8 }, @@ -1897,7 +1893,6 @@ /area/shuttle/abandoned/bridge) "ch" = ( /obj/machinery/door/airlock/external, -/obj/structure/fans, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 4 }, @@ -1920,7 +1915,6 @@ /area/shuttle/abandoned/engine) "cj" = ( /obj/machinery/door/airlock/external, -/obj/structure/fans, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 8 }, @@ -3100,7 +3094,6 @@ name = "dust" }, /obj/machinery/door/airlock/external, -/obj/structure/fans, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 4 }, @@ -3171,7 +3164,6 @@ name = "dust" }, /obj/machinery/door/airlock/external, -/obj/structure/fans, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 8 }, @@ -3440,7 +3432,6 @@ /obj/item/shovel, /obj/item/pickaxe, /obj/item/storage/box/lights/mixed, -/obj/item/storage/box/lights/mixed, /obj/item/mining_scanner, /obj/effect/turf_decal/bot, /turf/open/floor/plating, @@ -3523,7 +3514,6 @@ /area/shuttle/abandoned/bar) "dP" = ( /obj/machinery/door/airlock/external, -/obj/structure/fans, /obj/effect/mapping_helpers/airlock/cyclelink_helper, /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; @@ -3818,7 +3808,6 @@ /area/shuttle/abandoned/cargo) "ej" = ( /obj/machinery/door/airlock/external, -/obj/structure/fans, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 1 }, diff --git a/_maps/shuttles/whiteship_pubby.dmm b/_maps/shuttles/whiteship_pubby.dmm index 25c3250668..11214ef260 100644 --- a/_maps/shuttles/whiteship_pubby.dmm +++ b/_maps/shuttles/whiteship_pubby.dmm @@ -15,7 +15,6 @@ /obj/machinery/door/airlock/public/glass{ name = "Shuttle Airlock" }, -/obj/structure/fans, /turf/open/floor/plasteel/dark, /area/shuttle/abandoned) "e" = ( @@ -97,7 +96,6 @@ preferred_direction = 1; width = 9 }, -/obj/structure/fans, /turf/open/floor/plasteel/dark, /area/shuttle/abandoned) "p" = ( From 02761a38c9487d36a6dfe31ff7655f40aa0579e2 Mon Sep 17 00:00:00 2001 From: Trilbyspaceclone <30435998+Trilbyspaceclone@users.noreply.github.com> Date: Wed, 2 Jan 2019 02:29:53 -0500 Subject: [PATCH 069/104] Correct fans --- _maps/shuttles/whiteship_box.dmm | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/_maps/shuttles/whiteship_box.dmm b/_maps/shuttles/whiteship_box.dmm index 8dc007ec95..0404cede34 100644 --- a/_maps/shuttles/whiteship_box.dmm +++ b/_maps/shuttles/whiteship_box.dmm @@ -15,6 +15,7 @@ "ae" = ( /obj/machinery/door/airlock/external, /obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/structure/fans/tiny, /obj/docking_port/mobile{ callTime = 250; dheight = 0; @@ -148,6 +149,7 @@ /area/shuttle/abandoned/crew) "ap" = ( /obj/machinery/door/airlock/external, +/obj/structure/fans/tiny, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 1 }, @@ -737,6 +739,7 @@ /obj/effect/turf_decal/bot, /obj/item/reagent_containers/glass/bucket, /obj/item/mop, +/obj/item/assembly/prox_sensor, /obj/item/storage/bag/trash{ pixel_x = 6 }, @@ -954,6 +957,7 @@ /area/shuttle/abandoned/engine) "bm" = ( /obj/machinery/door/airlock/external, +/obj/structure/fans/tiny, /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; name = "dust" @@ -1130,6 +1134,7 @@ /area/shuttle/abandoned/bridge) "by" = ( /obj/machinery/door/airlock/external, +/obj/structure/fans/tiny, /obj/effect/mapping_helpers/airlock/cyclelink_helper, /turf/open/floor/plating, /area/shuttle/abandoned/engine) @@ -2600,6 +2605,7 @@ "do" = ( /obj/machinery/door/airlock/external, /obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/structure/fans/tiny, /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; name = "dust" @@ -2670,6 +2676,7 @@ /area/shuttle/abandoned/medbay) "dt" = ( /obj/machinery/door/airlock/external, +/obj/structure/fans/tiny, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 1 }, From fc5b9117f249d363ac562edbfd689b0dfb6feaf6 Mon Sep 17 00:00:00 2001 From: Trilbyspaceclone <30435998+Trilbyspaceclone@users.noreply.github.com> Date: Wed, 2 Jan 2019 02:35:23 -0500 Subject: [PATCH 070/104] Correct fans --- _maps/shuttles/whiteship_delta.dmm | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/_maps/shuttles/whiteship_delta.dmm b/_maps/shuttles/whiteship_delta.dmm index 160f6adfd5..cc8eb19bab 100644 --- a/_maps/shuttles/whiteship_delta.dmm +++ b/_maps/shuttles/whiteship_delta.dmm @@ -19,6 +19,7 @@ /area/shuttle/abandoned/crew) "ad" = ( /obj/machinery/door/airlock/external, +/obj/structure/fans/tiny, /obj/effect/mapping_helpers/airlock/cyclelink_helper, /obj/docking_port/mobile{ callTime = 250; @@ -443,6 +444,7 @@ name = "E.V.A Access" }, /turf/open/floor/plasteel, +/obj/structure/fans/tiny, /area/shuttle/abandoned/crew) "aK" = ( /obj/effect/decal/cleanable/dirt{ @@ -628,6 +630,7 @@ name = "E.V.A Access" }, /obj/effect/decal/cleanable/dirt, +/obj/structure/fans/tiny, /turf/open/floor/plasteel, /area/shuttle/abandoned/bar) "aX" = ( @@ -2531,6 +2534,7 @@ /obj/machinery/door/airlock/external/glass{ name = "E.V.A Access" }, +/obj/structure/fans/tiny, /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; name = "dust" @@ -2555,6 +2559,7 @@ /obj/machinery/door/airlock/external/glass{ name = "E.V.A Access" }, +/obj/structure/fans/tiny, /turf/open/floor/plasteel, /area/shuttle/abandoned/cargo) "ds" = ( @@ -2782,6 +2787,7 @@ /area/shuttle/abandoned/medbay) "dI" = ( /obj/machinery/door/airlock/external, +/obj/structure/fans/tiny, /obj/effect/mapping_helpers/airlock/cyclelink_helper, /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; @@ -3103,6 +3109,7 @@ /area/shuttle/abandoned/cargo) "eb" = ( /obj/machinery/door/airlock/external, +/obj/structure/fans/tiny, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 1 }, From 0b556a46af2a345c65694430ba307146b48e1f91 Mon Sep 17 00:00:00 2001 From: Trilbyspaceclone <30435998+Trilbyspaceclone@users.noreply.github.com> Date: Wed, 2 Jan 2019 02:39:19 -0500 Subject: [PATCH 071/104] correct fans --- _maps/shuttles/whiteship_meta.dmm | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/_maps/shuttles/whiteship_meta.dmm b/_maps/shuttles/whiteship_meta.dmm index a7f977c34e..84fff43a44 100644 --- a/_maps/shuttles/whiteship_meta.dmm +++ b/_maps/shuttles/whiteship_meta.dmm @@ -34,6 +34,7 @@ /area/shuttle/abandoned/crew) "ah" = ( /obj/machinery/door/airlock/external, +/obj/structure/fans/tiny, /obj/effect/mapping_helpers/airlock/cyclelink_helper, /obj/docking_port/mobile{ callTime = 250; @@ -458,6 +459,7 @@ /area/shuttle/abandoned/crew) "aI" = ( /obj/machinery/door/airlock/external, +/obj/structure/fans/tiny, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 1 }, @@ -583,6 +585,7 @@ name = "dust" }, /obj/machinery/door/airlock/external, +/obj/structure/fans/tiny, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 4 }, @@ -704,6 +707,7 @@ name = "dust" }, /obj/machinery/door/airlock/external, +/obj/structure/fans/tiny, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 8 }, @@ -1893,6 +1897,7 @@ /area/shuttle/abandoned/bridge) "ch" = ( /obj/machinery/door/airlock/external, +/obj/structure/fans/tiny, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 4 }, @@ -1915,6 +1920,7 @@ /area/shuttle/abandoned/engine) "cj" = ( /obj/machinery/door/airlock/external, +/obj/structure/fans/tiny, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 8 }, @@ -3094,6 +3100,7 @@ name = "dust" }, /obj/machinery/door/airlock/external, +/obj/structure/fans/tiny, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 4 }, @@ -3164,6 +3171,7 @@ name = "dust" }, /obj/machinery/door/airlock/external, +/obj/structure/fans/tiny, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 8 }, @@ -3432,6 +3440,7 @@ /obj/item/shovel, /obj/item/pickaxe, /obj/item/storage/box/lights/mixed, +/obj/item/storage/box/lights/mixed, /obj/item/mining_scanner, /obj/effect/turf_decal/bot, /turf/open/floor/plating, @@ -3514,6 +3523,7 @@ /area/shuttle/abandoned/bar) "dP" = ( /obj/machinery/door/airlock/external, +/obj/structure/fans/tiny, /obj/effect/mapping_helpers/airlock/cyclelink_helper, /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; @@ -3808,6 +3818,7 @@ /area/shuttle/abandoned/cargo) "ej" = ( /obj/machinery/door/airlock/external, +/obj/structure/fans/tiny, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 1 }, From 9618fecfb7133111cc4ee14a90c90172ae70d07e Mon Sep 17 00:00:00 2001 From: Trilbyspaceclone <30435998+Trilbyspaceclone@users.noreply.github.com> Date: Wed, 2 Jan 2019 02:40:10 -0500 Subject: [PATCH 072/104] Correct fans --- _maps/shuttles/whiteship_pubby.dmm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/_maps/shuttles/whiteship_pubby.dmm b/_maps/shuttles/whiteship_pubby.dmm index 11214ef260..fef3918e1d 100644 --- a/_maps/shuttles/whiteship_pubby.dmm +++ b/_maps/shuttles/whiteship_pubby.dmm @@ -15,6 +15,7 @@ /obj/machinery/door/airlock/public/glass{ name = "Shuttle Airlock" }, +/obj/structure/fans/tiny, /turf/open/floor/plasteel/dark, /area/shuttle/abandoned) "e" = ( @@ -96,6 +97,7 @@ preferred_direction = 1; width = 9 }, +/obj/structure/fans/tiny, /turf/open/floor/plasteel/dark, /area/shuttle/abandoned) "p" = ( From 2b2195baf5d63d4d6779c362c0ee847f171ffba1 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Wed, 2 Jan 2019 07:24:37 -0800 Subject: [PATCH 073/104] Update glowshroom.dm --- code/game/objects/effects/glowshroom.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/effects/glowshroom.dm b/code/game/objects/effects/glowshroom.dm index 13497dfb8a..c009d3ec79 100644 --- a/code/game/objects/effects/glowshroom.dm +++ b/code/game/objects/effects/glowshroom.dm @@ -96,7 +96,7 @@ for(var/turf/open/floor/earth in view(3,src)) if(is_type_in_typecache(earth, blacklisted_glowshroom_turfs)) continue - if(!ownturf.CanAtmosPass(earth)) + if(!disease_air_spread_walk(ownturf, earth)) continue if(spreadsIntoAdjacent || !locate(/obj/structure/glowshroom) in view(1,earth)) possibleLocs += earth From 58347dad9b3e32822aa8aa2ea0ea6f09d9434166 Mon Sep 17 00:00:00 2001 From: Tupinambis <42078130+Tupinambis@users.noreply.github.com> Date: Thu, 3 Jan 2019 06:34:55 -0600 Subject: [PATCH 074/104] Stop self antagging you shits (#7878) --- .../LavaRuins/lavaland_surface_alien_nest.dmm | 23 ++++++++----------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_alien_nest.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_alien_nest.dmm index 5c35c78274..6893a41517 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_alien_nest.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_alien_nest.dmm @@ -34,11 +34,6 @@ /obj/structure/alien/weeds, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/ruin/unpowered/xenonest) -"ai" = ( -/obj/structure/alien/weeds, -/obj/structure/alien/egg, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/xenonest) "aj" = ( /obj/structure/alien/weeds, /obj/structure/bed/nest, @@ -1219,12 +1214,12 @@ an ac ac aJ -ag +af ag ac ac ar -ai +ag ac an an @@ -1269,7 +1264,7 @@ an an ac Dd -ai +ag ak ag af @@ -1298,10 +1293,10 @@ aa ab ac ac -ai +ag ag at -ai +ag ac ag at @@ -1401,7 +1396,7 @@ ab ac af ag -af +ag ag af ac @@ -1807,7 +1802,7 @@ bD (25,1,1) = {" ab ac -ai +ag ag JM ag @@ -1816,7 +1811,7 @@ ac ag ar ag -ai +ag ac ab ab @@ -1860,7 +1855,7 @@ ab ac ac af -ai +ag af ag aF From b6488cb819b25f2a92305fd35ba97e9771e94763 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Thu, 3 Jan 2019 06:34:57 -0600 Subject: [PATCH 075/104] Automatic changelog generation for PR #7878 [ci skip] --- html/changelogs/AutoChangeLog-pr-7878.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-7878.yml diff --git a/html/changelogs/AutoChangeLog-pr-7878.yml b/html/changelogs/AutoChangeLog-pr-7878.yml new file mode 100644 index 0000000000..6d10310d94 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-7878.yml @@ -0,0 +1,4 @@ +author: "Tupinambis" +delete-after: True +changes: + - tweak: "Removed all living eggs from the xeno ruin because people self antag. Honk." From fd5908c081ecf7c86ea7f0e8ab65c7ba14b7e341 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Thu, 3 Jan 2019 07:35:17 -0500 Subject: [PATCH 076/104] Makes it possible to instantly get on your feet at the cost of 20 buffered stamina (#7866) --- .../mob/living/carbon/human/species.dm | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/modular_citadel/code/modules/mob/living/carbon/human/species.dm b/modular_citadel/code/modules/mob/living/carbon/human/species.dm index 8d50bf16b0..232725e320 100644 --- a/modular_citadel/code/modules/mob/living/carbon/human/species.dm +++ b/modular_citadel/code/modules/mob/living/carbon/human/species.dm @@ -13,11 +13,30 @@ H.visible_message("[M] attempted to touch [H]!") return TRUE switch(M.a_intent) - if("disarm") + if(INTENT_HELP) + if(M == H) + althelp(M, H, attacker_style) + return TRUE + return FALSE + if(INTENT_DISARM) altdisarm(M, H, attacker_style) return TRUE return FALSE +/datum/species/proc/althelp(mob/living/carbon/human/user, mob/living/carbon/human/target, datum/martial_art/attacker_style) + if(user == target && istype(user)) + if(user.getStaminaLoss() >= STAMINA_SOFTCRIT) + to_chat(user, "You're too exhausted for that.") + return + if(!user.resting) + to_chat(user, "You can only force yourself up if you're on the ground.") + return + user.visible_message("[user] forces [p_them()]self up to [p_their()] feet!", "You force yourself up to your feet!") + user.resting = 0 + user.update_canmove() + user.adjustStaminaLossBuffered(user.stambuffer) //Rewards good stamina management by making it easier to instantly get up from resting + playsound(user, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) + /datum/species/proc/altdisarm(mob/living/carbon/human/user, mob/living/carbon/human/target, datum/martial_art/attacker_style) if(user.getStaminaLoss() >= STAMINA_SOFTCRIT) to_chat(user, "You're too exhausted.") From 2a3fb66410c31a96a5c22c81b2b4a06d7658f128 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Thu, 3 Jan 2019 06:35:19 -0600 Subject: [PATCH 077/104] Automatic changelog generation for PR #7866 [ci skip] --- html/changelogs/AutoChangeLog-pr-7866.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-7866.yml diff --git a/html/changelogs/AutoChangeLog-pr-7866.yml b/html/changelogs/AutoChangeLog-pr-7866.yml new file mode 100644 index 0000000000..17435075e0 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-7866.yml @@ -0,0 +1,4 @@ +author: "deathride58" +delete-after: True +changes: + - rscadd: "You can now right-click yourself in help intent in combat mode to instantly get up from resting. This will cost stamina equal to your entire stamina buffer. Manage your stamina well, and you'll be able to shrug off a single stray golden bolt" From 6c8e0a67adfe0c1437100acae099612935e5d3f2 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Thu, 3 Jan 2019 07:35:45 -0500 Subject: [PATCH 078/104] Ports tgstation/tgstation#42035 - Notifies admins when Lone Op event chance is changed (#7876) * makes the nuke disk notify admins when the loneop event weight chance increases/decreases * oh and the logging too * fucking spaces sneaking into my ctrl+c > ctrl+v --- code/modules/antagonists/nukeop/equipment/nuclearbomb.dm | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm b/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm index e365f09b55..ade5458765 100644 --- a/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm +++ b/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm @@ -588,12 +588,18 @@ This is here to make the tiles around the station mininuke change when it's arme var/datum/round_event_control/operative/loneop = locate(/datum/round_event_control/operative) in SSevents.control if(istype(loneop)) loneop.weight += 1 + if(loneop.weight % 5 == 0) + message_admins("[src] is stationary in [ADMIN_VERBOSEJMP(newturf)]. The weight of Lone Operative is now [loneop.weight].") + log_game("[src] is stationary for too long in [loc_name(newturf)], and has increased the weight of the Lone Operative event to [loneop.weight].") else lastlocation = newturf last_disk_move = world.time var/datum/round_event_control/operative/loneop = locate(/datum/round_event_control/operative) in SSevents.control if(istype(loneop) && prob(loneop.weight)) loneop.weight = max(loneop.weight - 1, 0) + if(loneop.weight % 5 == 0) + message_admins("[src] is on the move (currently in [ADMIN_VERBOSEJMP(newturf)]). The weight of Lone Operative is now [loneop.weight].") + log_game("[src] being on the move has reduced the weight of the Lone Operative event to [loneop.weight].") /obj/item/disk/nuclear/examine(mob/user) . = ..() From 5c8d5484656772d18fdf69387e018c7cf7838edd Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Thu, 3 Jan 2019 06:35:47 -0600 Subject: [PATCH 079/104] Automatic changelog generation for PR #7876 [ci skip] --- html/changelogs/AutoChangeLog-pr-7876.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-7876.yml diff --git a/html/changelogs/AutoChangeLog-pr-7876.yml b/html/changelogs/AutoChangeLog-pr-7876.yml new file mode 100644 index 0000000000..649c0cc916 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-7876.yml @@ -0,0 +1,4 @@ +author: "coiax" +delete-after: True +changes: + - admin: "When the nuclear disk stays stationary long enough to trigger an increase for the lone op event chance, admins will be notified every five increments." From 09df2edf2588ee8f60fdfef45da6e7da548f83b1 Mon Sep 17 00:00:00 2001 From: Trilbyspaceclone <30435998+Trilbyspaceclone@users.noreply.github.com> Date: Thu, 3 Jan 2019 07:36:52 -0500 Subject: [PATCH 080/104] Update uplink_items.dm (#7877) --- code/modules/uplink/uplink_items.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm index ee4a0c3aad..1e3060137a 100644 --- a/code/modules/uplink/uplink_items.dm +++ b/code/modules/uplink/uplink_items.dm @@ -510,7 +510,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) name = "12g Scatter Laser shot Slugs" desc = "An alternative 8-round Scatter Laser Shot magazine for use in the Bulldog shotgun." item = /obj/item/ammo_box/magazine/m12g/scatter - cost = 3 + cost = 5 // most armor has less laser protection then bullet /datum/uplink_item/ammo/shotgun/bag name = "12g Ammo Duffel Bag" From 21f111b5e0169c6cf6fdcd5043819e986ed8c913 Mon Sep 17 00:00:00 2001 From: Trilbyspaceclone <30435998+Trilbyspaceclone@users.noreply.github.com> Date: Thu, 3 Jan 2019 07:38:10 -0500 Subject: [PATCH 081/104] [Ready] New mech weapon, Melon Seed Scatter shot! - Requested and helped made by Elllsiy (#7873) * Fixing updater * Adds the gunthingy * makes the bullet * Update mecha_designs.dm * Update all_nodes.dm * Fixes stam harm --- code/game/mecha/equipment/weapons/weapons.dm | 12 ++++++++++++ .../projectiles/projectile/bullets/shotgun.dm | 6 +++++- code/modules/research/designs/mecha_designs.dm | 10 ++++++++++ code/modules/research/techweb/all_nodes.dm | 9 +++++++++ 4 files changed, 36 insertions(+), 1 deletion(-) diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm index 6c0795028b..d8c0fbeeb3 100644 --- a/code/game/mecha/equipment/weapons/weapons.dm +++ b/code/game/mecha/equipment/weapons/weapons.dm @@ -275,6 +275,18 @@ variance = 25 harmful = TRUE +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/seedscatter + name = "\improper Melon Seed \"Scattershot\"" + desc = "A weapon for combat exosuits. Shoots a spread of pellets, shaped as seed." + icon_state = "mecha_scatter" + equip_cooldown = 30 + projectile = /obj/item/projectile/bullet/seed + projectiles = 4 + projectile_energy_cost = 55 + projectiles_per_shot = 10 + variance = 20 + harmful = TRUE + /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg name = "\improper Ultra AC 2" desc = "A weapon for combat exosuits. Shoots a rapid, three shot burst." diff --git a/code/modules/projectiles/projectile/bullets/shotgun.dm b/code/modules/projectiles/projectile/bullets/shotgun.dm index 457ec78e9b..c8c4a73b3b 100644 --- a/code/modules/projectiles/projectile/bullets/shotgun.dm +++ b/code/modules/projectiles/projectile/bullets/shotgun.dm @@ -88,8 +88,12 @@ do_sparks(1, TRUE, src) ..() -// Mech Scattershot +// Mech Scattershots /obj/item/projectile/bullet/scattershot damage = 20 stamina = 65 + +/obj/item/projectile/bullet/seed + damage = 4 + stamina = 1 diff --git a/code/modules/research/designs/mecha_designs.dm b/code/modules/research/designs/mecha_designs.dm index cee0dc7413..3ee7d344dc 100644 --- a/code/modules/research/designs/mecha_designs.dm +++ b/code/modules/research/designs/mecha_designs.dm @@ -147,6 +147,16 @@ construction_time = 100 category = list("Exosuit Equipment") +/datum/design/mech_seedscatter + name = "Exosuit Weapon (Melon Seed \"Scattershot\")" + desc = "Allows for the construction of Melon Seed Scattershot." + id = "mech_seedscatter" + build_type = MECHFAB + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/seedscatter + materials = list(MAT_METAL=10000, MAT_GLASS = 10000) + construction_time = 70 + category = list("Exosuit Equipment") + /datum/design/mech_carbine name = "Exosuit Weapon (FNX-99 \"Hades\" Carbine)" desc = "Allows for the construction of FNX-99 \"Hades\" Carbine." diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index 826f8d05b8..28d9f6a202 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -724,6 +724,15 @@ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) export_price = 5000 +/datum/techweb_node/mech_seedscatter + id = "mech_seedscatter" + display_name = "Exosuit Weapon (Melon Seed \"Scattershot\")" + description = "An advanced piece of mech weaponry" + prereq_ids = list("ballistic_weapons") + design_ids = list("mech_seedscatter") + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) + export_price = 5000 + /datum/techweb_node/mech_carbine id = "mech_carbine" display_name = "Exosuit Weapon (FNX-99 \"Hades\" Carbine)" From c50ca750d8a5d13906715f5ded1512fed1c423af Mon Sep 17 00:00:00 2001 From: Trilbyspaceclone <30435998+Trilbyspaceclone@users.noreply.github.com> Date: Thu, 3 Jan 2019 07:39:14 -0500 Subject: [PATCH 082/104] [Ready] Makes the YouTools and Vendomat more useful (#7870) * Fixing updater * Update youtool.dm * Update assist.dm --- code/modules/vending/assist.dm | 23 +++++++++++++++-------- code/modules/vending/youtool.dm | 29 +++++++++++++++-------------- 2 files changed, 30 insertions(+), 22 deletions(-) diff --git a/code/modules/vending/assist.dm b/code/modules/vending/assist.dm index de30109824..89c330789e 100644 --- a/code/modules/vending/assist.dm +++ b/code/modules/vending/assist.dm @@ -1,12 +1,19 @@ /obj/machinery/vending/assist - products = list(/obj/item/assembly/prox_sensor = 5, - /obj/item/assembly/igniter = 3, - /obj/item/assembly/signaler = 4, - /obj/item/wirecutters = 1, - /obj/item/cartridge/signal = 4) - contraband = list(/obj/item/assembly/timer = 2, - /obj/item/assembly/voice = 2, - /obj/item/assembly/health = 2) + products = list(/obj/item/assembly/prox_sensor = 7, + /obj/item/assembly/igniter = 6, + /obj/item/assembly/signaler = 6, + /obj/item/wirecutters = 3, + /obj/item/stock_parts/cell/crap = 6, + /obj/item/cartridge/signal = 6) + contraband = list(/obj/item/assembly/timer = 4, + /obj/item/assembly/voice = 4, + /obj/item/assembly/health = 4, + /obj/item/pressure_plate = 2, + /obj/item/multitool = 2, + /obj/item/stock_parts/cell/upgraded = 2) + premium = list(/obj/item/stock_parts/cell/upgraded/plus = 2, + /obj/item/flashlight/lantern = 2, + /obj/item/beacon = 2) product_ads = "Only the finest!;Have some tools.;The most robust equipment.;The finest gear in space!" armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) resistance_flags = FIRE_PROOF diff --git a/code/modules/vending/youtool.dm b/code/modules/vending/youtool.dm index 495d60a461..ebaad4d715 100644 --- a/code/modules/vending/youtool.dm +++ b/code/modules/vending/youtool.dm @@ -3,19 +3,20 @@ desc = "Tools for tools." icon_state = "tool" icon_deny = "tool-deny" - products = list(/obj/item/stack/cable_coil/random = 10, - /obj/item/crowbar = 5, - /obj/item/weldingtool = 3, - /obj/item/wirecutters = 5, - /obj/item/wrench = 5, - /obj/item/analyzer = 5, - /obj/item/t_scanner = 5, - /obj/item/screwdriver = 5, - /obj/item/flashlight/glowstick = 3, - /obj/item/flashlight/glowstick/red = 3, - /obj/item/flashlight = 5) - contraband = list(/obj/item/weldingtool/hugetank = 2, - /obj/item/clothing/gloves/color/fyellow = 2) - premium = list(/obj/item/clothing/gloves/color/yellow = 1) + products = list(/obj/item/stack/cable_coil/random = 15, + /obj/item/crowbar = 10, + /obj/item/weldingtool = 6, + /obj/item/wirecutters = 10, + /obj/item/wrench = 10, + /obj/item/analyzer = 10, + /obj/item/t_scanner = 10, + /obj/item/screwdriver = 10, + /obj/item/flashlight/glowstick = 6, + /obj/item/flashlight/glowstick/red = 6, + /obj/item/flashlight = 7) + contraband = list(/obj/item/weldingtool/largetank = 4, + /obj/item/clothing/gloves/color/fyellow = 4) + premium = list(/obj/item/clothing/gloves/color/yellow = 2, + /obj/item/weldingtool/hugetank = 2) armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 70) resistance_flags = FIRE_PROOF From a2ba37d6641e78b003321231ad4af9832527634d Mon Sep 17 00:00:00 2001 From: Trilbyspaceclone <30435998+Trilbyspaceclone@users.noreply.github.com> Date: Thu, 3 Jan 2019 07:44:00 -0500 Subject: [PATCH 083/104] Update all_nodes.dm (#7864) --- code/modules/research/techweb/all_nodes.dm | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index 28d9f6a202..af4f1ce3cc 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -43,6 +43,17 @@ description = "Various tools fit for basic mech units" design_ids = list("mech_drill", "mech_mscanner", "mech_extinguisher", "mech_cable_layer") + +/datum/techweb_node/surplus_lims + id = "surplus_lims" + display_name = "Basic Prosthetics" + description = "Basic fragile lims for the impaired." + starting_node = TRUE + prereq_ids = list("biotech") + design_ids = list("basic_l_arm", "basic_r_arm", "basic_r_leg", "basic_l_leg") + export_price = 5000 + + /////////////////////////Biotech///////////////////////// /datum/techweb_node/biotech id = "biotech" @@ -71,22 +82,13 @@ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) export_price = 5000 -/datum/techweb_node/surplus_lims - id = "surplus_lims" - display_name = "Basic Prosthetics" - description = "Basic fragile lims for the impaired." - prereq_ids = list("biotech") - design_ids = list("basic_l_arm", "basic_r_arm", "basic_r_leg", "basic_l_leg") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1000) // You can knock them off with a glass shard... - export_price = 5000 - /datum/techweb_node/advance_lims id = "advance_lims" display_name = "Upgraded Prosthetics" description = "Reinforced prosthetics for the impaired." prereq_ids = list("adv_biotech", "surplus_lims") design_ids = list("adv_l_arm", "adv_r_arm", "adv_r_leg", "adv_l_leg") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1250) export_price = 5000 /////////////////////////Advanced Surgery///////////////////////// From e9ce54e397d3145c849b09858c53812ce565b14c Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Thu, 3 Jan 2019 07:32:39 -0800 Subject: [PATCH 084/104] Update snacks_bread.dm --- code/modules/food_and_drinks/food/snacks_bread.dm | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/code/modules/food_and_drinks/food/snacks_bread.dm b/code/modules/food_and_drinks/food/snacks_bread.dm index 0638bfad25..99e561d338 100644 --- a/code/modules/food_and_drinks/food/snacks_bread.dm +++ b/code/modules/food_and_drinks/food/snacks_bread.dm @@ -185,6 +185,13 @@ icon_state = "" bitesize = 2 +GLOBAL_VAR_INIT(frying_hardmode, TRUE) +GLOBAL_LIST_INIT(frying_bad_chems, list( +"bad_food" = 10, +"clf3" = 2, +"aranesp" = 2 +)) + /obj/item/reagent_containers/food/snacks/deepfryholder/Initialize(mapload, obj/item/fried) . = ..() name = fried.name //We'll determine the other stuff when it's actually removed @@ -210,6 +217,11 @@ else fried.forceMove(src) trash = fried + if(!istype(fried, /obj/item/reagent_containers/food) && GLOB.frying_hardmode && GLOB.frying_bad_chems.len) + var/R = rand(1, GLOB.frying_bad_chems.len) + var/bad_chem = GLOB.frying_bad_chems[R] + var/bad_chem_amount = GLOB.frying_bad_chems[bad_chem] + add_reagent(bad_chem, bad_chem_amount) /obj/item/reagent_containers/food/snacks/deepfryholder/Destroy() if(trash) From bacb74ad470ac30e32450c796d6d9e877d473ab9 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Thu, 3 Jan 2019 07:34:09 -0800 Subject: [PATCH 085/104] Update snacks_bread.dm --- code/modules/food_and_drinks/food/snacks_bread.dm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/code/modules/food_and_drinks/food/snacks_bread.dm b/code/modules/food_and_drinks/food/snacks_bread.dm index 99e561d338..68d5cb8e99 100644 --- a/code/modules/food_and_drinks/food/snacks_bread.dm +++ b/code/modules/food_and_drinks/food/snacks_bread.dm @@ -189,7 +189,10 @@ GLOBAL_VAR_INIT(frying_hardmode, TRUE) GLOBAL_LIST_INIT(frying_bad_chems, list( "bad_food" = 10, "clf3" = 2, -"aranesp" = 2 +"aranesp" = 2, +"blackpowder" = 10, +"phlogiston" = 3, +"cyanide" = 3, )) /obj/item/reagent_containers/food/snacks/deepfryholder/Initialize(mapload, obj/item/fried) From a1836c98afa4a9960451e0b5956ef1c97cf555f5 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Thu, 3 Jan 2019 07:37:04 -0800 Subject: [PATCH 086/104] Update snacks_bread.dm --- code/modules/food_and_drinks/food/snacks_bread.dm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code/modules/food_and_drinks/food/snacks_bread.dm b/code/modules/food_and_drinks/food/snacks_bread.dm index 68d5cb8e99..219c3dedf2 100644 --- a/code/modules/food_and_drinks/food/snacks_bread.dm +++ b/code/modules/food_and_drinks/food/snacks_bread.dm @@ -186,6 +186,7 @@ bitesize = 2 GLOBAL_VAR_INIT(frying_hardmode, TRUE) +GLOBAL_VAR_INIT(frying_bad_chem_add_volume, TRUE) GLOBAL_LIST_INIT(frying_bad_chems, list( "bad_food" = 10, "clf3" = 2, @@ -224,6 +225,8 @@ GLOBAL_LIST_INIT(frying_bad_chems, list( var/R = rand(1, GLOB.frying_bad_chems.len) var/bad_chem = GLOB.frying_bad_chems[R] var/bad_chem_amount = GLOB.frying_bad_chems[bad_chem] + if(GLOB.frying_bad_chem_add_volume) + reagents.maximum_volume += bad_chem_amount add_reagent(bad_chem, bad_chem_amount) /obj/item/reagent_containers/food/snacks/deepfryholder/Destroy() From 6dfd0ab32d05b4e2446dbfa2d43853f53d6f837c Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Thu, 3 Jan 2019 08:10:24 -0800 Subject: [PATCH 087/104] Update playsound.dm --- code/modules/admin/verbs/playsound.dm | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/code/modules/admin/verbs/playsound.dm b/code/modules/admin/verbs/playsound.dm index 97cc991523..72da825e0c 100644 --- a/code/modules/admin/verbs/playsound.dm +++ b/code/modules/admin/verbs/playsound.dm @@ -4,10 +4,12 @@ if(!check_rights(R_SOUNDS)) return - var/freq = 1 var/vol = input(usr, "What volume would you like the sound to play at?",, 100) as null|num if(!vol) return + var/freq = input(usr, "What frequency would you like the sound to play at?",, 1) as null|num + if(!freq) + freq = 1 vol = CLAMP(vol, 1, 100) var/sound/admin_sound = new() @@ -96,13 +98,17 @@ if (data["webpage_url"]) webpage_url = "[title]" + var/freq = input(usr, "What frequency would you like the sound to play at?",, 1) as null|num + if(!freq) + freq = 1 + pitch = freq + var/res = alert(usr, "Show the title of and link to this song to the players?\n[title]",, "No", "Yes", "Cancel") switch(res) if("Yes") to_chat(world, "An admin played: [webpage_url]") if("Cancel") return - SSblackbox.record_feedback("nested tally", "played_url", 1, list("[ckey]", "[web_sound_input]")) log_admin("[key_name(src)] played web sound: [web_sound_input]") message_admins("[key_name(src)] played web sound: [web_sound_input]") From 71cf822138b82f8ba3403c22446082d1086b4e3e Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Thu, 3 Jan 2019 08:19:06 -0800 Subject: [PATCH 088/104] Update snacks_bread.dm --- code/modules/food_and_drinks/food/snacks_bread.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/food_and_drinks/food/snacks_bread.dm b/code/modules/food_and_drinks/food/snacks_bread.dm index 219c3dedf2..0f11fc8ed2 100644 --- a/code/modules/food_and_drinks/food/snacks_bread.dm +++ b/code/modules/food_and_drinks/food/snacks_bread.dm @@ -227,7 +227,7 @@ GLOBAL_LIST_INIT(frying_bad_chems, list( var/bad_chem_amount = GLOB.frying_bad_chems[bad_chem] if(GLOB.frying_bad_chem_add_volume) reagents.maximum_volume += bad_chem_amount - add_reagent(bad_chem, bad_chem_amount) + reagents.add_reagent(bad_chem, bad_chem_amount) /obj/item/reagent_containers/food/snacks/deepfryholder/Destroy() if(trash) From b365db114fceec34130d7dbf7a7b1e4de31885d7 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Thu, 3 Jan 2019 08:32:12 -0800 Subject: [PATCH 089/104] Update food_reagents.dm --- code/modules/reagents/chemistry/reagents/food_reagents.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm index 685b37564a..52b212f8c5 100644 --- a/code/modules/reagents/chemistry/reagents/food_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm @@ -112,7 +112,7 @@ /datum/reagent/consumable/cooking_oil/reaction_obj(obj/O, reac_volume) if(holder && holder.chem_temp >= fry_temperature) - if(isitem(O) && !istype(O, /obj/item/reagent_containers/food/snacks/deepfryholder)) + if(isitem(O) && !istype(O, /obj/item/reagent_containers/food/snacks/deepfryholder) && !(O.resistance_flags & (FIRE_PROOF|INDESTRUCTIBLE))) O.loc.visible_message("[O] rapidly fries as it's splashed with hot oil! Somehow.") var/obj/item/reagent_containers/food/snacks/deepfryholder/F = new(O.drop_location(), O) F.fry(volume) From e6b9c9c441696f1d715aef32ab8c11e78952bcf0 Mon Sep 17 00:00:00 2001 From: Lasshy KorshBot Date: Thu, 3 Jan 2019 10:40:43 -0600 Subject: [PATCH 090/104] Adds a squeak emote (#7871) * Adds a squeak emote Adds a cute squeak for insects * Update cit_emotes.dm * tabbed up last line, changed emote message. * Changed spaces from tabs, fixed compiling issues I don't know why they were spaces, should fix Compiling issues * Fixed tab stuff AGAIN Compiling should work now?? * Made audio file louder It was too quiet * Delete mothsqueak.ogg * Fixed the audio on the .ogg was too quiet * Fixed / at the end and removed if human * fixed indentation stuff again again --- modular_citadel/code/modules/mob/cit_emotes.dm | 17 ++++++++++++++++- modular_citadel/sound/voice/mothsqueak.ogg | Bin 0 -> 11207 bytes 2 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 modular_citadel/sound/voice/mothsqueak.ogg diff --git a/modular_citadel/code/modules/mob/cit_emotes.dm b/modular_citadel/code/modules/mob/cit_emotes.dm index c76b8f2c12..34c44be23f 100644 --- a/modular_citadel/code/modules/mob/cit_emotes.dm +++ b/modular_citadel/code/modules/mob/cit_emotes.dm @@ -194,4 +194,19 @@ user.apply_damage(20, BRUTE, def_zone) if(luck >= 95) user.adjustBrainLoss(100) - . = ..() \ No newline at end of file + . = ..() + + +/datum/emote/living/mothsqueak + key = "msqueak" + key_third_person = "lets out a tiny squeak" + message = "lets out a tiny squeak!" + emote_type = EMOTE_AUDIBLE + mob_type_allowed_typecache = list(/mob/living/carbon) + +/datum/emote/living/mothsqueak/run_emote(mob/living/user, params) + if(user.nextsoundemote >= world.time) + return + user.nextsoundemote = world.time + 7 + playsound(user, 'modular_citadel/sound/voice/mothsqueak.ogg', 50, 1, -1) + . = ..() diff --git a/modular_citadel/sound/voice/mothsqueak.ogg b/modular_citadel/sound/voice/mothsqueak.ogg new file mode 100644 index 0000000000000000000000000000000000000000..c5ac979aed110d71709def15ba74266b5f04891c GIT binary patch literal 11207 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 Date: Fri, 4 Jan 2019 00:42:29 -0800 Subject: [PATCH 091/104] Update tomato.dm --- code/modules/hydroponics/grown/tomato.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/hydroponics/grown/tomato.dm b/code/modules/hydroponics/grown/tomato.dm index 5a44cb78f8..d07f5d4d08 100644 --- a/code/modules/hydroponics/grown/tomato.dm +++ b/code/modules/hydroponics/grown/tomato.dm @@ -136,7 +136,7 @@ spawn(30) if(!QDELETED(src)) - investigate_log(INVESTIGATE_BOTANY, "[key_name(user)] released a killer tomato at [COORD(src)]") + investigate_log("[key_name(user)] released a killer tomato at [COORD(src)]", INVESTIGATE_BOTANY) var/mob/living/simple_animal/hostile/killertomato/K = new /mob/living/simple_animal/hostile/killertomato(get_turf(src.loc)) K.maxHealth += round(seed.endurance / 3) K.melee_damage_lower += round(seed.potency / 10) From 277b589f1fb5536c974a5a743774499a8c90eedf Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Fri, 4 Jan 2019 03:44:47 -0800 Subject: [PATCH 092/104] Update weapon_designs.dm --- code/modules/research/designs/weapon_designs.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/research/designs/weapon_designs.dm b/code/modules/research/designs/weapon_designs.dm index bf503c2653..2402967ff3 100644 --- a/code/modules/research/designs/weapon_designs.dm +++ b/code/modules/research/designs/weapon_designs.dm @@ -294,7 +294,7 @@ departmental_flags = DEPARTMENTAL_FLAG_SECURITY /datum/design/cryostatis_shotgun_dart - name = "Cryostatis Shotgun Dart" + name = "Cryostasis Shotgun Dart" desc = "A shotgun dart designed with similar internals to that of a cryostatis beaker, allowing reagents to not react when inside." id = "shotgundartcryostatis" build_type = PROTOLATHE From 47d0cc7b1ba8e771c8e61b59d9b353c6d1808ae9 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Fri, 4 Jan 2019 22:02:22 -0800 Subject: [PATCH 093/104] Update implant_mindshield.dm --- code/game/objects/items/implants/implant_mindshield.dm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/code/game/objects/items/implants/implant_mindshield.dm b/code/game/objects/items/implants/implant_mindshield.dm index 2f76b0cdc3..2c197eb7ec 100644 --- a/code/game/objects/items/implants/implant_mindshield.dm +++ b/code/game/objects/items/implants/implant_mindshield.dm @@ -29,8 +29,12 @@ if(target.mind.has_antag_datum(/datum/antagonist/rev/head) || target.mind.unconvertable) if(!silent) target.visible_message("[target] seems to resist the implant!", "You feel something interfering with your mental conditioning, but you resist it!") + var/obj/item/implanter/I = loc removed(target, 1) qdel(src) + if(istype(I)) + I.imp = null + I.update_icon() return FALSE var/datum/antagonist/rev/rev = target.mind.has_antag_datum(/datum/antagonist/rev) From 87dee7ff8310cc40e1bf0fc2dee7c814eafa288a Mon Sep 17 00:00:00 2001 From: LetterJay Date: Sat, 5 Jan 2019 11:01:21 -0600 Subject: [PATCH 094/104] mime overalls - donator --- icons/mob/custom_w.dmi | Bin 26662 -> 27560 bytes icons/obj/custom.dmi | Bin 20061 -> 20528 bytes .../code/modules/client/loadout/__donator.dm | 6 ++++++ .../modules/custom_loadout/custom_items.dm | 9 +++++++++ 4 files changed, 15 insertions(+) diff --git a/icons/mob/custom_w.dmi b/icons/mob/custom_w.dmi index a3580bdc42f90926f0a49ff149497e7aab05bd1b..1101f22d2e6b13e6c15e5466b35b2f03a732e5c2 100644 GIT binary patch delta 7337 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 Ppr4wOx?+jEssDcgq9{HS delta 6437 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 ZlQP*#KB9gz_X6ait7V}1LES#$zW_q8m6iYi diff --git a/icons/obj/custom.dmi b/icons/obj/custom.dmi index 1162fcc48fda9d3d6b7ad92272f9b3c73b60967b..a05fbb72ab18dca7d471bbcd8b1e4455ef9578b4 100644 GIT binary patch delta 20298 zcmY&=byQSc)c2hkxwEurXPq_c+?jLd?0fb;`|SAbnM;9`WMOg-}k2GT}|UhG&ISkG$raku)-W+mWq_;|i;p^2E~w3$vfOpMw)> zwZCnesC-0yk>EivGhgHMwmw}y?@IMfqQ*+3{y=ijWL$C$)}5!-rwI0}dpE6n_cw;T zVJAnS96q~lFFcOnxxjY)-P5utNp1;<(pk)1x#I#JUjNjMe?b9<&lxtY)BsVvX%H_N zE(9=|7Z{z(A(S=GCIT#R>S!AD4T0$5mb%k@vN&ZNbW`KykZjE9t9s7NWWy?2hh;bo zoJ4FZfhxs@OxSMwYj-Z6-oNflZa3I5E5kuI<~YRMGZ73Mf%z4`7@h#sTgnWnotb({ zwtI0*mYREgr52p@79aiJb`1}oFIiz5PQ$3ae}VE6Gc_QECFU>_baE2-AR|OO)4UMP z0N(fmh#{-?oEPz85hyIGOu+sgTOlbQ&E~Sj#BW1wa-c$gcG}VIeqUm*x$+!{6~KbsjvuRzKjm`+-!&0P5J5GS zswM6}V3`#1AoyCry%^11t{kx;-;HZZe+M{Hthd9SFs3UI&5bXQUxso;%8ri{ho(1E zUii>g`Fte~Yzggz6Vm(cd{Sm*rXqm5^@ZLaSBjB@v7!m_@Yr*>xb$YS*~Wgq7P&rS zNUv{aW^?zqHr*wNR1`Ey3orFf|LN{y;$e0s;nFG2aRP_QwN!rum|@s|!kCVq z$nCp-+#=<(xX9EZq8}aDwH!FGF30-CWNy7VGgA&Go!%9GzxMiT@P((Obd`@QIXyiY z#`!@9`Zm|8ec!bM)8v;*e_S@-0LY!GatM$PR?(^to__Bx%M&IT^u+gTPJdb_R&@JHTv07Td$Hb4U$PcuBH^hdq3%EJl;7cdSBU4#leW3@Qs4lj`` zAT|vyE7qgYSj5$g4;2PRmT^@UzatqV6Q37$fKE2-#)D)_2&HuPe0eqEuROyvzNlAs zCYXy*XLngUcBM^plLiislIt%kLimED`v zT>u9nRTmkUkI2MpD72+o?+++d#ajM~&-cR&!d|zbE<0F8kr+$8@ARU2oHj_Mt$qmM`1$$6yyO7~uKHty z92ERO{Xf1>yy~u zs3zjlO(~w)<+qE1g$A`>^w4@~@z7)PU{HfKGWVW=){*YGnYue|IlLh}!ak!}2nz67 z=s|&uVpU8KWC&G+Zn$_wq(RXASqTn^k&(*;gXS?Mc|uK=C>2P`hKwus$|1s=zj^;irowX+-c~qN0J$FL~{sUmk+KjWhsqeFRLu@)EYe zDB%2x7QRf4-)()#oS_}XHg!_vR){`54>aMD=w8oJZR(Mw6ymm()7q94C+iv*^3C9_ z!#PAikcDE%Tw#P3*6nBr(+2{S$2 zEz4gkBaSUtc>$-OG;|lwW%PDGvXJ_St^O7=J%n=mQb2m0uZi77_F-o1oH8tkBqEq3 zJm}ycA!*p^(Ej@DUHS1Z8BvV1v^OUNxEKJM10J3uumFP>-LYOfQfvRlgVtsq$+`D{ z&APnES0L^T`Cytfp`F%K$-PwK#_#l4Fox-m#0tO3U=3b*p#&a`gw{W)%}YU8Tp{mpUTbk?hBYzCjfOnBd;R!fhw zr0P61!FkrqOb8zp0ZCX;UWtzRb=3n9E$67?%bi-RK*&sWDzakJU6%7yptz2H7VcBqu1`;3$4HoqYh=<-pJ?CzfO+0&wGOlP;D)nJ2qrTAtXd^hd{HeA?hLh zF&v8w5lJZvKB^x-v?4E(9I<_*)9tc`%wZSkb9KYF9LsZG>P3#cG?rw2x5YwFQK5gm z{#~CW(1`;e6>^RIlkUhOoT-RgX7x?_P0x~=@n-}LT;dv=1u=zbqW=EQhXAZsmzA}* zUj&mxk?IT#<2WvCJSBe7pshMh`q*fxnf*tJp#kFM+1PW9pI?eD_4VD^g5;T8#2-a7aAU`G zwTXlzByycAoh^d7M88H^`JZtVw5%UH-dKrU_()4R^aMZRpT1krWO0zG%|ER4^ifRl zX29AizI4w&hfHc-*N;3fX}9A(`Ziq8{Dzc)&l9jtg~+QhN#JSzvI$aV?bN|eK4x;#6%+^>w<6XaS4Kkzt#$z^7?klBrKgDn?ffNL3bG7zWp>8?aA(44lYubj@PgR3x{+&#~{TvY`fO(pzqALBJ zBd?2Q!#v%aJ+EtfbwyAO^VH)}Dmee+O{yi7 z0azPIAE?ddk(~rWX%M_Qcq)^Cq=sC?eekgp^UVX2JKP3`G>ZFp5i2#6An%odXHuRikEgkE%b67wW#Z)74Ez-!BL)Ucd3K3iK^|DK;db62Xs{ zvG8+IidAOycp^??_s=MMsC3=Ah6sMqrYD+aFWyfLz5XbOGr4rLB4zYMOyq84bzP~N z(tG+O@?hfISBRB0vkTkG(YN|(@=rUMV)tn&6|A5S)|$tiw^J)MxyNm8AIUa-Ha! zfoJAYS&*f{w)^{TGVP#-@|mf6{tH7tKNs(^)$wXppJS?)o6F-cu4Ulmx2H@3Nd%l< z@dQBX+a|vc`aj>)+J0bk?zOpH34pGgY)|Z@pgVK|5({H+MA2N)nd#TGc9;kGLA{MJ zyq&B&S%v=9kjd?hfw(DmqaL3r>!n)>#?Q`2p9C=?4-~!$r{7yn30x&+e@1e^V)bvO zTh~4hNemZD$<#^lwa5Ur?&5>ag5h&TMT}>VM1A$a zoyjL*7^I}6HD0F$5`R9FJ;NYiVb{CpT_TeA)O=yAD= ziTslq6B}!xXJGu~vtxt|fDozwF}Fwha-UcK49Bq@M^u<7L!vKckKLxHd-4a`fd}bi zmBP}K@Ophz_?%f#1wMT?_ei8H1{RiCyyCE}Y4lWG|04oH?l5w`0PKT83Y~I~R*Yet zZ;|)~bb2@VeMCR1c=MbFb-v9OdJY;<9l~T|-Vq;s(9x$8Ss>QUt(;P{!u{1$uqT9m za%I*pA0Sds`sf$yz0}oTI>YJ&V!&~e_D@YUwA(Zc88%)`QLD1q$=#)AgePAgw_PJ^ zo)DWbAu18){*D`5FX4Vmv^;$y1~;ADcNAvd)1u9)`x+rik+R8HjM5xohKRM}c$f>} z4$mjoyGV~B%z>Or?PYy${N0~FY0?f!X8&7SPA;w)17>FC*)R8egKz{th#^^Ud6Z1_ z_ajDU{qJ*EJ5BC=UlY3I&d~b+&aT(gBZ(1oz$h$y%FbrlgqMgA!>Q|LrO5I3F?LEx zV;?N&zpXoA49@L2@wZwAN!v{e0m!r683;1Vb8x-^@kB(LnHlOVOk-=^Hi>qHQT_#- zwqKMd-yygH{KpLuRbT@IpyK)@fYqF5C_-;?7=*hrV&6{nkf{q(n~45ZCOBh%KD-ce zDQ%8}mbi*~OXS;K`+XXqnD;?7HMy-Y&Lrt^y!+Y>q=#lU?W|Fv9z&H@q4OpJ`o%u7aZ5PpO1BiqI>`Q-d5&Qr%L zWlCyAP}Zy?=P=KnAvB}W^9%c;r4108X%_pyz(}+Cry)si!C(cL!?2P~eSQ^nOo$XH z>q~>`i;}}OqK~tyu^!x7w$J{MC>gSvOoKQd>dUZ>8ubSHo#oWy!Dj(JooxS*5bXM1 zVP9SlJ^O!)QoWKMv*s`DRz`NO_Q?x}UFMK*g{`RtPYT?nwM|a{cwaA$<=~r?NKr}c z_^Tf%wS`XB_0!YsVeNc6&Yp=l-H?Wlo<(8;sG~z5EG%pk9X^svw9}cJpnyOie{pe; zuv~ti_nCrfvmcJ^2$eq|lE4&(P4^6pI;+vQlE5nM8s!r2z@OAzuWQh`y%DT5X;uEy z#826F^ldqS6I(=Nzb$}}1wvZt_lk#yjw-~|vnMY70*fLPUiaQ4w)R@uea}GPNSGHu zUb=fh^?&r2f4Y_!CfpbmMWAKh>t%1cOnRcyJ+;3+Z9p_VzDaa_u)V6290Y8_$1&-! zv*8FXlR4iNPYfpBc=nEiD|60T>(3QssLl+8I*;$@PFh%IgEmWMH?212&ktreu!~|I3Y=mdO&lFhnQrf3z%clzW5C1)r?lwy+h@G$kjbBTobEqU)X8I?{@J|~>?yIH z1{9^Yr!)VeRU$cBF`@Tw4O(`_Mb@54bX_Aw4b)qT+Wh^W5F^2dqATo`!ZNk>wPTlp zw|8qLw|`W(RTJG8`Inw`jr*bbRndhq3-ZysX{JRO_&P5#SYbF-AQg#aH*(Jn_**}8 z0t7w!(WbdH=`WmrT_jcAO$B+l%{1sBlNV?__+k)D+gyI33YRN{onW=3>Ah zJKXqyq|yWqKw_BTh$i`*l&I10dxF{3JJ@R|r7i7Cp1h5ibzhT|85>`uQ)$d4BI69D z{vbo5Kjss0B$LA^qo}u`W&1bpg(bh|!9B;6NB-GbBMLIv`Wv_xuh*MG{CkJ4cXJFL zZIolzd6%>>4>#McvtYQnUF)_rl8@p}Z}o3Smq1?ffb7WnhYt(A!Hq$tT1s1E5# zLIBwjVp$SJ_258IpJ+4L3%g;sexXM;ZKHa+cwm$%2DU)N$6TeN*2Dx@e>)pc>og+qDojczxU)eUE$Er*}digWs(wxoMxRIj`)!mmec|fBr8?-w;kj zGh>$wzE69F8~!b~04i zJi4t$8&BKre9IRY1WOt=b;w0X z?nq4&?=KeAe+`-T>7+BtvUQ+V;tqHi0$+z0c4PlCXehIZ@!DQs@IG^x5p!_)NXB8} zJK=lx`=uv9+ZDrR4U^inshfgvQs?46&GC_5yS@6|^R(3LeAXjh>7F4w1Y7COQbDYE zEhPZC@Sw#HDtRHxI=)*F3|3`Anm8YSYnH_NRl;U4ciF>BO01S{o5<(a{X&g6#^sq;oGu_-A#zAK}L9AbEIu1o$%V?naREkA`_EuD#(KVWs!-BT8-_`F`y}OV9 z5l^*mx2GqbcY}Gyx847)u;-Pw#$5^*4yh?#`O-}Z3Y4PiDM|E6URgBXi*wNOk*ldS zEUbc^#Pn1z0o3I_cqUTsZqrpqJI8@D`IrDvdqGWAR-LdHNvf=>dM53(bMiU6>xgZQ z{&IwoJggC~KV8aD*UcR9r|L-Mow7$xNC<_goY~1PBYpRbmOfyj$Ao&#mZR8OR-oJg`PPJ8; zDRq0-zV}%RFOpKH#IVbo*6{i)CtL-FOGv2r@#EuXysyeguCR$CA3Kll zVLD5)$L>?`-&h}=bk2B4)>fL+agS^gB3%3IdCnxI8Nza(KzgIAyKp3L{+bH{?X)L# z78<0B>`ytNAfQMP+Oe>w+OpUnGgzWyOs<{Mk;FpTLV0j_(Mx}ESN$7@I9fKNnxHL2 z+2PWQueJ3ytSpXm9z58}9+0}+@LO-jL`_xvd*9p0QRDL(X3xL?AWP5p{CHSKqv!#dtlfaAZcLR9v~;qa#5jN0$igr~zbXQ^;mbdFp|&@8#uNpvGt< z@9)6%aaVzT^EWIkyn_Rb0K4#oI7w^PEOVbl=PUPDRJU~F7CzBx)dmW!2a3Ik!q}cl zF^dr(gY)T&wl+*AQIU+&5ajzi#c@a=Kw#X3^5pVG&@)@{;GguYV7I zjLo+2*gBE<8;~Eva`=V-6Bv*>r$a|d7~w2A0@Mk_u=!-%MB;Y~gNPXEt57JSVLtf% zZS=swKZN_t;~=z1LJ)(4vbG)$?C&$cg`@>~%Z~I@lnH>qlYI5=wESfw;C#3bkB2Dp za>%`VM+Kl%|nHtDi%!b- zYEt(=_18RQZI4vAQiw4DFZJzH)9%i( z2PK#fZkuIJU2Z7TeRf9q7KI^V?=`dqFy%8wHc_jaVSht$OkPPkpa_Z$>p%aP);oCZ zKZG8`N*dSy-r@m#FtVnco-VQw8@o;EZ=2jBI}&(FmN@{Z>*=8lcIrd@1;_3L4pFxq z^a==~q_8F#@s?8Pf4x6`L}oiaNc2 zHJ`3Dts!pGU%Xzrn>j%8kQ$PmPYQ?N5aS0Lm2?H_kNCgb?QRX|3AT8@|AlR+OA{AJ zyg1cJ`1V$B^sbjCBN#ji#sv@&r_##0wLeb6H#c3lZ+;u7>N#DCe453Pk&y`s4qkLE z;J|+Z|8GMSgB*iTilm8bx%~j;*RSn#Z-6E`&+usMr~U4prqq5m<_o&au!g3|*h7u8 zlKQIUo3i-HCTFfuNvR7n{(wLQb)D??vSUk!foko?`c0-vjsk0wQY+>aDeMNwVKI%gC`C#F}4MnOuV#FW=1C$Is5D% z5c5#KCT`NsRObPsgv3nd39nKb6b_Yezr)X(V$NZiyCietbA*M^dk94RIJ`bT#d*Xd zYqzYNBXdUOH|vg5(s%{+Kq;6cEd5FcLX`@E{dABeRxWS49C$syiAi zo<$-!C+CMlGLfOO9fIcT#&Ujpm>0`ID@KY?YFnY&D6L}%Tg*ccQG78t4eo!w-qCu=(r2_oU3v9O1W?@p!INQvg(>L zZ~KUmLM4NgMC)5x=On8zec}y$^uv@8cL&x6Uo5k}u9zibhI?Y8QxGefZnIkWT>X%M zJ_h@19O$*Zo=*7p)}o~10E7=k_TKyc8A}pqYG#c(*?kxkz9m~2OUEQR!q8k?O!Qp$ z!Qb$m$Gb#VNo}JjU&*gE@Al2f+zIV401qTFp;f^u_2K!URu){zc!4X|viy4brLr;( zW=7Hl#N=?P82^3N@$6vowy0sb#&}t`G%QjXDTM_e4g+C zTIROQ=^+|#3PZrk@qzR-VTDd_?QK1d02_INbTueZ7Ghn$D+aq+2mfbWj4Eh1}d2$;t_J^cPD z+crDWw|EH~G3b9D`La#r4$|#0y!jk?-W-tGKorO}kKc?!q7d|%X>oD>!{T2L2B)^B zoLQw>@gCigy`mz-Vh!>#yGl5mED`;TwV!tJel8|-Z|uPjn__o&YGS0)Uxi?bQ1THu z7C7pA?=X-U3Br8+qWUL45hH&XuR48sNE=ZNkHG>ku(7in8t4>06ZmsJqd*1t5&dUR ziB)|_tv7X@oiakKti0d9_dD?{x$qmh*UA@$HAq?f2#YTs<@Q^|v-Zccm?yg-yhIF22J+CW;E=@`m=1{~I2<84*UYB9weK&egGc&k>gC&a zPLE``{AiQz*IPW9VU=S;d&q#2d6q_OY^D~Sh-5EP>5E#5(^EP1-(!PeUW-@4cw^;e z2QRb*PFqvg|7wCafixsCOfL{`~o*pqEgtTDoeL-ApGnL}K#|mTdRB$o7l~$o^ON za6PrrO@?%}k$!pv9GvDIKO9JxfYHaWQ74FM9UaWps^2uYBfBdnG&J>t6Kgyom8pU_ zt>TI%qnH9iWS<@*`?mFCuk}e2gy}7xL=w}2vGjUj)iIo9Yh7xGs94f1X@8o{1f6*! zK6V~A`Fm-N`}IvGiMaT9=aICdQ*RHB%9UWs&~#%Gs1yt`EJUK2J!CRo^(z*wwez4k z#JiBDB%D#PON&Ge4UM+&I*9NAf}xAG+D{%8PLVf!RXUNFzHUv7a*@zOXT_Td^GZEktshe>R`_X+|eVq6`n^|1cS! zxTPIX5Z(=mTU^}Y{x$I8wi}d>?FEzRrmq{d-g38oOn26JtWyjh8=DjJ-q~2R0Cofb z8>mz0uU~BM-%PiUO-v}{Yss^c$#H(wb9o3w*pAaT90>otcHP{)>i+_7*O24ViO&+D z?+o)2kJ`iy73zaO;=n4lvU%zSTzPPkHr{Z3ufC6&C4gkKtEqV19!AM3vx2X$l}Ml& zEnjuryz3$%4s7eutGqq)SADMlcIk5F?c(+?NhR-R$87p@78fSGCXPTUPh5~1N2Qsw zW8w2Tzd`yJWOG_GF+-C8nYZ(AN5w+kqiAD&&J|*nEt)ao z_o3k`#ZT{-0`C`#bD9L-HiGBL)(MKJ7pfiDq2OYL<00}@9O4^>` zKIQ&^d?iFe(o-G$@%cve=87Hb+uN+-VkkB-1ta@k;@)f|C0h(8G4fHG6Oj8XB}s`n2EqW9M9o>H^`Uu5#+3x+Fp(O)chn{anVV#=zsb%yUL^ zc~*)R1Mcv~FL) zL{cK!yB-|+WR|>TC%^N^Zh#69IVNg#iQ9Q93=PgRivE0Qd%4o8k;eTjqBRz96boz((J11vBIAqkq{ub_RBLl%!>T%#l zJo`I;_1bVNG6Vy-fGwFTC=oCSsIrqAG;@6fCxxTnwBKR}8T_QBgPG$7uS+y7d3D~t z{i>s-_4P;bYWu)YJ~~h)!S4x81M)I55U9*R>}V343#lHif=@IjpMPX`snJ8!iIG6v zn!B8uBzB1RB030`)9;}SmBpF%{sJ|DGmk+B9V?}kbOQc=E|ef6B90?{c#RKC7wS;u zfex5bra(62-*^9t4U3(0oPYl%cd~;T68&tEK$g;<^q#)rp&4T$4z4AJ=nncf4ADN- z%<{ZtH`{}L9EZukmjQ@>|NdcYB#I4_<6-Jn*;3;${r&gP(cb9gs;bmm7I46o_vhaP zH75MUu*y95JiBy`^j8$EJ&W6*=qKLkT?pUOzWNbPa&>(q!Yn_fcW?K?_0|Wm`lM}< zQ$d};5>BqEYSiT@F@!!Rr-7Oge3K6rKiTn0ir74yrDvBg*}rxFqgC)X)Is=Quh&pf zDAPiKNvD6paAeb2^Up_VIQet0v7%=vzjpz%Qy6@6$t3azS6J?=@|s{qPRD*8;^E6x z*5)tIFxsG-w`Vl|=rsxFhjt8RlfelBaWr-Yl++2Nj)p>I4@fZ~Y<@)bR<33w-X_+l z-I?m@W+AuMmDN2egy7!=P4%O5axK5dcCu6~gY(z99ByyCGg`#rA*IhBM~Y%g{deyo z96F6aCp21vb)J3&<4yhhJs%XccwlItvJ)RRdb8X)uk|tkrJl!YA1*80ddDu&;J5c5 zKK!}N`T3KSKBl;5HmTXuPd<|bD=<^x$R3j~1%*-r{=v+`mg-|Q_l%AeGG&EAN73u$}C!L9# zJIce;69Py|N>1Jk4-bn!rRrZ1w(O@{T3m#n@p(s11q5h_bxZ$0q>cTsjSh;3g#<@> zX3w21@&f3QX}ok?i`gI|6}aU3s-mT%&BVu!1NBE3LIVTT4Ye_UzS(@sa`3OPti7iP zU%II&G#U)^hi98M$Mp8TDqx9})zhQ-*V~(uxNnd>#3=p*3q1xsXDeHIr??gxxL{%y z7C^D4BDR~$tMT^*iVs!%waA#w_(QY)es^xLr}|*3oJ^5{YL(KV!(d2S@UMabJhL*Y zsHmvP22a8No`RVyEMv@?l!OETsEQZh8r&9JxbzT_@ufYE{Shj8|avh|; zJh?lvcr9Ef)tQlTDdfIu7WogSCgPHbX;R(iQK)$E?VriF17n*mRKLYzK6b!+iE;h8 z*4A#lJw%(>c_0VaeqT?5TTFoT0ZTRjbE6ja`}gn6!lDk3KFn8K&zANV7bkZDZu&e$ zgvhreUP6F}({$uYQ4Wqo(VB*aQF-7JOX6GjJt1Y#XXX+A?b;^@Tnoscw_7}$3D4cR zbXJFv`fJ|E3;Y6q(@a@4HB{95E1C~wU$IBX6X)uEU;DqhBp+Vrb~_J27PDbKGVMjt;MMJ|!TAWv|-LLEh3hfiVW}=;+|HeOgMv-Z1`spK{i7#JbZOIG_d?alW z#POul2gdJ!SOfTh-W#&CFuOU~nSf(JcH-=1)gTXu;(K}6d?u7Jiz%6a)ms-Av;9~H zQI8nQwYf|h(KR0&DgVc33w~@7oD`!L6{M}Hz>IZ2!FCPU+OkHU`a^pzdNhZ}=h(6$ zm=sUn$>K2K;NT$An`O`$WTv<5dEFI4W_GM8&vo@};$#4{sJASP&YGN2x8q@Iudh|r z{Hdb24+}*sa!RRbySyUEdBdTaDmm5pbvLAIx$G0@>ME>KY}5gQ%*>3xi(I$-QXqig z_IVni!NNkqTXjNmEyyxGtn)MU`lUZ4FeI~~^u@|GK15;qS%X(4RV>8*TBgfr;tM|_ zCd**P=ZHedF^nbmCAwXGR2E%0h z=R|SsW6(y6^C1EFLGVqoxzIFy`l5>Mswp3px{l6z0wub%;6XQ3mg2+pI~j&)U~=i- zF?z{L#qDTSN+@89$QjO=P5{qqio?C9%Ymcnss^9e7z;o{4O{-^u%2u#Fj!1*v#mI5 zGxknNySZa65nu&&+!}jbTD1E3xl_^E{0A(ey|}n~2GSBQ9^4wdtK#WVsSPOT#nzhG z=zuaXE~ByO4m0PTM>j6LT%JUv%~By_WizGc#da6V(f7I@1m)PnhXEXT?mlGa%gfvN z493QQ?A~Hq-*BBoRpiToSd#XWtua%2*;ge-8`NZGI#bhV(HI=XFu9yQ^0=x&N2C>A z&JaX`mg?%5?`JVOI|0*qB!#BnP~2YIng=8nLIR5g27y7SgF_QPoBH@TbFL2WfA}XD z8m((-^D|mLU#qpND})d_&zYcF)i@KVSM*u0$nC{^3bu*7u51_3y9^NYwHwbJxye1` zK8d`^J^ACMcX9c%;$VjDt{=7xaS>XR17-BD_gJN*QeDgcTb^M-R*bv5yFN38T;NFNSt1fVMGW+!M*Nuxu0*C z&=l~!rmxf^% z2W=9pGRJzK4}p{--;}n9Sa)imBPK|z%B>z`BMb$wk3p0k7lgPflD!+!&v@` zg#0z-ZK+QVohxNR1Rbz4@Y{qiMGu`t@hLG@P&H9# zi;gIIhN>R`9UNvm9k39A%g;Uw0&jD2a$*w_5~9-&Dqza}{ZIZ)P0byZJBnh95FsNI z63G8pX^7W1y6?|_dSIxA{(b?x;g5z;egEP0JECpq1v>i~h8}g){y@!StU&wV@X+6A z!8dojiljMW;p@Oq<>C+EEe;0s%udj$*5=ny-9yk}Y2AvjA4nW3F-F6MC-p?u^Q#M23U%R1c`7={( z!LP<66PPl#oPXPiD%TS8l&s%$ubg+ssQ(PLoIihhjrr^Lz%+t-$~%oEM>R#36AKQl zd=rTmyO{fjLZ?49MER*1W}3Jo^y4V_jQJ1vw87WMF;4~aqJY%pD0~ji`1o<~&U_l@9`ZGlz}8yMS?ct?=#BB@Ak-=+ckq;xAB_qr8nwH+K(Lcc&u32 z=OySBdR@N!?k6L2TbG{GuL1)Mp0XnkvpsjpS`;1(b-iyWZ|>izf};tq6RQLB0~kGf zsT9+0348Bm8LwC*tZ}AK0D*n)Z#g}CvSo`;{Dvv2Jlnk6`9qhyS(ckD!?+?5S~EDK zDu>Oqk7W@SgsI|=0ew{$_n#6_VnHJl)Bolhy*bdhd(iBZ^=||DqD|=@J6EKb98!99qkh?c)m}qNzyKM2ea_4S?-^uM71;HeuSFe#A z=x?{ocOv6}1Oy>x8S!ZEpDJp(2zmP?QmSV<&(d0reHW&@f7tfA{*y-wqm) zVG+u=X2>N9*okvp1!9x`*YPft`118@M|ip^I_SOQ=BPo6jzHuDNiWQMS5IO5ZP?c( z&0gcy^ z+VKo<-p$SI7VK+4rNZ;op6FjMmj zbR`_xqsmOIlsNj^-ObF~bitgJm91f*6{Hi=g|hoSot{~f7b<1n5&key%=tsIg|*<1 zuV-x`qtw0+xo%9-2o3{)_vo!)`prWQ2=EjDDh>>}{SXut(^@?+M0E^r&NN)PGU@<4 zJG4l~wJysuT*7`T1%cmqpYQ!d`*4-^3)25Z&RJP=G(Dhudt3T9NEwqsS`FVyqA{Iq zb&b5BUNwTGbgE6t<;mTx->&TS>Ve_%k1wF~6fy_II+Q;(nb1{-z{=Vh8R8k%UUvlP zb@)Rr;N3X7HfE!5pc=d03qr*&2%41$6*$I-ewOmna)Wrf8O0$`NJsDS{e`7h2_82(mZg8LaScA4G?i!Px;Q@1) zH~{a@Mnd4=;0=GHL}`hj)J=)$#^#VN zFN|$R43OxndUK53$1NuvlyowmyFLwjhPN~G&4IrRL=ClH#`(EZ`=gyXQed*i(LCZj zNyMIhs>YFJOe4@oQVNtxe%;X*I(H?BcHshB05vtW0}sjBhAIC0uxLd7A~Az>r0?~a zKR-~?aD;bvS^_S9)iHvYe55llB|uBW;fbailc*?FHaw~|CPNC50>l21Dq%g!ZqVQn zCk#D9l|m-@6R|VsSz@03^pz~72Z()-^y<1@`Q)U58hs^DX&HQg_jFhSszdu9m2q?R z?&jY8ZI6D&L4hziVEd$?}iZPV`;;<+=!Fd05p}HG+Kn8?CxPM1R0jE2=JmA z6j~0=FJ@gre3vT|4_$Q`loiX}D*ajJ?G+FD+HVzi*2BJUK z4K=>$m*{JNxuacA5)u*w3Z22Opd_KA>-B=Qw6uhVM`EN8?B_ANq7&?I)vK;f>^y-p zBbz7%EXLy|%YQpiFN)EFK^&pHEmC?K2#{#V=&IWc+IU=F{1Lu07qS22i0}&x8Ek}9 z13EO24^kh8S)b}vgi3*LC0z@GF9Zby^r9Ztd_liH>|WN?h(-u2yng+<+7{~a1Rh1R z`o~-BJ-|N54|J}kd(DP^8AhWrqWC(nW@9{eWkR~T=;#+(@oThe>LOwfF>+re1w4c&n^K62h%lSS5{#~og&_p~_geHX?~ zO)$)P))XU=!SHBL;t|gsn*8w1VSHTNvh5$Su_S09?Dum3tykq!(faj29h=;hWd2AP zXX9Y7BBmhi0sh)ImqmBwk*QKO1^nm>cwIA7Io$ zbt6%u`I;}#K!Us5eQ{_La=Cb~;q%Ocf3JXE%es*Tp7rC{| z=;MxZ;6;wGNyYu*QphT0%et8NxMGzevC1n2v7@tE9$DDJElIp=YFcslmYUsmY20=u z<@%CEVsd`{Vqsx{$!?ot8bl4fx9Y3EC%}RU(Ga3TuqJ#|ll;K^{QM{0fn6TAHPecN zQoaO(`tf4#$|(#F&wpGP86g)~M>)9>w%~oQmF)5MC!OgLx>5?6cvX#2?qevAK@9@@ ztyA*nrLHbD9v+^5Bb(eYXzOKoi}*gj|Izvc)Wudeka@0f8lN)SPs#(D{}4zh>R z=PV-;@N78~Spcd}l|DpM^bB1+c!c*tr2+p}f109)m1uFyp=@9QL}pbO9N^ z?}sp2IkU{rZLo{-FL=@X+3ouswRV1~8qEArdWwS2*1CgE07KKREEH3hrPKE5~ahQ23!E8PyN@z2v9&p?@t zM2LPmpI)Hbb|-k(>}Hl?%mx5NeEj z4B6sH+lKyEf&Xz${*Pz!Uj>b!nVSjGOSdM`wl$cn=3Cpw$L9P{7>v7HQ&;z26z(Ro z!!l4uC1IQ*XJ-Bw=a5t{$5>~};jW>R8=g_wm8g~~-toz~b>B;L6~Z?{p1izsvqA@+ zJ&-aJN;>Qq`0HyyR;>T%{{@K+cJiyQF<{0QKci=#fu!ij!FK-^=Av(Hx`%{>1OS$X zz}bwAMyn`S2#=q}^=9o=(Ea9boNFCjTOD=F)>Gxu`H1NiTB`cJV>EopXaoKyn< zcxjt^4Z(k>%SkVB)Ba_x`}6E9W%)e!xT0_F$A8JwGJdyte0%y`xG?hRoX18EmOGmV zBYbPo=i4}Um}#A8TDyCCv=654Cjg)q_JU@3e>Pq6=Q#*;^lZi5-4L`Sc4v)%-3Ea9 zv-gq$Z!7(q9e>rQ8kg1X6+!kaIq4;(=Rs#!_*)?k9Xf>Y@bC`(;Y&(N$f!}Hu=ehz zIe!v^gurDrkovWIjeueMd&xl_wDT4qqt{g`J*rclYq$9G&?NSJ0BZqcnD$3m)$)fD z5?CVu(1yTWMu4gH-`p01e=as+{kNfbe5D$nEsm#h3nbUseMGLG#NltAFWriZ6Y>JyR1q%4IEWfB;%-7w>%%*REZ| zs8OSE=+Gh3QAU6f|Fvt^pq%<7`uw<>HA?;V=jJ1_y8?_w)Qu<`-~wNb?Ow` z1Teo3v+XKlz=+=v9)*7{HbNI7#p5gKKiuOh)zF1V@z2F-AUp~vq0e`x5lBr?iS@Y0k4HFT8-X2Oq>p zvv;LGH8h5}yE(v!KPoz!eFxjOVlh^}|2_cV;!{t#Gkdqdh&B$^No;H^ zs;jFl(p4%I!o$OxrKhH*689JZ*I<_i5EUKGz65g2m@zib(d+fd&CNx>*jRuNw@nOD zTvTN9<%h2hk3rh1&2GulnwDO^SX@-()_gzDJ+9dD+R`@w;Hl(rh54~Je}61QfK2!X z-g-~rXfwcEoQyHB)#hig7Jp0e0dwQP7=!j0f&~wj0s!VbT?1*1g!KaEJY55!>3By> zOcoFjfb-|iBQ`b`09ettl-?e!+xGUl`S!*HS{(@V%{SkWrAwCr0G@vOX#hakjT<(X zO4BQ&pML5ofTHlyOD`cSD}T!^R-m}32z~qZMP_Cuat|GHM;3OGd*~1{Gc(b*Z{H3T zztqzc>+);m>+);mD}Jk#ulTJ}9v{3dTDNtbEm}1IJRT3xF){4??G!atRXB7DMc)#K4jn>`jcK!8MbGfCsL6|;P_%X4^cSC3^cpfK zxxM-2TP;k@oo98twSQ|fKpTK`vovRnz!1#=yuNEZ#D)9u=Hy@Dnfn9Yoct^JUwvn> zFD~4V*LRJ_5KYT7=eir?u|Kf-86~FN>xZ2`*5K-o&JVV=)x~GNZ@xAcyCYqLtu_G| zH(r^w8i7y0i9?5eLt^5H7SGQ;lnaW`=i56!xg$hHMd9UFUVlOGv0s`J)6!g?Pg|Hb zLzG#oaVU#U|8mIRkdl((mOLwOl;g;^+c!*J{Di_gFtFM2!0<2}Kbnu@-|t)}^9~z} zL4BOg%Us-y@R=YX&|LVf8G?nNn*-^lZRTCZ&dioHmA?n~{kahZ56(cpZ?`sE|1f+W zfbovp(kYnf(SL0<0m2_YkJ#9u`1Uw(_F-PNKQ^9wt4}8oK~*0O{)gL zdVcbfk`mI-^r5Zk7aNPbygVe2l~c)M6|i@Haz_b1_KWqPBjRrN+ZIfo=4JUTRZie0 z1Hf?P+wB_ydjuP;)8pa?KKj!7jT_o~f94Iw)^UN>Tz~$xuxvJ1lW%sOyT=N2H*DAB zZTAAWBnHsd9OLR%-cfGv{N#>eeb2pn_W}U?1i&-TJmc!@T7}7*p`%7a#>Dh~)WgH$ zQD&dnj*jX*-xc?_6%+()i=V0GnQlWSPGH?cXw5)$cIM8VOCEXT5%S0*j}Q+J51cr0 z0)6}TMSn?22}(*zz`U#f#EBCK3JPMc^Y{0MOeS+WUq{;V&R*B$9tIK!1VpdbQ_OZs zN{UlcB00-7(_Cy((b0^%Z&4n1=N}W(Ykup;dp`=G`OGa2Vm%bt9=G4ThPQ6#53_N8 zS77ekxn#(YA?!XA0K9VL3e3~Zk6*fU3B7ywZhv>)&JOc+_=qnefHR?yJUu&%tK%w_j$P5i9||I9rH zg+f6o6bdT8jcYnH=Hjoas%lgG4842z#-&S_Tv7&S$N0M>2GAO6l?qasj9t5%g9i_i zhkqY_*rK+#uK5K50q(iy9`e&qKe@#fKX~vUiMGnqx;!&y&cs(=eMLr(9_{inFtvYq zc^MiS8rFGucsv>$+!KX`m)5y5A0`d}SPlyYnp}Nz7Md1Yfjx7NpgXqzt6J#!>D{|G z&YwTut|ovjoEh%h8crDibJ2IC5n$*@mw(@!x8HsnXV0E(mflh2xp9N8HTO~`SlIu6=n0QDk|26-2Jz)?ahlZ0!;LNt<^E}bIm=5mW19F#jjSYk(--q^H@vi z*0eR3->s(0#Q+$XD11j7gQTP+l-;;-OUj{AsWt$B%*(Td;|&{JnV-G2cUKg*J%4oO zA-t}_p-~FVpWM2(XZGDK0_OfqKRmNH)At zcNI8?gB}3W?Ptr~Z>>wvl~_LuU_J)GTAc18FdzUscI>bS2r@>%T?SzO@BuM+=H)^F z5R1j;f!0F4KoG;{^AULG7`Z`jAb+z5_372ZZ8$hAu-gF0<#KApiWO}}_#K^}++IeH z9!3rA`oi{AnZ1AkKwTrhy^H5J?!Y}i4_zR{?PUvj;-<&{I`B@OG87C3#m2@4qS0tmJ39_0CF(_OeFRuoUKO*qZVTD#K~Poj(b$IwstRPU z2eY?si-qM?Ti0I;A>eYk005y-2=RCvp-}xBvM!g)w(|&ydR5B-&=}l-u_$U)6Im^T z7r$&Ft7TBDnh1AmI7d5c~#tu zUq@I~5SyAnqx|<>7=U+Z0J7JE*wh5Vs)C#G>$Ze|5CVR`9{`{z3WC9)^=RzW>-YOv z1rW92tpU&&{OOd2O)Z1SxC#KMmJC$(4OB}803b51VpGc?oqy772?0rxV4C&KI1dgE znjQdPnnkNhAfmTxX%aA<(y;dQC&Z>E000lZ{Jd$D8GrmG!m5I`r=35U^`A*Sv9$EP zb*;a@-+JB%005Yqn*%2SiCS}J1+cKZD#EIQO)Uce*3UP2y6CVAn{-M$*3M3{EFUZXWm&fM{fK(inI8d84&-}x zXWw{ty>dAsUAY{wUT+9>-+uK92SVW;vK)GB#?|-fmb&ams5^Q?$Cj0Jj7qCu^$$_~zTk;$k2G00^rJBIBy{??K?zTtUZs z`I^RQtL5?zfO-fF4!#edd4UiSovp0^c$we9yC3*a**CByOlDrzHsO%dkZvT#I$vF09 zp#K90H&JJ`6#%7j9$U87m z58;kLL=MIPAaXDU0Fi?+0Eirn0YKzn3;-erV;KMtIoRLrP)F7H2}pGS0000JiWVvE?(Q7ir4)B}hvM$;?p9p3xWl{m^IhMMBRMG z%2#!GIfyq?@lId${2&^uLi7a!f)qkVTtw9)^E}Jl2g~$*c)P)Op6?eijHu{8i$JJ! zSe_X%B`kFE+^sT$-q3?1Yzfe9q|+7=PVH`9Ae6d|2Mr+>7P3U)S5kBY%3lg=R2iF3 zZ!Bq(#UML3OsE^b&cjBwn~8~sv{m5k{NW|hlepK0vmkfplYOO!155Y8EI))JWt?DFv})R$kZ!V`R+IvcO6=3^a%RHy0n+rf(ihP=CZE}Kt-BZUxXHHzrq<&xH9ca*zkd1=X2D%p!& zU=2DphdDqPUP`W^V-e~ zwr_`F!LVmfP1o9v2l~m$2{6&+$Vmd+vgrF zdPt9|&Cd_bB^Am!s^M#)JTz8*f4%zKnDrdfNGq)A@zKT}Q>8HNDIYOtEVdsj!|^o> zdoN@vUm{ApeKQu2Eh4vmM1_z%$BXT-AN~DR&%4XeFrW}sR=7$%Peo=CmNyG7V={Kq zY}l$ws$wx$y+Wx%4HaYULd8qOFQT~~O4`uS`=k+C=(KHnX=svp7ZEP3TIo&4t73D0 z{15sLw{;5*66l@e-i%|3`^^xWnYy(cnz2@PZX~ z#rA5zq*+PzRG+flpQuc)HuVh*ClzFTj6~_%0)j}% zuv6-4t zi&P5KD`rlRJFeE6Rn;{AliyXAfcB=i4{Z{Vz6d%W*xnXatwG=NdLhw!>3XnVUpk#j z;=i2{gP6z`AoO3>^NrvGwM`dz+w4MSi76Owke1V(p$q8;l$HfrcJ~95@Tw7w7HUxC zqstUNH;j$6L<^^-IXp!4xq2UPcgy-=T9{Bd)nb`GYT;^K-O@QQQrx!UaH+>Gz9%**);>wf78Kg4>t#o05ZzfCZRGL_= zQb*bEtnG@jS5ei-D{k7nP9&#n$V0w!R8o?k4_765Aq^c6dMGO6)2Kdt=LL|L6-e?d zu_*?rS74i7jpo#JK7UrPFn?GXfadiU%2Ft-UX!*pC2ce>&t-(LEzKrqgw^xIw9d^Q zi?*&ip_}!+*I%%rbH%iSruZ3bP}=c}?QCkW??3H9M!h;(v$U+#Za`|^ zRIsfIsh}>|J+c=^FZ6+d!NZV9b#X=1_i4iI-16V7HhP}OTUgSnTUc;h&WhrD``$!S zYW@=7D=b`bLg;=0y`urmXDyTOwj9hV>}bpj zx}ND}Ak>yIpJIreUNvYKalshWY5b^yD^LnD-Qr&egpA}^sniO##9vsfPy%jwPt&@K z^fbb>it@X(6n`npZCYY4?z+J!`-{Eg0p(I?MeUB^krlasR|+YBCjPoi}ZiKc`EhoNCF*uGURJyUTMfZufl zcw%~l%T7e@eRz00w?B(xRQHp`(<4C zyJh%SkA!QH2)p_c4fwasNoFZ4`Zi{HRY36O>g6_xBjo{$D^>3XjUs6T*1Fhur)A|0 z1(D36Ra&$J9yEd(lS@}3Q%}v_I&2$cqld_lKaAlQs?l?z#SGSmBdRVRK6`cIM16@| zk}*2nq=w2;5HmGJ@#PWU@ESmALekITJSB< zILzC}d#656h<7Qc1QV7K?Hh5c%*sm^W#3+WM#noq51y*QTvRDU0si{^f-*iNUELLf zSMzpwvS0?be90kdwaz{v|0ej`ISLlG%?9=kdccjB#*Xa^1OLtha}Whq)n;?tTCmA$ zO;^ZskCzQ6N8|FAxNRe`YLaS{pMx(P$AQb;N=L zfPQG<)i7(6%bPLrQS-XzP5``CBJ_dpw9to7%6r+Ps0ZuA=8O66!GU7L?CkD}4W|n) zLsAll&+D#YsVeP)Rpb88jLD&4lJ|kedB2d^Qt-49NfU{MopsRV{c(QBKSus*xt+j% z&7QnRe$B{mW2$oxY{5GeKi_#$V>mScWpEb9;cKs!W9#ZAijYcq5|uS#C84|`J7^L( zFesI)tStFl-&BsNo zRpXkn_^&m%MX-%z`ze_yo3;QZ(v z-=c9<<)ik*uwS=t{45FJM9>d3iAo;55rrgeU3*c8it*_@z}7!lGx8o?820uGY#}{c zE+PbC4XQ3I88hRpq`8LviRx!2cx&-1j8}A9GHzb~viGBGL5E9pdi{|0^z?MKy#yvk zGH8;~XrYY7Y5}kD^d6;M*czLZG-5|+{GNq%u$k%MvCpsFJTnT&Gg7xK6SJ|cibFs# z?Le~u(KESwblnS1Q~%LoP_IbZ&5h|D;Lsq6`htRj84Gsgx*SqgVa3#(CFM`^M{c0|B_0wbQ6(MMN?MeM5mOOt|YqZz1P5dvfLv1JenFc&=@}!GQ|61fV>% zhm=pu=1Clm2C{^XhOAVyBJtw^qi)Em->5NO!_M&hg8>ub{Vhi*0)nspdgcrTJPYCp zlH>HuUYxIYGoTv>q2O^?A!}iiHS>FmylQ#|k_(4$miZoih`-4L)@uArOaLJJYIkEe zq&FMKw~psk+j)aci3LeZ<3b_(H99bmZ~~P%qT#Km&YksD-Y8VRzb!{*f;oMI_))qn z_$2Rd8bS9t>C^m%Q!N!ND8C9yBsha5VvV-PQWxEEz33a%dBDgXl2sG1RH>QYOWK)q zeVAcSYjg|MU19lJfGPg-1Te?3tKf{Nc}fdeFE9MF{5sipkwkU12+`o+9r8!fg8M8f z_x=Mb3H?tPi}eycOL*~Kdx5+C>H3*)NTsC-Rlk;Fgw^AkrRzh8P##eYWyRv{}^akFZoQ2Vviaqae*vhw>mB1Ti~ z_T2z~YQ)f;ze~?sD6ghC)fxnjkGB{mPn2tOAw%2Bh zFfZkr@mAgSvD7!#6nvy3*>RApEpDF-jmw}#`TX>xtg9Q7lf$l8+M%bbdvOODm{+ze zH$6(`+~bckTzK@icJRc*K5AxnGu?LH=7R>i6y|Yjuor^=^UhKrd_-E4_}cN`R}11* zrYC9^XJeoc#h7aawD*!irw<|J95iTTso~Mpqv_+n|3mNL=H_PYHMj}`7k5~@XCpHc z$I>1jd0=qRac|(0eyZDyPB<$Ctc=I?9xZVrw3o9V`(T%Mhlyr z5vGvXvGbbGdA+;C!x6~I$vwsmEb2xqtFn%eLb(8X3K+aHD7A(`HU7`JTt`wr&fTMX z4J?%N$U)8$9$R*a_LKcjV`q(_^qfb7%j^#xq@KL4bmNC@>Zo=>sIaNLR*A*|$u|W7 ze<6JaL+tc%6rFoVUwE%QCOb{dEyw#uiRU!H6f3K$F6@5B#XZ7&>5mtuK~nzuN2jY% z)C?ffIgv!)Qx|)^hrT1yo7sGtUE3FJM$7hQIzmk6^LjYkbl<*k=>l*4MceP!tRWvC z_v0YbgG;g+VPgzUbacKrGvI8U?o1DDZ|9svMR|@JI3&V$D&x<0e9GsrM_^XirWyKJ zY*`{+vHKeBJdO4=yrO&4pc{UlR|fA~pMNQGMmnxEK1Qkl}_k))DO;o ze}DJc0Zni083`hwm6Vs8Qp;)jkOYVAgD#NS!Bg4U+~Jnu;v8XHq_$~~H!iZ%1mb=) zzfgKj>&*FhV@`eQ8WJ@FPE>)}f~L@Q(HWTQ`Zum^ zpC3x0$-f+ip~tRo%))GdELlXc8jDi@r(UX%^lOu14FZC}<0+j&yClfz;ipxvKwr)9 zOT@YPn<W#jeIPj5?WuvvB3Z7H$om{Y@sG;_{Q9>ujY z7146a|%LNZ!LY?W$_S}Ept@4Qj$V>ZVj+!C{My5X^Uy&;19k4`LRoqv;&8<4lwr^|)$pD(MYA7B zOVc7V=#;RcYau$d2BF#OBYhR}i@T^Ek9u5Yi8~2*cmLQhfixe%3Rpx0zLw z9SR27Fxwo?c~w||>ufTAh+D{HC~!ZA42F37s~?y34-g-EbMLM_)n~c{UGm>!VWE}o z;Dlh`ePr`JGy@veFp@=?Ut9GdeBmjbK~>F;wL40|HLXo3cZGxN@!=#B1Jb_-fZ{=VO2z&F-e9o;z;q|#7E>{y zY+~szdp4tUb>kb22-tXB5A)Xf(1@cm#8JpxDWsd4tLZwe&(QC9Kg3~5Va&eXCVu$0 zY4{(Nj+}&@{_{PbT=%V)Cm-C^g8{G)R%HF*QlU{b(jH;u$Kh0Wk~PzELN*?gnfd|J zfmAMF1$CdU|1avMz@P@DT`;LLOl}76E}TPMG~XDH>srM+XNyG<&gv}Z^1Gkjt4|i* z<9ytN_c=)P-k)tR^6X>uw(&;uYP4d5_s(r;^5;|)3BR`2}NO=4r^cyT|s)^7_bSy3Fx^}V)sFS%+iR--UZ+qJ+GCKYrjF)@luO5km`8$pv4HHT8fRzF6>ew3U>(gGJ>t1Cu`F95EE&ajx%z}k8 zwUx1o<*wUTA$~?AL2mc*RCLT3S@dHr9|Ut**tw6^Urf_JgKEl{Pusp9RDvp#4}@K0 z?EJx))Hj}XMeb5eH1zf0y)#B8uiC)6`*#cSKSwnr)Ki|O6i!|yK=7LBy4@#cEe^GF zP|8%SMz#aOblR?_qEjjFJTI z&Ig| z!hV)no>EJ3`dHl`)hy(q{qmR+g6x3ebLuQ5RS0?q$eSv*Glwg=duY5u@weM3g4sm6 z*wU14$NM0#^sJmRVD&r@jir+CB85h*$Nt$`tpw%~q?Uu&4V<$m+cP^Hj$i~rL66e% zOSrJ_e;I%p6`Z4B-Cph%#AOfE_+}28>l1}qxkXS+wlMY9ZHWd~ zC1Q4pw0#pcIdMp*uYZI?3nL8WWDE*xW>m+G?<)fd0z{Q9$v#2<#*bf% z6W#^*sC4Z10z8{7yEb33AB5gXn+05IE75z10y05U7v)wl3bpP?w#Cf#IyD_(>Cy(bhkirKRhk4Coal|94nz@%tLN$5RcO1jXT%8q) zi0W4E&e7|GaS09rn}vif7i{_sNOxh$!QaL3b|Gp=xH9>-pPi&X&CI4wL;vE>`4ZW7 z28+ogOKdW8X12Jz9_sgeLJh6a{gHP${op%Lq;X+(c~VDV`n-)OW>CT*qFSg zQaJoz&C8D^LA%^{Z4gQ+t|Viyyci&EUevV@DSdh2X z^eAr0<<=F(s?(~1frCLO!G+f->^pqRt6TPk*U1&JlJ=AVKO`9S*S|tCW^yb0JP8Q&?`Qv2;?Uvuf`$Ou6QlK@ zVAA)%ZEaf^cq}D!=-cjue#$}(=tnMum4ZOizJ0FiLP#&HJ0@h0;?%`RqKgE%W#1*!ndt#5pj}&81 z>(IECzfSHqiE3_{u!AR1J>mMlgIf*~ATZuj#{&0UL|%<)AwJdUO@hC}_=6!t)mN_+ zgyQ=8RD?fc_5h)p{f|$*5ex(Fr>gN3lTRK`ulEjgFiGR?PPQdFgr^nPBqNhZYO(2x z{)wG0Jin6HC}C{h_(8RHo4n2UAMUq$cqnJfAK05VL^o-m#*WAI#NK|+?If~^$M*u+ ze5P3?b*}WM=FK78ZJS+1zy}@MirtMu-|tRH_C|q~5}?gq#b5qh{u0scQy28Ro|WB? zLqc0{lK=w)SISirpI5fU&2PIaK{D1;D(I|kH!3I_!-8{j8_b#EDhax&G9!%wZt`25 z+7S6=}q+W18AC<`R@pH%L5XQy}0p)*gDj<@?e0HBz$SK75 z{_HvdYy*7}n1k4^+C+PNFZWy<&xaNe>I=5E>+#`y zY}8D+yDJzD9rk#d5AG_mw~Bvq!s)Bxdd=QkV&MQS`rel&6Q7t)79FP5leD5>wur|g!en6 zXk$!YdH!t06Xu!`VXnR~Pmwxb9a_ggY5cc~!(mf2nvhhKJ!=FOjoQU{zxzmg?mwO# z1;`#_m#0a(#{Ws@Y!sl`5!S*R^8KW`yZ1euc&E&vW3Z#98zCW=Fde-87 z1Cp?hU}j}a(PKkwf#B=y{2uQ)XMYc1GGa;B)tyF!PDv1_M)O+TKgwAfidj(10b70a{l46V5ii}&Sru-A>%ByUSQbj)!AbK3MB$**qIC)g5$O0RMXR159 z<+!aizJ$qVY${p*E?7Na||3D|EfEYyX2ga7y3 zv{_gP6tR$UhCXnSP+Pg=dQA6h^_4LL_as8HMn3x81)fhnrtfaIu_WCYB@LgfH*I4_ zJdb#;^2y>0Ll&Hx^oDQrlaw{_W#r{i)OGc*6%i9BWcLR5Ty}fq&?4PGc8Hj0yoGsQ z>8q2*g7Z+IUex?=zac5yM~Be`=`upM9Y87qt3nw0YBA(rwstPuqCG^dGKZV@62`sY z=TwN!rVfO`>)d}v2ji`wb!2~BhFX6#mF$i4I$ZNAr`&nCfNG=kJ>O7V?|a|Cv8et* zicoyJbUxf04MKPZ&#yUi^+vx{RPfW>SOypBr(W^J!jL6EN7JjXi#Bifcn3xAFVuPf zKAVM~3kI;NIaSZ3cNm&SVf`%eGx`Vd%Xk%T38mtf6{g(}sMj~Yv55)(Gud~zjoV+f z$Gz}_Gc(fUP~^fk^y%94IA*>cT$-lCd3e!WcK#1kyD`6I3=PY~RMn(+O&x7%1{>$x zN^xSBMICKx_rDzNcbr0+ngm!1exW7?%9H=#fCuw*C-F>v-+^dfMh!m4Q32ZasK;5% zT;7wp!bO9Iwo(~K5HjTZi>Rn=&~NbW?2G=munC5wvG)Y^@IBvp^QO`5NyhvX>k~g8wG#a*iaJ`pf-QTvP%WENU2z z=`4hBkn#U-!Q$@^@ftm+|J~H|>%qanu?sl8z&N285u#g@(Bq%(0H8hrT3{pOV3i2h zx&G~O9+B}_W~is$O2yu_3kd3=4O`1)Eco9e(NJHFx*wOKpz~e{8u%W2^{!(xRFiVa zaWA_t>H!TNg5HAq&JN45gTUER7Z)a}`$vN{BVjz(P2EAtT^8HZ@3^tRu?78)S0ry6 z@{%o{!5XF$^YNVD#Z%i?C?9?{?1at9wVSUDB<~Llr*#;ZMAIjIffTrRiuj3sPceAW ze%q1}B*7%(eD8nHraz*_CGT?TZd*(Ae>UHDid7%li#WFZx>M-D%L52Uj*xPsN*43y zPfANmN$KgMG03h)Cb4N9*yp^1zymUDCo)T~uhqzMe;v(!o29o-NRNp_=COU}Ef>D? zm-mr>N^pwv<>|lKY(;xf7i=&;M>Gi+8}IXb5{f_Z`KrBMNpf`5&CAMoRrItv^wCw> zyoRa&Jw2$qx=MU~0z9dYKjiQ^I1VOSjghUnV2t@2E*@_&cnf^z*ynD4gb=bFPR&@{ zy=*;!tY3aG22_;vUgccM=w5r+Z&ZCEx{~|tKo5JxB}ZZ~Sp`T|spQRCq&_~|NI~=a z%m1NRJMFx;0Z+A0YW`!&4Lm2CS;&HF;t~>M+rBAcCMGo3K!tQz4SpEnBN(9QnuMkx z|69w*Ek0KeRbr|59JyUWtDe;795DRM)W|Rg-=H zOsxNR|7WBgjEC`10p6XL=m$@e%wsD(|Bs0>K56rQ#WdS>v~b@SR0ofC3MtB2Y@B3P zE0f4t+ZRYcdCSgEN6OYe7eT2Pws^XQ1swqrxfimqypgO?tLi>#-W>7jhU*ung@Lk` z)!4ee-Q!`#kEaqeD7Bt6SL^MYY&xesFlzd8K56w;N6Fv;t}Fkposn6nx>}|3MVlI( zqf^Hz8YoqZ6u2u`sCQxEoGs-}R=do5i~C*u?{~nGSCieiQD2ezLCY!68aMgs$luNWzhY(fJ0$v>Em}p!>h7TXY4Cif3Q1FC%+dH4now##ABhB zEC`UYVn5w7M~s?YJGCw1bN}cdDuuC;&YpJng_))RN5WbL!M#BM!Ju+$0`oT;!qi{w z%Ih)@K}jT!P#H`QqFwD6dr^PWG4hR9inS>=ICR!BLOYM;_!$m2wq0_9893cE{4~um zVb-vpGh)K}ty3S%Cz8Gk#YJ@hJ1w{uFvYl+hD@I{yNaMD2(zIA>wk7g zncv@3BW~e0LOInn@^%9U)1QFScbAOrd{rowwKL}_AnRYnD(a7|`$5Q$>)AI9h+dQI z7>Vp$VUsIv?jh0re$2*$%OMUUs*ZC+>iLK8E2RCIEMY|x!z^_f$q8Z255;1>PzFyI zQPbN80rB5sM($K6v)Ifb@eHtRm}djJ;@U0K_Ayqx_xsNw8#QWp=3rT=2Y?yMI zYIotZQ>SLLA%UgQ7fUYV(@(+AB*&XzsK;c})7J|J*(8bKhN=Pr>K}XL(H>pO2=`rY?xLP?L6JxCmVpM<0f{HO82Vt8kqBmWB%v zvFF)(M^RBGXA2NUmFdKe9TU%WOMKxk5<@$t@0zy2+L_AYi-?GT+_?%R>pO56#H4K* zCvTvP{z}zQJ79u?Q^gs9(cjzA;@g{w(|%8wAh3HL)$xN5k(<`=^NhnxK`|mOILV^x zu(9_?@pln)7?`{hU#!{VPuN&GhViSEsMbpz?cjD8wE-x_!v6E#89rgH6kN~sjupzW zD7q%6vCfPKI-O&}HR21zf7S^yi2~bAW|njs)s#$3Xv#KT+v^0eal)S@uysoK;Th96 zk3UUD$?svF{Q3bk{RV%Cma^n5Yw#31bg?^I9i@yaVXnW>s^pSn8OdF%`HvetM$TTA zy<`)e-4(dAiiOg+KY=Fov1N^@r_SWECvJDUfZ9=H_ZkVU{lTA}qgdYFs@y{Ah{|(N z`vYe?=Q7}0ad!wg)zu6B$#Zy@)uU`z=dRommE|7Q0_)I<8iO~i?5rl>tzkE1(ctuy z&^82h+~4>4mW-P__4>NF%ll-m2nHTLAvyVw1{xTHftRCzIXdzN`jA6z;v~!xJZ5c1 zwijBMN?@EK4PR}U83{PE0!73^oewPvMmULJwTHr9uf!Q2d-eM+-7}Yy@mOTGnw-NG za*P^mA1pNfLxtgwvj_dN#la90?fAQ=XX}hZ*E+sR3-h;W$nMmoc{mt3D4Uq}`VyW2 z;8A5LER#1LsqSCO>C#}hrq)u1j}xKYzPkPl-K5zrSoWE>o9+`f|NL0vkOJorYIZQ> zzMK8miO-FkzrC61g&_7rU3{_*jbON4$(PB7>1%08c%RhZFdrs6?`^POLQYXaFKHX;?1mmTkHq;A1RJJHONxO+S=r^wSS#=&Q(g z^h&$bA8U(;QA?j-ULgbwAn1h|cHSon7?B*-{#fn_^qj9Y;B#1E1;L}a{ejK~J70{4 zW9tmhe-_JUQ29OXhD9P^Z{+jCmn+JiP11q1!fOgI?lO&JEXLiX^Py=xkuWx&jCXJ3Lg_Xh$Iv6><*cUUMSpU7d^ zsG-)YP9{^}r>r|pa>H?EvoR3Zrs5JH%#2cSM-d~X154~8bMqLo(bmRmWo@lorV3tx zDKZu0LP%%VScLsW5&8U!jyw@oLupkY`x0BQ2)QLuj-PkCYB?Uv@KRx3KR60oUS3SB z`0eAHN1(I5($U-2DblIDdKyjybi@uk=RbtyUvghtRULmhu};*qBmp_Z50V{$qV5z( z%mD_RwV^T-lqpWAD&nD@5!&GRmHhx6jSCn4;nzNq$dRH$a?i2f4kMJuR8Ylwx_hW#Iq z3q>RZHdY&kgg=0YxEcOm{EM3Edn&0yDs$fW5Ua`>BsLa7Dzjl=i$Sl?@bgd%q3_nD zJUAO3>i5oN$Bn}9PpP}R?3kMqMp=aN+?`;_g1nB7%$*&B@4C#D#o*>b;NXz)ApBQt zaMm#MxW>c(Lq{+&YWbz6mH}hzK-@k;=^Hd{=FN8?hh6y#vk46ZPrG}aUB5<^dTfiA zj`j$#(vS@&5*66;NR-Z6{H!$)4BQduK1hZ*nnUg_fXRxd6WVa_oi`3=@;Hk(YQ-#C*Dm%qK_@`2sOX>s?MGy?E4xSq zL&G8OO!0wiRG?|29CrIc!t>c#j>eg~qnoXyb(8B~C7Q#us@%c{)+f@~q`njKr?xzL zfTP``BO~YsgJAUl7w6#6?$dnJqN9;n0A^+aLIpN zq@<+$P|^7=ZbC^AGgK!oE~x@8fz6hp#N%G2qmh9DX)hTWCDm8Mx}RUBjTg(+L^Z;h z!Q$3wv`Qisa*i4lHB$Ku27!Tty9QU#8xNxI(plGxU7u=mnQ~m$bh0(?r0pBQT!qMF zVA_A|wQ+e)Hby_W<&7l)CJt>pH4~gS@;ETYOuMYB!8=WTTVZrnaVaV9s?b0E&16>c zR9E{j*xRsj1qQgdxCP5+Wfc|s7tPx^hhSYeb@^|kenLZoH?VoqtDbBuc<3YTtbfyG zNr9T{!2J64E4R0C#-!xWpQ*+OZ+XiKq@R#kCz zb+v@WInrMT?UH%JhE-`9`J&?DP!TCE=wIp9)RR#Uou^z65oPHP!}srAmi`Jy=s$3@ zZuUE{L!l;YAA8}sg3};irQ)Dw_`XHtK-(ypQNGu*%g$?OdB9;(eMc91IcF1myZs@I zC{NC(WeokOKz%?9}XR3k2MT`B=NKS9Ey1MNfY)a3j&n z9!Ld`tqimmS@nIZUxuhcS|IE&!!hm=M8Z3er$j9cU~$=l8i9q~r`X%PK2O1y{f$!tC#Se}ARs%ZSUTn>lp> zD;Y0=oN0}FTP{S!;uyHbMn>j$7isB|i{_!u(NUPNU}pPuPIW3_S*!AXq_qn-`*bVJ zMy-o~eqd!N#0`J7T%Z99DL23G?A`=m8QrQK(VH*)-ZJl%j*v8ardPw`iW11@r-aC) zAt?#*Ut59e{NrpU7-MJGeyu7)+T`c8$Ujw7M3t4}DKe2zkSO^1zbIq1-YscMC}V*& zk(!+z8KQHQ9t#^=Sw&^;(p9&pqcS=&GLmZ7M8yHr$Ee#m^6%`Yqr?!cse^wt5p_nUe8|8%Zc3djfY zhG#9!BhTNTvaVYeNXBzoVexi?hg|kSQ-k^JiEHfJmdXB54EW$cmRW-)c-Ll+fQnkI zm?M})i|O_lRc3J?XT?qcd_qAg(EoT(oiuyC11Vbk#FH$j+q~f~YCH=L3F8x;0UPzc zzJBd5`wTCWW!2Ti`T0=bv~cn&I(`FdPH@^MHa51ZM!OJCc)Jg)_#jdcUBxnyDQMvnxZtDp4qb-40v^$s zo9!d3ol(nyfgTJrBXyg6-$s=c&S`niK5gO{fIHC;<)CvGg~k2n&z~vDBDs!BTT5o3 zi#eafB;_AJ#N_4WQ&tl%T<_TQ?=oHnR(VvEDL8p!f$~#Xqk?^i)GXs$t#*BH7}zjw z{%jpMm{BA+Sob*0<7fmvY_?J2+6v2>&qK=-IYQf41|*)h%60BJg29a{aQ9y&3&45y z%w7*C{Sx4$H%^U%6tGOg%((2Azy zXh}+j0;TE|pHM&LfmJN<)kiXpKtjY%5Ij!6qX>M|$yXgU{zYHw?DR_#WBmgX5*j$0 zF?Z3*R}Zzky4vjh^(p_gA7llh-nV&(mm^H5$s-JaZjPAFt>bB*32S#W&Q^4=? ziN~Mb8j|8qr;HN3Q!1_M>s3ht)nCqZi;Z7rh;yqNBA7`2H%9*j#)4Y8O<h*dy69tGgRx0F(5Nk{J-$2{r}0LETVbB){0)B8ekTg;&JhCt6buvgnUH9F>&=^& z(;;An|BI_6My_ba>qV=1@M*f06RLTG?=aec_PS;TkyDd+Q z#e+tA-`j4zH_@(FuLN#ibvTGHXQ!1;w()pQlNE$#j_;Q(mz!!wRR{+p@7f{cCmK2; zuL1V)%}0{5&F6Atug2*n9~lH3Gxl!7co^cF zz!oVH$o2)3AoP`AMJ%C}?BGDUALwzx6z#CrKa{rJ_bS90E7=+xO`yhSGeh?D^dw%r zjfB5-wLO|8QN+Zdo|HYqEiY;NvqUDkiuoLJN|eOX_0NCuKg^$BWSinRkg>NH3rk9( zz|Oe9*ApZ{FbNpoWL3k@dOq=B5+3)z%Dfh(J;+Ia|NBls-Z~r`{|iW!zN|Cme>rd1 z1Me63vZz_gr3DvOJF^(>Iyt_~KZczL^k+FaPzhUt^-7F}OLLv?czbuRnb_ znemO=H$6BQMtqhlPVD}E@(Ij~3B4;IIi~PwW_gd#VaFfg-%5wM$MaMX|L-f@cZc!q zFQWAPT9@dD6!<`VZ2OrI_ZBF~p9uZ^=6wm7yK{S@o{}G0X9#M2u|tO; z_WX+hK9B?!=xjFtfNk^O5`#9cYZVpQafj!PxPKCzM$@-q&zr*tum=mPtvp_Ulr(o# z)x=-S0GNzRpsq$nK=|+2#(kyrP5J|jiKFd$Q;dDr6P%`hoWMOE@OGx}d0sc{U%YoK z`7`}j>WF~*w!Eq;mhn*ZE)peL>S`nx0a#a70`1dW4 zPan8TB-gGFbl3U^%^ENW38Q*R)r4@HS#g8;g*pd~$e5U>mo-nFSlQTMHFXLkW1PY- zYk)U8e`D{3Qe~UM4j5kX)$#;JBO^IbPt04j&d4H{033Tps%3e&J-0BQ&e6aSzb=t*WXWMWUX*{wU37aXJl;5<8rK| zVNxYm_mf`K%!~@6Kq`)kjSZN`z=0aE+{*utNZlKisHV;){@jU+vx&Y9X%Us_i8Q^2 zoRk#mro%S~I7;e-q$G)F?u1{0Q_)=K&HtkaAU4uI5Y=!y z-!Lr*ZSeMd_aCX?LCuAc^L|pI?IERa)Uf(r<~Xfv`2|4B$Vf#?JGP5bke@Fd9w$|$ z?yibZPz#!(g=->;wieSNK!c%-7DlI}B>n4FxQLU!Cb zfLBruJRqUONK)|DD1u!tKN`DimjcJK9l!#m|5@uloFcpD%_g{IY@GF#mNt^jTq|}A z*#Ydo3v-9@QAhF3GXnen?}Jmo8kx#s%$zYP==rZ|mFt<~0%Kq9g_VVc#e$tcxnMRN z{1)rhGv_s3y==!eFqT9I`&5iF&A)lD2gu3DV9?Uhl~q>Su;e>v--7p^;IjZV%l-=8 zZjrU_)5Q0emc9e#JhspO7nloY^tDsY%YLBF)YsP&8xzy5d62`;_QFta^4)jei8E); zBq1@8n3x!1Vq#i&K8;4hRaaf*)*nE-Jz=I!ohrt}#PGMj{f$Q-eU$n0=ewVCFCb4x z=Inp{WRKT;pK}>7B_+kHVvxnP?&A+zJmd>Oc;^Z=)zuE~XY})HvfUMUv!g+q0+hvf z^5jWA`Q#H}-n@C@{Q2`)zI-{*ep{ipk>~z%Zho-YY*;K7s;a86*=&wBz@VU@wl3o} zE_AWg*GutMY)lM!Cr@^BZn_7#=CiY6Y*l}N&BZ707X$%k5q2fbn-x?l6$J$aK-0-N z<$Vg?$N9%5i?DaEUT8EL@=l)gdKa{|>^Jvz@^)9*m;1cR%#9TI!XAdkgMMW#PH9bi zaw9#!^5x5!KYu>+=FJngZrv*Sx+%iB9O%59J$u%%w6@>d;ip354^5`NzMlH}dMtky z3lZVrM6}U9>n&=ktJ^H|wU_2inv2i54N(45atDV8yz!2k#M3z^Nl8g*5_UpkWBjsZ z%UHQ`r6U~eDikqwKPHn&IP?NyN7G@OOeUXvS0iI`;Ir_Z@l9s5#WDx&PmK>v*6q{O%%lz?S8KG8&yzHXrCrSQph6I zThvXw9wQ7sXfm~&4ohb5-o1`>MR*GC(xW_J;>fY$jMu+n z>tmD2Za36XVGP~b6i?l8qidTzUKLk%IK z=bc2>L}&FxES zcy*DHTW>hU(@Rx6KJ9<#dG8ISA^Jxk{Y5tY^wkVeAc+qk|M+pL^7Cl!0sZ^L(x+k2 zGIvDiQ3xuF@8rpolux~jeqX%gn6%J&4z-?yv-o7;fh0bM_iG3@Wg(8)yVntdI$uX# z_m&uC@!4V%_`^aw);>mVUm{J2cl(kWtbL69VPOr#CP1Eayf1%6IDPtbmq$TZw{D#e z@{!fXr*BxX>T_}0%&XYH=OD=g6Zz)D^#p~75E>ccIL0*b3II|s9>|JSpNp=F(Cuaj zS$qkJiHsgIhK!61PF(i@PoEIE|A5r=_KlmX<~q zw7Hl}CQ)9zk??(gh_6wl^yt>HPWLr-6CDW%*7n75diHwYFviSS^)7pM_#Ck5` zEWYf6$4I?c3jNO(mr+_+#@XUBKoVZ|!DH;-bC78>uX1?Ij_}9>wl(-oXU52Ph1a(3 zHn0BELr(zQogQm;PJ8N$qlEiupWx5WncWRTojsK-mezmDd@{1vlmBh?OY8r zy;&yQzvm$4uQofp+#mn^Xp8HX)!W77fr*&EYJ1L%*6372{MId7ShZ>u{rmUtQt=rB z0(fIbndyIx9c89xzb!I7`)!daHY(IqTx~Uf^!LS2ytZ|>xihxza9Vc`N##ZMaB_NU z>_GCUuQaSLr_n2Vk|(*6<>{r;SN7!W@+P11e)%|GA`cIlot;f~c6O8fr?STK^+UgK z|DY^(JyXid*H?IK$GMiX`To{EJ37x@R;>D5OdfxjNcO>F0FKYLa6T@1V4_Q2&}%(m zwrtr#X)Du)d5hk$F$vc!ywlv#anl}tz}$D}#p#{3x1-r2d#Fu4n97%xlo%VSm z!l9PUJpSpG=#OsVscXI_VC&~RbAmkrE&i*~E&keYL&%q|gxr#?2 zsPoWl2@@uGa>))UI(>%i?|=N}H4E=F2Sr4*NRNn(VfW4*?EYx| z8-77COg0c@4##w(gU+irVTVE~tj8VQ zMHqsN;k6f0)|Cx!yQmir9(oYL!@we}I9BR9o2D(*qQqV**+E}TYg(H&v8KxpN_crM z@0Gxx@4fH)+Rrodt(kyo>Ynh&+~o&peV`%0JM#9hkx$*>z!Z9DFaB0 zk65`S(G|D~(vz#WPiwebE`ikNpePEVPzVD91J}yHg+d`%t=2-@VzGed`I>*%tu@m{ zsSKG)7Eh_?WD78USqs2M(`36TR!865vi4)_VLrAK!WWL2WdPS8Z3k- zfUC2joH=C+P+XSj`S>{g92|cj9*+y8uMzM(?@y&UPmi@%k@+f#uTpqIY&pvbQA>!$ zCoYUrPJ9H0VH6eNZ9Z2CK5>ZF`<*yWXAu!j5ee@B08Z0cbXxC$PslF}D@%Y|TU!EM z5(5;+1Z^~p>FH^#tgHwV6BCNR0Al^f_LHJ0Pft%TqR~j*+fFg$90-3Dr=MhHI?nUw!keK7{bi=n(YaH|65z(hhJh5JcRHPzot>2& zr-lOtxD=s|P7@*90?I8wsH3A(9{q0#b#xktF2FlZaB@x`u)f5sf$c cE9%JPA9}IYB>N)_lmGw#07*qoM6N<$f+v7=xc~qF diff --git a/modular_citadel/code/modules/client/loadout/__donator.dm b/modular_citadel/code/modules/client/loadout/__donator.dm index 4d9211f7a2..fac53fee5b 100644 --- a/modular_citadel/code/modules/client/loadout/__donator.dm +++ b/modular_citadel/code/modules/client/loadout/__donator.dm @@ -355,4 +355,10 @@ datum/gear/darksabresheath name = "Mime Mask" category = SLOT_WEAR_MASK path = /obj/item/clothing/mask/gas/mime + ckeywhitelist = list("pireamaineach") + +/datum/gear/mimeoveralls + name = "Mime's Overalls" + category = SLOT_WEAR_SUIT + path = /obj/item/clothing/under/mimeoveralls ckeywhitelist = list("pireamaineach") \ No newline at end of file diff --git a/modular_citadel/code/modules/custom_loadout/custom_items.dm b/modular_citadel/code/modules/custom_loadout/custom_items.dm index 0d9e81e15a..5f0d8cfc00 100644 --- a/modular_citadel/code/modules/custom_loadout/custom_items.dm +++ b/modular_citadel/code/modules/custom_loadout/custom_items.dm @@ -430,3 +430,12 @@ icon_state = "shark_cloth" mutantrace_variation = NO_MUTANTRACE_VARIATION +/obj/item/clothing/under/mimeoveralls + name = "Mime's Overalls" + icon = 'icons/obj/custom.dmi' + alternate_worn_icon = 'icons/mob/custom_w.dmi' + desc = "A less-than-traditional mime's attire, completed by a set of dorky-looking overalls." + item_state = "moveralls" + icon_state = "moveralls" + mutantrace_variation = NO_MUTANTRACE_VARIATION + From 01c862eb38d44bbaa4b61e153aa701acf807cfb9 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 6 Jan 2019 14:31:46 -0600 Subject: [PATCH 095/104] Automatic changelog generation for PR #7860 [ci skip] --- html/changelogs/AutoChangeLog-pr-7860.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-7860.yml diff --git a/html/changelogs/AutoChangeLog-pr-7860.yml b/html/changelogs/AutoChangeLog-pr-7860.yml new file mode 100644 index 0000000000..140f95aa40 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-7860.yml @@ -0,0 +1,4 @@ +author: "deathride58" +delete-after: True +changes: + - bugfix: "The syndicate mask now works properly as intended." From 2e0e115b2454c5b5746efe1beea1c31c7aad4a51 Mon Sep 17 00:00:00 2001 From: Trilbyspaceclone <30435998+Trilbyspaceclone@users.noreply.github.com> Date: Tue, 8 Jan 2019 05:28:06 -0500 Subject: [PATCH 096/104] Adds 6 new colors to the unlimited paint chaining can (#7903) * Update paint.dm * I did this by hand and not Copy pasted, go me --- code/game/objects/items/paint.dm | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/code/game/objects/items/paint.dm b/code/game/objects/items/paint.dm index c81fd08274..a6f5830dd4 100644 --- a/code/game/objects/items/paint.dm +++ b/code/game/objects/items/paint.dm @@ -56,22 +56,34 @@ icon_state = "paint_neutral" /obj/item/paint/anycolor/attack_self(mob/user) - var/t1 = input(user, "Please select a color:", "Locking Computer", null) in list( "red", "blue", "green", "yellow", "violet", "black", "white") + var/t1 = input(user, "Please select a color:", "Locking Computer", null) in list( "red", "pink", "blue", "cyan", "green", "lime", "yellow", "orange", "violet", "purple", "black", "gray", "white") if ((user.get_active_held_item() != src || user.stat || user.restrained())) return switch(t1) if("red") item_color = "C73232" + if("pink") + item_color = "FFC0CD" if("blue") item_color = "5998FF" + if("cyan") + item_color = "00FFFF" if("green") item_color = "2A9C3B" + if("lime") + item_color = "00FF00" if("yellow") item_color = "CFB52B" + if("orange") + item_color = "fFA700" if("violet") item_color = "AE4CCD" + if("purple") + item_color = "800080" if("white") item_color = "FFFFFF" + if("gray") + item_color = "808080" if("black") item_color = "333333" icon_state = "paint_[t1]" From c2eafa3f73d3185e416d0d718085d3d1249ef278 Mon Sep 17 00:00:00 2001 From: Trilbyspaceclone <30435998+Trilbyspaceclone@users.noreply.github.com> Date: Tue, 8 Jan 2019 05:28:24 -0500 Subject: [PATCH 097/104] Adds condiments to the coffie vender with coins! (#7902) * Update coffee.dm * Update coffee.dm * Would help to double check --- code/modules/vending/coffee.dm | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/code/modules/vending/coffee.dm b/code/modules/vending/coffee.dm index 6ac9dd648d..c30c087d7b 100644 --- a/code/modules/vending/coffee.dm +++ b/code/modules/vending/coffee.dm @@ -8,6 +8,11 @@ /obj/item/reagent_containers/food/drinks/mug/tea = 25, /obj/item/reagent_containers/food/drinks/mug/coco = 25) contraband = list(/obj/item/reagent_containers/food/drinks/ice = 12) + premium = list(/obj/item/reagent_containers/food/snacks/chocolatebar = 3, + /obj/item/reagent_containers/food/condiment/milk = 2, + /obj/item/reagent_containers/food/drinks/bottle/cream = 2, + /obj/item/reagent_containers/food/condiment/sugar = 1) + refill_canister = /obj/item/vending_refill/coffee /obj/item/vending_refill/coffee From eb7f5634d55ba78a58f8995b75c9343b044f8a87 Mon Sep 17 00:00:00 2001 From: Ignari-Coldstorm <43045900+Ignari-Coldstorm@users.noreply.github.com> Date: Tue, 8 Jan 2019 04:30:24 -0600 Subject: [PATCH 098/104] Changes Jukebox Availability (#7905) Changes the massive price of the jukebox to something much more affordable, as well as broadens access needed to use it. --- code/game/machinery/dance_machine.dm | 2 +- modular_citadel/code/modules/cargo/packs.dm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/machinery/dance_machine.dm b/code/game/machinery/dance_machine.dm index 3a6cf2b922..7beb32eebb 100644 --- a/code/game/machinery/dance_machine.dm +++ b/code/game/machinery/dance_machine.dm @@ -5,7 +5,7 @@ icon_state = "jukebox" verb_say = "states" density = TRUE - req_access = list(ACCESS_BAR) + req_one_access = list(ACCESS_BAR, ACCESS_KITCHEN, ACCESS_HYDROPONICS, ACCESS_ENGINE, ACCESS_CARGO, ACCESS_THEATRE) var/active = FALSE var/list/rangers = list() var/stop = 0 diff --git a/modular_citadel/code/modules/cargo/packs.dm b/modular_citadel/code/modules/cargo/packs.dm index c03a049b60..6d39a51a76 100644 --- a/modular_citadel/code/modules/cargo/packs.dm +++ b/modular_citadel/code/modules/cargo/packs.dm @@ -23,6 +23,6 @@ /datum/supply_pack/misc/jukebox name = "Jukebox" - cost = 1000000 + cost = 35000 contains = list(/obj/machinery/jukebox) crate_name = "Jukebox" From 353713fcee2d6c76b9ee496734d012037e1cff2d Mon Sep 17 00:00:00 2001 From: Trilbyspaceclone <30435998+Trilbyspaceclone@users.noreply.github.com> Date: Tue, 8 Jan 2019 05:30:47 -0500 Subject: [PATCH 099/104] ERT suits shouldnt die to acid (#7897) --- code/modules/clothing/spacesuits/miscellaneous.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/clothing/spacesuits/miscellaneous.dm b/code/modules/clothing/spacesuits/miscellaneous.dm index 89f114f7e5..cd8efd74bf 100644 --- a/code/modules/clothing/spacesuits/miscellaneous.dm +++ b/code/modules/clothing/spacesuits/miscellaneous.dm @@ -168,6 +168,7 @@ Contains: strip_delay = 130 item_flags = NODROP brightness_on = 7 + resistance_flags = ACID_PROOF /obj/item/clothing/suit/space/hardsuit/ert name = "emergency response team suit" @@ -179,6 +180,7 @@ Contains: armor = list("melee" = 65, "bullet" = 50, "laser" = 50, "energy" = 50, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 80) slowdown = 0 strip_delay = 130 + resistance_flags = ACID_PROOF //ERT Security /obj/item/clothing/head/helmet/space/hardsuit/ert/sec From 6701585888f065306d74e53d427fd6c73826bcac Mon Sep 17 00:00:00 2001 From: Trilbyspaceclone <30435998+Trilbyspaceclone@users.noreply.github.com> Date: Tue, 8 Jan 2019 05:35:19 -0500 Subject: [PATCH 100/104] Update snack.dm (#7899) --- code/modules/vending/snack.dm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code/modules/vending/snack.dm b/code/modules/vending/snack.dm index 69e510ad5a..19138bad32 100644 --- a/code/modules/vending/snack.dm +++ b/code/modules/vending/snack.dm @@ -12,6 +12,9 @@ /obj/item/reagent_containers/food/snacks/spacetwinkie = 6, /obj/item/reagent_containers/food/snacks/cheesiehonkers = 6) contraband = list(/obj/item/reagent_containers/food/snacks/syndicake = 6) + premium = list(/obj/item/storage/box/donkpockets = 1, + /obj/item/reagent_containers/food/snacks/poppypretzel = 3) + refill_canister = /obj/item/vending_refill/snack var/chef_compartment_access = "28" //ACCESS_KITCHEN From c96b6dfee8012bc87c7925f473999c6b703b4711 Mon Sep 17 00:00:00 2001 From: Trilbyspaceclone <30435998+Trilbyspaceclone@users.noreply.github.com> Date: Tue, 8 Jan 2019 05:35:41 -0500 Subject: [PATCH 101/104] [Ready] Hunting, Anitviro and Russian gear crate! (#7796) * Cargo * grammar * Update packs.dm * reduce anitviro crate cost * No fun allowed * Update packs.dm --- code/modules/cargo/packs.dm | 60 +++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/code/modules/cargo/packs.dm b/code/modules/cargo/packs.dm index a8874738f7..587ba0c110 100644 --- a/code/modules/cargo/packs.dm +++ b/code/modules/cargo/packs.dm @@ -265,6 +265,26 @@ crate_name = "weed control crate" crate_type = /obj/structure/closet/crate/secure/hydroponics +/datum/supply_pack/medical/anitvirus + name = "Virus Containment Crate" + desc = "Viro let out a death plague Mk II again? Someone didnt wash there hands? Old plagues born anew? Well this crate is for you! Hope you cure it before it brakes out of the station... This crate needs medical access to open and has two bio suits, a box of needles and beakers, five spaceacillin needles, and a medibot." + cost = 3000 + access = ACCESS_MEDICAL + contains = list(/mob/living/simple_animal/bot/medbot, + /obj/item/clothing/head/bio_hood, + /obj/item/clothing/head/bio_hood, + /obj/item/clothing/suit/bio_suit, + /obj/item/clothing/suit/bio_suit, + /obj/item/reagent_containers/syringe/antiviral, + /obj/item/reagent_containers/syringe/antiviral, + /obj/item/reagent_containers/syringe/antiviral, + /obj/item/reagent_containers/syringe/antiviral, + /obj/item/reagent_containers/syringe/antiviral, + /obj/item/storage/box/syringes, + /obj/item/storage/box/beakers) + crate_name = "virus containment unit crate" + crate_type = /obj/structure/closet/crate/secure/plasma + ////////////////////////////////////////////////////////////////////////////// //////////////////////////// Security //////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// @@ -395,6 +415,29 @@ /obj/item/melee/baton/loaded) crate_name = "stun baton crate" +/datum/supply_pack/security/russianclothing + name = "Russian Surplus Clothing" + desc = "An old russian crate full of surplus armor that they used to use! Has two sets of bulletproff armor, a few union suits and some warm hats!" + hidden = TRUE + contraband = TRUE + cost = 5000 // Its basicly sec suits, good boots/gloves + contains = list(/obj/item/clothing/suit/security/officer/russian, + /obj/item/clothing/suit/security/officer/russian, + /obj/item/clothing/shoes/combat, + /obj/item/clothing/shoes/combat, + /obj/item/clothing/head/ushanka, + /obj/item/clothing/head/ushanka, + /obj/item/clothing/suit/armor/bulletproof, + /obj/item/clothing/suit/armor/bulletproof, + /obj/item/clothing/head/helmet/alt, + /obj/item/clothing/head/helmet/alt, + /obj/item/clothing/gloves/combat, + /obj/item/clothing/gloves/combat, + /obj/item/clothing/mask/gas, + /obj/item/clothing/mask/gas) + crate_name = "surplus russian clothing" + crate_type = /obj/structure/closet/crate/internals + /datum/supply_pack/security/taser name = "Taser Crate" desc = "From the depths of stunbased combat, this order rises above, supreme. Contains three hybrid tasers, capable of firing both electrodes and disabling shots. Requires Security access to open." @@ -1320,6 +1363,7 @@ crate_type = /obj/structure/closet/crate/secure/plasma dangerous = TRUE + ////////////////////////////////////////////////////////////////////////////// //////////////////////////// Science ///////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// @@ -1703,6 +1747,22 @@ access = ACCESS_THEATRE crate_type = /obj/structure/closet/crate/secure +/datum/supply_pack/organic/hunting + name = "Huntting gear" + desc = "Even in space, we can fine prey to hunt, this crate contains everthing a fine hunter needs to have a sporting time. This crate needs armory access to open. A true huntter only needs a fine bottle of cognac, a nice coat, some good o' cigars, and of cource a huntting shotgun. " + cost = 3500 + contraband = TRUE + contains = list(/obj/item/clothing/head/flatcap, + /obj/item/clothing/suit/hooded/wintercoat/captain, + /obj/item/reagent_containers/food/drinks/bottle/cognac, + /obj/item/storage/fancy/cigarettes/cigars/havana, + /obj/item/clothing/gloves/color/white, + /obj/item/clothing/under/rank/curator, + /obj/item/gun/ballistic/shotgun/lethal) + access = ACCESS_ARMORY + crate_name = "sporting crate" + crate_type = /obj/structure/closet/crate/secure // Would have liked a wooden crate but access >:( + /datum/supply_pack/organic/hydroponics name = "Hydroponics Crate" desc = "Supplies for growing a great garden! Contains two bottles of ammonia, two Plant-B-Gone spray bottles, a hatchet, cultivator, plant analyzer, as well as a pair of leather gloves and a botanist's apron." From 7e8ba9a23ce2bf93c60af8e62909c23b4f1970d8 Mon Sep 17 00:00:00 2001 From: Trilbyspaceclone <30435998+Trilbyspaceclone@users.noreply.github.com> Date: Tue, 8 Jan 2019 05:36:43 -0500 Subject: [PATCH 102/104] [Ready] New adv surgery tools! (#7879) * Fixing updater * Update tools.dm * Update all_nodes.dm * Update medical_designs.dm * shit.jpg * Update medical_designs.dm * Update medical_designs.dm * Apply suggestions from code review Ragolutions' Grammar rework Co-Authored-By: Trilbyspaceclone <30435998+Trilbyspaceclone@users.noreply.github.com> * Apply suggestions from code review Reg being the best Co-Authored-By: Trilbyspaceclone <30435998+Trilbyspaceclone@users.noreply.github.com> * Huh --- .../research/designs/medical_designs.dm | 84 +++++++++++++++++++ code/modules/research/techweb/all_nodes.dm | 11 ++- code/modules/surgery/tools.dm | 84 ++++++++++++++++++- 3 files changed, 177 insertions(+), 2 deletions(-) diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index b7da52468b..ca3f2b420b 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -44,6 +44,16 @@ category = list("Medical Designs") departmental_flags = DEPARTMENTAL_FLAG_MEDICAL +/datum/design/medicalkit + name = "Empty Medkit" + desc = "A plastic medical kit for storging medical items." + id = "medicalkit" + build_type = PROTOLATHE + materials = list(MAT_PLASTIC = 5000) + build_path = /obj/item/storage/firstaid //So we dont spawn medical items in it + category = list("Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE + /datum/design/xlarge_beaker name = "X-large Beaker" id = "xlarge_beaker" @@ -526,6 +536,80 @@ category = list("Medical Designs") departmental_flags = DEPARTMENTAL_FLAG_MEDICAL +///////////////////// +//Adv Surgery Tools// +///////////////////// + +/datum/design/drapes + name = "Plastic Drapes" + desc = "A large surgery drape made of plastic." + id = "drapes" + build_type = PROTOLATHE + materials = list(MAT_PLASTIC = 2500) + build_path = /obj/item/surgical_drapes + category = list("Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE + +/datum/design/retractor_adv + name = "Advanced Retractor" + desc = "A high-class, premium retractor, featuring precision crafted, silver-plated hook-ends and an electrum handle." + id = "retractor_adv" + build_type = PROTOLATHE + materials = list(MAT_METAL = 500, MAT_GLASS = 500, MAT_SILVER = 1500, MAT_GOLD = 1000) + build_path = /obj/item/retractor/adv + category = list("Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE + +/datum/design/hemostat_adv + name = "Advanced Hemostat" + desc = "An exceptionally fine pair of arterial forceps. These appear to be plated in electrum and feel soft to the touch." + id = "hemostat_adv" + build_type = PROTOLATHE + materials = list(MAT_METAL = 500, MAT_GLASS = 500, MAT_SILVER = 1000, MAT_GOLD = 1500) + build_path = /obj/item/hemostat/adv + category = list("Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE + +/datum/design/cautery_adv + name = "Electrocautery" //This is based on real-life science. + desc = "A high-tech unipolar Electrocauter. This tiny device contains an extremely powerful microbattery that uses arcs of electricity to painlessly sear wounds shut. It seems to recharge with the user's body-heat. Wow!" + id = "cautery_adv" + build_type = PROTOLATHE + materials = list(MAT_METAL = 500, MAT_GLASS = 500, MAT_SILVER = 1000, MAT_GOLD = 1500) + build_path = /obj/item/cautery/adv + category = list("Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE + +/datum/design/surgicaldrill_adv + name = "Surgical Autodrill" + desc = "With a diamond tip and built-in depth and safety sensors, this drill alerts the user before overpenetrating a patient's skull or tooth. There also appears to be a disable switch." + id = "surgicaldrill_adv" + build_type = PROTOLATHE + materials = list(MAT_METAL = 2500, MAT_GLASS = 2500, MAT_SILVER = 6000, MAT_GOLD = 5500, MAT_DIAMOND = 3500) + build_path = /obj/item/surgicaldrill/adv + category = list("Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE + +/datum/design/scalpel_adv + name = "Precision Scalpel" + desc = "A perfectly balanced electrum scalpel with a silicon-coated edge to eliminate wear and tear." + id = "scalpel_adv" + build_type = PROTOLATHE + materials = list(MAT_METAL = 1500, MAT_GLASS = 1500, MAT_SILVER = 4000, MAT_GOLD = 2500) + build_path = /obj/item/scalpel/adv + category = list("Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE + +/datum/design/circular_saw_adv + name = "Diamond-Grit Circular Saw" + desc = "For those Assistants with REALLY thick skulls." + id = "circular_saw_adv" + build_type = PROTOLATHE + materials = list(MAT_METAL = 7500, MAT_GLASS = 6000, MAT_SILVER = 6500, MAT_GOLD = 7500, MAT_DIAMOND = 4500) + build_path = /obj/item/circular_saw/adv + category = list("Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE + ///////////////////// ///Surgery Designs/// ///////////////////// diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index af4f1ce3cc..fec2752a22 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -60,7 +60,7 @@ display_name = "Biological Technology" description = "What makes us tick." //the MC, silly! prereq_ids = list("base") - design_ids = list("chem_heater", "chem_master", "chem_dispenser", "sleeper", "vr_sleeper", "pandemic", "defibmount", "operating", "soda_dispenser", "beer_dispenser", "healthanalyzer", "blood_bag") + design_ids = list("medicalkit", "chem_heater", "chem_master", "chem_dispenser", "sleeper", "vr_sleeper", "pandemic", "defibmount", "operating", "soda_dispenser", "beer_dispenser", "healthanalyzer", "blood_bag") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) export_price = 5000 @@ -91,6 +91,15 @@ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1250) export_price = 5000 +/datum/techweb_node/advance_surgerytools + id = "advance_surgerytools" + display_name = "Advanced Surgery Tools" + description = "Refined and improved redesigns for the run-of-the-mill medical utensils." + prereq_ids = list("adv_biotech", "adv_surgery") + design_ids = list("drapes", "retractor_adv", "hemostat_adv", "cautery_adv", "surgicaldrill_adv", "scalpel_adv", "circular_saw_adv") + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) + export_price = 5000 + /////////////////////////Advanced Surgery///////////////////////// /datum/techweb_node/adv_surgery id = "adv_surgery" diff --git a/code/modules/surgery/tools.dm b/code/modules/surgery/tools.dm index aaf859ee52..517dfb412a 100644 --- a/code/modules/surgery/tools.dm +++ b/code/modules/surgery/tools.dm @@ -7,6 +7,15 @@ flags_1 = CONDUCT_1 w_class = WEIGHT_CLASS_TINY +/obj/item/retractor/adv + name = "Advanced Retractor" + desc = "A high-class, premium retractor, featuring precision crafted, silver-plated hook-ends and an electrum handle." + icon = 'icons/obj/surgery.dmi' + icon_state = "retractor" + materials = list(MAT_METAL=6000, MAT_GLASS=3000) + flags_1 = CONDUCT_1 + w_class = WEIGHT_CLASS_TINY + toolspeed = 0.65 /obj/item/retractor/augment name = "retractor" @@ -18,7 +27,6 @@ w_class = WEIGHT_CLASS_TINY toolspeed = 0.5 - /obj/item/hemostat name = "hemostat" desc = "You think you have seen this before." @@ -29,6 +37,16 @@ w_class = WEIGHT_CLASS_TINY attack_verb = list("attacked", "pinched") +/obj/item/hemostat/adv + name = "Advanced Hemostat" + desc = "An exceptionally fine pair of arterial forceps. These appear to be plated in electrum and feel soft to the touch." + icon = 'icons/obj/surgery.dmi' + icon_state = "hemostat" + materials = list(MAT_METAL=5000, MAT_GLASS=2500) + flags_1 = CONDUCT_1 + w_class = WEIGHT_CLASS_TINY + toolspeed = 0.65 + attack_verb = list("attacked", "pinched") /obj/item/hemostat/augment name = "hemostat" @@ -52,6 +70,16 @@ w_class = WEIGHT_CLASS_TINY attack_verb = list("burnt") +/obj/item/cautery/adv + name = "Electrocautery" + desc = "A high-tech unipolar Electrocauter. This tiny device contains an extremely powerful microbattery that uses arcs of electricity to painlessly sear wounds shut. It seems to recharge with the user's body-heat. Wow!" + icon = 'icons/obj/surgery.dmi' + icon_state = "cautery" + materials = list(MAT_METAL=2500, MAT_GLASS=750) + flags_1 = CONDUCT_1 + w_class = WEIGHT_CLASS_TINY + toolspeed = 0.5 + attack_verb = list("burnt") /obj/item/cautery/augment name = "cautery" @@ -79,6 +107,21 @@ w_class = WEIGHT_CLASS_NORMAL attack_verb = list("drilled") +/obj/item/surgicaldrill/adv + name = "Surgical Autodrill" + desc = "With a diamond tip and built-in depth and safety sensors, this drill alerts the user before overpenetrating a patient's skull or tooth. There also appears to be a disable switch." + icon = 'icons/obj/surgery.dmi' + icon_state = "drill" + lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' + hitsound = 'sound/weapons/circsawhit.ogg' + materials = list(MAT_METAL=10000, MAT_GLASS=6000) + flags_1 = CONDUCT_1 + force = 13 //Damions are not ment for flesh cutting! + w_class = WEIGHT_CLASS_NORMAL + toolspeed = 0.65 + attack_verb = list("drilled") + sharpness = IS_SHARP_ACCURATE // Were making them use a damion for this... /obj/item/surgicaldrill/augment name = "surgical drill" @@ -116,6 +159,25 @@ . = ..() AddComponent(/datum/component/butchering, 80 * toolspeed, 100, 0) +/obj/item/scalpel/adv + name = "Precision Scalpel" + desc = "A perfectly balanced electrum scalpel with a silicon-coated edge to eliminate wear and tear." + icon = 'icons/obj/surgery.dmi' + icon_state = "scalpel" + lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' + flags_1 = CONDUCT_1 + force = 8 + w_class = WEIGHT_CLASS_TINY + throwforce = 7 + throw_speed = 3 + throw_range = 6 + materials = list(MAT_METAL=4000, MAT_GLASS=1000) + attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") + toolspeed = 0.65 + hitsound = 'sound/weapons/bladeslice.ogg' + sharpness = IS_SHARP_ACCURATE + /obj/item/scalpel/augment name = "scalpel" desc = "Ultra-sharp blade attached directly to your bone for extra-accuracy." @@ -161,6 +223,26 @@ . = ..() AddComponent(/datum/component/butchering, 40 * toolspeed, 100, 5, 'sound/weapons/circsawhit.ogg') //saws are very accurate and fast at butchering +/obj/item/circular_saw/adv + name = "Diamond-Grit Circular Saw" + desc = "For those Assistants with REALLY thick skulls." + icon = 'icons/obj/surgery.dmi' + icon_state = "saw" + lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' + hitsound = 'sound/weapons/circsawhit.ogg' + throwhitsound = 'sound/weapons/pierce.ogg' + flags_1 = CONDUCT_1 + force = 13 + w_class = WEIGHT_CLASS_NORMAL + throwforce = 6 + throw_speed = 1 + throw_range = 3 + materials = list(MAT_METAL=10000, MAT_GLASS=6000) + attack_verb = list("attacked", "slashed", "sawed", "cut") + toolspeed = 0.65 + sharpness = IS_SHARP + /obj/item/circular_saw/augment name = "circular saw" desc = "A small but very fast spinning saw. Edges dulled to prevent accidental cutting inside of the surgeon." From 889216c8f606fea03109e3b4b23a24a08d3ddbb4 Mon Sep 17 00:00:00 2001 From: Trilbyspaceclone <30435998+Trilbyspaceclone@users.noreply.github.com> Date: Tue, 8 Jan 2019 05:38:54 -0500 Subject: [PATCH 103/104] [Ready] New Mute quirk as well as Paper bin and crayon box to load-outs! - Requested by Suru (#7867) * Fixing updater * Update negative.dm * Update backpack.dm * Update negative.dm * Update negative.dm --- code/datums/traits/negative.dm | 18 ++++++++++++++++++ .../code/modules/client/loadout/backpack.dm | 12 +++++++++++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/code/datums/traits/negative.dm b/code/datums/traits/negative.dm index da0b811d03..2187d61215 100644 --- a/code/datums/traits/negative.dm +++ b/code/datums/traits/negative.dm @@ -278,3 +278,21 @@ var/mob/living/carbon/human/H = quirk_holder phobia = new H.gain_trauma(phobia, TRAUMA_RESILIENCE_SURGERY) + +/datum/quirk/mute + name = "Mute" + desc = "Do to some accident caused you or by choice you have no voice to be heard!" + value = -2 //HALP MAINTS + gain_text = "I rather not say..." + lose_text = "I can speak once more." + medical_record_text = "Patient has an been unable to talk or use there voice." + var/datum/brain_trauma/severe/mute + +/datum/quirk/mute/add() + var/mob/living/carbon/human/H = quirk_holder + H.gain_trauma(mute, TRAUMA_RESILIENCE_SURGERY) + +/datum/quirk/mute/on_process() + if(quirk_holder.mind && LAZYLEN(quirk_holder.mind.antag_datums)) + to_chat(quirk_holder, "Your antagonistic nature has caused your voice to be heard.") + qdel(src) diff --git a/modular_citadel/code/modules/client/loadout/backpack.dm b/modular_citadel/code/modules/client/loadout/backpack.dm index b3a59425a9..886a2d4df9 100644 --- a/modular_citadel/code/modules/client/loadout/backpack.dm +++ b/modular_citadel/code/modules/client/loadout/backpack.dm @@ -56,4 +56,14 @@ /datum/gear/dildo name = "Customizable dildo" category = SLOT_IN_BACKPACK - path = /obj/item/dildo/custom \ No newline at end of file + path = /obj/item/dildo/custom + +/datum/gear/paperbin + name = "Paper Bin" + category = SLOT_IN_BACKPACK + path = /obj/item/paper_bin + +/datum/gear/crayons + name = "Box of crayons" + category = SLOT_IN_BACKPACK + path = /obj/item/storage/crayons From 2b68547f8d612acc8a8a4c4d4f4d7bd7a9bd8787 Mon Sep 17 00:00:00 2001 From: Trilbyspaceclone <30435998+Trilbyspaceclone@users.noreply.github.com> Date: Tue, 8 Jan 2019 05:41:12 -0500 Subject: [PATCH 104/104] [Ready] Makes synda paper mask correct eye sight and flash proof (#7858) * Wow this is worthless * Better tells --- .../code/modules/clothing/glasses/phantomthief.dm | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/modular_citadel/code/modules/clothing/glasses/phantomthief.dm b/modular_citadel/code/modules/clothing/glasses/phantomthief.dm index 49eb089afa..e5f58d4082 100644 --- a/modular_citadel/code/modules/clothing/glasses/phantomthief.dm +++ b/modular_citadel/code/modules/clothing/glasses/phantomthief.dm @@ -1,6 +1,8 @@ /obj/item/clothing/glasses/phantomthief name = "suspicious paper mask" - desc = "A cheap, Syndicate-branded paper face mask. They'll never see it coming." + desc = "A cheap, Syndicate-branded paper face mask with vision correction lens and flash proof! They'll never see it coming. This mask goes over your eyes." + flash_protect = 1 + vision_correction = 1 alternate_worn_icon = 'icons/mob/mask.dmi' icon = 'icons/obj/clothing/masks.dmi' icon_state = "s-ninja" @@ -12,7 +14,7 @@ /obj/item/clothing/glasses/phantomthief/syndicate name = "suspicious plastic mask" - desc = "A cheap, bulky, Syndicate-branded plastic face mask. You have to break in to break out." + desc = "A cheap, bulky, Syndicate-branded plastic face mask with vision correction lens and flash proof. You have to break in to break out. This mask goes over your eyes." var/nextadrenalinepop var/datum/component/redirect/combattoggle_redir