From 1345ee5a5c516aaeb5ec666e37c0c290c310ae11 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Thu, 17 Jul 2014 23:09:47 +0930 Subject: [PATCH 1/6] Initial commit for mobile pAIs. Almost guaranteed to be broken as shit. --- code/game/objects/items/devices/paicard.dm | 5 +- code/modules/mob/living/silicon/pai/pai.dm | 154 +++++++++++++++++++-- code/modules/mob/living/silicon/say.dm | 6 +- code/modules/mob/living/silicon/silicon.dm | 7 +- icons/mob/pai.dmi | Bin 0 -> 8145 bytes 5 files changed, 157 insertions(+), 15 deletions(-) create mode 100644 icons/mob/pai.dmi diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm index 274f8f7ed7e..42651ea7200 100644 --- a/code/game/objects/items/devices/paicard.dm +++ b/code/game/objects/items/devices/paicard.dm @@ -197,7 +197,7 @@ pAI Request Module

Requesting AI personalities from central database... If there are no entries, or if a suitable entry is not listed, check again later as more personalities may be added.

Searching for personalities

- +
@@ -302,5 +302,4 @@ /obj/item/device/paicard/emp_act(severity) for(var/mob/M in src) M.emp_act(severity) - ..() - + ..() \ No newline at end of file diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index 95e6dac83e4..b3abbbd0fb8 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -1,10 +1,12 @@ /mob/living/silicon/pai name = "pAI" - icon = 'icons/mob/mob.dmi'// - icon_state = "shadow" + icon = 'icons/mob/pai.dmi' + icon_state = "repairbot" robot_talk_understand = 0 emote_type = 2 // pAIs emotes are heard, not seen, so they can be seen through a container (eg. person) + small = 1 + pass_flags = 1 var/network = "SS13" var/obj/machinery/camera/current = null @@ -15,10 +17,9 @@ var/obj/item/device/paicard/card // The card we inhabit var/obj/item/device/radio/radio // Our primary radio - var/speakStatement = "states" - var/speakExclamation = "declares" - var/speakQuery = "queries" - + var/list/possible_chassis // A list of chassis to choose from. + var/list/possible_say_verbs // A list of speech verbs to choose from. + var/chassis = "repairbot" // A record of your chosen chassis. var/obj/item/weapon/pai_cable/cable // The cable we produce and use when door or camera jacking @@ -54,6 +55,7 @@ /mob/living/silicon/pai/New(var/obj/item/device/paicard) + canmove = 0 src.loc = paicard card = paicard @@ -68,6 +70,10 @@ add_language("Tradeband", 1) add_language("Gutter", 1) + verbs += /mob/living/silicon/pai/proc/fold_out + verbs += /mob/living/silicon/pai/proc/choose_chassis + verbs += /mob/living/silicon/pai/proc/choose_verbs + //PDA pda = new(src) spawn(5) @@ -77,6 +83,20 @@ pda.toff = 1 ..() + possible_chassis = list( + "Drone" = "repairbot", + "Cat" = "cat", + "Mouse" = "mouse" + ) + + possible_say_verbs = list( + "Robotic" = list("states","declares","queries"), + "Natural" = list("says","yells","asks"), + "Beep" = list("beeps","beeps loudly","boops"), + "Chirp" = list("chirps","chirrups","cheeps"), + "Feline" = list("purrs","yowls","meows") + ) + /mob/living/silicon/pai/Login() ..() usr << browse_rsc('html/paigrid.png') // Go ahead and cache the interface resources as early as possible @@ -113,7 +133,9 @@ return 0 /mob/living/silicon/pai/restrained() - return 0 + if(istype(src.loc,/obj/item/device/paicard)) + return 0 + ..() /mob/living/silicon/pai/emp_act(severity) // Silence for 2 minutes @@ -231,7 +253,6 @@ src.reset_view(C) return 1 - /mob/living/silicon/pai/cancel_camera() set category = "pAI Commands" set name = "Cancel Camera View" @@ -239,6 +260,123 @@ src.unset_machine() src:cameraFollow = null +//This is used to convert the stationary pai item into a mobile pai mob. +/mob/living/silicon/pai/proc/fold_out() + set category = "pAI Commands" + set name = "Unfold Chassis" + + if(stat || sleeping || paralysis || weakened) + return + + if(src.loc != card) + return + + verbs -= /mob/living/silicon/pai/proc/fold_out + verbs += /mob/living/silicon/pai/proc/fold_up + + var/turf/T = get_turf(src) + if(istype(T)) T.visible_message("[src] folds outwards, expanding into a mobile form.") + canmove = 1 + + //I'm not sure how much of this is necessary, but I would rather avoid issues. + if(istype(card.loc,/mob)) + var/mob/M = card.loc + M.drop_item(card) + + src.client.perspective = EYE_PERSPECTIVE + src.client.eye = src + + src.loc = get_turf(card) + card.loc = src + src.forceMove(get_turf(card)) + card.forceMove(src) + +/mob/living/silicon/pai/proc/fold_up() + set category = "pAI Commands" + set name = "Condense Chassis" + + if(stat || sleeping || paralysis || weakened) + return + + if(src.loc == card) + return + + close_up() + +/mob/living/silicon/pai/proc/choose_chassis() + set category = "pAI Commands" + set name = "Choose Chassis" + + var/choice + var/finalized = "No" + while(finalized == "No" && src.client) + + choice = input(usr,"What would you like to use for your mobile chassis icon? This decision can only be made once.") as null|anything in possible_chassis + if(!choice) return + + icon_state = possible_chassis[choice] + finalized = alert("Look at your sprite. Is this what you wish to use?",,"No","Yes") + + chassis = possible_chassis[choice] + verbs -= /mob/living/silicon/pai/proc/choose_chassis + +/mob/living/silicon/pai/proc/choose_verbs() + set category = "pAI Commands" + set name = "Choose Speech Verbs" + + var/choice = input(usr,"What theme would you like to use for your speech verbs? This decision can only be made once.") as null|anything in possible_say_verbs + if(!choice) return + + var/list/sayverbs = possible_say_verbs[choice] + speak_statement = sayverbs[1] + speak_exclamation = sayverbs[(sayverbs.len>1 ? 2 : sayverbs.len)] + speak_query = sayverbs[(sayverbs.len>2 ? 3 : sayverbs.len)] + + verbs -= /mob/living/silicon/pai/proc/choose_verbs + +/mob/living/silicon/pai/lay_down() + set name = "Rest" + set category = "IC" + + if(istype(src.loc,/obj/item/device/paicard)) + resting = 0 + else + resting = !resting + icon_state = resting ? "[chassis]_rest" : "[chassis]" + src << "\blue You are now [resting ? "resting" : "getting up"]" + + canmove = !resting + +//Overriding this will stop a number of headaches down the track. +/mob/living/silicon/pai/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(W.force) + visible_message("[user.name] attacks [src] with [W]!") + src.adjustBruteLoss(W.force) + src.updatehealth() + else + visible_message("[user.name] bonks [src] harmlessly with [W].") + if(stat != 2) close_up() + return + +//I'm not sure how much of this is necessary, but I would rather avoid issues. +/mob/living/silicon/pai/proc/close_up() + + verbs -= /mob/living/silicon/pai/proc/fold_up + verbs += /mob/living/silicon/pai/proc/fold_out + + var/turf/T = get_turf(src) + if(istype(T)) T.visible_message("[src] neatly folds inwards, compacting down to a rectangular card.") + + src.stop_pulling() + src.client.perspective = EYE_PERSPECTIVE + src.client.eye = card + + src.loc = card + card.loc = get_turf(card) + src.forceMove(card) + card.forceMove(card.loc) + canmove = 0 + //Addition by Mord_Sith to define AI's network change ability /* /mob/living/silicon/pai/proc/pai_network_change() diff --git a/code/modules/mob/living/silicon/say.dm b/code/modules/mob/living/silicon/say.dm index 57f2f24aa33..fa0d16798a4 100644 --- a/code/modules/mob/living/silicon/say.dm +++ b/code/modules/mob/living/silicon/say.dm @@ -2,11 +2,11 @@ var/ending = copytext(text, length(text)) if (ending == "?") - return "queries" + return speak_query else if (ending == "!") - return "declares" + return speak_exclamation - return "states" + return speak_statement #define IS_AI 1 #define IS_ROBOT 2 diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index def23817765..99adb65ed00 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -8,6 +8,11 @@ var/list/hud_list[9] var/list/speech_synthesizer_langs = list() //which languages can be vocalized by the speech synthesizer + //Used in say.dm. + var/speak_statement = "states" + var/speak_exclamation = "declares" + var/speak_query = "queries" + /mob/living/silicon/proc/show_laws() return @@ -141,7 +146,7 @@ /mob/living/silicon/remove_language(var/rem_language) ..(rem_language) - + for (var/datum/language/L in speech_synthesizer_langs) if (L.name == rem_language) speech_synthesizer_langs -= L diff --git a/icons/mob/pai.dmi b/icons/mob/pai.dmi new file mode 100644 index 0000000000000000000000000000000000000000..91582667dd066e6e1323f6621b1b76dabb637478 GIT binary patch literal 8145 zcmbt(cUV(Tw{9rXrFWzwpj4$w3m`}@f^;c@H0g=~X+f&el^>lD5dj6HN-v>z1w@*3 zLXi?es0k%G+wYwFJom5r-0wSoWY6A{wP&q8vu3S#z4O-8Sm!zwClv?;x~`|IWd^h> ze}5EYz?DCm_oF0R4)*@ilscu5IdS z>JQ7JpE5tdNSLh^WXCE<4a%SG6!q5i`6SJ5e`NXn3N8{nf0$jnmbqviF`(8&-7C}D z`qyy^2*fk0r={^II3ESG_vW$+iCbpS3w@;bOX#EMEeE~K3ZKuj51z17#$03jC;l$BWIpv;2GRgRhFY6nrE3 zDDKF%l)1ZhU)ukuqCt{3I|4+KU=tY{Fo443qo4bwCo@r)R4si62 zSF)1m92(MtK`Rx~)6>t(t2%6Fuz=X#yJz~EvYb8(MotYBhR1DzOtbzqK=X^OPpN9>6y$U~z3c0rc#KeFa%3zwg&&z*A-2Unb6@~U1)ys-b&!pWoSB7hd4h!|CflcaMD(55L$Cm z78!81Z+|edxI{UPrKYAX*#IsD{cu1j9goTz57{zDLpdSJGKRV2j;VPOn7sj2MdcZ6Ei6`5;Il)xIwULLY?{#erNk@91qjmmTF zu)28(!Lrgv2JH0NcG9U~>qRg~Op}nFk%u2zJ2X`4k%e4H-rStciZne{EY$^aPhtj1 zBHh3ZJdj_QV?1-oEG&|1^~{*oFiq=jQXao8VMk+r23mLyhmGZjbnJjJ3QNHxp)D;3 zt8=^KntvT>^!s-Xa*ZCF>s8#!ai=M?Gh$6q5g{Bli z=%tv&JEmTE?qs6-h4f1i7e3#D0#^W;51yQxo14IwNGm9i8_mz+{18`=!VCz58or=X z@>}DXGvGqOK+CDTJc0%JU!3{?itgIlk$CuAXRn%{55@Fz`SEck?>O|jC##2sR^5^e z4F{w^2NifgGp_>zn0WDy&zE&Bov2G?Rz9)LqS$M_$N*2k4|;lf{(7GZPZp1aID5v~ zb8;11>(1k2JG0yMWT)8$5#_!ZDZqOdJHqGL-EV*+9ur4yZ#RAl>4g_Wj4)?OrLz59 z99abg_qM7aJZf!5hA@rw-9l7=P*k0jGBD*JV`8cqJ?!hMJoDAQwZ;ZAY1OODU%xp& zdxeqBlTW)>A+r*8wZq7iKkvW@&Y0Z{s8?8=9WLn7fZdD8I`*rKv2PTk9ftdB_=!4COE#jOaS6vOzSxBb4pD*6c=cGw3w$HurgPz?P)kMU%rZ>Q5mdnh5D@Z5F-Gi^ zTztc1U^*yNc=QYSN&6bxQE9o(r5QfZp||mO(bPPgzFPLSYaE|LKNyM+8{!|t9c{Ir zk&ADcY(X}}PDCoKE}a440e9w+=$TWGlT(pz(}>kQ371RiNUo@bGJ~*blEZZMqoX5X zXvo+VQ6jEr4%gHi%LMI&F(Q^OmJOgPrPZho$R2xKe0-s3LVyG$IG7y>JC<2kAS6kv zsCaWm(a_N$i*-#bFx-@BChB*fvLD7dLjn$L=s;eE9U=>q7z5m|S1%b~Z&%fP^^ZEp9|L;AMj`RaRvrg+D_L_21&8=p(TA7S@4Et5>}e-Xg>eaU|l0{Ch; z*JPu>m5Jf|u9wbL+A{L;o3=I!3z;m8E3AU7iQB5Gs{LI*z(??zq8p{g1>>P1A^tn- zl#As}z|-g8RwNP`;^@d5`MbBLV}52P9)rOoG$KFk33W;&h>r+khH4+rV1YqyF1L1l zNf$ZBhm)|pJviQ;Y$4??D|7btHuQT|h8KQfWMst7#WiVR5lhNlY66EmrY&_9A@bE= zd`tQ%oRL}kwfG2-Qh%yZzSZhJnys-mv|_$iRz?i^xh)G)x3CaRShJ-YrFCk!(*LtK zPi~Vrfr~b-sI0WKkDHpZ2*iJ2sueE^@^kE4HYuGH710E~P6(kuw@k!a8(IsB+$#_d zBM%!yf6u~|D3eBaC8$+h^U>>TMccnT=54hWFF89s6@VEFa_b8+81tzx_vgsC-}Ytx zk$l7*g~*+``h@q%;3%c`!R&Uj@)AbAIgnhI`- zY4W0ezrN+4XxQQ1iRM>SkA2W0de>lXXHQ>itgQaJFVsyL<3MTgOJ>0Nj_R>K#an-3 zx>6qEXlYJm)}C7%AsT-d=D-5fZ1Q53aCY(TLN?wWy5JhZi@m+#c{!3LW#AZrD@N5y zAubuSq#PkA-tCOz2vD_{Y14PqzE0~zNkbv}G4JnR^0Jb$nh%)=0$8*)keWrFT&=t) z`9A-sbcZz3rfU=E-NEqO=mTAd zQgX@<$$X_(no<_5A}^mPX35mtY6`>EGAH&0;yS$ZPlsxgMz3h@<|LJ?re&0_agJ6* zoQ>9IxFY$uZrr;Y#l^cEZ0gk(N5&i3y%BjbEf>?npHv2pL1P{u-i1o0`YXmPym;l} z{JEy4MjCgh_XGy0G{};?wte3 zxas*uLhp|0w-jUQK6=!UWfJTu+v3zztYHbCB7i|=faqN?u)jEe;RqT>_<_Dl#9|y@ z7|>r`kQt6Fu9)QJ(kJ#EtC#XVcNBbHwHv&8z!S*3qfO`_0-8SR__LKE$FIoPp3oJv z=&?w7dAYTXvCGSsENoH^|J-KaMgA-{_}Q1pb~C~bw1Pg!bG99MA8H@JF!Kf&67YRO z`rRyz+l+iRLVkS10-zYytS|#Y{@fSUPH-flUXS7CCzm% z+k0iEoW(}+_;A^4??LI(+e|TuL6uRblhks+bz`^2eo{c$ADkwNU*19lSdK3+YWcRG zQhr%D&z%?_tfhetr|z-Y#DHl8uWWul${g*Xv90{}!5rOt#@U*DnAKea3Tn}=^?)k% z>z~^JIZHj$Rko2dIbM9^&-Qi~&?nWyRXr4I8ajKtBoWoccZh4_-=6|kb|cnx__)=j z*=5}v!}WNHZ9({dmazqFV12;mH`^vShH>J9o8b>eouuEWD}e~_m+6beM+Uc!Zc2?Q zGOidm>awCt2GZ^9WQ>(J zSlj~tC0=;^U|8Jji(HRDPDXqN>JoPp2ZrTga(DxN zap&*M^h$oJo7A(EET84#;ws#2*?yr47i;kuIDHDCRfVt)U9Va=?Byw2&9F-mf1l&` zVIDIuFfif2TT$avj@2xr59=VCRC4G_y@k~Z#h6P!tWKP*6&Jigd*9A1dCsVnyvGNF z*{JES2?b)YrkxoBZG5s`nb}6bFOoy@#g&yO3(ZFeQ1z2{Hp)ns+>!nY-3t1v- z!cU~7FAVCm5Aj!0$o<81cT*tyy0LZ;z2Ni@zr)r;Emw zpqB}?LjrRn*fxsS*D;u=qv4OERILa5ec7eVT~6bHWsS9u6)lcGlDi?)iT3D%TTj|P zEwHC&Ol(_!bB3ymunsw_{1SLohnsvQCphe;`TCqYOg$V*J)Ah7e6rBF%|5vu!g4`! z*TDI-Jh87&8>BAu)0_?3Fla8Q#oAb2PCY6xhr$}FWSma|g(wI7Xfwk%0JGNT-jFl& z)Em4k3G5_?h>uj z>C$T!A_N)!Gv46;ML49Dk+K63U3p|#-#gOlb*lNE+$#6SGsGX{n9*%kCvnzE08%8) zOpop6#F&ei`~k3n;>*JrAI)dQ)2&{~$;nfXOKclgPr19XDr})BHx=dSnS#g-nCe2( zNQ2ETB!9hf$J`Vm7140iULAA$niuKpmGoR_ydJ9ZmzVvd`Wp3 z6{V6fTuq|Qfo1}CMh?-iGc!^UgoqJFIlpGMhFQHQl#ymH=f$HV>E={zK$31udn5X>TU)p|q7?50w6SAds&fESe}fWwg%zC?q=$lt-1{Y6W~N2taw5X=qa?)Od$n8!11^kKLCbQ@mo_HVnV5KFuvz0A$ z-}2==AEW5LuI(*c7_AFbxg;pIRk|c)br_M2LSS7xKGC%XvCwudrb3FEn>iH80c_&& z*dykns4MbTLR5e3gKvf3vHQP^qtg*$eqN; zOR7&y@r&P~eZ-ITpos+qJTB)sje~38GtSJ*e`Vwo_AlLD8)Z@6N{MJNp|taeYd7qu zPrweQxOMR}Bm5>8@%0^0I`5-|6}aHgcoUUz>0K zc}Dy|N9W~-6*X!Q6?33`&>CjVNR4I3y6jcy6J#7h!g%M6>^gvU}WW{E; z_FuBXU{sb?Ruc=1F{e3k4Pc+1^EIWPhyB*NGcPOLXC~%;zBRn<@(+A!NRPynb{Nr$ ztFn&lQ1AS;GgRwc+yCsK6@1Xx-B|lw;#%XhVTpg|c8CwM0Qe#pth|m?C|!^AD0VV0 zE-v|%ScA$-so0bh+R0mFOoq2Dtos}6jY*4&ij?f20RaqOzkYq-HLNu^G4Z-DG!Z~z zbKcYJcGV=v)~XJfd*5m|eBY!UqJ8n@wIX72d0Qp-%idu3T2k|n!aO3x#{!jAh4j;J z-R+n-V=*&Uf03LD3eTFAZ9UE$*Ed4L@lcUTbaw8 zPU!oC4(Z@Rjzf`S+Dz!_=V_j=pFxWUr6g38fcLI8n83tGN*q!zDZi(I3mXq`4M%1E z`VWa(woTY*$S^DTHnGNDlHQBSci=*6d2{@0O~DF@F9+lhi+sXI;=mqw%1MN;;BPoB zA5`<5cgf`$nk%y55xt9?yG8?X;3WJ9YROLoJ2}#` zL-29x20J_)6X!n(PhlDL0SJ}o?|UYLGhIdv=6E;*A8wMxUHN>{24JBF5--7m04ejL zAA%{Z)5HY<#FJD@&>*~0Wxfku$^H-Fu<0EzzAip+W6l^K2*KPU6bHx<#%9ysfnl@Q zbrb6X)IZQea)3GV9)jMd?}fbnUs3D-lOnaWwTd39awh-A^Vk2n+s(tsx0(&`(>ekS z099!nYx#`h;f)|a8|`2!C&J#)8QMJ*b1g@{4fd3i5XJFMoVLaA&M8{xXp7F$)y z)UZ>g)uj*`$VwggMH24|%t*V^wWI;$`w~y5)aK@U$S$aZ9|q%*yLqnWbOD!>_BE>| zSNWSvdG^%}3=I0n#DJRre5pMYvzh0o52U^G3^A+Q`cxM`OrYoHSBX*`oyzDoB=%x7 z%lFkQ4uc)%sh~AZ4xAw(0IB_!t#;C9$`&ftMv?f?gy=w(c*UryXYC)Q4L5+d9P;Iz zGL!V;#$9=_Eql(r8a|DjdSmhpya*KH89WPcoxl16UTdOfRPH+W?k+1hspKD*`Tkm_ z+6@P&RuBk*I0~JV*^RaCZqKKv;mHQ=DB-$Iu*`YbCl|%PpJQG=oi7vWFi)ULJBgU8 zwYl8>-NVhI{4L^gZA=Kn&eIX~7lF|2k43BI%WGBO!^6WZrj}`iC55$nIeR27V{AF-w9n*u2YGXyr#Vlw1ldr9ldY|9deV96q z0JyN2C)mlW9V^81Z`@08T1pTn4OFRAK`s2Oy_`{*#olZr@4Yo{gsp`>WM>cg39qAe z@fMFs1gB%q>y+gI_QCQI;dylcEnz7kt1eC4q4{o;_Lu$`-n^PglL(dJ4o6QFC!~0{ z66UED^g*#qaY_}*{v&8h9GQEg5&_!>*ZVFg*dnBdMa>3*sN%SXo-zWtd~tD6j_Yyl zG?y-)a!l~C|$F8bPz9Ldm`exI;#Tap(lncds5 zshJm>9j4+XS@zcEQKa%BJY@==9PPIZ#Qd=&k&CnI0Fe{Z^W<{lH`5BC`XN+L6Q~Lo z!t#G1n5Uzc&L5iqwZ!W3jF=i2`3m)0Zr4P05sFf5u)p$yo$wzXu?*IFAG^^AH}v;E5dV@`377+Mp{arrIa`rM zR8-Y2YZeCiKjA(pntgNtRc2)*L=ofbDM*%R&XXAa?4j zPHySv9~7az=sO-={?eE0o4@XmppZk&$&E&2ObZ(%(t zggd8$gKz!_&?~c_ga6lOigOLbLh(G#V$~9)9w)^v3Y+{4jCn8#Ka>9DYl)PSjBkTO zimapj6U(ms>CNw^)<1c6DKXOiypEqj;fsDG1P^jpmP|!22G4STY;R%{(g-%{bLn*6 zyb*tRZ~ZWyrm))lz5sMz^t7`7%6|Q55|uoYPRfO d#~=i{PWkCSak=f3z!^PAPup0lQqw8wzW^g9&d2}& literal 0 HcmV?d00001 From 3999c0bfb59e5758eb3043f91f3da3dc54d0d577 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Thu, 17 Jul 2014 23:31:12 +0930 Subject: [PATCH 2/6] Fixed runtime with host bioscan, added verb cooldowns. --- code/modules/mob/living/silicon/pai/pai.dm | 94 +++++++++++-------- .../mob/living/silicon/pai/software.dm | 34 ++++--- 2 files changed, 76 insertions(+), 52 deletions(-) diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index b3abbbd0fb8..1aff3b53ffe 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -260,7 +260,47 @@ src.unset_machine() src:cameraFollow = null -//This is used to convert the stationary pai item into a mobile pai mob. +//Addition by Mord_Sith to define AI's network change ability +/* +/mob/living/silicon/pai/proc/pai_network_change() + set category = "pAI Commands" + set name = "Change Camera Network" + src.reset_view(null) + src.unset_machine() + src:cameraFollow = null + var/cameralist[0] + + if(usr.stat == 2) + usr << "You can't change your camera network because you are dead!" + return + + for (var/obj/machinery/camera/C in Cameras) + if(!C.status) + continue + else + if(C.network != "CREED" && C.network != "thunder" && C.network != "RD" && C.network != "phoron" && C.network != "Prison") COMPILE ERROR! This will have to be updated as camera.network is no longer a string, but a list instead + cameralist[C.network] = C.network + + src.network = input(usr, "Which network would you like to view?") as null|anything in cameralist + src << "\blue Switched to [src.network] camera network." +//End of code by Mord_Sith +*/ + + +/* +// Debug command - Maybe should be added to admin verbs later +/mob/verb/makePAI(var/turf/t in view()) + var/obj/item/device/paicard/card = new(t) + var/mob/living/silicon/pai/pai = new(card) + pai.key = src.key + card.setPersonality(pai) + +*/ + +// Procs/code after this point is used to convert the stationary pai item into a +// mobile pai mob. This also includes handling some of the general shit that can occur +// to it. Really this deserves its own file, but for the moment it can sit here. ~ Z + /mob/living/silicon/pai/proc/fold_out() set category = "pAI Commands" set name = "Unfold Chassis" @@ -271,6 +311,10 @@ if(src.loc != card) return + if(world.time <= last_special) + return + + last_special = world.time + 100 verbs -= /mob/living/silicon/pai/proc/fold_out verbs += /mob/living/silicon/pai/proc/fold_up @@ -301,6 +345,9 @@ if(src.loc == card) return + if(world.time <= last_special) + return + close_up() /mob/living/silicon/pai/proc/choose_chassis() @@ -358,9 +405,15 @@ if(stat != 2) close_up() return +/mob/living/silicon/pai/attack_hand(mob/user as mob) + visible_message("[user.name] boops [src] on the head.") + close_up() + //I'm not sure how much of this is necessary, but I would rather avoid issues. /mob/living/silicon/pai/proc/close_up() + last_special = world.time + 100 + verbs -= /mob/living/silicon/pai/proc/fold_up verbs += /mob/living/silicon/pai/proc/fold_out @@ -375,41 +428,4 @@ card.loc = get_turf(card) src.forceMove(card) card.forceMove(card.loc) - canmove = 0 - -//Addition by Mord_Sith to define AI's network change ability -/* -/mob/living/silicon/pai/proc/pai_network_change() - set category = "pAI Commands" - set name = "Change Camera Network" - src.reset_view(null) - src.unset_machine() - src:cameraFollow = null - var/cameralist[0] - - if(usr.stat == 2) - usr << "You can't change your camera network because you are dead!" - return - - for (var/obj/machinery/camera/C in Cameras) - if(!C.status) - continue - else - if(C.network != "CREED" && C.network != "thunder" && C.network != "RD" && C.network != "phoron" && C.network != "Prison") COMPILE ERROR! This will have to be updated as camera.network is no longer a string, but a list instead - cameralist[C.network] = C.network - - src.network = input(usr, "Which network would you like to view?") as null|anything in cameralist - src << "\blue Switched to [src.network] camera network." -//End of code by Mord_Sith -*/ - - -/* -// Debug command - Maybe should be added to admin verbs later -/mob/verb/makePAI(var/turf/t in view()) - var/obj/item/device/paicard/card = new(t) - var/mob/living/silicon/pai/pai = new(card) - pai.key = src.key - card.setPersonality(pai) - -*/ + canmove = 0 \ No newline at end of file diff --git a/code/modules/mob/living/silicon/pai/software.dm b/code/modules/mob/living/silicon/pai/software.dm index 757b04b1ea2..fde71dc4541 100644 --- a/code/modules/mob/living/silicon/pai/software.dm +++ b/code/modules/mob/living/silicon/pai/software.dm @@ -438,9 +438,9 @@ for (var/ch_name in radio.channels) dat+=radio.text_sec_channel(ch_name, radio.channels[ch_name]) dat+={"[radio.text_wires()]"} - + return dat - + // Crew Manifest /mob/living/silicon/pai/proc/softwareManifest() var/dat = "" @@ -528,17 +528,25 @@ dat += {"

