From fb77d07d52a9d20d4d8ea8a942bc8d72b9837927 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Mon, 23 Dec 2019 16:56:43 -0800 Subject: [PATCH 001/346] plushies woohoo --- .../configuration/entries/plushies.dm | 6 + code/game/objects/items/plushes.dm | 472 +++--------------- config/config.txt | 1 + config/plushies/defines.txt | 0 config/plushies/plushie_config.txt | 2 + config/plushies/sprites.dmi | Bin 0 -> 364 bytes icons/obj/custom.dmi | Bin 26970 -> 27428 bytes icons/obj/plushes.dmi | Bin 47353 -> 11558 bytes .../code/modules/client/loadout/backpack.dm | 2 +- .../modules/custom_loadout/custom_items.dm | 8 + tgstation.dme | 1 + 11 files changed, 81 insertions(+), 411 deletions(-) create mode 100644 code/controllers/configuration/entries/plushies.dm create mode 100644 config/plushies/defines.txt create mode 100644 config/plushies/plushie_config.txt create mode 100644 config/plushies/sprites.dmi diff --git a/code/controllers/configuration/entries/plushies.dm b/code/controllers/configuration/entries/plushies.dm new file mode 100644 index 0000000000..20ad02d399 --- /dev/null +++ b/code/controllers/configuration/entries/plushies.dm @@ -0,0 +1,6 @@ +/datum/config_entry/number/snowflake_plushie_prob + config_entry_value = 50 + +/datum/config_entry/keyed_list/snowflake_plushies + key_mode = KEY_MODE_TEXT + value_mode = VALUE_MODE_TEXT diff --git a/code/game/objects/items/plushes.dm b/code/game/objects/items/plushes.dm index 705dcad6c6..99e30346d0 100644 --- a/code/game/objects/items/plushes.dm +++ b/code/game/objects/items/plushes.dm @@ -31,7 +31,15 @@ var/normal_desc //--end of love :'(-- -/obj/item/toy/plush/Initialize() + var/snowflake_id //if we set from a config snowflake plushie. + +/obj/item/toy/plush/random_snowflake/Initialize(mapload, set_snowflake_id) + . = ..() + var/list/configlist = CONFIG_GET(keyed_list/snowflake_plushies) + var/id = pick(configlist) + set_snowflake_from_config(id) + +/obj/item/toy/plush/Initialize(mapload, set_snowflake_id) . = ..() AddComponent(/datum/component/squeak, squeak_override) @@ -50,6 +58,9 @@ normal_desc = desc + if(set_snowflake_id) + set_snowflake_from_config(set_snowflake_id) + /obj/item/toy/plush/Destroy() QDEL_NULL(grenade) @@ -97,6 +108,43 @@ return ..() +/obj/item/toy/plush/proc/set_snowflake_from_config(id) + var/list/configlist = CONFIG_GET(keyed_list/snowflake_plushies) + var/list/jsonlist = configlist[id] + ASSERT(jsonlist) + jsonlist = json_decode(jsonlist) + if(jsonlist["inherit_from"]) + var/path = text2path(jsonlist["inherit_from"]) + if(!ispath(path, /obj/item/toy/plush)) + stack_trace("Invalid path for inheritance") + else + var/obj/item/toy/plush/P = new path //can't initial() lists + name = P.name + desc = P.desc + icon_state = P.icon_state + item_state = P.item_state + icon = P.icon + squeak_override = P.squeak_override + attack_verb = P.attack_verb + gender = P.gender + if(jsonlist["name"]) + name = jsonlist["name"] + if(jsonlist["desc"]) + desc = jsonlist["desc"] + if(jsonlist["gender"]) + gender = jsonlist["gender"] + if(jsonlist["icon_state"]) + icon_state = jsonlist["icon_state"] + item_state = jsonlist["item_state"] + icon = 'config/plushies/sprites.dmi' + if(jsonlist["attack_verb"]) + attack_verb = jsonlist["attack_verb"] + if(jsonlist["squeak_override"]) + squeak_override = jsonlist["squeak_override"] + if(squeak_override) + var/datum/component/squeak/S = GetComponent(/datum/component/squeak) + S?.override_squeak_sounds = squeak_override + /obj/item/toy/plush/handle_atom_del(atom/A) if(A == grenade) grenade = null @@ -373,7 +421,7 @@ var/blacklisted_plushes = list(/obj/item/toy/plush/carpplushie/dehy_carp, /obj/item/toy/plush/awakenedplushie, /obj/item/toy/plush/random) /obj/item/toy/plush/random/Initialize() - var/newtype = pick(subtypesof(/obj/item/toy/plush) - typecacheof(blacklisted_plushes)) + var/newtype = prob(CONFIG_GET(number/snowflake_plushie_prob))? /obj/item/toy/plush/random_snowflake : (pick(subtypesof(/obj/item/toy/plush) - typecacheof(blacklisted_plushes))) new newtype(loc) return INITIALIZE_HINT_QDEL @@ -504,115 +552,12 @@ attack_verb = list("clawed", "hissed", "tail slapped") squeak_override = list('sound/weapons/slash.ogg' = 1) -/obj/item/toy/plush/lizardplushie/durgit - icon_state = "durgit" - item_state = "durgit" - squeak_override = list('modular_citadel/sound/voice/weh.ogg' = 1) //Durgit's the origin of the sound - -/obj/item/toy/plush/lizardplushie/rio - icon_state = "rio" - item_state = "rio" - -/obj/item/toy/plush/lizardplushie/dan - icon_state = "dan" - item_state = "dan" - -/obj/item/toy/plush/lizardplushie/urinsu - icon_state = "urinsu" - item_state = "urinsu" - -/obj/item/toy/plush/lizardplushie/arfrehn - icon_state = "arfrehn" - item_state = "arfrehn" - -/obj/item/toy/plush/lizardplushie/soars - icon_state = "soars" - item_state = "soars" - -/obj/item/toy/plush/lizardplushie/ghostie - icon_state = "ghostie" - item_state = "ghostie" - -/obj/item/toy/plush/lizardplushie/amber - icon_state = "amber" - item_state = "amber" - -/obj/item/toy/plush/lizardplushie/cyan - icon_state = "cyan" - item_state = "cyan" - -/obj/item/toy/plush/lizardplushie/meena - icon_state = "meena" - item_state = "meena" - -/obj/item/toy/plush/lizardplushie/stalks - icon_state = "stalks" - item_state = "stalks" - /obj/item/toy/plush/lizardplushie/kobold + name = "kobold plushie" + desc = "An adorable stuffed toy that resembles a kobold." icon_state = "kobold" item_state = "kobold" -/obj/item/toy/plush/lizardplushie/gorgi - icon_state = "gorgi" - item_state = "gorgi" - -/obj/item/toy/plush/lizardplushie/almaz - icon_state = "almaz" - item_state = "almaz" - squeak_override = list('modular_citadel/sound/voice/raptor_purr.ogg' = 1) - -/obj/item/toy/plush/lizardplushie/garou - icon_state = "garou" - item_state = "garou" - -/obj/item/toy/plush/lizardplushie/augments - icon_state = "augments" - item_state = "augments" - squeak_override = list('modular_citadel/sound/voice/weh.ogg' = 1) //I have no mouth and I must weh - attack_verb = list("hugged", "patted", "snugged", "booped") - -/obj/item/toy/plush/lizardplushie/xekov - icon_state = "xekov" - item_state = "xekov" - -/obj/item/toy/plush/lizardplushie/greg - icon_state = "greg" - item_state = "greg" - -/obj/item/toy/plush/lizardplushie/sin - icon_state = "sin" - item_state = "sin" - desc = "An adorable stuffed toy that resembles a lizardperson.. It faintly smells of sulfur." - -/obj/item/toy/plush/lizardplushie/ends - icon_state = "ends" - item_state = "ends" - -/obj/item/toy/plush/lizardplushie/lyssa - icon_state = "lyssa" - item_state = "lyssa" - -/obj/item/toy/plush/snakeplushie - name = "snake plushie" - desc = "An adorable stuffed toy that resembles a snake. Not to be mistaken for the real thing." - icon_state = "plushie_snake" - item_state = "plushie_snake" - attack_verb = list("bitten", "hissed", "tail slapped") - squeak_override = list('modular_citadel/sound/voice/hiss.ogg' = 1) - -/obj/item/toy/plush/snakeplushie/sasha - icon_state = "sasha" - item_state = "sasha" - -/obj/item/toy/plush/snakeplushie/shay - icon_state = "shay" - item_state = "shay" - -/obj/item/toy/plush/snakeplushie/vulken - icon_state = "vulken" - item_state = "vulken" - /obj/item/toy/plush/nukeplushie name = "operative plushie" desc = "A stuffed toy that resembles a syndicate nuclear operative. The tag claims operatives to be purely fictitious." @@ -630,18 +575,6 @@ squeak_override = list('sound/effects/blobattack.ogg' = 1) gender = FEMALE //given all the jokes and drawings, I'm not sure the xenobiologists would make a slimeboy -/obj/item/toy/plush/slimeplushie/annie - desc = "An adorable stuffed toy that resembles a slimey crewmember." - icon_state = "annie" - item_state = "annie" - -/obj/item/toy/plush/slimeplushie/paxton - desc = "An adorable stuffed toy that resembles a slimey crewmember." - icon_state = "paxton" - item_state = "paxton" - attack_verb = list("CQC'd", "jabroni'd", "powergamed", "robusted", "cakehatted") - gender = MALE - /obj/item/toy/plush/awakenedplushie name = "awakened plushie" desc = "An ancient plushie that has grown enlightened to the true nature of reality." @@ -652,7 +585,6 @@ . = ..() AddComponent(/datum/component/edit_complainer) - /obj/item/toy/plush/beeplushie name = "bee plushie" desc = "A cute toy that resembles an even cuter bee." @@ -669,21 +601,6 @@ item_state = "bumble" squeak_override = list('modular_citadel/sound/voice/mothsqueak.ogg' = 1) -/obj/item/toy/plush/mothplushie/nameko - icon_state = "nameko" - item_state = "nameko" - -/obj/item/toy/plush/mothplushie/suru - icon_state = "suru" - item_state = "suru" - -/obj/item/toy/plush/xeno - name = "xenohybrid plushie" - desc = "An adorable stuffed toy that resmembles a xenomorphic crewmember." - icon_state = "seras" - item_state = "seras" - squeak_override = list('sound/voice/hiss2.ogg' = 1) - /obj/item/toy/plush/lampplushie name = "lamp plushie" desc = "A toy lamp plushie, doesn't actually make light, but it still toggles on and off. Click clack!" @@ -736,20 +653,6 @@ icon_state = "scrubpuppy" item_state = "scrubpuppy" -/obj/item/toy/plush/borgplushie/seeking - icon_state = "seeking" - item_state = "seeking" - -/obj/item/toy/plush/borgplushie/neeb - icon_state = "neeb" - item_state = "neeb" - -/obj/item/toy/plush/borgplushie/bhijn - desc = "An adorable stuffed toy of a IPC." - icon_state = "bhijn" - item_state = "bhijn" - attack_verb = list("closed", "reworked", "merged") - /obj/item/toy/plush/aiplush name = "AI plushie" desc = "A little stuffed toy AI core... it appears to be malfunctioning." @@ -758,269 +661,18 @@ attack_verb = list("hacked", "detonated", "overloaded") squeak_override = list('sound/machines/beep.ogg' = 9, 'sound/machines/buzz-two.ogg' = 1) -/obj/item/toy/plush/bird - name = "bird plushie" - desc = "An adorable stuffed plushie that resembles an avian." - icon_state = "sylas" - item_state = "sylas" - attack_verb = list("peeped", "beeped", "poofed") - squeak_override = list('modular_citadel/sound/voice/peep.ogg' = 1) - -/obj/item/toy/plush/bird/esela - icon_state = "esela" - item_state = "esela" - -/obj/item/toy/plush/bird/jahonna - icon_state = "jahonna" - item_state = "jahonna" - -/obj/item/toy/plush/bird/krick - icon_state = "krick" - item_state = "krick" - -/obj/item/toy/plush/bird/birddi - icon_state = "birddi" - item_state = "birddi" - -/obj/item/toy/plush/bird/jewel - icon_state = "jewel" - item_state = "jewel" - -/obj/item/toy/plush/sergal - name = "sergal plushie" - desc = "An adorable stuffed plushie that resembles a sagaru." - icon_state = "faux" - item_state = "faux" - squeak_override = list('modular_citadel/sound/voice/merp.ogg' = 1) - -/obj/item/toy/plush/sergal/gladwyn - icon_state = "gladwyn" - item_state = "gladwyn" - -/obj/item/toy/plush/sergal/jermaine - icon_state = "jermaine" - item_state = "jermaine" - -/obj/item/toy/plush/mammal - name = "mammal plushie" - desc = "An adorable stuffed toy resembling some sort of crew member." - icon_state = "dubious" - item_state = "dubious" - -/obj/item/toy/plush/mammal/gavin - icon_state = "gavin" - item_state = "gavin" - -/obj/item/toy/plush/mammal/blep - icon_state = "blep" - item_state = "blep" - -/obj/item/toy/plush/mammal/circe - desc = "A luxuriously soft toy that resembles a nine-tailed kitsune." - icon_state = "circe" - item_state = "circe" - attack_verb = list("medicated", "tailhugged", "kissed") - -/obj/item/toy/plush/mammal/robin - icon_state = "robin" - item_state = "robin" - -/obj/item/toy/plush/mammal/pavel - icon_state = "pavel" - item_state = "pavel" - -/obj/item/toy/plush/mammal/mason - icon_state = "mason" - item_state = "mason" - -/obj/item/toy/plush/mammal/oten - icon_state = "oten" - item_state = "oten" - -/obj/item/toy/plush/mammal/ray - icon_state = "ray" - item_state = "ray" - -/obj/item/toy/plush/mammal/redtail - icon_state = "redtail" - item_state = "redtail" - -/obj/item/toy/plush/mammal/dawud - icon_state = "dawud" - item_state = "dawud" - -/obj/item/toy/plush/mammal/edgar - icon_state = "edgar" - item_state = "edgar" - attack_verb = list("collared", "tricked", "headpatted") - -/obj/item/toy/plush/mammal/frank - icon_state = "frank" - item_state = "frank" - -/obj/item/toy/plush/mammal/poojawa - icon_state = "poojawa" - item_state = "poojawa" - -/obj/item/toy/plush/mammal/hazel - icon_state = "hazel" - item_state = "hazel" - -/obj/item/toy/plush/mammal/joker - icon_state = "joker" - item_state = "joker" - -/obj/item/toy/plush/mammal/gunther - icon_state = "gunther" - item_state = "gunther" - /obj/item/toy/plush/mammal/fox icon_state = "fox" item_state = "fox" -/obj/item/toy/plush/mammal/rae - desc = "An adorable stuffed toy of an artic fox." - icon_state = "rae" - item_state = "rae" +/obj/item/toy/plush/snakeplushie + name = "snake plushie" + desc = "An adorable stuffed toy that resembles a snake. Not to be mistaken for the real thing." + icon_state = "plushie_snake" + item_state = "plushie_snake" + attack_verb = list("bitten", "hissed", "tail slapped") + squeak_override = list('modular_citadel/sound/voice/hiss.ogg' = 1) -/obj/item/toy/plush/mammal/zed - desc = "A masked stuffed toy that resembles a fierce miner. He even comes with his own little crusher!" - icon_state = "zed" - item_state = "zed" - attack_verb = list("ENDED", "CRUSHED", "GNOMED") - -/obj/item/toy/plush/mammal/justin - icon_state = "justin" - item_state = "justin" - attack_verb = list("buttslapped", "fixed") - -/obj/item/toy/plush/mammal/reece - icon_state = "reece" - item_state = "reece" - attack_verb = list("healed", "cured", "demoted") - -/obj/item/toy/plush/mammal/redwood - desc = "An adorable stuffed toy resembling a Nanotrasen Captain. That just happens to be a bunny." - icon_state = "redwood" - item_state = "redwood" - attack_verb = list("ordered", "bapped", "reprimanded") - -/obj/item/toy/plush/mammal/marisol - desc = "An adorable stuffed toy resembling a demi-wolf security officer." - icon_state = "marisol" - item_state = "marisol" - attack_verb = list("arrested", "harmbattoned", "lasered") - -/obj/item/toy/plush/mammal/minty - desc = "An adorable stuffed toy resembling some sort of crew member. It smells like mint.." - icon_state = "minty" - item_state = "minty" - attack_verb = list("freshened", "brushed") - -/obj/item/toy/plush/mammal/dog - desc = "An adorable stuffed toy that resembles a canine." - icon_state = "katlin" - item_state = "katlin" - attack_verb = list("barked", "boofed", "borked") - squeak_override = list( - 'modular_citadel/sound/voice/bark1.ogg' = 1, - 'modular_citadel/sound/voice/bark2.ogg' = 1 - ) - -/obj/item/toy/plush/mammal/dog/frost - icon_state = "frost" - item_state = "frost" - -/obj/item/toy/plush/mammal/dog/atticus - icon_state = "atticus" - item_state = "atticus" - -/obj/item/toy/plush/mammal/dog/fletch - icon_state = "fletch" - item_state = "fletch" - -/obj/item/toy/plush/mammal/dog/vincent - icon_state = "vincent" - item_state = "vincent" - -/obj/item/toy/plush/mammal/dog/zigfried - desc = "An adorable stuffed toy of a very good boy." - icon_state = "zigfried" - item_state = "zigfried" - -/obj/item/toy/plush/mammal/dog/nikolai - icon_state = "nikolai" - item_state = "nikolai" - -/obj/item/toy/plush/mammal/dog/flynn - icon_state = "flynn" - item_state = "flynn" - -/obj/item/toy/plush/mammal/dog/fritz - icon_state = "fritz" - item_state = "fritz" - attack_verb = list("barked", "boofed", "shotgun'd") - obj_flags = UNIQUE_RENAME - unique_reskin = list("Goodboye" = "fritz", "Badboye" = "fritz_bad") - -/obj/item/toy/plush/mammal/dog/jesse - desc = "An adorable wolf toy that resembles a cream-colored wolf. He has a little pride flag!" - icon_state = "jesse" - item_state = "jesse" - attack_verb = list("greeted", "merc'd", "howdy'd") - -/obj/item/toy/plush/catgirl - name = "feline plushie" - desc = "An adorable stuffed toy that resembles a feline." - icon_state = "bailey" - item_state = "bailey" - attack_verb = list("headbutt", "scritched", "bit") - squeak_override = list('modular_citadel/sound/voice/nya.ogg' = 1) - -/obj/item/toy/plush/catgirl/mikeel - desc = "An adorable stuffed toy of some tauric cat person." - icon_state = "mikeel" - item_state = "mikeel" - -/obj/item/toy/plush/catgirl/skylar - desc = "An adorable stuffed toy that resembles a degenerate." - icon_state = "skylar2" - item_state = "skylar2" - attack_verb = list("powergamed", "merged", "tabled") - squeak_override = list('sound/effects/meow1.ogg' = 1) - -/obj/item/toy/plush/catgirl/drew - icon_state = "drew" - item_state = "drew" - -/obj/item/toy/plush/catgirl/trilby - desc = "A masked stuffed toy that resembles a feline scientist." - icon_state = "trilby" - item_state = "trilby" - attack_verb = list("PR'd", "coded", "remembered") - -/obj/item/toy/plush/catgirl/fermis - name = "medcat plushie" - desc = "An affectionate stuffed toy that resembles a certain medcat, comes complete with battery operated wagging tail!! You get the impression she's cheering you on to to find happiness and be kind to people." - icon_state = "fermis" - item_state = "fermis" - attack_verb = list("cuddled", "petpatted", "wigglepurred") - squeak_override = list('modular_citadel/sound/voice/merowr.ogg' = 1) - -/obj/item/toy/plush/catgirl/mariaf - desc = "An adorable stuffed toy that resembles a very tall cat girl." - icon_state = "mariaf" - item_state = "mariaf" - attack_verb = list("hugged", "stabbed", "licked") - -/obj/item/toy/plush/catgirl/maya - desc = "An adorable stuffed toy that resembles an angry cat girl. She has her own tiny nuke disk!" - icon_state = "maya" - item_state = "maya" - attack_verb = list("nuked", "arrested", "harmbatonned") - -/obj/item/toy/plush/catgirl/marisa - desc = "An adorable stuffed toy that resembles a crew member, or maybe a witch. Having it makes you feel you can win." - icon_state = "marisa" - item_state = "marisa" - attack_verb = list("blasted", "sparked", "dazzled") +/obj/item/toy/plush/mammal + name = "mammal plushie" + desc = "An adorable stuffed toy resembling some sort of crew member." diff --git a/config/config.txt b/config/config.txt index e71c2587b7..d06f82457d 100644 --- a/config/config.txt +++ b/config/config.txt @@ -6,6 +6,7 @@ $include comms.txt $include antag_rep.txt $include donator_groupings.txt $include dynamic_config.txt +$include plushies/defines.txt # You can use the @ character at the beginning of a config option to lock it from being edited in-game # Example usage: diff --git a/config/plushies/defines.txt b/config/plushies/defines.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/config/plushies/plushie_config.txt b/config/plushies/plushie_config.txt new file mode 100644 index 0000000000..7cd1d88f3e --- /dev/null +++ b/config/plushies/plushie_config.txt @@ -0,0 +1,2 @@ +# EXAMPLE +# SNOWFLAKE_PLUSHIES example {"name":"example","desc":"thanks, coders.","icon_state":"","attack_verb":["thumped","whomped","bumped"],"squeak_override":{"sound/weapons/magout.ogg":1}} diff --git a/config/plushies/sprites.dmi b/config/plushies/sprites.dmi new file mode 100644 index 0000000000000000000000000000000000000000..2970010b2b7ec63dd0020c2c08106f70417051a5 GIT binary patch literal 364 zcmV-y0h9iTP)00006P)t-sz`(%& z05d9|^j!b|00DGTPE!Ct=GbNc004!0R9JLGWpiV4X>fFDZ*Bkpc$`yKaB_9`^iy#0 z_2eo`Eh^5;&r`5fFwryM;w;ZhDainGjE%TBGg33tGfE(w;*!LYR3K9+#KSW<-p$j; zHQv)N#MLjv)8Eh0$0su0)i)p{Qi+Q*C9|j)sLqg!Gp#5wHx&B%(S;5uM1?(OG z4Mi!J(;C#40001kNkl~nGXvZ?@8B5+&=7vWK-hpUAs`8abu=?!adskjpIJs*2&!6;_kwg6ST8V6 zFN#cGMJuQ)L7xlul(BfrSe@Y-VNAH#C$^3G1D(!kbYS_iJ>ml707IoI@Awx00000< KMNUMnLSTZ1k&`z7 literal 0 HcmV?d00001 diff --git a/icons/obj/custom.dmi b/icons/obj/custom.dmi index 7f42c7e25022e7823088cdd74cfc61ce95d5f479..185d9793ca142da3618623549fa94e6ed8589bf8 100644 GIT binary patch delta 8809 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 delta 8347 zcma)A^MY=;eq&uZc-uwLz-t)`u z>}Pl9nSEww=IoC-gr#YOI3|G1S6km*_M@8>9fc^7{pGo#0Q<1>obzvn{g2%xF5fPI%<@Jx6?3}~lIN1ixvR2>_8MQs&<*RjM ze76^N%|s6`J)cbtK_c!b-AGzU|5IQZ)Gvv{7AbRAdJEhM6@b0un$9Onh1M+<&ssL< zbDqYS^-Rj+On>BN_+t{q$siA^^$H^}O z-&_w{>je*fO0H9PbQS70OTfKnpYDzM&KTcN8OV6Fd(69_WCu4Lp9Qkdmg|iQL^qXcR^5wUo=as=_NR#~#u` zx}%t(R_$t|AZ{k|Vb1Gq)~>A)HkP?*GrbvX-?m@gw| zM#qvgcAzbsvzAE>@+5OgbYSs_tPYF5o82{F) z=6$lW{@k0WWo{>)?Rbsjaf{A=8`mbG0lswLfX?@ioc2|8Hog`uK{c(QBmU1Ck(1x$ zqMiia+@7vd1|7ZI`AAE##`#W~l%s`qZ-OFks`TO(DU3jZgFq&MFx$iZb_@|@t@?X& zHHcBxo`4|)$|X{uTednEP^7DAXh>0M+(O95zONuBr=OaIJ$5*|Js>AHi8P6D2YlXD z0VgKbR2H)^ZCT2)eNWH-?WP#MPuayKC2cqM_4iAcivsvHm{fDzGOUyy*k~?>CX;$@(;oGZRA2WVHT%YQc_Y$bT;{XumOeX-OR1R1A0uo9_MkNOJ9~!!Rhq zjR-Pb8aDeIC1DR)o`D#0Cr$1IM#~pm&c~+AXSJdY=;~VbofLiE-H~^kaKiAVvPc=J zGj{xA)F$cEw2nSyH_JmY3R++BlhIc%(0Ol4j@K^l#&+DJW+@zO!Y`*Wh^ zpWgt_T`xiT%Np;X=ZTj{4DXkiw=aI&ua|$kkldu60{kyM%OjcR5`U3l66p(XY^QS48b0L1evQ)s$7 z5~I$Kk>s2iWc&6O(IP*eS>HBKKHXnFGJ$R?xfWW5y8~sCg3K_OlzGw7ep^{kRmovP z@c_R54a+1d$X85tswFh2m!1&F{)MavTzw(8hk()d6%!BV1CrR+fmD1>q_dbEA=8-# z9S>n@jNjCm%#W12{`ca;WL)yQonm4)3Z2*ZP(P#tK9*3Slsp1An7o*Mh&(^aqrko@9<>!m)ld76{3BPu{KDz z*eFn}T}tzPW^Qh`oO#wNgjp>M9R#jH>bC0s!LfdA!jEu%_8fmOlkeILRGno+*wV5D z#n1iOv8UxghKeeOvT$K)((R*$$rd731X~8O2zBQ0QAZSYg{X2VwDVC6ydgU81@gam zJDoBx6~#z;2}dc?T zgm`~r(};o(4*25|5`qXA<>`ck$c2Q2SU5OB`Yd4$4)YpDM(j!}I3QwOYM&bfI#!gs zoqi>6gRbmHTg=D*7FH%EqFTF)KDOnl<+dXPXM=p5}H)#9{NPorGukT098{Iy^H zQ%a<1H3xaqH&vOwK8iPQ&S%uL`NaD!4*e48v_LaO>Izy~iI-`RzrXdIPbB`mYjy~y zd;{j=!kprppMRrSBB>(-P=kE&NYU_d4=sL~!)?PvHt`I)3xU}=I^sI72T=VvGva-6 zZ3`idvCXnAReV-lhoR9jB{Hjf(#(L|Jv`oq?DSkFCntjiosDw`aCK#+-||1~d=o*> zb}XJMjeo0oq%wh2sUM$Y<;yo%!)7mo#Qjge2q_eo8U>om&O`z%E-qF#2&^~OeCpN@ z@KwlM#Rc8Xs=r_1pz~Ehv45y{YzlaghR5eAO~_=GUqb_pRp{#ruL7cRS9M=v6&w%n zE;{n1S2$#y>CP*}*MADVg!|%x#Glkq&9@_G=IGkkmD{O@Jpb`h+nF_j@lDjhRtv(Gi;EE{=f>}jx;+f?8Al`RcNI0*UFby|k&fEejegP4{A<0^?8-y&ZQRVU1byd(^xveu zZQt9OS8wKxR-OCy@qQ4J0R)&B-A0lU3kd#K`WSSH8{0#P&GXJ-HzRIow<*+NIdMKt zlq`5pz-QK$+e(A|>gD{%nEvaO*RmrdcC`(G_(1^h1=YyQaW7}sFKCd@Wgz^H9xTQ| z(lB-%t~IRr5DRQpw*Bm0@=j#Jjlj7xd~oou;sTS*SMR_;==Gg=ZuoxHHDSc&CSHC^EIR~P zynu=P*?)mMUW^y%@T5(X%&WwWv|otAS0SSt0gJCF*$ugZvydiNzvB7{qACoWSK@Ev zeP{tn&{*$TF{q&9r_LjStA9X)+`3()O#Vaw{TX=0FI!(WTdC zG8K{qv!6X8z*%?DD7<9;Bbj)DTFRBKQSH~1S$Mrsi6@lULP$0L?GB96nduDs2jEkc zL?dljhpR_p4e}jLT%?0|!4`vaPt;i@!y!>RHpg#!EtA>_v(^dDb3Xr|G%=|FbC&gP z48J3$9J$buL#bs}#~kK72C6R7vHHzJSpP!-I$y_2C0zU=qUqa6e0Ii#|19mY+LCDW zJj(yW!<*u;%Iw!%_WhR_h3kPk3m1fgGrxG1$7epOoDR}N+|J0148tkkw{IKL+|PCX z8=DE}!hU!(jowEK2(u%un`&dfm#d_>0*f@PY|IBsm<{infbBm&r5(lGYdmM0s@Ys%8i_ z5IOh}rW(G3qk+y%R?!sHvdfk0-Api7^E{gmOP9(ArvIjb@;4J%S=iBt=tJx82x%gV zK$;9n;c1|IrA{>k$J?RLenUJz3^?-O6-Uu)A#yYI(y+h$ZPvHQyq)QAFueIaZfpK> z+SZ^mMA-?9$2jGXp8^-`CdAAuL-%Z#snxk?#JGUQ1*`tVpA%!`^`Wlwy__d302_pI zbW**_EYm5A#T!bwMw*f2i!kiMr|r*yqpMF*4yK`vIvT4ScoVC z7{zv4;f;yPA@GgO8w9%TouE60)IWbP6HL@fT5#!egFS>HLp4lic2OvAWBx*#jd>oH z6Hz7g_3#uAV>nG(lgf3Nw^Geada1ou5P-xXWZx&l8~t{>#=Jbqhao#{YZm1~LV-*i zn>up)h9w^r-psLM0xqfQ!;QY)QpMwjHK$TF_d;vw#J33jmmlNiQ~XG1=_9h|#9J)2 zrV|Gx^eRB0;*^f{<07ZM_sF2m4hw!Yy?K=15}9b*!T#AX`=CJ%(j=s~Kr(VD89;-{ zS%#o-P#yQf=3=wY`sR31QinVgS5?~AS9p46<|4r3Z7A-J-sa%oVE1NU)KHFCK9(?B zvhtp3h3+p$0hzMd8+>|sbI}BmRF<$JsqFawj?0eOPVR_&7+Y=X-s_$mJ2qBMPx*D{ zmI7tnP>2F#FG1q?g=u|aAnA$;fV8&8XmR@G4+ycz7nL1lT|b=&GN33HvD0Z4wa#I1 zbBza^cD=DS6ZV7fnb(+ystFyIi--f(QH{7Xoo}8=7Z+LD|{?GHA{kY_us_ zzC4&LbOAuGq3K~X_NZAi$Vi|AVe6i6N*GRgTGwX;+*1+g%N_R`Vg_8m{)kGo;w4%C zZPB`ChCLSs`+{cPY|3ajKxW{jjZeu2TA6b&IbG3IK?(0dI0$!zxwj&AJ?oY9?zc1M zNCl7b!;GXrUE16p0L;Co2E_y6(}&9_GVa&u>FM6#E4`1#9F@kdt8r!8Z02r)^z^zS zjav6G|#mCvEpkDARLfe8pgev(f7F1a5>>nfs5X-S=V$nSh@LCW#_>a{rN zypN2z<}e6&6ZJPDfBs0QZjr-&1D!KpBQo|wNpDiR&^Tmb9)1xZEmSQnE%d;P-YF+t z>z6|0TMo2S16-!DO~Emy{hQ>3WWVPZ?4Q`GAP}6jZUfJb@t~9x8|!F~CgBW6&;Q`_ zB$0!xb~yy~z_(_Z>$L zrV1x&3Q5~=36B!Jw1KY}bJm41^1Ri+R|6j2NV=2WULCT^y!Lh~ej63EbuMub4}__U zBe=43bj&0XF~hQmm)4Ad$wSzbMVvVQ+?yuMFr@fAYg)V;E0!6TK)7!;Mp70Xs-+FE ztijtEIU={&_J}y!mw%sGZ3%2!bkSte39M$-AD={LT2mZ6oTco|u9Tnxl_u%|k5Be{ zbE%!aR_O!7q1yf+FHOR-WwO6lzT^CfAH!U*6w6i3yblUfn{l=j82I^#%=}$z!|qs; zF-2va|C7tOjHOIXbF8hfW{#DCLPEoeMm+*d9pTQpnQK9RJbq+&PUed-v@5Cs~HYw>a>ABJRT zBBSmHpk(SOf8}%)Ik_nyAV5hsL7V>OseR@z?A$}wt^Pa?7D@zw7hK5w4ASTr6RO^;#uF+wAGI@aF|7C zB*lJ9iqFQv{2lU{0bo;Tw_J5q;Xg(MsW6(MiQ6ZD}bf^kfv)q1&25i#4Ppg&qFvbTi1hxxg~X6 zuC-00(no#a4%j>hxL@YNC)WLk#Y9Y7^QIlQ9i6pYcsiZMiD&Na2@{cvbawWs$alH% z#QE{?&^{?O)oLi=)%I4b1g^bfwwi)35lwgU_4hJh?`BS(MK&-}!`_~akdScl_wQ}5 z%n)SpLAI~xLVXI|v9+S^)u->e1XIo*{Zgz9HEG7XCH_^v5S_-av@pF2B+KW_T-(=F z&`()75Z78V3_vv!h-lNvIkC?)Bp4K>v#?TZ zNSNmYh%~yziazo4d3rPdj8>LBoP5_?x~&+l^}Qd0gxONh>r~_Z@Y|BkY};qv$ESA; zGvP{FHm_3e{?_D^_rY8r@!m>{TbhU$SEX@DpUd=S^;`;K=E>{dhpxrt<-MU7j28iM zy7(l7hq@64Z(-7pzwH|kBL1@#jgIcZ_4gh?b%NA3xmGN4S|5}(fNPz567*&C#NU6P z)&8bbYP{BmGn~31${FGKsLR2ZxlNcFg>I`9TP3C@8j7-RnlvnZ%h$GqGcrD|Ad?XLJ zg!Uf2A32PqSP|f(xz;I~T3QMc%uE6cMBgGD9v<=>G|~@>Xa-piRL}*|5z`9iDqzwR z-oUd?o^BZuDLwt;?b#kYokon=1b--zwY6m?#zb)xFjCxmf#0d18BD@(+~`+n@|~V! zlvWtlI{wFd3;co4_;Ugch@e^pX5bn>-`q7){ZiHTCGfx4r{L1C&sjG+R?eo20UKqEEhiMWVckUyZzP`#uZJbCfgD`M$W?QZtctsG5P;cS>m(IAhp5aTc zd2cCk8lMI6-%xD4Qb7G8U+1Wa9|S^OQj(R@uIiXAK-?U`xg@4}5Y`U?SbZ`s4v&xB z$GgYJ#$J7hn*1sEz9rcYD}1JdaGh0L+Z)>57uIS4Gb?%7LS71uRB~xDP*GB6D0(KQ zQI^GsOWWB}TC&ZjGz*(-Gg!OZFNl4&b;+(6Fy>)vprabLe8i5EJ?Z#|>KrXPGTgA@ zlwLe1C2rx{PfG^b3V3D!Cc8a&=3-&y``07nL_|ozFv)sDCp%fiAI8J3EIk7*AW7w( zJR0ZZ{1mU2awqD^pUu)EmZurEz=muuI)3hlml9eMEX86gIIEnZ|4M16FEUaE-Nb$+ zPH(b`!%IlXGXq|FcSGpsQw=kCU@U&&Kw6Zj*(j4>?Kr(uzXm>`SA{4$hBOCF1WFy;m~;Cz_9n+OmMiXaL;5fi<5Ei5hCH@MVq)Gy7OfLIf)PiMf#%b*Npk%lLx ziCRm#tG{kX(tR+uwHS?%c8qX+YG4VaC!SFO1ajLQg-rz9@H;M4BRI^J!}4XqcwE** zN7MPyQn}4ek9aH)JTluOVgy63X@|1k|8VaLA+G_ZMV5I;13wP+h7Y!F^l{MV?+{^< zMT=7o;;yUVksXT%V*L!O$D_AuK95HF)L^JqUJg_#`xaBq=`|^p280;DaiIrQ+s&cc zrZ310KfU^n9F7^az)9NUmQPAoqr>ZdCESf1KIKIN*Jww@0>0RHc>Kq}U{d`r&5lKw z3l+H0#qJl3>TFft$a?-B^1St~2ZP!ekNHwIb`VdNzb6b{Du-a%Z06y!np9~J@FH$k z%@VO4?W2jT$l3hGokwjxMS6tAXhe_Sy`I*)K=-;pU|>Nd#?{9W{#*3S_rx?GBU`~f z4*#8jncszC;0MFNJPds3V{y3IYJ!ug-M}3x5ic(tYOw1O3^^QTjty3Ug0cId|F^)> zqo_8)prfP1B$RDNJ#m=^3uj6L$$^RZjM=N5YKa(h$IWFiRiF&vSy@zwAUv@ve2{rz zv>C^-5r5Z_Cy)aRCx*{wNjbcvTID|qBPa=ZUOg9vRke0jSI^s?AR9^~u<*}XNXrvq ziv6qX>5=AQW)4eAKSVv821nu(BF8hXM0B47X13L<3bm{)DRfD z6%#?;m@!p;Ch;>yi2%~A9oeQG4ANDeUVt*v;#Ut~X*#7mDE9>OX_>_8&hNU*S;sH2Vsc-D=*nlvhH;*kxw6vZ;zRhfs73oiY19W5g9?4=Dx+cO zxJo9~C_S^$(yxoO_w&7|kf7civS0IyQn5B1mvKI}E zVgi=36bKk`+?x5DGO>lV(3|5WR1-Da3&Ff{ZjNpEGV6&-rw`b)DZQN?zYaoowzuOJ znifA$MGyA6z>C!ekmTj%sx@4vXrF@e6)?PmIA(Kzg(dWy3vnsIUbv}P#sIb7jTBYi zG*qZL6pdqEMRoZPSI`6#VB7&6Z2jr{wu6x*?7sTK8M$Y#LFWE@VNJiu#8=LV zQ^*|xz7@=8^7wfpcIv-G8m$iG`mUVa28ku*@W$OaA&{u0&lae_A@tsj)Xd5NnZ8yLIS~;U|RlJ+aRVjqzS*{0VAnO9tBN->3VI@z;H1B-;ewefW^jh_sZ21-)QNO}dekVYAY=G3OT}3m>{UykOo*WKn`C zEqy8jp3Re|ivFCsv#rvLQlmv3Mi{)0bQ`7y1xFhZC^^e_%*rV!wjeY^baqW`k~VDW zQcd4+z=hUf=R8f+_L?b~1002|=qm&w~&;Hjy$guCI2}@R3ckQjA<0fU{ zYVKm~}RujTuMi!nq>K#s`-QTSW`rE{pzXt}Mx zNazQqEVP5JX;~(>rg~)JPG1UhPG_RbsNLYNyYEa>j6A`5=(jps)LM6vmOULa@Nik> z#}px@1eOM9_6Wavl4`Fc2`6Gox!wgubTU?}Yt=I_amz+;uND^o091gil(>dx`f-L2 z7+>@LMKs}3T9%2a#6D2(t^U#5`r04w4dHJk2?!Ib0wNYQ%c*i9Zy|3WE~+iJ>Kf%@ zno?3*wL@>*bBtrDJ}@R*_`os0k`E-5la$O+tonWT%qg6Z@|!j#A79Q^q)OW;MPPR{ z<@Z*`Zu+i(r4n&)H;@IkVJgwPhZmZfjhr5WwTL|5tRJ|qc@^S(4$3o^D7v5n4M99!Co%Q;-xosC>+!=g`Oe!ckN<^6>R%v z+&0{pZu41kBmrF~&}6u83qrh66~iTeSG)OLu9n?Py!3djDrE1y|5Cj$DPYTV!){G5 zGnMqIoWuMqT{UQ;!E>BZLi|!=oQ0AylemJgpB^7JtWec7>UF{J`?`>CH0(bSaJuvW z^*BUG{%Fh}6kBI_b^Bz5;BH7YCFJAWxn=B=JP9s7E}~(R5fG5DFvzJz`rWWFin#1M zGT`8oy#MC@@)RB5$efUL)@7Aufl3x-maT}~9J8RU^}O;SwzSS1!ezlO{!3;;&}f!` z>cdLN7K2SahLGO7hu77h_@LhXPWRnw!QUqK_`g^}P7pq_8p$1)13+)(iU9>ul%7B< zIX>>Ew&xnyHPSy#2mrmE?(_k*fHi zaT{#VwU12y@hxf$zxt)0p=MqP&U$13*XC84`BO2YQ$Y2^;1^yP%;nr9bkqG~HN+Zk zMRm1l4(@T|5yJ%5`4t_sRr6uw&tGa`y0!wH0}$&d`H_l$u@InnbDrW*|G-Xku<5Wgehy}{@}n14`S8^6m)TC!-3 zK-Hh+pdqa8thv24`l{RUPpj&?r$}dQn#!jEh(QkJ*Kyr)2EXJ`G^;@-dI=J%xpMun6Ac4@tDFEJ zAlPzVJq%&B{fW81WV)D%`83b@u^c-brq!pc;Sbj(2I8sKKD@m7j=Sm6O2XRQ8{Q=s z8&$UE&6liazBGnQkE37D!#4QpVNe*J}i>%W$qh%w0?5 z=GRRj`LRD7CjiKIm!<*qDPvEj&4KxDhJvMG_(o&$(Ce~1TI!sn$;9IA%_7xi>!(b{ zgM>iZy||A2jR$GB@;a);PB>u%TU;WQ7-V8{3jC|zU1_RW7{B(XWHa`Po-|=dfPjB+ zWL<0Xv?DMwc3jl&ocN?&xG9EvnAR%>Gd4FI~5Bbh#^Z^yOXCK(QN&03b1OV#`ifjvXqwKEh!hc5dtA>W zP+ZB7N^Z!a>9jvQirs7ygxQA^{dxhtCHVvi7(bZ0S(d*s8yzwV@`l+(9V~4HT{oMn zKmh`G<<@gfVdfaLbkZ`=@QG##JNk({$ES~OPq{p9-cj%vJG|>|G!@|O>v^est(s|R z7!ywsNA}Nv_?or~{36_gSL)k{KiXK7*IkkMGhy#yY zxt|pkhD`;=TUMLm*YMvLzZ$_2K8mlrCVzUXs!XiukU^sDjGK9hS=8AcoP)z=P!rC{ zn_A=JL%|gjzEL*T*4#lAdMcHPYHYt6I=Y!N-!6tTiCe*uF|pV$Me1> z_=QkS8t+P%4EzarS3NE=JD5!6NG^mbrhb^LL&>(FalSt7ei-`Pjz8J?1>SANTOgE! zAv---c{sT7fssL(%eQLr8nfGu@)R5_I_y}ATVWmY>S$sV{+gZ_r|Xky9s+%V2qYuuHQl(tf!Tf?sWah5%^!mm7C z{^-DNIztP_NM#to_2czkl?==ga2q}YYTJF=USlq}} zTwCmvOAkt}c)Lt>G}vmbnwRlatgJD+xtmg;LA=?7`ZlJ3;Nf6IMe%?o7@ia-(n@@7 zGLg}ZlC1-TM%`dU&=XQwbhhmyS!1J&#DSsHPy}z>!AF2no<0c@3ALD;o0<&=`sOn5@$SR<`Vlpx%lazstk%^SH$jc@LHbC^K*+x7olzHAg=D zl~tc+8QP$2uv0D@&Rhgq{gUb*NQ__)1l%qfJ%^k#srDUxi{xALw{Xl4qrG8o22{RC z+ShC4eK8@=oz%VF6;0v{rNx{zyI*?$b08c0$V9i<47+aE1hwOqp7ddr6pakHZs#K~ z1}A(MMv;e6`W>=wmx8|!O2RuG+qoiwC<%!N$CGw7nIJfKvH7H%;jrfB4$INA8K33`$jH6KY{9E1MW%S5QTf4HJT>Q2UVv<6@ z6y<_Z7xqbP4v;etTW>i8l{8SjLA~uC&Q4_t6ot{-Rw~_?{nEUC37O5r%!o_51JI7Dohm3 zWY$s=YspAN&^g>=?CYsgk0u%=3XSWq>4tnVq_ROT-%Hc^{?Q$PPqD$#=%G9YvIDWH zeSZtg!KA=k_QtxJkO52HKPPJU+nc;Fk8Y^n(P$QXhv{iQ)K8q4r#`9|QdibmQm|-S zL*=?AB5mXCd*5h};jf@0^emt8W>YPmfyWKwoA4Lw zIir&GrhUg#li~zOaTTwP715D^PLQf(8zjoH_H1tOVH4IP?Ptznb~&^Xyh0knP1o2c z)UNe2%9IB%krDFdxDkJ)1gc>n>qoC`dGAC(3l3+|+iGL#5>QhIoS8oM;|w(59rg-v zRKZeYc87zpu^*~x$;SLW3O!=*U8m>hgHJ0lP=RD-hMcv%iJyLXy7IT04|)^cmViE8Zak{Jk=E#*5d4NSV}Wp=WkAbdS^n@0D*N?djsm&%BNC85q-5Bz(d z-~$@s`z;#cCjzV}4`ViJ^#a{VYr0~}WE?P5qS-o~Le6IM5nA+Mqzy(;e2>?{JwVt=61{ExelJlUPG~wWI$&S|_Pk~K#vp#syU(F?7Tub4)l=?|(y0Bda;`9r! z0Al1zD;r;LPhwx-sDeNdzeqhoZ7}AGH(QB$|87eKJ&nSAZJ5Bq%+`5-)@y{W9DE77 zOgMyUs?1T5Rr*TYI!qw$;(Grxn`~!z$JTVaDDDBA4mFfrcBBJ`~JpPIYpmx~rk79?fiH>%DM4v1; z?5d%yKdl=an8V(>_GgY(8!PK;TSi}ah5E$bZ}Y=vH~kilR}IfbwAWx^%`#xJsIhFR z67_ojhK@2oq@frL+|T5m!|ka@l^!DvfX`dW6n78!?zx-V%_svZ3~;NIUv;T8+EvU+ zC=>je!oExxov<4If+A&1T$s2Y>?1-2K(FVyJ-jk17brwU5}q4!sVGK%N{|IIXbr5I z*HT~Vc4^U~twlr08O4MEYB%so!abrYi3HGm^E|eEz3-bqR`@${5ZEd8NQfP{p4=0B z^DDQ>v9Eh17fKh#kZY1H3|7ZpDlD!bw-eRfY_QCtIrV!kky*oEyFY`=gGA<#K8cBb z`lLYZQl2dX5b9#b#%8Nn3D#mi&PnYico6xla)J14pQ#s6Gc~SacwZ!c^2a{?DS*gh zDEFm#;zy0M^;}XM@-yEq)=k7giTAgsmS3$c$`*L7z{3W^L3|L$x6`-JEp3J4!M&p` zAN9fcvoOm}Nnx7Y#QVFeLsB{QJ<*v*qDGdoTvYWC8>^6Xc#9*O`c_9X`cLK-N)(Kw z&$E9f1HMLps}$fidbNqHaJN)%fdHHdN)&gQ!#VBPt3&3Y=a=J;F3}-z}pba~!8ib#*wM2&PgCfPG3Sx?Qto}x< z)Z$WwN_h1IP<0E2wdgwP^OO{>R*+=agumd8$Me_vnen$zq0Ag!h2W&A9_fQ~g_kMSv2SE=k>A1KpHDWQWRGkY28#hRI!;X)c^>ZP>crtsnm0=pQSTHqLs3Mgg?@&6qlPVnJ;ui5ZO#Kyk9fk*JQIvLdfy2#ToYEF7S|X zuE#~d1SQIE&rhE5v^{GrUbTGn&YKx#^*R)3dnaS#z)c2|hzD!%K=LBeM$?}W{^vu- z=2<4hIl)k;?dzYzHG>*#{FS;49Uoj!|1s5>-~pexkvFA9*Z8;iPoRxYTCF;7C;jYN5&GM&h+Tz0)OA@W7Rk zlca>kZ;A7@$x-IFM@s3aCJ6IyBM7V!T4+o+Em11j@&qCA_#U6!#;ScO$Q1H#IeQ^^ z{QACal@26*QGn5pKD|zuQeY=`5*GN&6i`!Yst}iQ6<}_g@cK(H zqg-T|Icz}Ay;hE8mry=Ect-3@9Revx>qQV6qunq*BEa_Uc&)sorp}Yk)&>AR?~vp^ z@f1VvHJO-`)z8BZuC^fdBK?tA3tluhD{5#YFYi!KOdi^5U$m0m*9Q@ZlzyG~k%oHA zLbx}47R$|)qX^6s(jnuRP#+Pn)CYi}x2>8ug7M3*IXlAR9n2%Ce*}Hyoi<}arJ@28 zOecOo+!B4givZ;%!lZxybvu%pXASDAqs7E@XHbpZ#Y^=Z5#F?}uGcZhwG^O7>IS}> z4Ld9Ou#GTTM3{&zmZhg50<8R~8x(Qur^&Hbg#CzxRq`%&f6=3+)(K^iji6*JsCFe) zdd{u;Z?hVnv4L?~8U7QXg`yGsZvL`#R|#?J-_|dFC*`X)?G4i+&2pi&StjBRjFB~6{lPGS>Q=z`v>kwMO^I6jE0)FcDPJfD3yW_xua5@Fh<52)uUr0L#8Ku zLqo$y<<52nsa6`1Px9Kon1?otn);FA@hZ#TO!y)2!?Uapzl8@{;*0?3eo+>EU|=8! z4Q=C(jjb)GSAEJ-mdGhVlcAOtve;{ox|$jY2;@PT|t^4lSPGwRcE> z!tr)xJ|XJ}e)GK_|9MMDGZfeH*mEphEY0rIOn zL8WZU4Z61g6*bf{Xrq1E&pPE8cXAw8@x`VJF(3f5r@5Jb=I>u>j>&5i^p!7&+s{uA zNDmek78LqDKYkFX85n#!(<4VAQ}ody>K5Nu${0(8A;jD!lV{R}Bkuh;#WE`LW7YXY3XW!`rqtI8M*&|h1D6lmQ3L@TJ<$&7Z`H=X4-Tt3 zJwWATp~ZjqzT~CWMF39I8{iV&4tmAZEiD}>C1N_?e#!Wyv6AV(XRvzl$8PO&NTfdA zJ(KWt;)c5%yiUs*lFMfg<@A&le85RrW(gfwovI_OsjXGR>+23iab3d2#a;HWu_;~R z+t)QjbkJiV3!%30u*SMSk<0AbWl6H+ApW_q%jPo14&;yDt(IKbI>e?@%x$m9dU(-c zX9AF?egSs@M;rj;11_QxK03>=Tl8gjwyy7Fl!*sQHKJJ=DSOa~*s`muRq%T1n|x?~ zZD56HF9&8mx5u`zPS`W+z}&aJ-j0*2<%+XfufxxH7vFl9*~MpZP8*)d@IfGd~4>oWJ_mg=itIZarV3A_U&vecF}vKh^>#HhJc&$ zPZi543&N%?s@>vNEvj%cOQ|a`&fK=;XqntSw}@f@h}||{2wuGk9S%gmz27v&>Y4a% z2j*mB!*VPkR zy!=3_71X4GL0C3Z+w-pejevuH-wrMylKq z>DwOdC#*^u#``^~YvEquip=Bn%M-I%n` zb%q_>`;UJOxMiEPJz@xT*fX-w&SdITI7~opesA|4H5iFG5MdXxFX~ptTfTS<44+KJ zySFlHnED-+WCiDJ_-I)O;m(!?yKDsAAfbGIp(V({ZhiE6e9hQ(N0o zdm`(3XyC}m=SIYC;q z=^LV`LPELp#zzUJ*){Us0##5+AGD(LJ@N?q54l-7r37X)V(wF7xwkQS8yljkYF=b? ziGy?_%*U9<-rf`l^F5q$vhiPIe_M~X9BLIsBUATbNz^=FaJMBHD=M;z-0#se`O%e> zl!OQp!5l&`Glvd|+VyHC!E6)kB2`;$OUqT=PX(9#C|l zPR(qMlX+L5qvCNFs#Zy19$c`X1md3X3mo#`n@=>q)DCl@TusX%?hwStL@*pDrGpDw1 zPdqk@k}yylEC!$*9M*6#PFBRCggU}x5@R5Tb@Xj-#C-mzN>f(iyN@QgCAaP>QN6DjUdm9S_k;Nh82SCSFP0{zCRJCT1C{?2g^IV!%4I%!XP$KKT1 zikodvG5PPk% z7uKUp5>UFmY05&K5~^9O?1{;A5?c9Kl9mobc<;)4!%m6Xf2L>UKCjiy`KQb-01wH= z_vyaONOHZVaq{@@a3J6j%K8waC<<=FY7Jy>ex&%-${(i&)S*=sBAF%iVCMYc9|kc- zOcO6RZ~j}>QLI*Gef$4ac;w>ZaC{Y}ISlCA9GjPR;qGab#~K63zyL=r(=pK+T8_wX z^*WYppkpm??_xm1-WhIOpEZUxn--h`c)2h+mFUjVs>sQq;rgF#_&P=z^{(xV$_#T) ztUJ2yyl)rD+8W6dt5?5Gb%WlNPGsDkvjW@ z+R!D(6M-!Q1mMwr9Bjbc8H9N#`fBT9+Ohx2V5BK4M%KNu8F|HgaiL&v@J6C#ZD#3@ zUYk9f<14U6O-)VEt46@2D*$f3)*@<-6}Ap#OA6+PboT7<==RJ4#^U0ceYj2G%kU~# zU?97dOG%Yuco-JTi20*HU08CK-dBIMg*zxjzzvD+AT&%Vm=!tdp80mS%Z3H=a`w0) zU6>4g)Zhu;3VKa{5McYH;i=3CFdSD&N=Y%HP#gNEcC`H|tLl);&D}I0a?4Jc=G#1e z7<7gHr6=`;^2iFIuO^@p*8(%AbNE8ca{17^zwqCWa-~pWuuV5MukwN6KDel;C{9q< zuQfr0y>BTNML4*)fq619!?ghf9Uss?Z^H5lwh{RZ%DwUKIlpwu9YxWA(5SF~T8?b` z>z#AU9&-_i=LE8i2>v++Q6g2v1iO6^`>}@TkHt305>Ul-JJ_wAjRF3bKo=K-xR;g) zMP9O7`F5UWU&Hdni0|K#Ah)^%BH)&m7K#i?fbg1pM6Y95a5TLmCD?H%szhnxWja0! z)slz#IGHsrZ|PNsNOd^2qO~t%)uoTE-Q>wnSX|qb1V#*;Sd81J*H(|XDA@QP)~64z z{t1L-))5gA)jlyWLB4WWz)e1xVV4j+J#xD@_7)`S`*-)l);&yvpY>l6BGw+q!JL{- z&rLF5_}&GDJ)dt|t9MXL{~M8*6M4@~z2EFyuo~4jzwE3n&S=Qt%=EJ<*B99OvRr?@ zV6y50X6UYrke*hO$fUbu!6A=bp1FJm%}`2!AHn^QJiXdasDvy!Q~{1Kx&S&5UWerf zI0R&;vd>d8d~hI${Kt>b;yYi+^8>C_2$c1C5dP#bPBlYSM<)WNPmeDD^ZQUo$-4*Q zlWVll@_durB;~j4A|1&xyJu43;^Oekdsb84+Af$T30H0B98R-1VQ7k$gd!KtKUUIX z>cTj5Xc9wXDzQJ_WcfdP!P$}WIcyEX7S4^wy9;7oJL1_2{cwks)^2`(5lWG!sxer; zb;@EWhsE`RCs_zKrVWOZiuVio@`jn8o>>EibBVnX2d{&GJUwpoM& zqA7%j6WQOs?YXV$4O0=i-k<(L_?uM(nUbOGABv-KKB|4CAM+UYdb-e5 z@sDS^-;U@J{q-H3 z6V&UC&C`$CAhRpn_6xcuY{n7v9ZAM(j|q~VEsgcY+y6+$bQHctd3-wcAB2eyu8{HD z92Rb}!u*Opk=+c%2ovE%keM6p&-sPU?>YW^Sk@tZjcZR)2f6)sfxmIx?;J}~QF{iq zAL%lF^QJ!r6m4hk`dtR^+hJ&Qx8Y$${7?!CJ^jRe5KA7$xomH;ajGUM>o^yurmp^b z;5%ttN=hVb1HWjLC;B4%@}NocdvsJvSNCZOeUBWvi0nb+n4k}2ayps=kW9!~pLfym8s6sSm6SVm`iNsC8ag_s%hpE+9u~A$qGSn96T(57 zwJ`soc9LOEd)|W`o|`rU$MfP|jy*5IZluGtonoFZow-7`$bv+b-QN#i-Nt@-9#s1r zyA^4?u5wLeK)zPlT-Be6eXUg|Uof-lf-Z(e5~}P@O%{M;iD|l*!!9Et|HOU03VbfxSr!L=C)i%MBQ8a&RLdSt^nNcd zsRJ=9wM5GT?oR78FGl2^w$kT@sBgb%nB;#CVJ6^xinT6eci0JuBf)lJ^Sa%8^OCAq~LM=^UAp|K+#Z z$kGIt50(9$hI2As6D%zA0ZA|{46S^PT##Jh)vA6@;M@F~c9X0gZHr3yF1_y5J@8u4 zw!_dS{q15s6;QKR4=-lHR9WGN5g8d-e6pAEDz&z@762r}u?PS3M+rnVp?38kp>w$1 zIuT^P4-W_cs?sTe{ChvtSxyCqCkKgX+XJ|LnJ{pCygqPVp>JmP#>K@2@lHTM;I?;? z;cV~Qw$%PJBsOjnxX`4!#lqk;PGnK{xZ_fKd8~^sN-TgCkqd{w5fSTK%$;XGf2L2V zjbBt~o6<}cAB|Ff;b&+OIPYhy@_$p}ZtR^o#NDn`Du=vp9$RhqL9gw5kSiPV7MrZs zN-2wlRl?!i>pJiP#$KNt^w(4K*wRX+b+gSEkKIefMLEk9DP?SAAFj0VDP;(5Z-6X5 z1a3yH5&c)H5x$FjWm!XsE)8|zlzjG>4lo@{^rMwx(8k8E+t!aMWHoF;^(dz5pR%Cv zkBKd4sV11iy-LnYxDjUPUX2k}X-R{yvrUwFmTc`bV}QeWJ3WqCG7JDvC^6NTD-8ZR z;NcM*v{D7kFMbN6EL}%9B&|$HS^{kNL{YL)8z&2mJs8{USSjTktq+ehXb0(N(0M^j zV7d2Hu$mf<1oXqT8jP#NSx__(^=%`>T>K@5{ovJFd6m>h0NugPz7|^qC4L13{B$)Z zn_G!oXcWU=@Ae;7?W@xs*g)?OtC$yYi;^6BhTWuuU+QVWy)b~G>%ECWti)l?t?d7B zpobl9MOG+&2Ez`z?a-U;7PyeBL(TH3@@LN|%U;$S(%4|L?tVR-lHmQ^J>@C^M!Wrp z@7gA(aaR7e2fo6lPm>EvbMX-2iI;h}OF&B=><~&qvO(mQAZbu(sN$z5m6nzkp^@*E z<|j+bJpY&H`36^p0g-c%$MN#-#Fm>Fe*$2MtiLpj^TX#^gy?^Y7?q#fyyDK)uF&iM zb@@jg2&k`rmoDUmXKj7tJ=x}Q(pT_D4Ol%3c@YH1O+-R-^~S#K(Ss}mcsnem^kVe- zLuMMw*B(MP{cwfLk9o=OIb-y2LRwK{}ohZ*qtv{#cBWmU*NB20swxw=^33a+uS%Hr$-i03Dz55_iVNm3OouOh8j!u()5PCf?5WSG0hP9 z(2Z|@czCFt>`*=vR zQm<9i#}}bpVD;2D+~F``wdUDHFXrj;xzgizYqzR{UBsV!ub(X7$5;EXJZl-)&U}*)TN(+pjNTr(^QV&M32{5wgCM*4I@ol_ou`5M%0ac*|il z5Tsj~^BQ0J?vobZ?^eAYVJ)w?$mVraK@pwyt&&+@%4Ffq!ZNA8Hd4F_f)3g+4jcpb z&Cq6_GGQiJ4D-@^60@Q{nnmn3R3G{n`!`xXjy>1U&bjuKjzqXRCESz9stdXF|HL9#%JYfG;7C0E}ZX9y!QaTde z1ZG3U(34$S;Ec(e!XroA$`e)43fA7$M09|2CmO7+S8U1jF{8)5-mwRauXVrno-l3- z8d&=vOY)^K1PY`+Pz-l>W*j*m$zX+2zk>{@=srm)5iD&tkL_b5(0#Djk=|RuOX#}! zvof85M4g+=KT13(cIu0O@~6$l*H1`{g6hpHHRG>*>HqkHaMljK-#>$%dcR^@Lwd4BCTjE?xjEE>Fmxcw;D{qU6n#h~B*+*cD zjhiICGt@+*Qso>IM~9u0p~KwZmAL$0a7YQ0;E4K}nsIlBMNNl`hek?j``Ud#m$0x^ zZ*OnmSJ+4UMu^}ZZm~CCqId*WqF3r7c$0ii3I0=0|C1Oocs!`eW%=6S9maM3?}-gu zYO9N=M4`(ou==MeE6QJ$x^Zb@qTUDH>6gdQ-6#LOSr&!P;@L?*Z!7aV0#L}Bh{v%3 zgUW)%h}P2E({=#3c&-ozP&1mH7bDl&7kIf`;uyV;5NX#OXPq8*EyTN+m^yf7?%3|c z2Bvqot{DTic9bLLqsM-qD$4d5a8gmeB{kv?@ZDy+U-ID9ubeq-VIm_U`Y@MTZ*LMx z=-M&E96@+sR7|{bU%Ur@IsKo69>mLHo~myQHT^8p@i7b3ueKx-@TV}DE1l6ScxVbY zJtzn_FAX#bfgH?!MG$^tFsiT%g--4~{?+yQ!`$P0z4YY$t#e4P;~X-hR`=py^<2eZ zy@Z-c$PAZFKxF!Xov2cyoZdm_0b+^_j5U`=(OVd=tqLaLb4tRO*+r&Uw*+-0Bwrjs z#iNZn0-sb`m)R{naoGqt0F5Ss7Y{ETJYpo1I*WM2Na~{(DPW`hOfddPrAujh&(&q| z>%n8dq-28YQns__5d5R6bP3Bt4;bTJ&l zyra6AW#0+N_xyvlYhpxpx6b9F3J(!z3EaeMdqm#S(!qpP@PJ?lGYhhMwjdI~ASX}v zH;c-3!cFGzFPlXb*W(G7C_a$c%ALle{{cg%4iO-GhDTmfU}D_#3zq0l<}us%lX(0( zyYuKTwcEZPBI(lj9YKoOj7LQ!6TQVeGS75LlIamHR6ENUo{GmBab$d4A<@U2c{eBS zeX&hz8+mJTnD^uTId-RcA{Mzorr4W$cyq%RF?7t9ig^k!>36m?K{l&nB(>tT9(oCQ z07NO$JE#5gMS=+%Xn~H}tzr(Xcaj5^V-Z2XqQheLorS`~6c^#CbEJpuhaO!Yh*s~N zTo1rD;!8n^WH)qu%`-ibXp*3zvNd|x_7vq8Bm-Y^_cblBMwEiq{6DITo9oXZ*4u_J zok2@quRa~D;{+Mk^=^;(&SvecJhja`izIPvj1*up#fJQyD!W(a{9C$JO1D>B0+M`r zu-Q5~LKhSax47{aNA7TXU=rD@Vq1Btx1Ruv-dZhDxEUFd6wmP35@Z7{&aHuPg=jq$ zW0+bkKRB*RnU+)T%)0r(eh>O+GBSD$Pu~!GYS1qpb5$Rl18jiqZ*Yc)$u$<~G%x_d zB7|Q|N3B&0rgprOxC@rv?4siThgKh+?SW?y1{) zVI~40NF-8u6gWpvEJzFvc>h^YDLV77{N38w&6C2_*d*6;&ce|(;};gFz>RCv`^+z{ z=Yg?2jq}B4Q7=1t5tP4nG$Zg|M}t!y>xqIJ*!15r+Bg;NS69?4#F0pMbauwidwP2I z-4#Ej4CaEyGB_{*BS@g|U_5ywF1-SdFj~$jl2z_RBS3yN_|G8u^l6Bnr}+@mPj)fD zi+kCEyQ2=`G}K7f%l>nj&vy2_o>t8D{=u5OE;2NKydV)XU$K4$zQ-I?Tb`Ko5BRfD zpod_YX1-A`K`V_zs{7!G{vz?vYGvYQmkJKk^y(WY#E&Eh!G=|IzWiwR&+aK?1YV|e@r${Ni`~TnNX{c zYqw6$$fKM%FFQ~(<0B#)t1$qf|0aweSe{S9m%&Y)JT9v-JAeGFmN!YYUDQ=m+{LN6 zt|-59xk<6|;;!^#X-bNhkAmH9pYlsQm5?rWF}i82%scT`rw9E4wkyIB);O5EKbi~2 ze;8oe?01au#XxtPT>u9)+*>lAO;ayDt(Y=obV|=A)s|i{f0djYH9NLHU%&E@w7Rfp~GhA&CU6`McohZnGEJ1Cpb&b_Dx5-jEiBS+4q$DcIX7v+0MPm9@0sGpjLk*G z-4e2ZhJC(IEVrU+pbp{d!T@@t2a_vWa=Re>lP?`p%F4Nci6TOU9$%H<1UhLFBG?}P zdRzrH7Xq;OjkG+YWOQVWrP_Mt1_E&8x-?U5>=q31SfDXhB;Mic>N$8LW$MxW%k^Sw z-*pjKM*LSoe(llX<6HcLr~wxil;pVOB_&cd3*?{H z+q|7z^2_J}fjnCCg|~3A#TKo+P7gsERK%t5z-btAZDlwI`5mp}I?_R#uWTPh2(0S+ z!nWYPIqEI_ej0+YGC%@owY{h)bXfRbjT4Rja8y2{WNP_u4Og&k)lF~+=@Qfc-4w7|pw08D0WYRzz#3>E>G zqt`g>y3jKFG6c)wjqly$F{Acf*A%>Gzm`?brr&yrP%hP#GIfZLApm&O7>KuHhK=1< z`W!$lFT|%ht*EB2`C;Dnxow`fw)z(7b6|P|*ZaT21^YEN*l*rkS=c~8)Z+f2cHeUq z6~9~G_{{<%m_(^RkGEEwe^XQkQ|!=5`{Z~y8JDG-%;-RB65?~8#VN~WmvWa6CnJO& z1KL&}OQtG?8oR+4nZ5XUTOC|xWw$z4rH_rm=o!P$0?Y@4CA%eVWAB9pPT!|Ik9)Rk zr^N;jco@(>7tS1_(nf&4`^)>5FpxuT^g2K|E-x_CU?xOM>=HJ=6OI>|p(q~bi+rWr zluWLMo@ue(b}Ld`j;1fkN`LMj+uIt{uw;CiiXaC4sf2u0P1NhYGRNiahdwJSM73`8bjfJk1(Vn9W$qzrH0|W5AA~gRZ{k7i zkH|%k0IH+*eRpE3%%cwqyRZk=PuvL3|yuv(y7KyI|Z zVdU_Ou?sQ!QBJ>`nJO$KzYm^a&diUiuf)Y~`5@ZMzpP!CpfDuvY0u2*=iiG33PeBT=IRuZ`x>Fos^WTF|DNQ8zn}vGHOA4M^MnSQ?_GirWi(g;9s>ztYO*o0| zk5*kxuOhX$KR@akctq~Uq0l!;{@@q(NQpfy5;Y2akD_ME0V<; zQI8@`&nvTMeNCBN)%#Z1^B*LWtUq4`C@B44GPkH63OAdok$VAS$469xwpGn&u~%Q{ zE=#ME>g-0dR^|x;f8PDd>$!myM7yY6{R96a(N^i9;TN8b!QN(tVbW9hDF5eVUP zjg3T+XP&$Id4wVqF=St|XC&8tm}Uw3!_*TuRElC&zwx0@skA-N2eSg?c%#C&Qn)4g z0DZ(^$52Q712-mve|ddR>!5W>tpVHi!M1({8FIa49*ufMk*|MaO}Io@&|nQ!E!WfF z-4+;G7`}Zb)YV_lP##m>WcUTH?gX<%PGt1~Ql_2wC0`A34)lI^k^$XpeI_)Ub0fOS zADilg&tcX$1X~Naw~wn#YfvgH3|a6b1iW(mO?wHmvb2HFZahL<;+$~Rdny_}7OK|+ zGwnZ}h$`)17|;>1L?_9$dTR?Qsm@!s&e36%6eOHO7*gDtGkAP5Ww!SAUK-XRQt*vSOHRRO#T_KP3xe}VaoaWQfMJkb zxyV}r+rpnt0;69$1}0v&rmPrR8o34on+uXf90g!x9G{FT_IEqy#?C!$H_N~8#g1cm znLZmvlC+j0uTL}I^^c@tN=iPNFE>@39FM7=H-2JkIa2=^ z@bbbTT|SdMvCIkIJ=$Ox9{s@V08f#ZhXl2dXfW)b*)b}yFQXTKw;Bv}S^G7zFs8jo zI6gLo@Z;l8rs59Xj-Mj`v1YwGmlR#8D~I&{PJBEOdlI9x)qSIK-2!5x0=vnhiOE_< z$G9<-wzmD71EV530ChAyg_}BiKOLWk13Zdi61xyO_v?8F{^Ainc2fuc?Zacpi9I8m zY9b+jE`4w}O7<*#zHFZ4_H6wkonNg035sl8W(O)QP;>5(` zr)+qbi`u`UA7oPY4f12PbqU5^qV!@uPvi~pv|I}zt0;ELMrK$8UqQS6(n?eH;I+N| z^ZR!Jht3~95HK0l;4vbmt_bL@1d_6S&b3U(smW|%A6A)9nb^E5J~Qg5OWnIe3LUu9oS*jAg6Gy2 zv3I{$CWTAFP6mkg?$qh$wxLkd1)fV0^1Cy;17!gbI2?9GCPu5iwN8bJW*Af1`Dam- zMbjye?wps*FY5dIZesy8Tmvt!KlHqRp$Nll z35gX|)9iL9M%}-uNen^nQhBG104fIHri2b&GFK#`^DDBZJZH6^jOSSJqj@>J!t}15Bal{fco?o7#*%cMNj+S}3*B=!L{rAQ#??fkP z%}LiB(#4G3R@^(Pc7fdiwul&#+AVZ|oQ40pBpmQ9rQth!ag-oO>~lcgNQYEmJrkb3 zB+nZZkbWsuBB9v$t7&bem4t89q zGdhi4;<_;B2XmSB!sH4mlo_~1X5qhC`R#WJz;bO@-`U^SGIHlB?3>DgzHY(mK>n$8;hZUWrt8+)uywNT;%bvqR=K z3&fmuP7^b~4*^D-S4`bB7Tq+T7z@KMhOMgYK`G&N0e2Q7es}gmW&b77>#Fow`jniR@vQ)T0aztvLc<{~Ty8W27n zdhKW!k;qbiT1waRmuA%|ojQ*)?~KxeEX+2QjaulNGhL2O4KGt0>QWUqv~$D1@w$_9 zM13>@lg$?}xajTq$d&2fmQCY-T+N75$()FJN&0=6eZ8s5PojCg>XbD`jOp7}c%i6( zKofwMKt~0KWhoyB?JZr{nwKNcXb?m5Ocbz=rhtNpblE$HdySzHU1bQlT_*?kFTZTd z(6{SV9)oSff+ZL-W44SO7@U>+Rm;Jf4za*kOn9r|i+kj~x<|dZ6I*iInpnCN+uC0m^;DU$QDS>W*2zm7n@ttA$^q{a89Knp>06}Z^V^^vgAwDId> zsP~gU*6tLj>Z_Gx4JeeKkB`q>(fnJg8yW2L`j!vQ$-%*a06+VGzr>)acmKOT0D}EH zEUb8I8T{IahzJE9t2wu{HPZXx=bU}5P8Zc-@iM>J$-faF9XiTxNcj}5SQ}PN44u{k z$hnuXjo4SQy4F(6eC5C*EB?XiD4iLu!?TrTt_>}gpWFIyKROVg=yjyC=_h|r3?@L5 zGQ$lK`j#_tzQ%Q&KrrHaZduBzFm(A+%$)N_fCYxvPcMrD0hMYC5oZ#>@}=Z!jTwWp zMu#;YZWk3Ml^Bcz!h~d!VA7CQA)~5eDT<9Rc*BE*wKm_VR12hSqH_J9a*{DR>fL)g zs@k%>I=$(=L}+8^M(pd`A-QlsLuLr!f5I+d-t-^lH}}>Z*U9MHX0`d@*BYI`I~dc= zt`-B!4F(;7vng&$_xB8mEKif0bjdP%;hQO^?S_v(mHsT4rI7xusjRcH_}3dg)!(7u zV*22Fx4wVfGWPjdf)bBI0Wkx7R zI+wg7nhC3Aw?EogKB!(E0>Ytq-NyX3@F^OkYC=e!NouJ`Hht)2yFZ?%@MzZV!!ciN z=5(ExS(+*0&H7Uj;zg}Oi5>JpYvxaSnyRdhkeXd~a1C~{P=T09wnkPLtgxlrG46_f z$(wZuan*sJMnAV1;tCLzosb`rk2Zn;NwMrFv)+2oM&q9#aFJvqLd{DztD))rcu+`7 z-nhDo>~4FjvQ41H4|ISAdSh09Y!dT5v})lKi%~{O4T*obR`xps^uGgS{2$Y%R+Sd2 z&BlJ?TR-Pz&MBaw&FssmJRpqsK3;KGI<9mWPZXS8FKY6~9km5pw`gYnIkica+a>7x zZhRUbEK>CTBQh~A0(VLs%ir7M@%TWZ z(zGL?u~(f-`P^|+e;ESPlxOHA@w`FF4%=XgiM&aeu;cjLeQ))CNTF-iUDyzLx;gVS zgh1ztuz2?hp-IUAZR}tl2r{Vp>m>aH4OIpFWqA%;wlVj*Y-t@9!(v zLjcH{lO?b}aJ;48NYkilv1>hO9(bw>+htP>>4&)>PC?->bp+qD6=j8ZveIElTH#Ca zbe*^7Z70L=E=VHy$*wK7C4YN>u2};D+@V@5%Hp(G`I-#PIE3!m;eoDTI0#LL(8=|rt!l-SZP+`*RFU1DaXmz(Ci#=?uBgAV{oJ2d;kT&)FCY@h z5MeZvRFtL%8B8W(13)L)%{+lT*Yqayqy-*k9H7^{)B|BlujE|X4*O(@qKe%Nh7*77-}PZH-PuSj`Gg|CR(R zII8|~nH>cG1;^SV1LHqVKYKa_0G9GI!o+XJTT{IGL|*oOEBV>4=$3qPH{^W_&MPVGacnl4*;hLGY~|52Oaa7$ zI!zXkEDvHnC^IFUPt9PaCzEKf;L17zc=cb3+x{NcJ#3FE?f&6-A`iG*5q?U$h)Z>a zO()V-X-Ro`@rU2pE87c5CyI_u;l&?=zM$yym{-3<&=UW$Z#*;Gih-|MHWL1ZivaBV za&|-WFo1uZyS)2a{QyHiuVxu0Ld_&xZ1SB7 zvSyz0_%j_g)1<(nPz9U7o1@Vt3ubFb9Q6y|x>DP@WQ_GmLMWUYv0mKyVp!@4m%UAE z^#`w|^@&K>E>MOSkMk2_^r3K*m@8c1PpYmn%;wOx6`OzXWCVp*F=@WRXfo>x?v$rS z%+pXDFOW>U-k(_Z{+^+f9&@vf@1<%9;wVm-d-tGO>G>=5!Jw7xYCw-4kS z`(t(Fg;V;e!smnnJ^%mZ0!*hke;3+_RaULz38unjN9Zmuz|s-B+KNq&F?dp{46ttA zK&UbK_;|hE>dAC{bEpe!>|g-lSC|$Z;*CzEp9Cj9TQM=&m)L#y^QQx-gmm$3m97+! z4PG#I=r5!@&wA6Ec$-BNM_HOU{e!XRY5sHm%J#`#h|Qyx;lEf<+_e;c(DT}}^qsvL z!Q$_G8(<^q)Myu`J{eyWL6%1f{7Dg->z(yjfi|_1yQ@=ZPDNxBA51}|1 z7h7yW#1`P}fko!+{sv9A`*F&&0`BOj(sow5!535#pjXiKL&V)dD7K0I1_N7yA2gA= z>06Zy|s35{gxwwhmSzgxZU+62?CF@LBz$Z_4n0a^m~-<++r zA^;WdW1nd`C9Ux8vrGtaWp(O*y|OhNFsw9OOEBWjV6MClni`;L4J(j_=!2kzS`>x=J=Be zAhn?VAYDGDjh)Z3Sd?@j`C?fcjB@`ce(4pn+rLn9Q4x5s*t}$>G4FP>#0{v&*n8tklQC7Kqa)>mu-*DV=Zpo*Mv&s8;C?ha#`CA#Gr52wg(me=>D|LN%93BHc!*j-E} zcauSNN=n!iG{yjxu={v#uN$Oh+Zv3Ji4sx@B5ZHq+zPUXKD!1yHz73CKgZV!^w7GnQB zk+7*iRa~|Y577jfm;z0-Lf><8{xe(HiaB}c)t_IjjoD|3qk@{D*mEnjqVSsYyZ__Qc3tnd`lnoNbIk{MGgIEM{)54^#nqTi|GdwD4p(kjOgq`!Tw1H zVQ=}F6Zvtufo|m&hUL0BC#>V00R&(L5PMXIN@VGDEOc`lo5MC4B}xIZVkj4|GuNN} z`0k5xkNL0B_)MW1c{t>h@gN!K+9*%%!o|%^e*_je3Gm=~fTL5+tph=Fo2nDPiLBX} z-nMd!#P^uuI%%dm|FpGPHneCH%xu{7Zso-a@cR71+cRT-da>gy5?XfgAWC`3vl|+& zec>^;Jw&=nAgZxXAqX+fcs3Px~U6>$!6AK+0ynABY_n;#zHe z+Wt;hA(<-(^I=Ca^L@*kB3S$v%Q6jI+rz3qHDTC*a-?KA?guGV;yGrTvMAKfIBEtW zhCtJZxC#<(>o@n;af83?uRg5-Ffl_|7~#7g95bDT(*~V!r=4~!3@E$h{2-~BX3!V# z3&C*KUA&eoq~Kmjrcp|uOXy`a1)$oJj=Sol-XVE+PReE~!D|?@OmFe0ix{Ai2#ors zUsWWtJNketmDBF4H8g%Yq}Qv z>ha%Zdi9j1dF>WQe|@bli17-Eog`@$uPo1=QSA|{3a*ni!ABh*tlNLPSG%``q1&hG za@w4V+gQ}^u1zvmRW=kE*7= zaarwdJTK~a`J#@~U0eUbq!2acL*g7H)3mEO?hj`r$_#>Bi6;5{!5w$OFolK3gSSa< zS^#a)7|P1x2V=`$+7RTo>^t?V4KcLD!u+F?-Toy5A;z5s%bl6?@Sj ztLez;6$v$PWZbO9NNb3TE5Ye57X4=+R7i9L`&=w&1aH716%zD_CnzZByw;J03vO>~ z`{tv#5yIA{3Rm=1a2v7ayyXdJb8#hM^IO-8_0nMf+{RuWg*^fE@%0w88eyW$aa`>8 z7&rn8Wf|{9+;o#sjnJSvFjbjUps>Jpb?{Ww!U+mrhQuCOd9Y|u5lBf%`O|${A;RKp za}!PmHTdsg`NH2$09ftADL$74BecT-x=hH-_pQVuV6^WX71&qcH4SyN>s{3WauT-* zhtBfLqgR~kfiXoaG=%Sw2En%xh0Z6wuiJYZw@LEw675d3j&t{_Wi7j^Q-@w9G(Kz! zf&XCwwN_S!LV6^6wpXX#+u1wEwavk@`hN;U9r3atwrJON!_B_uYbg`!Jw0%ooSbeR z9<033aWRwW1EUYkD*BD5KJMSW(9Z9|_1Xv;ci4z(NLX;IXss%To0)f=R9ZeN_6TYO zvL5&RTz|%9>+(mq75$-omq1dsBkD4*D;?cO%Ug1yU(&#|XT;ut| zSGJOOf-l_;(+# z7s7*Dp`7RE@P*$4;le|IkAM@6`c+gOz9a@#*F!w*fTJ?HogEAkP*nyW+s`Vv#5wyJ;XTZYj4S-5O@yaz_l=Mv!<{JUzd9CXef@ zTALYm7Zb*W9v!FwsjS;o?Bl@Ob+%ZMs%i7~7My8LP7vtsn4Wom42(l(WPt8|^tpd! zZx3JOE!pTJ?+PNY@V#rdP(Cw-3s@PB-`hh#IHTp>$k%Rg#xC1&QtoVIr(XSXQ7(C> z_*oY@BFk=h2G3 z53v?+ube(jO_oBe5tv(ZVP+Qf^u`)DB@8Cs<2de{9GP#*NIa9dTOWnb>%U-Ji8-{< z`+!Cy-@R4mUY~)!lk;*TK&2KC>Pj8x)R4#Ti0U7vUd@DHQRsnNn`V0`Pu7QgQ*Yc0 z&Y1Jx?}=}A+ka)<2#IuZ)79p2dh+AE-8k7ngc&0Rwplp6qJi7-K|%gNdK>2WThjHf zi)(yx=WCtOj8`1!KAP={O{)SWEgBlt6Vbl6tyUyPkD{R80fj~Zw5}>420ILx%mu-P zT2K*!vTW!S7qzY=V$(k>O@Pg=ZyX3U15SW287!%oOg-=yYklWV_w+QP;?74_1D3i( zkH#iFA;O55Xnm4iJF+|-yURv+xwmiI)3ZeAsQD5Zw&MIfQ#@LngzdTu7N(uQnUOZX zpo4$B);2S&=VUPk*;^O}rme3Ci<8NV>Wet2P~>;Fk3F z_VK_|GK_mUeBa^cM*y4Iu}`YI%SBBX!XctVN82f)OM~UmW;;a3s006_JXGAiTg7PRh?d0D`CUB$evMyo@ays;59Jl!z*)DIIj?Q;@()qVZI^BORQj-M zT%x@ci4`6VKkl zpD_L#&%emOZ`^t;Wm^3eE$DZkrRQjdOXcs{q1#DrsIe;wn`XN7Z(4Z4pbq;)kxwwT zn*Au2!D)ial`pPvSVss4AUK7f03@%6+$&un)NpWcN_{pt%Ufg3g=`3sHdk+SRol{8 z_32vD`Z&5CK;l&ylRUVm)fqCCeO>O}Xy@LbbQ2lyL z--_S~_SFd!P{G=0*x3z4Cg3<^puy#)vQr%mRq{R)&GEhVq(FLIS`^D^fWhXTYwkl@ zrUoFhaB( zy~_*xM5K@15A~0~82j3nLRnI7!0LLu2>`hsGjJq|y$!!u1Sv(yn+{b)`;@=v^z+7KOiGkpUYnvy5dt6>#Uad}l?|%KJ=eVxc zVM8^CE{THl6r~dxBD)np2{&BMpuwL4{z;*8_3506 z8Y#9^Ra+I3Ryy8~aqZ?^bfEQ@Sie05JpThh}pLgV%DJ+9#Z z3@Y)>`DML!Uc4)Gw<>w^S>X`lT5RLJ{hiRS%~$QaCG16DTx-1QWv}o05pRwx(LIA5pQyqt?k9!;8ck<1)c5-cn%M5>Ev zmK@5GrtQ8_KlzYozoc9tgK-MPDufxyf8EY;I`r8r2T2bK@c5mEyQ!E+#k0jM#LJtK9OD4h zTh5ILSO31O5aVpcEdhCCriko=rijkT(b=u?Jk8Y>JGQF0TnJMAT!!}GnFj8%B~fk2vvt46_R zDKst$XZ!wsS_Y?ty8ifhqneDz znqJfLn8iqJZA1VkSbZd`HHRV3S&@0;jep26ZA*BIuqT>d@M=&}OOx{j2X zuavJ;3=3Ce<%~Kw*8Pu3Dyl{@U2OJB*^$`(S36^gp%xuciaH}I2IqzeNoFQ!fb&Bz z`lKIyKHqAhFF+w2Nb+f(uWx~;t0?-w_cU+3_g%NjUEslb7c9FXu@1H^@CFrEZSs40 zc*CP6fm0(N+DEixI{Z;rirt9M_c7&aJ{(&g-2lAf> z1m00MiE3%MP`YO7(yt%@-O2SKxjy z6`OMA{gLFB+?;ndFp(@4>1kwN_j2x+@PTLp^Fm(>#3 zn@_O6G!f|Ay-VHB4P0)emdhP2zI=+9Ec=q77%hB$Mzt)jYRJHZsxM1u1??8h@w3>w z>I-LRBQaJw{%CDp4X{N{rB)$dFg1Q^Q*okPAi1)O-5|yLQg~me$ZArl7`hy zZNGgNU-cI!l(3NlMS3Wdo4-)xHv-o;DpW}(6owr_H*M}b&0)5U>Xdhl)SjQ-W2Dzk z6I(0soV^qHSpe3o_2*dTj~#`&e5|wRe%1Go(Fb;C_h|5yNG!1>*Eo$U{4cJ-9)0Oe z>in>3%(gQE^NjDY7n=gL`h$T``0s9&4luEKEO{Smb>o2rRh3IRqiE*uN6hrvOeZx& zrcJOk3DhTB&5-s0d3uIe--g0@ch8 zKO9<$k&%U7&bdFu^7niH^4~u8IE@Akz$14n&+Adj!_0ZoodNI;kR@Q!gFGD&hg##- zHdgp(wiHE_VLCvFxrf0a2x31$nkdbG4Oi$jwr?Z3jDK3H&%q6X>AI@nk>lt$wo+>N zjnc!IIbmRg&NzG#z_pKuX%NUqU-2YhOV}k}c!YvGEu(?z5wMx=R#PAN*-*B{+Wapn z3HQp>mZS6cC46t#&Q!J)ozVPoc?On^)bY0i4;~q_ljfK5-1IF>*yD@IF;w_pUQ!MD zJT^wzzc+usqSnE`IGys1NO*hf{!3XRo2OmE*s5uq8NM0E=k`72+d6b2aiAAxp>F6n zJ%Ab~=*!B=_PvRNWnit_5tq0kwx0B&tDTEU$AbQehbMBp@MTxKid|23FpZO+*7wOS z1hLm?zzMf4f(`@%C0)4Px(JqBo)0j?6R8@$QC-jtPZE9UPYdKQ+t=S2${H*_QB8Mb zR`l}|!pEbNq~ab(@t(Ea?EUg*e}ho=ieaUn-=5p**0J8s&?m&K#I=P(Cuo)N$u;@B zb6Yj4a<`~E&2ld7y!Q)6v~cUks~~<{)J*hr9QX*_m+cf*HkA|H!(#%hn!I}KP^}K9 z{gcOqD5C^2=%)PDldOykYF->G{Id7RD)G^awt=JghwBak9(1 z(ME9Ke%h9})@!ayxeA=~?CXh>Bo*JLmnKd3K-7M1RYoggzAEP1I$h}?0BCMx=pM%I z10%lqW70~0LRHC9ZfD#>D5XHEi7YQ?Qr6ULeq59>{6V+yZqfZi*VC11#9A2|K*r|~ zicCe-lAqi&V$5;yXt5%EiH83c=5QJs0^gQR{qW!O>f7lXVqr3|aj~)BHtp@&~%$ZqtQeYqb1hx>WfLF6<1vWQTm2 zvG-v7_rMq9N>mmo6`3$zq(Va455q86ZxEBYp6 z2@nVbcMa|y+}$BSaJSpfd)NE#`_^TxS|iN#be%eV`qZhtci}!iWPbn79#>IPQu3FP zicuj=94yxXqN0;;O4V_Frw@+&F2zH6jl znJ)jlR46J&8`G3SAS>T zwR&CwfM$h$?@Y-N)vcAh06nU}`8<_Aa5@nU*WvrpAd|7ELz?H?5&bY?Tz>SNp`hoC zBrj(B>YhozKXj`B%~{#XP7>)4!{^jq`~SrPteV8q#%so-1W#MZIpJ~p6FxhLQbL>k zK_`&jf#?PNW9WK17!4v#R;APXf z1s_Ds0dJsIjsW6+FbFt1+WLblBkxEY9nRU1J5KMXgt)E?D0}YohpLSG5so!WwI;I6 z6uLMuEC1E+ zFRoQeG}ybcU5(_D-5~Wd8np zQ951th^fn{#rSt!(rz_{+QHQMf5u}n@tisfxI)^lqI)Cn+@g1B9e667O8m@krMxk> zP7{B!g>sGlfnFgMf-if?%3v}_SCQQ#?FAw0 zCg;7FiM`T{Oe0b11#I7k@89qd@doZ{6o!6H9nQH?2jTLDqlP^8c1R>p zH;ILcidv}D){;{yd3Wyq+EIbZh|f#H-OG#Cr5`i#@U%BGBO~IJSye!m6$cf>{b~>5 z_k0(2Bd!X|7WH9i;-C&rJUL!!Fuf^C3eF#zQ4mR!te8Wm**ZOSkdDSj02H!rLzEX1 zLL#w2?{KVAtTfr6Dc=i95TO!4Wvs-FIk)Sh`}Gs$y~42VLVKw{r5>)U4Uzo38vbis z!L)DtzQ_RfDk~{NTr*3Zdgu9=vL*VC$uFe&^dZpG(%qR2a!)3%R-STWt1ViU9h5qa2 z`no}$aRH6UqR2q^Lw)+rP`;T&^z+ z7}Hm=QzQ|GyPg#jJ_O4Tj*j-G&wHy? zD3b$?GA9YEfmg*o&w`9=pdZ^~gGhlXUynHmY!LP0?x zotX525{nE8kXEkH>XZB6er~cgrY0^9yr}@^205R8>Fw^fzO@sir$>C;`5!-jgys(q z&0ql2g*wUmkLa8^v+&@9Ql6FiApaYi`JCITpRtCD)$~{gpo~Oqw^X*P-skhUEdDxk zIs?`7e9N$sCISb(2Dr^F?V^yI2x<2U3p)|gGdLT3g(;jb+IBDA8wpo0{-rNpKUZ?y z+o~6HJm|%|*KRJlJo9mxC@g*dmlp8n_%n|4nf*>h=M~IfqkG|z5jJ4eA@(CBJstIC zZ_e>$)#pEh+?=c+1C3(sF(V@i0B3~vJ3@B23_HB24fA?&@sQv*7SZOP$uoiF0 zYmL5azvn@A-9`3po9s2hXMWVQYvhy&U)!eF>2meq$Z7XEigBEa*J$-iHBnfKM6|E!#O3hsySzAB8mk zh;11Ho^f@+cn{P|#5C9$fz5P|L=fdurtIOpmT5@fNL#Z-1HT{l-Gs1wsKes8u z)hMQoR1=FtU^T{sx@A#OQGy5?o8i%XRq%B)!8^ska4&#~{8j90!34b)i`V{uc#YX; z6bGF0{p2>SOiUbVwjYOfgH115r>qJKEdQb_PbPL(H0a`L%rTeM>xa%S<7Up$(bIIT zX4kUbV>B8AFo6Q`9MoC9cRNI#2x%!$ZDkS@DO1yOj2fQ%x;Izi2V?@-2)xNBuW-j} z(a){#9EatG8sg=7AzBj=f}kzjH7&!EFMc_0)?GQ7kRDHlr4A9ro!nT<`Wblb2!oL( z;a~w57`L3Y{gTnUtH&dvYjnA}McjJZXz*Eg3FN98^lS+z-KCt}fQGOUb{xxgR;_{8 zRqk7(RLl!bl?a!zi}l|5dnu zA^Qig;R}ZTX9?;cB*TRW0=;Q;;Dda3H32K9$v9OKD>yA6{Qrm8+` zY2*hef6xE0it~=;ySRoL(uJVz^IoRZ%B`J~b*ldc;hNw;~0p$!4&N6HVKV(A*?#@K!$-B)Mu zNSv2{>GDxf6&Tv>iNDrPtC@J#_XNymFd9Ul<9PY`f5jj*albt0R&)12{X2bx3IQA)Ln9r$`A^>b9B_}X z;+ud{QLlrw3A}yNI14Z?aE53jGNYW4Hd{obD%oiDt!ajM&eV*bSqv!h^-Wx7%&+uYH@?LWZu7afT6N zo#sJ4X<>~sqjL#NY~jZBcBQ@PZVIP?eo0lOja9RJ`gy<7@RpDv~gG zRwUf>&)ZIC`po3*)$Xr)558?}%NGhC1s(!dVmvU`Qa}wOq^kFlQ&zY#mATq(Hrw$klrA#NLlrDa4K)YU- zxE6pL4^}&U)+4M-O}OBZG3l(X!^V{`X(8~EsH))+7fqn(LqZDP7iDUCgO6>bR=I2^t)FgXbd5Z*l9* zZe?G+(jEUdN(1uv6!jY#$3Y6vk27xCF#nH($-6EvK3>%SCflVSvVy0^!9OL+ zX6bkT^Q@Bm|Az(i162#0MCYZABb0)N8cG0Nzy#i~C;&{;Qn0!0B98DH+&IaZISx4D z3k*Mg{5J=}yFnlh*6lexT_$H#3Cr43ypM3)Rr4qA$DQd??;|1i2%NEsHJ1dO3VXCn z8t@)c_j6SP{Qls-IklC;h-r~7g=Fi(;md=my1CXcaJiLwA#?*-GK2Zr_tK}G{D-QQ zhNvb(R)ch#|0|rzd?$4yEm`K;o!?pc zN>zWp3v0S&TMgc9vuu3s5%y;AQiPa^fTl%|jdd;b)vGs5x8U`P z0&qsLsy5iY+B|{DRb5-C$(vfEu^5sPWa_T5KuQP}bR>W1A(~2&U+J&iz$Vx8Uhtcj z85Oe>>h0HJAn-_9YR^KQsU>qk9?K8e8pqb5v#cw-%T3Pd2UEWi!G_0-T0(N?dTYb~ zE?;N1KN0UJxp2=tD!Q&REJuR{7L5>52i-@%S}9_yeKM9PpJt|N|v?T z+xNj=VQNQwOxj&IK;_;8mvroxO`d9dSS2GwE$o>5`KlF(u7tBQ+!E+iMd%BO8 zrsNmT!y+S|fpkQr^F&DXB{C{9^d@`mFEvycu%HcOl1Q75tWhw1E@IGs`@2Lg)92yZ z^zU3n?4Y83fSjhn)BTm{;ZX=0-{oKU0Po?XFUU%l=R5D{+1&Qb^5g!Vb;PkkJB9XVaBK#F?5QScG zkH8zi{q^Uy7@A>Dhfk4vqYzVy$xz4$7~llE?WuEPvBfyKy$2_(E_rzq``t+MULvZM zqu&;s5sued-Lj`kl|RQDSHG{1Bx3b*RubLKT^Y@M!@An`-1R<>f4GNu4MAh@5t{v< zbAX+39F82G;nFcbpVB>DXjDAARxHnu?EzKb?6+7W#x&mw8ZNGYrQXH!bkNo3L zec3*a2Rz_F750R@USpKMIVJ*XdfDJ`)Jk7_I8M zneOlJS0W~lCdXmkr#u>!ZPf0Q9Z6dVP(lU!39BmHHx(QtBp^UcIKu!F4n6Hbr=zu( z>0fSVH^*ANOGyc~%1-x}mN_5EwzvV?#aamLkDTO1b9714#w6AWZ=sPZSw7uSjS+p~ zD|0bS`>vPp3;qlAh8E0FI1&Rg!iZA2o9)GFmR&G#t zP{bb23XF(&+b-6Hmq6x#jH;ITrowCI{B6_2ZcOuy&&6nBa5f@Q7pIK^v$Qx+>YnN@ zI!&x9=j$7fs9GsZt}jrXsaIjEzZqg|yRI?ev~t9bz3{~GjlE!Vsq+a1Ku}B%a-RCt z=`+V6J9~V-GYt5H`b1seof>4HB+_9@{ZNWC55Jk&7WOzdY5e`WYqFDE<=gI;Kfmy5 zui0&M;HfoLxwejQC$`{@tnKop+SJ7H{%WMs@%zcV7F+Te4|;n0=UP8FU6Y~nI8{M* z2x||jM};N!jPL_=ppEXYD8$@aht(Ranp{lo^j42M!>PEye1rWPz;Hn#ITf1y?&z%J z-9s%SaJmn$F1L8sfB$o_Bzho>Cq7|;V##eF8Y0Oc>(_NgV_8P`dE%zm3p-RMeK|v1^{>t6(-|u*m8G#2~rK(Zxkd zQWEYpIr+?e{wHAn6Ti4~li_Z%Y~bC%cy1Y8`=BXQs!shjr>yI1vtpCO##_<*LVDuR z&Jgsycw%g&StU{u9<$eZmI_d6=={;mkWl%ffsqjs5fSqFtz)jmOVa5|f12ovwfuiQ z_B+n_d{pg~5+i=%Skly=e7P)i5H^fiH$=06t+z$WgWd&1I zxw-wo25rvuXirOz*BZ-z)VHQO(yGsN1LR6Cf9a1Q*Ao`oN~U?R{i~eFdsQe~U0s7i zNm-%XHimmb%gc)oR>R$$_Nw;}$8&dnEhmXh24tVfB|oVg6c43lasZTXiM3zbbYxgB*U@*(=Uwc}T?VIeu z&c6H}UWPYop=Wj&$G0zH$H(>&!-XQW;D&(9TUwEhKH4?xcOspvoP(@m`1nyORy*B< z-oiH!-Dr{lv2P#n?I7#zN59X!JjWey`>)D&NirqdHziY9v=d<`JJ^_-2oKzv&6RVP zB?bir^+6N=Ho~~vI{2;%i!O-Lp2y$H4G}!OoH#kQ_gyKGUs3g9HYW7lom;o79Q(6c zk|2o-C!Yrqr=KEUpKZG);K2h7;KXPyXlTxAhlSyA38%+o6iL~-Bgs@`=BtaKCge!; zB)Dgq&0Ex4h((>-c>hy#b&t?W5i61P041J7MKu&27{c*E<%Vd%4`R)~@A)%|JBXFl z2|f%U;Cp(H$@|FW*2{|i6n7+Yk00SrTkI4+2uQr1)FVlW2^{c84yBCRS)^@7Is9mp zO4-u(7_*T|%|SHp_%wfEBz8Zk0z%lgZwCqMbkpNJD;H2yk5hQIG=hbJeZ^sTbr*+_2)SR)kqhPympYeh#mWATrqTIWNMH&nyO$OsR z67#i|c;HJq*|(yaC(qrjjK%LJeiC~Y$hFLU{bqw#lF{+wlTR9*O`wzpsRGOQcQJ=* zvYV5%>w!T*h!q|he^i0VVIn{X3zfz5IAp5*6g5VZ!r#^1Xd13+xms;@hD||&z7*P! z_>H(N`0lmP7Zk7<*!NA)nNM`Kvi^`hFUc=MO8Q^#i|9$Y<}!(KXoBEyHwmD{<;yb2 z{pNkHy2zIiBfou{65@{At=$jLPn@N!B>sd5y#v0AZhz%;C`CJJck4dty+Od*oZ=gr zTVBR!YC3AX3~#T_lgtu#8=^CSsQL`+!`7_^!c!tFKS*Vper%@)EJOdH7ME02u zhHu&yBx>pwmBxDzz0S}I5s$mGJ6_VP{b4LPoXUg8pg>h;JtqwgwM0!kSSQ}PJ=@x! z%#YOi5g|1tupR)9jLS^_&CQUlNI6f4t$H#J#o_$p$B*x#NoV3SGLVcli*idq6PamG zZ_=^Rqf^vVA6tobI_8O@gk`GJt@&ByeI8{LcviHnEhH;Bs{$=1Po8Sl_V6Y+0o`%T zaetipKeGX;5cHHc{6&&6uLUs~e+hVxpTa+$T>SI&qX>=4jF^D;OqhK|)_r=2Sh*+& zajE&|_yl@g$JSab9H)PYtSN7wwcZ#z&>`0dp5^k(L0@#EiXR27uq!Pv?lvmkD5xH^ zlp-FCT+weoGh%3`uV%ix_J)6Gj#YYr$ADmw;SQU52>WAkD}&#c;#l`rKH21LL04J5 z*@eGKk6IF=Jw=2ZF8r33;DNVd*FArPZ`KhDOr!Z-W{&SabB z3`Oj-F}B)nya4Z|8Sg+utfjb!Fkp`%k7_uqFKf|JkDQ-{~4Vafp8*$C1CFRPeNw1 zRiOHCue{}SA?AckR~Z(i!6(qoa8cmfX&*=cCcptpymgK-?Bq6Up2Sn>*zs!$*0gS$ zKLVqPn_s?%yNb4j$}wM&m1X!C=32lFKZ@Odb}CLuL5aelpyk*N_k;_C|DdBo`h0%~ z1;igFj$%55ULCGiv_DIN?}Gmvc+>34r6T9HJrFNM?!>m!N&5K1p}427k8lY_$VTC# zIBim5iWcUjlEv^b1N-9w6o}sX-Yfe0&M1pVIk~L92wy-*C{DM*&Tu~}ISpqX9vH7O zmH|3Iu~o;zS@wA?-R`jy`J=@;WNmHj+nkR}#@Q~1Dt}MJ*E+im*1ggDpJPImAxilX zT%W`|Q5!Pn3?txP^Ruz|Xz&zaEU_RFtBeuM6fZcwiD2Ne-pbn*-S#7T-rW{%vv-rU zzhQachLCQTJXVQiF)(cLyyV}G_%Zk09G5%4eUg!wZeRq~9p@#+eH&D1++at_*rFU# zUa$r~w%2IWFM5*7%l#fv#qPZW!Hi>>BO-hIu1C_{KioB!o81&E_4aF(2CK{BX&1UB zqNAf{s@Fh<77Y}NRhv!Yilngf_vol}mWYgOctw*XIk(TJ(Szh6{c!7-2E6+BjOQkq z)A?$%j{nrfz$sQg7=&_^m=JvA@^Nbw4~`42wYa!92F6i);tWsk)~N^nd>Fr9Jht{) zFO&T!TfH_if&s2*p-^kp+mN`eqXJRn!i2SBof9}7y%^e4$dapZjEeIo*P+Ss25~U| z*YAwA+J*u&?|oXBM#xVV_$6DD$dXY`4X7}sYu;d-+^r+p0>78&vXtLEeSJ6#AG;!9Sly7O>z160r`ucw%7HN#eBvx{mn9y?*aTGnU?c9;gXQ*!mvl8ac z`R9vg>ZvdJyw#1DZ~S?-+-Vvxa33~Zk&nT?X5a`)LY9~hfC6()w+s(g~<%_F>DVdM18e~5cIkVr`y9mE2 zv)Bu)te(AnJ5w?jcX{FGzVsI8c)GRuvd@P=F66#-l)hA1b{uvuB23M9jW*Z5_17}W zYB59D;N3`x;dm53c*Y%#)j22HyYhhl=ZyoFgX-TZe;qqs_`Toi7PW3DbD6(?@K?H< ztZLhN#V!E~G^FOF|pUWLLq@a6FF*2h7D z-*{Ln4u5c4m!d@zE+szx?t~L8Q*wiqUPF>-z+)aU=&%si-2@{&xa1*7H^#!HtD-nwi0KWxD+s zWc*R3x(%Na#`KrgkGD;<{LHpPGqVe=m z0WItQVgYU^5r_0?XCH!()VfsRtx*@-VJ}H*&~R_RunLVY)yJh@0EFal!2(Ya^Ni=^ zIK8KHvk(-&t=1(gTNPP%A4W<9ikL3{iA2<7PFS1A1D4!5s#-F%-AD5asdSySc$*&a zAlsda`^QF9u}EhR8kX6Flth&_z=69|46pGH(nRS@@&*2UVYp$R$NbHLNS{Y68zg zJp@Q7Zh-?#>=)4dhcroZDYrTG?P9~z>mqYjzzA*c@>Z~o|B~?Z`N=1T1r$3Z)k0tS zeata6l+@$?>kAT4AjN}VU|{?C6|nwPg6!dRMg3QYp9)KOHQ`7e8yrrI@*4;T60B$4 zlhWb%(pPDYT_vQip5TYVSSRh^AN`d^{uu?$;>8O7yJC(!@CUTc^8>@^4L`^0blp^Z zM>GJioo_$GVleP{dg}i{)de7GZGd>ME`?er8S&m8?brYc5~4VHLbz79Rbj3mS4z?W z9(>co9`xn2s03?`uBVxqnfvpj;K<0l`~(>(=_a^L&RJg?y*HM9_*5%oFAREN_Ck9* z)|<8W2fyk^z;2!n5|webq^7U3=AuvKl5n$UP|wctSJu~WEVf_Ayeo_SYw#gjIH3oT zHW@0{1omWLfj7Ll_y)y#RY+W2{Qp(}`@*-gplw!(GR zF66CgSZuM%RAcJ1WnkhA)wRQ4&N}HQc=N_YH@)kuf<0}awPw3+Tnk?JsO|Q{F`>0V zq!#?yumt2?AW9ex;apkl9FnxdpRoYiM9g<^YM#3O^maDax)d(!^s0TR!NcwCCPM;j z>D-?tZ`DV%_LS~4xN0N_c*uxJNxR15TIu4g!gJ}q{PE9T(H#}xO18(#r?fgb3R&xp z6n#_~Bm#Cla6(z%aUxJ*2+h3d-;dQ(N+vd*>0L^@nxo||srpd}w;4HYsApUL^pMjn zaOWWUNfhDVYHMUHPooEmv1f>dZ?@?E*B~QGM^<*6DXW|H`$U_|e1a)L!2Q+|cCc3DYx(tPz%g*6o-G zN^P02RM{F>&|3P9{{mq~S8F4Qwd;st)M0_$OE{ccF&AQ`CXdnzCFVpkrq=~6C9K4v zNY66;)peoP#%`uVO${;Z4#jC${L{g3E%T?Wz9#2oFK_a3OtZIVN#Zuzp2FfNfKmdF+#C=49o|Kc)PT!v$Il!krLI9|VLuH~ukU`(c zBza3P(r9^G8t>dB>wX=+#mUpKzMH*Qotk4mRq*Q5cOiQ1Wg@KDM0m0S>!Uo)5Ds>s zc4wJbatQE6YhIPg@LBHdohP)MnP#|FvUj4=7rqqr_H{X)D;)5jfA|{n;BW7AbaVhc z9T?JdMB?fb#+1UOA=l*I4o4RFbJsrOhM;*687coDcl?XW{9TWSn<|PU^4u0(k_P+q znHsbd3irybMg7s)XileIW*U81KnWIVR>|0QFW|rO1Fwny`Rn*{g2X?bvj%DPkl|l{ z3L?YErgL9c!%_-7j*=bLxRER}(&4+dbEI7{4OEKsHd*n}>i!cMBj5{7Z$i!5YwKC+ zn!s9+-`y&M7|i<-qY)z&i2cFk(|2UTm!dC~{s>N@*aKx8pHx7`)Z!IM$?WxC52RGY zi<-5TmbcT+Wz4s5%U+kUvnP3<_}0O@Ga&x;8Z^)+bT2rA5c!Sax$0Gv3DqC=GBIYb zY2E80;TiKc-J0KGkkaI+l8YrhHWkfmriyd>3-U;AL5@d}wJ^khXS3erSK**$gfjLg zefBED4U8`~e>-iKT2P~P-GV==gYcWWq*??nwl5+S-^3y$5_gT<_TOKow-96fq1?H* zyk-sYh8S#4pG5dTw-`_QN^xwYId(7w01NlS6ob`WZI)GT53OobuMo`UZ@iWXg=eE9 z9~&PqxB@41X}w!4;j8;bJBF2OCT6Bc5HZ#bGqA)jRvY)%tF{})gcH>-+M!p-L2{{| zAnQi+a?4TkBcm55sYDf7=HNtJQBg);KdWy?Eo4OImvvWf)=SpyjWCTxB-R2lW3r7F z3ncc|6@SBAyZg;kLH)>vuwbFeDID$Lb~x@swwLTrGZC-V84aI-KUeX$LgQe*ZTZ}* zKI+{|=m6do!qb~Ps*HW|=OGOq@6B;feFVOJ*25M$k_T)UMzR&{Uyb-KBWuJORm+m@7DGX8 zTb{7N;!6;uJ_HJoqu3Z3MP#jk$ao250@X}^NRAo1Gk1=UX0Y8XtV4Vdca~vop6Cco zI1^WSHIE^Bx#`ONOtL-0FCF3WXw@nqK0cgq@4`gval=g+n)1gVVD%TdIncAkg%7vSEH?XRiG_ib8*g3#xF40N0&8v5}f= zh6}v^nCA_x#`UKGxrlyBFINZ0o@L0d=#CEYbDRreqA>Kg+$SYh=BAK~7-o{He!xrn zXI!^=D2;m=PZV1T^^3MpSD+D>V;Ro~+Wha*>2zrCL~z{nw3=(EN6_LYmov_H-^wZy z=JABGdg}E4jHZ6|_gf?lO|8)0NK@nLyGN8a{D9`L?utv?h1p5^aEhs~MpJkm>T?uV zLga9;Am7*DlM!_=k4scmO!H;+crAaKJi5W?2415Uf3BoaD*@N-|x*^`LsC;?`^ zh&n~1HL^E;e`FiX?+|iDMzt2#T4w!>Q(mtc$Ms#Tho0;LcPsgQ%{n}%tHmpz5vK_l z4a9Qb)(C;Zs+5wU9TA#|-j*=geO|QOpH6{WZS@1+^?1eD91s?i-IA`6lj03Ef8{kL zk{fNR1PJlP)maj1uiDgGEI2%qg?dwdAqIVbN3G2mITVMr8%c)}uZokD=gk)ri_o_& zwv4jd@^|JQw!C`cr(@@fh1zMaQjtMqFFoK8Q2EvL{*!hD-bD!fdcM&4=rB!)dmWk# zaj4O{3YHCp8zLUMJg)xJLOj#bT(B&TPRFG-`oPlt)5P7LIl!{vqK_LjK&Ei(OQOx~ zV$)>O>GCJGbD!C{(g;+Zve8)fs&3>P4+}#vJIhs?9LoQYRZvi{{Dh2HQ0egiCpKf& z&oJwGhe4)iRVWgh#(Vzoi4(Clm2rP#&~((dL57V=zKh@L=)qMB_Sk5bI@_;NqVWop zsnU^=+*b=ECKL#KoaB7Z{;;CvOzgR=hXUku<t7J z+SbIAqw7M0*}o=9_3(NUaj`(y$jrh_OGRD5wFAS_IGayR^jv%MWr+7Sx^SkILw+mHta28LBQPjr6D zduTT3b-lLv%xIJyN$LeM2A2QWf1Q)%zUlcr|>u1=G<%$B-$pHKM+;P@+taq6G!{Jt%>aNr+303Ar=MjyLW_tIB%Rli zn~)tXq&S!n0SoDv^;6d#hm>_R%n0c%n?rCPjHt~!->kzQf&j3Y+e_SDvHHJpzyw+X z?Ays{wXP2m5fDTn+H0df)a-vN(|4VY9m?;Zp&+88>?PXKB5nQ1$=*; zizA&a7^ovh!^7HmIN+muU6c+*ph-dV^19~Z#(USf zM^d4mrP)v~WGH-u-8gRhUwgmt;=>>Ywxct^`+DbZ^4!wyH*4PSfR5)*E4rp=Y?BVP zwqE7gBe%()gMmf$qMsF)%Omvn;)hw5TR;9P9=FjX;BxKYqPi`(V%%4m3H2)f6x}+L zQlh?uQ)eZN<~n^KFCIozy}CNdG?$EyiC*B%D-zlcU%{r-304}o3Gc>uuWfa4h90Z= zTJ*lYQ@)dv{pJ5brF#*7fkAX&tOe;J$zj`Ef6K0^{vG5)_7j}Akr53pE^genZxOFn zO4GqcVsDOI?lW7eolq9k+A89<<;*%JX`QY0*2}cdWUs1$+1W2R;Ff-t`-c#kk@`GV zR8se(3hqD08$50~KLNdPdK6!z5uze1vlhE2tI+zh!}g{`F{X>m@roCKV>ae^iTLAj zu}^*otRbJ4>Q;E;R#JUMkTJ!EuXC-lk8-EO-p|;8-tsPBb*;78Lb1NymFoZ>TXy7c z?Dp=*Y>v*3l(9-d4^n{Y#)CqC^;P!!;m7FL?a ztcs#`|D+;@eIr@L08fl}iSb2DLWu8i;iocm9kB->6|%`GX ztEvnQv?#Xlkbv8pX@&oSO`4|PgoAoX>bHkGAR&Vsed!+yi+Ag)CP%Gp$@Qw0RpM4V z+1Xk;hPyGPfrAz?D(0+rA6Las&gv>GY<4HT5J{#)FwB(=|88nZ*4@3SNIdZa{QUen z4_B&9<(tg!Z%`qN_4JhA-wpytsV}0`w;y6&KK1#Ta~t?4|F^|jk*^O6*oyB{+dnZ* z)EMNe+>Ba=NJ`wk;hGD=NA%;dqk_rk62vz!R-pozJd_y-V;`d|lSrJ72Yirqs z5sEJQR{KIxnY^!_gWx#rCTor66y>^d?KVZJ^=4hNv4f>n*c#ZBVxV@9DyAJUzb8J3 zKUi(%e&l~{*`Gc@=ppax69tsuQ3s21a9wK?uZ7gqy09qTj^8sNgC#2OsQJ?!d1fXi zaZmwbpvL?teDM{=&!^Aq8g0P9wnx}+wQGUr=jZoDYBYj^B)-1BCg65zQSI$wU@X|) z9j3_Nb^-hy6AP$C_)vBErBLoIn%mpkw-2YHiaJ|Qc=7Ts)>!Pp7Dx2yTbTLn{k`0^XrWni zQeYt5zqVh$e&w8iAc@>EMOkpFP$<9oEqe|$QcrL1#@SZC5)*z7Tnwl|4no~G_VySp zNyOFL`hJzrLLUg~e{ux9TJ=sYyx1GuVlF-_3)6qp zQ$$3BRj&;&h?`cO9_`%THepJZX#|@Yi&MPF(*8p zG#iS{k5G{iC_EQ`Z(Z+mMGw@DyeFpOrk(}XwzvoamV3(HgEqQ2>!(cBhO1pRnA+2n zX#SWDTc~G{N|iX5!)?Iy-t0mBcUKr(QHrr=*G<;2o^o|{MZi-l?F61%dV09)@uH(G zxR;@tZn@sJumD=&a)vc7>qGvf$TOO&tLwMm#Kc61e`ZP#xWpJ9l;~Bo6-!bjPqo%E zYq>+awl5#Zys`j~(ti5*kg-iAZIfeRKJ`EWTN3&}0IMLaWVo~11ZfEl;8uG-WfR{& zar2Wp6OuHyukRK`p;8+VBayhpz|Zl*h-=xvk>o}T2^>k|f(K5w2l47`G_B4ik3eZF zB4E79*_;Z0f3c1g^R<9~S{kw4LQ9LeK^n{E;7wzoL8TmRa)mNQoIQqrvi;LNniKNo zbot0qT1w=xTNnW5p)ns`7RBEBSykOKrxty-romX8@$fQ(edH= zDFq91BY49*^FZ*IxH<0Sy|?Wl)x<-EGtyhzMP4IoYjj;*-RP&{t2JaSiX4NX2ooE{H3I|ZRVj}0=k%@VJ^FObd@X=(A_jY%k&eeMt7j-zH1>S=Efx_dGRBK(G z?ccmlz&$#_&~grvf}*${GOcx=AKxi>Y@>ia)Y#YvC{Z$e*cg5zr1R1lUi&PZceiJ= zoB4!hEPb@OExfzbVYKzacf-F?y?dnT*&Cz6Lh>F4xBNX|U;gMV5Da&SS6;+E#^wSK z=piC_?aK$v&cDRp_Lc`BoXOWU>tzP#n;2Udh6iX`t($jy3(D8wVH)s!_MD%!vP7Vqst_?p!!RgkcL`@eETpjJz1kfMKAPQS(D(1;eQ8h8 zcjc(d)4jcj|Ni|8Az{HLCjJ0uWPl!U`|yCieYm-qJLk!akA_P`^p#|^OCW$0Bpk*; z#hzi#_KA1!DR|FGP}my%$4g&WAwq7FT&UeMuHW^rBE2|n1+|X>$J{5L%4)la3uAbx z%$F0R$H}3_mQ}x2gtw+c_zLOVh=75m@@=MWMd^(T`QA9$9A$M!I~IvQIm+A^Bfb zI}WF?Rojw4zLZlPOvrYjnx1hD*Z5$*h`4fV=N47b6S`tx)MbnQm(p zZ}TXd;xwQA@~Q0_GY0U#JDznQ;qa5AY^Hb7F52|+^h{uy`4ROUekO(Xd9LxgB*gYf ziWn|kxzV{HcT3m)+YM`|4F^Bvx1MT>fFZ>b?`t`;Hh6Fj2)J*GWhzfJGS%Q zA1N>-F~Z#3+yX#Y=s-Lz3YNKBROr{QTVMcAvosqR1f@K|ia?%mV_sToqrny9|9rUC zZmWBch$(>`=;Q^X@wEs{^Y4Zw7Z(>C;n;%+oXG2MJ}BR^RV^5G-<`q~Nb#d8P_J(gJY_30+qq;HyVdHOjobdyD+p z*}Lt7H>$*d1K$_}aC&q^^ONtnttG$YEL(P`*=|K>5VMQQP>dMjj=H|{(=UPT`eZFu zA_!>%+_=K~Rn9rcwI6Tu(FDZR)RF{tfK^cZL%mKSv7A2y&XiKvjFO)&4PTkYU{$6&C@5guyxzh`b8`8t>^EiDp^~3K@=GZ$ zAJ_Ze>dq}MJcqnA2e_In2u~sOh3P-)T#cKvkndXj*EP58jZ4V8a>ccdd&!-WGwf}r zp8kI1nWrb^l{HFHQPFvD+XJc#b@u)++3wR<_5iW+oeC&Gqu=Cp^Uq?fjWtWuC*qf4 zuP~w3)rc7g5f&Gb3bm-3HeyZ281>AI{TxjzGvDfuPRQmjkx9Kjk%uhgdK4BJjyUi9 z4@Vja(a^T0!U1HoJl^kR=k_&}7$PUUXegxs{v)K0`$ErzrEF~LRvK7!));OU~>wGN*Zc@JmA%Rk+_;BtUX^HfsjStohoMt(A{oaEoEtaxDp6Ve`g*^8bY$tGV)Mu(BE6#_{xU!w8IXdczlb zBZE*QthyIs{?%2GZ*QWX zkz@BR8}4$@5Po)SF#@oj=pS-R=g&TTcYFKce!*{U^J0g!4=X6C0=DPav9YnCu*YOw zJ$%Sh&dzfoI3oGnQT;nTkce4I+S?!^(0l8KnN95b&sn11o0uMHhUv2CUW<| zOK3-4*^?>#z5o^dKBm3-%Hq9;eavT2*i_|iQo4zlTB)U$c2^SIc}?KuQBViwwb zgr^#-PP5B1?m%rH9RDxpJG6D)%#S$O$*(ZtPA{1gR8^~--y{DM#{d(%OAvH8ySIPs z?F2HyJ}o|ecgfF}E>Um1$)ud*=3f8z53&r4M7W_!YlIK=8|~Z7mnQ)%CJ}BY{pbRm zy=v>NgQu!S$M5q3I$$4%S}=j}pH8nKrExxXtgD`1zP=nU0rSxIjTJHFnI^7Jk9CN6 zqGy`IrbZrpH%~p;KK?_4R+4BagrrIOL-&0|&2%&~hjW&U%OJa}7oQ0n zLvPeb5BzTvMH717CBDWDh<0UUD-1U5D^g# zSAOS4Jc4fkm2hoe4sh?U!F>VdYmX{ThY3N-Z*jOA7+1r>!vnw!A7nV_+X>T>rTI#s zS=E^P{sv>8h!he=)^tZ1ky!Y(esgp4*7MT?s4#<^%;G1Ip&5jvRprS?1O=VTLZ_T} zVK0@(kA4>QA^u?g75Few$Vq1RG$H;oiv$&LPf4Z@d&z(KFu7_(LrfhT$&CIWvPf=*;`!IGuR@mHU)o)tgWJg4|fx4{fcOw8xLR>vC{5eNx9 zjm3!6LPn^B#i|_RPrYet8-u!fe}=WM{>s}n?-+$XGVS9zPY3be=26@l{jskJwA~{w zq(=1KI6na;iQ(bkDqW9tzyIdG{ zA!}G?B5BS!pSuct$C4!KuUyf2%A#tsK{cIAnOLa$f5{qXl%32sRPrCcezo6@0GA)uGwVRMjsRgiCJkZQp*EpfkwohhCrs~+44Ps?;WHP z8UBMy!a0}?n}M|b-agGy@wo@44@nBMnma4*YZRp!wA zBD0?V5IS>XItB(*KNcJcj2k2+ULNMlm9R4`!#~3($0N0lAwSyFA1{;E-P>HnevQ0_ z{DjjOwYoJ*VcD8MfQ{@h8;C!Q^9a#M7CVahprZaS7NC=RaiLr(t^_DAXC=+lnK-0V zm0FI9R#zP(^ye z?y%RB$z4B6Qd1Tf8 z@|~b+LBtbH(sTvXGnw$ZHuWd|#4j1F00XgM3yIqXX*;{%_7QUucDht*SmQ~vH)Q2+ zo4?%-s?WOojsA!wAihHcolaSro0W-!ybxLZZn8PK5@ue1kVsuX1sp? zpw@O{^l1zHl^%Tow!W$M8s3#ss@q~4+*wQfp4u`Se~-1w_73zLH2BaQ7tjZj-#2@l|^D&qr1+2k_1J0aVHmeP29*+a;k2O~Qf&w0E&EaXu1Ye%uaE)MS z^y#XNq@<*Bd|MUshwS3h?gEcO8!|;R@L#;>KGSa|MC3*JWqdqmTDW^bd`Xz>OLmP7 z=y!XA*O0(fR#yc+;<`pjoS{3+`^x3zsfu5Jt>PCt>l632iZ6ep{&IYM=t(|pnX-52 za%VDmy7w!F-de#^t|YHBx`4ER2Wacu`y2pOqkRzcNiuCmZ1ZgJRQh;+J@?x298w(F-8HC>*FFC$cMPRVjsGC7ZWLczMPA^jv2>aIZ?4-_Xk(&e<{I_oGjL8OOE<;iNpoQ7lO2CCC9a8dm;rT~ zb*)ki`A-(%yX?^!Co=(HbY@C2e>=pYwOmHjc(g%2kW6;N29`Lz(s%QAJNE5e9QHdtm#^|-B4Zev>Bo6BwT`AlO6!#6Q@hH`i_I$tw7z}%_6qOM=CR*S?XQ+2140RBc zIE#)BThv*D7=9Q4)<%VWZ4Iccv(X>)hBNnSaDZxmFHisW$*G&OGx$h<$k8Wi-(fY zx+_j^ry5NE7JUvjPJPCxG=}+ld}M!g=a8u(ZfHUxOm4J0j9-To{FjX-3}WQ?LJ#JK5P2L~t7hq6zfw8~?bMkyM=e&;20lYh~4FR%RESa z6}*QvNhGCxDsd(8E$s*J$6znaKdxA8P?~qd@`GOsHIy?UjL#h|?4D}yrL-q6;>Ev0iVQg?_qLub> zclLX)AI?{BZnEwyB&F>@1#Xn?&ZiAQdIx=9<-w#Nl7fQon5D16_q@j^I^XS&f)=6B zsQdY*YElAc`|QYnhRsh2j}~cCA%$+~^J zSLlp1%ER?_G8w(hwPWA-4QU>F!;kNvfdr>9NA0t}s3-vTbkO|a_-NxEPAqpIhJ@kGxj1s{vxm0qY%6wV6xWFi#3JgfdD zB%Y~E@r$(2nIZTl7E<4kw1wDa>R2Ade`*6NAoq@v=ccj~Cppq&)V-_tOF;?BS^HkIdcuemRpCpRF5$w)yoZV);8l~b-0niR}4NLp1m46raH*|9b`_} zi-^;--6WBOwzh7RCV2tv@51TYo|diHOB$zD-VL!{vrFW9bWF^r4hS_!*cBBM8*(n7 zz#&zlH3qta{%wV8!Tpdlxl!+Dl1Zmrx*JR)en8B4ugt_sN^XI3P%0GJ2|PSt?n+_ zpCX$MK>!L)I*bk;Mtg5A?R!?#BhO%Yn>YHaGmG|4qrT)`a7 zWEw@|Kp3TL_4>shH}%kiMAg4nas?oeD^ zZ=!;Oe_rGle5xb=qurL#_<=M~Z{Q=UU9roWqGvDzWvEqA3d`O3p{*;54>dQK28PJv zTn?aYV^6I9{JmN+HveZNl9HM-5?XvA4IEAO{c- zH1Y8hPBEV4)LhONA-6paW;A+qt9A=nu`Se2Xm$^`z zVY(aH#jR+SJKm~@5yTUh z*m23?S&7j_p||$5ZF6f;b=%%lpU#2iy^bParTsprGEe|Igl21 zPj_kDGE%PB4?butS^HGH1m%n|RqP4B)a6+-1)@tJ%xK3=QS z8(!|VLwV@CG4V;jT*S+CrLo+UnV9YE55E23l3zfnOleL^e-P|5qQFB379hb|^4Z8> z7ZL-*ow?b1NFy&miun-jH(m_?9s{FOps_AOL%jjJQepJ7?lLi*l?*sH=Bl2MXx7bS z=ShOba6>U-&9j$w z>gM^J7ig)&6)(7McESXiw+E)OV_1I^2dO`>-2Q|`D4Lzo`YQ5Y5GakZgKY1$fJB^_?C3u#g5?SbCVNxNIJ!wfoj=VEfr?3@ ziC2!2l@|oS2z0pA;&j1p9?tV0&Xdtc1Q^r)2FmGtQ~G;7JcNZRoXz7vesOVOUvx1B z0H3jK$S)PuwKet>c)WLHb8SY}-;f9>rsc6bl_VK{$vIB@gq@coU-oVRoJGTFT;X$z z)k1e_9RNr@y#Ko?rcs7BY#m>I;Aoa#Z|Gx!Vq{ogZ$SvKvLzey%_Dh|*SFVSS*+Y#>NsVv>q)S)Ykz@t z=@?+)vpTYSdvkI!%l!ie}-cimc2hr_-mUGIQqcA!wu-P1~&ktC_`dyHoqzdX(TvvltwMyt@ ziqk9g*g|`#5rXo$?clHgZz#Z+x`ci$Y*@4);ConXc|^_lSk8e(#OwSMw`nIBxYzuP z?!S{`v@2fZCtShB2t9$k3f$9{|CIDs)K>@K3@77S&~*O*o9Z0_e91PFHaa zgUq%E6LDIRUwON33}}k#tN0BI;hsDxNZ6lhu?SukLZ4O&AZ49!fa`7~i{|`9iAK8V zkZxPxmYpuI)aNA|hTRx&b&-DV)|ohejR#f9usn1dL7~#yCg0k-dA1T;5YbO{+`Q=8lz5le${6B-7Vm_RY5Ofen>$6sF6i^O7BwQ{*It3W$X5V__l0Wyp{TG;PK^r$?ZyQdI#6q6!p=z@1V8C z`w>wvqLPv5FPHX+&?~r+cr;TF*?PSVxjtmGIMMt0GrzNl{uDaGX@``Q6`k8|H7Gnh z{Dy{>LdN0I*zh;u0dIZ`*r#$#mqMY5i8xhNRRE{B%93}(hdm~luV6-kG)-WeKasgz z{)@-;`SwU46p-eMCMhS!Is4Hj$9vVQ^^5Z?$^3>VR>g(H`c;0AODGSUJ8bR+QIoCz zj9E{_JvflX)!QUJeJ~h*(C=Inp=g$wsvSLnMfhAL^q10>jT`*N7}J|bVe|UNKVP{r zTHU>Kl?P4MHa7gS1U#XE5}U6vUCqK)8ZI9|bpd0W&lD1tTo+7|>@oubZn5qdwZro$ z<5d?-Jq-lJ%M0Dtp}mp*uQ8>;w#BtmbrYz2o~?z$CWV%;^kg+jH1T-lR0O1lt{@4+Xp_UKBrcY}4_)5>sy@p?7ieV#C7o zb58Z8?&pQqt z{c?-7ZF=H>P7>2bE#Sc-b&g2?)A|@qBHr4^r5? zn&!y3@{~&w!!gl4`S^fk-&yVcJ23m^dz|E569txp*A~_ zG{3LrkY{B&YM#dN>GYBw*Y3O}q7i_3%0EfVy%0vv`*~!|UuTM1Z+mHY$ms;gZiCI#`2FqHNPZ-ag#n z0=*tcJ>vH+rfHfJKXq9sWC@Gp{#WFsOwsVF3~I`q-ViD076u;z+IEuF*%|SLdwz(V;cxcxX!@s-BeK@8 zizm%j%DhkV2*b@g08n6K&Fpcsv0*po3GJ*Oegnhbjt>L5ilsbng~}Kif&n03z7AjO zL&YQ~2P;NKuD`XS9A;trSG<}nH^jU8r&M7p_)In6r|W!#)FKTfXESjS=+OlO41|U@ zxa)dx=rcAPC7ZVd=H*}HvwPTUw=j{?ug0Q08ms?76ClFF`ULiDBFVaW#F@s$c`H`* z;hM21@`)fd%TO9`>2Ff=<9cw{@tbLPI<1NeV$Vkrr_$;Y_DNWw^yh`uxb!H!ImOR% zbXA6c+x0CmP!e!|3Bb;m3vMF_D?*hQz8`zv@_@Kb64k3h123D2AK=4-3x3*8;&r=@ z{nt*xLyViE3I7;UBE8%KA!R&X0DC{O_aI#hG zfm){)hh;MsGtvZ-6h5!d+%(H*LQm-6QT-NMJK?GrYkumP|DOC3yNP)_gx&Tz*EuWu z`BNo_Lb@8tf@gBmmGH!42-U})2y|%CzlPSyzslmwIsl_Xyq>T7D|o>-#3EgGzm3)> zu~`ykWxaDym5@B2atv1Gx!(0PjCuMIx9jBfmnYqE@}r$xX04rbY4Cj8)g7%I`g7$R z_Y?NKJ32kZow3TZFph+f%*rc?_fikU>yoRj?Ox~e>nyinH?1jLgs6sE zJo!s|JUE5@a$TWsH#Nu|Ce{QX8U1bFQ!9t4`QgN7e z(HpJWD*)T9J3)2I+h}3Wo!@T-`s8K19M(wH$NNDMtuMzc#5IvNnj{5O=rrFO&-LS; z?Ek$NDK8@<^63*Y;(3rVmy45}>OR@jtW2CT`afw1O%s^meBE^l@L4;TKM;PHI>~r;Vja1|r zoXM!5iWMRK7^q}f+$VB4i_wgAmp@QzTj?1owAyo6o--J}0_YUmN-Cj4LLRq*xf-JgXe}dLC?wnfp|Q#a9G2@@APguzq`DYn>o+ zd>XFz&a7d7J-t_1Zrmow+TOC~wo!raVUkcPT$r09ZS26eD|sKQXB0uW8rd0n+J~5w z%USsp3%)9QoX530IGc;~DsYk#Z*xF|X#r@D&d6{ovh7z2`05hyv9%G?^ zb@MNwAoR(tZXqiE+Oc60hDk_#5kXcntg?378(l?3r2=#cqKv8l(OJq@pMPSnf(3?Y z?+8o2z&<+_!;BwQ37@E(;7Y#UcQLWtD`fGfa+bZs;gly4*`#_=#LRO;M;5pDYz@Rq zc)b?dd$Jgy1?R5js26Jh0T&<~FtEH_>&Ke*{mo)5)KxW9qP+)4RPbhK9W7e(U06S_H^V2nma0e%!8pu^DitWy|r~4#zjjmwMzh z_98d<2BnzB8Op=QM=`sJg{`I2wTHwYnr<#&v^I{&1e$!4%FjaqU|tY$NzNBRLP&Cc zeqLJ9VyG2FvH-p>t^Zch!C4U2!hHW2G5zeq^1Dc1to zL|LX%LWDJ;(ft$vR6HIzIVUUxX>n#hG@-%E-r1R|yn4==tG=Qmv*EzZTPRPJF$IJ^ zVEh)5<+>RIC7dDaBT-^IC|V^)+@z$wz^mQq(&mqXQNb6YGE7WI{}`at_d8hOldd#! z{+++UaE9zCV;C6bCw+i2s9WG`Qkv(dp+lz&8#!IG2A2>nfx*ZH#hC{yGNBaV7)%)x z6JRQa`N#b=C39ZZC0?Grn#{f}d(7KqC!^Za+`_{9@yIFb@_obc?B(1=bT6@U{j&!# z04`2P2C5uy?Cl0#XYTJ|aEdp1*%f%FS%_-w$vNLxJD3kdlKq-?;bu}oueQ1Re6|TgKpai zg9T!F7GuVFRhEP+xb|ifA56-KWzAxDFj-|GA{_ico3@7#_thonZu;^JJUwsbFI`>+ zTZfbp;5w)=@qT!kh9htJIMN5VuBcavxm;7jX?C$S;O&I6=WJzV_36yp<3JKmh=Ea2 zKj3*8Z)dmwuF~r^t8SQcaS6{B}mHl!A=Avgo&SB_r|{$ z6wnSmwof8)j+Nse&9h_-*>88ER@1c&wjK@(x9@abHr;BjEX6=G#!6Gl2k14+lE+G? zA<}hVhKf&$OB)hdaR30$yo|Vr8dQ=rWgN9Aa)mf~EGLGFFBN9!&(Qy#h;0-qPHsj1 z6Og6El))l{)B5){A@I9?__cQw?Nj93Bh9t*3U3p@uP{ZblpYpCa2 zW4OJPI*vt4+|?a@e9D-rpd-|)pw@0{5Az=D4|BtpL3#7O2<)9w!@0as_*UMm;1rXi)!&@UReL3Z$SH4-449EZFT&gSk>_D9IidFp1F~6|qHgANw zYfRLE^3Kzi;Ah70z`#HrxZt(ir0pUPzYLCaCEqnA>(cj7-7LhfbACr0OTp0c%Nh#3 zxNroK9pYyBbvz|m>7F3?Tcq)3IZ%@(f(JPIQf6--BsKX6_l*%sw_|0a*f5)qY601rwADt9@;1)x@kl#$dd4KH{1@7iTxP=+xa!_ za_I2&yuq`GZoczoPG=40A!$p)Y1^Z?1cVr;V{hIKf~K78dv{<{in%^RgvV3Aa?X=g z!~s*XH!583(fno#Xgit_~2J%-_7%n84OXW_ZdigUWeN-%ia2`k_OAASXApnH<`AFLg~-O&OasIZruaBEEFLxbsR_1U zgHKi@JjObI>2^Ha+by>H73gX@J2Y5cce+1Gh& zJ>5bq7u%t8G|p?oAnG{Qev_)pM@LsYV+J@~Qrl)%hqGwDW~-3T32@}&Z$(^%_?Nuf zl#@Jmee79ub?W}awdvMaP86hlno>)y_2baNfZ>ABfMGwS^Omi7bR6yan_Gl z4mhCcgO$(9R><;_SC1K4Fi&=^NW{FsT_g<-jLeQ^!6+;_~1?6ZJBw9kJf(?2XkN3h5?fS2^aW}(8Q7kS9r4GTx! z)JwaI*MvLt6Xw(pL#3leo%iehsrTdk`iBd4j0_qj zO5iSD{O0}=okTHv>i1hR_+r%`h1RG zcu|A9@BXUuxG{R!3tNyGu^g|AwX@ez^zp+*@gJ{C_N4sgzoA&wIz4ZC$U`aGn}Bf` zVsfriS5H@(29|KIJC=*|Q?klTAu!4aYI&#y-<$-I%jItgsIQeM5YGBE1j+!$%sTccjJVCkVbwvK%YRbfz^cQy6OoBe9T02{+LNKA9)PE3&2}SIZlm3Igh1S1DVZKVew2GP$8#2 zDCf`mx7`D{=OxQVLH)0j-QX2gngqtNnnMM`5R)4ZLw`aT%XPg_eIvIg94%(WWx!{x zv1x&%0QQl?YF6?c{TQm=P&LeKmH9Z?%YuIM?8}K3DG+_Px-H>!cqBxM(qMh6wSCvQ znRm!%o!C{0C9X3nCBF1F`svpB>R>t?e5gdVL-h4Go%2TEwtG64BqfA-B(xfAK6{E` zeK5;Eyu8OWm^Q~U*X|`i!J`MF^$}!j*H=)DXp{nXVSR(u)YVeQPX)YQ;I3Hfp5?_p zETL*M-*#W*HEwiF7x6l^C@lMfO2UstvoOC4GGt3- z^at?>e2e#K#IK%~<+W{VnzuYDAJGvbEv{FbwvyE_r*hw7Ap|I^=!^{rtTIP1bd+d?TWt~LJz)(Cvw)dHRNpzK(4PR`o9gzTmIa84L&7UD?Q+)+Eho zH~r7!ioVQk6p9h%Jq2ui-RZvYXW;z3p2hKHDxw!{IS}>D=B+Ot54h!~4rOWhg&l0O z8uie<8zG6Ms}H&MLOUOM$QUR53Z)NxkE^uL#Z1d!B-g3wcyv%*V(aNe4vO~a<=O4- zZzmUZ97)g32NOkV>KXU5$T~r;Kg}9GFsb3KZrZ-`2&$?(to&>PyA64qaZOd1D_sK7 zxaT!%VPOz`XRI1k`vcK^HZLA69h1cdU_+h4+*UmcyLw72clBro(yyU&d^$at&GQMy zK$ZYpPD4YAcC~q^)zq(4hPKg{St&s#5MM2I(5u}?QRC%lf=L0;vIr?|1-WWx+zNNx z8nk+KfZgG+n}lbHlReVWzAQ4a?j=si_^W6SyL7`7!alD`}p|z#% zy_nIuRx`|UXR{ISA$72l_yP^6|5l8R z{-qiToO0mkDQm8jz>~tU#~!0aM6d_u;CjAGrA5)NQN=^z4s}?ti*KF-Hl&%>M74>_4o9QKZrzYIdU+lH9X?yiAbgiw7rQ#x3@$ox?G`XIcyv5;)b@T(XI} zG_Jclc++_PCE80L(yFXeQ}^?=5JvyC)n%Kmj2-K!Aw2}u|Kaj!?VZ)koXp}E;|}I z%#IwNI$WikYCg=bzXw^Xu!;w|418^ zT}Js)+(}G5n0TYK|C9Wo(1N0S=X`Yu+(*7e$RQ(MZtfFg>X+oLp^~6DuN#l*mBQIm zGzaAF>>c@6vkx^0c>H6>w=Xjm`c*cx_q#=I_MMl$&iCJ2z1qyB1pZ36yYn6|)N+*Q zx0WekJmknX+SG_rUHPNJsp?|p}72m3vRR_*yo{sL^F`_V_ zaNityLj4WqC-F{d;Yi~-R15x6O%6_|Odptb9?v?-)MlRWaV0>tM^g&V__m6r{i(`a z48=*9KbBo%f2lNa58VTYDt~*6gr_4i6XDBpP~DH8YOFkFCD5N)_!zX%q!^f)B}q)D z9I}}ZW)RDXqcjY>vphu&&fH!Tx1IPO%1^yCPjT3m+LyYQB`0%b-zaCd?@aWC85%B^ zA2O8`jZm|0P?pHc?4#)ijAVqYk2K9J00G2lJNjjt`gXVvB|HM0Bh7mK%`1#o+74_6 zyK|m(8Lq9V11k~Vv)Ny}n0(D};H5XKr7;5>iTqXx<46Ti;}B!5jY!#_~S0TuV9XC65& zKK`1@0kGlvXKMp1VQD^`Ww+#cLlusF>Se#2tr-V!TO1twHDF&x8We&{hT8wUu->ds zPi%TSenZblWToCF1MDqVl2}!uz!~qrs0yEPID`9=AkdZa$p$MzJ6KM3kkB+Yv5> zE-5NHb72CwO7wgWUk*9FusrddHA2dlZSmIX-gR=d`_~`oQ zMM$R^6yZ#{ZXZz<5s=hK=(UMw!yKW!Yt&TMo3me_)Mksg(UZz35C z6SysWNrrp%@({TMcd0G^h#%e9y0fKMnxGPR{v~!M2X^(e3vm_}qkzlR|He3g8ZaJ*w*BAhv zO8aLl$FyIP`1N@id&>eCZ__6PL~R>ZF)`|#SIt|bz?ek4(Ubd|?(u>omT{#wy2&jm z0UX)C_PtFDsdT=~=D)Ecj)QH1vLqkgQ4d1&-xb#Pr~Rhg(7bB+*8R1x@~tpGI+tiv zw+v;RxkxGQS;H2M_;CCwYlA(VYTrtP^dkV~@Wf8NT!R=Fg~uBA!47%nlb}q&?_wC0 zxp)3Xcyx0C3<{*c;kzS}DY&L2B?UZO?fbL4!wzm?yaC-$d-Qdl)GM6I#W}Nyt%-NfA=(FL^ z9Bu*T49k?qwNLndbQYM$_uadJxECjXiN94|1}qX>{(6Bd0w2?8`% zwmRhW5o!Rle;Af?wi`4|Y}iS&4rz8q20#usPF;0%{`S9<-a<8z*35rxx@(%MRmG-J zIOSqopIfBSwolQ)tpWcZD60?}8Oe3CJP@LnHz#Tl4qo~sG?>{;=7-YmI4yHmall)( zd*PaQ1A?eZ!cVI=H&fWJqko}xY;SGFq^HZ8n^XT*$Rr2#g*s@93kt>`z{(z&2u($g zL7Q6~v0rAHg47AL8Kagipc)OD$BT|-eA}N41pRU1Qd9RU%OCxm&l4xmz%zK2i-Bge z4k8G>AJ*^ZUD%W7M{;4p1P)b*Gq!|-ViiTp4HWMkHP|LRD5^~dNaCk@HWpw(97W%# zpGt`ATfP6|8=h+S%MtFxg`0o5SY8!tQI{M^Vg$Rxy0QmZqSP3DFj0%+jC{5o^)Ed; osrHu-^LITPmg95smTmYT6&(O%BoxHUM2-CZ7YW^j!vFvP diff --git a/modular_citadel/code/modules/client/loadout/backpack.dm b/modular_citadel/code/modules/client/loadout/backpack.dm index 82fe89eb6e..17f5f9f5a1 100644 --- a/modular_citadel/code/modules/client/loadout/backpack.dm +++ b/modular_citadel/code/modules/client/loadout/backpack.dm @@ -95,7 +95,7 @@ name = "Newspaper" category = SLOT_IN_BACKPACK path = /obj/item/newspaper - + /datum/gear/paperbin name = "Paper Bin" category = SLOT_IN_BACKPACK diff --git a/modular_citadel/code/modules/custom_loadout/custom_items.dm b/modular_citadel/code/modules/custom_loadout/custom_items.dm index 3d88dae26c..5db63ae070 100644 --- a/modular_citadel/code/modules/custom_loadout/custom_items.dm +++ b/modular_citadel/code/modules/custom_loadout/custom_items.dm @@ -556,3 +556,11 @@ icon = 'icons/obj/custom.dmi' alternate_worn_icon = 'icons/mob/custom_w.dmi' mutantrace_variation = NO_MUTANTRACE_VARIATION + +/obj/item/toy/plush/mammal/dog/fritz + icon = 'icons/obj/custom.dmi' + icon_state = "fritz" + item_state = "fritz" + attack_verb = list("barked", "boofed", "shotgun'd") + obj_flags = UNIQUE_RENAME + unique_reskin = list("Goodboye" = "fritz", "Badboye" = "fritz_bad") diff --git a/tgstation.dme b/tgstation.dme index 20cbea540c..5c4405fd61 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -229,6 +229,7 @@ #include "code\controllers\configuration\entries\dynamic.dm" #include "code\controllers\configuration\entries\game_options.dm" #include "code\controllers\configuration\entries\general.dm" +#include "code\controllers\configuration\entries\plushies.dm" #include "code\controllers\subsystem\acid.dm" #include "code\controllers\subsystem\adjacent_air.dm" #include "code\controllers\subsystem\air.dm" From 976c725de2eadf128c08b041e0513143658aba21 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Mon, 23 Dec 2019 18:32:08 -0800 Subject: [PATCH 002/346] ok fermis stays --- code/controllers/subsystem/nightshift.dm | 2 +- code/game/objects/items/plushes.dm | 8 ++++++++ icons/obj/plushes.dmi | Bin 11558 -> 12729 bytes 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/code/controllers/subsystem/nightshift.dm b/code/controllers/subsystem/nightshift.dm index df406eed3c..7eb89ff79d 100644 --- a/code/controllers/subsystem/nightshift.dm +++ b/code/controllers/subsystem/nightshift.dm @@ -35,7 +35,7 @@ SUBSYSTEM_DEF(nightshift) if(!emergency) announce("Restoring night lighting configuration to normal operation.") else - announce("Disabling night lighting: Station is in a state of emergency.") + announce("Disabling night lighting: Station is in a state of emergency.") if(emergency) night_time = FALSE if(nightshift_active != night_time) diff --git a/code/game/objects/items/plushes.dm b/code/game/objects/items/plushes.dm index 99e30346d0..bd8dda85ee 100644 --- a/code/game/objects/items/plushes.dm +++ b/code/game/objects/items/plushes.dm @@ -676,3 +676,11 @@ /obj/item/toy/plush/mammal name = "mammal plushie" desc = "An adorable stuffed toy resembling some sort of crew member." + +/obj/item/toy/plush/catgirl/fermis + name = "medcat plushie" + desc = "An affectionate stuffed toy that resembles a certain medcat, comes complete with battery operated wagging tail!! You get the impression she's cheering you on to to find happiness and be kind to people." + icon_state = "fermis" + item_state = "fermis" + attack_verb = list("cuddled", "petpatted", "wigglepurred") + squeak_override = list('modular_citadel/sound/voice/merowr.ogg' = 1) diff --git a/icons/obj/plushes.dmi b/icons/obj/plushes.dmi index fcae4e86f96337466f8fcf0d197bf975c8f1c27c..3abb25d8b285a92a63f3e42071ce0ca3b435fb0f 100644 GIT binary patch literal 12729 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 W15luB%)$SX0Vv9<%2Y@h2mcq75}KU= literal 11558 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 Date: Fri, 10 Jan 2020 06:12:03 -0800 Subject: [PATCH 003/346] subtypes --- code/game/objects/items/plushes.dm | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/code/game/objects/items/plushes.dm b/code/game/objects/items/plushes.dm index bd8dda85ee..0d9363f95e 100644 --- a/code/game/objects/items/plushes.dm +++ b/code/game/objects/items/plushes.dm @@ -684,3 +684,33 @@ item_state = "fermis" attack_verb = list("cuddled", "petpatted", "wigglepurred") squeak_override = list('modular_citadel/sound/voice/merowr.ogg' = 1) + +/obj/item/toy/plush/xeno + name = "xenohybrid plushie" + desc = "An adorable stuffed toy that resmembles a xenomorphic crewmember." + squeak_override = list('sound/voice/hiss2.ogg' = 1) + +/obj/item/toy/plush/bird + name = "bird plushie" + desc = "An adorable stuffed plushie that resembles an avian." + attack_verb = list("peeped", "beeped", "poofed") + squeak_override = list('modular_citadel/sound/voice/peep.ogg' = 1) + +/obj/item/toy/plush/sergal + name = "sergal plushie" + desc = "An adorable stuffed plushie that resembles a sagaru." + squeak_override = list('modular_citadel/sound/voice/merp.ogg' = 1) + +/obj/item/toy/plush/mammal/dog + desc = "An adorable stuffed toy that resembles a canine." + attack_verb = list("barked", "boofed", "borked") + squeak_override = list( + 'modular_citadel/sound/voice/bark1.ogg' = 1, + 'modular_citadel/sound/voice/bark2.ogg' = 1 + ) + +/obj/item/toy/plush/catgirl + name = "feline plushie" + desc = "An adorable stuffed toy that resembles a feline." + attack_verb = list("headbutt", "scritched", "bit") + squeak_override = list('modular_citadel/sound/voice/nya.ogg' = 1) From 7ace9f0203a454eec68166c5b736c59288d308a4 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Fri, 10 Jan 2020 06:25:23 -0800 Subject: [PATCH 004/346] abstract types --- code/game/objects/items/plushes.dm | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/code/game/objects/items/plushes.dm b/code/game/objects/items/plushes.dm index 0d9363f95e..21056ce6ee 100644 --- a/code/game/objects/items/plushes.dm +++ b/code/game/objects/items/plushes.dm @@ -31,7 +31,8 @@ var/normal_desc //--end of love :'(-- - var/snowflake_id //if we set from a config snowflake plushie. + var/snowflake_id //if we set from a config snowflake plushie. + var/abstract_type = /obj/item/toy/plush //to prevent us from spawning "base" plushies. set this to a plush's own type. only use this if a plush is not meant to be standalone/spawned, ever. /obj/item/toy/plush/random_snowflake/Initialize(mapload, set_snowflake_id) . = ..() @@ -127,6 +128,7 @@ squeak_override = P.squeak_override attack_verb = P.attack_verb gender = P.gender + qdel(P) if(jsonlist["name"]) name = jsonlist["name"] if(jsonlist["desc"]) @@ -415,13 +417,22 @@ if(mood_message) desc += mood_message +GLOBAL_LIST_INIT(valid_plushie_paths, valid_plushie_paths()) +/proc/valid_plushie_paths() + . = list() + for(var/i in subtypesof(/obj/item/toy/plush)) + var/obj/item/toy/plush/abstract = i + if(initial(abstract.abstract_type) == i) + continue + . += i + /obj/item/toy/plush/random name = "Illegal plushie" desc = "Something fucked up" var/blacklisted_plushes = list(/obj/item/toy/plush/carpplushie/dehy_carp, /obj/item/toy/plush/awakenedplushie, /obj/item/toy/plush/random) /obj/item/toy/plush/random/Initialize() - var/newtype = prob(CONFIG_GET(number/snowflake_plushie_prob))? /obj/item/toy/plush/random_snowflake : (pick(subtypesof(/obj/item/toy/plush) - typecacheof(blacklisted_plushes))) + var/newtype = prob(CONFIG_GET(number/snowflake_plushie_prob))? /obj/item/toy/plush/random_snowflake : pick(GLOB.valid_plushie_paths) new newtype(loc) return INITIALIZE_HINT_QDEL @@ -676,6 +687,7 @@ /obj/item/toy/plush/mammal name = "mammal plushie" desc = "An adorable stuffed toy resembling some sort of crew member." + abstract_type = /obj/item/toy/plush/mammal /obj/item/toy/plush/catgirl/fermis name = "medcat plushie" @@ -689,17 +701,20 @@ name = "xenohybrid plushie" desc = "An adorable stuffed toy that resmembles a xenomorphic crewmember." squeak_override = list('sound/voice/hiss2.ogg' = 1) + abstract_type = /obj/item/toy/plush/xeno /obj/item/toy/plush/bird name = "bird plushie" desc = "An adorable stuffed plushie that resembles an avian." attack_verb = list("peeped", "beeped", "poofed") squeak_override = list('modular_citadel/sound/voice/peep.ogg' = 1) + abstract_type = /obj/item/toy/plush/bird /obj/item/toy/plush/sergal name = "sergal plushie" desc = "An adorable stuffed plushie that resembles a sagaru." squeak_override = list('modular_citadel/sound/voice/merp.ogg' = 1) + abstract_type = /obj/item/toy/plush/sergal /obj/item/toy/plush/mammal/dog desc = "An adorable stuffed toy that resembles a canine." @@ -708,9 +723,11 @@ 'modular_citadel/sound/voice/bark1.ogg' = 1, 'modular_citadel/sound/voice/bark2.ogg' = 1 ) + abstract_type = /obj/item/toy/plush/mammal/dog /obj/item/toy/plush/catgirl name = "feline plushie" desc = "An adorable stuffed toy that resembles a feline." attack_verb = list("headbutt", "scritched", "bit") squeak_override = list('modular_citadel/sound/voice/nya.ogg' = 1) + abstract_type = /obj/item/toy/plush/catgirl From c735123e4ecfb0f889ed7c6104790e3bb333016c Mon Sep 17 00:00:00 2001 From: Putnam Date: Fri, 17 Jan 2020 02:47:16 -0800 Subject: [PATCH 005/346] consent logging and arousal tweaks --- code/__HELPERS/_logging.dm | 2 ++ code/modules/vore/eating/living.dm | 4 ++++ modular_citadel/code/modules/arousal/arousal.dm | 4 ++++ 3 files changed, 10 insertions(+) diff --git a/code/__HELPERS/_logging.dm b/code/__HELPERS/_logging.dm index 4dd590d9a1..b14c1b63f5 100644 --- a/code/__HELPERS/_logging.dm +++ b/code/__HELPERS/_logging.dm @@ -52,6 +52,8 @@ if (CONFIG_GET(flag/log_adminchat)) WRITE_LOG(GLOB.world_game_log, "ADMIN: DSAY: [text]") +/proc/log_consent(text) + WRITE_LOG(GLOB.world_game_log,["CONSENT: [text]"]) /* All other items are public. */ /proc/log_game(text) diff --git a/code/modules/vore/eating/living.dm b/code/modules/vore/eating/living.dm index 9fdb7aa764..aac1aa88ff 100644 --- a/code/modules/vore/eating/living.dm +++ b/code/modules/vore/eating/living.dm @@ -237,6 +237,8 @@ return //Actual escaping B.release_specific_contents(src,TRUE) //we might as well take advantage of that specific belly's handling. Else we stay blinded forever. + message_admins("[src] used OOC escape to escape from [B.owner]'s belly.") + consent_log("[src] used OOC escape to escape from [B.owner]'s belly.") src.stop_sound_channel(CHANNEL_PREYLOOP) SEND_SIGNAL(src, COMSIG_CLEAR_MOOD_EVENT, "fedprey", /datum/mood_event/fedprey) for(var/mob/living/simple_animal/SA in range(10)) @@ -255,6 +257,8 @@ return //Actual escaping belly.go_out(src) //Just force-ejects from the borg as if they'd clicked the eject button. + message_admins("[src] used OOC escape to escape from [B.owner]'s dogborg sleeper.") + consent_log("[src] used OOC escape to escape from [B.owner]'s dogborg sleeper.") else to_chat(src,"You aren't inside anyone, though, is the thing.") diff --git a/modular_citadel/code/modules/arousal/arousal.dm b/modular_citadel/code/modules/arousal/arousal.dm index 3361707b04..3022b85ff0 100644 --- a/modular_citadel/code/modules/arousal/arousal.dm +++ b/modular_citadel/code/modules/arousal/arousal.dm @@ -158,9 +158,13 @@ return //No one left. var/mob/living/target = input(src, "With whom?", "Sexual partner", null) as null|anything in partners //pick one, default to null if(target && in_range(src, target)) + to_chat(src,"Waiting for consent...") var/consenting = input(target, "Do you want [src] to climax with you?","Climax mechanics","No") in list("Yes","No") if(consenting == "Yes") return target + else + message_admins("[src] tried to climax with [target], but [target] did not consent.") + consent_log("[src] tried to climax with [target], but [target] did not consent.") /mob/living/carbon/human/proc/pick_climax_container(silent = FALSE) var/list/containers_list = list() From ae4afdd90453c56e7e727d86593e79929b5120ab Mon Sep 17 00:00:00 2001 From: Putnam Date: Fri, 17 Jan 2020 03:09:46 -0800 Subject: [PATCH 006/346] made it work (wow!) --- code/__HELPERS/_logging.dm | 2 +- code/modules/vore/eating/living.dm | 6 +++--- modular_citadel/code/modules/arousal/arousal.dm | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/code/__HELPERS/_logging.dm b/code/__HELPERS/_logging.dm index b14c1b63f5..de3970a7f3 100644 --- a/code/__HELPERS/_logging.dm +++ b/code/__HELPERS/_logging.dm @@ -53,7 +53,7 @@ WRITE_LOG(GLOB.world_game_log, "ADMIN: DSAY: [text]") /proc/log_consent(text) - WRITE_LOG(GLOB.world_game_log,["CONSENT: [text]"]) + WRITE_LOG(GLOB.world_game_log,"CONSENT: [text]") /* All other items are public. */ /proc/log_game(text) diff --git a/code/modules/vore/eating/living.dm b/code/modules/vore/eating/living.dm index aac1aa88ff..4b50ade7e3 100644 --- a/code/modules/vore/eating/living.dm +++ b/code/modules/vore/eating/living.dm @@ -238,7 +238,7 @@ //Actual escaping B.release_specific_contents(src,TRUE) //we might as well take advantage of that specific belly's handling. Else we stay blinded forever. message_admins("[src] used OOC escape to escape from [B.owner]'s belly.") - consent_log("[src] used OOC escape to escape from [B.owner]'s belly.") + log_consent("[src] used OOC escape to escape from [B.owner]'s belly.") src.stop_sound_channel(CHANNEL_PREYLOOP) SEND_SIGNAL(src, COMSIG_CLEAR_MOOD_EVENT, "fedprey", /datum/mood_event/fedprey) for(var/mob/living/simple_animal/SA in range(10)) @@ -257,8 +257,8 @@ return //Actual escaping belly.go_out(src) //Just force-ejects from the borg as if they'd clicked the eject button. - message_admins("[src] used OOC escape to escape from [B.owner]'s dogborg sleeper.") - consent_log("[src] used OOC escape to escape from [B.owner]'s dogborg sleeper.") + message_admins("[src] used OOC escape from a dogborg sleeper.") + log_consent("[src] used OOC escape from a dogborg sleeper.") else to_chat(src,"You aren't inside anyone, though, is the thing.") diff --git a/modular_citadel/code/modules/arousal/arousal.dm b/modular_citadel/code/modules/arousal/arousal.dm index 3022b85ff0..3a586d061d 100644 --- a/modular_citadel/code/modules/arousal/arousal.dm +++ b/modular_citadel/code/modules/arousal/arousal.dm @@ -164,7 +164,7 @@ return target else message_admins("[src] tried to climax with [target], but [target] did not consent.") - consent_log("[src] tried to climax with [target], but [target] did not consent.") + log_consent("[src] tried to climax with [target], but [target] did not consent.") /mob/living/carbon/human/proc/pick_climax_container(silent = FALSE) var/list/containers_list = list() From a8569fa7e5284c1998cdecfc0e7a2fc36f3f9072 Mon Sep 17 00:00:00 2001 From: Putnam Date: Fri, 17 Jan 2020 21:31:23 -0800 Subject: [PATCH 007/346] Makes it so that opting out of ass slapping is OPT OUT --- code/modules/mob/living/carbon/human/species.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 7fc1d2a4b3..538f9d6555 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -1585,7 +1585,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) if (!HAS_TRAIT(target, TRAIT_PERMABONER)) stop_wagging_tail(target) return FALSE - else if(aim_for_groin && (target == user || target.lying || same_dir) && (target_on_help || target_restrained || target_aiming_for_groin)) + else if(!(user.client?.prefs.cit_toggles & NO_ASS_SLAP) && aim_for_groin && (target == user || target.lying || same_dir) && (target_on_help || target_restrained || target_aiming_for_groin)) if(target.client?.prefs.cit_toggles & NO_ASS_SLAP) to_chat(user,"A force stays your hand, preventing you from slapping \the [target]'s ass!") return FALSE From 04b34ec8edf4fda5b69a8a65a09f6b08a107f02f Mon Sep 17 00:00:00 2001 From: Seris02 Date: Sat, 18 Jan 2020 18:04:31 +0800 Subject: [PATCH 008/346] hijack implant --- code/__DEFINES/traits.dm | 1 + code/datums/action.dm | 40 +++++++ code/datums/wires/airlock.dm | 2 +- code/datums/wires/vending.dm | 2 +- code/game/machinery/Sleeper.dm | 2 +- code/game/machinery/_machinery.dm | 2 +- code/game/machinery/announcement_system.dm | 10 +- .../machinery/computer/arcade/minesweeper.dm | 6 +- code/game/machinery/computer/camera.dm | 2 +- code/game/machinery/computer/card.dm | 10 +- .../game/machinery/computer/communications.dm | 2 +- code/game/machinery/computer/dna_console.dm | 4 +- code/game/machinery/computer/medical.dm | 6 +- code/game/machinery/computer/pod.dm | 2 +- .../machinery/computer/prisoner/management.dm | 2 +- code/game/machinery/computer/security.dm | 6 +- code/game/machinery/computer/teleporter.dm | 4 +- code/game/machinery/dance_machine.dm | 2 +- code/game/machinery/dish_drive.dm | 2 +- code/game/machinery/dna_scanner.dm | 2 +- code/game/machinery/doors/airlock.dm | 12 +- code/game/machinery/newscaster.dm | 2 +- .../machinery/porta_turret/portable_turret.dm | 12 +- code/game/machinery/shieldgen.dm | 4 +- .../telecomms/computers/logbrowser.dm | 2 +- .../machinery/telecomms/computers/message.dm | 2 +- .../telecomms/computers/telemonitor.dm | 2 +- .../telecomms/machine_interactions.dm | 8 +- code/game/machinery/transformer.dm | 2 +- code/game/objects/items/devices/PDA/PDA.dm | 6 +- code/game/objects/items/devices/PDA/cart.dm | 2 +- .../objects/items/implants/implant_hijack.dm | 75 ++++++++++++ code/game/objects/items/implants/implanter.dm | 6 +- code/game/objects/objs.dm | 2 +- code/game/objects/structures/morgue.dm | 2 +- .../atmospherics/machinery/airalarm.dm | 8 +- .../awaymissions/bluespaceartillery.dm | 2 +- code/modules/cargo/supplypod_beacon.dm | 2 +- code/modules/events/holiday/vday.dm | 2 +- .../kitchen_machinery/microwave.dm | 12 +- code/modules/holodeck/computer.dm | 4 +- code/modules/hydroponics/gene_modder.dm | 2 +- .../integrated_electronics/core/printer.dm | 2 +- code/modules/jobs/access.dm | 2 +- .../mob/living/carbon/human/examine.dm | 2 + .../mob/living/simple_animal/bot/bot.dm | 12 +- .../mob/living/simple_animal/bot/cleanbot.dm | 2 +- .../mob/living/simple_animal/bot/ed209bot.dm | 2 +- .../mob/living/simple_animal/bot/firebot.dm | 2 +- .../mob/living/simple_animal/bot/floorbot.dm | 2 +- .../mob/living/simple_animal/bot/honkbot.dm | 2 +- .../mob/living/simple_animal/bot/medbot.dm | 2 +- .../mob/living/simple_animal/bot/mulebot.dm | 2 +- .../mob/living/simple_animal/bot/secbot.dm | 4 +- code/modules/mob/mob.dm | 2 +- code/modules/mob/mob_defines.dm | 2 + code/modules/mob/mob_helpers.dm | 17 +++ .../computers/item/computer_ui.dm | 2 +- .../modular_computers/file_system/program.dm | 2 +- code/modules/oracle_ui/hookup_procs.dm | 4 +- code/modules/power/apc.dm | 108 ++++++++++++++---- code/modules/power/lighting.dm | 12 +- .../chemistry/machinery/chem_dispenser.dm | 2 +- .../chemistry/machinery/chem_master.dm | 14 +-- .../chemistry/machinery/reagentgrinder.dm | 8 +- code/modules/tgui/states/default.dm | 4 + .../uplink/uplink_items/uplink_implants.dm | 24 ++-- icons/obj/implants.dmi | Bin 2481 -> 2614 bytes icons/obj/lighting.dmi | Bin 75974 -> 77552 bytes icons/obj/power.dmi | Bin 33308 -> 32888 bytes tgstation.dme | 1 + tgui/assets/tgui.css | 2 +- tgui/assets/tgui.js | 26 ++--- tgui/src/interfaces/apc.ract | 14 +++ 74 files changed, 400 insertions(+), 160 deletions(-) create mode 100644 code/game/objects/items/implants/implant_hijack.dm diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index b7a5975ad5..a3dc8f69a3 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -110,6 +110,7 @@ #define TRAIT_NOHARDCRIT "nohardcrit" #define TRAIT_NOSOFTCRIT "nosoftcrit" #define TRAIT_MINDSHIELD "mindshield" +#define TRAIT_HIJACKER "hijacker" #define TRAIT_SIXTHSENSE "sixthsense" #define TRAIT_DISSECTED "dissected" #define TRAIT_FEARLESS "fearless" diff --git a/code/datums/action.dm b/code/datums/action.dm index cb56c26b91..371851186f 100644 --- a/code/datums/action.dm +++ b/code/datums/action.dm @@ -544,6 +544,46 @@ cooldown = world.time owner.playsound_local(box, 'sound/misc/box_deploy.ogg', 50, TRUE) +/datum/action/item_action/removeAPCs + name = "Relinquish APC" + desc = "Let go of an APC, relinquish control back to the station." + icon_icon = 'icons/obj/implants.dmi' + button_icon_state = "hijackx" + +/datum/action/item_action/removeAPCs/Trigger() + var/list/areas = list() + for (var/area/a in owner.siliconaccessareas) + areas += a.name + areas += "None" + var/removeAPC = input("Select an APC to remove:","Remove APC Control",1) in areas + if (removeAPC == "None") + return + var/area/area = owner.siliconaccessareas[areas.Find(removeAPC)] + var/obj/machinery/power/apc/apc = area.get_apc() + apc.hijacker = 0 + apc.update_icon() + apc.set_hijacked_lighting() + owner.toggleSiliconAccessArea(area) + +/datum/action/item_action/accessAPCs + name = "Access APC Interface" + desc = "Open the APC's interface." + icon_icon = 'icons/obj/implants.dmi' + button_icon_state = "hijacky" + +/datum/action/item_action/accessAPCs/Trigger() + var/list/areas = list() + for (var/area/a in owner.siliconaccessareas) + areas += a.name + areas += "None" + var/accessAPC = input("Select an APC to access:","Access APC Interface",1) in areas + if (accessAPC == "None") + return + var/area/area = owner.siliconaccessareas[areas.Find(accessAPC)] + var/obj/machinery/power/apc/apc = area.get_apc() + apc.ui_interact(owner) + + //Preset for spells /datum/action/spell_action check_flags = 0 diff --git a/code/datums/wires/airlock.dm b/code/datums/wires/airlock.dm index 315cfa59d6..6ff2a2fb4e 100644 --- a/code/datums/wires/airlock.dm +++ b/code/datums/wires/airlock.dm @@ -52,7 +52,7 @@ /datum/wires/airlock/interactable(mob/user) var/obj/machinery/door/airlock/A = holder - if(!issilicon(user) && A.isElectrified() && A.shock(user, 100)) + if(!hasSiliconAccessInArea(user,get_area(src)) && A.isElectrified() && A.shock(user, 100)) return FALSE if(A.panel_open) return TRUE diff --git a/code/datums/wires/vending.dm b/code/datums/wires/vending.dm index 0c66f26a92..84358ea79d 100644 --- a/code/datums/wires/vending.dm +++ b/code/datums/wires/vending.dm @@ -12,7 +12,7 @@ /datum/wires/vending/interactable(mob/user) var/obj/machinery/vending/V = holder - if(!issilicon(user) && V.seconds_electrified && V.shock(user, 100)) + if(!hasSiliconAccessInArea(user,get_area(src)) && V.seconds_electrified && V.shock(user, 100)) return FALSE if(V.panel_open) return TRUE diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index b6dc09eb59..d0d9d42abc 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -182,7 +182,7 @@ /obj/machinery/sleeper/AltClick(mob/user) . = ..() - if(!user.canUseTopic(src, !issilicon(user))) + if(!user.canUseTopic(src, !hasSiliconAccessInArea(user,get_area(src)))) return if(state_open) close_machine() diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm index 5f44fccdac..4ceefa94f6 100644 --- a/code/game/machinery/_machinery.dm +++ b/code/game/machinery/_machinery.dm @@ -224,7 +224,7 @@ Class Procs: return !(stat & (NOPOWER|BROKEN|MAINT)) /obj/machinery/can_interact(mob/user) - var/silicon = issiliconoradminghost(user) + var/silicon = issiliconoradminghost(user) || hasSiliconAccessInArea(user,get_area(src)) if((stat & (NOPOWER|BROKEN)) && !(interaction_flags_machine & INTERACT_MACHINE_OFFLINE)) return FALSE if(panel_open && !(interaction_flags_machine & INTERACT_MACHINE_OPEN)) diff --git a/code/game/machinery/announcement_system.dm b/code/game/machinery/announcement_system.dm index 56227cdd53..ff8d6a2d58 100644 --- a/code/game/machinery/announcement_system.dm +++ b/code/game/machinery/announcement_system.dm @@ -105,7 +105,7 @@ GLOBAL_LIST_EMPTY(announcement_systems) /obj/machinery/announcement_system/ui_interact(mob/user) . = ..() - if(!user.canUseTopic(src, !issilicon(user))) + if(!user.canUseTopic(src, !hasSiliconAccessInArea(user,get_area(src)))) return if(stat & BROKEN) visible_message("[src] buzzes.", "You hear a faint buzz.") @@ -123,7 +123,7 @@ GLOBAL_LIST_EMPTY(announcement_systems) /obj/machinery/announcement_system/Topic(href, href_list) if(..()) return - if(!usr.canUseTopic(src, !issilicon(usr))) + if(!usr.canUseTopic(src, !hasSiliconAccessInArea(usr,get_area(src)))) return if(stat & BROKEN) visible_message("[src] buzzes.", "You hear a faint buzz.") @@ -132,13 +132,13 @@ GLOBAL_LIST_EMPTY(announcement_systems) if(href_list["ArrivalTopic"]) var/NewMessage = stripped_input(usr, "Enter in the arrivals announcement configuration.", "Arrivals Announcement Config", arrival) - if(!usr.canUseTopic(src, !issilicon(usr))) + if(!usr.canUseTopic(src, !hasSiliconAccessInArea(usr,get_area(src)))) return if(NewMessage) arrival = NewMessage else if(href_list["NewheadTopic"]) var/NewMessage = stripped_input(usr, "Enter in the departmental head announcement configuration.", "Head Departmental Announcement Config", newhead) - if(!usr.canUseTopic(src, !issilicon(usr))) + if(!usr.canUseTopic(src, !hasSiliconAccessInArea(usr,get_area(src)))) return if(NewMessage) newhead = NewMessage @@ -157,7 +157,7 @@ GLOBAL_LIST_EMPTY(announcement_systems) . = attack_ai(user) /obj/machinery/announcement_system/attack_ai(mob/user) - if(!user.canUseTopic(src, !issilicon(user))) + if(!user.canUseTopic(src, !hasSiliconAccessInArea(user,get_area(src)))) return if(stat & BROKEN) to_chat(user, "[src]'s firmware appears to be malfunctioning!") diff --git a/code/game/machinery/computer/arcade/minesweeper.dm b/code/game/machinery/computer/arcade/minesweeper.dm index 641ef1c9cd..452f180531 100644 --- a/code/game/machinery/computer/arcade/minesweeper.dm +++ b/code/game/machinery/computer/arcade/minesweeper.dm @@ -304,12 +304,12 @@ /obj/machinery/computer/arcade/minesweeper/proc/custom_generation(mob/user) playsound(loc, 'sound/arcade/minesweeper_menuselect.ogg', 50, 0, extrarange = -3, falloff = 10) //Entered into the menu so ping sound var/new_rows = input(user, "How many rows do you want? (Minimum: 4, Maximum: 30)", "Minesweeper Rows") as null|num - if(!new_rows || !user.canUseTopic(src, !issilicon(user))) + if(!new_rows || !user.canUseTopic(src, !hasSiliconAccessInArea(user,get_area(src)))) return FALSE new_rows = CLAMP(new_rows + 1, 4, 30) playsound(loc, 'sound/arcade/minesweeper_menuselect.ogg', 50, 0, extrarange = -3, falloff = 10) var/new_columns = input(user, "How many columns do you want? (Minimum: 4, Maximum: 50)", "Minesweeper Squares") as null|num - if(!new_columns || !user.canUseTopic(src, !issilicon(user))) + if(!new_columns || !user.canUseTopic(src, !hasSiliconAccessInArea(user,get_area(src)))) return FALSE new_columns = CLAMP(new_columns + 1, 4, 50) playsound(loc, 'sound/arcade/minesweeper_menuselect.ogg', 50, 0, extrarange = -3, falloff = 10) @@ -317,7 +317,7 @@ var/lower_limit = round(grid_area*0.156) var/upper_limit = round(grid_area*0.85) var/new_mine_limit = input(user, "How many mines do you want? (Minimum: [lower_limit], Maximum: [upper_limit])", "Minesweeper Mines") as null|num - if(!new_mine_limit || !user.canUseTopic(src, !issilicon(user))) + if(!new_mine_limit || !user.canUseTopic(src, !hasSiliconAccessInArea(user,get_area(src)))) return FALSE playsound(loc, 'sound/arcade/minesweeper_menuselect.ogg', 50, 0, extrarange = -3, falloff = 10) rows = new_rows diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm index 1d54e8f772..dd29481cd0 100644 --- a/code/game/machinery/computer/camera.dm +++ b/code/game/machinery/computer/camera.dm @@ -36,7 +36,7 @@ return ..() /obj/machinery/computer/security/can_interact(mob/user) - if((!issilicon(user) && !Adjacent(user)) || is_blind(user) || !in_view_range(user, src)) + if((!hasSiliconAccessInArea(user,get_area(src)) && !Adjacent(user)) || is_blind(user) || !in_view_range(user, src)) return FALSE return ..() diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm index 6703bae525..b9db0a6217 100644 --- a/code/game/machinery/computer/card.dm +++ b/code/game/machinery/computer/card.dm @@ -171,7 +171,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) /obj/machinery/computer/card/AltClick(mob/user) . = ..() - if(!user.canUseTopic(src, !issilicon(user)) || !is_operational()) + if(!user.canUseTopic(src, !hasSiliconAccessInArea(user,get_area(src))) || !is_operational()) return if(inserted_modify_id) if(id_eject(user, inserted_modify_id)) @@ -360,7 +360,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) if(..()) return - if(!usr.canUseTopic(src, !issilicon(usr)) || !is_operational()) + if(!usr.canUseTopic(src, !hasSiliconAccessInArea(usr,get_area(src))) || !is_operational()) usr.unset_machine() usr << browse(null, "window=id_com") return @@ -392,7 +392,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) inserted_scan_id = id_to_insert updateUsrDialog() if ("auth") - if ((!( authenticated ) && (inserted_scan_id || issilicon(usr)) || mode)) + if ((!( authenticated ) && (inserted_scan_id || hasSiliconAccessInArea(usr,get_area(src))) || mode)) if (check_access(inserted_scan_id)) region_access = list() head_subordinates = list() @@ -426,7 +426,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) get_subordinates("Quartermaster") if(region_access) authenticated = 1 - else if ((!( authenticated ) && issilicon(usr)) && (!inserted_modify_id)) + else if ((!( authenticated ) && hasSiliconAccessInArea(usr,get_area(src))) && (!inserted_modify_id)) to_chat(usr, "You can't modify an ID without an ID inserted to modify! Once one is in the modify slot on the computer, you can log in.") if ("logout") region_access = null @@ -481,7 +481,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) if ("reg") if (authenticated) var/t2 = inserted_modify_id - if ((authenticated && inserted_modify_id == t2 && (in_range(src, usr) || issilicon(usr)) && isturf(loc))) + if ((authenticated && inserted_modify_id == t2 && (in_range(src, usr) || hasSiliconAccessInArea(usr,get_area(src))) && isturf(loc))) var/newName = reject_bad_name(href_list["reg"]) if(newName) inserted_modify_id.registered_name = newName diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index 1bc8a82147..1f5f63c20e 100755 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -449,7 +449,7 @@ var/datum/browser/popup = new(user, "communications", "Communications Console", 400, 500) popup.set_title_image(user.browse_rsc_icon(icon, icon_state)) - if(issilicon(user)) + if(issilicon(user) || (hasSiliconAccessInArea(user,get_area(src)) && !in_range(user,src))) var/dat2 = interact_ai(user) // give the AI a different interact proc to limit its access if(dat2) dat += dat2 diff --git a/code/game/machinery/computer/dna_console.dm b/code/game/machinery/computer/dna_console.dm index 7330ae26e7..d3b514c1ad 100644 --- a/code/game/machinery/computer/dna_console.dm +++ b/code/game/machinery/computer/dna_console.dm @@ -64,7 +64,7 @@ if(!user) return var/datum/browser/popup = new(user, "scannernew", "DNA Modifier Console", 800, 630) // Set up the popup browser window - if(!(in_range(src, user) || issilicon(user))) + if(!(in_range(src, user) || hasSiliconAccessInArea(user,get_area(src)))) popup.close() return popup.add_stylesheet("scannernew", 'html/browser/scannernew.css') @@ -308,7 +308,7 @@ return if(!isturf(usr.loc)) return - if(!((isturf(loc) && in_range(src, usr)) || issilicon(usr))) + if(!((isturf(loc) && in_range(src, usr)) || hasSiliconAccessInArea(usr,get_area(src)))) return if(current_screen == "working") return diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm index 29055e87c3..d48300fbb9 100644 --- a/code/game/machinery/computer/medical.dm +++ b/code/game/machinery/computer/medical.dm @@ -190,7 +190,7 @@ if(!(active2 in GLOB.data_core.medical)) active2 = null - if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || issilicon(usr) || IsAdminGhost(usr)) + if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || hasSiliconAccessInArea(usr,get_area(src)) || IsAdminGhost(usr)) usr.set_machine(src) if(href_list["temp"]) temp = null @@ -216,7 +216,7 @@ else if(href_list["login"]) var/mob/M = usr var/obj/item/card/id/I = M.get_idcard(TRUE) - if(issilicon(M)) + if(hasSiliconAccessInArea(M,get_area(src))) active1 = null active2 = null authenticated = 1 @@ -569,7 +569,7 @@ if(user) if(message) if(authenticated) - if(user.canUseTopic(src, !issilicon(user))) + if(user.canUseTopic(src, !hasSiliconAccessInArea(user,get_area(src)))) if(!record1 || record1 == active1) if(!record2 || record2 == active2) return 1 diff --git a/code/game/machinery/computer/pod.dm b/code/game/machinery/computer/pod.dm index 1388e3c8de..97578b5152 100644 --- a/code/game/machinery/computer/pod.dm +++ b/code/game/machinery/computer/pod.dm @@ -86,7 +86,7 @@ /obj/machinery/computer/pod/Topic(href, href_list) if(..()) return - if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || issilicon(usr)) + if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || hasSiliconAccessInArea(usr,get_area(src))) usr.set_machine(src) if(href_list["power"]) var/t = text2num(href_list["power"]) diff --git a/code/game/machinery/computer/prisoner/management.dm b/code/game/machinery/computer/prisoner/management.dm index 653f6bf48b..731cd72e15 100644 --- a/code/game/machinery/computer/prisoner/management.dm +++ b/code/game/machinery/computer/prisoner/management.dm @@ -87,7 +87,7 @@ /obj/machinery/computer/prisoner/management/Topic(href, href_list) if(..()) return - if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || issilicon(usr)) + if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || hasSiliconAccessInArea(usr,get_area(src))) usr.set_machine(src) if(href_list["id"]) diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm index aabb1fe408..2be544462c 100644 --- a/code/game/machinery/computer/security.dm +++ b/code/game/machinery/computer/security.dm @@ -265,7 +265,7 @@ What a mess.*/ active1 = null if(!( GLOB.data_core.security.Find(active2) )) active2 = null - if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || issilicon(usr) || IsAdminGhost(usr)) + if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || hasSiliconAccessInArea(usr,get_area(src)) || IsAdminGhost(usr)) usr.set_machine(src) switch(href_list["choice"]) // SORTING! @@ -299,7 +299,7 @@ What a mess.*/ if("Log In") var/mob/M = usr var/obj/item/card/id/I = M.get_idcard(TRUE) - if(issilicon(M)) + if(hasSiliconAccessInArea(M,get_area(src))) var/mob/living/silicon/borg = M active1 = null active2 = null @@ -802,7 +802,7 @@ What a mess.*/ /obj/machinery/computer/secure_data/proc/canUseSecurityRecordsConsole(mob/user, message1 = 0, record1, record2) if(user) if(authenticated) - if(user.canUseTopic(src, !issilicon(user))) + if(user.canUseTopic(src, !hasSiliconAccessInArea(user,get_area(src)))) if(!trim(message1)) return 0 if(!record1 || record1 == active1) diff --git a/code/game/machinery/computer/teleporter.dm b/code/game/machinery/computer/teleporter.dm index 21fb70c38c..92c3748674 100644 --- a/code/game/machinery/computer/teleporter.dm +++ b/code/game/machinery/computer/teleporter.dm @@ -141,7 +141,7 @@ L[avoid_assoc_duplicate_keys(M.real_name, areaindex)] = M var/desc = input("Please select a location to lock in.", "Locking Computer") as null|anything in L - if(!user.canUseTopic(src, !issilicon(user), NO_DEXTERY)) //check if we are still around + if(!user.canUseTopic(src, !hasSiliconAccessInArea(user,get_area(src)), NO_DEXTERY)) //check if we are still around return target = L[desc] if(imp_t) @@ -169,7 +169,7 @@ to_chat(user, "No active connected stations located.") return var/desc = input("Please select a station to lock in.", "Locking Computer") as null|anything in L - if(!user.canUseTopic(src, !issilicon(user), NO_DEXTERY)) //again, check if we are still around + if(!user.canUseTopic(src, !hasSiliconAccessInArea(user,get_area(src)), NO_DEXTERY)) //again, check if we are still around return var/obj/machinery/teleport/station/target_station = L[desc] if(!target_station || !target_station.teleporter_hub) diff --git a/code/game/machinery/dance_machine.dm b/code/game/machinery/dance_machine.dm index 91306585b8..44d54e6a8d 100644 --- a/code/game/machinery/dance_machine.dm +++ b/code/game/machinery/dance_machine.dm @@ -53,7 +53,7 @@ /obj/machinery/jukebox/ui_interact(mob/user) . = ..() - if(!user.canUseTopic(src, !issilicon(user))) + if(!user.canUseTopic(src, !hasSiliconAccessInArea(user,get_area(src)))) return if (!anchored) to_chat(user,"This device must be anchored by a wrench!") diff --git a/code/game/machinery/dish_drive.dm b/code/game/machinery/dish_drive.dm index 7f21d1c1b3..436af39895 100644 --- a/code/game/machinery/dish_drive.dm +++ b/code/game/machinery/dish_drive.dm @@ -98,7 +98,7 @@ /obj/machinery/dish_drive/AltClick(mob/living/user) . = ..() - if(user.canUseTopic(src, !issilicon(user))) + if(user.canUseTopic(src, !hasSiliconAccessInArea(user,get_area(src)))) do_the_dishes(TRUE) return TRUE diff --git a/code/game/machinery/dna_scanner.dm b/code/game/machinery/dna_scanner.dm index f62dceff6c..528b99a451 100644 --- a/code/game/machinery/dna_scanner.dm +++ b/code/game/machinery/dna_scanner.dm @@ -165,7 +165,7 @@ /obj/machinery/dna_scannernew/AltClick(mob/user) . = ..() - if(!user.canUseTopic(src, !issilicon(user))) + if(!user.canUseTopic(src, !hasSiliconAccessInArea(user,get_area(src)))) return interact(user) return TRUE diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 3e88223037..b35b00a953 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -676,7 +676,7 @@ else . += "It looks very robust." - if(issilicon(user) && (!stat & BROKEN)) + if(hasSiliconAccessInArea(user,get_area(src)) && (!stat & BROKEN)) . += "Shift-click [src] to [ density ? "open" : "close"] it." . += "Ctrl-click [src] to [ locked ? "raise" : "drop"] its bolts." . += "Alt-click [src] to [ secondsElectrified ? "un-electrify" : "permanently electrify"] it." @@ -1322,9 +1322,9 @@ if(density && !open(2)) //The airlock is still closed, but something prevented it opening. (Another player noticed and bolted/welded the airlock in time!) to_chat(user, "Despite your efforts, [src] managed to resist your attempts to open it!") -/obj/machinery/door/airlock/hostile_lockdown(mob/origin) +/obj/machinery/door/airlock/hostile_lockdown(mob/origin, aicontrolneeded = TRUE) // Must be powered and have working AI wire. - if(canAIControl(src) && !stat) + if((aicontrolneeded && canAIControl(src) && !stat) || !aicontrolneeded) locked = FALSE //For airlocks that were bolted open. safe = FALSE //DOOR CRUSH close() @@ -1334,9 +1334,9 @@ LAZYADD(shockedby, "\[[TIME_STAMP("hh:mm:ss", FALSE)]\] [key_name(origin)]") -/obj/machinery/door/airlock/disable_lockdown() +/obj/machinery/door/airlock/disable_lockdown(aicontrolneeded = TRUE) // Must be powered and have working AI wire. - if(canAIControl(src) && !stat) + if((aicontrolneeded && canAIControl(src) && !stat) || !aicontrolneeded) unbolt() set_electrified(NOT_ELECTRIFIED) open() @@ -1587,7 +1587,7 @@ . = TRUE /obj/machinery/door/airlock/proc/user_allowed(mob/user) - return (issilicon(user) && canAIControl(user)) || IsAdminGhost(user) + return (hasSiliconAccessInArea(user,get_area(src)) && canAIControl(user)) || IsAdminGhost(user) /obj/machinery/door/airlock/proc/shock_restore(mob/user) if(!user_allowed(user)) diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm index 6bf9930eec..bcf266b9f5 100644 --- a/code/game/machinery/newscaster.dm +++ b/code/game/machinery/newscaster.dm @@ -509,7 +509,7 @@ GLOBAL_LIST_EMPTY(allCasters) /obj/machinery/newscaster/Topic(href, href_list) if(..()) return - if ((usr.contents.Find(src) || ((get_dist(src, usr) <= 1) && isturf(loc))) || issilicon(usr)) + if ((usr.contents.Find(src) || ((get_dist(src, usr) <= 1) && isturf(loc))) || hasSiliconAccessInArea(usr,get_area(src))) usr.set_machine(src) scan_user(usr) if(href_list["set_channel_name"]) diff --git a/code/game/machinery/porta_turret/portable_turret.dm b/code/game/machinery/porta_turret/portable_turret.dm index a27cb9b78c..f6ff9d9815 100644 --- a/code/game/machinery/porta_turret/portable_turret.dm +++ b/code/game/machinery/porta_turret/portable_turret.dm @@ -839,7 +839,7 @@ /obj/machinery/turretid/examine(mob/user) . = ..() - if(issilicon(user) && (!stat & BROKEN)) + if(hasSiliconAccessInArea(user,get_area(src)) && (!stat & BROKEN)) . += "Ctrl-click [src] to [ enabled ? "disable" : "enable"] turrets." . += "Alt-click [src] to set turrets to [ lethal ? "stun" : "kill"]." @@ -854,7 +854,7 @@ to_chat(user, "You link \the [M.buffer] with \the [src]") return - if (issilicon(user)) + if (hasSiliconAccessInArea(user,get_area(src))) return attack_hand(user) if ( get_dist(src, user) == 0 ) // trying to unlock the interface @@ -895,7 +895,7 @@ /obj/machinery/turretid/ui_interact(mob/user) . = ..() if ( get_dist(src, user) > 0 ) - if ( !(issilicon(user) || IsAdminGhost(user)) ) + if ( !(hasSiliconAccessInArea(user,get_area(src)) || IsAdminGhost(user)) ) to_chat(user, "You are too far away.") user.unset_machine() user << browse(null, "window=turretid") @@ -903,10 +903,10 @@ var/t = "" - if(locked && !(issilicon(user) || IsAdminGhost(user))) + if(locked && !(hasSiliconAccessInArea(user,get_area(src)) || IsAdminGhost(user))) t += "
Swipe ID card to unlock interface
" else - if(!issilicon(user) && !IsAdminGhost(user)) + if(!hasSiliconAccessInArea(user,get_area(src)) && !IsAdminGhost(user)) t += "
Swipe ID card to lock interface
" t += "Turrets [enabled?"activated":"deactivated"] -
[enabled?"Disable":"Enable"]?
" t += "Currently set for [lethal?"lethal":"stun repeatedly"] - Change to [lethal?"Stun repeatedly":"Lethal"]?
" @@ -920,7 +920,7 @@ if(..()) return if (locked) - if(!(issilicon(usr) || IsAdminGhost(usr))) + if(!(hasSiliconAccessInArea(usr,get_area(src)) || IsAdminGhost(usr))) to_chat(usr, "Control panel is locked!") return if (href_list["toggleOn"]) diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm index fc6577a4f1..0705f4d18a 100644 --- a/code/game/machinery/shieldgen.dm +++ b/code/game/machinery/shieldgen.dm @@ -121,7 +121,7 @@ . = ..() if(.) return - if(locked && !issilicon(user)) + if(locked && !hasSiliconAccessInArea(user,get_area(src))) to_chat(user, "The machine is locked, you are unable to use it!") return if(panel_open) @@ -367,7 +367,7 @@ if(!anchored) to_chat(user, "\The [src] needs to be firmly secured to the floor first!") return - if(locked && !issilicon(user)) + if(locked && !hasSiliconAccessInArea(user,get_area(src))) to_chat(user, "The controls are locked!") return if(!power) diff --git a/code/game/machinery/telecomms/computers/logbrowser.dm b/code/game/machinery/telecomms/computers/logbrowser.dm index c1db49605c..fb0d33597d 100644 --- a/code/game/machinery/telecomms/computers/logbrowser.dm +++ b/code/game/machinery/telecomms/computers/logbrowser.dm @@ -196,7 +196,7 @@ var/newnet = stripped_input(usr, "Which network do you want to view?", "Comm Monitor", network) - if(newnet && ((usr in range(1, src)) || issilicon(usr))) + if(newnet && ((usr in range(1, src)) || hasSiliconAccessInArea(usr,get_area(src)))) if(length(newnet) > 15) temp = "- FAILED: NETWORK TAG STRING TOO LENGHTLY -" diff --git a/code/game/machinery/telecomms/computers/message.dm b/code/game/machinery/telecomms/computers/message.dm index 07028ba2d3..6d14bf89ca 100644 --- a/code/game/machinery/telecomms/computers/message.dm +++ b/code/game/machinery/telecomms/computers/message.dm @@ -260,7 +260,7 @@ if(..()) return - if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || issilicon(usr)) + if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || hasSiliconAccessInArea(usr,get_area(src))) //Authenticate if (href_list["auth"]) if(LINKED_SERVER_NONRESPONSIVE) diff --git a/code/game/machinery/telecomms/computers/telemonitor.dm b/code/game/machinery/telecomms/computers/telemonitor.dm index aebef711a9..630e94fb7c 100644 --- a/code/game/machinery/telecomms/computers/telemonitor.dm +++ b/code/game/machinery/telecomms/computers/telemonitor.dm @@ -108,7 +108,7 @@ if(href_list["network"]) var/newnet = stripped_input(usr, "Which network do you want to view?", "Comm Monitor", network) - if(newnet && ((usr in range(1, src)) || issilicon(usr))) + if(newnet && ((usr in range(1, src)) || hasSiliconAccessInArea(usr,get_area(src)))) if(length(newnet) > 15) temp = "- FAILED: NETWORK TAG STRING TOO LENGHTLY -" diff --git a/code/game/machinery/telecomms/machine_interactions.dm b/code/game/machinery/telecomms/machine_interactions.dm index 1ad80ccbed..2a915bf118 100644 --- a/code/game/machinery/telecomms/machine_interactions.dm +++ b/code/game/machinery/telecomms/machine_interactions.dm @@ -30,7 +30,7 @@ /obj/machinery/telecomms/ui_interact(mob/user) . = ..() // You need a multitool to use this, or be silicon - if(!issilicon(user)) + if(!hasSiliconAccessInArea(user,get_area(src))) // istype returns false if the value is null if(!istype(user.get_active_held_item(), /obj/item/multitool)) return @@ -97,7 +97,7 @@ var/obj/item/multitool/P = null // Let's double check - if(!issilicon(user) && istype(user.get_active_held_item(), /obj/item/multitool)) + if(!hasSiliconAccessInArea(user,get_area(src)) && istype(user.get_active_held_item(), /obj/item/multitool)) P = user.get_active_held_item() else if(isAI(user)) var/mob/living/silicon/ai/U = user @@ -162,7 +162,7 @@ if(..()) return - if(!issilicon(usr)) + if(!hasSiliconAccessInArea(usr,get_area(src))) if(!istype(usr.get_active_held_item(), /obj/item/multitool)) return @@ -270,6 +270,6 @@ updateUsrDialog() /obj/machinery/telecomms/proc/canAccess(mob/user) - if(issilicon(user) || in_range(user, src)) + if(hasSiliconAccessInArea(user,get_area(src)) || in_range(user, src)) return TRUE return FALSE diff --git a/code/game/machinery/transformer.dm b/code/game/machinery/transformer.dm index 3ff2424d83..9bb264a3d3 100644 --- a/code/game/machinery/transformer.dm +++ b/code/game/machinery/transformer.dm @@ -27,7 +27,7 @@ /obj/machinery/transformer/examine(mob/user) . = ..() - if(cooldown && (issilicon(user) || isobserver(user))) + if(cooldown && (hasSiliconAccessInArea(user,get_area(src)) || isobserver(user))) . += "It will be ready in [DisplayTimeText(cooldown_timer - world.time)]." /obj/machinery/transformer/Destroy() diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index c0b510111f..47096a1c66 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -701,7 +701,7 @@ GLOBAL_LIST_EMPTY(PDAs) return /obj/item/pda/proc/remove_id(mob/user) - if(issilicon(user) || !user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) + if(hasSiliconAccessInArea(user,get_area(src)) || !user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) return do_remove_id(user) @@ -869,7 +869,7 @@ GLOBAL_LIST_EMPTY(PDAs) remove_pen() /obj/item/pda/proc/toggle_light() - if(issilicon(usr) || !usr.canUseTopic(src, BE_CLOSE)) + if(hasSiliconAccessInArea(usr,get_area(src)) || !usr.canUseTopic(src, BE_CLOSE)) return if(fon) fon = FALSE @@ -881,7 +881,7 @@ GLOBAL_LIST_EMPTY(PDAs) /obj/item/pda/proc/remove_pen() - if(issilicon(usr) || !usr.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) + if(hasSiliconAccessInArea(usr,get_area(src)) || !usr.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) return if(inserted_item) diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm index e4fa241907..5ffc28285a 100644 --- a/code/game/objects/items/devices/PDA/cart.dm +++ b/code/game/objects/items/devices/PDA/cart.dm @@ -587,7 +587,7 @@ Code: /obj/item/cartridge/Topic(href, href_list) ..() - if(!usr.canUseTopic(src, !issilicon(usr))) + if(!usr.canUseTopic(src, !hasSiliconAccessInArea(usr,get_area(src)))) usr.unset_machine() usr << browse(null, "window=pda") return diff --git a/code/game/objects/items/implants/implant_hijack.dm b/code/game/objects/items/implants/implant_hijack.dm new file mode 100644 index 0000000000..f4592bea55 --- /dev/null +++ b/code/game/objects/items/implants/implant_hijack.dm @@ -0,0 +1,75 @@ +#define HIJACK_APC_MAX_AMOUNT 4 + +/obj/item/implant/hijack + name = "hijack implant" + desc = "Allows you to control the machinery in a room by hacking into the APC." + actions_types = list(/datum/action/item_action/hands_free/activate, /datum/action/item_action/removeAPCs, /datum/action/item_action/accessAPCs) + activated = 1 + var/toggled = FALSE + icon_state = "hijack" + var/eye_color + +/obj/item/implant/hijack/activate() + . = ..() + toggled = !toggled + if (toggled) + imp_in.click_intercept = src + imp_in.siliconaccesstoggle = TRUE + to_chat(imp_in,"You turn on [src]'s silicon interactions.") + if (ishuman(imp_in)) + var/mob/living/carbon/human/H = imp_in + H.eye_color = "ff0" + H.dna.update_ui_block(DNA_EYE_COLOR_BLOCK) + H.update_body() + else + imp_in.click_intercept = null + imp_in.siliconaccesstoggle = FALSE + to_chat(imp_in,"You turn off [src]'s silicon interactions.") + if (ishuman(imp_in)) + var/mob/living/carbon/human/H = imp_in + H.eye_color = eye_color + H.dna.update_ui_block(DNA_EYE_COLOR_BLOCK) + H.update_body() + +/obj/item/implant/hijack/implant(mob/living/target, mob/user, silent = FALSE) + if(..()) + ADD_TRAIT(target, TRAIT_HIJACKER, "implant") + if (ishuman(target)) + var/mob/living/carbon/human/H = target + eye_color = H.eye_color + return TRUE + +/obj/item/implant/hijack/removed(mob/target, silent = FALSE, special = 0) + if(..()) + REMOVE_TRAIT(target, TRAIT_HIJACKER, "implant") + if (ishuman(target)) + var/mob/living/carbon/human/H = target + H.eye_color = eye_color + return TRUE + +/obj/item/implant/hijack/proc/InterceptClickOn(mob/living/user,params,atom/object) + if (!toggled) + return + if (user.get_active_held_item()) + return + if (isitem(object)) + return + var/area/a = get_area(object) + if (!hasSiliconAccessInArea(imp_in,a)) + return + var/list/modifiers = params2list(params) + imp_in.face_atom(object) + if (modifiers["shift"] && modifiers["ctrl"]) + object.AICtrlShiftClick(imp_in) + return TRUE + if (modifiers["shift"]) + object.AIShiftClick(imp_in) + return TRUE + if (modifiers["ctrl"]) + object.AICtrlClick(imp_in) + return TRUE + if (modifiers["alt"]) + object.AIAltClick(imp_in) + return TRUE + object.attack_ai(imp_in) + return TRUE diff --git a/code/game/objects/items/implants/implanter.dm b/code/game/objects/items/implants/implanter.dm index ab902369cc..a0e27f14f0 100644 --- a/code/game/objects/items/implants/implanter.dm +++ b/code/game/objects/items/implants/implanter.dm @@ -74,4 +74,8 @@ /obj/item/implanter/stealth name = "implanter (stealth)" - imp_type = /obj/item/implant/stealth \ No newline at end of file + imp_type = /obj/item/implant/stealth + +/obj/item/implanter/hijack + name = "implanter (hijack)" + imp_type = /obj/item/implant/hijack \ No newline at end of file diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 8899f2f79f..e7d5a12920 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -125,7 +125,7 @@ if ((M.client && M.machine == src)) is_in_use = TRUE ui_interact(M) - if(isAI(usr) || iscyborg(usr) || IsAdminGhost(usr)) + if(isAI(usr) || iscyborg(usr) || IsAdminGhost(usr) || hasSiliconAccessInArea(usr,get_area(src))) if (!(usr in nearby)) if (usr.client && usr.machine==src) // && M.machine == src is omitted because if we triggered this by using the dialog, it doesn't matter if our machine changed in between triggering it and this - the dialog is probably still supposed to refresh. is_in_use = TRUE diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index 7696a13bb2..89c48be419 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -168,7 +168,7 @@ GLOBAL_LIST_EMPTY(bodycontainers) //Let them act as spawnpoints for revenants an /obj/structure/bodycontainer/morgue/AltClick(mob/user) . = ..() - if(!user.canUseTopic(src, !issilicon(user))) + if(!user.canUseTopic(src, !hasSiliconAccessInArea(user,get_area(src)))) return beeper = !beeper to_chat(user, "You turn the speaker function [beeper ? "on" : "off"].") diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm index e49368016b..c9ccb90574 100644 --- a/code/modules/atmospherics/machinery/airalarm.dm +++ b/code/modules/atmospherics/machinery/airalarm.dm @@ -245,7 +245,7 @@ /obj/machinery/airalarm/ui_data(mob/user) var/data = list( "locked" = locked, - "siliconUser" = user.has_unlimited_silicon_privilege, + "siliconUser" = user.has_unlimited_silicon_privilege || hasSiliconAccessInArea(user,get_area(src)), "emagged" = (obj_flags & EMAGGED ? 1 : 0), "danger_level" = danger_level, ) @@ -288,7 +288,7 @@ "danger_level" = cur_tlv.get_danger_level(environment.gases[gas_id] * partial_pressure) )) - if(!locked || user.has_unlimited_silicon_privilege) + if(!locked || user.has_unlimited_silicon_privilege || hasSiliconAccessInArea(user,get_area(src))) data["vents"] = list() for(var/id_tag in A.air_vent_names) var/long_name = A.air_vent_names[id_tag] @@ -368,7 +368,7 @@ /obj/machinery/airalarm/ui_act(action, params) if(..() || buildstage != 2) return - if((locked && !usr.has_unlimited_silicon_privilege) || (usr.has_unlimited_silicon_privilege && aidisabled)) + if((locked && !usr.has_unlimited_silicon_privilege && !hasSiliconAccessInArea(usr,get_area(src))) || (usr.has_unlimited_silicon_privilege && aidisabled)) return var/device_id = params["id_tag"] switch(action) @@ -839,7 +839,7 @@ /obj/machinery/airalarm/AltClick(mob/user) . = ..() - if(!user.canUseTopic(src, !issilicon(user)) || !isturf(loc)) + if(!user.canUseTopic(src, !hasSiliconAccessInArea(user,get_area(src))) || !isturf(loc)) return togglelock(user) return TRUE diff --git a/code/modules/awaymissions/bluespaceartillery.dm b/code/modules/awaymissions/bluespaceartillery.dm index deb05920e2..260bd9d743 100644 --- a/code/modules/awaymissions/bluespaceartillery.dm +++ b/code/modules/awaymissions/bluespaceartillery.dm @@ -44,7 +44,7 @@ return if(reload < reload_cooldown) return - if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || issilicon(usr)) + if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || hasSiliconAccessInArea(usr,get_area(src))) priority_announce("Bluespace artillery fire detected. Brace for impact.") message_admins("[ADMIN_LOOKUPFLW(usr)] has launched an artillery strike.") var/list/L = list() diff --git a/code/modules/cargo/supplypod_beacon.dm b/code/modules/cargo/supplypod_beacon.dm index 006f1a8084..47d38eb7cd 100644 --- a/code/modules/cargo/supplypod_beacon.dm +++ b/code/modules/cargo/supplypod_beacon.dm @@ -77,7 +77,7 @@ /obj/item/supplypod_beacon/AltClick(mob/user) . = ..() - if (!user.canUseTopic(src, !issilicon(user))) + if (!user.canUseTopic(src, !hasSiliconAccessInArea(user,get_area(src)))) return if (express_console) unlink_console() diff --git a/code/modules/events/holiday/vday.dm b/code/modules/events/holiday/vday.dm index 13c516960a..2fff7972df 100644 --- a/code/modules/events/holiday/vday.dm +++ b/code/modules/events/holiday/vday.dm @@ -140,7 +140,7 @@ /obj/item/valentine/examine(mob/user) . = ..() if(in_range(user, src) || isobserver(user)) - if( !(ishuman(user) || isobserver(user) || issilicon(user)) ) + if( !(ishuman(user) || isobserver(user) || hasSiliconAccessInArea(user,get_area(src))) ) user << browse("[name][stars(message)]", "window=[name]") onclose(user, "[name]") else diff --git a/code/modules/food_and_drinks/kitchen_machinery/microwave.dm b/code/modules/food_and_drinks/kitchen_machinery/microwave.dm index e4d36b29d2..4e665379c6 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/microwave.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/microwave.dm @@ -55,7 +55,7 @@ if(!operating) . += "Alt-click [src] to turn it on." - if(!in_range(user, src) && !issilicon(user) && !isobserver(user)) + if(!in_range(user, src) && !hasSiliconAccessInArea(user,get_area(src)) && !isobserver(user)) . += "You're too far away to examine [src]'s contents and display!" return if(operating) @@ -63,7 +63,7 @@ return if(length(ingredients)) - if(issilicon(user)) + if(hasSiliconAccessInArea(user,get_area(src))) . += "\The [src] camera shows:" else . += "\The [src] contains:" @@ -187,14 +187,14 @@ /obj/machinery/microwave/AltClick(mob/user) . = ..() - if(user.canUseTopic(src, !issilicon(usr))) + if(user.canUseTopic(src, !hasSiliconAccessInArea(user,get_area(src)))) cook() return TRUE /obj/machinery/microwave/ui_interact(mob/user) . = ..() - if(operating || panel_open || !anchored || !user.canUseTopic(src, !issilicon(user))) + if(operating || panel_open || !anchored || !user.canUseTopic(src, !hasSiliconAccessInArea(user,get_area(src)))) return if(isAI(user) && (stat & NOPOWER)) return @@ -206,10 +206,10 @@ to_chat(user, "\The [src] is empty.") return - var/choice = show_radial_menu(user, src, isAI(user) ? ai_radial_options : radial_options, require_near = !issilicon(user)) + var/choice = show_radial_menu(user, src, isAI(user) ? ai_radial_options : radial_options, require_near = !hasSiliconAccessInArea(user,get_area(src))) // post choice verification - if(operating || panel_open || !anchored || !user.canUseTopic(src, !issilicon(user))) + if(operating || panel_open || !anchored || !user.canUseTopic(src, !hasSiliconAccessInArea(user,get_area(src)))) return if(isAI(user) && (stat & NOPOWER)) return diff --git a/code/modules/holodeck/computer.dm b/code/modules/holodeck/computer.dm index d551222836..3c86171159 100644 --- a/code/modules/holodeck/computer.dm +++ b/code/modules/holodeck/computer.dm @@ -92,7 +92,7 @@ data["emagged"] = TRUE data["emag_programs"] = emag_programs data["program"] = program - data["can_toggle_safety"] = issilicon(user) || IsAdminGhost(user) + data["can_toggle_safety"] = hasSiliconAccessInArea(user,get_area(src)) || IsAdminGhost(user) return data @@ -109,7 +109,7 @@ if(A) load_program(A) if("safety") - if(!issilicon(usr) && !IsAdminGhost(usr)) + if(!hasSiliconAccessInArea(usr,get_area(src)) && !IsAdminGhost(usr)) var/msg = "[key_name(usr)] attempted to emag the holodeck using a href they shouldn't have!" message_admins(msg) log_admin(msg) diff --git a/code/modules/hydroponics/gene_modder.dm b/code/modules/hydroponics/gene_modder.dm index 77199b3496..1aa9bb86e2 100644 --- a/code/modules/hydroponics/gene_modder.dm +++ b/code/modules/hydroponics/gene_modder.dm @@ -105,7 +105,7 @@ return var/datum/browser/popup = new(user, "plantdna", "Plant DNA Manipulator", 450, 600) - if(!(in_range(src, user) || issilicon(user))) + if(!(in_range(src, user) || hasSiliconAccessInArea(user,get_area(src)))) popup.close() return diff --git a/code/modules/integrated_electronics/core/printer.dm b/code/modules/integrated_electronics/core/printer.dm index f0aa10f2da..64c8e222a6 100644 --- a/code/modules/integrated_electronics/core/printer.dm +++ b/code/modules/integrated_electronics/core/printer.dm @@ -107,7 +107,7 @@ interact(user) /obj/item/integrated_circuit_printer/interact(mob/user) - if(!(in_range(src, user) || issilicon(user))) + if(!(in_range(src, user) || hasSiliconAccessInArea(user,get_area(src)))) return if(isnull(current_category)) diff --git a/code/modules/jobs/access.dm b/code/modules/jobs/access.dm index 81f47b9a1e..f023ad41a4 100644 --- a/code/modules/jobs/access.dm +++ b/code/modules/jobs/access.dm @@ -4,7 +4,7 @@ //check if it doesn't require any access at all if(src.check_access(null)) return TRUE - if(issilicon(M)) + if(hasSiliconAccessInArea(M,get_area(src))) if(ispAI(M)) return FALSE return TRUE //AI can do whatever it wants diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index e212e0e713..347f3f02fb 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -99,6 +99,8 @@ . += "[t_He] [t_has] [glasses.get_examine_string(user)] covering [t_his] eyes." else if(eye_color == BLOODCULT_EYE && iscultist(src) && HAS_TRAIT(src, TRAIT_CULT_EYES)) . += "[t_His] eyes are glowing an unnatural red!" + else if(eye_color == "ff0" && HAS_TRAIT(src, TRAIT_HIJACKER)) + . += "[t_His] eyes are flickering a bright yellow!" //ears if(ears && !(SLOT_EARS in obscured)) diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index cd449dacd9..e06d3e786f 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -809,14 +809,14 @@ Pass a positive integer as an argument to override a bot's default speed. switch(href_list["operation"]) if("patrol") - if(!issilicon(usr) && !IsAdminGhost(usr) && !(bot_core.allowed(usr) || !locked)) + if(!hasSiliconAccessInArea(usr,get_area(src)) && !IsAdminGhost(usr) && !(bot_core.allowed(usr) || !locked)) return TRUE auto_patrol = !auto_patrol bot_reset() if("remote") remote_disabled = !remote_disabled if("hack") - if(!issilicon(usr) && !IsAdminGhost(usr)) + if(!hasSiliconAccessInArea(usr,get_area(src)) && !IsAdminGhost(usr)) var/msg = "[key_name(usr)] attempted to hack a bot with a href that shouldn't be available!" message_admins(msg) log_admin(msg) @@ -835,7 +835,7 @@ Pass a positive integer as an argument to override a bot's default speed. to_chat(usr, "[text_dehack]") bot_reset() if("ejectpai") - if(paicard && (!locked || issilicon(usr) || IsAdminGhost(usr))) + if(paicard && (!locked || hasSiliconAccessInArea(usr,get_area(src)) || IsAdminGhost(usr))) to_chat(usr, "You eject [paicard] from [bot_name]") ejectpai(usr) update_controls() @@ -862,13 +862,13 @@ Pass a positive integer as an argument to override a bot's default speed. if(emagged == 2) //An emagged bot cannot be controlled by humans, silicons can if one hacked it. if(!hacked) //Manually emagged by a human - access denied to all. return TRUE - else if(!issilicon(user) && !IsAdminGhost(user)) //Bot is hacked, so only silicons and admins are allowed access. + else if(!hasSiliconAccessInArea(user,get_area(src)) && !IsAdminGhost(user)) //Bot is hacked, so only silicons and admins are allowed access. return TRUE return FALSE /mob/living/simple_animal/bot/proc/hack(mob/user) var/hack - if(issilicon(user) || IsAdminGhost(user)) //Allows silicons or admins to toggle the emag status of a bot. + if(hasSiliconAccessInArea(user,get_area(src)) || IsAdminGhost(user)) //Allows silicons or admins to toggle the emag status of a bot. hack += "[emagged == 2 ? "Software compromised! Unit may exhibit dangerous or erratic behavior." : "Unit operating normally. Release safety lock?"]
" hack += "Harm Prevention Safety System: [emagged ? "DANGER" : "Engaged"]
" else if(!locked) //Humans with access can use this option to hide a bot from the AI's remote control panel and PDA control. @@ -877,7 +877,7 @@ Pass a positive integer as an argument to override a bot's default speed. /mob/living/simple_animal/bot/proc/showpai(mob/user) var/eject = "" - if((!locked || issilicon(usr) || IsAdminGhost(usr))) + if((!locked || hasSiliconAccessInArea(usr,get_area(src)) || IsAdminGhost(usr))) if(paicard || allow_pai) eject += "Personality card status: " if(paicard) diff --git a/code/modules/mob/living/simple_animal/bot/cleanbot.dm b/code/modules/mob/living/simple_animal/bot/cleanbot.dm index d31c368ca4..374b682ac1 100644 --- a/code/modules/mob/living/simple_animal/bot/cleanbot.dm +++ b/code/modules/mob/living/simple_animal/bot/cleanbot.dm @@ -296,7 +296,7 @@ Status: [on ? "On" : "Off"]
Behaviour controls are [locked ? "locked" : "unlocked"]
Maintenance panel panel is [open ? "opened" : "closed"]"}) - if(!locked || issilicon(user)|| IsAdminGhost(user)) + if(!locked || hasSiliconAccessInArea(user,get_area(src))|| IsAdminGhost(user)) dat += "
Clean Blood: [blood ? "Yes" : "No"]" dat += "
Clean Trash: [trash ? "Yes" : "No"]" dat += "
Exterminate Pests: [pests ? "Yes" : "No"]" diff --git a/code/modules/mob/living/simple_animal/bot/ed209bot.dm b/code/modules/mob/living/simple_animal/bot/ed209bot.dm index 4715a1361a..6d1c844231 100644 --- a/code/modules/mob/living/simple_animal/bot/ed209bot.dm +++ b/code/modules/mob/living/simple_animal/bot/ed209bot.dm @@ -110,7 +110,7 @@ Maintenance panel panel is [open ? "opened" : "closed"]
"}, "[on ? "On" : "Off"]" ) - if(!locked || issilicon(user)|| IsAdminGhost(user)) + if(!locked || hasSiliconAccessInArea(user,get_area(src))|| IsAdminGhost(user)) if(!lasercolor) dat += text({"
Arrest Unidentifiable Persons: []
diff --git a/code/modules/mob/living/simple_animal/bot/firebot.dm b/code/modules/mob/living/simple_animal/bot/firebot.dm index 2b52da6821..3453546890 100644 --- a/code/modules/mob/living/simple_animal/bot/firebot.dm +++ b/code/modules/mob/living/simple_animal/bot/firebot.dm @@ -111,7 +111,7 @@ dat += "Maintenance panel panel is [open ? "opened" : "closed"]
" dat += "Behaviour controls are [locked ? "locked" : "unlocked"]
" - if(!locked || issilicon(user) || IsAdminGhost(user)) + if(!locked || hasSiliconAccessInArea(user,get_area(src)) || IsAdminGhost(user)) dat += "Extinguish Fires: [extinguish_fires ? "Yes" : "No"]
" dat += "Extinguish People: [extinguish_people ? "Yes" : "No"]
" dat += "Patrol Station: [auto_patrol ? "Yes" : "No"]
" diff --git a/code/modules/mob/living/simple_animal/bot/floorbot.dm b/code/modules/mob/living/simple_animal/bot/floorbot.dm index cae707ce46..8db1bdb1ae 100644 --- a/code/modules/mob/living/simple_animal/bot/floorbot.dm +++ b/code/modules/mob/living/simple_animal/bot/floorbot.dm @@ -83,7 +83,7 @@ dat += "None Loaded
" dat += "Behaviour controls are [locked ? "locked" : "unlocked"]
" - if(!locked || issilicon(user) || IsAdminGhost(user)) + if(!locked || hasSiliconAccessInArea(user,get_area(src)) || IsAdminGhost(user)) dat += "Add tiles to new hull plating: [autotile ? "Yes" : "No"]
" dat += "Place floor tiles: [placetiles ? "Yes" : "No"]
" dat += "Replace existing floor tiles with custom tiles: [replacetiles ? "Yes" : "No"]
" diff --git a/code/modules/mob/living/simple_animal/bot/honkbot.dm b/code/modules/mob/living/simple_animal/bot/honkbot.dm index 109c7b4636..3fcbff26db 100644 --- a/code/modules/mob/living/simple_animal/bot/honkbot.dm +++ b/code/modules/mob/living/simple_animal/bot/honkbot.dm @@ -90,7 +90,7 @@ Maintenance panel panel is [open ? "opened" : "closed"]"}, "[on ? "On" : "Off"]" ) - if(!locked || issilicon(user) || IsAdminGhost(user)) + if(!locked || hasSiliconAccessInArea(user,get_area(src)) || IsAdminGhost(user)) dat += text({"
Auto Patrol: []"}, "[auto_patrol ? "On" : "Off"]" ) diff --git a/code/modules/mob/living/simple_animal/bot/medbot.dm b/code/modules/mob/living/simple_animal/bot/medbot.dm index a4496dd1f5..b27fcd7bb0 100644 --- a/code/modules/mob/living/simple_animal/bot/medbot.dm +++ b/code/modules/mob/living/simple_animal/bot/medbot.dm @@ -148,7 +148,7 @@ else dat += "None Loaded" dat += "
Behaviour controls are [locked ? "locked" : "unlocked"]
" - if(!locked || issilicon(user) || IsAdminGhost(user)) + if(!locked || hasSiliconAccessInArea(user,get_area(src)) || IsAdminGhost(user)) dat += "Healing Threshold: " dat += "-- " dat += "- " diff --git a/code/modules/mob/living/simple_animal/bot/mulebot.dm b/code/modules/mob/living/simple_animal/bot/mulebot.dm index 43963b4eef..911758a5ed 100644 --- a/code/modules/mob/living/simple_animal/bot/mulebot.dm +++ b/code/modules/mob/living/simple_animal/bot/mulebot.dm @@ -262,7 +262,7 @@ // TODO: remove this; PDAs currently depend on it /mob/living/simple_animal/bot/mulebot/get_controls(mob/user) - var/ai = issilicon(user) + var/ai = hasSiliconAccessInArea(user,get_area(src)) var/dat dat += "

Multiple Utility Load Effector Mk. V

" dat += "ID: [id]
" diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm index d4fc98ee9e..ea1bbdbaa8 100644 --- a/code/modules/mob/living/simple_animal/bot/secbot.dm +++ b/code/modules/mob/living/simple_animal/bot/secbot.dm @@ -110,7 +110,7 @@ Maintenance panel panel is [open ? "opened" : "closed"]"}, "[on ? "On" : "Off"]" ) - if(!locked || issilicon(user) || IsAdminGhost(user)) + if(!locked || hasSiliconAccessInArea(user,get_area(src)) || IsAdminGhost(user)) dat += text({"
Arrest Unidentifiable Persons: []
Arrest for Unauthorized Weapons: []
@@ -131,7 +131,7 @@ Auto Patrol: []"}, /mob/living/simple_animal/bot/secbot/Topic(href, href_list) if(..()) return 1 - if(!issilicon(usr) && !IsAdminGhost(usr) && !(bot_core.allowed(usr) || !locked)) + if(!hasSiliconAccessInArea(usr,get_area(src)) && !IsAdminGhost(usr) && !(bot_core.allowed(usr) || !locked)) return TRUE switch(href_list["operation"]) if("idcheck") diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index b4c3c93824..acb55e143a 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -812,7 +812,7 @@ GLOBAL_VAR_INIT(exploit_warn_spam_prevention, 0) //Can the mob interact() with an atom? /mob/proc/can_interact_with(atom/A) - return IsAdminGhost(src) || Adjacent(A) + return IsAdminGhost(src) || Adjacent(A) || hasSiliconAccessInArea(src,get_area(A)) //Can the mob use Topic to interact with machines /mob/proc/canUseTopic(atom/movable/M, be_close=FALSE, no_dextery=FALSE, no_tk=FALSE) diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 695084a794..67a990fef9 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -120,3 +120,5 @@ var/registered_z var/mob/audiovisual_redirect //Mob to redirect messages, speech, and sounds to + var/siliconaccessareas = list() + var/siliconaccesstoggle = FALSE \ No newline at end of file diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index d78ae0ba8c..5b13a6d509 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -409,6 +409,23 @@ It's fairly easy to fix if dealing with single letters but not so much with comp return return TRUE +/proc/hasSiliconAccessInArea(mob/user,area/area) + return user && (issilicon(user) || (user.siliconaccesstoggle && area && (area in user.siliconaccessareas))) + +/mob/proc/toggleSiliconAccessArea(area/area) + if (area in siliconaccessareas) + siliconaccessareas -= area + to_chat(src,"You lost control of [area]!") + return FALSE + else + if (LAZYLEN(siliconaccessareas) < HIJACK_APC_MAX_AMOUNT) + siliconaccessareas += area + to_chat(src,"You successfully took control of [area].") + else + to_chat(src,"You are connected to too many APCs! Too many more will fry your brain.") + return FALSE + return TRUE + /proc/offer_control(mob/M) to_chat(M, "Control of your mob has been offered to dead players.") if(usr) diff --git a/code/modules/modular_computers/computers/item/computer_ui.dm b/code/modules/modular_computers/computers/item/computer_ui.dm index df3000d0fc..050ba78bae 100644 --- a/code/modules/modular_computers/computers/item/computer_ui.dm +++ b/code/modules/modular_computers/computers/item/computer_ui.dm @@ -14,7 +14,7 @@ return 0 // Robots don't really need to see the screen, their wireless connection works as long as computer is on. - if(!screen_on && !issilicon(user)) + if(!screen_on && !hasSiliconAccessInArea(user,get_area(src))) if(ui) ui.close() return 0 diff --git a/code/modules/modular_computers/file_system/program.dm b/code/modules/modular_computers/file_system/program.dm index f74b53ddd2..fe1bf888fe 100644 --- a/code/modules/modular_computers/file_system/program.dm +++ b/code/modules/modular_computers/file_system/program.dm @@ -87,7 +87,7 @@ if(IsAdminGhost(user)) return 1 - if(issilicon(user)) + if(hasSiliconAccessInArea(user,get_area(computer))) return 1 if(ishuman(user)) diff --git a/code/modules/oracle_ui/hookup_procs.dm b/code/modules/oracle_ui/hookup_procs.dm index 0a092caf30..749cbc5f8e 100644 --- a/code/modules/oracle_ui/hookup_procs.dm +++ b/code/modules/oracle_ui/hookup_procs.dm @@ -35,9 +35,9 @@ return ..() /obj/machinery/oui_canview(mob/user) - if(user.has_unlimited_silicon_privilege) + if(user.has_unlimited_silicon_privilege || hasSiliconAccessInArea(user,get_area(src))) return TRUE - if(!can_interact()) + if(!can_interact(user)) return FALSE if(iscyborg(user)) return can_see(user, src, 7) diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 0ad2983b91..c7e82a94c2 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -103,6 +103,8 @@ var/update_overlay = -1 var/icon_update_needed = FALSE var/obj/machinery/computer/apc_control/remote_control = null + var/mob/living/carbon/hijacker = 0 + var/hijackerlast = FALSE /obj/machinery/power/apc/unlocked locked = FALSE @@ -268,7 +270,7 @@ . += "Alt-Click the APC to [ locked ? "unlock" : "lock"] the interface." - if(issilicon(user)) + if(hasSiliconAccessInArea(user,area)) . += "Ctrl-Click the APC to switch the breaker [ operating ? "off" : "on"]." // update the APC icon to show the three base states @@ -312,7 +314,7 @@ SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays) if(!(stat & (BROKEN|MAINT)) && update_state & UPSTATE_ALLGOOD) SSvis_overlays.add_vis_overlay(src, icon, "apcox-[locked]", ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir) - SSvis_overlays.add_vis_overlay(src, icon, "apco3-[charging]", ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir) + SSvis_overlays.add_vis_overlay(src, icon, "apco3-[hijacker ? "3" : charging]", ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir) if(operating) SSvis_overlays.add_vis_overlay(src, icon, "apco0-[equipment]", ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir) SSvis_overlays.add_vis_overlay(src, icon, "apco1-[lighting]", ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir) @@ -327,6 +329,8 @@ light_color = LIGHT_COLOR_BLUE if(APC_FULLY_CHARGED) light_color = LIGHT_COLOR_GREEN + if (hijacker) + light_color = LIGHT_COLOR_YELLOW set_light(lon_range) else if(update_state & UPSTATE_BLUESCREEN) light_color = LIGHT_COLOR_BLUE @@ -395,14 +399,15 @@ else if(environ==2) update_overlay |= APC_UPOVERLAY_ENVIRON2 - var/results = 0 - if(last_update_state == update_state && last_update_overlay == update_overlay) + if(last_update_state == update_state && last_update_overlay == update_overlay && (hijacker == 0 ? 0 : 1) == hijackerlast) return 0 if(last_update_state != update_state) results += 1 - if(last_update_overlay != update_overlay) + if(last_update_overlay != update_overlay || (hijacker == 0 ? 0 : 1) != hijackerlast) results += 2 + if (hijacker ? TRUE : FALSE != hijackerlast) + hijackerlast = hijacker == 0 ? 0 : 1 return results // Used in process so it doesn't update the icon too much @@ -542,7 +547,7 @@ /obj/machinery/power/apc/attackby(obj/item/W, mob/living/user, params) - if(issilicon(user) && get_dist(src,user)>1) + if(hasSiliconAccessInArea(user,area) && get_dist(src,user)>1) return attack_hand(user) if (istype(W, /obj/item/stock_parts/cell) && opened) @@ -749,7 +754,7 @@ /obj/machinery/power/apc/AltClick(mob/user) . = ..() - if(!user.canUseTopic(src, !issilicon(user)) || !isturf(loc)) + if(!user.canUseTopic(src, !hasSiliconAccessInArea(user,area)) || !isturf(loc)) return togglelock(user) return TRUE @@ -764,7 +769,7 @@ else if(stat & (BROKEN|MAINT)) to_chat(user, "Nothing happens!") else - if(allowed(usr) && !wires.is_cut(WIRE_IDSCAN) && !malfhack) + if((allowed(usr) || hasSiliconAccessInArea(usr,area)) && !wires.is_cut(WIRE_IDSCAN) && !malfhack) locked = !locked to_chat(user, "You [ locked ? "lock" : "unlock"] the APC interface.") update_icon() @@ -841,6 +846,11 @@ if((stat & MAINT) && !opened) //no board; no interface return +/obj/machinery/power/apc/oui_canview(mob/user) + if(user.has_unlimited_silicon_privilege || hasSiliconAccessInArea(user,area)) + return TRUE + return ..() + /obj/machinery/power/apc/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) @@ -851,7 +861,7 @@ /obj/machinery/power/apc/ui_data(mob/user) var/list/data = list( - "locked" = locked && !(integration_cog && is_servant_of_ratvar(user)), + "locked" = locked && !(integration_cog && is_servant_of_ratvar(user)) && !hasSiliconAccessInArea(user,area), "failTime" = failure_timer, "isOperating" = operating, "externalPower" = main_status, @@ -860,11 +870,14 @@ "chargingStatus" = charging, "totalLoad" = DisplayPower(lastused_total), "coverLocked" = coverlocked, - "siliconUser" = user.has_unlimited_silicon_privilege || user.using_power_flow_console(), + "siliconUser" = user.has_unlimited_silicon_privilege || user.using_power_flow_console() || hasSiliconAccessInArea(user,area), "malfStatus" = get_malf_status(user), "emergencyLights" = !emergency_lights, "nightshiftLights" = nightshift_lights, - + "hijackable" = HAS_TRAIT(user,TRAIT_HIJACKER), + "hijacker" = hijacker == user ? TRUE : FALSE, + "drainavail" = cell.percent() > 85, + "lockdownavail" = cell.percent() > 35, "powerChannels" = list( list( "title" = "Equipment", @@ -932,17 +945,14 @@ /obj/machinery/power/apc/proc/can_use(mob/user, loud = 0) //used by attack_hand() and Topic() if(IsAdminGhost(user)) return TRUE + if (user == hijacker || hasSiliconAccessInArea(user,area)) + return TRUE + if (!aidisabled && issilicon(user)) + return TRUE if(user.has_unlimited_silicon_privilege) var/mob/living/silicon/ai/AI = user var/mob/living/silicon/robot/robot = user - if ( \ - src.aidisabled || \ - malfhack && istype(malfai) && \ - ( \ - (istype(AI) && (malfai!=AI && malfai != AI.parent)) || \ - (istype(robot) && (robot in malfai.connected_robots)) \ - ) \ - ) + if (src.aidisabled || malfhack && istype(malfai) && ((istype(AI) && (malfai!=AI && malfai != AI.parent)) || (istype(robot) && (robot in malfai.connected_robots)))) if(!loud) to_chat(user, "\The [src] has eee disabled!") return FALSE @@ -952,18 +962,25 @@ . = ..() if (!. && !QDELETED(remote_control)) . = remote_control.can_interact(user) + if (hasSiliconAccessInArea(user,area)) + return TRUE /obj/machinery/power/apc/ui_status(mob/user) . = ..() if (!QDELETED(remote_control) && user == remote_control.operator) . = UI_INTERACTIVE + if (hasSiliconAccessInArea(user,area)) + . = UI_INTERACTIVE /obj/machinery/power/apc/ui_act(action, params) - if(..() || !can_use(usr, 1) || (locked && !usr.has_unlimited_silicon_privilege && !failure_timer && !(integration_cog && (is_servant_of_ratvar(usr))))) + if (action == "hijack" && can_use(usr, 1)) + hijack(usr) + return + if(..() || !can_use(usr, 1) || (locked && !hasSiliconAccessInArea(usr,area) && !usr.has_unlimited_silicon_privilege && !failure_timer && !(integration_cog && (is_servant_of_ratvar(usr))))) return switch(action) if("lock") - if(usr.has_unlimited_silicon_privilege) + if(usr.has_unlimited_silicon_privilege || hasSiliconAccessInArea(usr,area)) if((obj_flags & EMAGGED) || (stat & (BROKEN|MAINT))) to_chat(usr, "The APC does not respond to the command.") else @@ -1000,7 +1017,7 @@ update() . = TRUE if("overload") - if(usr.has_unlimited_silicon_privilege) + if(usr.has_unlimited_silicon_privilege || hasSiliconAccessInArea(usr,area)) overload_lighting() . = TRUE if("hack") @@ -1023,6 +1040,21 @@ L.no_emergency = emergency_lights INVOKE_ASYNC(L, /obj/machinery/light/.proc/update, FALSE) CHECK_TICK + if("drain") + cell.use(cell.charge) + hijacker.toggleSiliconAccessArea(area) + hijacker = null + set_hijacked_lighting() + update_icon() + energy_fail(30 SECONDS * (cell.charge / cell.maxcharge)) + if("lockdown") + var/celluse = rand(20,35) + celluse = celluse /100 + for (var/obj/machinery/door/D in GLOB.airlocks) + if (get_area(D) == area) + INVOKE_ASYNC(D,/obj/machinery/door.proc/hostile_lockdown,usr, FALSE) + addtimer(CALLBACK(D,/obj/machinery/door.proc/disable_lockdown, FALSE), 30 SECONDS) + cell.charge -= cell.maxcharge*celluse return 1 /obj/machinery/power/apc/proc/toggle_breaker() @@ -1032,6 +1064,31 @@ update() update_icon() +/obj/machinery/power/apc/proc/hijack(mob/living/L) + if (!istype(L)) + return + if (hijacker && hijacker != L) + to_chat(L, "Someone already has control of this APC. Beginning counter-hijack.") + if (do_after(L,20 SECONDS,target=src)) + hijacker.toggleSiliconAccessArea(area) + if (L.toggleSiliconAccessArea(area)) + hijacker = L + update_icon() + set_hijacked_lighting() + return + else + to_chat(L, "Aborting.") + return + to_chat(L, "Beginning hijack of APC.") + if (do_after(L,5 SECONDS,target=src)) + if (L.toggleSiliconAccessArea(area)) + hijacker = L + update_icon() + set_hijacked_lighting() + else + to_chat(L, "Aborting.") + return + /obj/machinery/power/apc/proc/malfhack(mob/living/silicon/ai/malf) if(!istype(malf)) return @@ -1436,6 +1493,13 @@ L.update(FALSE) CHECK_TICK +/obj/machinery/power/apc/proc/set_hijacked_lighting() + set waitfor = FALSE + for(var/obj/machinery/light/L in area) + L.hijacked = hijacker ? TRUE : FALSE + L.update(FALSE) + CHECK_TICK + #undef UPSTATE_CELL_IN #undef UPSTATE_OPENED1 #undef UPSTATE_OPENED2 diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index e50b11ea35..b0e79ea44b 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -220,6 +220,7 @@ var/bulb_emergency_colour = "#FF3232" // determines the colour of the light while it's in emergency mode var/bulb_emergency_pow_mul = 0.75 // the multiplier for determining the light's power in emergency mode var/bulb_emergency_pow_min = 0.5 // the minimum value for the light's power in emergency mode + var/hijacked = FALSE // if true, the light is in a hijacked area /obj/machinery/light/broken status = LIGHT_BROKEN @@ -298,7 +299,10 @@ if(emergency_mode || (A && A.fire)) icon_state = "[base_state]_emergency" else - icon_state = "[base_state]" + if (hijacked) + icon_state = "[base_state]_hijacked" + else + icon_state = "[base_state]" if(on) var/mutable_appearance/glowybit = mutable_appearance(overlayicon, base_state, ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE) glowybit.alpha = CLAMP(light_power*250, 30, 200) @@ -326,6 +330,10 @@ var/area/A = get_area(src) if (A && A.fire) CO = bulb_emergency_colour + else if (hijacked) + BR = BR * 1.5 + PO = PO * 1.5 + CO = color ? color : LIGHT_COLOR_YELLOW else if (nightshift_enabled) BR = nightshift_brightness PO = nightshift_light_power @@ -355,7 +363,7 @@ if(on != on_gs) on_gs = on if(on) - static_power_used = brightness * 20 //20W per unit luminosity + static_power_used = brightness * 20 * (hijacked ? 2 : 1) //20W per unit luminosity addStaticPower(static_power_used, STATIC_LIGHT) else removeStaticPower(static_power_used, STATIC_LIGHT) diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm index 424f2bce30..7344edb490 100644 --- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm +++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm @@ -310,7 +310,7 @@ return var/name = stripped_input(usr,"Name","What do you want to name this recipe?", "Recipe", MAX_NAME_LEN) var/recipe = stripped_input(usr,"Recipe","Insert recipe with chem IDs") - if(!usr.canUseTopic(src, !issilicon(usr))) + if(!usr.canUseTopic(src, !hasSiliconAccessInArea(usr,get_area(src)))) return if(name && recipe) var/list/first_process = splittext(recipe, ";") diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm index e6b19417d8..d8a2b90b9e 100644 --- a/code/modules/reagents/chemistry/machinery/chem_master.dm +++ b/code/modules/reagents/chemistry/machinery/chem_master.dm @@ -261,7 +261,7 @@ return vol_each = min(reagents.total_volume / amount, 50) var/name = html_decode(stripped_input(usr,"Name:","Name your pill!", "[reagents.get_master_reagent_name()] ([vol_each]u)", MAX_NAME_LEN)) - if(!name || !reagents.total_volume || !src || QDELETED(src) || !usr.canUseTopic(src, !issilicon(usr))) + if(!name || !reagents.total_volume || !src || QDELETED(src) || !usr.canUseTopic(src, !hasSiliconAccessInArea(usr,get_area(src)))) return var/obj/item/reagent_containers/pill/P var/target_loc = drop_location() @@ -288,7 +288,7 @@ reagents.trans_to(P,vol_each) else var/name = html_decode(stripped_input(usr, "Name:", "Name your pack!", reagents.get_master_reagent_name(), MAX_NAME_LEN)) - if(!name || !reagents.total_volume || !src || QDELETED(src) || !usr.canUseTopic(src, !issilicon(usr))) + if(!name || !reagents.total_volume || !src || QDELETED(src) || !usr.canUseTopic(src, !hasSiliconAccessInArea(usr,get_area(src)))) return var/obj/item/reagent_containers/food/condiment/pack/P = new/obj/item/reagent_containers/food/condiment/pack(drop_location()) @@ -314,7 +314,7 @@ return vol_each = min(reagents.total_volume / amount, 40) var/name = html_decode(stripped_input(usr,"Name:","Name your patch!", "[reagents.get_master_reagent_name()] ([vol_each]u)", MAX_NAME_LEN)) - if(!name || !reagents.total_volume || !src || QDELETED(src) || !usr.canUseTopic(src, !issilicon(usr))) + if(!name || !reagents.total_volume || !src || QDELETED(src) || !usr.canUseTopic(src, !hasSiliconAccessInArea(usr,get_area(src)))) return var/obj/item/reagent_containers/pill/P @@ -332,7 +332,7 @@ if(condi) var/name = html_decode(stripped_input(usr, "Name:","Name your bottle!", (reagents.total_volume ? reagents.get_master_reagent_name() : " "), MAX_NAME_LEN)) - if(!name || !reagents.total_volume || !src || QDELETED(src) || !usr.canUseTopic(src, !issilicon(usr))) + if(!name || !reagents.total_volume || !src || QDELETED(src) || !usr.canUseTopic(src, !hasSiliconAccessInArea(usr,get_area(src)))) return var/obj/item/reagent_containers/food/condiment/P = new(drop_location()) P.originalname = name @@ -345,7 +345,7 @@ amount_full = round(reagents.total_volume / 30) vol_part = ((reagents.total_volume*1000) % 30000) / 1000 //% operator doesn't support decimals. var/name = html_decode(stripped_input(usr, "Name:","Name your bottle!", (reagents.total_volume ? reagents.get_master_reagent_name() : " "), MAX_NAME_LEN)) - if(!name || !reagents.total_volume || !src || QDELETED(src) || !usr.canUseTopic(src, !issilicon(usr))) + if(!name || !reagents.total_volume || !src || QDELETED(src) || !usr.canUseTopic(src, !hasSiliconAccessInArea(usr,get_area(src)))) return var/obj/item/reagent_containers/glass/bottle/P @@ -373,7 +373,7 @@ amount_full = round(reagents.total_volume / 60) vol_part = reagents.total_volume % 60 var/name = html_decode(stripped_input(usr, "Name:","Name your hypovial!", (reagents.total_volume ? reagents.get_master_reagent_name() : " "), MAX_NAME_LEN)) - if(!name || !reagents.total_volume || !src || QDELETED(src) || !usr.canUseTopic(src, !issilicon(usr))) + if(!name || !reagents.total_volume || !src || QDELETED(src) || !usr.canUseTopic(src, !hasSiliconAccessInArea(usr,get_area(src)))) return var/obj/item/reagent_containers/glass/bottle/vial/small/P @@ -408,7 +408,7 @@ vol_each = min(reagents.total_volume / amount, 20) var/name = html_decode(stripped_input(usr,"Name:","Name your SmartDart!", "[reagents.get_master_reagent_name()] ([vol_each]u)", MAX_NAME_LEN)) - if(!name || !reagents.total_volume || !src || QDELETED(src) || !usr.canUseTopic(src, !issilicon(usr))) + if(!name || !reagents.total_volume || !src || QDELETED(src) || !usr.canUseTopic(src, !hasSiliconAccessInArea(usr,get_area(src)))) return var/obj/item/reagent_containers/syringe/dart/D diff --git a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm index 7e1b7ec018..98901e8777 100644 --- a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm +++ b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm @@ -142,7 +142,7 @@ /obj/machinery/reagentgrinder/ui_interact(mob/user) // The microwave Menu //I am reasonably certain that this is not a microwave . = ..() - if(operating || !user.canUseTopic(src, !issilicon(user))) + if(operating || !user.canUseTopic(src, !hasSiliconAccessInArea(user,get_area(src)))) return var/list/options = list() @@ -170,10 +170,10 @@ for(var/key in options) choice = key else - choice = show_radial_menu(user, src, options, require_near = !issilicon(user)) + choice = show_radial_menu(user, src, options, require_near = !hasSiliconAccessInArea(user,get_area(src))) // post choice verification - if(operating || (isAI(user) && stat & NOPOWER) || !user.canUseTopic(src, !issilicon(user))) + if(operating || (isAI(user) && stat & NOPOWER) || !user.canUseTopic(src, !hasSiliconAccessInArea(user,get_area(src)))) return switch(choice) @@ -190,7 +190,7 @@ /obj/machinery/reagentgrinder/examine(mob/user) . = ..() - if(!in_range(user, src) && !issilicon(user) && !isobserver(user)) + if(!in_range(user, src) && !hasSiliconAccessInArea(user,get_area(src)) && !isobserver(user)) . += "You're too far away to examine [src]'s contents and display!" return diff --git a/code/modules/tgui/states/default.dm b/code/modules/tgui/states/default.dm index c6741f20b8..a1c35a29e8 100644 --- a/code/modules/tgui/states/default.dm +++ b/code/modules/tgui/states/default.dm @@ -14,6 +14,8 @@ GLOBAL_DATUM_INIT(default_state, /datum/ui_state/default, new) /mob/living/default_can_use_topic(src_object) . = shared_ui_interaction(src_object) + if (hasSiliconAccessInArea(src,get_area(src_object))) + return UI_INTERACTIVE if(. > UI_CLOSE && loc) . = min(., loc.contents_ui_distance(src_object, src)) // Check the distance... if(. == UI_INTERACTIVE) // Non-human living mobs can only look, not touch. @@ -21,6 +23,8 @@ GLOBAL_DATUM_INIT(default_state, /datum/ui_state/default, new) /mob/living/carbon/human/default_can_use_topic(src_object) . = shared_ui_interaction(src_object) + if (hasSiliconAccessInArea(src,get_area(src_object))) + return UI_INTERACTIVE if(. > UI_CLOSE) . = min(., shared_living_ui_distance(src_object)) // Check the distance... diff --git a/code/modules/uplink/uplink_items/uplink_implants.dm b/code/modules/uplink/uplink_items/uplink_implants.dm index 3262809cb5..b89df49f3d 100644 --- a/code/modules/uplink/uplink_items/uplink_implants.dm +++ b/code/modules/uplink/uplink_items/uplink_implants.dm @@ -29,6 +29,22 @@ item = /obj/item/storage/box/syndie_kit/imp_freedom cost = 5 +/datum/uplink_item/implants/hijack + name = "Hijack Implant" + desc = "An implant that will let you hack into the APCs on station, allowing you to control them at will and the machinery within those rooms." + item = /obj/item/implanter/hijack + cost = 14 //really overkill, 14 tc, can still get caught in a room you haven't hijacked and you're fucked. + surplus = 0 //nope not having hijack implants with surplus crates nope nope nope nope + restricted = TRUE + +/datum/uplink_item/implants/radio + name = "Internal Syndicate Radio Implant" + desc = "An implant injected into the body, allowing the use of an internal Syndicate radio. \ + Used just like a regular headset, but can be disabled to use external headsets normally and to avoid detection." + item = /obj/item/storage/box/syndie_kit/imp_radio + cost = 4 + restricted = TRUE + /datum/uplink_item/implants/microbomb name = "Microbomb Implant" desc = "An implant injected into the body, and later activated either manually or automatically upon death. \ @@ -47,14 +63,6 @@ include_modes = list(/datum/game_mode/nuclear) restricted = TRUE -/datum/uplink_item/implants/radio - name = "Internal Syndicate Radio Implant" - desc = "An implant injected into the body, allowing the use of an internal Syndicate radio. \ - Used just like a regular headset, but can be disabled to use external headsets normally and to avoid detection." - item = /obj/item/storage/box/syndie_kit/imp_radio - cost = 4 - restricted = TRUE - /datum/uplink_item/implants/reviver name = "Reviver Implant" desc = "This implant will attempt to revive and heal you if you lose consciousness. Comes with an autosurgeon." diff --git a/icons/obj/implants.dmi b/icons/obj/implants.dmi index 8dc2f08fdcb8ff736b8b73d26155e23e24f60787..7e97f0349d5aab5fa0c7d95b272a446f0f9521d8 100644 GIT binary patch delta 2000 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 Ef(+wyW&i*H diff --git a/icons/obj/lighting.dmi b/icons/obj/lighting.dmi index 396d681f22101ba1337a117335a3325923fd913e..675005da91474f87aeb3a0b4449216d4a0da9ed0 100644 GIT binary patch literal 77552 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 aAi9K&Wb!-e10kCL_|ewTQ?F6A3I8wbY5np5 literal 75974 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

FeT;TBJ56Egn^DpWB#0?C{483<~fv#f^ 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

" /datum/sabotage_objective/processing/supermatter - name = "Sabotage the supermatter so that it goes under 50% integrity." + name = "Sabotage the supermatter so that it goes under 50% integrity. If it is delaminated, you will fail." sabotage_type = "supermatter" special_equipment = list(/obj/item/paper/guides/antag/supermatter_sabotage) var/list/supermatters = list() @@ -73,9 +75,8 @@ if (!isturf(S.loc) || !(is_station_level(S.z) || is_mining_level(S.z))) continue supermatters.Add(S) - for(var/obj/machinery/power/supermatter_crystal/S in supermatters) - if(S.get_integrity() < 50) - return TRUE + for(var/obj/machinery/power/supermatter_crystal/S in supermatters) // you can win this with a wishgranter... lol. + won = max(1-((S.get_integrity()-50)/50),won) return FALSE /datum/sabotage_objective/station_integrity @@ -83,7 +84,7 @@ sabotage_type = "integrity" /datum/sabotage_objective/station_integrity/check_conditions() - return SSticker.station_integrity < 80 + return 100/(100-max(SSticker.station_integrity,80)) /datum/sabotage_objective/cloner name = "Destroy all Nanotrasen cloning machines." diff --git a/code/modules/antagonists/_common/antag_team.dm b/code/modules/antagonists/_common/antag_team.dm index b376287f7a..027abc7c94 100644 --- a/code/modules/antagonists/_common/antag_team.dm +++ b/code/modules/antagonists/_common/antag_team.dm @@ -37,11 +37,14 @@ var/objective_count = 1 for(var/datum/objective/objective in objectives) if(objective.completable) - if(objective.check_completion()) + var/completion = objective.check_completion() + if(completion >= 1) report += "Objective #[objective_count]: [objective.explanation_text] Success!" - else + else if(completion <= 0) report += "Objective #[objective_count]: [objective.explanation_text] Fail." win = FALSE + else + report += "Objective #[objective_count]: [objective.explanation_text] [completion*100]%" else report += "Objective #[objective_count]: [objective.explanation_text]" objective_count++ diff --git a/code/modules/antagonists/brother/brother.dm b/code/modules/antagonists/brother/brother.dm index 22a343fb5f..2292006da1 100644 --- a/code/modules/antagonists/brother/brother.dm +++ b/code/modules/antagonists/brother/brother.dm @@ -109,11 +109,14 @@ var/objective_count = 1 for(var/datum/objective/objective in objectives) if(objective.completable) - if(objective.check_completion()) + var/completion = objective.check_completion() + if(completion >= 1) parts += "Objective #[objective_count]: [objective.explanation_text] Success!" - else + else if(completion <= 0) parts += "Objective #[objective_count]: [objective.explanation_text] Fail." win = FALSE + else + parts += "Objective #[objective_count]: [objective.explanation_text] [completion*100]%" else parts += "Objective #[objective_count]: [objective.explanation_text]" objective_count++ diff --git a/code/modules/antagonists/changeling/changeling.dm b/code/modules/antagonists/changeling/changeling.dm index 7d702ac25d..a81c409233 100644 --- a/code/modules/antagonists/changeling/changeling.dm +++ b/code/modules/antagonists/changeling/changeling.dm @@ -54,8 +54,10 @@ var/honorific if(owner.current.gender == FEMALE) honorific = "Ms." - else + else if(owner.current.gender == MALE) honorific = "Mr." + else + honorific = "Mx." if(GLOB.possible_changeling_IDs.len) changelingID = pick(GLOB.possible_changeling_IDs) GLOB.possible_changeling_IDs -= changelingID @@ -553,11 +555,14 @@ var/count = 1 for(var/datum/objective/objective in objectives) if(objective.completable) - if(objective.check_completion()) + var/completion = objective.check_completion() + if(completion >= 1) parts += "Objective #[count]: [objective.explanation_text] Success!" - else + else if(completion <= 0) parts += "Objective #[count]: [objective.explanation_text] Fail." changelingwin = FALSE + else + parts += "Objective #[count]: [objective.explanation_text] [completion*100]%" else parts += "Objective #[count]: [objective.explanation_text]" count++ diff --git a/code/modules/antagonists/cult/cult.dm b/code/modules/antagonists/cult/cult.dm index df2383f892..6f9cf78514 100644 --- a/code/modules/antagonists/cult/cult.dm +++ b/code/modules/antagonists/cult/cult.dm @@ -425,10 +425,13 @@ parts += "The cultists' objectives were:" var/count = 1 for(var/datum/objective/objective in objectives) - if(objective.check_completion()) - parts += "Objective #[count]: [objective.explanation_text] Success!" + var/completion = objective.check_completion() + if(completion >= 1) + parts += "Objective #[count]: [objective.explanation_text] Success!" + else if(completion <= 0) + parts += "Objective #[count]: [objective.explanation_text] Fail." else - parts += "Objective #[count]: [objective.explanation_text] Fail." + parts += "Objective #[count]: [objective.explanation_text] [completion*100]%" count++ if(members.len) diff --git a/code/modules/antagonists/disease/disease_datum.dm b/code/modules/antagonists/disease/disease_datum.dm index 1aef9ceba6..3d3de3bab2 100644 --- a/code/modules/antagonists/disease/disease_datum.dm +++ b/code/modules/antagonists/disease/disease_datum.dm @@ -44,11 +44,14 @@ var/objectives_text = "" var/count = 1 for(var/datum/objective/objective in objectives) - if(objective.check_completion()) - objectives_text += "
Objective #[count]: [objective.explanation_text] Success!" - else - objectives_text += "
Objective #[count]: [objective.explanation_text] Fail." + var/completion = objective.check_completion() + if(completion >= 1) + result += "Objective #[count]: [objective.explanation_text] Success!" + else if(completion <= 0) + result += "Objective #[count]: [objective.explanation_text] Fail." win = FALSE + else + result += "Objective #[count]: [objective.explanation_text] [completion*100]%" count++ result += objectives_text diff --git a/code/modules/antagonists/traitor/datum_traitor.dm b/code/modules/antagonists/traitor/datum_traitor.dm index 3385991116..01d3dd5694 100644 --- a/code/modules/antagonists/traitor/datum_traitor.dm +++ b/code/modules/antagonists/traitor/datum_traitor.dm @@ -384,11 +384,14 @@ var/count = 1 for(var/datum/objective/objective in objectives) if(objective.completable) - if(objective.check_completion()) - objectives_text += "Objective #[count]: [objective.explanation_text] Success!" - else - objectives_text += "Objective #[count]: [objective.explanation_text] Fail." + var/completion = objective.check_completion() + if(completion >= 1) + result += "Objective #[count]: [objective.explanation_text] Success!" + else if(completion <= 0) + result += "Objective #[count]: [objective.explanation_text] Fail." traitorwin = FALSE + else + result += "Objective #[count]: [objective.explanation_text] [completion*100]%" else objectives_text += "Objective #[count]: [objective.explanation_text]" count++ diff --git a/code/modules/antagonists/wizard/wizard.dm b/code/modules/antagonists/wizard/wizard.dm index cc3cde79e4..3fd0d3263c 100644 --- a/code/modules/antagonists/wizard/wizard.dm +++ b/code/modules/antagonists/wizard/wizard.dm @@ -266,11 +266,14 @@ var/count = 1 var/wizardwin = 1 for(var/datum/objective/objective in objectives) - if(objective.check_completion()) - parts += "Objective #[count]: [objective.explanation_text] Success!" - else + var/completion = objective.check_completion() + if(completion >= 1) + parts += "Objective #[count]: [objective.explanation_text] Success!" + else if(completion <= 0) parts += "Objective #[count]: [objective.explanation_text] Fail." - wizardwin = 0 + wizardwin = FALSE + else + parts += "Objective #[count]: [objective.explanation_text] [completion*100]%" count++ if(wizardwin) diff --git a/interface/stylesheet.dm b/interface/stylesheet.dm index 6ee9e6e824..9f3d8911ec 100644 --- a/interface/stylesheet.dm +++ b/interface/stylesheet.dm @@ -151,6 +151,7 @@ h1.alert, h2.alert {color: #000000;} .extremelybig {font-size: 5;} .greentext {color: #00FF00; font-size: 3;} .redtext {color: #FF0000; font-size: 3;} +.yellowtext {color: #FFCC00; font-size: 3;} .clown {color: #FF69Bf; font-size: 3; font-family: "Comic Sans MS", cursive, sans-serif; font-weight: bold;} .his_grace {color: #15D512; font-family: "Courier New", cursive, sans-serif; font-style: italic;} .spooky {color: #FF9100;} From 809f57a15d37fe2fb894214ea6b44d499f96c864 Mon Sep 17 00:00:00 2001 From: Putnam Date: Fri, 31 Jan 2020 12:25:19 -0800 Subject: [PATCH 063/346] also added kill-once objectives --- code/datums/mind.dm | 1 + code/game/gamemodes/objective.dm | 24 +++++++++++++++++++ code/modules/antagonists/ninja/ninja.dm | 4 ++-- .../antagonists/traitor/datum_traitor.dm | 13 ++++++---- 4 files changed, 36 insertions(+), 6 deletions(-) diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 464ea37d02..628e698ae0 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -458,6 +458,7 @@ var/list/allowed_types = list( /datum/objective/assassinate, + /datum/objective/assassinate/once, /datum/objective/maroon, /datum/objective/debrain, /datum/objective/protect, diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index a9c9e227df..d7ee749f34 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -173,6 +173,30 @@ GLOBAL_LIST_EMPTY(objectives) /datum/objective/assassinate/admin_edit(mob/admin) admin_simple_target_pick(admin) +/datum/objective/assassinate/once + name = "kill once" + var/won = FALSE + +/datum/objective/assassinate/once/update_explanation_text() + ..() + if(target && target.current) + explanation_text = "Kill [target.name], the [!target_role_type ? target.assigned_role : target.special_role]. You only need to kill [target.p_them()] once; if they come back, you've still succeeded." + else + explanation_text = "Free Objective" + +/datum/objective/assassinate/once/find_target_by_role() + . = ..() + if(.) + START_PROCESSING(SSprocessing,src) + +/datum/objective/assassinate/once/check_completion() + return won || ..() + +/datum/objective/assassinate/once/process() + won = check_completion() + if(won) + STOP_PROCESSING(SSprocessing,src) + /datum/objective/assassinate/internal var/stolen = 0 //Have we already eliminated this target? diff --git a/code/modules/antagonists/ninja/ninja.dm b/code/modules/antagonists/ninja/ninja.dm index fe83e2fb2b..42412709fa 100644 --- a/code/modules/antagonists/ninja/ninja.dm +++ b/code/modules/antagonists/ninja/ninja.dm @@ -62,10 +62,10 @@ possible_targets.Cut(index,index+1) if(is_bad_guy ^ helping_station) //kill (good-ninja + bad-guy or bad-ninja + good-guy) - var/datum/objective/assassinate/O = new /datum/objective/assassinate() + var/datum/objective/assassinate/once/O = new /datum/objective/assassinate() O.owner = owner O.target = M - O.explanation_text = "Slay \the [M.current.real_name], the [M.assigned_role]." + O.explanation_text = "Slay \the [M.current.real_name], the [M.assigned_role]. You may let [M.p_they()] live, if they come back from death." objectives += O else //protect var/datum/objective/protect/O = new /datum/objective/protect() diff --git a/code/modules/antagonists/traitor/datum_traitor.dm b/code/modules/antagonists/traitor/datum_traitor.dm index 01d3dd5694..f584b6c149 100644 --- a/code/modules/antagonists/traitor/datum_traitor.dm +++ b/code/modules/antagonists/traitor/datum_traitor.dm @@ -191,28 +191,33 @@ maroon_objective.owner = owner maroon_objective.find_target() add_objective(maroon_objective) - else + else if(prob(30)) var/datum/objective/assassinate/kill_objective = new kill_objective.owner = owner kill_objective.find_target() add_objective(kill_objective) + else + var/datum/objective/assassinate/once/kill_objective = new + kill_objective.owner = owner + kill_objective.find_target() + add_objective(kill_objective) else if(prob(15) && !(locate(/datum/objective/download) in objectives) && !(owner.assigned_role in list("Research Director", "Scientist", "Roboticist"))) var/datum/objective/download/download_objective = new download_objective.owner = owner download_objective.gen_amount_goal() add_objective(download_objective) - else if(prob(40)) + else if(prob(33)) // cum. not counting download: 33%. yes, i do know 33/33 won't be equal and that i want 33/50 for that var/datum/objective/steal/steal_objective = new steal_objective.owner = owner steal_objective.find_target() add_objective(steal_objective) - else if(prob(40)) + else if(prob(33)) // cum. not counting download: 22.11% var/datum/objective/sabotage/sabotage_objective = new sabotage_objective.owner = owner sabotage_objective.find_target() add_objective(sabotage_objective) - else + else // cum. not counting download: 44.89% var/datum/objective/flavor/traitor/flavor_objective = new flavor_objective.owner = owner flavor_objective.forge_objective() From 425f532f767bff16d66a986dea91e05ea8f0e93b Mon Sep 17 00:00:00 2001 From: Putnam Date: Fri, 31 Jan 2020 13:12:50 -0800 Subject: [PATCH 064/346] WHOOPS --- code/game/gamemodes/objective.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index d7ee749f34..1fdb621866 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -184,7 +184,7 @@ GLOBAL_LIST_EMPTY(objectives) else explanation_text = "Free Objective" -/datum/objective/assassinate/once/find_target_by_role() +/datum/objective/assassinate/once/find_target_by_role(role, role_type=0, invert=0) . = ..() if(.) START_PROCESSING(SSprocessing,src) From f9ccca9c8fb76d61780686dad8f5b6ddbff16985 Mon Sep 17 00:00:00 2001 From: r4d6 Date: Sat, 1 Feb 2020 00:08:01 -0500 Subject: [PATCH 065/346] Anti-Shitter mining update --- .../Mining_Station_Public_01.dmm | 41 ++++++++++++------- 1 file changed, 27 insertions(+), 14 deletions(-) diff --git a/_maps/RandomRuins/StationRuins/Lavaland/Mining_Station/Mining_Station_Public_01.dmm b/_maps/RandomRuins/StationRuins/Lavaland/Mining_Station/Mining_Station_Public_01.dmm index 75c0434771..a1bb761076 100644 --- a/_maps/RandomRuins/StationRuins/Lavaland/Mining_Station/Mining_Station_Public_01.dmm +++ b/_maps/RandomRuins/StationRuins/Lavaland/Mining_Station/Mining_Station_Public_01.dmm @@ -716,14 +716,13 @@ /turf/open/floor/plasteel, /area/mine/laborcamp/security) "mN" = ( -/obj/effect/spawner/structure/window/reinforced, /obj/structure/cable{ icon_state = "4-8" }, /obj/structure/cable{ icon_state = "0-4" }, -/turf/open/floor/plating, +/turf/closed/wall/r_wall, /area/mine/production) "nm" = ( /obj/effect/turf_decal/tile/red{ @@ -1301,6 +1300,16 @@ /obj/effect/turf_decal/tile/brown{ dir = 4 }, +/obj/item/gun/energy/kinetic_accelerator, +/obj/item/gun/energy/kinetic_accelerator, +/obj/item/gun/energy/kinetic_accelerator, +/obj/item/gun/energy/kinetic_accelerator, +/obj/item/gun/energy/kinetic_accelerator, +/obj/item/gun/energy/kinetic_accelerator, +/obj/item/gun/energy/kinetic_accelerator, +/obj/item/gun/energy/kinetic_accelerator, +/obj/item/gun/energy/kinetic_accelerator, +/obj/item/gun/energy/kinetic_accelerator, /turf/open/floor/plasteel, /area/mine/production) "wj" = ( @@ -1569,11 +1578,10 @@ /turf/open/floor/plasteel, /area/mine/living_quarters) "Bc" = ( -/obj/effect/spawner/structure/window/reinforced, /obj/structure/cable{ icon_state = "0-8" }, -/turf/open/floor/plating, +/turf/closed/wall/r_wall, /area/mine/production) "Be" = ( /obj/machinery/light/small{ @@ -2111,6 +2119,9 @@ }, /turf/open/floor/plasteel, /area/mine/living_quarters) +"JI" = ( +/turf/closed/wall/r_wall, +/area/mine/production) "JJ" = ( /obj/structure/cable{ icon_state = "1-2" @@ -2296,11 +2307,10 @@ /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) "Lc" = ( -/obj/effect/spawner/structure/window/reinforced, /obj/structure/cable{ icon_state = "0-4" }, -/turf/open/floor/plating, +/turf/closed/wall/r_wall, /area/mine/production) "Le" = ( /obj/structure/closet/crate/internals, @@ -2381,6 +2391,10 @@ /obj/structure/cable{ icon_state = "2-4" }, +/obj/machinery/door/airlock/highsecurity{ + name = "Miner's Side, Shitters not allowed"; + req_access_txt = "48" + }, /turf/open/floor/plasteel, /area/mine/production) "Mj" = ( @@ -3008,14 +3022,13 @@ /turf/open/floor/plasteel, /area/mine/production) "Vo" = ( -/obj/effect/spawner/structure/window/reinforced, /obj/structure/cable{ icon_state = "4-8" }, /obj/structure/cable{ icon_state = "0-8" }, -/turf/open/floor/plating, +/turf/closed/wall/r_wall, /area/mine/production) "Vs" = ( /obj/effect/turf_decal/tile/purple, @@ -6887,10 +6900,10 @@ vJ JW bg VP -Cd -Cd +JI +JI Bc -Cd +JI Bc es XN @@ -6944,7 +6957,7 @@ Ex xv bg mI -Cd +JI OI sz gk @@ -7000,8 +7013,8 @@ CV al lj bg -Cd -Cd +JI +JI mw es es From 3d9e84a3f8a9c5cfe1c160e17bf3be0ee7ef1901 Mon Sep 17 00:00:00 2001 From: Putnam Date: Sat, 1 Feb 2020 00:23:45 -0800 Subject: [PATCH 066/346] Tweaks and fixes --- code/__HELPERS/roundend.dm | 12 +++++++++--- code/game/gamemodes/objective_sabotage.dm | 2 +- code/modules/antagonists/cult/cult.dm | 15 +++++++++------ .../antagonists/disease/disease_datum.dm | 17 ++++++++++------- code/modules/antagonists/wizard/wizard.dm | 17 ++++++++++------- 5 files changed, 39 insertions(+), 24 deletions(-) diff --git a/code/__HELPERS/roundend.dm b/code/__HELPERS/roundend.dm index 906f60d65b..535f1154e7 100644 --- a/code/__HELPERS/roundend.dm +++ b/code/__HELPERS/roundend.dm @@ -557,10 +557,16 @@ var/list/objective_parts = list() var/count = 1 for(var/datum/objective/objective in objectives) - if(objective.check_completion()) - objective_parts += "Objective #[count]: [objective.explanation_text] Success!" + if(objective.completable) + var/completion = objective.check_completion() + if(completion >= 1) + objective_parts += "Objective #[count]: [objective.explanation_text] Success!" + else if(completion <= 0) + objective_parts += "Objective #[count]: [objective.explanation_text] Fail." + else + objective_parts += "Objective #[count]: [objective.explanation_text] [completion*100]%" else - objective_parts += "Objective #[count]: [objective.explanation_text] Fail." + objective_parts += "Objective #[count]: [objective.explanation_text]" count++ return objective_parts.Join("
") diff --git a/code/game/gamemodes/objective_sabotage.dm b/code/game/gamemodes/objective_sabotage.dm index 467983a346..248524f1d2 100644 --- a/code/game/gamemodes/objective_sabotage.dm +++ b/code/game/gamemodes/objective_sabotage.dm @@ -84,7 +84,7 @@ sabotage_type = "integrity" /datum/sabotage_objective/station_integrity/check_conditions() - return 100/(100-max(SSticker.station_integrity,80)) + return 5-(max(SSticker.station_integrity*4,320)/80) /datum/sabotage_objective/cloner name = "Destroy all Nanotrasen cloning machines." diff --git a/code/modules/antagonists/cult/cult.dm b/code/modules/antagonists/cult/cult.dm index 6f9cf78514..2b6c24f8dc 100644 --- a/code/modules/antagonists/cult/cult.dm +++ b/code/modules/antagonists/cult/cult.dm @@ -425,13 +425,16 @@ parts += "The cultists' objectives were:" var/count = 1 for(var/datum/objective/objective in objectives) - var/completion = objective.check_completion() - if(completion >= 1) - parts += "Objective #[count]: [objective.explanation_text] Success!" - else if(completion <= 0) - parts += "Objective #[count]: [objective.explanation_text] Fail." + if(objective.completable) + var/completion = objective.check_completion() + if(completion >= 1) + parts += "Objective #[count]: [objective.explanation_text] Success!" + else if(completion <= 0) + parts += "Objective #[count]: [objective.explanation_text] Fail." + else + parts += "Objective #[count]: [objective.explanation_text] [completion*100]%" else - parts += "Objective #[count]: [objective.explanation_text] [completion*100]%" + parts += "Objective #[count]: [objective.explanation_text]" count++ if(members.len) diff --git a/code/modules/antagonists/disease/disease_datum.dm b/code/modules/antagonists/disease/disease_datum.dm index 3d3de3bab2..3c7de589d9 100644 --- a/code/modules/antagonists/disease/disease_datum.dm +++ b/code/modules/antagonists/disease/disease_datum.dm @@ -44,14 +44,17 @@ var/objectives_text = "" var/count = 1 for(var/datum/objective/objective in objectives) - var/completion = objective.check_completion() - if(completion >= 1) - result += "Objective #[count]: [objective.explanation_text] Success!" - else if(completion <= 0) - result += "Objective #[count]: [objective.explanation_text] Fail." - win = FALSE + if(objective.completable) + var/completion = objective.check_completion() + if(completion >= 1) + result += "Objective #[count]: [objective.explanation_text] Success!" + else if(completion <= 0) + result += "Objective #[count]: [objective.explanation_text] Fail." + win = FALSE + else + result += "Objective #[count]: [objective.explanation_text] [completion*100]%" else - result += "Objective #[count]: [objective.explanation_text] [completion*100]%" + result += "Objective #[count]: [objective.explanation_text]" count++ result += objectives_text diff --git a/code/modules/antagonists/wizard/wizard.dm b/code/modules/antagonists/wizard/wizard.dm index 3fd0d3263c..c5e365d4eb 100644 --- a/code/modules/antagonists/wizard/wizard.dm +++ b/code/modules/antagonists/wizard/wizard.dm @@ -266,14 +266,17 @@ var/count = 1 var/wizardwin = 1 for(var/datum/objective/objective in objectives) - var/completion = objective.check_completion() - if(completion >= 1) - parts += "Objective #[count]: [objective.explanation_text] Success!" - else if(completion <= 0) - parts += "Objective #[count]: [objective.explanation_text] Fail." - wizardwin = FALSE + if(objective.completable) + var/completion = objective.check_completion() + if(completion >= 1) + parts += "Objective #[count]: [objective.explanation_text] Success!" + else if(completion <= 0) + parts += "Objective #[count]: [objective.explanation_text] Fail." + wizardwin = FALSE + else + parts += "Objective #[count]: [objective.explanation_text] [completion*100]%" else - parts += "Objective #[count]: [objective.explanation_text] [completion*100]%" + parts += "Objective #[count]: [objective.explanation_text]" count++ if(wizardwin) From 847e6382c0b53f958dc10bc723b3073384079a0f Mon Sep 17 00:00:00 2001 From: Putnam Date: Sat, 1 Feb 2020 00:32:08 -0800 Subject: [PATCH 067/346] fixes some quirk stuff --- code/controllers/subsystem/processing/quirks.dm | 6 +++--- code/modules/antagonists/_common/antag_datum.dm | 12 ++++++------ code/modules/antagonists/survivalist/survivalist.dm | 2 +- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/code/controllers/subsystem/processing/quirks.dm b/code/controllers/subsystem/processing/quirks.dm index a52bcf4607..10655981e5 100644 --- a/code/controllers/subsystem/processing/quirks.dm +++ b/code/controllers/subsystem/processing/quirks.dm @@ -35,7 +35,7 @@ PROCESSING_SUBSYSTEM_DEF(quirks) var/list/my_quirks = cli.prefs.all_quirks.Copy() var/list/cut if(job?.blacklisted_quirks) - cut = filter_quirks(my_quirks, job) + cut = filter_quirks(my_quirks, job.blacklisted_quirks) for(var/V in my_quirks) var/datum/quirk/Q = quirks[V] if(Q) @@ -63,11 +63,11 @@ PROCESSING_SUBSYSTEM_DEF(quirks) for(var/i in quirk_names) . += quirk_points_by_name(i) -/datum/controller/subsystem/processing/quirks/proc/filter_quirks(list/our_quirks, datum/job/job) +/datum/controller/subsystem/processing/quirks/proc/filter_quirks(list/our_quirks, list/blacklisted_quirks) var/list/cut = list() var/list/banned_names = list() var/pointscut = 0 - for(var/i in job.blacklisted_quirks) + for(var/i in blacklisted_quirks) var/name = quirk_name_by_path(i) if(name) banned_names += name diff --git a/code/modules/antagonists/_common/antag_datum.dm b/code/modules/antagonists/_common/antag_datum.dm index eafe4f4ec7..5921b465e2 100644 --- a/code/modules/antagonists/_common/antag_datum.dm +++ b/code/modules/antagonists/_common/antag_datum.dm @@ -20,7 +20,7 @@ GLOBAL_LIST_EMPTY(antagonists) var/show_in_antagpanel = TRUE //This will hide adding this antag type in antag panel, use only for internal subtypes that shouldn't be added directly but still show if possessed by mind var/antagpanel_category = "Uncategorized" //Antagpanel will display these together, REQUIRED var/show_name_in_check_antagonists = FALSE //Will append antagonist name in admin listings - use for categories that share more than one antag type - var/list/blacklisted_quirks = list("Pacifist","Mute") // Quirks that will be removed upon gaining this antag. Pacifist and mute are default. + var/list/blacklisted_quirks = list(/datum/quirk/nonviolent,/datum/quirk/mute) // Quirks that will be removed upon gaining this antag. Pacifist and mute are default. /datum/antagonist/New() GLOB.antagonists += src @@ -122,12 +122,12 @@ GLOBAL_LIST_EMPTY(antagonists) /datum/antagonist/proc/remove_blacklisted_quirks() var/mob/living/L = owner if(istype(L)) - for(var/q in L.roundstart_quirks) + var/list/cut = list() + cut = SSquirks.filter_quirks(L.roundstart_quirks,blacklisted_quirks) + for(var/q in cut) var/datum/quirk/Q = q - if(Q.name in blacklisted_quirks) - if(Q.antag_removal_text) - to_chat(L, "[Q.antag_removal_text]") - L.remove_quirk(Q.type) + if(Q.antag_removal_text) + to_chat(L, "[Q.antag_removal_text]") //Returns the team antagonist belongs to if any. /datum/antagonist/proc/get_team() diff --git a/code/modules/antagonists/survivalist/survivalist.dm b/code/modules/antagonists/survivalist/survivalist.dm index 1b870ec389..0b66e8cb23 100644 --- a/code/modules/antagonists/survivalist/survivalist.dm +++ b/code/modules/antagonists/survivalist/survivalist.dm @@ -2,7 +2,7 @@ name = "Survivalist" show_in_antagpanel = FALSE show_name_in_check_antagonists = TRUE - blacklisted_quirks = list("Pacifist") // mutes are allowed + blacklisted_quirks = list(/datum/quirk/nonviolent) // mutes are allowed var/greet_message = "" /datum/antagonist/survivalist/proc/forge_objectives() From 7e3ea27ff46e0e51c09194ace0a106509a1590d8 Mon Sep 17 00:00:00 2001 From: Putnam Date: Sat, 1 Feb 2020 00:42:25 -0800 Subject: [PATCH 068/346] dumb formatting. dumb dumb. --- code/modules/antagonists/traitor/datum_traitor.dm | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/code/modules/antagonists/traitor/datum_traitor.dm b/code/modules/antagonists/traitor/datum_traitor.dm index f584b6c149..830555e9a2 100644 --- a/code/modules/antagonists/traitor/datum_traitor.dm +++ b/code/modules/antagonists/traitor/datum_traitor.dm @@ -207,17 +207,17 @@ download_objective.owner = owner download_objective.gen_amount_goal() add_objective(download_objective) - else if(prob(33)) // cum. not counting download: 33%. yes, i do know 33/33 won't be equal and that i want 33/50 for that + else if(prob(40)) // cum. not counting download: 40%. var/datum/objective/steal/steal_objective = new steal_objective.owner = owner steal_objective.find_target() add_objective(steal_objective) - else if(prob(33)) // cum. not counting download: 22.11% + else if(prob(100/3)) // cum. not counting download: 20%. var/datum/objective/sabotage/sabotage_objective = new sabotage_objective.owner = owner sabotage_objective.find_target() add_objective(sabotage_objective) - else // cum. not counting download: 44.89% + else // cum. not counting download: 40% var/datum/objective/flavor/traitor/flavor_objective = new flavor_objective.owner = owner flavor_objective.forge_objective() @@ -391,12 +391,12 @@ if(objective.completable) var/completion = objective.check_completion() if(completion >= 1) - result += "Objective #[count]: [objective.explanation_text] Success!" + objectives_text += "Objective #[count]: [objective.explanation_text] Success!" else if(completion <= 0) - result += "Objective #[count]: [objective.explanation_text] Fail." + objectives_text += "Objective #[count]: [objective.explanation_text] Fail." traitorwin = FALSE else - result += "Objective #[count]: [objective.explanation_text] [completion*100]%" + objectives_text += "Objective #[count]: [objective.explanation_text] [completion*100]%" else objectives_text += "Objective #[count]: [objective.explanation_text]" count++ From 50a53c6558f156de3bd827bb05e190928425826a Mon Sep 17 00:00:00 2001 From: Putnam Date: Sat, 1 Feb 2020 00:47:44 -0800 Subject: [PATCH 069/346] aaand a formatting oddity --- code/game/gamemodes/objective.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 1fdb621866..db6d0a6672 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -180,7 +180,7 @@ GLOBAL_LIST_EMPTY(objectives) /datum/objective/assassinate/once/update_explanation_text() ..() if(target && target.current) - explanation_text = "Kill [target.name], the [!target_role_type ? target.assigned_role : target.special_role]. You only need to kill [target.p_them()] once; if they come back, you've still succeeded." + explanation_text = "Kill [target.name], the [!target_role_type ? target.assigned_role : target.special_role]. You only need to kill them once; if they come back, you've still succeeded." else explanation_text = "Free Objective" From 11fea908bd7725e9d5ded376996834878040f30d Mon Sep 17 00:00:00 2001 From: Artur Date: Sat, 1 Feb 2020 14:11:34 +0100 Subject: [PATCH 070/346] Fix and rebalance a lil --- code/modules/antagonists/bloodsucker/bloodsucker_sunlight.dm | 2 +- code/modules/antagonists/bloodsucker/powers/bs_lunge.dm | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_sunlight.dm b/code/modules/antagonists/bloodsucker/bloodsucker_sunlight.dm index 713699bbc7..263f91a9a6 100644 --- a/code/modules/antagonists/bloodsucker/bloodsucker_sunlight.dm +++ b/code/modules/antagonists/bloodsucker/bloodsucker_sunlight.dm @@ -81,7 +81,7 @@ "The solar flare has ended, and the daylight danger has passed...for now.") amDay = FALSE day_end() // Remove VANISHING ACT power from all vamps who have it! Clear Warnings (sunlight, locker protection) - nightime_duration += 200 //Each day makes the night last 2 or so minutes longer. + nightime_duration += 100 //Each day makes the night a minute longer. message_admins("BLOODSUCKER NOTICE: Daylight Ended. Resetting to Night (Lasts for [nightime_duration / 60] minutes.)") diff --git a/code/modules/antagonists/bloodsucker/powers/bs_lunge.dm b/code/modules/antagonists/bloodsucker/powers/bs_lunge.dm index 7f180a1f19..48e12332a2 100644 --- a/code/modules/antagonists/bloodsucker/powers/bs_lunge.dm +++ b/code/modules/antagonists/bloodsucker/powers/bs_lunge.dm @@ -28,7 +28,7 @@ return TRUE /datum/action/bloodsucker/targeted/lunge/CheckValidTarget(atom/A) - return isliving(A) + return iscarbon(A) /datum/action/bloodsucker/targeted/lunge/CheckCanTarget(atom/A, display_error) // Check: Self @@ -46,8 +46,6 @@ var/mob/living/L = A if(!isturf(L.loc)) return FALSE - if(!ishuman(target)) - return FALSE return TRUE /datum/action/bloodsucker/targeted/lunge/FireTargetedPower(atom/A) From d6d01d848cd6c6e78f40698d3e85fafe473c3bf8 Mon Sep 17 00:00:00 2001 From: Putnam Date: Sat, 1 Feb 2020 06:01:54 -0800 Subject: [PATCH 071/346] --- code/__HELPERS/roundend.dm | 2 +- code/datums/mind.dm | 8 ++++---- code/game/gamemodes/objective.dm | 3 +++ code/modules/antagonists/_common/antag_team.dm | 2 +- code/modules/antagonists/bloodsucker/datum_bloodsucker.dm | 2 +- code/modules/antagonists/brother/brother.dm | 2 +- code/modules/antagonists/changeling/changeling.dm | 2 +- code/modules/antagonists/cult/cult.dm | 2 +- code/modules/antagonists/disease/disease_datum.dm | 2 +- code/modules/antagonists/traitor/datum_traitor.dm | 2 +- code/modules/antagonists/wizard/wizard.dm | 2 +- 11 files changed, 16 insertions(+), 13 deletions(-) diff --git a/code/__HELPERS/roundend.dm b/code/__HELPERS/roundend.dm index 535f1154e7..c42d60c88f 100644 --- a/code/__HELPERS/roundend.dm +++ b/code/__HELPERS/roundend.dm @@ -566,7 +566,7 @@ else objective_parts += "Objective #[count]: [objective.explanation_text] [completion*100]%" else - objective_parts += "Objective #[count]: [objective.explanation_text]" + objective_parts += "Objective #[count]: [objective.explanation_text]" count++ return objective_parts.Join("
") diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 628e698ae0..aa1a2ed55f 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -374,7 +374,7 @@ output += "Objectives:" var/obj_count = 1 for(var/datum/objective/objective in all_objectives) - output += "
Objective #[obj_count++]: [objective.explanation_text]" + output += "
Objective #[obj_count++]: [objective.explanation_text]" var/list/datum/mind/other_owners = objective.get_owners() - src if(other_owners.len) output += "