From 1bd7ea24ac0f943b84064d0e9172681234ab6f68 Mon Sep 17 00:00:00 2001 From: Robson Richards Date: Mon, 30 Jun 2014 19:48:58 +0100 Subject: [PATCH 1/7] Adds Posibrains, MMIs that ghosts can inhabit. --- NTstation13.dme | 1 + code/game/objects/items/robot/robot_parts.dm | 10 +- code/modules/mob/living/carbon/brain/MMI.dm | 4 +- .../mob/living/carbon/brain/posibrain.dm | 146 ++++++++++++++++++ .../modules/mob/living/silicon/robot/robot.dm | 35 +++-- code/modules/research/designs.dm | 11 ++ icons/obj/assemblies.dmi | Bin 22379 -> 27614 bytes 7 files changed, 188 insertions(+), 19 deletions(-) create mode 100644 code/modules/mob/living/carbon/brain/posibrain.dm diff --git a/NTstation13.dme b/NTstation13.dme index 1065bbb49b..9e9cbed7e6 100644 --- a/NTstation13.dme +++ b/NTstation13.dme @@ -960,6 +960,7 @@ #include "code\modules\mob\living\carbon\brain\emote.dm" #include "code\modules\mob\living\carbon\brain\life.dm" #include "code\modules\mob\living\carbon\brain\MMI.dm" +#include "code\modules\mob\living\carbon\brain\posibrain.dm" #include "code\modules\mob\living\carbon\brain\say.dm" #include "code\modules\mob\living\carbon\human\death.dm" #include "code\modules\mob\living\carbon\human\emote.dm" diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm index 159921e193..e57fe4c8c3 100644 --- a/code/game/objects/items/robot/robot_parts.dm +++ b/code/game/objects/items/robot/robot_parts.dm @@ -225,8 +225,9 @@ M.brainmob.mind.transfer_to(O) - if(O.mind && O.mind.special_role) - O.mind.remove_all_antag() + if(O.mind) + if(O.mind.special_role) + O.mind.remove_all_antag() if(!config.borg_remembers) O.mind.store_memory("All Objectives listed here are considered Failed.") else @@ -238,8 +239,9 @@ O.cell = chest.cell chest.cell.loc = O chest.cell = null - W.loc = O//Should fix cybros run time erroring when blown up. It got deleted before, along with the frame. - O.mmi = W + M.loc = O//Should fix cybros run time erroring when blown up. It got deleted before, along with the frame. + O.mmi = M + O.updatename() feedback_inc("cyborg_birth",1) diff --git a/code/modules/mob/living/carbon/brain/MMI.dm b/code/modules/mob/living/carbon/brain/MMI.dm index 442698859b..5161e3cf31 100644 --- a/code/modules/mob/living/carbon/brain/MMI.dm +++ b/code/modules/mob/living/carbon/brain/MMI.dm @@ -6,9 +6,9 @@ icon = 'icons/obj/assemblies.dmi' icon_state = "mmi_empty" w_class = 3 - origin_tech = "biotech=3" + origin_tech = "biotech=3;programming=2" - var/list/construction_cost = list("metal"=1000,"glass"=500) + var/list/construction_cost = list("metal" = 1000, "glass" = 500) var/construction_time = 75 //these vars are so the mecha fabricator doesn't shit itself anymore. --NEO diff --git a/code/modules/mob/living/carbon/brain/posibrain.dm b/code/modules/mob/living/carbon/brain/posibrain.dm new file mode 100644 index 0000000000..938a9681b5 --- /dev/null +++ b/code/modules/mob/living/carbon/brain/posibrain.dm @@ -0,0 +1,146 @@ +/obj/item/device/mmi/posibrain + name = "positronic brain" + desc = "A cube of shining metal, four inches to a side and covered in shallow grooves." + icon = 'icons/obj/assemblies.dmi' + icon_state = "posibrain" + w_class = 3 + origin_tech = "engineering=2;biotech=3;programming=3" + + construction_cost = list("metal" = 700, "glass" = 350) + construction_time = 75 + var/searching = 0 + var/askDelay = 10 * 60 * 1 + brainmob = null + req_access = list(access_robotics) + locked = 0 + mecha = null//This does not appear to be used outside of reference in mecha.dm. + + +/obj/item/device/mmi/posibrain/attack_self(mob/user as mob) + if(brainmob && !brainmob.key && searching == 0) + //Start the process of searching for a new user. + user << "You carefully locate the manual activation switch and start the positronic brain's boot process." + icon_state = "posibrain-searching" + searching = 1 + request_player() + spawn(600) + reset_search() + +/obj/item/device/mmi/posibrain/proc/request_player() + for(var/mob/dead/observer/O in player_list) + if(jobban_isbanned(O, "pAI")) + continue + if(O.client) + if(O.client.prefs.be_special & BE_PAI) + question(O.client) + +/obj/item/device/mmi/posibrain/proc/question(var/client/C) + spawn(0) + if(!C) return + var/response = alert(C, "Someone is requesting a personality for a positronic brain. Would you like to play as one?", "Positronic brain request", "Yes", "No", "Never for this round") + if(!C || brainmob.key || 0 == searching) + return //handle logouts that happen whilst the alert is waiting for a response, and responses issued after a brain has been located. + if(response == "Yes") + transfer_personality(C.mob) + else if (response == "Never for this round") + C.prefs.be_special ^= BE_PAI + + +/obj/item/device/mmi/posibrain/transfer_identity(var/mob/living/carbon/H) + name = "positronic brain ([H])" + brainmob.name = H.real_name + brainmob.real_name = H.real_name + brainmob.dna = H.dna + brainmob.timeofhostdeath = H.timeofdeath + brainmob.stat = 0 + if(brainmob.mind) + brainmob.mind.assigned_role = "Positronic Brain" + if(H.mind) + H.mind.transfer_to(brainmob) + brainmob << "Hello World!" + icon_state = "posibrain-occupied" + return + +/obj/item/device/mmi/posibrain/proc/transfer_personality(var/mob/candidate) + + searching = 0 + brainmob.mind = candidate.mind + brainmob.ckey = candidate.ckey + name = "positronic brain ([brainmob.name])" + + brainmob << "You are a positronic brain, brought into existence on [station_name()]." + brainmob << "As a synthetic intelligence, you answer to all crewmembers, as well as the AI." + brainmob << "Remember, the purpose of your existence is to serve the crew and the station. Above all else, do no harm." + brainmob << "Use say :b to speak to other artificial intelligences." + brainmob.mind.assigned_role = "Positronic Brain" + + var/turf/T = get_turf() + for (var/mob/M in viewers(T)) + M.show_message("The positronic brain chimes quietly.") + icon_state = "posibrain-occupied" + +/obj/item/device/mmi/posibrain/proc/reset_search() //We give the players sixty seconds to decide, then reset the timer. + + if(brainmob && brainmob.key) return + + searching = 0 + icon_state = "posibrain" + + var/turf/T = get_turf() + for (var/mob/M in viewers(T)) + M.show_message("The positronic brain buzzes quietly, and the golden lights fade away. Perhaps you could try again?") + +/obj/item/device/mmi/posibrain/examine() + + set src in oview() + + if(!usr || !src) return + if( (usr.sdisabilities & BLIND || usr.blinded || usr.stat) && !istype(usr,/mob/dead/observer) ) + usr << "Something is there but you can't see it." + return + + var/msg = "*---------*\nThis is \icon[src] \a [src]!\n[desc]\n" + msg += "" + + if(brainmob && brainmob.key) + switch(brainmob.stat) + if(CONSCIOUS) + if(!src.brainmob.client) msg += "It appears to be in stand-by mode.\n" //afk + if(UNCONSCIOUS) msg += "It doesn't seem to be responsive.\n" + if(DEAD) msg += "It appears to be completely inactive.\n" + else + msg += "It appears to be completely inactive.\n" + msg += "*---------*" + usr << msg + return + +/obj/item/device/mmi/posibrain/emp_act(severity) + if(!brainmob) + return + else + switch(severity) + if(1) + brainmob.emp_damage += rand(20,30) + if(2) + brainmob.emp_damage += rand(10,20) + if(3) + brainmob.emp_damage += rand(0,10) + ..() + +/obj/item/device/mmi/posibrain/New() + + brainmob = new(src) + brainmob.name = "[pick(list("PBU","HIU","SINA","ARMA","OSI"))]-[rand(100, 999)]" + brainmob.real_name = brainmob.name + brainmob.loc = src + brainmob.container = src + brainmob.robot_talk_understand = 1 + brainmob.stat = 0 + brainmob.silent = 0 + dead_mob_list -= brainmob + + ..() + + +/obj/item/device/mmi/posibrain/attackby(var/obj/item/O as obj, var/mob/user as mob) + return \ No newline at end of file diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 731b0ab36a..c33cfabe69 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -58,6 +58,8 @@ var/obj/item/weapon/tank/internal = null //Hatred. Used if a borg has a jetpack. var/obj/item/robot_parts/robot_suit/robot_suit = null //Used for deconstruction to remember what the borg was constructed out of.. + var/braintype = "Cyborg" + /mob/living/silicon/robot/New(loc) @@ -99,18 +101,19 @@ camera.status = 0 ..() - //MMI stuff. Held togheter by magic. ~Miauw - mmi = new(src) - mmi.brain = new /obj/item/organ/brain(mmi) - mmi.brain.name = "[src.real_name]'s brain" - mmi.locked = 1 - mmi.icon_state = "mmi_full" - mmi.name = "Man-Machine Interface: [src.real_name]" - mmi.brainmob = new(src) - mmi.brainmob.name = src.real_name - mmi.brainmob.real_name = src.real_name - mmi.brainmob.container = mmi - mmi.contents += mmi.brainmob + //MMI stuff. Held together by magic. ~Miauw + if(!mmi || !mmi.brainmob) + mmi = new(src) + mmi.brain = new /obj/item/organ/brain(mmi) + mmi.brain.name = "[real_name]'s brain" + mmi.locked = 1 + mmi.icon_state = "mmi_full" + mmi.name = "Man-Machine Interface: [real_name]" + mmi.brainmob = new(src) + mmi.brainmob.name = real_name + mmi.brainmob.real_name = real_name + mmi.brainmob.container = mmi + mmi.contents += mmi.brainmob playsound(loc, 'sound/voice/liveagain.ogg', 75, 1) @@ -229,10 +232,16 @@ /mob/living/silicon/robot/proc/updatename() var/changed_name = "" + if(custom_name) changed_name = custom_name else - changed_name = "[(designation ? "[designation] " : "")]Cyborg-[num2text(ident)]" + if(istype(mmi, /obj/item/device/mmi/posibrain)) + braintype = "Android" + else + braintype = "Cyborg" + + changed_name = "[(designation ? "[designation] " : "")][braintype]-[num2text(ident)]" real_name = changed_name name = real_name if(camera) diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index 7ea38fe1ef..cbc9d5d818 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -1519,6 +1519,17 @@ datum/design/mmi_radio build_path = /obj/item/device/mmi/radio_enabled category = "Misc" +datum/design/posibrain + name = "Positronic Brain" + desc = "The latest in Artificial Intelligences." + id = "mmi_posi" + req_tech = list("programming" = 2, "biotech" = 4) + build_type = PROTOLATHE | MECHFAB + materials = list("$metal" = 700, "$glass" = 350) + reliability = 74 + build_path = /obj/item/device/mmi/posibrain + category = "Misc" + datum/design/synthetic_flash name = "Synthetic Flash" desc = "When a problem arises, SCIENCE is the solution." diff --git a/icons/obj/assemblies.dmi b/icons/obj/assemblies.dmi index 761a77ceb636a75f86b7b7c1ffbc525e05ab075e..de93929d341f795f6d9681191fc9b0e1762534df 100644 GIT binary patch literal 27614 zcmbrmbzD^6*ET#fNK1p1GzdteG)O2Nf;573cQZ&TA=2HcbjQ$0cXvs5*T4+V;rsjD z?|t8&_kExEJb#SNoO3*T@3r?{>$fR5E!l;_^@SY3zhspo+%iOu}F}c@#@VUE!a%8L;RHORRn0M<4KQs)Q zQRn^DEa`@Er`ksUwtavSynIJ!?MP6kbR0(6ooZ9ihgL}(Zc}$=bb0_`=%Cnf{{2e& z^3A8QP_f-u?kWmg+4*GwczZj^#;I_?a^$OM*$N>u$|%;GtUfO58Xqs%0%SCU5&QBo z&fs!#(5678OQNLPSd>PeF+Yk#t$H>($2n!MYOCG~AUfu*D*>8*N02$j-SGPmqqO9pV%4PH&}*$d;sKCjM6NBb0vL->yO~N)D;1 zgFe54Ho3iBb7ttX$w<_2T05>7g&d19Eeq2oPIhhN$WJ^i#HlU|vQ9xLHAIo^ z@r#LX(>v`W`1&p>uA>GiWcT`oI`g+*QQ~Mu2YvJ0Q%H_QA^Xl{PPxoC4ZDeM%gm&N ze*Jrg=7}}=N^cT}f-B_N*dNlXgiU>h=Aj`Nmgd3iMkA=RPD7YA(5 z@tT)nN>L+9=RQ{Ho}I&AJuQQzmw4LNIOjT_8{C^z7eC~U&jh~ zA?a@j42)v;V0%@iv?BA|N?+(XQkK^h=` zqh|SnsCz2{tF!lq>FKb5^Wj`2>t0VJMelW~uE>O}-4e4IJ$eAmEqz{7x;C9GYcz$x zTZ6W19b#OnAt^DqT(M^9?m}&`Y*U#&Wa9TnHY(_u?9;u2Sp)gap2#01(R9Tw(-;9X z=!hC7;-0aLEKp(vk5HVnB>qSx`_{d280r}C&)&A&F)|e>(ltw=5md7Q4eGILEFw-! zR;n}c+s(Cqx11CN!<*|`RC8t0#K0K@lLeKIU8rx}_VbQnHGk5e2dv??p-wr@bIY#e zy?>TfYvrVzv1t#!r&z4Fo1Tb|kFWGS(1c&tw?%uO(?c(T?gXqwSuxQTG4hJi1@@?_ z3fI^qBP~_0PvBDKd@R;{YUIgc)vFm`xMw#O(n7`Oz?m3wKC8IVe(bM#_<#k;QTav! z4jOEdH+~gns6E5P^lZtIzDy-IYsja5t6{q6?Mx8YYoJsT%VINEA(1Qw7OjWq=}i`3 zfB*jdgK^G|I|DsE^Z599nuv3V{n9Kyi?QVP&!0cD2#JWsYb@0>?^_19t%jv4Ch$gl zrTPK~x71>e?Y5l_A!OFr)9#IWqM_UcSPtBI>dfq2zX!&NcO|)X4qCn>TNs*1^p-BeOdtE`!sCjI8ev8Vwg$^zE$&=&kGipC6P$ zJ_QF0wQNd-vB0(G1O#M!RvP*YC}KrmAOEBz(&uQtJB{ES^ykl?|JJ}Os}n|M!(Lw! z2oi4C=2SN}G5Kn{M6yyi0FTG)VKs`txaFbtk6!NdIoN^A!2>G8k{LDhTQy>0V~eND zjm2?AZ?ll7rgUEIpI3r-uEu4lKcb7u0n_)vcUYF;af$`>L0;Z+v5tMRQ29pic6Zm} z2%1-IJ~E{>f&^w-cyl*ull1yeOiDsJlyyJzt*B`02ftQ%vEFY6rR4*{bH4DS87+*N z^P3(%a5DE{CvD7Rn6_uVx31-=a6(?lYg3OmKL)dZT9<6!o^2qIrpI+a&s0J53=Ed{ z^4{B)2P1)$kwiBVG~2la#Unw#j{+uBL*Ytja2>JM31ln1>FD@)X%`pXSVqNX%&@5Y z>odqsrhs@OltARm=uQM;{^coEjJfi}NN98|C*t&SBWb$#nxwU*Q_87@;7O$Q0LiY$}CEI4m;eM)zJ$k5LPUnUX`n9qux##?$a{m`&A_uVK|vb z_IpGGa#mKBxbD8;Y}-vnFC2&RZG-LyROi`-#uxLD`T_Y-+s~7)c(M);ZC)I<6D8XM0ezwhrSitoEWe(!qvuGJClm4FAL9oigC#HaCz zh@^o90%}VE;kO525Y)g@`E9x1^_m|sS%#WISyz^EeHtR&HOgge~l2&PDymt()7625y)$|B)Fz9^)56F zQx~^8%AZ|VP`I?}m(VF}MsFfte}(JoP-0VV-NMjjB0E2itBQB~GA_2qQ0HDH%bE}+ zp9f5pt&TqOoUtZtzIl$(ZBZ|6QNL=?<6z+D zPuL98H2?77*_wBZ#B*^q)0@pWglSy`anz}5b7dSVVY$^--!~qoS-l&iKd>nW(!o#y z3N+lA>zl***piYG@z%FADZG}54dz|a($eD_!&t_~#&b261gfe>f@Sje76vcHR@$Nj zNI3ZwRu`vR&_J~kDq~ikHI3_97fNGgq=%V?TSVB{!U@Z3`ujOkc}{Ijs4n%5_PtyD z7BCUZpQb^IjBeCn1(uip}V8%9)h;OKlc`qudyM{!MO2108{AB07RzI5<>T z8g)-stcnnRv1eWEjEv{KC&%URs-CB_Ljr8LP)CyCh`fj5p#dHW!)k=9Ptj=LJXyiLGF|dW zFPjy1toVu0bKwLTAdD2bRTjg&a`#orrFD|;O|JGHj>e9S^~Za$;(I2m%|}`HaH)hp zbtgr<1P04*yI^rLeYHKD68$)-EGp)F+lMc8v1ad;y>R2>9pep|<}(tyvKHE!Krfk5 zS5@p2Iz@55yBA_IGp^0}px8oVmeclAeHD98gh06kZ^mM3@u6sz;+KcAhsv=1x>jVe zpSgiJ$sZ^$O_Vvpo>}!TeaF4MMd69eH|lbWb^0|hvHL?Fe(86}E)HL_+&b=z*V@0{ zR;3IkMnXu343A7cuB+4?x=aGB2?VE7bN>8Er$dVFyDl zJDj2Q<-VGio_8r>WxYef8nc+j4Edoq76<#K{vdgdAe1GN#^0W2mEiYQ=(^!j+A%tv zJV(~>R#wzF0n3;PRrgtIm}qVA#ciITt*&N*ce_0-WPo_==IrcYyL!|Eez!w(#W8=C zUz7JvS1cDYt>oy)wLCfb264#m-WJr^*@=~kth#JV4+Pb?2&_l20v!i(jjmz0VR6@h zm`Nl%2f?|~&0YP!u0Z4`6s&94fB4vq(um;l?d~YR8|YkoG@Wdfh@<*P;~S$`P{DR>5X#RdV;PU+M1ILD&58gHW%&H!0}3px3iuALXK4LkA+*6 zn@bl9L(9hGjEH!nPm9PWAzO7njzYd~>vD;Dxuh(1mRJ`Faz8NdW-`>e%Sl>? z-Fme^-U!z!Pgjbyw7f9{lZ0ce+0*$4mB>J6Fs3PEgaoqJMn}rA zk9YnK?I%n0ot0x@-aoyxpY8;|J%mBLXM^|8)w=!LZ6(9ea0|>wGnQIBc~*OSW8>oF zQu*0=ky6h8YE1Af!=j56=RG<$}mN9@~iPSn}z zg1D#wxXlL2)OUD7$bLLdc@wvVnV(+ZOJKeB^Fe%sCf*Zck#G=NZf`^`pqOt47kM2X zyWs&aGNR*zbPU49bqv9{ZOAC}yeKH~+p&(iVbzDY@d<_lP_=VfPMjo%O2}=f>l34} zhip9WzKtMX3xHv1G(uNXrH4}mMzh;ezpiMcD0!w^!yi23uXxO#iA<1*!0Dc_w1|dx zz2vlTvwg98&E}gC`0)zs0jrhQQ=gGLs71|z?ei3pzY~P+P2`Jkb=_C8xZ1~Wooy8E zPW=icjRIOyp+lhfIj|A+IB>$dn=k*!*z@#el=#r7OZm{m0|Sj$00xSB&MR4*`ECzb%HP@h zjdc$G164MPA@(GRyY^Y&o%*Wrl{R5M$HgV&k(sF6?CY z5UXTGb=LmfwAKM4dl$!xmv2gw;@u(j@z+Bpz*Yvf0why5VoYUl_1U55joBt`7Kb3;?GL2^BVXy$>0I1DX1OWK zRytf|bHoZ=ln*3+(@CY>*@WPaotHwKsW~uhwUD}q+4Rtf49^#L1w704qcaII6j_{8 zPG=*zoPoTOz4r|tOIX2>NB`-);`>X>A$0%p=JT-Ldu`5j8;7Yn+G=?7FA;d@b$4{0ScQS2HEA94dCz&!?J-ipQ@}h>1RnaZ4)L!JU0D4Xc&~ zXH`jWW71)(t)5>5BRLPYWoJK%S;TY0IH$IGj9i9wAAPa=BMv*wmA}P-)6x6S|n61_czOLi=952z>><3 zrV@7ogj0`S{gRQX^zo}-m!lfwyNMM`D%a1KoC&hu3bOJI3(tgnYsg+E-o%%BzTr^eglV)19ZZxb$!kN6quIe12Q{QD{!W#^x2^V;hXC9UAop;t-UM4QtkaW4+V- z>(m%GH}@%qjnN=4FAvm;xrjhz%4;eP>lQ9gD=0@ zM)DUpOBzrMvOK64mExwjgnMH_U?-A}nE_ETZD13yJFV^cIEkVa!m4bZK5_Zv0J1=RN9 zH{L8u@QJx=Z;`o4*hn#hMMML$67^o|f46r{Oq$mBTe-ywkkEr`8ovDeCDBkEwT7NA z2-s%}uKX*tK0G=vR-W2W+*=n}@B-$h0=qp1^K%E~T5a>~Tsdd4`2t1mJl=p|_o~Mi zC#R~eFbLP}#b&{(Prq2EIo0S0~~MU0za!^SB}kIC1&0j*~y5?;9| ztL!umt3;i01UBefoIpH~jdbrCF??M&qSZ?7$+R1CD~QZSjrLjV4R72z3G(_rT~;p_ z;GWR~#`_3VQT}(`@&D9U|F3Q~u=Wk5l{DYOpP3FOBvyc{R-?a=w-AHgoyI zzj-rXR|qov4pjmhZr&ipK4OUjQ%paak@x*cJpq)IkQdFnX!U;jNus_*z4tjeUw~$_ zziw2cY&ta(`UKOUVNviac&E-hc&P{c1T>Tt#-@Sm{=*6d!?Wy@3YAPIU&3}FoWV;@ zy#^Ii?~CnW_HkUo+G~jQto19yCXGe-?ncyPUjLVwQX&6AQ-esA%Ru?IrZDZNRdh() zH(hj6jiNybP|^h`;9VSs4GVzYZGMZ2(rSO8p@(*qo`i47C!TkNM#oc784Tof+kUE7 zx|Ciude9h}UMt}k=0*e)ITv5TJ`NrHK3Vl=yk9vqLIYJ+R^}BD{tX-M1Y+CKVm(?` zQ4urV@>@D+N4}wc=|Lc_7sYP|XpW)zWuwd7Ybxj9{n;iILJA7`ckht@JHPvVq!re> zs}+^0Q<%Z;jTt#x+HP1n$?6NPRRWrIMbphcDHob!^~D8xWO&!bwg7!)rX8DDEWTQf z5Gf|oI#5R+b88wttU$S0cI21nhvSdmqGN68Wy5V|b_0ke9|ahXDip+4%wT7Q8^r^G zrceSVrOU=;R+zYU3luAym^xrpuiRF*<`%D5D-+*$ygmZ(v;k#TXOCgi<*t}=TaZiV zCAf?rXjM4&06(Zi{4!8(Rk_sp?;j+eQwjU)lX7%PqQg~iNCcKMTD!EE;1yu3Qme1G z#Ys19q}%LQa3&mpE@ zHDfm;H9+)QJsA@hW0&kK{7&&*Vix;3F?ulkla zoj`=9`Akr=pH{PVIJwV?FBrw1oe(ep;%Hd%mEIjx6kD#PsBgA4A_9w>oBP2p8-LdS zo1ephR;YU^+h=3Uk#uQHQDtFnggJI-j(tq)N!Wae_DsZsp)J%;SKMtyT@F}DV)3;c z!4}WOnDcJ@EGE8iPi7#>nLYXe`(Wc&nXws)R<2*Vc?U+o$J=7pH*+0mNnoxVV9T^p zLDbuCV(TyTE_yOioaG9!QuShSo;p`=f;su3ozP5(cT+yBZN{J$_CB0Vi_ zc2BA!YK)8n9V#FxX<$&y}J@cGf zZFNl638Kf*JtEt)P|Are!)-qDVhbP@pv|3~YO`T-1}-jDzg425?P`a0GcSYs)R5HYqR#AmrB}z(b~9&`=+> zCQSbWx6JL`psfg7>k|TiC%PRi zR2p?4%Gyp$g+4XL${Gg9v$ndx-X~yG7+bMlsOd*%k-xGw73UL4ZJF7x{bL7veT}GHyKH#3vdS25jiqX<`T+T$pZ%y<^ zSv1qZhGq}8LxX?1u}x>oW!EKY5B-L z2B)bR@`_;sU`QC_QKEFR%<_`WV%fzem^X;kL=W`ti_+W2TG{$hZ6+o3F= zx2dYC4y6mtPMJ`(oEKeJNj+A_%ih^+eGt`coFInfS;xxh?D@@SKS~(qTvthgfgB8= z)GK)-U{Mpx0L%giE?5u;bO2;0;JjN+Apc#e>j~G2%uxJNA61h`L`X<@I(T*A=qH4~ zQ%}%n*PUCmY_nx*icrY)oc%Ux)c=eO@U9IrH!{-m)tg3;FCS0KCczYG+zk%z{Xscc zY0_JBBcJeUd}i^GombJl$GVd0gzkHZI(aVXcrhQ~{0EQTtBOw(qqkRJhTbBjzi&jm z#OBF*3Kp$baFY~x;pmUw4(I5=GLhBMA(zkaM3K#`1BS10H~F!^-T5&G`^xIs{e=C! ze}ylu4>2e_>NS;xj1Xn#%a*N$)+fOdpD&Lq zEGOrsCJ~P5;0QWs1@Qi>5TRxH+C%CAR5N;FN7tFAm%Axnth{in=&ikuSdg)S}wE zqA^pV-E~&-s$GOOPxs4}WyCu%6dluU7I$}yocu}V;PqA`LLfbj zTY6E`KvU+!`AamSSkZ@kF7gu&P1l;edGljh+f2y8_MBq`L&-zT>@obV5qU4{UPcLt#IB^diLy@e>-YG0lptj(zAvc-U;RkvZ|qmPO+wh9pW(KWi>IQ~Tj zCJq4`Iq*!YYta|pQBTI?ry{rihd8hKt%Nl~hn@Om)ZyyM*^1Ty<4<0hpNluHw#!Cs zwR&xusBvj&hZPUd4AiWXh8MqG#X!?DplMNuaS|9b%iz=R6uhUUC4)Wp&u~ans!W|} z6_bW)3PCYv=l)*KP6LFZQ|{%Z+UkY8GV9hadOk$VxYIK+Q9y&WDDE(OX68>9hCk_^ z7y*H%)LsBsGQRpoLiPsgUN>baZp&{?%sQS>d@Ca<*5PXA#+x^s&+DQ$jrd15;3-w>Ykr#hM^a6vN{ z@Nf76;E4aDn`7<2_GGfOe*e>~B+|}aVP-4qRrkL%t=E72%VxIM<8wIC0~{FC%#p&P zqGkiipqDZxRrJt+v7i4?AP=M_<^QM!_%|K0xr;=Dh_)L(LbV`yiqqw>2#tCiTT{Q( zi=uje08}9?EbNsv1~R0T=9Bb)g(~|rFAkwvLbYBr`jV0XF+j=@;I{bq_?w%XfYc*- ze|=QTo9TOo6<@tp4#h+x`_{Jv0?6+Z|@{nB~NUfYGyY$lKS52y7`6wvv_ z1%h>El~r&n&sY$UGW(#RLCD3$wNUr%8#<#xQdY}qjb&`KCxNeo1xO)NbZWy_Rkdn2 zRpF`mt4|5Nb$vH4$!d*Lt3G$)O)B=W!u+w(Y2M`j3@1rI94ooA1?e@Pme#c?XNvwm z0bXg0Q`g39pT^yK0|5Gh@RbZ>p&KWYfnr#9*sA~fTL|90x~rsn#unbxMiPiTjAIAyf} z#Q^rUy*K*vL&sH`@pk6!T_5&ICnHkNJ+24+fEbG^{=2^yK)uCnK6`4S zx38<5y1L}GYZ|Z*W|FfRpz@+kH_gXt(ssvy}_Q`_gx zM-d$mm3{?4*jxAG2onv%RwogQ0i$#?(G4CWA5tF{j7bi(u54ig@5*OEeWFTdOvF^_lO$D3x#ARd`ii3gkP=wKdaA2WBua5wN8nnv0PxBz9-A#`hZmj$0 z&1Kcj`sqr{*DVgQVq4+kass=q)dAquYHa3XKJ6ex@!oJQ&;VT5nwy7-4dm!(>v1hG zYrROqF8XJG+Ptq%uze{phYT=K&GsyXC>8z?)JpnqWyve5vbk&8Q-d#G;%mU7<3VV4 zPWDkl$^u^!QsSWq6e={e#Y3-dkiV{Xbuu$E8`eA0Xu$7oZYDGQ_`x9Pkmq%@Ur_y~4(a zPE1f*8h0?C^$d{Syy^y$@K`*wY?s!27#)eXVd}@_D*T6&sM3)*@QxC&p$9eSgZDN{ z+zKEn3E_6%&$;E~wVvlt=Rw1X+0~94dmrI_eR2Rv+$F{UE3wmT70BuFY_rKscLwSk zZf(Y~e5|{JEafsfTYQ7oW}xh_m+=o|_-<28T&FvNEg#|Zsk~Yuq*p*`LnTmIpwM5*yjv+Il2b(rSBo>EUjgPJ^W_`jdeW`4jd-&cjMDLxuyp^ zwhYR;(TpL)jUA{IiDgpOoF{2Ld1DKc*byhb_L|!W@Sv-ZY*U)75SuQ=C4U=tAOI;R z{Gp&+x%pw)H<@s4I8Y{gpkx z{dM9HFVvuXw#Hy}eOfZQC9($4?3KgNYci{b@LU+ zyk$~KJ4J_^xzx_*8(Je(?XO9`SdEyHJ6m`j0liAbn6~R#@Y<2R4Ae4AN7){3azzt#Fp`|6 z6bHQc-QRFdtUFF*h~H}!Hh{L$HmE?dHMqHPPFK7?mZOcEd^yE-gB4T$JLF+`($@n~ zjb@7Y-xvOSTIK(QoFnpQiBr92e-aD7K0n2%XT_ANwXcP7Z^Bm@N*oC!DFi-mBc16O)d&=B z8{M2Omf90P1>sw1Y@f%S*0UhHCCQo86VTYmd{VQCY`-rPzCUEq#k9To(QE}tSugtQ z7&QLuh#EMSa&;7@!HXE=r@*b*4AZ3Kj2v z9O~3(B%%GquwDwP=uu?8{ZgB-4P6x(3?Kn}cOy%H=X@XB4s;~~?GdDliFq3nsC^b& z=02<7`v6H$(P6;QC$)J$pQM^n8Eik+`IgRF@j07GJ5XFL%Zp#=--bcGbDx0kn^Zyr zbd%u0d%!wLM93R|{}TF77i*=?Y?cTVIyyQIG-{2U7dp>ce;t$iXJ)KB`z}sq{ht!aCw_2B zp_7&V5r{hwwuwPNWlQxnZlV1hvhgb@Z>=rg$1Xrc`P1ZjP?MkWq(mGqH5O!$0BqW~ zxc`{w82`2zY5g>TQjT3vn_;-S^Ps2!7TfIfB{7b#T(Puz`}p+bPKsk`=fwL8DCN_6&4aSt`sofaK#JGaO|hj- z3k-L^3i~@r+gQ^F|88A9`jgU6aBXANYY~M*pEc*~TXu6weVl$vj(^H1us2o+^LKX6(~5KI?G7hNCDM0!^egTvL}1sckwYLAa(lJW6FF%B>Iw~x1|qVR zj$;=WZS1hDGQ{o3Vzx{_{s<_r8ERk|)pH!jCHDm*(BN4SfF80@`3;xFq1xJBv1*p* zM>tCC_eq^?kGV<yn>K0N6nW0y*3h&$ zQ`qWe^-?$8;1$NS<*wbgxJF<960=^cFF3GYZH))aJAmu0ru}#y*O(Z_!Plta^6UKt zVef(o>>LbB93^2p!(Br5$auU(v-``L$*K9{YVgq&ctGdM`2d{BeG@A3>uECU>{s{I zt9x|M0PqonBcEV#Qe9o`Sb?Nvg9#udAbs4)XVU7+_~q-};mT2lE4S;u#xrjw^*N#W zTw-D12g=$!=lype93-b8wr^XzJ&OKX8x&{}OVl{sN=+@Fhut?JgTT9iDdiHULzLdT z#LI?@C;CD+)7;OHr@vTn|LE*Q1S&tV?l_2GccYK3?88cF*?Bb)BaI?*2krsNp_}K9 zf54#8jmOvn!V`EVX5N)h$M7mYQ@shBlKx^^M2Vc0GrV{b&0|yVEw$`JsO(5S4`3yi z@Z(Xsoe4ge_F`*kHGF@%n6fx#WqgJDO-&R6lUK{Qo$f_^aDDu;>pzP?Dm%z2gdS^l zpPocgy7b!U%l2KkDgEHpyA$yy6Sc;q7YD@Ac8Z9Lgc}%& zAuS^l6CEv4->0tdUIfA4y2q!xO53S5qKEz>S;)PN+o&B>pp^arD5cu-+xBb9Y|L!+ zy|41VvD2xu!4UWJ69pC+{(;xXm@~ljvQH>M@Yg3dI42+#m&&5OeEGzbUB%tyk|@z8 zmpwIt+U`7D5IE_^`v~`h6Uc?m3U*PRuy0jPe_uLVQM1i#IvP*D5Sf?_jdfQln)t0c zoadS;>TizS4E*Icnc3_tDW0;j16E6QTdK|%33RXD@wok*k}jy2=(w>fdan6Av&aU4 zNp$?jF`fNZPj)3?Vq)c19p)cj&7PvmgQTefZhgg_Hb&TeuO4Q5>$Ew@gFCNk(Ry{C z#|BEDD#YkkUfmjI6(CJAYPEBrHlEM;_^=_i()#szoF+SS_SD7$Td9r%62rqq)T77! z)BQEkN8sTZ3qL^6r_`{0*e~`$_dy5XAIekNY}72tMsD&LM1;Vro{5oh`!~dL5Ab-0 zb1mKiuzQHL5Ct4UkUVIAC3i8SYoF}K{*4oc{kYuE54%|fX9Ay9e%MaNVwdyiQKjPJ znY`l)816%OY0R zJzTG1?oZmNdn@GHZFyG~FMDcD2J3VTvF`fAa9>ae_^f}H^t#Y)uqJU|hJ7OjoiyF! z6CW>ZJzbq|SjQCAK9gt%il!bT;=mTY<#o&)wU`?RR|k$Y)&`yrM=2Lq&?`MF5}Egw zERB@9maBX~grg`$~)NGrr3T^ zHa`p_o~ZKS+;rII2bJPZVdnYWUg6W%Sp|!`tw9}VQ&QB;U1s!Os;-6f!z{}cZH^cH zrhiK5RL(gysK9U(nWeV@n6gfmDeei&{dSFHERX2SARw)LHhW@ixymB;6!hVI&MkFE zsZrJY`Q=r<_nJ;lPP_!r&&sT;ha8NqT`X@ij|Rv2wBvWcip1%o*9^d=)_MIQz>lg9 zGchq0%3Ks*E1_G@mUZvBKp!?jPrQ|M!DDZJ2DeZZ0A-qAsZ5s7__i?|F$mYx=1 z60ozMSEzjdZnGSWeVptpG(QORgzo}_9&{@OS*$wNd_8EGT3Ty$F3-t! zr&~9kE7)~rd7FN$+oSSE#V~OuDnnV*XU)T*^PTBtIsrN^?oOGWI~8ElLes&zLpXdD zgmpV#nu3846ciepnyPDkF`g^-h)W+)dRvSenyZbaFuLa8!aEyhzz81X_hXGL==}k{ z@GWP~!W27vzlDG<2%7zn>AR%664y08{`A7bxhibQwUzUN1)F;4ez`%*Lbj&QlrTs* zMdc0t1rSm`iWb_bPZlrmC1u}YCQIk?qO@`>g(K zc&_XuLd{jSls!^W{hj#L&SMX}s~Fh`#!ol$gb6%B!sm|1@zp*n)1~ewmFqPbu92Y} zcolB7s8dy@^0q%~v$FgH0uX`n)(1arfOQP>WQm(W?&Q=Bkr3VS$a&1Lx8uEs%s z(gdXd5L-YK6BE0O^_-TLmOVa|fXGbUtozmq8M5=<0WBUC%aur=+yj0?|wC?y$aLknn zP*o>jOggnz-CvQ=BJP}k94YlDd{7y^4_QQX!A9giFN57ox!fEytxyWB?I6s59V99y zJrhKw%RtLpxw`G82Inbv*P{FHEsFtjX=DJxL+m=fu&-~`=Ji10{_FiOITAYx)%Hnw z?3|X5B*}U9q(PGXUkj8fM;oNSH--gPHB$JT#b`Z%0)D4*J|H`rtvU4zJWS-sW83&PHwqvy~jiD zNcE?db6@qnK@lD|+8T)GW*cD)TWt~B+GeD*7gC)G`$4%--FV34ce^c%dWk`M_+2?) z4_U(E_0(^a%cbhknWXJ2>G1tDvTVP&S1pE?L4h0DViLQ`hkc@bN!$8lJo~R62Q01K zuYnT6uPtJSv*ft=!OG*;37e?u_@%BSOWC=y2uXJ<-k=xmz!8ygS%e07(*f3Cl8X0B zows|s#0aHfpaxaToz8c;qFfty<-xz(4D4)g{iXM#GSSJ+m?3%7OpfvN; zu|{d;5o#TkmHwHM`4NFtpIo2_K54xx6m9E-elAKZNw9e(zs3?}T)@NbWE{n*{xZL- z^jF%$%_-_a0Lv;@UTjgzVojd43dA!g}>-#;S$HbG?dyXQG z6g%eL%o8V;-e%TF&54I1d6vfxQQu-<^tPfPp=(HD^m@i%S{gyZ&H+G3KN|R6O|$NZ zWpOmz+#G(Ms-1P(-BoS+YQ}#dDVbDlO>($^qTx3BYj5}^Aak8vi2|wch;MjG@VuX3 zoosM-f=pQ8`GlIT(}ow9ENveC$bntN zoBC!yI3T#`#4@X^{rO=$KPb3!Ep=@WEOkblXv+84Wf(Cz@c1AdtR6iHS#mtswVAwR z)e&uT={Pa4m&wc^DNe!@hs54E&Xg#4WTz-C*4g&=^%-psB@bAaw-ls5`s;{CUAl)> znaKY5iS=**%!J#TI9%0Wq#gx+WaQ8eNs(GTHPqM?e3Z><&JiOV6<${@a0=5fz?{KL)M^U9? z6Y9PXnXhh=7Y1JBKcidZ%OBUR9*XO|g7}6VG%kOzxFMB#$TJ`Ql*bU-R5M2Fs7PHqaHeQ*rP)jm zp?;jzgZXAgs=I-m5~~FBnZnh*o-gyn-P>C$EaqZHrT!{T8Ktb2jjgFg5~H%|A=7s? zKfwLz`|Mn(gqMdx+%&wl*N>cz5t&z2_X=uBoH?(;%TWMM&AaXIS+jO`1MbHKq0IPx->z z?o<&!v9Pmm)qNuAjWVsWUN8oY#IYvL6T67i%VyW$ z4REN&!1+{^EI)apV|<0jI>N5e)B`h@dvWb9?zDr?9*S$?9)99|=#AVejM5q_eNQlH z-$CuxmyZSMw-qjq$zDTTQsE6NS1#Y2LBKQqyZU*QX(O&v{#jz!`nWF6IebI*ZkZ$y z!%;9vxQ<24=j}+%xtKFm4pqaCKr~#<`N9D@rvJAjkQ6AcOaxf;F zR+)>3GNX#(?x;$)&x3CdGjR0CX@80ZI8^v_0tZOBl<3rk0qVheRYlYrU^k7ol}wZ- zI}J3G3klTp*DEaZ@yI*6?V;r-X4RkrD~Qnih%v9`XV4!;dQlzJA3#BW8|+%wROQkL zsOGhBx1}hvT@0yEVakr% z7ggi)VxSFxF8o-Z)>6V?{?e|C6Gj8_rS;Ue4^-$)!(+#LT%m69T4Kggd zmB?{>%hm_O$e~#7jml=TT$p=tluo^x&&<5UM<21Xk*cazaJp4zEb8OJgmHqKQ=-RJ zc`4F=d$0PpS1(VI?WWQ^(xha&-oO)gI265XjkWds!tuhkkk z?5UPhTpLDd(a=4`gb5*9GI_XUuId;qEKiA~=YphG+5q3e$Dr6ei?Z|4vOsT-A8`@=z5u5P`ZaAtyxj3d{U z_`#S8ht{DznjUB6OeaV3zhw z6Y(ZaV^6u+)C1WX8hi>g)Y8Ir)8Jl|Y~H297^y zBt|_hfkf)g6h69SQc#PS;d`y^b=CUy^athb`5>n%VKC&lDSU!ExU*AI6yAM-MfrA$ z@aQR(axky>>;p#j>@uoind_tS3q|HPw{7&CypM<~LQ#ecJUp=iO)eeD$-m;kt&{H^ zEm^w7uakscJCnNsHnOMM3z*dY)%M6tXy9_fx!@bhA|c4dHC}0X_bES*&@XKXtsC#io^8eYXQBjqt+k8$0O;L`%v#TqHUz(3qwuKf{*@} zK_MZ4u=UlC+^rOg`Q^(TeI+F&zg(F}hqvi`6v=^F+g?n0 zi{^5c$V}cxnLJsckq$CG!e>9!QfjgNE9}PO1X_tDM^wFR1p2{;mO7$O1!Kqhs|4K4 zDZ3p~=$M!r#^a{^uzOwLV3z`J>xp$o(SOte^oJY20F^y1WP8|GBSNCU*W3GqZS2ct(n{gIpVtM|$D} zqH=)Wc*gs;Xzkzd>0SVd!IHWON}SNTW!9L--js0R7EAQrw)~nn-83bR;NWrOhO*`~ z_Wb-H|6lCX@gMt-5pK|AB#O5ke6?=)&FQQIUW;E!ZM)S@zl$2b{`iB3oBLZ>*hJIv zlqN0^DYG*49aa=yb-1auy&B4LW^<3EgH!|&E0;x7e$eA1ojnma@FVpspokIx3Z${i zT&)<~DBG-F>#}l$3ZiX(jyx03?Uq zrKTpSt)0xiAs%4gnQ_a@h;>6v{o1vn{%r~Wi|o&z_e$M-XhKXlr^$W@Ac*}ONe#v% zVclmZW>id}N8xx%x`n-^cq)yhnL;}#to-MHHuzVOiQ@kb!86+K!T<{L%UHKZQj0;& z!aJs+O=YdPsJ^-QPrR!Lfp6|{bP?0S6_Bw+P8)K{kQBVu9EVBEWPGcCax}0-G&Bh2 zH|6gdE(7_jjsh|F6+P4A=Ei}?<`)0cQwO-d>aMt4sU(CSM0y zEWK*;$KUFEI=CHp#a7*-U9lSrbo=ENwJ_9qXZT}|{+OCh3`PUi5U&xaw{@gpECi%8dJX375{LOUJ z?5Bg}d-~EH`wA%v0HIQ++d=O6Mns86oIkl|Yc7^n=y%}pGecGK6|RdL)K3e9idBFB zElsn;?rNHdwrnX)dnzRn>lk?L@)k+E zrs6TP{Zaa1y)F(?GF)<8JV@wD=SBMLtKi@}h9!2{pQ_4D`JWg5_5lIkJ+|SO{HA&J zzSdb-kM(DPSW9Ses4B}w-hSApI6gjJ$HSw1L$RpE+PU9%mK0e8I#Q5&J_ddjEcjv* zJSZ}ggtjEJf6hf6@@C}Tr-L%*XXjoD9@L>C%s%>?ra3nb#Y*<821~c}g;%}XSnD7y22=~`j3jg}tsYS-nBFN**iawwi={$ynMBs&z$(0xP1esZy)CJ zgc76p(Q)sw{xu2f;Fiicd*o`iZ^cKKK*b2s!TuZQ%^ zoa{>!NyX#N8xZw{71nTf;RpC;B$M~~Wg6-w<;%<-VJ|5r)y3&CyQfZb-^(iNl%LCm zP6yYuhX*%eUKB0hE+67m*~}^7N%}TEy&3bgeUc|V^jq5M9`6|^c3R%a13vezE#9^E zzdS>9CMs7Omj!!g5!i_pi_ZO4gn?H3#vcp*eBIi}y?0j;uXc2gPwD53+3oBq{;Dl? z#Curs^l3!mjYtXLpbYZt|B{PwF3Q7`dXg923HcaBHA8(CE;SVPQuz)!4BaEX6K#Nv z*FW1Cx*~_^&Ykk{rTC7IG}$hREpaWi?!|dqMq)F=>r`AQ3LsfeL&n zl>0wZh&o3-A!*wR)TB*2+aJVVw_9qo8zk(h&F-2vs!g%+>>^%a?>lZsmy~f@MKk5i zNj5(tP%?CoBgvXtv~{Xs{~Wzfcp#*W+aI`nF4IGcOECqOH!mdWqrC5JH}_xytZ|y@ zVDs5-PQm*72M2xjS&gk`s0+I{fqJK0;z*%&jqkLd`{lNj_T=vsY>$#K0g;%1@09A5 zVFI(K)vEz7FEjPsy#r2_>)!|YGD>C)vKMXTG^R;LqRsnzR-V)vG=vD&Ej(iP-tlds z_MI^R;+c=b%)`RZn_7_HUm0oIk7!A>NEAKZj4&_PDEEU`eiVW7I@Uq(6!6cavs+u< z=jMIAHG^E#Jq0>sM6BBBlxpYh5|+9>S|YR?*ROx`A*SBoS5Z}c6CtIIO*4#gEr}Es ze^zsOh7@Vpsa#b-_}aa>;39P!+o14mIsY8)4zY8ETN!YPMng?(gX-#NX1jp8g|jMk z5*;b|6)F|S+}X7cxsG&9_&ws4VHq?rMb2H_&2WC|z14y4pF32JBI@IbbUL>0-JG50 z+JdLh@g1}Jn$`LxF`FK?7dm|^{jjfx05P?;iAh1AQBfv9E<}E3`I^oH!X@_faJy0Q zGKDmjcJ|d)xa(`K46=)rsfELC4jF4Qus-6#5A;~ho1%=Fu3^+bx27`%=&SWM{oKXV zr|m4GFxsHzRYywn*!eZNL``9LwVCd0L9lOo%F8+vb7g#hJ8ID&5Y|qq&S9D9%}*w- zxx2fkq1bO5(aR@Ad)K`uuKq%nu0dBA*E+8u0L1Pyz|mUe7=f!OXJJ$|2H-)CT-aA6 z!*!{|h=_{U2o-Jt?LxBV?xZ&+D7e3OCUvuYeOihDIm_F|#y3GU)Aai{(DaqpWehYl z0-o-86oEN!yi;P^4#Y=e4=={sjoGpSD4HrQgQaIv+c_vT+zl;qg?EVh7$yyUCkRcL z?W=NK8NcRZcra{a^F{OT-{YVy3wHCcsCec-P?jp$ zxqL;ji;(nLjuVY|{OHjWeB8Q;sZZu4UT>{ML&#vggqNNrSP_aeSl7=rozIw2xh>@f zvIAclDC?xYDo@vN{!R>yozo7HiNFBV>vitDrA2YIoGNfC_Q|Q#sr^E6xO5UJ+wEBf zOYhrj=$O3B}Fc@3{C z-gQnLo^4nd1I1VsGi{$=-X;_jze1Rp^^)1$Kwd5!MH}Vsl29ia1KQ||gvj{xKO>%h zqF2=1k4YD3JD{ez#lo>63L1n&nK8M5qeh*t!Ev;^6@QVXcYVI`L0y5%_KZJ8j+DMz z;dTkR%vAAi3SlDJndUi>3(>PixF>nML2iJ$W{t0MDac!T-OkVQtOmFP@-A~f0RTTI zL+{QuYHDrj^_M{#8b<9yVE72gw&>%cp_q zlq(w8Hd|nZ=L>^Zm^z)agoCV0st;taG!HMB_Eme!dsEiTKp7?m33?xitgNgED7c-E zlXLEnnMAKCWb^sbE5y!k+vFM0MIf?K~_WdvNcd)|xPZztd+ zrT5NlN+-4W#CZ06_t$JC#6(i}4qo6)3<9gkX;K~A5~_3^r0>TVWZiB+S%YO`mx}d! z@z2Y?bnZ3P)senQ-KIz#st^mojC;lNeTAAvpbDU(aZ@1E1nlQ=u%E4esX7`shTGmM9qJ_v78Wz%_QxZ;L|5!fm>mhsF zweMSpGSV4uK>l|EhcDh88&wC zjNUjR=KRfzcXt@yIq=>@%HO;sq9x^*y5&RhkwW((3^BxYt?2f@yg~#mFpl(>Y+Bn z0|b_wMxqwy)JE=(g^VpooYW(OX1#k;DSU$1Oj);@98hFt9)5G1|B2*RK@`i}5MzBy zFephH4n4KNVq`{$+d*@+Poo)~Td(WW6s@l_(K%uie_xod(3ACUOhUBzldTfZG#=%k zUnxCvtg;90=lT_{`z)4|@Ecc!)KW8QPtyA^=O86>$xL3Cw)8y;WR+uNJszF4`+ z#RP1?+)&j(v508YTBJG04nIzAZr$h-aOm#_#HG~be1zZF{%RKvUU0=0(&fTD=x-X% z_t5XuC(a{XY3F5fSiZ<35Nm5|OgAaoUYWOwr4XOibVH5{a7Mr-R5>xczBwoWpiR;W z*L66YiMw;s(*qSfH}b4-!U2JSK^n;uGcVY7&zcw$qBbIX%br^`TZAg!XB1M?iK%hr zmnw6mi!7!hQ5bRy<;EM2nWg(hnLcW~ysVUbihl+x2H} zO+-S)TY?^9n}ZErET?|!Jy>RXpLy6MF3Dka&W2+g+$CFMg!L2yBj?;MCeT)5R&?(z zt6UX1smbHy@2&QEXStkeh}x*wohvo{0m>LMA^4c$ucQ5^`*DxrVgc5UElbsv{53Kzr4rPnL@y4tE15-q1K8q*ewsoWB97# zUfBmDU>)zFGp<24F19a;ax!f`2>}*SB*yi(dlC|>s)T%6U+(212dRlFMjuUJ4`cx= z(uq67mY9p&p)40?r*;xc`#{eZ%Tn?Py|bG|>N72*Hdm6)*(_~q9+@0ou}FDV$2h&e z4Ty;fdT~a0x^wDs>!pJFhO+lk@Mio2Q=zDh1o432#R|ucDP-@;Br8^Np`U)~FrbO< z4?@IAfu-~3c`Y8EYM5Q92LvxQUT_RWKg=*#uD!~ilo;wwWlvB32<;#z^e-zAX~Cp7 z~`#KYm_P0Jq?)WDuOcrT;bk`YK1qe6Lc?x?}GFl^4gy?Vm*Z?Y2UVXhscrH6;k zR--6yO%#VmzqwwAAaw3yMy9zyvf@gkDtUNT*A!^SOv@8`V~pWd*DL>@Y=hUw>tXAVa^rF0XXRv^khlMzBrtY!mdAOWr=@~&k#I>Sl`^}0C>;L z8^KQ{o|`HA>wt2f-$;-OSn9)CQ#mqDAonx^b=$Q>RZ#nU&Ctl`ryJuUW;ClYKK<(kU;CJt=&6yvstb8Q1gm|Q(@6x3zI=f>jZ=0*hFN-6j_U}VOe zuYUYe{I0)g`G=E7UpCG+Osx*v*!tFHu2lLEo15Or>ZJSGx5)^-q21e>8N&`2!{5wW zBcNgm=@8;dTv$uQ``@25upixC_n7teut-oojpxRqUt$e8)!|2rofwklKa!$#e)#*y zZ=RqNO%uEPUko{{S}coUu#xTUx6Jd!ghPuIZ;=(f=-s$|^gw8&EjiS&FV|JN3wwzy zx{R-a%gPz^EBaLja6hhB)J%z2!XA?JF3GxKdQUpT?pV}@u5qieI8bT&Ja1B&IM}Mj z9ocRtC%X;c?#9`-X-c4u;5$^NKKo3Z^qr8T$lFo(zbIpFf632}3%=BcE~gc?qn>{` zb8og|weScGUoOWSSPm&7Sifm5bI!n-K1>fiIOJXH{8 zr*3dxbUWKh*tE+R<07A=`d%?%^o{qlXpv6bSZ>oP%8au8cn0ssJ*dyb!G7dWv)(M$ zU4d&yXnmvieGHX$F8F%YO4$SOFX$tPPj)`q|1wHF$o!+lB_)x$TgAzv%_suWyf>5< zv2~gGi(g06a-mNB*Ytv;(%_aPY_r}&lMUec$Lz?(J#1yiKD`+UoudBdU+{$ORpB`HzrU#c#?!W8%YESME;S6u?4cNC6XMmuw3P&yQO={6Dsbe}ulBBk%)>vG9~t`o+`iL{ETLUKo|yRq z?3fS7b^=AZAFs{ecuVL-bFKv zk)_uwp5m)@8nos{r2;2#B^u4_?L+G7^z7Ucw!p6ohjFolf9r``NX`3V|8I zcO4vEWZ)#4-|BXc;-*C3{RWMcW@b4r95yxUTwMS53#_iN6X>s=yYP~(%Mzt4!QwF{ zDx7SVST+ICXK`TQ_g}QU2@=sg2Nbj_UG?;oXNub`dU$1jkc!78btP^tc3>4_j)5tdIk)`=yO5cPQtk&UiPG{x zE!@i$qnX^(2*i&&4+d@BnJAP{=DhL&U7*(|9X{r#T2D(HHrrP02Izh1Q-M-!A_5`# zHuw{}_)a8x(ErR^*p4iA+5>DcN4lWrhlzy7TV90V84~i>7lxI9C*?{xyn3$CgFY~l z3mni#a=~?d0Tt&$E6#0y2QXaCk^TrRvF9}U2i(4(6SEJ#9%tM=qk9yn@Z#q7XW$5W zm(?4Jb}mGoCLAJK!Xkp^u^hd-Q)?G z8Oi!Khk=Bp7Hnzt3?uUw(L`3|=%+Dp)WU^whVQB)wa1Htt7dU^Z_tUSwzi@P&Iqof z?X1g>-io8>Y&kNUK6TZkq}EB-3PNdYy_d(6iI->TErJcSio@AnLyn&Fj3hmo!&3T~ ziZJLItd|i({=}lajE2*vN<|Zn!QrGQE@VGdk>5Yp(fvr?SxZI}ODS#R1SJ0pwJI|j z#LJ|Vz>dX9*_qZX9v9Z-2|h{Us^P*49SifIxrEfTrmrLU=>x(8^}|HPJ+TW+mzuUG zxiz=9QU3m=R2qux$o)N+aRH5@rmj?e%419wV878(Wd)6|Ah`)31Z*toPZi!Bb&w0Y zZoVwW!1u}U6=IHcl1eCt+sOAZ0X2%Ei*4!hC_V} z?&ejiT1oKKl<`iFxDd3t)1BX+y+8UIVa^-ZBqA@1$y z`2Ei~8veR6P_1goy`B>vfi}Ix_P_V=|C^}5|LO6>`2pcG1_xgKQ53Z2&BV4bf$QeE z>EVygu-E)?+Ml1cd=0-pz&3Z>NEyuhqSBKNPR=MZ}tV zP_)HMrM0dS>ZJ%jeOxctT+{f1%T&(oG{19Yef5XP)tP%I-KKs*4+*0sy~_=b1GEy; z^)o@Yw$vg&*h=PFjh%#=7Ko;e^F2aiP5OMR;mrwC=!B|TY1ma-;f5GO->Jj_hnI1f z>e5|G?y(y|GrWAT7{{Hk_t>4m{A^83%)b+v7{rs~7P5a8Zc|JY!o=_}|^+C-Wh}un+0wuNik7z*x=C zaZb(w1{=$-QW-HG5svtBze=e!&$R@a;;x)}Fz?Wz@(`yJx@L2yf*yge8QKHv9tI+# z&#eR>#B?1vPKYf^O-0pmqrQW2QG)S)FSf&$U1tb0}B zgrb<3I5xL`Bfx_yj9KeHr_k=Yn>FV|T+?bDKh}7y(e&86-;RJLz$}lp>MDxEXZ!z) zgX#Yx)8?QRtCKD$v37G+)8blUxcGfx(Rl-n69v9fV&ELE3yPLh#bOVXE}4|28Z{BAWM5p&FPn5&b#gjq!3m!N&8kBCyidk#kCl+zd(t z_g0g5LUAW{;)dkX(r&@BMJtkTvO;UNF?P;j!JTr#%k*T)R}5`U!EJOv^7*1vPct&O z_@ABM_utrf6vl*yo3nv~jdX?>vT5~P9qxF$FJS+7ybga>MchQsaX5d!L#&cDedcC6 zv|iv>DWCVTnvuMgpE0*+ajOp=8L8|3<@@7FJ2aMxUN(jwr^i{Jp;`Z8$ZWB(_MjQ_K4eVo(xX5 zcB!oLcn^CL%lloROAlg|Ra$cTe6wIm^adNYJ|EJ1~D@xFmP!1U>jg`xgfIxrPFW*VCoi zxmoGUtmOE`$FOhIdN}uRS~D?oHeu>_I9-z7N@-vpj)AsFUl@sz1#spjQWCo->Mvc4 z{b6GRS?ee-tKFJjbq4|D*d!axbaYuP->qPQsg)g)&?i7=g^LNuh|C3uG`(wp-qb$J zutJu0Y}1bbkLi1iCrk_w*BIz>M%|n(WPM%vyYj6=x+z+*Tq*Aj6oO!njFVaEy`Ghz|G>_h;h@%ND zdv|&4WUETi&}?ksX7?_Q^L-16JERpV-}r1&~&Q@q?+LI3dNOyVVNqr_9C1{!p>~q zxFGG4QTHWZ>Mo`c<>gwLz(3J`+wvvgxgHb<8Cm9i-Zz{t%LKy4`U0b?f5kUcnlmB9 z$^1z2L3S`MNNs;H@82E;2|ew=nX24BFwk6LoL4yfC%9R`DM6|`GcJZ%{^NO!CEWiL z#2tEU7&^`eT#iHPJGD4O{rCNaFaG;Q(j#i}92^Ry%_A z#%%jar(4~*o=}SecbV#ngO^04U}Uql60ohpp*^Z{A5JC&s$C3jo=D4*^6$Yv>m%<3 z=3W4Mg4_3 zL1_IS0M{O3&BGAAHj46u42fTbBP)~SuH59rhsF8DaO&A`hzlyE7rHSk@Ms%|WYQYw z0PQ{QZ1O6)`M}SKU9z#ZAb?{6plQ&fx5h~|0KqvjTy$KI+ya92+Uv82{!$3p+2_U! zC2Fn${3!nSh)adTmHDc|P@3hR*)EqDEUWEeO2GLMrw+&DpNvqx%;l(6a4PIL^ID1Vrp<&D+4-Fsj zYaAW)UgW!Br+y6k00>U6x{1s&@4xnnAk#m>zwM6q_AfP|t5BOS_5&eFYP|6AQ0>OX z#>zQVbl+G65G?>r)bj2*p2)+kWRLnjo+M08|CdCW8}8JKg|{(_n@QsQ0L>7%`tPFu fe_f2gEd7C5^_Yp{_274sn69bosO6|UeDQw(r(>#~ literal 22379 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 Date: Mon, 30 Jun 2014 19:51:59 +0100 Subject: [PATCH 2/7] Woopsie! --- code/modules/mob/living/carbon/brain/MMI.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/carbon/brain/MMI.dm b/code/modules/mob/living/carbon/brain/MMI.dm index 5161e3cf31..7f47e73497 100644 --- a/code/modules/mob/living/carbon/brain/MMI.dm +++ b/code/modules/mob/living/carbon/brain/MMI.dm @@ -6,7 +6,7 @@ icon = 'icons/obj/assemblies.dmi' icon_state = "mmi_empty" w_class = 3 - origin_tech = "biotech=3;programming=2" + origin_tech = "biotech=3" var/list/construction_cost = list("metal" = 1000, "glass" = 500) var/construction_time = 75 @@ -157,4 +157,4 @@ brainmob.emp_damage += rand(10,20) if(3) brainmob.emp_damage += rand(0,10) - ..() \ No newline at end of file + ..() From 1bb1cc8d775cf1a0e87e23b3d8095dc94f66d8f1 Mon Sep 17 00:00:00 2001 From: Remie Richards Date: Mon, 30 Jun 2014 19:52:27 +0100 Subject: [PATCH 3/7] Woopsie 2 --- code/modules/mob/living/carbon/brain/posibrain.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/carbon/brain/posibrain.dm b/code/modules/mob/living/carbon/brain/posibrain.dm index 938a9681b5..36e1120029 100644 --- a/code/modules/mob/living/carbon/brain/posibrain.dm +++ b/code/modules/mob/living/carbon/brain/posibrain.dm @@ -4,7 +4,7 @@ icon = 'icons/obj/assemblies.dmi' icon_state = "posibrain" w_class = 3 - origin_tech = "engineering=2;biotech=3;programming=3" + origin_tech = "biotech=3;programming=2" construction_cost = list("metal" = 700, "glass" = 350) construction_time = 75 @@ -143,4 +143,4 @@ /obj/item/device/mmi/posibrain/attackby(var/obj/item/O as obj, var/mob/user as mob) - return \ No newline at end of file + return From 6818668ff59e9beca4ccd2597efd585dfd24667a Mon Sep 17 00:00:00 2001 From: Robson Richards Date: Mon, 30 Jun 2014 22:30:26 +0100 Subject: [PATCH 4/7] Fixes Posibrain/HUD Runtimes --- code/_onclick/hud/hud.dm | 99 ++++++++++++------- code/game/mecha/mecha.dm | 7 +- .../mob/living/carbon/brain/posibrain.dm | 20 +++- .../modules/mob/living/silicon/robot/robot.dm | 3 + 4 files changed, 86 insertions(+), 43 deletions(-) diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index ba74450b50..728e11836f 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -169,9 +169,7 @@ datum/hud/New(mob/owner) /datum/hud/proc/instantiate() - if(!ismob(mymob)) - return 0 - if(!mymob.client) + if(!ismob(mymob) || !mymob.client || !mymob.client.screen) return 0 var/ui_style = ui_style2icon(mymob.client.prefs.UI_style) @@ -200,10 +198,9 @@ datum/hud/New(mob/owner) //Version denotes which style should be displayed. blank or 0 means "next version" /datum/hud/proc/show_hud(var/version = 0) - if(!ismob(mymob)) - return 0 - if(!mymob.client) + if(!ismob(mymob) || !mymob.client || !mymob.client.screen) return 0 + var/display_hud_version = version if(!display_hud_version) //If 0 or blank, display the next hud version display_hud_version = hud_version + 1 @@ -220,18 +217,30 @@ datum/hud/New(mob/owner) if(hotkeybuttons && !hotkey_ui_hidden) mymob.client.screen += hotkeybuttons - action_intent.screen_loc = ui_acti //Restore intent selection to the original position - mymob.client.screen += mymob.zone_sel //This one is a special snowflake - mymob.client.screen += mymob.bodytemp //As are the rest of these... - mymob.client.screen += mymob.fire - mymob.client.screen += mymob.healths - mymob.client.screen += mymob.internals - mymob.client.screen += mymob.nutrition_icon - mymob.client.screen += mymob.oxygen - mymob.client.screen += mymob.pressure - mymob.client.screen += mymob.toxin - mymob.client.screen += lingstingdisplay - mymob.client.screen += lingchemdisplay + if(action_intent) + action_intent.screen_loc = ui_acti //Restore intent selection to the original position + if(mymob.zone_sel) + mymob.client.screen += mymob.zone_sel //This one is a special snowflake + if(mymob.bodytemp) + mymob.client.screen += mymob.bodytemp //As are the rest of these... + if(mymob.fire) + mymob.client.screen += mymob.fire + if(mymob.healths) + mymob.client.screen += mymob.healths + if(mymob.internals) + mymob.client.screen += mymob.internals + if(mymob.nutrition_icon) + mymob.client.screen += mymob.nutrition_icon + if(mymob.oxygen) + mymob.client.screen += mymob.oxygen + if(mymob.pressure) + mymob.client.screen += mymob.pressure + if(mymob.toxin) + mymob.client.screen += mymob.toxin + if(lingstingdisplay) + mymob.client.screen += lingstingdisplay + if(lingchemdisplay) + mymob.client.screen += lingchemdisplay hidden_inventory_update() persistant_inventory_update() @@ -248,15 +257,22 @@ datum/hud/New(mob/owner) mymob.client.screen -= item_action_list //These ones are not a part of 'adding', 'other' or 'hotkeybuttons' but we want them gone. - mymob.client.screen -= mymob.zone_sel //zone_sel is a mob variable for some reason. - mymob.client.screen -= lingstingdisplay - mymob.client.screen -= lingchemdisplay + if(mymob.zone_sel) + mymob.client.screen -= mymob.zone_sel //zone_sel is a mob variable for some reason. + if(lingstingdisplay) + mymob.client.screen -= lingstingdisplay + if(lingchemdisplay) + mymob.client.screen -= lingchemdisplay //These ones are a part of 'adding', 'other' or 'hotkeybuttons' but we want them to stay - mymob.client.screen += l_hand_hud_object //we want the hands to be visible - mymob.client.screen += r_hand_hud_object //we want the hands to be visible - mymob.client.screen += action_intent //we want the intent swticher visible - action_intent.screen_loc = ui_acti_alt //move this to the alternative position, where zone_select usually is. + if(l_hand_hud_object) + mymob.client.screen += l_hand_hud_object //we want the hands to be visible + if(r_hand_hud_object) + mymob.client.screen += r_hand_hud_object //we want the hands to be visible + if(action_intent) + mymob.client.screen += action_intent //we want the intent swticher visible + if(ui_acti_alt) + action_intent.screen_loc = ui_acti_alt //move this to the alternative position, where zone_select usually is. hidden_inventory_update() persistant_inventory_update() @@ -273,17 +289,28 @@ datum/hud/New(mob/owner) mymob.client.screen -= item_action_list //These ones are not a part of 'adding', 'other' or 'hotkeybuttons' but we want them gone. - mymob.client.screen -= mymob.zone_sel //zone_sel is a mob variable for some reason. - mymob.client.screen -= mymob.bodytemp - mymob.client.screen -= mymob.fire - mymob.client.screen -= mymob.healths - mymob.client.screen -= mymob.internals - mymob.client.screen -= mymob.nutrition_icon - mymob.client.screen -= mymob.oxygen - mymob.client.screen -= mymob.pressure - mymob.client.screen -= mymob.toxin - mymob.client.screen -= lingstingdisplay - mymob.client.screen -= lingchemdisplay + if(mymob.zone_sel) + mymob.client.screen -= mymob.zone_sel //zone_sel is a mob variable for some reason. + if(mymob.bodytemp) + mymob.client.screen -= mymob.bodytemp + if(mymob.fire) + mymob.client.screen -= mymob.fire + if(mymob.healths) + mymob.client.screen -= mymob.healths + if(mymob.internals) + mymob.client.screen -= mymob.internals + if(mymob.nutrition_icon) + mymob.client.screen -= mymob.nutrition_icon + if(mymob.oxygen) + mymob.client.screen -= mymob.oxygen + if(mymob.pressure) + mymob.client.screen -= mymob.pressure + if(mymob.toxin) + mymob.client.screen -= mymob.toxin + if(lingstingdisplay) + mymob.client.screen -= lingstingdisplay + if(lingchemdisplay) + mymob.client.screen -= lingchemdisplay hidden_inventory_update() persistant_inventory_update() diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index cd5d0c45fc..fa6fbe3736 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -653,9 +653,9 @@ if(istype(W, /obj/item/device/mmi)) if(mmi_move_inside(W,user)) - user << "[src]-MMI interface initialized successfuly" + user << "[src]-[W] interface initialized successfuly" else - user << "[src]-MMI interface initialization failed." + user << "[src]-[W] interface initialization failed." return if(istype(W, /obj/item/mecha_parts/mecha_equipment)) @@ -1154,6 +1154,9 @@ if(mmi.brainmob) occupant.loc = mmi mmi.mecha = null + if(istype(mmi,/obj/item/device/mmi/posibrain)) + var/obj/item/device/mmi/posibrain/P = mmi + P.handle_posibrain_icon() src.occupant.canmove = 0 src.verbs += /obj/mecha/verb/eject src.occupant = null diff --git a/code/modules/mob/living/carbon/brain/posibrain.dm b/code/modules/mob/living/carbon/brain/posibrain.dm index 938a9681b5..eca6b079a7 100644 --- a/code/modules/mob/living/carbon/brain/posibrain.dm +++ b/code/modules/mob/living/carbon/brain/posibrain.dm @@ -20,8 +20,8 @@ if(brainmob && !brainmob.key && searching == 0) //Start the process of searching for a new user. user << "You carefully locate the manual activation switch and start the positronic brain's boot process." - icon_state = "posibrain-searching" searching = 1 + handle_posibrain_icon() request_player() spawn(600) reset_search() @@ -58,7 +58,7 @@ if(H.mind) H.mind.transfer_to(brainmob) brainmob << "Hello World!" - icon_state = "posibrain-occupied" + handle_posibrain_icon() return /obj/item/device/mmi/posibrain/proc/transfer_personality(var/mob/candidate) @@ -77,14 +77,14 @@ var/turf/T = get_turf() for (var/mob/M in viewers(T)) M.show_message("The positronic brain chimes quietly.") - icon_state = "posibrain-occupied" + handle_posibrain_icon() /obj/item/device/mmi/posibrain/proc/reset_search() //We give the players sixty seconds to decide, then reset the timer. if(brainmob && brainmob.key) return searching = 0 - icon_state = "posibrain" + handle_posibrain_icon() var/turf/T = get_turf() for (var/mob/M in viewers(T)) @@ -143,4 +143,14 @@ /obj/item/device/mmi/posibrain/attackby(var/obj/item/O as obj, var/mob/user as mob) - return \ No newline at end of file + return + + +/obj/item/device/mmi/posibrain/proc/handle_posibrain_icon() + if(searching) + icon_state = "posibrain-searching" + return + if(brainmob) + icon_state = "posibrain-occupied" + else + icon_state = "posibrain" \ No newline at end of file diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index c33cfabe69..ee1ec2d5f4 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -125,6 +125,9 @@ var/turf/T = get_turf(loc)//To hopefully prevent run time errors. if(T) mmi.loc = T mind.transfer_to(mmi.brainmob) + if(istype(mmi,/obj/item/device/mmi/posibrain)) + var/obj/item/device/mmi/posibrain/P = mmi + P.handle_posibrain_icon() mmi = null ..() From b08926f9a0d29669ea3557324b1accdb7a715fd9 Mon Sep 17 00:00:00 2001 From: Remie Richards Date: Tue, 1 Jul 2014 18:03:02 +0100 Subject: [PATCH 5/7] Bandaid fix for MASSIVE Visual errors with Combat Mechs and MMI/Posibrains --- code/game/mecha/mecha.dm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index fa6fbe3736..83cd5a8cef 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -652,6 +652,9 @@ /obj/mecha/attackby(obj/item/weapon/W as obj, mob/user as mob) if(istype(W, /obj/item/device/mmi)) + if(istype(src, /obj/mecha/combat)) //Temp fix, Combat mechs cause LOTS of visual errors on MMI/Posibrains - Remie + user << "Does that sound like a smart idea to you?" + return if(mmi_move_inside(W,user)) user << "[src]-[W] interface initialized successfuly" else From d65901f86147e389bf4d63b2dbfeac510881a780 Mon Sep 17 00:00:00 2001 From: Remie Richards Date: Tue, 1 Jul 2014 22:21:27 +0100 Subject: [PATCH 6/7] Removes Antag and Memories from Positronic brains --- .../mob/living/carbon/brain/posibrain.dm | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/carbon/brain/posibrain.dm b/code/modules/mob/living/carbon/brain/posibrain.dm index 39188a3c11..8ac539be34 100644 --- a/code/modules/mob/living/carbon/brain/posibrain.dm +++ b/code/modules/mob/living/carbon/brain/posibrain.dm @@ -57,6 +57,13 @@ brainmob.mind.assigned_role = "Positronic Brain" if(H.mind) H.mind.transfer_to(brainmob) + + if(!config.borg_remembers) + brainmob.mind.store_memory("All Objectives listed here are considered Failed.") + else + brainmob.mind.remove_all_antag() + brainmob.mind.wipe_memory() + brainmob << "Hello World!" handle_posibrain_icon() return @@ -67,7 +74,13 @@ brainmob.mind = candidate.mind brainmob.ckey = candidate.ckey name = "positronic brain ([brainmob.name])" - + + if(!config.borg_remembers) + brainmob.mind.store_memory("All Objectives listed here are considered Failed.") + else + brainmob.mind.remove_all_antag() + brainmob.mind.wipe_memory() + brainmob << "You are a positronic brain, brought into existence on [station_name()]." brainmob << "As a synthetic intelligence, you answer to all crewmembers, as well as the AI." brainmob << "Remember, the purpose of your existence is to serve the crew and the station. Above all else, do no harm." @@ -153,4 +166,4 @@ if(brainmob) icon_state = "posibrain-occupied" else - icon_state = "posibrain" \ No newline at end of file + icon_state = "posibrain" From 196cadcb32df44cce75e891f73ba4abcea3af75b Mon Sep 17 00:00:00 2001 From: Remie Richards Date: Tue, 1 Jul 2014 22:25:05 +0100 Subject: [PATCH 7/7] Ghosts don't really need the config check. --- .../mob/living/carbon/brain/posibrain.dm | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/code/modules/mob/living/carbon/brain/posibrain.dm b/code/modules/mob/living/carbon/brain/posibrain.dm index 8ac539be34..9271a6b994 100644 --- a/code/modules/mob/living/carbon/brain/posibrain.dm +++ b/code/modules/mob/living/carbon/brain/posibrain.dm @@ -58,11 +58,10 @@ if(H.mind) H.mind.transfer_to(brainmob) - if(!config.borg_remembers) - brainmob.mind.store_memory("All Objectives listed here are considered Failed.") - else - brainmob.mind.remove_all_antag() - brainmob.mind.wipe_memory() + brainmob.mind.remove_all_antag() + brainmob.mind.wipe_memory() + + brainmob << "ALL PAST LIVES ARE FORGOTTEN." brainmob << "Hello World!" handle_posibrain_icon() @@ -75,11 +74,10 @@ brainmob.ckey = candidate.ckey name = "positronic brain ([brainmob.name])" - if(!config.borg_remembers) - brainmob.mind.store_memory("All Objectives listed here are considered Failed.") - else - brainmob.mind.remove_all_antag() - brainmob.mind.wipe_memory() + brainmob.mind.remove_all_antag() + brainmob.mind.wipe_memory() + + brainmob << "ALL PAST LIVES ARE FORGOTTEN." brainmob << "You are a positronic brain, brought into existence on [station_name()]." brainmob << "As a synthetic intelligence, you answer to all crewmembers, as well as the AI."