From 41c20ca400ac12eda324babd20366ecb73bd21ce Mon Sep 17 00:00:00 2001 From: Casey Date: Sat, 25 Feb 2023 14:28:57 -0500 Subject: [PATCH] Merge pull request #14536 from Heroman3003/protean Makes speech bubbles manually selectable, adds a whole bunch of new ones --- code/_helpers/global_lists_vr.dm | 20 ++++++++++++++++++ code/modules/mob/living/carbon/brain/brain.dm | 11 ++++++---- .../human/species/species_shapeshift_vr.dm | 9 ++++++++ code/modules/mob/living/say.dm | 4 +++- code/modules/mob/living/voice/voice.dm | 4 +++- code/modules/mob/mob_defines.dm | 2 ++ code/modules/mob/typing_indicator.dm | 10 +++++++-- icons/mob/talk_vr.dmi | Bin 3937 -> 6571 bytes 8 files changed, 52 insertions(+), 8 deletions(-) diff --git a/code/_helpers/global_lists_vr.dm b/code/_helpers/global_lists_vr.dm index acd2be67ea..02c6b5f495 100644 --- a/code/_helpers/global_lists_vr.dm +++ b/code/_helpers/global_lists_vr.dm @@ -946,6 +946,26 @@ var/global/list/event_wildlife_roaming = list( ) +var/global/list/selectable_speech_bubbles = list( + "default", + "normal", + "slime", + "comm", + "machine", + "synthetic", + "synthetic_evil", + "cyber", + "ghost", + "slime_green", + "dark", + "plant", + "clown", + "fox", + "maus", + "heart", + "textbox", + "posessed") + // AREA GENERATION AND BLUEPRINT STUFF BELOW HERE diff --git a/code/modules/mob/living/carbon/brain/brain.dm b/code/modules/mob/living/carbon/brain/brain.dm index cfa6421c6f..d4c40c6179 100644 --- a/code/modules/mob/living/carbon/brain/brain.dm +++ b/code/modules/mob/living/carbon/brain/brain.dm @@ -48,7 +48,7 @@ /mob/living/carbon/brain/runechat_holder(datum/chatmessage/CM) if(isturf(loc)) return ..() - + return loc /mob/living/carbon/brain/set_typing_indicator(var/state) @@ -59,8 +59,11 @@ loc.cut_overlay(typing_indicator, TRUE) return - if(!typing_indicator) - init_typing_indicator("[speech_bubble_appearance()]_typing") + var/cur_bubble_appearance = custom_speech_bubble + if(!cur_bubble_appearance || cur_bubble_appearance == "default") + cur_bubble_appearance = speech_bubble_appearance() + if(!typing_indicator || cur_typing_indicator != cur_bubble_appearance) + init_typing_indicator("[cur_bubble_appearance]_typing") if(state && !typing) loc.add_overlay(typing_indicator, TRUE) @@ -80,7 +83,7 @@ var/datum/transcore_db/db = SStranscore.db_by_mind_name(mind.name) if(db) var/datum/transhuman/mind_record/record = db.backed_up[src.mind.name] - if(!(record.dead_state == MR_DEAD)) + if(!(record.dead_state == MR_DEAD)) if((world.time - timeofhostdeath ) > 5 MINUTES) //Allows notify transcore to be used if you have an entry but for some reason weren't marked as dead record.dead_state = MR_DEAD //Such as if you got scanned but didn't take an implant. It's a little funky, but I mean, you got scanned db.notify(record) //So you probably will want to let someone know if you die. diff --git a/code/modules/mob/living/carbon/human/species/species_shapeshift_vr.dm b/code/modules/mob/living/carbon/human/species/species_shapeshift_vr.dm index c8e67a39cd..1c2d5dff7d 100644 --- a/code/modules/mob/living/carbon/human/species/species_shapeshift_vr.dm +++ b/code/modules/mob/living/carbon/human/species/species_shapeshift_vr.dm @@ -191,3 +191,12 @@ if (visible) visible_message("\The [src] shifts and contorts, taking the form of \a [new_species]!") regenerate_icons() + +/mob/verb/select_speech_bubble() + set name = "Select Speech Bubble" + set category = "OOC" + + var/new_speech_bubble = tgui_input_list(src, "Pick new voice!", "Character Preference", selectable_speech_bubbles) + if(new_speech_bubble) + to_chat(src, "Your voice changes.") + custom_speech_bubble = new_speech_bubble \ No newline at end of file diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index 4e34ec87a3..fb78f1b550 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -341,7 +341,9 @@ var/list/channel_to_radio_key = new //The 'post-say' static speech bubble var/speech_bubble_test = say_test(message) //var/image/speech_bubble = image('icons/mob/talk_vr.dmi',src,"h[speech_bubble_test]") //VOREStation Edit. Commented this out in case we need to reenable. - var/speech_type = speech_bubble_appearance() + var/speech_type = custom_speech_bubble + if(!speech_type || speech_type == "default") + speech_type = speech_bubble_appearance() var/image/speech_bubble = generate_speech_bubble(src, "[speech_type][speech_bubble_test]") var/sb_alpha = 255 var/atom/loc_before_turf = src diff --git a/code/modules/mob/living/voice/voice.dm b/code/modules/mob/living/voice/voice.dm index 2752292ee2..901807583a 100644 --- a/code/modules/mob/living/voice/voice.dm +++ b/code/modules/mob/living/voice/voice.dm @@ -109,7 +109,9 @@ if(comm) var/speech_bubble_test = say_test(message) //var/image/speech_bubble = image('icons/mob/talk_vr.dmi',comm,"h[speech_bubble_test]") //VOREStation Edit - Commented out in case of needed reenable. - var/speech_type = speech_bubble_appearance() + var/speech_type = custom_speech_bubble + if(!speech_type || speech_type == "default") + speech_type = speech_bubble_appearance() var/image/speech_bubble = generate_speech_bubble(comm, "[speech_type][speech_bubble_test]") spawn(30) qdel(speech_bubble) diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index ceb49fa47a..2529936a7a 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -218,6 +218,8 @@ var/typing var/obj/effect/decal/typing_indicator + var/cur_typing_indicator + var/custom_speech_bubble = "default" var/low_priority = FALSE //Skip processing life() if there's just no players on this Z-level diff --git a/code/modules/mob/typing_indicator.dm b/code/modules/mob/typing_indicator.dm index bdd5865a9b..5bbce21356 100644 --- a/code/modules/mob/typing_indicator.dm +++ b/code/modules/mob/typing_indicator.dm @@ -12,6 +12,9 @@ return I /mob/proc/init_typing_indicator(var/set_state = "typing") + if(typing_indicator) + qdel(typing_indicator) + typing_indicator = null typing_indicator = new typing_indicator.appearance = generate_speech_bubble(null, set_state) typing_indicator.appearance_flags |= (RESET_COLOR|PIXEL_SCALE) //VOREStation Edit @@ -23,8 +26,11 @@ cut_overlay(typing_indicator, TRUE) return - if(!typing_indicator) - init_typing_indicator("[speech_bubble_appearance()]_typing") + var/cur_bubble_appearance = custom_speech_bubble + if(!cur_bubble_appearance || cur_bubble_appearance == "default") + cur_bubble_appearance = speech_bubble_appearance() + if(!typing_indicator || cur_typing_indicator != cur_bubble_appearance) + init_typing_indicator("[cur_bubble_appearance]_typing") if(state && !typing) add_overlay(typing_indicator, TRUE) diff --git a/icons/mob/talk_vr.dmi b/icons/mob/talk_vr.dmi index 0f192acf2d6fb935ea6846d53dea90f744e6beec..a6f366aaadc3d7143d032da06502d9c62b1d7b80 100644 GIT binary patch literal 6571 zcmcIpc|4SD+a6R>o}`q@GWAp@B}<-Cwy7kKbx4*JqeLFbRI-m56)8dthQyR5$})CY zM@krjY}rkiG1(esGUGPeck6lI=X>AZ_ix`H*Y9_&_kCUGah~UKT=)IN+REg&O?x&$ zAdufo|2%gA0uggvD;qa}JrP&4EWm~^_@d*zbMC%wcmKM5?=O@O1QPh7Fsa06N>lpL z4W4Sa|8H9?)1JC)QH_#bcqV`7`jg7=KVP3weInrKeB6CO@$~rsw=hBvjIkdmz>u)> zq`vRINW%SumNUn_*mF5W>f;`{dzLv)4qMPn*0Kp%_n}u`ZIzLRdHTYl?50%PMcF`_9C}^G$@S3t zk|%b#?IXV56?EmH7OQ-N8|`Y=iB6duYQUT6c>G>O{kru|6eIs<^{RGL_8On3cJ4TI zH`7p~h{j&wVpG;qu=50^iLCK7*~muj5zA5smd95`)%i z`nQ>y?lULnrCe9=uL2FuoZLgaIuTa)2#9pFY-y5rv@}s3^U`He?0e%Ql^!aa9pC*> zdEN7;XJo`JKfRQ^ucGob=i=7wi@#fcSXZ|(TT@I!TuJxEraO8s0tdIilq)`%mTDnp z_Vw^0g3JCmKCIzGyI9_jKxpR-MlveDw% zw!t2)lElp_%?WbS(FfZ;utgb-63UO^Q+wYr7NP3bB(e)lgunNE+23U`94vP)fA8I` zKb}zm1^mU?io>&L`sDO;(e`MX7IOJo#Enb#a?Ldh z)EBg?da|8?Uutl#O$Xa47T`TobxgQhb?RRfVX$Tfj2F$I+@0a;+^c#iji;WzTI8ta7ZG5F>t<^ zfv~X9*VWV0Q+7f6DFGh{%xKbKc$=0h_IH)$PY6T6kIcpS`1|{hA}ERGuUd%#m~wZ| z46mMe1V)L~@!iU>tbES8jficC7Mzu)udVoLoC7zl+MuKSy!Fx$&p5wE$lkMJ5@8#` z*6(tfkjK`)sH61Yw9MaN;aP5(af+vo1KP_S zzWz68Zur|lM)13|)*9sb`6p|rqP5FPN=hoLDx3;ax@oAra5J$;x}LUnZ%Rgn&-0(~ zy*@l4k3^TSR#U2JIAkPR`q3+c4Oc3b0%|h&6BNSp=fm2^k5`zaB83@;p%3?&it*~H zedO(kRN@|!Q&?~B`Ia{=veSn#GB89&-COd88q*7nYrY_N%I}X8Cpc5Ov?`}UkqwP^ zh0dIqii0;yL_5Yi3p0A2Y=>ndbPfLnd~jRbUFpDU*CxA%hKBm58Zk0~AVzhwAFrsr zHI<*vCu>j;0^VW}nfj2*wlfs7w6t8X@s4hZRl@m*{^KDHlKLR_-$_I{c3@PFC!;fc z%wz2%P%t^LO}l909m^=q;IdbyaCK_u6l&b*1aw$hArzzTBYB*<-~ zw^AJ&+S&Tu&w9)SWEiWBXlpo&%GGx^mnuT*Q;DOdgb5|Rwo zyD$9^H}sz$?00L4b&g4w=<6PgmvCr_RdnT<^{>>< z^luLfp8StkRyDU?eh2pwT&fZ9en$A)I|o!hU z#;d3m^#a#QUv&>D)B)@_nKS6VRkpGyNAcldg{)ibHqqD=DbdZ^eZaZg;Hz$s$GnL{ zzZ*pEyM=&mr)^eT^avv}Xh8yDfF$8N6hg4# zEdQ9h)LUh4NE%jUOc;vEy>srUD-tuo?dv;OKz3jTt^AXRBd4rw=%l+0iJ2)5kp5|c zrOym0Mn0lDh+j-!MwCcbAY?x~lR3;~yv z(PKnIpUOafgr0yaBDADhVaQaZU4u(?_^EZWL!g~2Td=Av&yEqtKA}7~-cv)(Z+~*8 zD28gGGrrPs&nSrr4wGzwM^(0s@%48Z5A%tmz}L6IieXJl43Fn6gtWhs&9?^FG)f)f zVmguu>*T6uO&R~h4pO;gZCaFf8675O>|=9pRQ5z!>-za<7(XLQmt;{bUl2U{e>n4n zuQPLdMOf%eIMvpM0b*^Mj$J#opct443=Hk}qsd?!G=w&7G7h@;Y7ET8s5(UH9bv^yr*-MH$5>`$9Ao9w`^G!?>Hn83ZuWrfkXUtavC~G~7iTsvsb7be>juJ7d@4GvCfsUms^F@hn%a zUhOTg4B%ZY!AOJ8*x}%R3zs0p&VzbCYGMyxHkd&-cqv}R%-+dkw@(cUI(Puq1NOSIG>9WR&FGQOcug$p%$msvSw97#*V7-4(Hl- z8V}Tyc11a(=8Gey%>C!aMkDZTFsj-Gv8s`k z`axV6f0ZU$#_GFyc!&gCs3}XZ>%ugzZThGpvUKq-W!qltZB~}@0|aTgj9b<5ec{I9u5RXHc6&VpfKtBfr)Y8U{gPyQ3Z)M(HA zy_7EmY18T@9LNc9ec7oT!_8n6v9mJ5*9`O4~X@a%c?nyE`kQ1B%`EDt8oTt`9mTzG{ZeVD2`FRSp!GxisQU# z{XbA=1IQDHvD~z;-j3a=q06VpTKQ4128!~6G{2_P#4b<=;RKnW* zn^lvN?!DF|(R}_kb{CvAmxQIy9q|XtO|#o6P?7F{73|5(^M8@1GYcoT2x6c8xP;B< zlBaK1O6TY|@jg+Adm?`)>Bri%YQ#;E2ONTHP*3@qdiI#1si5zjYHBG9hIQX72V3Ar z*ydBurkRFU^7(oBd+YF+ip1=2flCCnIR6BHu|buU|LGO@3^zGeNHr>o{}vV|7t#pY zNzeAqu|v(9Agqw~xKc?p=;=~dV4TnkTy2&zt)PR_Y)JzjI=1?i<5$S~02uT`BAMPZU zmJ>o(fJkTlyvd-xfuY~{^5rie+5aNy%8&esiI!uz!W2(qOtRo+x4@;H#V4#9Zdiku z*$~nt5St&X5YU%| z4QjR5o9~Kr(mKv(l@wtMX0FKQuane*ckFw7Gk1YL>6DP?-v{inl-$DqxJ7a030k^j z`GTQ`M@(k%lUkO%$cOs9)W2rt-fp zsCSko@d@7Az3#Q&a)W}~*OCQsmr1!eM!#z;H6nsM0)l@IE>)#YD(9yEPPKS9A^Fe! zl(=~)_H;Lw^n-bHEtiw7DcW$u1`@xLl|A3G@{J5#Uuy{E00IrbkRk^>|9IZvQO3ep zGBOL!?ds#_wSPW4%Q8=bvZXaFWG2U1dxM>Y8@FU}8E zp&7}fiy)cDv)hMnS$MSLGV%4et8D?Dg{kv`PG$wA>CV#x7v+#z*70akNA{@8*--d8 z8$BWRt#5!RCf+8)F`d(T-d%B%mNIXpr@J3o{%&fa!Juqe_X~#J0*dS4HE~TpLgpyg ztb|@^^i8EIc zlORfLbJFLl9UAT6_mDL2&gySB{O6L98P@46W=`>m3tn$F7h561#!3a_K08PzPU@sF zf^h0NQ=m5CKlL~s%G~-0W2t2x^LJi~KflGpief^IDBp|05HhdV5s!G}* z7AuVcw#bX;2^W;{qf5I zqs#Yi$&4%{)%W)E3|LhX@dz=A6KJO7)Ax=0Hhwkq{!zd8&{)g}zcsKca{DKI?9Mdk zZfFX6)2=_W4@JeIz|YNVrm)MIj_XLig}FX@;#O!Lt5SE`wy`mE@SDQ?Q&xyLb+c$% zN4U;m2zgQQ#xi%LeEHS=*4(iBJ4&dr+Z4(c7VAJL-NBQ+uT;v=0d2FHs}3H`yFyw% zpl+c-FnJd_4s8+@u<}P%)4NPhx*E?{W!2$%ak|L5S837m-XklU{e733YCcE^(5iQ9 z3H?NHgT)iUdgQBBf6W>Bw|Flb%LsHwUxIJdVx3@(SCo8@jyXc?Q0ha+ib?o$-JS-k zwmEW}zr6x?rSP-r`R`-}UNuiI0CD?gRlb;3$JEIM?T6#-wnDrLXSZv;UEw{|P(Hd^ zz4IN|T1^6tmsf9vx+h$a$1jYCbuf%hMLPELx?i8%kHmA|+ZhPYkh@CN`fpqBBP$mN zi^m2xK#ls_UDAC`4S#nQ7`~frfzJZpEX$3y&Ptsm0~53(Bt?Jv!d9GBQy&xZr3g*w z(HGiunJ_bn558LF1<61l{h9KbsI!H+7)f=%hTP!|IxJ4ImT&6AW!!b8wSk@{o^h@CIRh3Jq8ZkRX~BKIB2Mm!f{Y+Bw0m(Qk-t9b+VrKOJ=J z^>egeF!W0E6bxGb*uHUADz8(+7LS@Wb;#wuKS(eb*NwjLvzJ>zqEEPy3uN>wW+4yMAl^*R!7IS^t&l;qIg$ zry>UcfP(XJ$CCg60be12>;~}R8};lW7@UkhjlSj>bTu&QQpB}O*ed`KTTo8w4sA8v zl-#{=DrHIKnB;Mr?=j{?u`OHr4k_e?)}7?=1EM9HGF#dvcAmNd`EmCWDl8UBC@}s< z0V?z`r@hPL$l|LL@8Ak=>=lHC`!;Kh7Em4gD2TS|=n@cHUG z#5&MX-x!n~j_WY$sG3#iteeA8va_%cFDFQCJHLe!VCq3uO~WNPAZ9}x9A_sCm6~rw z`agwNB|I137VxbX2g?prQKBNp*^`E9vR=J}p%!OzWD;$umw$+B1wT0*n>xw`ao1N_t0MJmLL6a*_p}R-j9eJA9GCoTh;Zvc zbi)S4nL5rIWA0jHe1~WxVr6P|kz2x>@Pehl-JPeYI zIx?TD+B$Dtw0*&@F{F#)MUOcq#>Rw(rY4pN*>3V6SEMflTGAgX!|ep@8Uv(j{o>*x zAvf0yCf&t6W3x#aJvhlG4c*4yTWi2^Be!3rT#;E!0Kzevg?RO_u&}Fz?oDn@U(Pi@vZNB- zo0>+C)zsI=?_FAm;8FOVIWluCs}pRlY;tjLZ|~z+*R%W;xPZ^0>;&+4>)wzOX?Qsx z;_q-M(^=)OU|OzCZvrY$`(|4$txk+TxfeJt zrTv=33LWh$ZrWyAc09Dv3lZ>S#i+T32E7xteR#6xsgIY-L1e<}HOh*OF4xA6?UPng zpovrK6&%g(hL-wa7op0VHn{Xv_`QBscq$0QUJVS#7FL3$FLR#~eh?0^l}W=_7bbx) zM{#@i8z6aYzM8fTER*!zUf`av2DYgNQcVPG&Ak|KOAhDvIrU`(^=CyGMI$sQ8vMOv z(HNW3@RPnqAdE{=LiN~fz!sWR;q=gd2-qYfs%eTh?1$D=pLeYW0Gg`i2B=yI0JP}? z&1UPH0tNnZ=o;jgWL!>kw-XfcKkwWy3F6Bp%^f1=03H_pYn+oSFVt>&Mh~0-JU;t~ zdEQuoOV2yA6KT*SYpzp(+_SuO2U++5h^m5Ly!wQ%7f_`Gi43x(;%8{(6;=kw?R83` zIXP|T-tChR8;5fJ=Q2Qd33Y<}DKs{&>x_@uLARbXe`@f$^4KJd3Fi9s;e&4QvR)@W zGM*RAd5N$ZR!)XM{vYf9j@fB&%^=g*hH1MGVGi9kk{n*6RJBucsILxqoB=1M$6bmd z91%y>t%_8uiVtmMP|4jcK+sTH;#oOlc3>s**y~?yrJC)yN40P4LrA4GuWreOI_&ri z)u*B~aN20jU0NW|d&fT}WsvzhF^n1&r$fjkt0^{Rr+r)k?|0H0YdS*F&`V%*ljur~ z`QiV}pIm3dO*#^5Gg%pHwjbe^utF5U2DEUkjw-_uH0>Rj_rO=ph(L2@B$h|arq&~3 zmB5@aX2?U-_=bGZ*t&X?qQ^|N{%5EB!E|%Kv}pNxYx=oldT}_rKuh0)84r6CT#l+} zME~tNA+u;`<+Z4WC!(@XeNIcl^SECr^q;KOhB;5>OA0N*!Q*9qhWb=O+fFcQ^SE9V z51HO%7k{zwxK6-0w-8HCXyk{7)kyShAmy4j47AWy_-{)6`-`9RAE`@Mg6xvMkkFQl zr$pZ82NGMY=?tEC(xeNpMd%bj!T&c=zB>$?P9-+j#jEn};?C1EQLq9fuIXk0yPJ6i zr`cSTO(j;i2{T}zIQ1~shhU3!L?KNUxo{_7I^PPHG@ddg2p%dMvY ze>OWP_2NY(zMfyjl%%KrGN~+zc;GhW3{|7nH&ac+t1SHed7P(V(m^*q0*Tkuan5Y3 zJ^VTwIazf}qQ?x%zmSD1Fw=29upmi&(TNVH?lXZrulPG-w(#WBLe$TMOdT1^SEYQe zdnwNf@$1z=iY`4xY`N_!&Y%aQ@}X{2-DYM>dxw=#i0`uaYhhzz$TdO!`@HH|bUyRU z{-lV#OnTspE)!zwS)cdkif6A=Uv_?j&#~p#@`Z`SS+-lYePR31>87a@-@6je6>+x< zSCgMsjSq!ehUFWe?6%yyCGM0WGThS6WtQ^)r0(OXF855wgzk$2yt^?IG*O9bZk(>? z^v2&yp+#Bh8Z&wuiHvvc%gGXvpm|Q$yod}px8+?Hs$D7`jNmY7rY(Gw&0(M;nVl9O~_=UEW)%Wch2E zQx4sEH9v-@yM9ihdJZzpmPr|!iqfC^(bdKS2e||EE@dY6r+xXfBUgkYkMI$b{6;#_ zMxgf~n!X4^<~9xr@vAxZT!?RPzPGdoZ7t%2qobWHv3ai08t2Yxiq+Qc)Yxh?gdMRU zkObQSUy2Vf08@HWyWF^vC;ZTIYpo+q!$N%7o;}Z!l=1|on@z#|?@qhd&!773+wQ~n z+LOh3%%?z-!5va!Z_!c&fwb47K%@c=<>aPI6*a&(oKB z1R%vk-`){|c?N(J4?$inR&tG=nm+X4;IA!V{6{@X!lQcJ85ufJ8;2Yo6WBn~ zM?066qb`oLuoPcC!k}Uc)s17oUheEu!2U;TkpUlqN0vO+;TtG%s*1qrg9mob~m2lrJQ-xcg2cE(tc6M+3&ns$_S z>3ps?5)}hyFBCaHzwW)_@bB`}xD_blkLmCtQ;Nnl^BmxG^K}K^kZRmUtAi2 zm928PUNS)If|b2GOd0>k#Wx_nOf`r1%Oa|bF=DH z1-=nn{pRAL$(_ix*Y`EY!BX;)KP3{4l-hS?(+l0i{HEmQ(bbr}m~x;D4sb=<+;&Y| zNm$SF<_x4Q=E=W4W`ud$&yhFe?U#2az