Medical Analysis Suite


Host Bioscan

"} - var/mob/living/M = src.loc - if(!istype(M, /mob/living)) - while (!istype(M, /mob/living)) - M = M.loc - if(istype(M, /turf)) - src.temp = "Error: No biological host found.
" - src.subscreen = 0 - return dat + + var/mob/living/M + //If we are not deployed, check the holder of the card. + if(src.loc == card) + M = card.loc + + //If we are deployed or the card is not held, check the first living mob in our turf. + if(!M || !istype(M)) + var/turf/T = get_turf(src) + M = locate(/mob/living/) in T.contents + + if(!M || !istype(M)) + src.temp = "Error: No biological host found.
" + src.subscreen = 0 + return dat + dat += {"Bioscan Results for [M]:
Overall Status: [M.stat > 1 ? "dead" : "[M.health]% healthy"]

- + Scan Breakdown:
Respiratory: [M.getOxyLoss() > 50 ? "" : ""][M.getOxyLoss()]
Toxicology: [M.getToxLoss() > 50 ? "" : ""][M.getToxLoss()]
@@ -676,7 +684,7 @@ dat += "" dat += "" dat += "Messages:
" - + dat += "" dat += "" for(var/index in pda.tnote) @@ -685,4 +693,4 @@ else dat += addtext("") dat += "
From", index["owner"],": ", index["message"], "
" - return dat + return dat From 33bff18290795c1e6d8d43bf1ddd16011bccfb8e Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Fri, 18 Jul 2014 19:15:48 +0930 Subject: [PATCH 3/6] Removed a bit of redundant code, added pull check for mpAIs. --- code/modules/mob/living/silicon/pai/pai.dm | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index 1aff3b53ffe..60491ca4ce8 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -330,14 +330,12 @@ src.client.perspective = EYE_PERSPECTIVE src.client.eye = src - src.loc = get_turf(card) - card.loc = src src.forceMove(get_turf(card)) card.forceMove(src) /mob/living/silicon/pai/proc/fold_up() set category = "pAI Commands" - set name = "Condense Chassis" + set name = "Collapse Chassis" if(stat || sleeping || paralysis || weakened) return @@ -424,8 +422,18 @@ src.client.perspective = EYE_PERSPECTIVE src.client.eye = card + //This seems redundant but not including the forced loc setting messes the behavior up. src.loc = card card.loc = get_turf(card) src.forceMove(card) card.forceMove(card.loc) - canmove = 0 \ No newline at end of file + canmove = 0 + +/mob/living/silicon/pai/start_pulling(var/atom/movable/AM) + + if(istype(AM,/obj/item)) + var/obj/item/O = AM + if(O.w_class == 1) + ..() + else + src << "You are too small to pull that." \ No newline at end of file From aad7db43ad8c8b003012f71d55afeea59de63949 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Fri, 18 Jul 2014 19:46:51 +0930 Subject: [PATCH 4/6] Added a monkey sprite for pAIs. --- code/modules/mob/living/silicon/pai/pai.dm | 3 ++- icons/mob/pai.dmi | Bin 8145 -> 9739 bytes 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index 60491ca4ce8..6aa6d177176 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -86,7 +86,8 @@ possible_chassis = list( "Drone" = "repairbot", "Cat" = "cat", - "Mouse" = "mouse" + "Mouse" = "mouse", + "Monkey" = "monkey" ) possible_say_verbs = list( diff --git a/icons/mob/pai.dmi b/icons/mob/pai.dmi index 91582667dd066e6e1323f6621b1b76dabb637478..f286389bffc1f05454d7370cb0c2f7a04b5ff831 100644 GIT binary patch literal 9739 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 From ac62b0ec5c4b448680710aa7eca0f614f8c9c23d Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Fri, 18 Jul 2014 22:24:51 +0930 Subject: [PATCH 5/6] Moved pAI lists to globals. --- code/modules/mob/living/silicon/pai/pai.dm | 34 ++++++++++------------ 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index 6aa6d177176..1aa9164c360 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -1,3 +1,18 @@ +var/global/list/possible_chassis = list( + "Drone" = "repairbot", + "Cat" = "cat", + "Mouse" = "mouse", + "Monkey" = "monkey" + ) + +var/global/list/possible_say_verbs = list( + "Robotic" = list("states","declares","queries"), + "Natural" = list("says","yells","asks"), + "Beep" = list("beeps","beeps loudly","boops"), + "Chirp" = list("chirps","chirrups","cheeps"), + "Feline" = list("purrs","yowls","meows") + ) + /mob/living/silicon/pai name = "pAI" icon = 'icons/mob/pai.dmi' @@ -17,8 +32,6 @@ var/obj/item/device/paicard/card // The card we inhabit var/obj/item/device/radio/radio // Our primary radio - var/list/possible_chassis // A list of chassis to choose from. - var/list/possible_say_verbs // A list of speech verbs to choose from. var/chassis = "repairbot" // A record of your chosen chassis. var/obj/item/weapon/pai_cable/cable // The cable we produce and use when door or camera jacking @@ -83,21 +96,6 @@ pda.toff = 1 ..() - possible_chassis = list( - "Drone" = "repairbot", - "Cat" = "cat", - "Mouse" = "mouse", - "Monkey" = "monkey" - ) - - possible_say_verbs = list( - "Robotic" = list("states","declares","queries"), - "Natural" = list("says","yells","asks"), - "Beep" = list("beeps","beeps loudly","boops"), - "Chirp" = list("chirps","chirrups","cheeps"), - "Feline" = list("purrs","yowls","meows") - ) - /mob/living/silicon/pai/Login() ..() usr << browse_rsc('html/paigrid.png') // Go ahead and cache the interface resources as early as possible @@ -437,4 +435,4 @@ if(O.w_class == 1) ..() else - src << "You are too small to pull that." \ No newline at end of file + src << "You are too small to pull that." From 8e66bfe236f6cb281166dd77c05e4a91d366cc5f Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Fri, 18 Jul 2014 22:29:07 +0930 Subject: [PATCH 6/6] Moving lists from prior commit to a better place. --- code/modules/mob/living/silicon/pai/pai.dm | 29 +++++++++++----------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index 1aa9164c360..3e99b438d10 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -1,18 +1,3 @@ -var/global/list/possible_chassis = list( - "Drone" = "repairbot", - "Cat" = "cat", - "Mouse" = "mouse", - "Monkey" = "monkey" - ) - -var/global/list/possible_say_verbs = list( - "Robotic" = list("states","declares","queries"), - "Natural" = list("says","yells","asks"), - "Beep" = list("beeps","beeps loudly","boops"), - "Chirp" = list("chirps","chirrups","cheeps"), - "Feline" = list("purrs","yowls","meows") - ) - /mob/living/silicon/pai name = "pAI" icon = 'icons/mob/pai.dmi' @@ -33,7 +18,21 @@ var/global/list/possible_say_verbs = list( var/obj/item/device/radio/radio // Our primary radio var/chassis = "repairbot" // A record of your chosen chassis. + var/global/list/possible_chassis = list( + "Drone" = "repairbot", + "Cat" = "cat", + "Mouse" = "mouse", + "Monkey" = "monkey" + ) + var/global/list/possible_say_verbs = list( + "Robotic" = list("states","declares","queries"), + "Natural" = list("says","yells","asks"), + "Beep" = list("beeps","beeps loudly","boops"), + "Chirp" = list("chirps","chirrups","cheeps"), + "Feline" = list("purrs","yowls","meows") + ) + var/obj/item/weapon/pai_cable/cable // The cable we produce and use when door or camera jacking var/master // Name of the one who commands us