From e1805e04d43bc7c8cb240ebc1d1271fa229bcc62 Mon Sep 17 00:00:00 2001
From: brainfood1183 <113240905+brainfood1183@users.noreply.github.com>
Date: Thu, 15 Feb 2024 00:52:24 +0000
Subject: [PATCH] Add French accent beret (#21430)
---
.../Components/FrenchAccentComponent.cs | 11 +++++
.../EntitySystems/FrenchAccentSystem.cs | 45 ++++++++++++++++++
.../VendingMachines/Inventories/theater.yml | 1 +
.../Entities/Clothing/Head/hats.yml | 17 +++++++
.../Prototypes/Roles/Jobs/Civilian/mime.yml | 1 +
.../Hats/beret_french.rsi/equipped-HELMET.png | Bin 0 -> 16970 bytes
.../Head/Hats/beret_french.rsi/icon.png | Bin 0 -> 15283 bytes
.../Hats/beret_french.rsi/inhand-left.png | Bin 0 -> 16928 bytes
.../Hats/beret_french.rsi/inhand-right.png | Bin 0 -> 16926 bytes
.../Head/Hats/beret_french.rsi/meta.json | 26 ++++++++++
10 files changed, 101 insertions(+)
create mode 100644 Content.Server/Speech/Components/FrenchAccentComponent.cs
create mode 100644 Content.Server/Speech/EntitySystems/FrenchAccentSystem.cs
create mode 100644 Resources/Textures/Clothing/Head/Hats/beret_french.rsi/equipped-HELMET.png
create mode 100644 Resources/Textures/Clothing/Head/Hats/beret_french.rsi/icon.png
create mode 100644 Resources/Textures/Clothing/Head/Hats/beret_french.rsi/inhand-left.png
create mode 100644 Resources/Textures/Clothing/Head/Hats/beret_french.rsi/inhand-right.png
create mode 100644 Resources/Textures/Clothing/Head/Hats/beret_french.rsi/meta.json
diff --git a/Content.Server/Speech/Components/FrenchAccentComponent.cs b/Content.Server/Speech/Components/FrenchAccentComponent.cs
new file mode 100644
index 0000000000..f696c35ea0
--- /dev/null
+++ b/Content.Server/Speech/Components/FrenchAccentComponent.cs
@@ -0,0 +1,11 @@
+using Content.Server.Speech.EntitySystems;
+
+namespace Content.Server.Speech.Components;
+
+///
+/// French accent replaces spoken letters. "th" becomes "z" and "H" at the start of a word becomes "'".
+///
+[RegisterComponent]
+[Access(typeof(FrenchAccentSystem))]
+public sealed partial class FrenchAccentComponent : Component
+{ }
diff --git a/Content.Server/Speech/EntitySystems/FrenchAccentSystem.cs b/Content.Server/Speech/EntitySystems/FrenchAccentSystem.cs
new file mode 100644
index 0000000000..5637288732
--- /dev/null
+++ b/Content.Server/Speech/EntitySystems/FrenchAccentSystem.cs
@@ -0,0 +1,45 @@
+using Content.Server.Speech.Components;
+using System.Text.RegularExpressions;
+
+namespace Content.Server.Speech.EntitySystems;
+
+///
+/// System that gives the speaker a faux-French accent.
+///
+public sealed class FrenchAccentSystem : EntitySystem
+{
+ [Dependency] private readonly ReplacementAccentSystem _replacement = default!;
+
+ public override void Initialize()
+ {
+ base.Initialize();
+
+ SubscribeLocalEvent(OnAccentGet);
+ }
+
+ public string Accentuate(string message, FrenchAccentComponent component)
+ {
+ var msg = message;
+
+ msg = _replacement.ApplyReplacements(msg, "french");
+
+ // replaces th with dz
+ msg = Regex.Replace(msg, @"th", "'z", RegexOptions.IgnoreCase);
+
+ // removes the letter h from the start of words.
+ msg = Regex.Replace(msg, @"(?a
z)G>wOG!5Z~3E@g93piwz-mT}St)KbM
z%9-=Hg1$qhU06El$+^cl=N`X!gTMHTU$aYA8w(E2>^N#o#mtQH_9gt@WrK5$d^2Le
z!ZEWqjKA6LmTzOvmlr=vvtgb-(Y2J9qu@=VfQVxYo0e`4Y8s
zaZmDF%hu(e<+>j{e417@*1x*u)-kv)mQ{3V8DC~E#7V}RMNo_rWQDveTtx&i=Z08<
ztOC5k3EZ?VM|pF{Zl!{za+G8AcFfM^gG#!f#t%wrMwXH_Riueh=2|k$Ashzq0-jKW
zydEEihjNtRxH$YRG^0vI7{XWODD#AbiZZ)Hk
zYCVc+Q7xv@XmK5e>okh!OKHh~zs!Ehg%?|gM$^H+a+H-k&*CT=3qC|N+wrY%>uL-a7@5Yf*})tkMEZ%)G(Xf5sxHH
z*G+rb@Py$aq)bkcaXcIFd%{?XM1co*VG<6GTb+^zxJXAbP5Cu(6Ft93bL$VZGwr
zEe7CeSHf0JrZ4ogNCP3d1)9(kp@mHx@s=6R!EVQ`3>gp>!)CPz%ZXDANmF?ECz%cO
zCbb5ZiJr(-=?D|1G69!Sr8PRKY)or30kz32NYOM*!oJZIHXp|mJ`%tb5S&HB_&VTp
znMfm{A}}gjrODO-mD8v!hP9!i0I6~s2)HbIOb=X6jX|T;#1e?;E$84E7at`2AkPggW*G(z
zrqE=mF-7JW+D9=#u750AQ((&hgO$K%(O?>_3WKA>N-?-i>v63<7AM@FOgE##_UfVk
z@2e!zOj;#GTp*$+PcdPighFby3e%OU4Y*c^>x>nxN|fL?U5Us=GjW!JM=9YV`M)n<
z%$MJ3)YOX>X>D3@u_|s}p=RNdh37eJ7EKmrM&o}a)Qcb-9)fo#>O
zTWBxg1}N)uo6$sLQ=~BXX2@ux2nkJx=lcNxH?mTO@mRjc>LycCMFUoX2a&2wcutFB
zYUsH*KLSdk+Zl>>Ri~myEi2GPpkz8c;!y-od{+Q5OcX+NAixV5k`VUYusm=hO~8cG
z5cZG3gc}t#o5kmeR_NwbSxPFIpidM`QjTPDlMH!&KFIj1iu^^+*8s^&&CxQwNtR-G
zNauKewN0{6DVb*BaE03hpO*w!)1rvqf4YY9UPmAIE(EX{R8V<3~$8pYbq$SU11|ccfI!344oJ@J87YxlgtTyOP2g
zpgp{b_9?jHVS~kSL_kp>;dF|_qZGW0)VBzz>OoJ5ki
zvRtxUk`#~xmfa=GB}oBEVA)-=T#^)!1eV<;%OyzxNnqJsvRslBkOY?9CCepA0ZCxl
zU9wz~6p#d#-6hKHEc442kMYo@xKe*o7xj6kr
z;=!iw#h-x_bNLa^(pEIgUp%p4GS>NU;qqPw&Y>B7Kd?Z@BL)?=jo!zGuyS+}5cuAM|brTzs@@)#gj5+iWB6Ec(}#BU?N>wN|Wl
z-MUF<-+Qm2eoN&B{p^cho-^9Je9&PvUGpKkrfcU>TXTN&{GCnX$KUG1el+&soVwrk
nXxz5{f~l2pgu6a|W8(A3?SeL!4qiYW3N5xFBdr?;zgqWS#yIcZ
literal 0
HcmV?d00001
diff --git a/Resources/Textures/Clothing/Head/Hats/beret_french.rsi/icon.png b/Resources/Textures/Clothing/Head/Hats/beret_french.rsi/icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..608a155cfdc842548333de8732dd527a1dc06ec2
GIT binary patch
literal 15283
zcmeI3du$X%9LEQZP^&~xt4Po+2O4~A_jP;MTdxPD2W<`4mOiwgMz_0j*9~{O$L_Yh
z7XFY&A_O&xiI3Vu{!ol05~DF{w2BW*jE{dvtkE>!Bc^HE>J!2G7hXdC)wym!T1^yv%^oP#w)dIJz%nMteKCg?KVFkzUrzT-<74T1*kd#f+OU1FxkDS=q=j_f%1C86qo4pO=&DR6l{6hCQ|rsdRnTv*ne#E(
zF7BpUU!9kb>58>7^_C48xjMjVd?3gKL)C&D4Elq&Fd{F=94~Pa&x(@b=M}%mO
z68#F>dR%FXuFa=IR;{ncb<+yR_4oHz_e<55o#2E}D8%t1CyFfU!8!w`t7cf!S(Xbj
z6(^Gc-)iA*QY4pHPXYMK+Od9IvD*9w|+ubs>e
zP1iV>gehpc4$=u_b?F|r-Bh!+=US|rai>)2t&m__D!at5FX@EKQR(QatNvYp(rzUobWMp{c1m?4MoLXU
zE^Q{lT(PmFXJIcX^;Xid(THF~3UlR}OH|qYr8Jq2tC|{YibhaFwPEOrEck=nFc4=Y
zwMJ&88o$7*vL>?rZY>b+_N!uCgxR^rVx{sKp`(`8>(vMfojXo+OGDv{!_oqBjT(we
zY_MC5vw{F28xkaq4M7>g8Y#dBG&GIeI7@=fNYr8*=(JOlC4IcP=qQ;a`XxOs_|Y`f
z5bM|cLAFNfhHOv`KrJ2!Ng=r~moi~yq-r!Av_}U@_Ac7N+4HO&Zl2ycK+^aR7Q#{c{@pU1TUGs|Wted;
z{eLS^+`w9oY9^o_;imTPRKvL~T5c()7uD2RFtZ55-oKH83K(rBHCs4Bn48g7%$)1r
zq?vWNE1zmlle
zk@;X=iVFimHYqMLAIwW}VL-?x#YN_Wc_}Uo2-&2#$b2v_#f1SOn-mwB59Xz~Fd$@;
z;v)0Gyc8D(gltk=WImXe;=+KCO^S=m2lG-~7!a~aagq68UWy9?LN+NbG9S!KabZBn
zCdEbOgLx?~3<%kzxX64kFU5rcA)6EznGfcrxG*4Olj0)t!Mqd~283)J
zkWGq<%m?#QTo@3tNyJrId}b4x=t0eX^hD+}iS*unqw=ux
z+R@{$jhV|HNo?-CcH6qXLtCCcJcs$9LfYY&`f2{s*E_0&wd+1TWWVlTxNX;=(7e5G
z@9eC4{G*HZ9QL(X@m<2#TO%zWtr|M{$D8-7i=O>+aO47T>aBSnCePf`uA91O!T6rz`|1`|4xn`aO>3H?2Up*_{V&;C!F2!t
literal 0
HcmV?d00001
diff --git a/Resources/Textures/Clothing/Head/Hats/beret_french.rsi/inhand-left.png b/Resources/Textures/Clothing/Head/Hats/beret_french.rsi/inhand-left.png
new file mode 100644
index 0000000000000000000000000000000000000000..84d21a6738cdc91042032e3fe12be58f727de5c7
GIT binary patch
literal 16928
zcmeI4Yj6|S701^BYGdjG11XP|A_PoB%4#2aS&J;NEkD#CaBKtS6d!#5|^@#U?-kghxt=Asr}WCIP2FVG=r+0u9Y%+VC*YyOJzj$ub*v
zGSe@s8Ka}S=YP(vPWhk2$JI}b(VwgDav2gx4^$U`9+t(SAVf|
zwuB%9hA4j-$c9bB5hPvU9_iS;=2A0{rpikgwpn=?c|tklU8&V{mImPZ+XkK>*2j?2W>9e@!G!H-SoPZx%Miq|m9MOltK3s5M(`VGR`76!uwMkT
zh#>aKVUcF)I9cc6s`)^k{`R5w^g5o+)6X)yakp5=)$pZDf?UOtX_d^9I>yH8Cp)t3
zVG0EBb26<9`+Wh43g_t~aVcOc&6r*nagpot^!Z9cU6s2`S11HIo!MYP8QfykS#1Ww
zY_*!K6Llm`m@(Xl8F7>}QYM@-k-FGN@5lz0J;-{ga%XWY9r%@}uaRYu!mv;%WC$4z
zLa-VmY&IK)lNd>&zyp;U0x}&&1Jc-NkghmRPGW+*DDy%rVCZ#
za+k#;DZ{Pi{bFRmU=q?MXPLOaSReF7d|3wLe4HO7kwCwRv^o$kE==3yblr1_GGhYD
zqHtoofG!isD#T
zrRZwtS;BXp7J{@H2?EDaj}1(Qi7;}ghcPoK;q@}+T(8+;RHh}`B}m?L4oUFJAv(zA
zSA!CBlz;-$kp=?SJvECDutG?h&=oD&vFCuH8ZO`8-^2=Nf(tz8s_^(8PL_NxUwCojven+e0#LAC5?35aP=BgTBTh%Tv0Bi&MWFg(Z_SaG#v-4K6wHjtAb+2O1^g?yNjX`3k9(OoH}ac
z>7hU`y4j;F8g(kqZ~;m9`om5mu*Z*GB;)I$LpP_;E&
zs)%3*4Hry9)z)ySB7z+>Trdq)Tf?P_2zJnL!8BBD4VNk+*g?Yu(@?cFT&jp*2MrfY
zL)F%BsUm_MG+ZzZRr|5HvJ-Efa{=(Wc?i5$-cP=>1-z54V@k{22(n~6f;Tv|Qu@FJ1^$0RdShJw582pz53tZ0p%J79-7mlr3h7axc;a4xdsPm2zpM3PF
z_0p>4Qc_DD;&Y>jFYjC!
zZfx08Iiv0Df6V^T1zX;28Fv4ZcXuCe+?ADsoLIl@)se0H{r88ye|YKYS2jsaSwhCb
z)vkukLyQ%xzqr^jza7<2&73T}w_MDfGW#{xgd(E2cEhy*a{2xYv{k>$r4$P<+u3yr8Dy0kEA|@?`)d9{+ekn^QF|sxnS<~i-
F_%E>;#d81v
literal 0
HcmV?d00001
diff --git a/Resources/Textures/Clothing/Head/Hats/beret_french.rsi/inhand-right.png b/Resources/Textures/Clothing/Head/Hats/beret_french.rsi/inhand-right.png
new file mode 100644
index 0000000000000000000000000000000000000000..aee4b59f97a0cd033d24f6255e6c88fb3ff99e28
GIT binary patch
literal 16926
zcmeI4Yj6|S6~~tj6l0(`layC@2oajVu-es1mb8m3YD<0yBkWiP41vIUcO|baX&3Dp
z$+#hu$4m$$q);*`=}_KnXoHgm3Y1_5&)7P;d;aI#`@84fz58Lkv3g$l$o%p72!f1sSGa1x=eL#Lysv}52l*8rfRABf
z#UcqohTpIJ4nlVPa4doh+RQth)zuAxEJzK4sB=4=Ix#Hx_yC6>(aYO^JFCGv=z+8U
z_`}IZ8~5*jYMhH&f>VnMCU-o#XYAnN)1GTkDAL*xkW7tD^_u1b)7r7X*bypp`vU%Gl?cRr8e*EDdoiFRCA$Qzr
z?EIPYBDrAWiN9|@a(;;SRy@{WGbz2i<)_OChq@6IEI>?@CSKmE<0>gPW((o@Iz^_Ss(FmG^DZs$;z2d@r`{^pLc`sPMzxb?v8Czfx$GTUEvyBFy|!f!tPlX2@1#IcvJt&{6Kb16m$8faFi=M2%H
z2xbvM?6adH%`|bcuAcMrp(1_HiBozV&lc$y7J6`x=;RvsidA9GyJ}u7v#N<9S^aEB
zzCB8T06|WsbtZf)Q<1({NvNyyRO_5Vn9~&+EGUCptU4=c
zFcw;^X6sBHfg1}k+=Q8MlrT|doH7%-#E;&Q4=j6_^-(phvP3%Ytw`S>%OZtgkx0Z4
zF&TugA2X69iQxoB5Ge3KrIwIPN70ZpH6A1x$HhrZm=|SU2%&33`Ad7NteZXuz>x5X+^MeECxAX1diKKoInXOX9vVUvjq2`S>lwYSf~K&!;}Fl&~x=eOl~}I
zfOxel^Od^XZvdJ1rOPT~_{x=jWn7f+N2Xkf%VI?wuPr+mgU3U;1g2S;47banOee((
z49`+AlkwFPoDHW@+{&`3nFOV5D^!?SSSx9wZ7f;nvnwbv!=%eMk-{C4WIDufAO&zX
z@F2d0CT!+<&Wc)$W*Q|;W*nvK>q!)6aFRBe!8-J@$<1<0CnRZ|MSwdsGK#*(Zd9jzn1|TvN^2
z{12$2vJY(P1(#Tglj!*WCjH&unJ>Ki#m9%zpK;GQZdW}@T=7P7A>9?>a?E#TDAAXh~~
z1L$VIvUt?FJi~<~;mZ#@hrpgXT2f9SAcVoX;T$G=`osw}r^_2sfd}R4_;a#D*(!DQ
z&3r&c`H)VkDKCNJK#ou#<#bAcqZGK+$Ci=lYHPSu5y1``E|`X@t>IEd1UqQBU>d5n
zhD#L@?4aR-X{g#7E>%RZgN6&Hp=xWmR1v`r8ZMZIs;%KtMFcx&xL_KpwuVa;5$vGh
zf@!GQ8ZK2tu!DvRrlD$UxKt6r4jL|)hN`XMQbhziXt-b+sXwsJNJKK>n_0GZ7bB0WD{c`!zu06U>ds}tHqCZXRn!ubs}qevO3!5Yc*$%
z2;$XE56@`Z`Nz)Ay7nj
zSM8GE=~Kw+Z6n46JBIvPkZu-yEfINF=gmn->65Rmtem;1U1@Wd&T}0qS-$qagS@{g
literal 0
HcmV?d00001
diff --git a/Resources/Textures/Clothing/Head/Hats/beret_french.rsi/meta.json b/Resources/Textures/Clothing/Head/Hats/beret_french.rsi/meta.json
new file mode 100644
index 0000000000..a470e00944
--- /dev/null
+++ b/Resources/Textures/Clothing/Head/Hats/beret_french.rsi/meta.json
@@ -0,0 +1,26 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "equipped-HELMET",
+ "directions": 4
+ },
+ {
+ "name": "inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "inhand-right",
+ "directions": 4
+ }
+ ]
+}
--
2.52.0