From a5609c8150b17bcc9d929fd711b86e3b6eaa8621 Mon Sep 17 00:00:00 2001 From: Kilakk Date: Sat, 8 Jun 2013 18:51:26 -0400 Subject: [PATCH 01/18] Adds ability to change appearance for ERTs * ERTs can change their own appearance * Fixed an if statement I goof'd --- code/WorkInProgress/kilakk/responseteam.dm | 96 ++++++++++++++++------ 1 file changed, 69 insertions(+), 27 deletions(-) diff --git a/code/WorkInProgress/kilakk/responseteam.dm b/code/WorkInProgress/kilakk/responseteam.dm index c5b49537c45..94a4664c9cd 100644 --- a/code/WorkInProgress/kilakk/responseteam.dm +++ b/code/WorkInProgress/kilakk/responseteam.dm @@ -40,7 +40,7 @@ var/sent_emergency_team = 0 return sent_emergency_team = 1 - message_admins("[key_name_admin(usr)] has dispatched an Emergency Response Team.", 1) + message_admins("[key_name_admin(usr)] is dispatching an Emergency Response Team.", 1) log_admin("[key_name(usr)] used Dispatch Response Team.") var/member_number = members_possible @@ -66,14 +66,14 @@ var/sent_emergency_team = 0 // I tried doing this differently. Ghosts get a pop-up box similar to pAIs and one-click-antag // Biggest diff here is in how the candidates list is updated - alert(usr, "Active ghosts are currently being given a chance to be considered to join the emergency response team. Please wait about 30 seconds.") // There's probably a better way to do this, with a fancy count-down timer or something + alert(usr, "Active ghosts will be given a chance to choose whether or not they want to be considered for the emergency reponse team. This will take about 30 seconds.") // There's probably a better way to do this, with a fancy count-down timer or something var/list/candidates = list() var/list/members = list() var/time_passed = world.time for(var/mob/dead/observer/G in player_list) - if(!jobban_isbanned(G, "Syndicate") || !jobban_isbanned(G, "Emergency Response Team") || !jobban_isbanned(G, "Security Officer")) + if(!jobban_isbanned(G, "Syndicate") && !jobban_isbanned(G, "Emergency Response Team") && !jobban_isbanned(G, "Security Officer")) spawn(0) switch(alert(G, "Do you want to be considered for the Emergency Response Team? Please answer in 30 seconds!",,"Yes","No")) if("Yes") @@ -110,37 +110,79 @@ var/sent_emergency_team = 0 del(new_member) break - switch(alert(new_member, "You are an Emergency Response Team member! Are you a boy or a girl?",,"Male","Female")) - if("Male") - new_member.gender = MALE - if("Female") - new_member.gender = FEMALE + spawn(0) + switch(alert(new_member, "You are an Emergency Response Team member! Are you a boy or a girl?",,"Male","Female")) + if("Male") + new_member.gender = MALE + if("Female") + new_member.gender = FEMALE - var/new_name = input(new_member, "...Erm, what was your name again?", "Choose your name") as text + var/new_name = input(new_member, "...Erm, what was your name again?", "Choose your name") as text - if(!new_name) - new_member.real_name = "Agent [pick("Red","Yellow","Orange","Silver","Gold", "Pink", "Purple", "Rainbow")]" // Choose a "random" agent name - new_member.name = usr.real_name - else - new_member.real_name = new_name - new_member.name = new_name + if(!new_name) + new_member.real_name = "Agent [pick("Red","Yellow","Orange","Silver","Gold", "Pink", "Purple", "Rainbow")]" // Choose a "random" agent name + new_member.name = usr.real_name + else + new_member.real_name = new_name + new_member.name = new_name - new_member.dna.ready_dna(new_member) - new_member.update_body(1) + // -- CHANGE APPEARANCE -- + var/new_tone = input(new_member, "Please select your new skin tone: 1-220 (1=albino, 35=caucasian, 150=black, 220='very' black)", "Character Generation") as num - new_member.mind_initialize() - new_member.mind.assigned_role = "Emergency Response Team" - new_member.mind.special_role = "Emergency Response Team" - ticker.mode.traitors += new_member.mind // ERTs will show up at the end of the round on the "traitor" list + if(new_tone) + new_member.s_tone = max(min(round(text2num(new_tone)), 220), 1) + new_member.s_tone = -new_member.s_tone + 35 - new_member << "\blue You are the Emergency Response Team[!leader_selected?"!":" Leader!"] \nAs a response team [!leader_selected?"member":"leader"] you answer directly to [!leader_selected?"your team leader.":"Central Command."] \nYou have been deployed by NanoTrasen Central Command in Tau Ceti to resolve a Code Red alert aboard [station_name()], and have been provided with the following instructions and information regarding your mission: \red [situation]" - new_member.mind.store_memory("Mission Parameters: \red [situation].") + var/new_hair = input(new_member, "Please select your new hair color.","Character Generation") as color - if(leader_selected) - new_member << "\red The Nuclear Authentication Code is: [nuke_code]. You are instructed not to detonate the nuclear device aboard [station_name()] unless absolutely necessary." - new_member.mind.store_memory("Nuclear Authentication Code: \red [nuke_code]") + if(new_hair) + new_member.r_hair = hex2num(copytext(new_hair, 2, 4)) + new_member.g_hair = hex2num(copytext(new_hair, 4, 6)) + new_member.b_hair = hex2num(copytext(new_hair, 6, 8)) - new_member.equip_response_team(leader_selected) // Start equipping them + var/new_facial = input(new_member, "Please select your new facial hair color.","Character Generation") as color + + if(new_facial) + new_member.r_facial = hex2num(copytext(new_facial, 2, 4)) + new_member.g_facial = hex2num(copytext(new_facial, 4, 6)) + new_member.b_facial = hex2num(copytext(new_facial, 6, 8)) + + var/new_eyes = input(new_member, "Please select eye color.", "Character Generation") as color + + if(new_eyes) + new_member.r_eyes = hex2num(copytext(new_eyes, 2, 4)) + new_member.g_eyes = hex2num(copytext(new_eyes, 4, 6)) + new_member.b_eyes = hex2num(copytext(new_eyes, 6, 8)) + + var/new_hstyle = input(new_member, "Please select your new hair style!", "Grooming") as null|anything in hair_styles_list + + if(new_hstyle) + new_member.h_style = new_hstyle + + var/new_fstyle = input(new_member, "Please select your new facial hair style!", "Grooming") as null|anything in facial_hair_styles_list + + if(new_fstyle) + new_member.f_style = new_fstyle + + // -- END -- + + new_member.dna.ready_dna(new_member) + new_member.update_body(1) + new_member.update_hair(1) + + new_member.mind_initialize() + new_member.mind.assigned_role = "Emergency Response Team" + new_member.mind.special_role = "Emergency Response Team" + ticker.mode.traitors += new_member.mind // ERTs will show up at the end of the round on the "traitor" list + + new_member << "\blue You are the Emergency Response Team[!leader_selected?"!":" Leader!"] \nAs a response team [!leader_selected?"member":"leader"] you answer directly to [!leader_selected?"your team leader.":"Central Command."] \nYou have been deployed by NanoTrasen Central Command in Tau Ceti to resolve a Code Red alert aboard [station_name()], and have been provided with the following instructions and information regarding your mission: \red [situation]" + new_member.mind.store_memory("Mission Parameters: \red [situation].") + + if(leader_selected) + new_member << "\red The Nuclear Authentication Code is: [nuke_code]. You are instructed not to detonate the nuclear device aboard [station_name()] unless absolutely necessary." + new_member.mind.store_memory("Nuclear Authentication Code: \red [nuke_code]") + + new_member.equip_response_team(leader_selected) // Start equipping them member_number-- return 1 From 5ca6c970fb968924f4adac72023600fb5b895be5 Mon Sep 17 00:00:00 2001 From: Kilakk Date: Sat, 8 Jun 2013 18:52:41 -0400 Subject: [PATCH 02/18] Reticked and uncommented ERT It's time --- baystation12.dme | 1 + code/modules/admin/admin_verbs.dm | 2 -- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/baystation12.dme b/baystation12.dme index 0ea75da44d9..c11959342ae 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -1297,6 +1297,7 @@ #include "code\WorkInProgress\Cael_Aislinn\Supermatter\ZeroPointLaser.dm" #include "code\WorkInProgress\Chinsky\ashtray.dm" #include "code\WorkInProgress\Cib\MedicalSideEffects.dm" +#include "code\WorkInProgress\kilakk\responseteam.dm" #include "code\WorkInProgress\Mini\ATM.dm" #include "code\WorkInProgress\Mini\atmos_control.dm" #include "code\WorkInProgress\Ported\policetape.dm" diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index a9ad1c223b0..c8ff992b155 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -67,9 +67,7 @@ var/list/admin_verbs_admin = list( /client/proc/toggledebuglogs, /datum/admins/proc/show_skills, /client/proc/check_customitem_activity, - /* Currently unticked. /client/proc/response_team - */ ) var/list/admin_verbs_ban = list( /client/proc/unban_panel, From 8c6b8add20a44e5e155ebda8bc4489fcea0c2450 Mon Sep 17 00:00:00 2001 From: cib Date: Sun, 9 Jun 2013 01:13:13 +0200 Subject: [PATCH 03/18] Weights the likelihood of command positions by your age. For most head positions, a good age is between 25 and 60, with ages towards the middle of that being even better. 25 because I figure for stuff like research, engineer etc. they'll want someone with fresh knowledge. Captain's best age starts at 35 though, due to that being an "old geezer job". --- code/game/jobs/job_controller.dm | 35 +++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm index 4585837f802..3b6b584ee23 100644 --- a/code/game/jobs/job_controller.dm +++ b/code/game/jobs/job_controller.dm @@ -134,7 +134,40 @@ var/global/datum/controller/occupations/job_master if(!job) continue var/list/candidates = FindOccupationCandidates(job, level) if(!candidates.len) continue - var/mob/new_player/candidate = pick(candidates) + + // Build a weighted list, weight by age. + var/list/weightedCandidates = list() + + // Different head positions have different good ages. + var/good_age_minimal = 25 + var/good_age_maximal = 60 + if(command_position == "Captain") + good_age_minimal = 30 + good_age_maximal = 70 // Old geezer captains ftw + + for(var/mob/V in candidates) + // Log-out during round-start? What a bad boy, no head position for you! + if(!V.client) continue + var/age = V.client.prefs.age + switch(age) + if(good_age_minimal - 10 to good_age_minimal) + weightedCandidates[V] = 3 // Still a bit young. + if(good_age_minimal to good_age_minimal + 10) + weightedCandidates[V] = 6 // Better. + if(good_age_minimal + 10 to good_age_maximal - 10) + weightedCandidates[V] = 10 // Great. + if(good_age_maximal - 10 to good_age_maximal) + weightedCandidates[V] = 6 // Still good. + if(good_age_maximal to good_age_maximal + 10) + weightedCandidates[V] = 6 // Bit old, don't you think? + if(good_age_maximal to good_age_maximal + 50) + weightedCandidates[V] = 3 // Geezer. + else + // If there's ABSOLUTELY NOBODY ELSE + if(candidates.len == 1) weightedCandidates[V] = 1 + + + var/mob/new_player/candidate = pickweight(weightedCandidates) if(AssignRole(candidate, command_position)) return 1 return 0 From d5c085e22a75594b2b8913aee13e03a326c88654 Mon Sep 17 00:00:00 2001 From: NicholasDV Date: Sun, 9 Jun 2013 03:00:47 -0400 Subject: [PATCH 04/18] Changes to increase readability Specifically formatting the messages a bit differently by putting them onto multiple lines. They line up properly inside of dream maker, making them /much/ more readable. This format would be preferable for new additions into this file. --- code/WorkInProgress/periodic_news.dm | 60 +++++++++++++++++++++++----- 1 file changed, 49 insertions(+), 11 deletions(-) diff --git a/code/WorkInProgress/periodic_news.dm b/code/WorkInProgress/periodic_news.dm index 92186869264..977603e35e0 100644 --- a/code/WorkInProgress/periodic_news.dm +++ b/code/WorkInProgress/periodic_news.dm @@ -13,70 +13,108 @@ paycuts_suspicion round_time = 60*10 - message = "Reports have leaked that Nanotrasen Inc. is planning to put paycuts into effect on many of its Research Stations in Tau Ceti. Apparently these research stations haven't been able to yield the expected revenue, and thus adjustments have to be made." + message = {"Reports have leaked that Nanotrasen Inc. is planning to put paycuts into + effect on many of its Research Stations in Tau Ceti. Apparently these research + stations haven't been able to yield the expected revenue, and thus adjustments + have to be made."} author = "Unauthorized" paycuts_confirmation round_time = 60*40 - message = "Earlier rumours about paycuts on Research Stations in the Tau Ceti system have been confirmed. Shockingly, however, the cuts will only affect lower tier personnel. Heads of Staff will, according to our sources, not be affected." + message = {"Earlier rumours about paycuts on Research Stations in the Tau Ceti system have + been confirmed. Shockingly, however, the cuts will only affect lower tier + personnel. Heads of Staff will, according to our sources, not be affected."} author = "Unauthorized" human_experiments round_time = 60*90 - message = "Unbelievable reports about human experimentation have reached our ears. According to a refugee from one of the Tau Ceti Research Stations, their station, in order to increase revenue, has refactored several of their facilities to perform experiments on live humans, including virology research, genetic manipulation, and \"feeding them to the slimes to see what happens\". Allegedly, these test subjects were neither humanified monkeys nor volunteers, but rather unqualified staff that were forced into the experiments, and reported to have died in a \"work accident\" by Nanotrasen Inc." + message = {"Unbelievable reports about human experimentation have reached our ears. According + to a refugee from one of the Tau Ceti Research Stations, their station, in order + to increase revenue, has refactored several of their facilities to perform experiments + on live humans, including virology research, genetic manipulation, and \"feeding them + to the slimes to see what happens\". Allegedly, these test subjects were neither + humanified monkeys nor volunteers, but rather unqualified staff that were forced into + the experiments, and reported to have died in a \"work accident\" by Nanotrasen Inc."} author = "Unauthorized" bluespace_research announcement round_time = 60*20 - message = "The new field of research trying to explain several interesting spacetime oddities, also known as \"Bluespace Research\", has reached new heights. Of the several hundred space stations now orbiting in Tau Ceti, fifteen are now specially equipped to experiment with and research Bluespace effects. Rumours have it some of these stations even sport functional \"travel gates\" that can instantly move a whole research team to an alternate reality." + message = {"The new field of research trying to explain several interesting spacetime oddities, + also known as \"Bluespace Research\", has reached new heights. Of the several + hundred space stations now orbiting in Tau Ceti, fifteen are now specially equipped + to experiment with and research Bluespace effects. Rumours have it some of these + stations even sport functional \"travel gates\" that can instantly move a whole research + team to an alternate reality."} random_junk + cheesy_honkers author = "Assistant Editor Carl Ritz" channel_name = "The Gibson Gazzette" - message = "Do cheesy honkers increase risk of having a miscarriage? Several health administrations say so!" + message = {"Do cheesy honkers increase risk of having a miscarriage? Several health administrations + say so!"} round_time = 60 * 15 net_block author = "Assistant Editor Carl Ritz" channel_name = "The Gibson Gazzette" - message = "Several corporations banding together to block access to 'wetskrell.nt', site administrators claiming violation of net laws." + message = {"Several corporations banding together to block access to 'wetskrell.nt', site administrators + claiming violation of net laws."} round_time = 60 * 50 found_ssd channel_name = "Tau Ceti Daily" author = "Doctor Eric Hanfield" - message = "Several people have been found unconscious at their terminals. It is thought that it was due to a lack of sleep or of simply migraines from staring at the screen too long. Camera footage reveals that many of them were playing games instead of working and their pay has been docked accordingly." + message = {"Several people have been found unconscious at their terminals. It is thought that it was due + to a lack of sleep or of simply migraines from staring at the screen too long. Camera footage + reveals that many of them were playing games instead of working and their pay has been docked + accordingly."} round_time = 60 * 90 lotus_tree + explosions channel_name = "Tau Ceti Daily" author = "Reporter Leland H. Howards" - message = "The newly-christened civillian transport Lotus Tree suffered two very large explosions near the bridge today, and there are unconfirmed reports that the death toll has passed 50. The cause of the explosions remain unknown, but there is speculation that it might have something to do with the recent change of regulation in the Moore-Lee Corporation, a major funder of the ship, when M-L announced that they were officially acknowledging inter-species marriage and providing couples with marriage tax-benefits." + message = {"The newly-christened civillian transport Lotus Tree suffered two very large explosions near the + bridge today, and there are unconfirmed reports that the death toll has passed 50. The cause of + the explosions remain unknown, but there is speculation that it might have something to do with + the recent change of regulation in the Moore-Lee Corporation, a major funder of the ship, when M-L + announced that they were officially acknowledging inter-species marriage and providing couples + with marriage tax-benefits."} round_time = 60 * 30 food_riots + breaking_news channel_name = "Tau Ceti Daily" author = "Reporter Ro'kii Ar-Raqis" - message = "Breaking news: Food riots have broken out throughout the Refuge asteroid colony in the Tenebrae Lupus system. This comes only hours after NanoTrasen officials announced they will no longer trade with the colony, citing the increased presence of \"hostile factions\" on the colony has made trade too dangerous to continue. NanoTrasen officials have not given any details about said factions. More on that at the top of the hour." + message = {"Breaking news: Food riots have broken out throughout the Refuge asteroid colony in the Tenebrae + Lupus system. This comes only hours after NanoTrasen officials announced they will no longer trade with the + colony, citing the increased presence of \"hostile factions\" on the colony has made trade too dangerous to + continue. NanoTrasen officials have not given any details about said factions. More on that at the top of + the hour."} round_time = 60 * 10 more channel_name = "Tau Ceti Daily" author = "Reporter Ro'kii Ar-Raqis" - message = "More on the Refuge food riots: The Refuge Council has condemned NanoTrasen's withdrawal from the colony, claiming \"there has been no increase in anti-NanoTrasen activity\", and \"\[the only] reason NanoTrasen withdrew was because the \[Tenebrae Lupus] system's Plasma deposits have been completely mined out. We have little to trade with them now\". NanoTrasen officials have denied these allegations, calling them \"further proof\" of the colony's anti-NanoTrasen stance. Meanwhile, Refuge Security has been unable to quell the riots. More on this at 6." + message = {"More on the Refuge food riots: The Refuge Council has condemned NanoTrasen's withdrawal from + the colony, claiming \"there has been no increase in anti-NanoTrasen activity\", and \"\[the only] reason + NanoTrasen withdrew was because the \[Tenebrae Lupus] system's Plasma deposits have been completely mined out. + We have little to trade with them now\". NanoTrasen officials have denied these allegations, calling them + \"further proof\" of the colony's anti-NanoTrasen stance. Meanwhile, Refuge Security has been unable to quell + the riots. More on this at 6."} round_time = 60 * 60 -var/global/list/newscaster_standard_feeds = list(/datum/news_announcement/bluespace_research, /datum/news_announcement/lotus_tree, /datum/news_announcement/random_junk, /datum/news_announcement/lotus_tree) +var/global/list/newscaster_standard_feeds = list(/datum/news_announcement/bluespace_research, /datum/news_announcement/lotus_tree, /datum/news_announcement/random_junk, /datum/news_announcement/food_riots) proc/process_newscaster() check_for_newscaster_updates(ticker.mode.newscaster_announcements) From f2a16fc3cdd39e73296097f3bfdca57138e8dbcf Mon Sep 17 00:00:00 2001 From: NicholasDV Date: Sun, 9 Jun 2013 03:16:51 -0400 Subject: [PATCH 05/18] This just fixes a small typo in build mode. Specifically, the throw and select buttons were 'switched' in some instructions. This quickly fixes that! closes #3001 --- code/WorkInProgress/buildmode.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/WorkInProgress/buildmode.dm b/code/WorkInProgress/buildmode.dm index 5e4a45e21ae..089522490a2 100644 --- a/code/WorkInProgress/buildmode.dm +++ b/code/WorkInProgress/buildmode.dm @@ -92,8 +92,8 @@ usr << "\blue ***********************************************************" if(4) usr << "\blue ***********************************************************" - usr << "\blue Left Mouse Button on turf/obj/mob = Throw" - usr << "\blue Right Mouse Button on turf/obj/mob = Select" + usr << "\blue Left Mouse Button on turf/obj/mob = Select" + usr << "\blue Right Mouse Button on turf/obj/mob = Throw" usr << "\blue ***********************************************************" return From fb5b853ca2e6d57e35d3fbe09bb03e8b0e8a65b0 Mon Sep 17 00:00:00 2001 From: NicholasDV Date: Sun, 9 Jun 2013 03:20:58 -0400 Subject: [PATCH 06/18] Fixes a spriting issue Specifically, the sprite for laying down with clean tajaran cut didn't have the correct icon_state name. I changed it to the correct one. --- icons/mob/human_face.dmi | Bin 38472 -> 38469 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/human_face.dmi b/icons/mob/human_face.dmi index 221f43ed0f03991053e1208e8608f0d823029b4c..c6bf1e373e222a1ed2ed76e8bb09c04cd161d7a4 100644 GIT binary patch delta 1027 zcmV+e1pNERtOCWX0+1tr1OIwdSad{Xb7OL8aCB*JZU6vyoSm9YZ`?QxhR>N_VYK%} zH|aH(MT#Pa_AeNeO-stqk}AobO@I9!{4t&l+Pv&70Uo}TNRj&Rd~E*t^7Z+9^Yrcc zG;=OKhUT&P{MV<`-NpCSHIL21{prrJx2`V#luDJG$L7O_(_Qa>b7>x%zfX5VrjeJw zcYt5HwB?F@{tYJYsyXtxB|vWlK}CZq8dR}E6+1w2pw5%D7pf%&K=_u2^*cvNyu!g| z0DBlF5yO;w+{e`f_A*oGU(byD*bHC~EVD;e^$iZIlTnPFjAGoK)1_CFTU&8uTX9|I z6E5t0QYc4Dif}A#I9UJ43SU7`5m^%}2r3S!;(*7run2c&JgS=k>>+S>R`!sq3G78; zuu3mi6TGAQqA2x?FN#|4FO-oC-{9ze$-QHO*Z78`wUe28q`e+#P`^F8W8 zVz5K@!NQyD!2-PzOj+Qjw!ml}{K(yer(ngE(TCU3)j-peb>W}&@s}7Z7dT2Aj&{)G z&-@Da&xJ-a;4KX~!tq~m^fs-K*65l{9zP*u^6+kAS%hKfl}7VO*)j!qnSbm&x>J#* z5#Og4`h9Iff&|2nAdwKCN}Hh&??v4yByltuUVkfza>YApiesWaPVh8;On!hL8>ZB&_9OU^x781dul1wB z@k7;GKPbM|4|>$x>Idc5`a$pKTm7IfS0j9A*y;y9`PPU$_#Nv9rAL$DwX)U^d^6kX z2Q*mf2ZX28Ba}8y4 z)qJyFd00Pj=)9Clol|^Cxqq?3=MpEaqpJ!29W_#Ag^QKP^FETO19mh5c9>}06k3VF zmgEEU1CX~iDnCQ^0zI$3wSoN<7jxB4=xC(#q@B{y2=?S6)&Xwt_toe4ZwvnNXGbyB x;$p5pCNMPrxA>)xkIk3wPtDV}=hJ_CPfB92YXF}B03ZNKL_t(|oU=Iu50dnN5}yD7 delta 1045 zcmV+w1nT?6tOCfa0+1tr1Oj?gSad{Xb7OL8aCB*JZU6vyoSmA_a@;ly#?RiT&?NUx zYv<}q$C-=|$t!3;2_or*NQR`eb)G&4{aJ0?#vgjKXMXrVf&@rV`?2}^^Oxsu&C}QC z)6BW}7@EiC(;t7H?k>Ksu6b-8?oW4)y>)f@r&OxkJT@ObobGympG))D{B^n;GL5|a zy#xHpr7c(N({C_&SIv>nEdhEf2r3#>(V&VQs@MUF19hIHy-+PN0K&ICtlv3G;uQ`y z1K7hbi5RBb<36q?u$P%a|9WQJ$7TR~V3|F#t8Z{vos44aWEA7>oNjqFYild6Y%8wo ze8PpDPYUH|NfC~J1qbsV+2Jb)Dk6Jg1wq9DRUGh`78c>|j7N1dfIS56&dM5cHG#cI z3|8soYJyjEUlgf+@kNpA{e?2J!Z$d2UUKi4;61+KXzpaD9x1O!8q}U828&8BFsS^( zp)gWTjx@ZQu=*_zj=h|H&@AZAgZhqSFoXww=Ry7RR49;>p8*knD{X@BwA&aSw1a+7 zuPO<0_P@2!Rh#)yir_>{pEa%K3ts|e?5y-b&UZ;=b{w)vd+bF%( z$H7MLM-i)&EdvXG|KUk7rK8dNo|tlJlMwXL;Q*s$OBi~;|9AMeU4SEN@osLR!BLOV z(FMMHtTb9#ggkr=T41yY@12@|cGLMt)Yl6-)E0P@yGi?zWN;hX~AFq>?o#MT+H?R1cv5Ui~scTvHAS%sd@VPeEJErL`rG51pXla P03ZNKL_t)uGz1Zn*Ow5( From 673f3ddb37369d2e40ba6fdc98c082bc12ab93f0 Mon Sep 17 00:00:00 2001 From: Segrain Date: Sun, 9 Jun 2013 10:25:27 +0300 Subject: [PATCH 07/18] Fix for ordering hidden supplypacks. --- code/game/supplyshuttle.dm | 2 +- html/changelog.html | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/code/game/supplyshuttle.dm b/code/game/supplyshuttle.dm index 1d9b18db08e..f28b649ba75 100644 --- a/code/game/supplyshuttle.dm +++ b/code/game/supplyshuttle.dm @@ -574,7 +574,7 @@ var/list/mechtoys = list( temp += "Request from: [last_viewed_group]

