From e2bb00a5b1b06da5bf858e376d050b44f7ca0a0c Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Sun, 28 Feb 2016 22:40:00 -0500 Subject: [PATCH 1/4] Miming Refactor --- code/datums/mind.dm | 1 + code/datums/spell.dm | 7 ++- code/datums/spells/mime.dm | 59 ++++++++++++++++++ code/game/jobs/job/support.dm | 9 ++- code/game/jobs/jobprocs.dm | 45 ------------- code/game/objects/effects/forcefields.dm | 9 ++- code/game/objects/items/devices/megaphone.dm | 12 +++- .../game/objects/items/devices/radio/radio.dm | 3 + code/modules/mob/living/carbon/human/emote.dm | 4 ++ .../mob/living/carbon/human/human_defines.dm | 1 - code/modules/mob/living/carbon/human/say.dm | 7 ++- code/modules/mob/living/silicon/ai/say.dm | 6 +- code/modules/mob/mob.dm | 5 +- icons/mob/actions.dmi | Bin 49569 -> 50232 bytes paradise.dme | 3 +- 15 files changed, 103 insertions(+), 68 deletions(-) create mode 100644 code/datums/spells/mime.dm delete mode 100644 code/game/jobs/jobprocs.dm diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 6287bd5a1d7..56d8fac2d57 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -53,6 +53,7 @@ var/has_been_rev = 0//Tracks if this mind has been a rev or not + var/miming = 0 // Mime's vow of silence var/datum/faction/faction //associated faction var/datum/changeling/changeling //changeling holder var/datum/vampire/vampire //vampire holder diff --git a/code/datums/spell.dm b/code/datums/spell.dm index 236b7c8e9b1..f129f085bdc 100644 --- a/code/datums/spell.dm +++ b/code/datums/spell.dm @@ -19,6 +19,7 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin var/charge_max = 100 //recharge time in deciseconds if charge_type = "recharge" or starting charges if charge_type = "charges" var/charge_counter = 0 //can only cast spells if it equals recharge, ++ each decisecond if charge_type = "recharge" or -- each cast if charge_type = "charges" + var/still_recharging_msg = "The spell is still recharging." var/holder_var_type = "bruteloss" //only used if charge_type equals to "holder_var" var/holder_var_amount = 20 //same. The amount adjusted with the mob's var when the spell is used @@ -27,6 +28,7 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin var/clothes_req = 1 //see if it requires clothes var/stat_allowed = 0 //see if it requires being conscious/alive, need to set to 1 for ghostpells var/invocation = "HURP DURP" //what is uttered when the wizard casts the spell + var/invocation_emote_self = null var/invocation_type = "none" //can be none, whisper and shout var/range = 7 //the range of the spell; outer radius for aoe spells var/message = "" //whatever it says to the guy affected by it @@ -74,7 +76,7 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin switch(charge_type) if("recharge") if(charge_counter < charge_max) - user << "[name] is still recharging." + user << still_recharging_msg return 0 if("charges") if(!charge_counter) @@ -128,10 +130,13 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin user.whisper(invocation) else user.whisper(replacetext(invocation," ","`")) + if("emote") + user.visible_message(invocation, invocation_emote_self) //same style as in mob/living/emote.dm /obj/effect/proc_holder/spell/New() ..() + still_recharging_msg = "[name] is still recharging." charge_counter = charge_max /obj/effect/proc_holder/spell/Destroy() diff --git a/code/datums/spells/mime.dm b/code/datums/spells/mime.dm new file mode 100644 index 00000000000..5e5ddb91db2 --- /dev/null +++ b/code/datums/spells/mime.dm @@ -0,0 +1,59 @@ +/obj/effect/proc_holder/spell/aoe_turf/conjure/mime_wall + name = "Invisible wall" + desc = "The mime's performance transmutates into physical reality." + school = "mime" + panel = "Mime" + summon_type = list(/obj/effect/forcefield/mime) + invocation_type = "emote" + invocation_emote_self = "You form a wall in front of yourself." + summon_lifespan = 300 + charge_max = 300 + clothes_req = 0 + range = 0 + + action_icon_state = "mime" + action_background_icon_state = "bg_mime" + +/obj/effect/proc_holder/spell/aoe_turf/conjure/mime_wall/Click() + if(usr && usr.mind) + if(!usr.mind.miming) + usr << "You must dedicate yourself to silence first." + return + invocation = "[usr.real_name] looks as if a wall is in front of them." + else + invocation_type ="none" + ..() + + +/obj/effect/proc_holder/spell/targeted/mime/speak + name = "Speech" + desc = "Make or break a vow of silence." + school = "mime" + panel = "Mime" + clothes_req = 0 + charge_max = 3000 + range = -1 + include_user = 1 + + action_icon_state = "mime" + action_background_icon_state = "bg_mime" + +/obj/effect/proc_holder/spell/targeted/mime/speak/Click() + if(!usr) + return + if(!ishuman(usr)) + return + var/mob/living/carbon/human/H = usr + if(H.mind.miming) + still_recharging_msg = "You can't break your vow of silence that fast!" + else + still_recharging_msg = "You'll have to wait before you can give your vow of silence again!" + ..() + +/obj/effect/proc_holder/spell/targeted/mime/speak/cast(list/targets,mob/user = usr) + for(var/mob/living/carbon/human/H in targets) + H.mind.miming=!H.mind.miming + if(H.mind.miming) + H << "You make a vow of silence." + else + H << "You break your vow of silence." \ No newline at end of file diff --git a/code/game/jobs/job/support.dm b/code/game/jobs/job/support.dm index 156ca4c29f4..ebe252a9c08 100644 --- a/code/game/jobs/job/support.dm +++ b/code/game/jobs/job/support.dm @@ -282,11 +282,10 @@ H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack) H.equip_or_collect(new /obj/item/toy/crayon/mime(H), slot_in_backpack) H.equip_or_collect(new /obj/item/weapon/reagent_containers/food/drinks/bottle/bottleofnothing(H), slot_in_backpack) - H.verbs += /client/proc/mimespeak - H.verbs += /client/proc/mimewall - H.mind.special_verbs += /client/proc/mimespeak - H.mind.special_verbs += /client/proc/mimewall - H.miming = 1 + if(H.mind) + H.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/conjure/mime_wall(null)) + H.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/mime/speak(null)) + H.mind.miming = 1 return 1 diff --git a/code/game/jobs/jobprocs.dm b/code/game/jobs/jobprocs.dm deleted file mode 100644 index 4a885005c78..00000000000 --- a/code/game/jobs/jobprocs.dm +++ /dev/null @@ -1,45 +0,0 @@ - - -//TODO: put these somewhere else -/client/proc/mimewall() - set category = "Mime" - set name = "Invisible wall" - set desc = "Create an invisible wall on your location." - if(usr.stat) - usr << "Not when you're incapicated." - return - if(!ishuman(usr)) - return - - var/mob/living/carbon/human/H = usr - - if(!H.miming) - usr << "You still haven't atoned for your speaking transgression. Wait." - return - H.verbs -= /client/proc/mimewall - spawn(300) - H.verbs += /client/proc/mimewall - for (var/mob/V in viewers(H)) - if(V!=usr) - V.show_message("[H] looks as if a wall is in front of them.", 3, "", 2) - usr << "You form a wall in front of yourself." - new /obj/effect/forcefield/mime(locate(usr.x,usr.y,usr.z)) - return - -/client/proc/mimespeak() - set category = "Mime" - set name = "Speech" - set desc = "Toggle your speech." - if(!ishuman(usr)) - return - - var/mob/living/carbon/human/H = usr - - if(H.miming) - H.miming = 0 - else - H << "You'll have to wait if you want to atone for your sins." - spawn(3000) - H.miming = 1 - return - diff --git a/code/game/objects/effects/forcefields.dm b/code/game/objects/effects/forcefields.dm index df83d69f3b5..f6643a5506a 100644 --- a/code/game/objects/effects/forcefields.dm +++ b/code/game/objects/effects/forcefields.dm @@ -3,14 +3,13 @@ name = "FORCEWALL" icon = 'icons/effects/effects.dmi' icon_state = "m_shield" - anchored = 1.0 + anchored = 1 opacity = 0 density = 1 unacidable = 1 - - - +/obj/effect/forcefield/CanAtmosPass(turf/T) + return !density ///////////Mimewalls/////////// @@ -18,7 +17,7 @@ icon_state = "empty" name = "invisible wall" desc = "You have a bad feeling about this." - var/timeleft = 50 + var/timeleft = 300 var/last_process = 0 /obj/effect/forcefield/mime/New() diff --git a/code/game/objects/items/devices/megaphone.dm b/code/game/objects/items/devices/megaphone.dm index 6d7c7a26ed6..af299225238 100644 --- a/code/game/objects/items/devices/megaphone.dm +++ b/code/game/objects/items/devices/megaphone.dm @@ -19,13 +19,19 @@ if(!ishuman(user)) user << "\red You don't know how to use this!" return - if(user:miming || user.silent) - user << "\red You find yourself unable to speak at all." + if(user.silent) + user << "You find yourself unable to speak at all." return + if(ishuman(user)) + var/mob/living/carbon/human/H = user + if(H & H.mind) + if(H.mind.miming) + user << "Your vow of silence prevents you from speaking." + return if(spamcheck) user << "\red \The [src] needs to recharge!" return - + var/message = input(user, "Shout a message:", "Megaphone") as text|null if(!message) return diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index 078a3f3d58d..168f448ba4d 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -285,6 +285,9 @@ var/global/list/default_medbay_channels = list( if(wires.IsIndexCut(WIRE_TRANSMIT)) // The device has to have all its wires and shit intact return 0 + if(!M.IsVocal()) + return 0 + M.last_target_click = world.time /* Quick introduction: diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index f35bda25cd4..4302195b1f0 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -21,6 +21,10 @@ if (I.implanted) I.trigger(act, src) + var/miming=0 + if(mind) + miming=mind.miming + //Emote Cooldown System (it's so simple!) // proc/handle_emote_CD() located in [code\modules\mob\emote.dm] var/on_CD = 0 diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index 2e24edb8518..afbe24be5ac 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -72,7 +72,6 @@ var/datum/martial_art/martial_art = null - var/miming = null //Toggle for the mime's abilities. var/special_voice = "" // For changing our voice. Used by a symptom. var/said_last_words=0 diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm index 569d5247edb..c5b116036e5 100644 --- a/code/modules/mob/living/carbon/human/say.dm +++ b/code/modules/mob/living/carbon/human/say.dm @@ -90,6 +90,11 @@ return GetSpecialVoice() return real_name +/mob/living/carbon/human/IsVocal() + if(mind) + return !mind.miming + return 1 + /mob/living/carbon/human/proc/SetSpecialVoice(var/new_voice) if(new_voice) special_voice = new_voice @@ -106,7 +111,7 @@ var/list/returns[3] var/speech_problem_flag = 0 - if(silent || (sdisabilities & MUTE)) + if(silent || (sdisabilities & MUTE) || !IsVocal()) message = "" speech_problem_flag = 1 diff --git a/code/modules/mob/living/silicon/ai/say.dm b/code/modules/mob/living/silicon/ai/say.dm index acf3a2db3c0..5e47030f373 100644 --- a/code/modules/mob/living/silicon/ai/say.dm +++ b/code/modules/mob/living/silicon/ai/say.dm @@ -1,5 +1,3 @@ -/mob/living/silicon/ai/proc/IsVocal() - var/announcing_vox = 0 // Stores the time of the last announcement var/const/VOX_CHANNEL = 200 var/const/VOX_DELAY = 100 @@ -30,7 +28,7 @@ var/const/VOX_PATH = "sound/vox_fem/" /mob/living/silicon/ai/proc/ai_announcement() if(check_unable(AI_CHECK_WIRELESS | AI_CHECK_RADIO)) return - + if(announcing_vox > world.time) src << "Please wait [round((announcing_vox - world.time) / 10)] seconds." return @@ -38,7 +36,7 @@ var/const/VOX_PATH = "sound/vox_fem/" var/message = input(src, "WARNING: Misuse of this verb can result in you being job banned. More help is available in 'Announcement Help'", "Announcement", last_announcement) as text|null last_announcement = message - + if(check_unable(AI_CHECK_WIRELESS | AI_CHECK_RADIO)) return diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 02e8fb50ef4..3f765e1dfd0 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -1448,4 +1448,7 @@ mob/proc/yank_out_object() //Can this mob leave its location without breaking things terrifically? /mob/proc/can_safely_leave_loc() - return 1 // Yes, you can \ No newline at end of file + return 1 // Yes, you can + +/mob/proc/IsVocal() + return 1 \ No newline at end of file diff --git a/icons/mob/actions.dmi b/icons/mob/actions.dmi index 7f5f8925b1780ef345a75dee43e334379665b552..814d9bf3153aad894524734bff7910249cb8fb77 100644 GIT binary patch delta 10077 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ℑL`Lj(bg4#B+eM@M*PL7A;!DtFOMweNQiD zTATZ8E?z_Oq@{%2wYW}f#?&?)j{dC6aey;t&W!t9Mh*}hsi=q?8#p9`zKFtpUdHcF ze+Sr5S53SCh{xsX_S$a5Zw~Mq;1Rl*5}VC-ar*S7Y~H*%q6qPvTt!(Cv*+B7-Cl*& zn#)HY{Sm8GYEYG(eLW>5f5-BTw{hNX?RoCyg$kkI>ks+?RZ5~XW7?Ww|J(Ft_1EN} z#<7(tQ{{X>+5G|NHL4^40aUsKv>!kFfAEI+b-U4KKma3d(Fvjff2*4m6Zl9)YUJtZ zRUN(q-@8$CpO%uJ%_b8UY&LSTvdCyF^x&}DxnQ$lGMQLEb_%*%4u~BSqPrrl1N_)I z0)kQ^^1{L@zP@h{0E;zWp}xK@<^!}EDZj3x_yNqHKR+UZ(N3^84sh5osbrB}f8U}cBsq8o7w9$P6PnO%E26$;ABm^TlWp>_~R*0^!4L?}@YL+|ICJH?w*3X2I$7 zvvA=;F(V^`f`YHGZOik3U6iN9e?6tGvmlwti7IT3;orXZ(7L75UfYrMXyJxiSHh;{ zg&S^oEa-KI{r2CyenXC6NalOvw({bE8GsLUVu}GoX%~mXMVcXn22wx-oz_T$rv*Jt zpwi)NX`$j=2)(BJ-N3T=y*qpgGiEGc_wJ26`snvry?S*_#CPGsg}nLZe_CeDSRf@u z_fQ1mIzXQ{nSxnTFz1vAf1U=X#0N<^vyZ0wnwSqrGH24_tfivuH-An}PNzXCDk^Ah z?D>2@+O>H+9_GxMLve92H8uwWvNBk{d^xv1`D#S`01T!9c-+$c&tGF;^U`9-8Xxm{ zeGvt|1N%IT-=7XpYv{W3T@ShFHn;BZdcBxT zCKfMVEXuFdYBem1Eq*I?5PThz$;85i3&lVnAa@lcBO`-3^B!W`mgiZ#c(M48fBZuL zShQ%72(WJ5x=wNw_l2VgbyEx=)$PwP5U=3f0rEK+V+4dchpVfks|EgC#9wQtk(eI)9UTqL5U``Rq|xkz%uFljdtMH!w6uN3AqPR^b-;xS z7e<00M~`;Se~`EsaUEcRp_UTwaICo#Vor`0MF4B=1gg*M!`*D-Acahx44XG^j!c6$ zZ{E!0$&+cWY(>fg?-|h!aO>8sBqb$LSy@S5-e>?uj~>mt%ja}?{r-n_sIw+@`nXv}RlJws<2sfFK1$e=dWLK@UGt?Z3ErfwFK_lodq; z?yF0r9At;X!CPWY(3KDqaI%Qnat zsDZ@9e*{cg6Yi!OX2$hcaPbu zW!bW2xZQ5ntXUIDgNcp;%ObdR=~9eFW2YcVS9BQ#o=Y=Zs}6N}p)8K}wsYLgHg-1W zaATVY0!*Gf8Eun^wA9$OmEJl)x$=u__XB|de|N6jMngjb8-Fm0#H`qkS?a7wsEnC- zY^9w(?{azj$KPhwh*|8Sb1)z}0039UfnCev_m=~-SKBe0%`s^(z1{yCMZBO#D{!1H z)&b|ullp$RTrNx|Q~UH6NJ&W{FTarL>OD-Da2tmX{gVk3Zo}bl@YN+xvhLkqMciV? zf5*K1LL9X%WMn2$cK9gy<0JzyeR}7$#ui^dRH2GYx8*fJ0BLnljap~|m5COQ8$>Tc zR8vB+?f)O7PnVK^#J0C^X>{Lq%B;vhxEvO^Z8XGH3<+{@vOY%kO8^ zAKy_kV0a`Ey6C0l8|3zbqL@G^6l_ar3AXL#kk%h#zkq-W5fMm2z%Tmn1$;C!06`Q9 z23x`Fl~V?Lg{^JIA-llnJV0A7f49LwH+zBSUdHYTiTLYuy>WnzP0a{G0ISu?>C@-Q z%Zndz^w>&C%o>l&R?O7j`y<=p`g(ux#T*d8_U+rTm+j=mUzJ~x{wCM*`28IP1|r+w z0I~;@&QM$WkWNQ17{CXp^#(*wBS}It=zI2O zEhj*)VMeF-qSpWcwrtrFe|fK`3DH+&H5jwm45CPM1uLI7NNP$lH8nMS^PAt~jW^!l z>8GD&_K$ze`mcF9t@+Jg1K}{3Oj7#H<StC@W(9`t_0T zBj*A7M3Ky7$&)3InG|Bf>i{Iu0?ro9>4Uh?=tHl~fIt&oz=*)ix_x|{J{{V=m;uS^ zhS8CV4{x9aKWU(se|9VgiAmrS5z#`ZXKR1}PG^7_GZx@-IVmmO#p>0oBT?Y>>(}FS z1|lV~cJJ=IE2=B5>Ux0jYWNKwK8Qd4=})AkrSasG(n9gun(wg0cs6oQ$2GsMKC8Fv z+O>;E9(jcQ`}Z?->Qvrew~qf>w21fDMRG$Ko0o?tX;7pje^g&`t&e{-IKaN3qae!M z_q`X~#Ja#a&^|?tjsnY5SUC#()*C;L1VBJad6_rwfwsIqIz0kd9({0^SxMdcjQ+ z4Yar+-I$2Of9nE+5skDFj@Cf1M6))zX6b#Ui4Y!{=rE{&s*ee+@OZn1DzhQc0`}41+X9mAAFY zL{EVMLLtdPbv$%-@;re+0K>YS!aCNq$k$2R0H@(R&)%o<0_qAK^gySO5%!3AMD6 zNeHJ1e;&cYWd8|@#R7c#6rdFiNjQB?WG5to?&4`M+i#I7Ku0@2fH9*7v3~t}p8fCL z0Q~T^8H^b{i1M}+7}*K-Bq92$bbzN$ogh6uGp-1(UAva))2By@B6z)CihmSa0>|m> z+;F*}p$;KVh3TFmi$G7$z2t#D$KziO4$zQff1vVIg;WNsk9p&z2c1zaFlK$wU@+iv zxwzO)5P<5cjWIhxpgqx97C(qhdX6W2GLEx{nY8qWc#a(4cuhW`%46P?{KDY&^6KEi zG0;?(38~qLjv7cz0dyEdKdop8VC3WUskkwcYw+P{1tB3>T5;FvXm&ZUjDcqP_o5fv ze|XXB44^Y1sJiac^YNE&6pwuQE;!om{6>$S%+aFKtH3Mivf-txLD|$tU%E@<~a|vEhdR{&dmL6$Ih3+hSe`VNu3! z=W20)X0tga7}CecF0dIXH3pzp;%B#4e{uTscI@^l(Q3`5y!>C0H9-KUv*&w(0nli~ zvXXW9f`5#R9Wp0{D_wLsX zKe=m-Z{=+_PhU<@01cSL^Jp;Pe-41$+1IEIV2pCi4T!8a&1%~uw}~@rcIj$NI8KZRe%AwV6#Pz-Ezw;_U+rp zym|9FeP+C|A_BOpVh1zxZu(4I;I4|!Rd(Kf`z_(_yYIOosT=Xe`Ygs#f9N^K4*r`_ zlfU?x2-LBIU2oa-ws`b>{-I<11)Y!~H-ade=>>9h)J-KG8VP^nZn zcC8nt+;xxW*!(Y6Zv0fO33!_F%WvbM*S59{zVFGOpMB$zCka4KVt|v4b|4Y6#Rvom ziqJwLkbs63GVlOyl92j)e|Xd_kdVU23>Eu}ix_Q!&_zo_v{PJM%$6-%xV3aQo0!4A zef#2`Cp$eLa&AwEae(oJ>9a%;rq4GQ6Q(Q8@Nl)*>TZpx|JU4bWz0ZVQR1EuEp+ly z_oWISK*rDlj=c6eRo>Ev!==?tSPF08)TVc}nKS3<%OBbCD;0@`f5yGrbi@Ap`6qN+ zRy>i38npo&q+m)(<>2v3#%5(;FeG3Sy`*IfrM{_wL0MLuRmV7K%x6qu8VCv0lg{WY z0doSBo~ngz*5qwA8{@`}i@ctDaCgl6TPM$mdz|((M{G756E8A`24LW@K|T0UDJWbS zhFv$Xzi$Dtt$pgrf3n_frvFdpxhEd@(f6NN_1hgkzfT2_k~t7+CHFvJvmM8JumwgxkB-gXXAfCdsccHTy!M$O482h9P z^QZkX1gH&ATYYNozHRI0qe-?yirpwM$Je}CBLjLPF>GjsE&y%T*bA^p0o<%f#0 zckI}q{5%yDfBu8GBnMbswNZ>NuhZQg!)t{bZxl6$KXx|(Y<^?a{8qm|R}jOxk}B69 z<`xbQ7UWG&0hJ?!LGiHr&H9PyR39o{J!e>IS*Q_eaim=Yt$uI9jkhh`+28l3prFt@dhGzEX|7##)V7eGnHT9f zaIH^&e`T^g9{sl-`e{}=1J=L(yPvLJy*g5S&0{-yovNkwb#Hpo8MQ#EA<_7=W@jVkDo++@ zG=_~@o%Sfsvj9%n-))9u%!5dzpQ@KWKLeuaj2-ZLc|9~oOP z<=YqPYb>M36)ySr2Okg)1<4ydlKT33YU~aIfgtAOWU{ieNH&{EOiZBk(_%6*(uXCd zq-?AF^rKA!hg^3@O?6es)$IOfNAXioe^BUOdgK7jX1gfY8VmVLMOolRj?{_AkNX9X z1X6zAl40$AQO2u`gInI2GGzGhZJF7*#^O)*V@^rM>1<~Bh!JED%tdENptjaQC>UhG z04tTJPjj~N6e=-%LjTe28ldd_e`L|i z%P(Z)NS$al+eMJXapXu{Br#e(PrmL-@zhgKUDoG!cm1fb`4dyqGm|PxOBg$TBF)Xs zj2b(Rqi3o)S5uEU&5EnlPx^oyGIIuFP9MOCynIHF9f#i^z?7UqOG^utN6YjbkySf5|=fi1*&R1dBBTfVW=zGXQlB4Xm0Q;H8=ZzBizx z({<6uAK0oT-6D0U|NW{}o$gWRwOgDn_vuge>@iQAGL441dL~VohDvL|>1shxs~JCG zB8~O+7)?gBIz7!zjhw4IMP^1C)#oZHF8Ty9=*MJAf>8M7VPBa0op|3ze{p~c3jN1L z*8oHQQqk!gFGLGno6{4e+&?>(3~SpOU?InkOAW}S^Q}ThQM_ClUtKJ&nhVst4sD+5 ziAnL#tvuaca`r%@$dSe}{(eEqQ2EPS|G4NqrDP18*W|1)H@Q5VKYxM2Lxxb_FeX)Q1ISVdV;+ghMqwA-rysY-2|*mZk-JQ`nJ95WqFy}wn!T2(>N&jV>W6 z#bEd%@J0`BLqS2|GoVLNU`gntvfI&tklAwz#pB2Qf;8Q2cY4w1cSk&dlaEEaxM*Z? z1IVMA1C7%2@2*}ef5<}Dg)!_FK@d1q@o8Sb?;iJc5G^de}WJ0A@qZTw| zShJ`)dlqwQD&~{{QsZ@vnu!Gk48Lv&&N@3MPo5-yLIE}QTE5m+jr?nq$dynkg1)UZdH?Dc~(MS7intk-(-f^y`26HGFz~gBpJ0}OVMu$eHL#0w72m*p2ke)e! zEf9368zp)23W0V^oaxm zu{q2Wzc8Kb+`;Jd2K+uRN6QY8kdTO4qd~9NkvD1tjdgYs5{>8#2^dW&0`-ajDkxk{ zTvPz%e?Fvb;wJzRL6p}1Xmf?RqP*^xox4EzaNB!gUVdSZlcBp3zW$(9YcFYZ2!3y? zN1vJ|pw*}tIcgNisp*8nVN@y+pU=@Q;c!~%w0cO7nLJw~$yjYf@1ts&K7 zAsh}94h1PGF6Q*fKe>VjMg;;uB4aRECrMhZkBn8H9 zf3KptYNOb(LiB$!jSl;VIRgjM(%ghzr^9ysELxR_+u2Ak;K$=>rRczZTHG$eVUdP9 z2jNhVfZtCz6ku>}Hb=|Lunx%L=+UDD{a&0-$IJcwy%ZD_V!5PpSdzn&rnhYl@v3of zeSyax`o9);v)}J+B`GP9>Z-F09+*XDe|j2+N{Z3y^h}#th@;j{i>s0B+`&|xJIlE< zr^wA2fXCHDQ)45amVC;8-MJWNW8HpRWB6=;e=h|Eg;;tmfR>E-X)RqH|4(F8;Z1eU zhWel83>+vH?b$`9)ymQG!`P}SDJwlhanS*EIz2wWpN9HIe61c1?AuHE;X_=ge>_Ri z{(YpSS+JyKkd&Zrt+UtMrxZ$6P`LU~+BkN>=%Iqm z_E>*^2L%O%uDPVf=yrP**}3CmUPm`dzm^zv&piQPMaAxal^c_j@0vJi(xTLKtKQ{u zQ&(FTJDxSHv;0Ltkv@sD3Sfsl^m z&G^zgvuDqK_qA1zTLV7tTlHp3`Yl6-3=5l5QVlwT;dHVkZMVjq{7FNr;1YEGeYXk< z3O%96CGq9w6=g+q+~r|5+eP`f%zt`G{Lc!dAgY2w|MC9;AoT5r;0at(00000NkvXX Hu0mjfi?F2} diff --git a/paradise.dme b/paradise.dme index c30ca7e5c0f..cd3a2e6c417 100644 --- a/paradise.dme +++ b/paradise.dme @@ -223,6 +223,7 @@ #include "code\datums\spells\lichdom.dm" #include "code\datums\spells\lightning.dm" #include "code\datums\spells\magnet.dm" +#include "code\datums\spells\mime.dm" #include "code\datums\spells\mind_transfer.dm" #include "code\datums\spells\projectile.dm" #include "code\datums\spells\summonitem.dm" @@ -396,7 +397,6 @@ #include "code\game\jobs\access.dm" #include "code\game\jobs\job_controller.dm" #include "code\game\jobs\job_objective.dm" -#include "code\game\jobs\jobprocs.dm" #include "code\game\jobs\jobs.dm" #include "code\game\jobs\whitelist.dm" #include "code\game\jobs\job\civilian.dm" @@ -1023,7 +1023,6 @@ #include "code\modules\awaymissions\maploader\swapmaps.dm" #include "code\modules\awaymissions\maploader\writer.dm" #include "code\modules\awaymissions\mission_code\academy.dm" -#include "code\modules\awaymissions\mission_code\beach.dm" #include "code\modules\awaymissions\mission_code\blackmarketpackers.dm" #include "code\modules\awaymissions\mission_code\centcomAway.dm" #include "code\modules\awaymissions\mission_code\challenge.dm" From baea03cdb572cac8d7477cdc1718ded5275624d7 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Sun, 28 Feb 2016 22:46:24 -0500 Subject: [PATCH 2/4] How did this even happen --- paradise.dme | 1 + 1 file changed, 1 insertion(+) diff --git a/paradise.dme b/paradise.dme index cd3a2e6c417..627900f7b96 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1023,6 +1023,7 @@ #include "code\modules\awaymissions\maploader\swapmaps.dm" #include "code\modules\awaymissions\maploader\writer.dm" #include "code\modules\awaymissions\mission_code\academy.dm" +#include "code\modules\awaymissions\mission_code\beach.dm" #include "code\modules\awaymissions\mission_code\blackmarketpackers.dm" #include "code\modules\awaymissions\mission_code\centcomAway.dm" #include "code\modules\awaymissions\mission_code\challenge.dm" From 070bd8d17d559e9d3b6d638a42f22717ec48ca4a Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Sun, 28 Feb 2016 23:31:53 -0500 Subject: [PATCH 3/4] tweaks --- code/modules/mob/living/carbon/human/emote.dm | 4 ++-- code/modules/mob/living/carbon/human/say.dm | 2 +- code/modules/mob/living/say.dm | 7 ++++++- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index 4302195b1f0..14013b59294 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -21,9 +21,9 @@ if (I.implanted) I.trigger(act, src) - var/miming=0 + var/miming = 0 if(mind) - miming=mind.miming + miming = mind.miming //Emote Cooldown System (it's so simple!) // proc/handle_emote_CD() located in [code\modules\mob\emote.dm] diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm index c5b116036e5..f736a17af22 100644 --- a/code/modules/mob/living/carbon/human/say.dm +++ b/code/modules/mob/living/carbon/human/say.dm @@ -111,7 +111,7 @@ var/list/returns[3] var/speech_problem_flag = 0 - if(silent || (sdisabilities & MUTE) || !IsVocal()) + if(silent || (sdisabilities & MUTE)) message = "" speech_problem_flag = 1 diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index 72035ee078b..7e12928a26c 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -71,6 +71,8 @@ proc/get_radio_key_from_channel(var/channel) var/list/returns[3] var/speech_problem_flag = 0 + + if((HULK in mutations) && health >= 25 && length(message)) message = "[uppertext(message)]!!!" verb = pick("yells","roars","hollers") @@ -88,9 +90,12 @@ proc/get_radio_key_from_channel(var/channel) if(GREY in mutations) message = "[message]" - else if(COMIC in mutations) + if(COMIC in mutations) message = "[message]" + if(!IsVocal()) + message = "" + speech_problem_flag = 1 returns[1] = message returns[2] = verb From 0c11898f4a3cb94c6f6c0115d639a9d9ebbce30b Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Mon, 29 Feb 2016 21:54:49 -0500 Subject: [PATCH 4/4] not so comical now --- code/modules/mob/living/say.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index 7e12928a26c..daa0f9571fc 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -90,7 +90,7 @@ proc/get_radio_key_from_channel(var/channel) if(GREY in mutations) message = "[message]" - if(COMIC in mutations) + else if(COMIC in mutations) message = "[message]" if(!IsVocal())