" for(var/supply_name in supply_shuttle.supply_packs ) var/datum/supply_packs/N = supply_shuttle.supply_packs[supply_name] - if(N.hidden || (N.contraband && !can_order_contraband) || N.group != last_viewed_group) continue //Have to send the type instead of a reference to + if((N.hidden && !hacked) || (N.contraband && !can_order_contraband) || N.group != last_viewed_group) continue //Have to send the type instead of a reference to temp += "[supply_name] Cost: [N.cost]
" //the obj because it would get caught by the garbage /*temp = "Supply points: [supply_shuttle.points]


Request what?

" diff --git a/html/changelog.html b/html/changelog.html index def016bc22d..ef2fbb5d5ab 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -57,6 +57,14 @@ Stuff which is in development and not yet visible to players or just code relate (ie. code improvements for expandability, etc.) should not be listed here. They should be listed in the changelog upon commit though. Thanks. --> +
+

09.06.2013

+

Segrain updated:

+
    +
  • Emagged supply console can order SpecOp crates again.
  • +
+
+

Meyar

6/6/13 updated:

From adde619a06b705fe8b9f4b0c688cfb83a2084e33 Mon Sep 17 00:00:00 2001 From: NicholasDV Date: Sun, 9 Jun 2013 03:40:27 -0400 Subject: [PATCH 08/18] Fixes an issue in grammar! Specifically, the way that it was coded made it so that the word the would appear twice. There... really wasn't a way to fix that in a way that would effect a lot more things, that I could find. As a result, I simply reworded it so that it can work with or without the word, 'the'. closes #2771 --- code/game/mecha/mech_fabricator.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index 58824777d17..56c9f74f49f 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -368,7 +368,7 @@ src.desc = initial(src.desc) if(being_built) src.being_built.Move(get_step(src,SOUTH)) - src.visible_message("\icon[src] [src] beeps, \"The [src.being_built] is complete\".") + src.visible_message("\icon[src] [src] beeps, \"The following has been completed: [src.being_built] is built\".") src.being_built = null src.updateUsrDialog() return 1 From f304df5b05522d9925e20612b0cd6af94ccf9e6d Mon Sep 17 00:00:00 2001 From: NicholasDV Date: Sun, 9 Jun 2013 04:47:10 -0400 Subject: [PATCH 09/18] Added the ability to give traitors all objectives. Specifically, admins were unable to give players, traitors, that is, the objective to brig/maim someone. This gives them the ability view the traitor panel. --- code/datums/mind.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/datums/mind.dm b/code/datums/mind.dm index c472c22b581..175e622788a 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -370,13 +370,13 @@ datum/mind if(!def_value)//If it's a custom objective, it will be an empty string. def_value = "custom" - var/new_obj_type = input("Select objective type:", "Objective type", def_value) as null|anything in list("assassinate", "debrain", "protect", "prevent", "hijack", "escape", "survive", "steal", "download", "nuclear", "capture", "absorb", "custom") + var/new_obj_type = input("Select objective type:", "Objective type", def_value) as null|anything in list("assassinate", "debrain", "protect", "prevent", "harm", "brig", "hijack", "escape", "survive", "steal", "download", "nuclear", "capture", "absorb", "custom") if (!new_obj_type) return var/datum/objective/new_objective = null switch (new_obj_type) - if ("assassinate","protect","debrain") + if ("assassinate","protect","debrain", "harm", "brig") //To determine what to name the objective in explanation text. var/objective_type_capital = uppertext(copytext(new_obj_type, 1,2))//Capitalize first letter. var/objective_type_text = copytext(new_obj_type, 2)//Leave the rest of the text. From b835ab4bd2bd814c38405e0a2fa7829cd46fc6d3 Mon Sep 17 00:00:00 2001 From: MisterBook Date: Sun, 9 Jun 2013 14:10:11 -0500 Subject: [PATCH 10/18] Fix of breacher chasis to keep anyone but Ughanti from wearing it. Fix of gun suicide - lethal is lethal, nonlethal just hurts like a mother. Despamming electrode resistance. --- code/modules/clothing/spacesuits/alien.dm | 14 ++++++++++++++ .../mob/living/carbon/human/human_defense.dm | 1 - code/modules/projectiles/gun.dm | 8 +++++--- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/code/modules/clothing/spacesuits/alien.dm b/code/modules/clothing/spacesuits/alien.dm index 45e753c9acc..1d08c8c571d 100644 --- a/code/modules/clothing/spacesuits/alien.dm +++ b/code/modules/clothing/spacesuits/alien.dm @@ -1,6 +1,20 @@ /obj/item/clothing/head/helmet/space/unathi var/up = 0 //So Unathi helmets play nicely with the weldervision check. + mob_can_equip(M as mob, slot) + var/mob/living/carbon/human/U = M + if(U.dna.mutantrace != "lizard") + U << "This clearly isn't designed for your species!" + return 0 + return ..() + +/obj/item/clothing/suit/space/unathi/mob_can_equip(M as mob, slot) + var/mob/living/carbon/human/U = M + if(U.dna.mutantrace != "lizard") + U << "This clearly isn't designed for your species!" + return 0 + + return ..() /obj/item/clothing/head/helmet/space/unathi/helmet_cheap name = "NT breacher helmet" diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 79be30e4c40..3ad4a6adb54 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -22,7 +22,6 @@ emp_act var/obj/item/clothing/C = bp // Then call an argument C to be that clothing! if(C.body_parts_covered & select_area.body_part) // Is that body part being targeted covered? P.agony=P.agony*C.siemens_coefficient - visible_message("\red [src]'s [C.name] absorbs some of the shock from the [P.name]!") apply_effect(P.agony,AGONY,0) del P /* Commenting out new-old taser nerf. diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 7948a457c9a..41c84823a62 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -167,16 +167,18 @@ mouthshoot = 0 return if (load_into_chamber()) - user.visible_message("[user] pulls the trigger. Ow.") + user.visible_message("[user] pulls the trigger.") if(silenced) playsound(user, fire_sound, 10, 1) else playsound(user, fire_sound, 50, 1) in_chamber.on_hit(M) if (!in_chamber.nodamage) - user.apply_damage(in_chamber.damage*100, in_chamber.damage_type, "head", used_weapon = "Point blank shot in the mouth with \a [in_chamber]") + user.apply_damage(in_chamber.damage*2.5, in_chamber.damage_type, "head", used_weapon = "Point blank shot in the mouth with \a [in_chamber]") + user.death() else - user << "You feel dumb for trying this..." + user << "Ow..." + user.apply_effect(110,AGONY,0) del(in_chamber) mouthshoot = 0 return From eb014af61828abc1dd8e496882307c04dc53d6d1 Mon Sep 17 00:00:00 2001 From: MisterBook Date: Sun, 9 Jun 2013 14:11:58 -0500 Subject: [PATCH 11/18] Updates --- baystation12.dme | 1 - 1 file changed, 1 deletion(-) diff --git a/baystation12.dme b/baystation12.dme index 375cf098a5d..828007b0de8 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -1298,7 +1298,6 @@ #include "code\WorkInProgress\Cael_Aislinn\Supermatter\ZeroPointLaser.dm" #include "code\WorkInProgress\Chinsky\ashtray.dm" #include "code\WorkInProgress\Cib\MedicalSideEffects.dm" -#include "code\WorkInProgress\kilakk\responseteam.dm" #include "code\WorkInProgress\Mini\ATM.dm" #include "code\WorkInProgress\Mini\atmos_control.dm" #include "code\WorkInProgress\Ported\policetape.dm" From b51bc5e32219c3f200de939c599bd50dbc7d7cfc Mon Sep 17 00:00:00 2001 From: MisterBook Date: Sun, 9 Jun 2013 14:26:34 -0500 Subject: [PATCH 12/18] Response Team still isn't ticked on. Dunno if it's ready. Re-re-uncommented. --- code/modules/admin/admin_verbs.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index c8ff992b155..c36a0ab99d2 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -67,7 +67,7 @@ var/list/admin_verbs_admin = list( /client/proc/toggledebuglogs, /datum/admins/proc/show_skills, /client/proc/check_customitem_activity, - /client/proc/response_team + ///client/proc/response_team ) var/list/admin_verbs_ban = list( /client/proc/unban_panel, From af234f7f1de28e4419040f95152fa103550bcb78 Mon Sep 17 00:00:00 2001 From: NicholasDV Date: Sun, 9 Jun 2013 18:04:27 -0400 Subject: [PATCH 13/18] Removes a few typos from channel names The literal only two instance of gazette in the code. This should fix it entirely. fixes #3006 --- code/WorkInProgress/periodic_news.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/WorkInProgress/periodic_news.dm b/code/WorkInProgress/periodic_news.dm index 977603e35e0..8b8be52e2d5 100644 --- a/code/WorkInProgress/periodic_news.dm +++ b/code/WorkInProgress/periodic_news.dm @@ -52,14 +52,14 @@ cheesy_honkers author = "Assistant Editor Carl Ritz" - channel_name = "The Gibson Gazzette" + channel_name = "The Gibson Gazette" message = {"Do cheesy honkers increase risk of having a miscarriage? Several health administrations say so!"} round_time = 60 * 15 net_block author = "Assistant Editor Carl Ritz" - channel_name = "The Gibson Gazzette" + channel_name = "The Gibson Gazette" message = {"Several corporations banding together to block access to 'wetskrell.nt', site administrators claiming violation of net laws."} round_time = 60 * 50 From 0b20496f7df852f0c34e7697e7a32ea8e35dbc0a Mon Sep 17 00:00:00 2001 From: NicholasDV Date: Mon, 10 Jun 2013 00:12:28 -0400 Subject: [PATCH 14/18] Adds Uranium Capability to Circuit Imprinters Well, looking over the RUST circuits... They required uranium which we didn't even have implemented in the code to work with circuit imprinters. I considered simply changing them to use a different resource, but it honestly makes more sense to improve the current code to have it more versatile-- To this end, I've made circuit imprinters capable of using uranium. As a further note... closes #2757 --- code/modules/research/circuitprinter.dm | 11 +++++++++-- code/modules/research/rdconsole.dm | 14 ++++++++++++++ code/modules/research/research.dm | 2 +- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/code/modules/research/circuitprinter.dm b/code/modules/research/circuitprinter.dm index f6175335165..ccc6f932d48 100644 --- a/code/modules/research/circuitprinter.dm +++ b/code/modules/research/circuitprinter.dm @@ -12,6 +12,7 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis). var/g_amount = 0 var/gold_amount = 0 var/diamond_amount = 0 + var/uranium_amount = 0 var/max_material_amount = 75000.0 New() @@ -46,7 +47,7 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis). return proc/TotalMaterials() - return g_amount + gold_amount + diamond_amount + return g_amount + gold_amount + diamond_amount + uranium_amount attackby(var/obj/item/O as obj, var/mob/user as mob) if (shocked) @@ -85,19 +86,23 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis). if(diamond_amount >= 2000) var/obj/item/stack/sheet/mineral/diamond/G = new /obj/item/stack/sheet/mineral/diamond(src.loc) G.amount = round(diamond_amount / 2000) + if(uranium_amount >= 2000) + var/obj/item/stack/sheet/mineral/uranium/G = new /obj/item/stack/sheet/mineral/uranium(src.loc) + G.amount = round(uranium_amount / 2000) del(src) return 1 else user << "\red You can't load the [src.name] while it's opened." return 1 if (disabled) + user << "\The [name] appears to not be working!" return if (!linked_console) user << "\The [name] must be linked to an R&D console first!" return 1 if (O.is_open_container()) return 1 - if (!istype(O, /obj/item/stack/sheet/glass) && !istype(O, /obj/item/stack/sheet/mineral/gold) && !istype(O, /obj/item/stack/sheet/mineral/diamond)) + if (!istype(O, /obj/item/stack/sheet/glass) && !istype(O, /obj/item/stack/sheet/mineral/gold) && !istype(O, /obj/item/stack/sheet/mineral/diamond) && !istype(O, /obj/item/stack/sheet/mineral/uranium)) user << "\red You cannot insert this item into the [name]!" return 1 if (stat) @@ -128,6 +133,8 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis). gold_amount += amount * 2000 else if(istype(stack, /obj/item/stack/sheet/mineral/diamond)) diamond_amount += amount * 2000 + else if(istype(stack, /obj/item/stack/sheet/mineral/uranium)) + uranium_amount += amount * 2000 stack.use(amount) busy = 0 src.updateUsrDialog() diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index ab4d78570ba..5b50efc41c5 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -429,6 +429,8 @@ won't update every console in existence) but it's more of a hassle to do. Also, linked_imprinter.gold_amount = max(0, (linked_imprinter.gold_amount-being_built.materials[M])) if("$diamond") linked_imprinter.diamond_amount = max(0, (linked_imprinter.diamond_amount-being_built.materials[M])) + if("$uranium") + linked_imprinter.uranium_amount = max(0, (linked_imprinter.uranium_amount-being_built.materials[M])) else linked_imprinter.reagents.remove_reagent(M, being_built.materials[M]) var/obj/new_item = new being_built.build_path(src) @@ -500,6 +502,9 @@ won't update every console in existence) but it's more of a hassle to do. Also, if("diamond") type = /obj/item/stack/sheet/mineral/diamond res_amount = "diamond_amount" + if("uranium") + type = /obj/item/stack/sheet/mineral/uranium + res_amount = "uranium_amount" if(ispath(type) && hasvar(linked_imprinter, res_amount)) var/obj/item/stack/sheet/sheet = new type(linked_imprinter.loc) var/available_num_sheets = round(linked_imprinter.vars[res_amount]/sheet.perunit) @@ -851,6 +856,8 @@ won't update every console in existence) but it's more of a hassle to do. Also, if(D.materials[M] > linked_imprinter.gold_amount) check_materials = 0 if("$diamond") if(D.materials[M] > linked_imprinter.diamond_amount) check_materials = 0 + if("$uranium") + if(D.materials[M] > linked_imprinter.uranium_amount) check_materials = 0 else if (!linked_imprinter.reagents.has_reagent(M, D.materials[M])) check_materials = 0 if (check_materials) @@ -891,6 +898,13 @@ won't update every console in existence) but it's more of a hassle to do. Also, if(linked_imprinter.diamond_amount >= 2000) dat += "(1 Sheet) " if(linked_imprinter.diamond_amount >= 10000) dat += "(5 Sheets) " if(linked_imprinter.diamond_amount >= 2000) dat += "(Max Sheets)" + dat += "
" + //Uranium + dat += "* [linked_imprinter.uranium_amount] cm3 of Uranium || " + dat += "Eject: " + if(linked_imprinter.uranium_amount >= 2000) dat += "(1 Sheet) " + if(linked_imprinter.uranium_amount >= 10000) dat += "(5 Sheets) " + if(linked_imprinter.uranium_amount >= 2000) dat += "(Max Sheets)" user << browse("Research and Development Console
[dat]", "window=rdconsole;size=575x400") onclose(user, "rdconsole") diff --git a/code/modules/research/research.dm b/code/modules/research/research.dm index 137d0ed8565..40b534bf0eb 100644 --- a/code/modules/research/research.dm +++ b/code/modules/research/research.dm @@ -225,7 +225,7 @@ datum/tech/programming datum/tech/syndicate name = "Illegal Technologies Research" - desc = "The study of technologies that violate Nanotrassen regulations." + desc = "The study of technologies that violate standard Nanotrasen regulations." id = "syndicate" /* From 38b44b244112e7058931fea09f6726cf241b79d3 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Mon, 10 Jun 2013 14:56:47 -0700 Subject: [PATCH 15/18] Items for wizard den, mental focus added to spellbook. --- code/game/gamemodes/wizard/spellbook.dm | 9 ++++++++- maps/tgstation.2.1.0.0.1.dmm | 3 ++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm index f1ad3a10f8c..ff19ce77648 100644 --- a/code/game/gamemodes/wizard/spellbook.dm +++ b/code/game/gamemodes/wizard/spellbook.dm @@ -47,6 +47,8 @@ dat += "
" dat += "Staff of Change
" dat += "
" + dat += "Mental Focus
" + dat += "
" dat += "Six Soul Stone Shards and the spell Artificer
" dat += "
" dat += "Mastercrafted Armor Set
" @@ -84,7 +86,7 @@ uses-- /* */ - var/list/available_spells = list(magicmissile = "Magic Missile", fireball = "Fireball", disintegrate = "Disintegrate", disabletech = "Disable Tech", smoke = "Smoke", blind = "Blind", mindswap = "Mind Transfer", forcewall = "Forcewall", blink = "Blink", teleport = "Teleport", mutate = "Mutate", etherealjaunt = "Ethereal Jaunt", knock = "Knock", horseman = "Curse of the Horseman", summonguns = "Summon Guns", staffchange = "Staff of Change", soulstone = "Six Soul Stone Shards and the spell Artificer", armor = "Mastercrafted Armor Set", staffanimate = "Staff of Animation") + var/list/available_spells = list(magicmissile = "Magic Missile", fireball = "Fireball", disintegrate = "Disintegrate", disabletech = "Disable Tech", smoke = "Smoke", blind = "Blind", mindswap = "Mind Transfer", forcewall = "Forcewall", blink = "Blink", teleport = "Teleport", mutate = "Mutate", etherealjaunt = "Ethereal Jaunt", knock = "Knock", horseman = "Curse of the Horseman", summonguns = "Summon Guns", staffchange = "Staff of Change", mentalfocus = "Mental Focus", soulstone = "Six Soul Stone Shards and the spell Artificer", armor = "Mastercrafted Armor Set", staffanimate = "Staff of Animation") var/already_knows = 0 for(var/obj/effect/proc_holder/spell/aspell in H.spell_list) if(available_spells[href_list["spell_choice"]] == aspell.name) @@ -162,6 +164,11 @@ new /obj/item/weapon/gun/energy/staff(get_turf(H)) temp = "An artefact that spits bolts of coruscating energy which cause the target's very form to reshape itself" max_uses-- + if("mentalfocus") + feedback_add_details("wizard_spell_learned","MF") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells + new /obj/item/weapon/gun/energy/staff/focus(get_turf(H)) + temp = "An artefact that channels the will of the user into destructive bolts of force." + max_uses-- if("soulstone") feedback_add_details("wizard_spell_learned","SS") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells new /obj/item/weapon/storage/belt/soulstone/full(get_turf(H)) diff --git a/maps/tgstation.2.1.0.0.1.dmm b/maps/tgstation.2.1.0.0.1.dmm index ffd412c4cc5..964abdc4131 100644 --- a/maps/tgstation.2.1.0.0.1.dmm +++ b/maps/tgstation.2.1.0.0.1.dmm @@ -10033,6 +10033,7 @@ "dKW" = (/obj/structure/table/reinforced,/obj/machinery/computer/med_data/laptop,/turf/simulated/floor{dir = 1; icon_state = "whitegreen"},/area/medical/medbay) "dKX" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/camera{c_tag = "Medbay Foyer"; dir = 8; network = list("SS13"); pixel_x = 0; pixel_y = -22},/obj/structure/table/reinforced,/obj/item/weapon/folder/white,/obj/item/weapon/pen,/turf/simulated/floor{dir = 1; icon_state = "whitegreen"},/area/medical/medbay) "dKY" = (/obj/effect/landmark{name = "Response Team"; tag = "Response Team"},/turf/unsimulated/floor{tag = "icon-yellow (NORTHWEST)"; icon_state = "yellow"; dir = 9},/area/centcom/control) +"dKZ" = (/obj/structure/rack,/obj/item/clothing/under/psysuit,/obj/item/clothing/suit/wizrobe/psypurple,/obj/item/clothing/head/wizard/amp,/turf/unsimulated/floor{icon_state = "grimy"},/area/wizard_station) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -10528,7 +10529,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacPwcPzcPzcPzcPzcPzcPzcP aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacPwcPJcPJcPzcPzcPzcPKcPwcPLcPMcPNcPwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacPwcPzcPzcPzcPzcPOcPOcPwcPwcPPcPwcPwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacPwcPQcPQcPzcPRcPScPTcPwcPUcPPcPVcPwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacPwcPzcPzcPzcPRcPWcPXcPwcPYcPPcPZcPwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacPwcPzcPzcPzcPRcPWcPXcPwcPYdKZcPZcPwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacPwcPzcPzcPzcPzcPzcPwcPwcPwcPwcPwcPwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacPwcQacQbcQccQdcPzcQecQfcQgcQhcQicPwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacPwcQjcQkcQlcPzcPzcPzcQmcQncQocQpcPwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa From bc2db268cc7097e28a901836891ee7bb1cca04ef Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Mon, 10 Jun 2013 17:16:54 -0700 Subject: [PATCH 16/18] Vox oxygen toxicity, vox breath mask, nitrogen tank for spawning. --- .../objects/items/weapons/tanks/tank_types.dm | 25 ++++++++++++++++++ code/modules/clothing/masks/breath.dm | 24 ++++++++++++++++- code/modules/mob/living/carbon/human/life.dm | 7 +++++ icons/mob/mask.dmi | Bin 24554 -> 25308 bytes icons/obj/clothing/masks.dmi | Bin 11806 -> 12015 bytes 5 files changed, 55 insertions(+), 1 deletion(-) diff --git a/code/game/objects/items/weapons/tanks/tank_types.dm b/code/game/objects/items/weapons/tanks/tank_types.dm index 3d785619255..1c6c667a89c 100644 --- a/code/game/objects/items/weapons/tanks/tank_types.dm +++ b/code/game/objects/items/weapons/tanks/tank_types.dm @@ -162,3 +162,28 @@ name = "double emergency oxygen tank" icon_state = "emergency_double" volume = 10 + +/* + * Nitrogen + */ +/obj/item/weapon/tank/nitrogen + name = "nitrogen tank" + desc = "A tank of nitrogen." + icon_state = "oxygen_fr" + distribute_pressure = ONE_ATMOSPHERE*O2STANDARD + + +/obj/item/weapon/tank/nitrogen/New() + ..() + + src.air_contents.nitrogen = (3*ONE_ATMOSPHERE)*70/(R_IDEAL_GAS_EQUATION*T20C) + // + src.air_contents.update_values() + return + +/obj/item/weapon/tank/nitrogen/examine() + set src in usr + ..() + if(air_contents.nitrogen < 10) + usr << text("\red The meter on the [src.name] indicates you are almost out of air!") + playsound(usr, 'sound/effects/alert.ogg', 50, 1) \ No newline at end of file diff --git a/code/modules/clothing/masks/breath.dm b/code/modules/clothing/masks/breath.dm index 195a0be95b2..e8ba6c49137 100644 --- a/code/modules/clothing/masks/breath.dm +++ b/code/modules/clothing/masks/breath.dm @@ -35,4 +35,26 @@ name = "medical mask" icon_state = "medical" item_state = "medical" - permeability_coefficient = 0.01 + permeability_coefficient = 0.01 + +/obj/item/clothing/mask/breath/vox + desc = "A weirdly-shaped breath mask." + name = "vox breath mask" + icon_state = "voxmask" + item_state = "voxmask" + permeability_coefficient = 0.01 + + toggle() + set category = "Object" + set name = "Adjust mask" + set src in usr + + usr << "You can't really adjust this mask - it's moulded to your beak!" + +/obj/item/clothing/mask/breath/vox/mob_can_equip(M as mob, slot) + var/mob/living/carbon/human/V = M + if(V.dna.mutantrace != "vox") + V << "This clearly isn't designed for your species!" + return 0 + + return ..() diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index be07fcba530..9909d523c08 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -394,6 +394,7 @@ var/oxygen_used = 0 var/nitrogen_used = 0 var/breath_pressure = (breath.total_moles()*R_IDEAL_GAS_EQUATION*breath.temperature)/BREATH_VOLUME + var/safe_oxygen_max = 1 // For vox. //Partial pressure of the O2 in our breath var/O2_pp = (breath.oxygen/breath.total_moles())*breath_pressure @@ -436,6 +437,12 @@ adjustOxyLoss(HUMAN_MAX_OXYLOSS) failed_last_breath = 1 oxygen_alert = max(oxygen_alert, 1) + + if(O2_pp > safe_oxygen_max) //Oxygen is toxic to vox. + var/ratio = (breath.oxygen/safe_oxygen_max) * 10 + adjustToxLoss(Clamp(ratio, MIN_PLASMA_DAMAGE, MAX_PLASMA_DAMAGE)) + toxins_alert = max(toxins_alert, 1) + else // We're in safe limits failed_last_breath = 0 adjustOxyLoss(-5) diff --git a/icons/mob/mask.dmi b/icons/mob/mask.dmi index 4b002767f334a37764981bf10ac08221d2f9eec6..4f236bc2db684a909a47578a27ab8faa29510d2a 100644 GIT binary patch delta 6311 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 delta 5630 zcmbVQc{tSV*Z(3*MU;@OrlRGc$G(OkB3p`(btwBZWEW<>L!ll^*{K+^FOhXDV@8yH z%Qo2)5n}9P9q)IZ-}_$IdtL8;??3l7*O_zAeeQEU=W{;yjDKZVBr&|<1MS#Y000np z)t?CfjHd!0JoM3W^nUE+`qanO!yNzu-hWK`>^>&RuHL(C&bBPapHvfJ6U=YSu2e~~ zlRR_7HTH&P(o8La^!%M7Dn2$m;yt5^+N*4lz555jv?`FNJ{cX@)Mtr^v{pgyr(bC> z{r1w@VN6!arRvoTPX3k_7#kT;7!>5a^X5uNxY_K_>xLZwPxU3fcfH^Je#+yOI8gUB zf<(fc-|G6El0}U6omVV)#5F!FRJN$=UG<5n{v_At zVzhbF?-%K`mP9t!VASmsVHr-2m(YEFJtz8EQSVAzS)>a+Gj2Yx)i(0~Dd5C@#Y&1L z@1r8OgU#5ULf>WAS>v-5~<)4>J9sa0eu8Q+30?ua{j@Sv$JTLMau5X=Y z9lqNBVtu<~@rd7nP)qCk&cfG_N;%P@?+382{z1zkiTg}S`#y`M_$DFLbldA?jM<>E0+iiA}c_v-gtCv-emS}z+nvg|^nunn zZ$10gmjMvoH9evLWbKIH_D}Ue0+#vfFCYxl}J)&(SewU~n*7 zMkl`Tecc1O=SyiF1^T{oF8#?ftAB}!rG*_SQOZAUw55oSu0{wTUNc$K(hLhmTFXx! zeSkbwDbG!d%#_BeQ6|3za|%}RIjEc@&^g{*RMmedUR`Ze85|?{9+*t1{cIUTO$D!# ziKO<39AW$IZ^I)68FSmF9{bm#4%Oy~N^{`{g2wRu)5O3++?2!=ewA#3*6pAq-99m{`n{&tIX1ANPusM~x=LUk$O|P{wM2zw4X&V1Ic#lkV9_kx(v)nsq*c(EUO z`Bb^E#)5!sD4Vc7o3a9X&{`ahx{`Q?bH`*1k;Z&jek17cy3m<4jjZ)fLE3c35xIWv z^Jry(_b`g!bSEPFikvGwh(UKZxBi!rX_HVva&vQwR4x%7val$*_Mp9u85CZo=4C9g zj>LR=aua}gA5({@sPieWWW1ftSrD*GMcT5k0AAnT@6V+y?faDo;IccaapW<7-3>z@53@M&Hl<+$FBTbtFbtWZx?`L2$+MJ z3mc=)ONUErkXMY-i#dt-(pF}I1q+M%Yz>m9&iqMiHbHPb0f#H)oIJvUspIq3;OXtFp&TWps_#5n9<7?&c`@bI*p_nliBc9R-S4?OjZ%=@bxfLx4Q4!U zK`NQ1I7=LK#b$fY_bklWE68xOArhjMN{>>g#L2^L{hlMaKlWF+h`T?6_GJ}3%IH6H zBhpV9Cx;_PN)Q9u4M12c!1%J*dwE`V(@OKXJB#?NZ8>FEt4XC0l=hbA9LUh<|M2r& zsJno;lxx3;^Ul;MNpJIB*+i3Mw<#hzdAye$hHZneRyuGLr2N~d@zz?vIDy)EwJVGH z-R24&;YG)kk=m|Sk)YbCI@eE)5TYi7HwgeLg&si zDZ2E*P&FGFdoi^cf+Q-uAXTGL-_+D}?m)Gbw0=&V5jxT9HLH*2k5n0FHgGjMh<6o4 zZ{9duG$&m;_-syhrR`J9(Kv9(mn2jIwVBQO-eu^Xvcn8oZ=hnuYVByk3JVLPvN<}N za9Y4I0Qhw3Y6uVyvpO4ZWFrVJyjx&ea_W{|q5di*{MH#SVGXEnXIbR3N)iY*HEE*UMNoRb>xA3v*WJmqOJcyA-+`VGVn5WR5<7oZnzB}p;0YCibnT$dE3@_U4&ES z_}>0&p>M)j+6!O7IVar{*~BFm=>kJDS>XI0Mj zU36k(XcXgfriI4{zN=f9ot_&s$hfc-q53d0KH{B;0*A1I8O3Abw?0}SxOTetqeMGS z-g+FPTcGxIth~rwxB}~{hh*tXd-nEbU}XCBn{(pgmSC21M~qU?3fP)#@o8n6(!_+` z%qmNhP=h-&N~rYd_(utd>RLXm)P`JidJ}}b{if=^ZH(4?Or$JsgxyApTp!{CxDp(s z`Ij5G_?mGdhr!=2D?h8TfFm|vX7{A3FOSYHZzGDQWAXS zI59im?gt&^=3M1wXUNtAoc9znFW%``YZyIL)x9YfB@h&m-80dMjJaX3O!M`ic80O; z<$I0zUJ@-KJqS5*?*4mKNfssiT>dNIe%d*8ca_9n9|EfEeevJ~>$$0tS6 zBYeQ01cNJv=NKQJ8~u?Oj-R~C%;CS?c?gbr*4*dtXjry7Tsg>}nrLtC7EpFCrlalW zn8!eU>&eZPjnW`_8b$4>?in>8Gg*vk=FmIfXb$8JYhm2?*(xdt`tlmyhzDgHcJ%MloQq`BZtB4CQ3-P z{EgAtfeLwXXjSSPzEU9bv|a`q-8ne`Z3;ByZIok^KKSxT>MCy}bKSleJ8D(4by^!j zeV#vNBgAj$PT;t(~xRM+rI|5#qL`uyKJZ z3(Xv%nBT7ErMOn&P&fG2aiy!5Byyl?;@3r1Am(h{)?Q?vgc3fu;ytfOnTMW zijldt3>E+y-7zKbbK!LwR%SM+m1o-)6Q=hv2q8>EetVU+NYqeF>jm<_(2y&YnSo2) ztV|3%3lPd4_nw#WnKPifk}a*|GCy|n8$WcpTUE&gFdXYtOo(_Wol^U+mmr-3FD17}of@x<{U_T0#!v?&J0b z@p!d9-)~Q-C;mpa8h$IO^UXYtr6KO{4L@zh4L)0_dwZNaknj&X0NnqkdH~iUn$OZi z7-1^g1|w4Q5OC>0NQDUElr5gvs=vzsa51m^Vw@05`~%@FbEc)RGB~6XY2u=G^qrZ# zH{r%^A06{*;$kuooL#!h!s5R8Mlt~3s*v%XrF^P1Rt5byh_H$viW1co*3=36x$&A` zJ;2@mo4^p69rPQX3X=St3jjYN;pjR|<9YUsqM4_U?{(L*%V1Xx$d3V0*OuzFJ^Z)c zBBImNYqUKE05%q=%yREcE6{X)OYV6Z!~vqZI&Y~<0n)lVOn{apePmE~;QlS8Gf%T1 zF3(O1Kh8AF@FH&!$#T=Tq9tW|-9s4CCZP`q=Vogq$cORS{kuISTw(B6HjR*E8Mf#9 zSF*$#+Fgp5v^o~wYsd=DesYj@jca$XBn#XX14^vRev07^+^9?d_D`n>08@TcmckwR z^}Wye0fn@q@yW@OmKN=SzCOvUee~C_UxP-+#s;3%MFo4&f)|--lp=HF8n;n))#s6F zudgRIdLwyrFz0;^w?e8}0Xv)z{J_)KJtM|#DwhYqm6Z4;nS$o;a)yRHd`KP^zE$ZZ zCEJAfI_Bbg2UVKCnE;sO2Y~}?*9%MmIdA55c9^Um?+*%45q+o-8v)*^?X;Lu@ z1(g2N;Y3bNK|;cSGXvblX1NlNU%F?TPH#mK*E^tnrcy$3@|MG-35QiPZuzZ*%7QE+ zpnpM`X<^>Lf&A8ewff?LZa*ivVG+9TivHec(&|-TcW|v^N)c{NEu865ucPitagS7m z-`pRmGPEUA$HxB|5m0K-6TXTU)GfS*bJo+-3w1ZUmY9%`{~k!Zq~=saCWmdu0>3&rMm4Bww!lQrebc33c(m|13YAVcE!@#5xB0AZ zkiVP}-v=o?zc#uOnizGBAL|#%52LCd)dyX+Li7Ho9%oa5o%UUDqouUM^LPjVz>UUBDq#iFi1Y~`!n*G&e1U@S{Y9e0&FxZC6(w1qj0`eM-t{AqdxYpi1D=)badMveo0HAlWf5BZQ$4&(?sVB(om^GS6P9J+W+ca_W#kny@o7caiYN$ z3q@t1-J!paN~1acz1h#~5Ih>Xt%`lICC9aeVQq>5&PfHYYCbv`&_L|I zR$~p-0iw=LJ`8%zm4+sd=7F24z|M0ZfH|1U(Wnm1?=vMcH{$;htvAJlg{yF28xCQd z(rl|5391X*qG(P4i~o=DDjUR)4hXZPkXO)~4Pp|!Or0ANX{d6ZbCbPXvht$%Ij~-e z=J)tuxn*bmZ-`DDmfN9sfUd}y0*m@Ak7DUKS+77-ZBXW!swy#vqckj&qc(I6FF50& z&@$y71+KI&-s%$-6{WYMNWsjkpNv;v;+$Dm&(1Ei4ny6zs8~C3$N2WHiixptT+Z;^ zT|qDA|K3fSICnH2Kg6%DTWCf6E?Zsc)<)h#?ieDHMH1mv(pi<(_~5eGZ0-x-gIp6F zZYZHCGzuqXV(+5)w>>@Jv1ocEIID8Zbw#}Q_-BtNuH8Gex@%1TpoJlsa^f6WXwFxR7x1N!C@Jw26bbbX?APdZgr1J6Lm2mlME4-FqdE?asB zsWgcTHT?sy0oVw(5Vp&A85w}a%YVXeKa_%wc`5ERg-t&VFaUtKCbU(Hx85!!-BA>1 znejBSvRWFG4ML$lLNy7wy9AMx{pX#r?iO%O$LYK9$rlmvcSOp!9iaE3$eCAz2rHeb zhmInyvzvucG{&WcwFzXv4T$@BqDT`T6lrZG(40$&Wm3Mqs0aIh6as%O23{Vy%KAdb z40HxW3*2`f4Seq}yogvTomN2G#66%5c0^$omLT4W^Z7Z`>$A8~@z(g^n>BC8zn~~Y z=~2kjYGe2nV1!F@OxMu6P88y#*1mQcrO3`(Em*!^PjxzVA#t27g@)NS|cW6!hYl@xWh;29RPSE7hkHv{ok}EvmSiY7mn9? zB`TX(_-%CWv!Gzz`0~0=PlDcKJDNcmiU2)^&W>FEN}=eRs?F;s;r7@3VfWa`K9h)1 zy^0y&?!6k~@bp_8mzHme&s*J{23X4R=g?g@nlGb8d7o)sc>O`#A`51>di?dEt>4SN zkzHI^tDYgdggxSj|Fqw+okn^%flD$t{I%L0IfLITOHk#)ia#cJ62UGgg+~pk#AouK zq<<*~%*mU*cz(V4_(}2C8-_^AQ7@Tj1{DhSif}sYHDx=pyCRI>Zz1_&j_o&M>3Q_r zuopZqAD{XlBiuP5FL{uQDS+%<7pHN<-GvIR_nY4|X5S1pV6{CidL1+?<($bJ?8-an(Jvk^$;Z=o~HdMmiN* zMwtp?iGpyw)#JI9eh*Xhe}<$i>yhc9BftKkM zBch`8f2MT}tse;T@sSJ-4KazmjA#=BFL;H7!c2>;A6yV+)ZrB(!AnD%qL8>`A6L)EGmlh zI><`o(2$LTUF#RUoc4y#pKs=V{#0!62)-h`sv1JUm^8ll zeWq)O9{G9`@H%sR_Q;XAwW{Tm;5(!hP^m+wIJ3~)OoF?tpr4vj0+Wm`d36(Egb#^8+00G(%2T*=c^StZ>WAKR;v{RN5e%p*#Ki6EWBDM*9P% zzhC{ylaCG)_|V@kJAwUeEJx*=H>;}`>jfjXsbP;EJ>nD>H(}4<%gH~og395ZsP7E(b&U@IpqK>Xv!j~MAvetv#k2et4cv;D&7!1r@8@b33|E>2Io zwWiUQ&E6deS#_j5LUXE6zBTbDOTIa)%;$5sM)Q1ek!V?In1=?o5`8eP>_PVEw#>ue1Y#Pc8 zsho-~V(20A@P+{E>X(vr8d_7MD~p3VJ$f{MbpCC(U^;6M+B{T{e5y+h%>Uk1wSo9S zE_-PBa`p(SXprK(V}c2CCm(M;SA*CHn@}>9XGnQjSZ|~I`m}Dx!Bu)Td*obwjr$~k ze&9^+nYU`+IwOr>lI&YhA)3iy3?Gi1(!{=)aKHumw`ZGs9m&bGK)uAqT(CDfSc zyRzc7|8&jF5KRn>7n!UNzxMjk*GKO(TX!RDZ&<;43%w<$T-@kvI37u9dbE)b00>0E z-g7)wGwI`p0umR{MzGu+pnAyrH~NyQ{tG8onG=s-5%WP#Eu~pb7mj;i&!mW3!0O4c zem;77O}qI}$PIgZJPqjjZWt-&7uF#`!((|jw)G^M5dy5B1|R)xm^5~W0Zhy4QMQ&! zBI*Euk1?iEv9REZj)`e+{=%EaC-mCLYV6x%P$qyrEB7RM$n^TEJ?71{6y#?>l|UC{ z(iC^=c~!+#$ng{=AgsIl-q|lIM9F>h>rG~m%V^O;?i+kQjf3en-*Zxo*Kkz8UB42e zhC@$GK$NSfXbBOfe*r(-stUs|z1S6hrNg><=+D!50SX43jI0ghB=!8;H-6A?SoVF< zV-j~t>sJ~)sr33rGXG=u@fslj_$6>afUK;nh{(v6!K^!h1jJn53JPcG66#4GIb_LuMFJ1kb<5(^ZMjEx<* z0is~Yl`B`ieEEWGF;{VL_?~Py!=C^$!g=0Q#2%ma!p|^4PTUzM?c~E2D6FHgxL(Zd zVlwSE+cIGkF&XBQi3--iU90A7B6 zRV^)YA+siOAX(C$fs$1Q$!G8xC^3b}+9QOZ17Qbm-@bLUB0iMZaAs{Z#pLRNN7$98 znFIh-3Oj(5^BnoS>E?EkZOc{-K3DBvvllQo)*@$?c2u3O^W?o%Aw?iyXa9=rv>biW z@KHJ7Oom^eBa@MahQ@m}E4+QR`GY<77Q|(xBPmKnPmhK{*fb_62nvix@`Q$lCX2m_ z+87WHCA;nEDY-RM8+@|2V!1k)b-96q^cr1h`tPZm4`r(#uja%9Dl>6Bo;<0th3D)VRqSD?!T14w99{uyul4oc z*|EdFeJQ+hjH-8VnrnEPAcxS_rUc(%)QpT1H&%%2P9!qxKO~_zQF~@aMiH&8s*el} zdzJPuG*;zT$HvAYqNCdmoY7a>M1-LAUfWNG8w^Fgwv1U7eJc8^g&E~f z-Q3*TDbYoPn@WJ>+vMbKz+Pibwd21G?Bs(C+DK@lAC7-0gWdLK$Tx#$57{LDcu8w&_St=PUU>TlUH1t|w)L<5 z#pc5Se~%Lppn1l`(4ps()=i(A8Js@w^t(VqC*s>d;hjTDjBK4B6Z1Bd*!ekmk{QSL5S2;p%H8Bs-^KY>9ICGE8Um^hEIm86e`l zO4VMW=>A~Po3X~2AWg!6UWIxtZln#Vzp|};)p~G^)k}gFc1>6aL$Jg6Ann24-Frsx zR)(YrLK`bb`!^c4b1+$@+cKSNaC1!Bfc+cmo*I^|vo~+vsG71L+~2=W$swoKS}2k} zKv1#`haqJXTXpG-2?6+5vNr4d!f7{8;6Zv-qk=|-VFs(25;(e@{dozpC_jGw5p1VA z`pL>N;&5lbSMo0_y_eC~@^ufn&m(J-?`~)&q^HN;(EJ#I@IxiNUEzgiI^Np2zmgxJ z5|EZb(#-=?RD!}cUd2Lz`SOv+Qj*G?+dHVnJHk)Pa%anMhnw!n+B5)2_tJ;J8tR7g z91#UHy5}Z_ZSkT=3gSmXiYBSe%4;!JDHxNZNBN_DSckZYa*h{X#d!abe9HFd&;DD? z^A6`@wBz)%2S1Z&Kh4?U363VK85_FepKs!S-dRBuj$LqJCgVBKp%4|vLEo~e{3A%W z%6>!(uTXv5s$SbGypy$^-;GWAVEx1N*w=msXR|L*Tu649Bm`cY1WvNN zx^%SZA=HYbQL4W~|D*N)C4c{|`wj}~)MU-;tJ5{FKXsW-{<6jKG#Sq>ZX^QKWhJhg zVp3)}fJ^nXnNEBDpRRre;g~ehrzh35jrtRk8JUHH-X)7 zM*`P*bM^RAtbIq+l_)l*U$_|A16TpW-No0A+)eflt)Dcl8meB!PtTcdP#hw5qKA&T zChX9Z2gy?IzVW3x4}t97zVC==^|+`u_h=1nA8#1HJ@d>Tzc~vuwqwZqRry$xe7YGW z4%`|Oi@vWsMuSITcbKFh{!V5slPcUd@%zqBg(nR^E@oRZY*Ac5>no`ulg_zYtW=to zGDd4pf##DR9Nj*9C>dAPjqV3JI@N2VZsF%~mwQq0X>n>VsaL6yAt2c5KtgubXiY_Is zg=_)Cdr2crn$Y>RgCWHxB|o2nb1DT(Y(}B2t;5R2dDQfZr1S351HXyM-yi1=)8)O& zP#638P@tV-tTd*{*?hb&8$!+KT@jV1@i;nBc_Uc*QVZHA~ znHKC_kcd_#JrU83LAUOgls1DyYGiVs#X(;J^%Rku0?0y%q1J6`V z`7$^?zyJOA*;f)354aZqII&nKjR&l)t!3Ak9Y)3*s z3dQC#M!F;S&t~=Z2(}avv_Q7O@r;{SWvxz{OiLWAY!C&DR7B&nj0?>QBhY?9F3H2+y)tLoz;$0A`v-P7AEYBR{GZinz%_`1gf;cST7 z-}gA|=8m85e#;FY!Dqtb(%KANk4`{wHid9(FTW5rFWg1?IzBgD-}N`6CDKX1T*34B zouwC{R|a?u#TK^vF?(6GjYqq0v=r{}%tN3*)6%Q5JmDWt1z8_2TrcHP@dwoE!SyWDWt}xnnx3o^JXw)uB9DlT?fCnS zc7s`&y%6Ux^7)~n_Ub(#LTE8&52wG0xRY-=Xa~7;iV$=#CUTwe%_RYaGw zAvgWUlhQZ1qqyaFA21G)M|1n>!8WGOqr0XH4^StI;Y$8nY1xEiMz2sx z5jHje9!rku8<&gvg0WBDgph2=A zPL-X#wwh#(D^~)i%B|(c3eHbfP`EU}WBH6VPpx@wH=L3!>JkNbzZ*hbL$EcOhI4On zG+3Sv!8snLUx7S@sjMa4bX$>L-n@-XxTo+poB+Ny%YwiosP0hv1eVs{yN3g~!zkK@ z3ek_%U{;uneyy8ycVn3e0i$v&in6jY006_y$tp({V1A(^8hpb?MKtgIz(h)`s(HVE zXqvY)m$Kt*y_GOl#l3H`Qp8QWaA<#0fch${P{8_V3;&wLd5&As}63i5Kc6Pbfln9WZZ%V3} zB;@%ma`5p5Ze{)HyZg-{+|Ox7yH3jwsLJJj74on5n_&lI%HwnA(TJvu^R<3*^#J0p zi|+X#7gt6$Lo@3y;f<_2h1mXdMefD9+CnpQ#;%9y+=LoZUJ2+s-e7p3I-dDwQsSDD zsX1ZS-;k0HgQ=KW#+|XW3yY^;sXf%H!ytLvTKK=IDcTRbIPh~28>eH+x7TjN$yY-= zKiAh7dC*&9`d;Wn#Z1x>0uc>JPK#{ z6cf*HuUD3ChR%iP zF+fBmg0T775d^&PA`?YKcc(%d;gtl-JaS@-X1x-AP9j};SUTkNTy)uKk8O0~$>O#> z$L-gDjhitXu?J(x5|*OC{6=IjAji(PO6lq838$pId;50ay0Vh)Gr}Ig z;Kgh|H0nW&1XNT|nYzZjr}ROb&B~cnQB9M?DgiX}50Q0sa-*Xaj$5OnqY-gn6v3Ns z3pAtV`l$7vpaGyJt&wdaRU_gJ_%rWz_!>~@`NPQRg~KZ4g7Vz4e`472GvM^BfU@_V z>tV~a=BiE%C?MX2&K!gu^jp&!uqIV?$3k7b=K}AUVnzDXqiJ*WwAOo$WEDx9%^v$L zw3A4!&uGf{l1-YtMo)j#d?)8I7w*jEHpr`$)&vK1pB)QVR7h}VR(tXi49O`I-^TgdDVh&N8`nfJ+J@*IMBMizcV^s-wyr(L)9kQ;7jaH7;2-s`nvt=1gP_ zhwkh3y;ST9-3&s;t5sx0zB5(n%0kP;05V(n@Y+rjHEeEzF^@;NrRMA2t4e#ZPin*( z>u|vQN;qhUqhCod$9{jE=R%B9UJ2iL`3v7t*GMf(jOXh;a5m7Sg1mloRDM523D4hj z!6^5z97Wluu2N*%Iy1DX9vBZlCe4}(h05khzHB94hab-t(v_Nguz@YSD%^iR> z^q?UuX*vD$FUQXIEb&k&*~@ggc}KcHT84`RNW$z%-oTG^&m&=W>tS9MJi#=^$;lH` zd+givEjZGjBd`(J5o@9+8S1c`sMBJPkC<=t@%etj=^^bS$ZT=-Wt-g zbgci=z3*}_OBNa9#WOiTRb*f@?EwwAOlZ}B@R2Vh&DFsy8v4F<=@XJiJIx%(9M4M~ z{VSrYvAt*S>|NaW49liN^wW#>rv@y<(xOv`zWsop%A7TAs!CO)_VI`83= z@`a7TdtMinJWw?Z5{7h%@P}_}-P^XgM)QYk#|a#gv}SV`mE#{p-oOZYEFhK-#yS>3i1Zu{1=mzIbQ4Gum#?1&^K9*fjqQY*?CSO<{O?CNHCdUVTdLK z;i0JFxZchDygUf-KvQ#QcsS??i{L>1T|p)L1S|U3Ne+M3CIslyM; ziomF;qg=Slv>Qh-=!tJlSWL^~|KyQ%Y!cLa5daLzdojsX{@b_J)m1?7WGF`?8pkMP z3;-}9A}-$UI^M_*3%x#)OWvfN*@0$r5l+!lO6`CVqLuZ zCO!gLiQFA)lp_>X~#DW>PVKL8TOtK{->Jz;0mpnI6zR-N>j9t4684i2*0_MRz=iRo)Cs%FCaI|7bH zW<#h(9*QuL1D9NYKCjadrp1y=#o)DJw4*UHGXiuVoN*dg?>YB1I00 zU~FtGfPB#w_Nz6Nti(t#o0GSrskOyM=#VZH0EA5HLgMjav=kF=L&h878;VB)7WLTn zIi@ok>Nz28I=swqMF5>|4tOhy^-fEzyTvX1!k6lHiLJAh0s3w`ot&ZOmk?^Fz}*NE z=0b+g+&4qQd+j=N4%2A?+`*QCfx*;VqpvzKw%$uv^Wno+$V$4wrUq6Ati8!;s{Co- zY<))nkkQ%O9ScHYzX}b{K_YEzZEu^KbMgxaxNgnJmhv^LbBc)Qj*BEuqnRY=E{1L; z?<>bL;nnC4Z`Fq=rnZV$bY6==WRoB(@08>`cCWWnE?v4YikJrBQvCyw&yN&is-s7C z7L-3m;?iW7Fg-pOpo+IEWi+rojenk#L9?x~IAl<;3$nFy`Ca`w#%@NW0kd1jZwP&>OrsJBXdTa^;plcY)+cPKG?TlM~SYUvb8{mg}CZ+EFN%qnMmD@{om_}j7Y{oDum#Q#5y`dTvPqcFr zz$gnRHty`W7zu)ew+6a!vOZ&qy=znXj8)bR2AG%Hn3pD-mjYhUKzpxk|A2D^w)Hr8 zO~$IygAI_viio+Zk=agSJ(96+slQX43U8d41CM4Mf^`u3flm zvkg?CZlSH%(!jA~xiYFw0_rLrA@~U3Xpx}(SZVBt85J>Au0JoOmuYyg=nW{r!*3TPuQ4?ecFi_ zKUMy-cAg%9A8{`{+Q4blzgDhmYtnoOB>o6_3zV=myTAT44f$U6QP1K!Qoiyr+-b2c z+1+`XZ3NkGRnVh$_ilD>E-WA*AR;0H0Ms>rfO0gsWmlZ~%kIVsX{;X|u+xhrin8Uo zb#ZKixLSsK_d55-DOikg`?3}Q&$O_(xclei1Au&dN7{U*!S&LlvwuUtr@RTK0-Vh$ zGd^HNknudu8c*#tu$K}E`5uRPv%V1RP2&vFVQ6s?ArW|4Vq0dEIb@VcGGSER*7ic| zlexsxon$)H_P53Qk){!7b5f@jbHo64c$jOs9P!*ffa1N0RPXcU)6{+|7%?$7s3d75 zOziAMU*I4^&j@*YT$|oiLFOk*Et@&bU!e?l*YZ&d$GeLbb3Nf^9rYB&{B|5Aa&qSB zCp=3-nVh946(M%bemcthwd5N!%ocldM_u}}?o{AT_F|wOQa`$qCi)ipFa7vq9Ih=O zH9F8j{1+|VRQ8Wx5zm(#f|0dxxoyt?m2u0v8v?8`iCBsG9D}8(0ocA-09!R?re$yF zE0gp9Gh}pPBKi)pzn(}yj*hy92YPsE<4510U%{WP%b^;Hmpa!ui2h0)?|k$i%9J40 z^%L@2-?>e;CH-jkRW@3`F&=R*`+|aaqIi@>Nqe!t-QKS28ScTM6})bXMF7o zl6wE;xElNx=_^!cdAJ4v>kSU*-&b|}s?<3{ynPvp(>G~#gZJE_1cm8Ne#u0Ds;a8) zmH;UjcMx;T{A&3}(h@ZHfE5kOVnYz7wnxiyX!x+e=nPZa{WM zskSMy@_C$noL!XGoaYCy!R>di8v8JHvpl(XLm^oD{BX`gP?0T(3vjMk%_s^~G@*NQ zr+=Hz@6B6n!-PF{mj{5trpGWo<9Ii(O0iZ!LYYWsGKoDn-=Sc3SJusxI3L!W$Y>fV zIaKdPj*7>I=)@~{%bgwV4+^LQf6aom zu_R2cd<6dI5`w=1bDF)(yY^bC4~$j{-gT>Y{Q95;+F$TKfLsi3OP1gC?LDDldQH#G z;etQ$4L&E9WF|k};w1odOc6ShD>eF%y!`xf9i|!6X zGcOI{HYPCAx(S-a7ore79dyC5Iw$U>S^weYniecK4wbYrvv7?~3Nl)vBsax_o3lf; zrJ@^q++8kg!rH8iz<6dgmjtvcAovC-7^hxpgqtIp*Dw=vP$O}sB41x1xYAC{x`2-4w5=5Y-k+)M29P4|lm$E!Z! z+QEqK>k<=bou%<}p@{XmF9n8zmIT~jHal6={bMh7HVgRj!r!Az=df{131B_>MwEh2 zgSgz)5>H1XMUM!IS0_Y(WLYH|B&h1b8 zj+A;ZCUFBg#WdS|)2uoZ%^5|J4Oz=a^i4HdwId*u&w?GPQaoAIbo3QFUFe!8!3|sP zymvHn^NSmSiUgc_w@h(xDk`S0{gdM|^6~MhMo1V6H>4e&yaDy$K{`6W2%V3?KHhyh ztyI1Fb$y$^XcCOwkysepEV+qEc1`{34;8|Sl$ndEgGm@OA3?kF?e74;KbUXudH`%p zT;~w?@=p~u{QLWd5-4LmliMziDw&@CZkFj5>xqf}pgbsAqYWUydlOXJ2H4(~#eq6E z{Ga=d7mK+1SZ%BRb^P@oBRfBYTn;Tx^UqHK9u(<-XRkDM1h(!%-W#K4u6F-xDK8&( zr2cxMJQ=v~OS1r+kTSU%b;$N0HwW=exGMYq`25m*m?Aj+uB29n*Pjf1W42@&S04dxBjaT&QjM`}>lxLqt1}gq z4jEFNb&i4|{uwzKkMJ_IBR%4nMyK&6&>Z1U_H^o9u&VD#$l1n&`{uzxzF7@hLV)?n zIBT_uy$ROaYB2j-ju=>oc9&~jL0cWbW+)L1Wj#;7D80gGabcNgm3^|KO=Q$DU;EH` zaeBm>74cMhurE?w*Xa5{g&Z!z^oSL)uo$1+)I&aEO*FOX6ZQM|OCsRYr%xtLS(gQ3 zUP{6@ESI2%=NFLVqf-b3a5FRQlTxlm9+2%DJc7UbR}Gnnjb0@Ye440>tAq$HZlia_ zKF0e06qV5iQ@Yeq%@5~$7QE`rTJJO@+XQ}iAt#o4Xn5dd5g zcN@K!;8Na1n2LHn=*V)|kdW4QITe3#o;CJtq^gAIYN{DoFwJ^_|1%yWG@`eo!E@++Kx>KsIpnEn3l^NPb)~9u$+V z^TeAA7x(Ep{B0+T)rie6(%ax`(lCFn3SONv@`v`6t->$G#vT2r{Babw!A`f-eVJiq z1+eO>a)MIIMlTQCvdfJCiz8MQ+(dY548sSgjB)}~4{mk)zj3X$H~#81msVD!AUCU6w6Z#Mb1?6P${f|s=9+l+$eu*r+L*v)8bZqU>C>mHV*<^$4rd9` zZy+kjF}~a^5pxzOK~5tYghM2g%k zY0hpcTeHSM%dR@>cvStq-*-J^B}qFWHBeQ37j{^wJS3}4hQ#N7vQawEGaBIta26m6 z7lr}G)vWa4gdJj?s)Upi54J@ON>7*YSB?<*s4)2z9eyiJ;-tI;y2bPEbOs{N`Rq+G z2X&7DEfb2ElZ_&w%+Ee9LC#WC6ZePW^~U6+6Ptmr#rRu*w&>T{LT2IOnK67IC2aDg z&Y&^f9stCjKPqJr15*R%2WI$IH2N4ybuoeX#iM)-86F;flz-;GxadrvvRP_*E+-(s zQ?E~JG`=Q0#M1Sv`-e2B_x>&yI+T0ATLV_h3!wLM0PT0v&vM*}QJJ+jmv zF()Q2B1)f>InZR3Pi8(=zt}$Z!FQB^?7BQubD`@>u z5NT^;srVvhqo@7?F|jtx3pf*Lfh4D6hkkSB-P6>hi?Z&A;tif}nqAhe>5N^ZEj@P+ zsVJUn-t1&}f0j=Is(rI*Dh)AUBxe=&Jg&t6x~eIIg*7*l+}@-(*-b&QL*1w{7$D8h z);W|9IUp`NtIj%?)o`=2h)QXQF)g6&d&lqh@t?c=M2dtUObQ2XACuZK0zTK^|1TJm ce;H3uJQ~3eHmvy)EMy1nt81$jshS7^PybU{I>5{gRiC3FHJy?z#uE{cfsj?{qCq=WPl zssZUmT0-&;|Ml)&@80+BeRr*#laqaR_MVwNd-lw4CdS}_1`Q=UB>(_4TAJ#Q0006$ zLI5}!_+{bw0ae*kc%d)R0&+W1VVo zzjy6J@T(7#+M6ATFSjK1azdgKRmty#{}V@&bM?IS+08}U<8R9CN9AJr%&%z_jdqXl zk62%iO{tKUWmJkkGk;yCe9czyi`Al*`776ltkaz^mg3&Ln6>o)!m^nzg4?hw+@Zbi z?)yBSAD-#r9Phqmy_Nwa^UoJ))R?cEjJb45%^^&b~vf=CyX# zh83>j&ub}2p<(}bG=X^sB8*#iF~cHefRwxut$x#8S0l2TTru!&ez{Y_@B{az3SDzP zhCcj#h~(QlbZ*HM5-EJY@T}B{P40V+J)c(TD^34?l8^ec-E`9$IeQ_5P+)&$x58jW z=sf`N0$S>-Mt+%FS%D_Z6X!(COJ1^wx8Z(q>=O#}*LC9e7)2A& z+kVr?=2$m0wEdK>ZYyq}Cme_P1z1-4#pKm{ud>sx;0Y!J zvLaNQ?S1pV4+6NkUku1K=DeReZ5qT{yhu!b{hB14_g73#BOQtteyj>rp}!spL-86> zQvj-8*cgFu1BojD?1POa09WfcX~Y3dVH1{t2`3*^&$J^sMxwPDx2|*=J;A zG%+%I^VE9x#fgu;u5NWk&inTiXeqUY0o>rz-3=Zdo}{l|uS-1rILxb{z=1lLXfbC% zwYYKK82X@{&T1QPt4)OCp?41YZr2C=b+r2vw4 zRZx)s`gO{?k<=CDg5X0(M~65YwQdgv{q#6TL4u81L|U2^aBrz*CLyC?JQzrQ7mk$+ z+{$7EN*ih~17TTm%7BF1$?jt8q`tPcO-EzP_8}q8 zOd1j|@$AKmvrIO7N%l`62M&L2sHw*6CBJxb7zJgOp`jv0 zK}r&Z3*hcpIx4!Ia_S_wr%G{PuON;I!R0+xK;*ZXQmH^Ar|FeH9|1)qrME0?3f< z6a4*n3AHLc#>f)rSDP!(0Ts9EkSC%H^`@4I=ViLZ)jmPA`WWI*^?T}QI&|O5ducHS zhYqqy*SsQYd&J~@S!jYgfed0;)VSg+5^`GanRhL2Gfv|v2QxYw+Vq*PCJ3N1x1|VZ zlt1rfl}L(1H6Q-?@q=5YqyE6y$Or&#-MR%+99lo`;!?VHE#~hIrd5OAYOn&bV20O- zhNXFjY96UI=Ij*0ch`=qPm6rtX5TD1g;Z2j&>{k(aKK5z6(9G&(~)4g%p3%&HLdk4 z>rXQ800^*gZ}O6R{#nQ5q=6g`>S|=PKzIIiuW07O5CmOOly>GW2`v2TQCkD>9B7`i z#{z2ivETYcO*zy=21tdv! zH5{y4(k8_2n237uvnP;=lZ4${ZRRMT{xd`ljr$oWv%60_vaX(+IlbKe=SfY?C2iI< zgU7jdA8W{D&dS(WJ@j{5uRR>Jy!=f(qkrkBH1a^a)-^}oG}=&z3IcSF-wDj|APb!6 zyNsW?kH^qj9?#kVKxk;u zfjJSQllty$5ygeE;J80Pl_0iHMJIB7r=MWWDSN8>Qrv2YS66A2*PSOCe1ieieC>4P zQB>>9;sbP|s3)ereg-fI#QP~nmB@#+Sy|cMPiQ}ly95ESIlrFlH>C;ub_ayhIQTv% zoT8a&0sL*xdjJImg$O@Clte(lqqct1_5Ir$#!Kih5|F*QZP@0Qk7WW_7YxjvIJM15 zK6EtgHdUEF2S*Qv9Nkt|S6@g9#oJ~aI!%;X_oqv-jmkgz$5|Y%7}F_V)bqB52w43f zkNe?-06Ap4#6{z@J1asEyD6f+i{N2UHauDhoj>ohA}XX>c!3J)rl5*?qh=BOPk@oa+@v9Fz^CTkg`* zk~Gx7zyK8+OKD_el$)CiNJvQ7Sb7wx2y#$|AL1GU?|4S;&8hzBYuduppZdUB@bv76 zP_D3z>C_F1qf#PhKtaPAe_4jswlm>-&ugKM{k^@tC25{(UWe1jKtbLv7RtW2$@(F} z*RQLAbc-TdsDU&&FF{&PS=2Sd&p^2)OwK7(6q*?Mmw|y{>jilLN3BdExOyYPXe;rB zk$fEhMb7O9tgo*F+hc^%bk@ySoWAxm3^-2bJ&lhZ2QOfy=20VRPPfbRYM+dMP@dTs zbUJ-4q@P#$h&q6Qn>#UzC&VP4HuKw&A|qgI8B_>oW?``&&b!y$+e>1V<@d+t{TH9Ze4+25+3`j&R#A)SB&9Pr@WTax z47p|j2mHBOZ&Q5!xsvU!X2>2=kYF=aTKLU0iH>&n3jZ)^I}3*-Pj{sBZrcV zpp48Vd}}Wc`IFlgaOXXrE}=W*>jHa<43_`$c`QdMH0dMo$pC#sEFXjy&T{v^_l*8i z$4)-TkYf#PtKRtgN|r6>eEZ_M$1&of3##Miow1+kqThVD~}_D1&;4=Z!5Qmr!^ zU^P&B!{z6DUBLjsY~H2_Q31emS$XbkoXn$$R3-Q;drGTjV$Ee!+#=T3Mm%*yWC`4P#{pK+SzdBH=Q)$tXEb zDmnoa^f8mtM-(jYis$}14Sdwea2SB&N`R?$$BiBU_*aZkBX<}WS;Ot)MmM06RYx^V z&64`zoH@Lk%kHppJKu?#CV}S`G)O{bCMTaz)Y+A$nD0@vDegCPQx5=V1t`So=n9Qv zco6{b`LG9tbT-^HCeQulpzyOwLu0jPZ*_V1!`;oj(}VSZGdS%%Ahgxq$CY45rQd2H zFsSMg^;W*ovdk`^Is2w%6Pu~2sY#Px#Yxw(|7HKgaA10(ecL-E7QWK8_#PFcHpC== zLR*dt1AvmU;n?TjyYBna;KX$V8C&h?R>Nz4BVoZvJsE%EfsM5 z(|0_@YKk3_l?Xv%ej@_M~rF5piYwoC>7CAGhT=8>b^EE(US?f#w1|W$;%3IU$n!fj1E?78N7{K{*lyInT!0?Pp6}ejpR{WCMHRCu%o6re@+4+X!?a66{1J zn;Jw^fNn;`oYSTu6KYNR_8*K5!$+GveBN+0J9pyGbh1?WoPx<6q=%%XR^2o*|De}8 zhabo@kC!{YLUlIp4qq0`9o)LX#$o?sC5JGVFO?%S)oQ+$bp$SU=8Mtv{LQ)cy>iLO zu(u&JfUNQBoWM(ovWV*cq>?{^y}0aTIKcA zUI)xIi2L!`nk#}wsb-8ozFpzgJN|~b){7X@v2~DMcj9@q#mU)I%MAw_+$sIgGeZcl zl(=qchLI6JnAOp|ae1s$$?b-IhO}PA@}ks^8_oDZsO-GH2XK&aG({Zpz> z$l^q39w~OVc>j}d!^tw_;CQ~ot~Vp+d*F8jG!pPJuJOC+^U@xn)kQx2pwi=cKW6Gw zKZ6f*da**x+aM+&Js?_g{>ad9N@!HMW50LMx`v4Gz)o=vhlGSEWk|cEmwRC!kj;9r z%cW$u-f#>-*I@ObD&7=1=G$MTkzgN%fJ0$v=Skl2aO{T0a@d%HI&N0$(?A|`OAz4- z5TSu~su~#a-Jb0c)J;P$%2gE>6YB!QDCWZRr!kEKIWW|&@C6wklayjV zY9v8{i!mp?Xb~M_7Zduyf|@d-no%{KB-=GE{v}<I$D8-1M;t zbnmJ)-UhpUs0woXJ((2R7yEnAt}6s@Tc#w&2;^}+>e`C0M;`VubRE@9ht4(lh%|kG zko?(Tm>)vfMtzzukSVLp$YHB;k(8Pk@su`|@zDHSCpJrmQ*=U1;zN`>4pJD&R8 zpV9naO%sTAU5-A$J=zMrTV^-34gjR2q$iEMpfi-KM?iD#$Riw~^ju5!;rAm2(~+t-sujB-?vDlMJ_$Hx)$=S1ei}pZ&;*cb_m>xW$t8wR5m6aAD&2gZZ zKrwjS7Vf?}fXJfn2Y4lm%I}&dzNzSNf}s=$Q)NnOIyy{v7$iJL8TR24Ock|&jq(^y zx^^8}^`hVNi!m-vtYudYvi9>-PCEuwvP{P%&um;~>0;Q)rM5s>Z|k)^NT_}K-felu zt!n2Byqh1;Zk0??XqB*|JBw6b7*^(1(cGCo=^_Tg!iT8h=k5jlBxjRwW=nKA&*JA7 zcN!OYaqGRf<1b+V{b#Hw1wBGV&~uK++-veT0>nFa>}?{O_Gz1o2kD z2U6r>)bHwvJ;F{l8K4e}iplX&hXvfBt_N+hZ)qOI?fa2dpheT|ktvW4F^;mER|*qP zAiLYHwpVoCak56&`Xhp6L&9$oZm+iU-K*@}^x6UFdweM@Oo=?92HuI7@{5>O{`erM zhCI#5DYJ_agfJz#-ZS9Y7#v5~`m~!r9?xiP`EVJboE}d+JqXi(FjlfZ?kb@0@PPIz zWDD4{>OCLDTA)*_aBf`?Hg_CV1NHBUU(&U_baN7GNNL{9alaFhw2J1Ege!@MaPX+?IcmK9Qc`PWB_xlsEZQ}dp+HKDTBR_?Q(cU z3M95wra6@uJlRU{F!{s2TawQj>hH^*#=Fp$O76aRh?PC;B-`}=i>;hVNJzNn>|9*m z>al#k7P(`&CpgoH6q~8{5FjbeLe;LWesUZP0G>p(KK5a$`&t?sjy_n4h$12?ifG5S zn`T#%XR;F6ygSbRZgdQ4bA^JUb_TD$@t%A&E1bWZolP_?$$9kax*D?;3Uv4NsasldhrfKum&L;?^ie|t0)(HP z*p`Q0Cc~wEXni4k<`fx=YjQyMUVl~nxh{cv1*K5uBHS8s9`No$=yp3_K4WtZ@-1?yf=!K$Z+1mFPd zkb<(~Ro);k9EvA7%U#3ZfNn8p6U7CU>FG!PS?THQ!+TUzRI8FSz{x>|gWCRAkek%1 z+U0-)xWo>4vly7B1vD-H@~^lOXCe>jDDLhJH5J*o5W%}|ucpUg8(*$VLJmmmt{Fy} za!q8mE&(3&3XEPpfFYW&1iN+mZSt%4Kc196Y#tQ&893>gJ8nXn+SgTkFE%=;XAw z@RE)apXTZ589~Hjm5bdlEhfzYQow2?H1vD}QKhXzIzLxaq9?Qv`@D#On>7YQBpg>x zZyiimIcxaPWYf_&jIP_6FYAnQGe+86w49Gdg*R)&1>U-Aa2lLjh z#MEx#J%*J5fcZR-2f9P0x)2=vFyN12e1^RKlSaYUTHfx}i2(4#BTdTboyq;8v7e5{ zl*nEGs?hESECin78LH&qT|}h?(YNN1-b%x#Ra%R#zcIEb~Nl8yjw~yO`)Mg zc$Wc!;FByeP*Ia4`Pm?{5r07PV1Oi9)Py$y?mFK@VGKt#muFAxjx>!55h#fB!SpP* z5#w@@Y-tAJkT$x@z*H9EPv)#ClDI@6m;j|#w#Q8!KEbAr6SAh(V}QvchDl05Y+2_a z>XED@9cp5C_Vl!+$cZqJX__wMA9*Vag$UYvHS`u<@5!2Lktmig&=qu~&qJvYvIiqM zv-a$E8D7lKEM1Qpwco*ewq8PCoa4eO*D|vy(sFVJ0hJORnZi};+<|%Q#PF`AMor6& zZ0hQ*E7b{bIL@!X3doKqQ>GQc_TI5LH4*2*31N|(j3`%|8Rp#@a#X;d`j#^#0P)h2 zVq7n%e{nT36Qhu89M0fd!9|fwz|Pd-xZWOjq`o|(1bvsM&ROH*ZKn!Ec}7UP0xyJj z(}ts6fpKKUTr=VfdWVA%Xm^m$7`AiE;U^hbBS}eUut{n38ui_w?X~5A_2Ilt3Kf=S^st*w}52OrCNuKb3jw zh7d5q5qh{b45D4-CfhgXzf=pjTVuO$X*3X zLvGfV9F&<=s>~{t2g(3e!&QT^4l~ExMn*6YIN?wXsICuPY$pX&tgLv$!;9noF%e84#)x)ORlV}d__<&);}gD#-^d? znWu?xW|%_gR5A~=TwVzok}b#r|F$^bCY|B2`jaKC{{@VUEOr2aK+pkjDk`T-+`Z3< zexE^CkyKb%SVdQtx-vF!*}_)X#>NH!R8>`lah@&wPD>tGv70yVIXGMclNLh1wd$|~ zSw-Eat#$5v910$S16lodLAj;L`4*>j)eUC#f1ixGJtIXIpw_X-vZ>liM^8k@v7OFw zKJhrw5aogv%Ql7oRZMNaA0iWV%^Fi^ty1zN4z$-RD=ToFcOnd9?mhopReSIt(ZJB~ zVrr8%}o6$&ylGXnrf z`vn-71a1bN&*?+%ThaWrP9Mdrx0F+3ad)6>GOiXG_Ew>*w7>2n9<8tup6oNlXUQ@- zX*6HG58Uobya)1PqVVVDMPm})HrDxwwqVVa4R}2qK9W}``wj83yjpjip4AQeiSDqcfx=#RHJmlU6f?vvZD zH9N_`WGV9BJdWYESZ2?j)q9aDb3lyII-U zE2>LFBO~Exw2IM_Crh*6ylf0naiD7F7F&zgg-Y0y;Xj&*ugfH`5uY&~-E59f%#dP} zIH&Jao`RvL`6j2new(Yw8QN$3)9OM7=oSXR48L->&2(Hd!42jwDcSj+dR1l<1F0@m zCJDJ|{AL>eV)q00&~NkbdNJ2u*73vus-!H-R}4Gmsp`bdLjIsT{*5C2!0Vnr&eP&I zxr6^a+-OLWzbR7geQtf({Z(**AQXfO`DA6;{Qdn;mg2;I9QO6;o}8YBCDHGCDz2_7 z%7s@8BrC}7tdSI}xsSFYGQ6*9K(1fE?!MfaKzqOww5tjuC5>SS&jhuIw}=puc{=9< zj7I~nu7bNj$uTMD#hh`naaU8EaRv0AoiYhf@i}!{sJba4qyAdsR-I_+z285e7fQqP zy@B}*+yao?xsXRaapFBzh6OdTEyMO;TyT#~1U~x5>K1$0_i=HH8MDr3l_~|d`4)wa zm2!MP*&XNJ*i;Y!KvjxPOuPul9335}S0{e`icUnBm=Hu7uccZLTz*2T7u2Abte@_nWU?y=t?m z;ML_Ii-1@Uwb@Im6^t&f4SxiHxO-G_9k4jkdM3CM$SMG@DY zs0ILmO6(yaTOLtqX1;Kutd$BW1=H7aHcek z%vsv}u^^bFxq9{L?!m!bKR;POSRT4NbN-x7!B>P|Z9BjD^mhh;LJ&j^bQPZOb!p&w zlmAxZyS79J9s>Zi&qXZ&{iRD$#)D-5P|Vo?S^k~)9R%BV-Os;ww{vvw2a;6nW#S_t z;8s!iX{K;C-%!u$4;};9k~pUdRyT+~%ZCLk{&&4rqt7Z-ifU9iKG(QLy=r@QtIfW0 z!Gl~0^Rx?@9~?!B5=-c>rq624&%f7aN30mfn+Z2MzbokbE0fU=2XO)egJfAIaS;*S zhYZot(dCo|pU#7>x{#nj7a>d)9jjEfR5hsduPjOvOHxxTlEd=xFC{AXx0bZ5rqOcE005;E8OD{;1-XJ4PwzM^XxN(Cri}WTQHYcxltc{L~9v69qqAP z%%Bn++$;;5Y;r2kyA25ok;yQhUgJpB#2o)6okH;HTNuLi=u~yC4 z?L^~tM2(Le?wI>Yq95+_@ghE(i@_w=6WWVStESbVj_x53ta58c6X-?(6-`a}*RNk^ z{Y^wy`_qDqe{_j5UhnopLNIJbWk!BqYPZ8tFd3L()BC1Jd~Q(z8V zDCL=FQqxDyA7(EEjbPAkTghV*Zpr=?PZlap)~+YlKig7VH)-N3;0N^U*S1T;=AJV7 ztM%`Q2KlEvuuDGRcGm=Ex4cJ)+b4VZwR7L@NGg*dCsVm!HaZv0?a6ssl1IVNS(hwh zq=p;4s8N9$+;`gc=FU0l70&iyD=lPCDN#b+A$vR+t}b51P-N1bdIdc4c<9DGU?1^P z6hpxla*ZbVyjp}1W{XBz33*9I2Q_Ux)>_G1+NJzF=Ey)qO91Ge@9e*|aoL^(l1Q%a z-Q*UbglsFKY6&Yzi$W)W&YHk*9mx$Csel;c=BU0hDbSZ8L&qWQyteC=l?dg0FkGeK zV`d^^4IhQFzNWCA7B|sVS-HJ)J%piKY09`N*t~%eQn-v=k*)R9EYJg_ijy83^|TaB zV|RbMmF+ucD!+SCcX^x(OWt6AVL8^k&FsHd4=J&bz3ve%)t_(sV^paI{vmyf1YLes zH-(#$ao={71FSZORQwu#PPuAw^VEr08K%=!d z?5NcalF2fvixso#J4fG$9HRza#B+u-sT5=da}7HP<+6`!2;rV#47W(e*+V+J`CLZ8 znuq)TH9n?F*~p~~r%A#*cfpqTJb7;TzY|kwUMGq8v(37!i`+pj{^1w8q_I(OKO!CT^knJQDlHYN(Jcr$u3!mZ2WIef=_ITKB%TjQ^=fiQ7}sK4fd?m2elBliM$4A zm;E2_7W5lq#ce-*(=(eYnGwd+7)h310mphByt=9I3ufT??|%f*@!XZOl|+?`VU0Um zz8?T@%yMQQg1bZrw?BhCv*r!w4I(cK;!NX(`-5@o|16j4u?GInfU?=i)c(YS0g+8U{Jmp;O2-BWNO<&D(lX}_CoSHq>r*#vW#!^Q~mHUNG-(oYFCwNTeE>B@)A()>?HlvNv!ijAsUk{ zM>YJxJd3cm+G9gle*Gf%boT+7Nyh>>#q!K;yRA@Dx}kwY)nq}aoq1NUdRbti@?K1r z0pfY&`T=xmt0C^wrz>Q@<;$1nd@I4n@z;YoTILct!L6ad@0Ji103{$MX0tvxXm<`h z*Mv7QgOxa<&8=L(g0ce{UZ~$bRZI{2d{tdRfeaD`0Z{9`#!IUGm%glHz z;!E9PR)xiP&nt=d?tVww6Sn0ASx%RG9Y%xl1eXTPA3huwg$^Aj*pkW{X^q;%53T&- zzQlRjRJEy{XjjK!ZZ+xg<@=7@{yzT`OXS45CW@QPQw+=qKhhu^^_gy(97BDJ10l!y z>CreLJ?7(l>(N?2yJ5UmgOiZTFo_%ue5*MyFE*PLQ`4|TBEDKH_3u}sYr6Ji5LAecP zvSei!T+=JFgn)p*^Xqr--^W-sLoIADkDonz24`Vm0V`vlV8LoCW$%W-=TAt|$54?w z8{R5J!uf?e3MA(rk)!q-8Yka!V)AXvLXVTt3gi?!=tXPvw+4HOU&lF;cb#cxl^yuG z5!oWO#GM>T1}~rCSQ-*(DM>4xpSLVdc`2Tghs53Bx$@!L{*`og_BY~KhC{b4s(POd z*7*BQ(~c@tlwZt9jXW5{*~851TtDRHsYzqWixtmhHq1F0A+gXVssc;+lICCwV>2-m z^}Y-~;T6&gSaok=0ZGVOf>Tbb(C-^BW@#>18li0hYxz{^%Gm@YXRh?49;-Z#AHELt zlxx0;+2KL`LzMP0byZ2`dDId_(v@_>gE?YWRs2Bgw}pP3gEw_Bqt#|jWtCB;F2rk9vKpF| zozxnA!VFBOW_Q*B_)yMcF-h1IZnvLkdrTu`XB7#7OXm4{Mmz-mt09yw)U3K zKjBJkrpBH5JVvOUGYO2~4!S-68=F^tj8Dy-#we_TRS0fmxMnELdGJ~56FuC=jL4h`Ajf_?g zwzQjlo*0Su>n}4p(XZ~9;|ENf&R=&CZvZN12M1H+SmLJ9mOfM1Y@8t!y>1_!#EF>G z>_9&R{Vtt4uzq(X9ENTlqEZD>!2jZO{I}F6kw^F5%InpKF$`ecH=uRzfqJQ$Rrvn` DKwD-H From 630db203f9fc4e84ae61b8367fad2093700b6b68 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Mon, 10 Jun 2013 17:50:15 -0700 Subject: [PATCH 17/18] Oxygen toxicity fix. Whoops. --- code/modules/mob/living/carbon/human/life.dm | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 9909d523c08..cf3b9bd6d52 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -394,7 +394,7 @@ var/oxygen_used = 0 var/nitrogen_used = 0 var/breath_pressure = (breath.total_moles()*R_IDEAL_GAS_EQUATION*breath.temperature)/BREATH_VOLUME - var/safe_oxygen_max = 1 // For vox. + var/vox_oxygen_max = 1 // For vox. //Partial pressure of the O2 in our breath var/O2_pp = (breath.oxygen/breath.total_moles())*breath_pressure @@ -438,11 +438,6 @@ failed_last_breath = 1 oxygen_alert = max(oxygen_alert, 1) - if(O2_pp > safe_oxygen_max) //Oxygen is toxic to vox. - var/ratio = (breath.oxygen/safe_oxygen_max) * 10 - adjustToxLoss(Clamp(ratio, MIN_PLASMA_DAMAGE, MAX_PLASMA_DAMAGE)) - toxins_alert = max(toxins_alert, 1) - else // We're in safe limits failed_last_breath = 0 adjustOxyLoss(-5) @@ -474,6 +469,10 @@ if(reagents) reagents.add_reagent("plasma", Clamp(ratio, MIN_PLASMA_DAMAGE, MAX_PLASMA_DAMAGE)) toxins_alert = max(toxins_alert, 1) + else if(O2_pp > vox_oxygen_max && src.dna.mutantrace=="vox") //Oxygen is toxic to vox. + var/ratio = (breath.oxygen/vox_oxygen_max) * 10 + adjustToxLoss(Clamp(ratio, MIN_PLASMA_DAMAGE, MAX_PLASMA_DAMAGE)) + toxins_alert = max(toxins_alert, 1) else toxins_alert = 0 From cbb36ce24f8d4f48e21810b9ad311c89afbf75ef Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Mon, 10 Jun 2013 18:08:25 -0700 Subject: [PATCH 18/18] Added ability for tanks to be held on vox suits. --- code/modules/clothing/spacesuits/alien.dm | 4 ++-- code/modules/mob/living/carbon/human/life.dm | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/clothing/spacesuits/alien.dm b/code/modules/clothing/spacesuits/alien.dm index 45e753c9acc..28e53873b51 100644 --- a/code/modules/clothing/spacesuits/alien.dm +++ b/code/modules/clothing/spacesuits/alien.dm @@ -39,7 +39,7 @@ item_state = "vox-pressure" desc = "A huge, armoured, pressurized suit, designed for distinctly nonhuman proportions." w_class = 3 - allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen) + allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs,/obj/item/weapon/tank) slowdown = 2 armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30) @@ -56,7 +56,7 @@ item_state = "vox-carapace" desc = "An armoured, segmented carapace with glowing purple lights. It looks pretty run-down." w_class = 3 - allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen) + allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs,/obj/item/weapon/tank) slowdown = 1 armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index cf3b9bd6d52..5d8dc1055b0 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -602,7 +602,7 @@ if(HAZARD_LOW_PRESSURE to WARNING_LOW_PRESSURE) pressure_alert = -1 else - if( !(COLD_RESISTANCE in mutations) ) + if( !(COLD_RESISTANCE in mutations) && src.dna.mutantrace!="vox") adjustBruteLoss( LOW_PRESSURE_DAMAGE ) pressure_alert = -2 else