From d422f172a15f631dbea680fd6934fe016a21a088 Mon Sep 17 00:00:00 2001 From: Melon Bread Date: Thu, 21 Apr 2022 20:06:30 -0400 Subject: [PATCH] Initial commit --- assets-raw/BBB_Simulator_Black.otf | Bin 0 -> 7916 bytes assets-raw/Background.kra | Bin 0 -> 164547 bytes assets-raw/Ball.kra | Bin 0 -> 43198 bytes assets-raw/Paddle.kra | Bin 0 -> 41588 bytes assets-raw/bounce_sfx-01.mmpz | Bin 0 -> 1423 bytes assets-raw/icon.kra | Bin 0 -> 24538 bytes assets/Background.png | Bin 0 -> 5802 bytes assets/Background.png.import | 35 +++++++++++ assets/Ball.png | Bin 0 -> 645 bytes assets/Ball.png.import | 35 +++++++++++ assets/Paddle.png | Bin 0 -> 730 bytes assets/Paddle.png.import | 35 +++++++++++ assets/bounce_sfx-01.ogg | Bin 0 -> 13525 bytes assets/bounce_sfx-01.ogg.import | 15 +++++ assets/bounce_sfx-02.ogg | Bin 0 -> 14302 bytes assets/bounce_sfx-02.ogg.import | 15 +++++ assets/pixelfont.tres | 7 +++ assets/ui_theme.tres | 6 ++ default_env.tres | 7 +++ icon.png | Bin 0 -> 796 bytes icon.png.import | 35 +++++++++++ project.godot | 93 +++++++++++++++++++++++++++++ src/Actors/Actor.gd | 13 ++++ src/Actors/Ball.gd | 30 ++++++++++ src/Actors/Ball.tscn | 42 +++++++++++++ src/Actors/Paddle.gd | 15 +++++ src/Actors/Paddle.tscn | 17 ++++++ src/AutoLoad/PlayerData.gd | 21 +++++++ src/AutoLoad/PlayerData.tscn | 6 ++ src/Screens/Game.gd | 22 +++++++ src/Screens/Game.tscn | 86 ++++++++++++++++++++++++++ src/Screens/MainMenu.tscn | 62 +++++++++++++++++++ src/Screens/ResultsScreen.gd | 8 +++ src/Screens/ResultsScreen.tscn | 68 +++++++++++++++++++++ src/UI/ChangeScene.gd | 11 ++++ src/UI/ChangeScene.tscn | 13 ++++ src/UI/GameHUD.gd | 30 ++++++++++ src/UI/GameHUD.tscn | 75 +++++++++++++++++++++++ src/UI/QuitButton.gd | 4 ++ src/UI/QuitButton.tscn | 13 ++++ src/UI/Title.tscn | 16 +++++ 41 files changed, 835 insertions(+) create mode 100644 assets-raw/BBB_Simulator_Black.otf create mode 100644 assets-raw/Background.kra create mode 100644 assets-raw/Ball.kra create mode 100644 assets-raw/Paddle.kra create mode 100644 assets-raw/bounce_sfx-01.mmpz create mode 100644 assets-raw/icon.kra create mode 100644 assets/Background.png create mode 100644 assets/Background.png.import create mode 100644 assets/Ball.png create mode 100644 assets/Ball.png.import create mode 100644 assets/Paddle.png create mode 100644 assets/Paddle.png.import create mode 100644 assets/bounce_sfx-01.ogg create mode 100644 assets/bounce_sfx-01.ogg.import create mode 100644 assets/bounce_sfx-02.ogg create mode 100644 assets/bounce_sfx-02.ogg.import create mode 100644 assets/pixelfont.tres create mode 100644 assets/ui_theme.tres create mode 100644 default_env.tres create mode 100644 icon.png create mode 100644 icon.png.import create mode 100644 project.godot create mode 100644 src/Actors/Actor.gd create mode 100644 src/Actors/Ball.gd create mode 100644 src/Actors/Ball.tscn create mode 100644 src/Actors/Paddle.gd create mode 100644 src/Actors/Paddle.tscn create mode 100644 src/AutoLoad/PlayerData.gd create mode 100644 src/AutoLoad/PlayerData.tscn create mode 100644 src/Screens/Game.gd create mode 100644 src/Screens/Game.tscn create mode 100644 src/Screens/MainMenu.tscn create mode 100644 src/Screens/ResultsScreen.gd create mode 100644 src/Screens/ResultsScreen.tscn create mode 100644 src/UI/ChangeScene.gd create mode 100644 src/UI/ChangeScene.tscn create mode 100644 src/UI/GameHUD.gd create mode 100644 src/UI/GameHUD.tscn create mode 100644 src/UI/QuitButton.gd create mode 100644 src/UI/QuitButton.tscn create mode 100644 src/UI/Title.tscn diff --git a/assets-raw/BBB_Simulator_Black.otf b/assets-raw/BBB_Simulator_Black.otf new file mode 100644 index 0000000000000000000000000000000000000000..efa593a4f72752bce18bdbb3780378a367ac6409 GIT binary patch literal 7916 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 literal 0 HcmV?d00001 diff --git a/assets-raw/Background.kra b/assets-raw/Background.kra new file mode 100644 index 0000000000000000000000000000000000000000..8665e6dd13c7d269eccb2ba73c2657b5ca2975f1 GIT binary patch literal 164547 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 literal 0 HcmV?d00001 diff --git a/assets-raw/Paddle.kra b/assets-raw/Paddle.kra new file mode 100644 index 0000000000000000000000000000000000000000..29efb59b99376b71df5a45e36cc8b420093b8f81 GIT binary patch literal 41588 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 literal 0 HcmV?d00001 diff --git a/assets-raw/icon.kra b/assets-raw/icon.kra new file mode 100644 index 0000000000000000000000000000000000000000..f09ef32803fdec20835148e434aaed5ff0cf6f55 GIT binary patch literal 24538 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 literal 0 HcmV?d00001 diff --git a/assets/Background.png.import b/assets/Background.png.import new file mode 100644 index 0000000..8228349 --- /dev/null +++ b/assets/Background.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/Background.png-6d72d35f07f42b3845e8764c552bb4fb.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/Background.png" +dest_files=[ "res://.import/Background.png-6d72d35f07f42b3845e8764c552bb4fb.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +process/normal_map_invert_y=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/assets/Ball.png b/assets/Ball.png new file mode 100644 index 0000000000000000000000000000000000000000..75a3b735199b36f6daa6519277e4a4257cd14d17 GIT binary patch literal 645 zcmV;00($+4P)>*dmIBfuJCk8Vj2sAx1E2lU?%=@>q5gB-jcz7J`Ln z28E}QOM$YyGA(t;&(YcVe6kpc7 zZ+P(02WSbyHfJJ{FfGUT18u6_2UM@t`m8eK=nXXg{-p`>Y4!%3+T&ZSNTj%T%Vw>_rw{UO>BeK7D^$)9BXX7@U zw>U%6`H!iW}- zk3;M%k+iSVvH%e(rJJnp*i;iA8355zWlgvgU~XPY%nEI!x#sMW!EnVfkr<&KU`3-Q z1aM|9A%HV;3JKg}ZVBWPBKK|?gbXfXnWn``$fi>s5(j((sKk8gEp|W$bie_CAm)R& z_&0!zbBO6$3^w=f90U{Gw5J#>?pY3k0WQ^Id<~Zcal9Y)y0;{su%))b9ePdCat{-)A=Y(w{@z?g`SA4k0 zp22z8EL~}$f$s6|%(<)Xv4^a`_Ip;}x~)rc9irPmEJ=)VeVF<1gWJWBJ<50TQ-rb) z9Y2&jO(x)n+smq{@uJID|5S~Gd6heKAJQT99Tu$s>zN0Lw6U(%!6XCnEruQO`WI?t7w7bky8 z)m(k&|MSe{YR6XJ-R*qg-y;k8!w>E@-;X{1)3R{R{on%o!=d}$>3jGE$1i$+&Gf(E zm%M{VOJgs8e^?~VHt$T!)D<3iGuMT1-8;Wfoo}D@ifJ1rH z{_?NF!Z||PwYgQ0o4QT)I zf4@)eCD&lxeQ#&Xi(J)sSoTIziS=r}t5x#OZzb);7~J~H)@j;_UHG#jUO24W=jzgj zHmhTLqHWX8k(|Nr-xG22_iR?kFc7cj^eJYD@< J);T3K0RZd>D%$`6 literal 0 HcmV?d00001 diff --git a/assets/Paddle.png.import b/assets/Paddle.png.import new file mode 100644 index 0000000..18eaaa8 --- /dev/null +++ b/assets/Paddle.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/Paddle.png-f985def4d60ce45ea6f40458e74985d9.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/Paddle.png" +dest_files=[ "res://.import/Paddle.png-f985def4d60ce45ea6f40458e74985d9.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +process/normal_map_invert_y=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/assets/bounce_sfx-01.ogg b/assets/bounce_sfx-01.ogg new file mode 100644 index 0000000000000000000000000000000000000000..045e9f47856b8499a9f72de8794e8b8ebe7a2c41 GIT binary patch literal 13525 zcmch8ZCF!Ry6DY_6R;ryjwzX$wdd|$bE7;DNd+zhx z``kZwJ$tRJwb$2vzt;P{YprbFv11EB!4E;*68U5>dmc1+ku}Kvf7)ZK+#7s>YKMbA z0KDo8S^j+w*&OWo_Ymxfz*5ti56|%`{_}qgTNsZ=Qo{yCmAfm}ZQiqke5KM>xI8{- zAd{3yO6Ai^H7Pfjm+dR9+_i($?b=_t=bv`HTE44B5geF=amzn#uleVaJ>?sXxw%_N zIUHf{uCncwuavJ+ZrcDr7qRfj|r(R69Rw%TF!3n{lc*GYU&PAT=O1ZYGq!^2{NQ9|8^?- z+;_6lT?1nSRlBY#V)4+eOo$^u>BaQ|b1<6l+YscntjH>H}rKdh*ZTsootEu<8en{BMa6rg04J)#Y(BQ%0 zor(eP9yruvut-2dFhO>Uz%VNKXf*oDtaS4?iTUBlv+H$REV%_R?A!MI{_>mq_ubt8 z`c`lK3-7(Y^}YHR7V5YCslG(i@Wb=x*MI+~;Ij-mi2z?rYR6qgk0h$+PHGRs(J+jH zvLH%Gwnw7y^cn`X?>tp`?A?mD-+lF?(}^FQ<}Nn@2y7AzzRJ#l|LxhnwWIw1{!kUu z@qmK3yigr|p<1dlOE2t63|YqTG=Mav%!!kG)Y*I07xt#ZC%Z;_vCVkpk@1Nii4Y_^ z0F)|vvO4-A#D;n8wLQtt@7;KFZ|+TqiXcY*&!KjiUmzgjQo3_{Ty{4$i@Mk@vd7rXovVyUMxFkik!iVBf7XonQFh7r_b7il`M#+j@!xCn^`u2ctG5` zrsj>XR-bBG(YNMEb5_n^oyi;-*I#2_hMWYzK`e9ekI6DCKjz{-PgDFQ`8$`BK1vKG z!{@K2Js3GpWO7xIixZO}7auwE#anw%rRuBt&)g_Z=x;OUDEc2u6eKEH=FVV6E(=M6 zch4oo2`Cl+NVtd6k9n(S|Ka)g>*#!bEPQ5@)^1t9vA|OB{Qg(BzPazWzpCH1uGLHI(Lh3+pKWkwTSX98@63bF27b#etm!WC-0WO@T=FizWal~JQkbZ-`w{P zk`ojWNow<5y$Aa*$??gX@1!)x7(CLg9@%RhI~qF&kG}QgU=QcNNlr!632)O0XVX1r zv%ImRvaxgM{hn7YoqBNg|N8u0a-vU0ttgL zLeniyKQ;A0*kWF zAB!9FEy2FVEd}qNdT?&v##u{2&wmx+x9Q*79&B9Mso?9bIVy`gcRVguEEf+BEDag2 z6&&puGH<(C|KMQH;8{3S3a$ zjgp||1Dt61^U6$HQM50}1e6}olhwiISH9KGs&iWx^`3#(-ns|THxzFOvS2#we$7(Q zQMMJ1+f&gwG<0?(_!`O`)L0dr1C2fM&Viw`>(sg5YV!rTTMD+V{GsLjv!}V~o0nhR z+!wSB{+9sP<>(Z+=7}=mA`2o)df6-2&_6O1t#Ya+y(OF+MXb6hLlN7CYxIMCZ3g|? zGdGgt3bPpS#nVVGix_aBB@7^{uv@9;C<_xyER9{5H1u0R)hNtd=Y6EITK3D;xBoASL<&#Pc->W9)^|M2IMel#i+tKUzjaYk4KadJvBv z%>`)ykvQ<>G6wITwOkKkyWsjiUr zv%*2}0Z`tCR+3c{DOZ=p0yhUxqFzDiRfAzLDNAvWY?~`Ccbl(f$otQ1SM+z)dCXN; z%sHuXvHdqX6_ItOoSc)%?MbZewzlG`tBr&v=j7xS@P z?^I2F(Y58&nTXOW&;Wa}YVB0<3P4rt2H=^Il6{WWp3wj#7Ybejz-@*I6qOnk{Xx@g zpe=}Z@0J{hcZkmu5bvrlx|R*My;qm5x72&fCLC0P!6MXz!6LM#g597|f(99Um2N|v zh#en3c;WELAR3gf?FMwtNOePd-#h1KZ!hEFeFV55;9vZx z+711X!{CQ46Rs^MSn-&I8hIqF2zgxLFy(yt_X_y!bE)^pA4siH^atVjp`AJB#~d65 zGUqZkEGJNJ|JVbf!JNbXp$DOn_qXwXXcr47f@U=A+Z}A&9aQ%ad%=W&6T$K1%N4-^ zV3Ds`t_V&PEIyuXIR_Jm2@d*Wg*?{54^9+pw_NdfqUFzklXpXULb;?tO#Ir3y!EHj z(QHAIk*aSP#=sn0k1~g$Fhi8XB-H$4?&O&)#p8F&6@!0ovRwTCpKJ=E;792HA9Kh8 zb5$5U8=l2C?}#jns=mt>N!-f}Q;9(7h72RBA#$LEam0}Fd7Ai>lM$s3H{=z0kR=bR z4ul1HEQQqk zbZ=0o9d6ZBRMpk@0sSc+0w$O-?7?@q2}j=h8sqZx-Qu?aEdsO{IBcgO7U04MkiwCK zcgA-1zBkzV>!rFtT+PJxvgv-y20PpsPsS*025oUq+aMsSnNBq zurpC;4ui}3{%P`a>11(I8BsTHyDvy`X6ziS;YMPyQZr)Ume1{6{YsUl={SI^uA#Dse-^*4#4-&dTCk?&z)Sr^>4&wp+K-hDvzX z)bB1Vi2P9-_QTW@k$JLt{}$z|e;B(q#Aof#&JI6MjHaYikI1{P_kb0<@vs%RC=rR( zq_jEfzQ$|y0kTNKv3luoq8j5$GRwF?i{Y;GncxseckR|(1u1rhJS=0xCCa|)R$-Xc z5)c@B-BH6sP~>9QZz?E=WdQIWB`t*?|K;07b3b?kNmiCmT>@i0pV&CEcO%hiu zFQ`o{KrM<2Ub;Kq9qze(Q6(~SL)Rh*Xga~IFz|Bt#Z+w<>yTAhL#HmtHwp3bghj}14zcNf$ngjznwNZX)$cQN@df}d^9(w98- zm;XrejVeyZ{_^69hd)WuaDH;}-kZoqn`r+~<=YJ>SKItYwyiBZzjL(McwP;kT`R!M zpZyN4@R0An<{&M#UOxDX`Hm=zfyeicY@OOrLXL=q6@^CBEj2Ncp&hExoU$_ z5G@SPKg@(%0DpSDX?!ZH2!Q=>>p~|5!f;9^J=fIP!0FkLaNj!nTLjF9Icvon*`GVw zdFx`uY+b=nR+_&^H@TA|vhx(78CZV8!dHc}(~|aKOKdjQOck`|TAG zt27&mG=wlAzA&3uD5^$53w28^1ZQ;lbnZxsG9#s1inQn*4>8JtguRjNOc89xis(r( zmX4K-yk}WwDJv_JBFf`===M3f$t#eBm!`FnUV+ub)|SpFF~K>2%MYESACMoAU?yN*xO6ktX03T%M@$dARY=A8JC47~wd7Tb%AVR6=`< zMw>k&&hJIBa5@GRCtVfoUL=HUx*9ZhF=7^7qEQ`%~AquI-qDgA2FYvCMe)L#Zs^;zYn z$|6YveLf&(9f~EKfH0;V*O)7*(z!}XY~X~3I~!{oco!)Pb~S}mYC#yK%gu0|=l6=Z zcD}iUh}Q(l+-gb`E=XfC2vOan4`*cu5J3p#!Ao5{LYgrd_cP-nH(l>d{pRk)BTsC; z+LikCV*O|1hgPlpS^Ad?qa_299Us?qIoHQUWi^X9d(xRa`){K38^1TKo@<|Z)9|+g zySFbgFmn=D^~Aq@we{T!EP#Tgav8Nox>i_S>>)`iobpT}AY>t7li>3PzZ z{mTuRro8{C{A7k#F*s@wP>!Jr->m=g!T$M8Q4KH6T~BcC6IA%>p__CaUy2!PD*XA# zZ?sKAnzuEv8>Kat8?m8+P`vnJyiZ)LoJ;&WODclC(@?Q_cP#y0wB|%s<8WTaVguxyKN!|8=d0cN7c`zGzal(eWOwA0!e5t<`6;M!>sL&^#egc~?{F?lq%ys!zQ z0n6&aP}Ly7!j(2ORE1xrL~<#^<`Rqdu=HFqXWwN|p8>3#DK#qQ=MOsVYz~S^XJ|W{ z#o}UYsnu9Ya*lA+GNHUC%EZ1bzuANV51VTYi5JqS1uaF9o|3cy;O2T*e!m_d^#-ur zO!qNZEHr*~$%Irz04x;vBMedXWQ96jIVdGrtC3WGwiUQy=q3=D5LIybrN;AKRD_wB z7qx01&v}s&XfM>zA)<7OOviArDL}YATg3Bn1xws>&Q@7ruu5ETA(%Pp%*&9!)xj6X zhzDX%jL(8dw*_c{h8xf3l6VSlHwCA|?y?Wy4Llm5X#@~>OA7C z6$!hB{}LmWci5u{*&avN(YT!Y6XjPX>YbRr*6D0s*})NyZ|RjYQ^_Siy@vR*+_sT( zJGIv+Um1UJ=elTp<>(^tK1w15{uvEbYhP1W(mjyv&u<=kG(VChwrwLGWRoYQ^))_w zcRpqQxS|p!15t@RO>k902xoUbc{!Z2F?;Q zVx_mHheWQ#wHqV5BY-HG#Ql#av@Is>El zK0w5?$0zt0TlpQ9KT`+vsE7uJ)d-sTbCws8;1V^cPzS&u7t91V?Wt%Mcs7gqYw8ap zeJ{`AlW~78r%Ek>74u=6z84-b{nY+4OI6*u136$9TMIS>z?s9gr%j0f{5eCvstEgv!}9m~Q6Qa)dc`#g zKut0iSz!-V^61?r5Wt3Cl$=g0fbOH!F7k2Sn!Ri8!OGh?T!b;s@{+02g?Qkjg}z}q zN}f)R_+Y*_WE8cYI1=hC+t63xN(Nfv#2qI%_HF|-OF7=L5@ujfBnQVhxU(A+bq7_N zcsDDMvI9VSw|2b*qZX%Al6-sSQNXsyGI|LSV>Pm!G%5|+en$JH05%X##@V!8DFi~N zwOyi>$AMN{YlvI2@UIODI4EU7_4cdSA{E_&r-B{ME?PyQXdXAA9olu_;ZmX37&Rc4 z8TO!3fT37kVr@=8rjN3jR7$xs;{?MHOKVQpJO)tvCE!wMKN^QNci|}^R<1}Y^w)4C za*NNS#_RYcUXTeGynIoHq1F>E4z$d=ebkXy5`*^TV!$b`%ZWW|L{+L*X{9$n05R0G zXlS#`=>nqaJ6#MEl9&}ADz;}y;@j;C+No118|Xu(=rs)^cqFtPn5LHQ14-!(#3rDj z%+T9|Z8L09OtGcEtRs{&Ak9E+Hq7Wyg^C?VrT3^V z)l@1PXDt$p->yy(9rn?*h88Qy+mzGA3!(C+QxOz7!MmW<<{Hrhj!vv@Zasl)E~M%{ z*IhmKlyGg>!-=1MGS@0Oz}*-TGNzUL3iQ3%Z}!jgv}dJHwaG&-)uXykROY)6MTK&0 zpGH&H7;9ltpTtOuo=s`v7L9&B&Wdo)aF8Q~?L%wC>iEH-2BB@q15{tu(`yEEK8(uv zUR8O7MKawRG$A zhe*qIIjOXdPx@PxECFf(QQ#dKs~tBnsZW1(Klz|`t%L-CMEGfZjQTkX`bMUnErf5j z3ZVKDK+70B9tLJ3p?3N_rE%b=t7{{ho|=9l^5M$%yVA~Y_F>!QzagJ13zQaHw39pS zx&q@dzfN$1t|UK=KtQ2gXcQ(Jg$47nUonBG)i&QL;LC2XhV0&fJAUT^6Oga`x;Xrq z6~J9OJi(&$WtNv;{o~#n8AS+#Yf4ziy(?*}zfb6sA`aXrdr$5J^_qe(8@dL6fyvZn zoFv-{4%6C(+$u*HlejLGuF}j|4VH2Ajy0S2yOekY+!^a7<;{6o!n9$WtT1T|=oI3v zZk`5g0yL^HGAug9Y5M~YkXk-)l5Cc+)Jj%E<4VGpB!TvwPsx-60A)>iwH9rx-a~O^ zOhjU^pYyqm_C63^Dhm(CWKN!nnsV|Oi^=r>SR6{XRJf&<<3$n6Iw{RFbR$Z_Mu_k< zz+{R|W;0w_Sx#JqYD^VN90A{N7sd&dRD{xC0 zARIVzGL14>Es^mMTf~zaoDL_EJxzjHP~vG^!s@g&EvlAat(wA>w(=kue`q&>b_g{XpF;yS*>8kHI^ z3tvy1Q)?w88j=-_h{UNpRcuF8NExkj%8_y^Ix?vtT147NwnM4GOELBKb1kbBiUfyf zg)xPjGs$Y0_Y`urWem9wKH4k#nG_ek#n>$Q&BUiflJEQ;pR`-MTP>iI5VB%ycs7=L zg8YutFq5Fa&sb{Fy#4&4wx`!OyBbysfAYt+zDI%sN$BOi5IVld(_x5pH;DULefKw; zU%tVx7t;Etz-pOpr^6!ktu#II7l*38EcZusGzkdL7{4#XXwFQ;9>|NueUf_cC}-qc zVo`5NJ+h7Ow(3gEN2Q~(FA;$uk&SvF&tCyCG3tq#0=)aR zkii=kDWK-$($y`rTqL$50VzbI~^dxNUh5P!T;E+Ba` zyo+S5PpRkBH4^PP9ED>!Tf)_*T=Pfa|QKGj^a##E&tROyr1^w)*h3k^f_sQz>Uhn6#*jSWO7U@dQx2L=>u|effF}TnG8e z?KaF3C8NUxo`xkgh+56axPTpJ1{FxPJF#DsLLsF)*=KNJ=7 zWfB#sjRmuMquB55LrGSBz-y1BDQK6kIds8l68OM1kwx1LEmhoZVE9V7&{D1gS|--D ze#*_@kueRZlNR4bco_(kWtiE^Uu+mZxGX@^Tf_NX`HkfD?(FWKOJ;ku{F}P1) zMkk83SjK!TG?{_NI+!4`E+w#y0E}k5(Et!y2IwND1eK_H%R5e3EwT&z3bw}d5$YL#(TCleLQ_v z6e`=FKU%B{eP*XqQAnKW8KD0q0v_iZ&-XC4=qA_6dQzgG7!s}FA9^w$O%ba$tT|qI z6?*AMGOLVF0P@~c6cz#ZIgSgQBNJ1;(>V2M7$9X0@&%nvc%(evq%@8|6}9T{aUX4O zx&;smx}$(+LgF~~SIVkHB=obkZxMn~xjb;oHoN6xw83rAq@tzNbYzm0TI|}Zky>fW zW&Xn?MoYb1d%(!KD8-F)s*G&9f~)Q4d8PU=M>LWWGnEno&OE<~@_2zA@m`b;LiXZD zNg{!lti9-)#bw7eHV4uw4fSFY)i^0~=Jlg>m-@E9iUPVxFLT$(gnI3`y!O&jz}&(U z#ze6^dD%56kar;K^*)rDufSWJwQL#7g9a#UMsA_-X+Clmt>ofPj@$HX5u}l1CT=!0C&DCxl4sre zjGx%lMS@XKo zu+gOFR47MhtY#tJVHdI+B;5(%P#u0Bk7q!dKb;={0n;<%eHJD&bG(`KqqOB2 z7Q@y>A5Y8d(k3Pd-4_svAO6NBFV1fkn7s$S? z*GGd?aSN4UvHND(ob4zB;g_}P?JTNSVwG^nsMV8q{Hg;135GZEOF=6Q_0@nlfN6@N zv64|`*a~YjE9;?4T*?KhNqN&>s~0EQ1bFHio&F(?2(tvNEX-H1JA8^u{h)aA< zl#a|+&;}M8ZWWFLTNh&om)9r?*%Rf6-rO(_*1&^UfNHze+vw?9UK|GQOyF+1`uyP) zVHY~FHvocQv4}C=F<)-)=w2$Y#W&L@7Oxy_N`C8U^gv=<^v@HMb9@0bq8p>`Q=8JH z{hFEU^p-qa75ZG%vu!^ua+;zWc#8S~%+St!TT`ObA8i~Ft(lN6rbIs%{hTjGx`Ih( zp;3TSC!mwT4N`vuEfk$iL%$#0rF2Azwz;%9wn6@;*O?Yjym6+N`Dln!v}tAt8%**U zXc-lc#FJz644RfG%w_AgXj&4JrJ2Y(8jl*w%&e==0#U37z;m0W@0`CdbL-z)7AwW)N~7!wYxZdG9eI&uMBzn0l>utKIcL%` zF=TVvoZrD+yQ0#X|0rIyYL(MoBs{~GG_V1&ilh;le;Wa4X~amStA)}#hoAjZj1&d$ z^XP>^cxv#K;8>wj+|yu;N{N z!5z?YW(PnBdWrtB#@NjltrtmWL>Bwh1l)*$^(-#HdGQ=J5M?&IQqXLSqWa^Zxn#9j z&9zx3UWVIQX5$PnGA2bL5wX(&{Ed}LJeHJ>30!)3k3e|@lOa?$Dg*i`P^+X$BoS5; z8jy61G@CqMldxFYLU&&nLLTZPGg%`V}Kiv@=JY) zL1JI*;@xvnT_W<16+aYv$C_@3zMQ?$E#9-(CEDQtT_WNxjs;%3aHwtV)9Y{!Jqck| z>XlW={2__qdOnByRN}d&hT1^GT8)-j@!c%(U^ZlU>3s3v6P)d*<_{#YHfdaBN<2nx z)4y&RKiG$EG!CC1-swDJFG^6~ev;ALy@ujfVl9IxI_n-E?3;CNcG-8~_V zoEScIf8FnNUlkMv2s$1ZqH{C`(N|(ADSf9WN5-64()1Q|Uw^}yEFHuAz#`MjYzn8e zcFb;gv(Ig>kyh@LT6CIt+Tyf`^>#heH-w!$rD<}^%>KflbeyAEb;;DwxtVxRjSzqR zJNHceynliNje2e~`&WMq>ob8H=S@eupW+E51>shkv>Q^o1jo7Fpe$2HvXK zVmWqJdG*2u)-PJx4QCZYx!XkdN>|l=JblUKFEVPs@>dGa*t`wC4FSQ-Z!s{!VOhQL zg@Ww6?*dR|JXNgW-r%pY%5B~rTgGS_ys5kDm*;QY0ASHA-7t%06Cc|2RYoh;(SAl z@6n=#8(sNc3pm%_xw#abEKTsZTNpXY7{2k{h`FS@Z2TE||@`OH0Zm z_f}li7NzO+8$qQMt72Alk6-Syck{i>A|f2Yl!Mj^cA{wby!5*Q{YtLkvK=5}6IT}w zdnuDwueW0sW}lD_3vZDw?5mJRvwl~;JFw(!h#8Pl%9PKg_L4IUeJLc7g-M zh~Bnc89qwTVWaMY!aicu6S?@U+A2e6W|Mu;jzi`izUqeB7E*5>K}@c{y~k#(O(F5H%E>y*lge4x#ERR)yWJ6++~SuO^VnKvN{ zu}zfeM!A41t;?GO>s6sVj44X8PDBFnJ>YJy0->{PzL!?0?JRW^!!OMMhS&E$Vh2382hR_}i*I!-s=qWIouG_XH0L@{o}&o7HDHBG2>7&# zTE}iBOLki+XEei!_GqObOCRlA4;BG8XgSe)rwEbMib+FTos`8+I}ZpN$mj?}j)gx| z29R`Ati=xZ;H(wVDW%bDB1NLSgX7aFJK()U%I&c5 zXw9b=4UNvxB5aev4*EPjcE`XuH>VH0BZ<^#^2c+g^jg>HyUmlgQ(8Uzmey`@Bx){c za2u`i_zXWs%JyU39J=u+h~U1-JF9THQ7cMHE90elyEMa(f^j^i{|x(88s5TJ(dzh^OXMUWxO5^NMw=&kn9*dYzFVfgcZ`89*AqKhJ4L z!%HT_8DZDY+YuH|+9KU3T51b0v!A{{PK5;0zJIXOr>BvhL`@Nwtd6{W_cbD9g%UAm zGQ&rE3|1;1@t_rdcxK=IRYS+p4$3p-|FZsDE*|K3>O|2WC!XJI{r=$gw-99Eo6iLw z9sl!vw(;eV3H2~*;L5IdUZ^?S{F{G$TJ_2wMy>?}I_C7X@tRc)E|>h2Kk*XxAcKs_ z+}i*B&L&|JFs;(E>MzB&Gb4#YA3R`jR+d(c&UT03Edsi-x@N@YML|XsWig%K_0B5W zxt+JZiYUlLFp{l^Z}LWbaAiWt%+PQE$=O-->W2FpfcOMwCw#BFZUQ|n@2O2Y^%{VX zAyZC}g4~_P;_Lg&3TbD@Sz8Tbs>CQ`V}ZA2OM7s)}XvbL?ENfaBan|2Nk zR!m=HSJS%P4k{zdMfTx5Q+{cMVsKPs=4%4CtH;#y^NaEZH{H=7+RQD&nK&nWw^rh~ zQz953IiX^0zt!l*m6=ntX!jK2thPY zJ)ix&xS$1Yp!)umd$J|Z6sRXT8vzmS4QM-~c3$I9*KYmu{TM{d^ornlEXgv+&qiHL zJL!9(qWIruIE9d*;2q@}JLoK&iG+VHvW}AmDfCpN4k=uMe?QaYsi pao`KDLFvW}uB}jAKXZTf<>y`(&h3-}nVLr*#+c!*yXYADKLP2HfJg&^6Oh{Q6c8QoHPz0{3Chc=6jZG3v@`f3oE&;9-G z{oQ}=V(*>3-s}6;_gULYA)%ynfd6a6J-*?E6`zt#nVI0M!l!egN3z z3tIer2YEHn^KU886M?yFK>4Mh^{KfGp0~N1~ zS1Nz3Or&JFTZ{J=mG0h7>2~ict^C>UU0Zio$pZsZ@ZRvVZB;)ntlYZRxPJWxN(M*R zv%7d(>CUaIR4=PuR>~3f^LbWk((@63!yYOlHO|a<@&F(JuuA2@N46Q{y)B)x1Kt*W z;B8!4=WVGQCyU&wi60(RVsR({7+_@F#_rDyWz#9!$rX*2zLe7J=n z5SNn`k&_itU9NPpGA?Kl!&3n6DV-ZPUYVG=CvkF58oV;Av{ze+ zX7CZ8YD(S{b+|DjYoOYc8@{5q%CQJJ1%Q)Sq~aeQi=_OVihG*t74ON;UXQ;P7kCU^ znNIzD_zIEES3xR{OM+B<`21(b_nc1A@8~^$r(k7oOKz6D_c=$wO{I!GYEJkflhk@E z-;hJ>|w=Ddyjc5V9Q-rxVaX3O2ZfBfK$ zKYnodr!Un0cf$G`=K#nw&PASVvAI=~9o5+y?(+@)fpaQElTDFVo22W`NY~$tyYc75 zSHDV}4bkN!uHO*4Wj1v0t+1^dR&TkLwDnfr*13IKKfJJY^RM67bm4o3dCoR}{9y0j zaZZ3mBq@y#^v&4+%YaZYBX6kd>Xbd}P-;~c*#G97Z$nYi^|J%@4aEJSFP z?uEbK008_R{<=jul9Rh?E;nf|cU7Kw?f;o$VC`Ju`df(*v8@1vL;4vH>U8G{kK8W! zV$@Qv!h1QNs%k{lN1c;i&3if7T}3?cr^*vIQ)=B!AK7?q@tRG~*6wqQ53MEN(kw_h zQ0!qK2LO&iVvt__b6QvC*KzMZs7n(t4-X_Beq=bF`PKd?VEB4})cPZ7O^;?1p@Kky z;T@*w6t6^?WCS!w4@4RMoYo9GtQU#vkM`9?y&s}G9$T-ymDt&SwC{ifX4_ZP8*`Eh z+mA1_#onsQ>l+w+ZPQWlyT@0w$KEn;f!X4XN5$75+sD0{u)cj;ed3M8x~|g8iK}kF zY;5}v*|j<5KwsmAyo;wlzr1(ttU0gie`ev@^vAaa8ke@qg}PhL(t`Hw&$A_q*@Jxx zgT`BVZC!)8TRy1y{9xC>B{)=F-(Y1P%tGBfW1QVv*L6~;%iG$1nm0G6y#=#R7PEs( z@}%`$JbwKLy@RKhd>FcZuJ!xurPE6`a^UJ06Vu;*=6d3mUzT2ad2a8PcTSfK z{*c|+3bOz(NDyE^$a^$IA;QQ2Xn+K~^+41lWR0)VAmz4yc0hXd3`A$)ruNwSnM8=d zlJ-Y+l7Qv|yh!-7bEd@-=?f46tq06_MWFeOue7s?>yJFtH}@Sl{s^LPP+fXx z%ba(#coQ7AtE7E!@X~Og81fy|SS9U!bzQRdzQIc`C$9fWn5c}5eq=S9|4pfqde3i@_jXh_ z=kB@Sl0`;& zZ@@I`YYE`pyCDnW9pdu@#JlRVjzz<5&-9}8mhx!Pgo8>jkcFBskcHM%pc^zw&;WtI zs9U{)RB2S6cQ!pki8i;t8rM07V`SQR9T`Tm=n3T-*WyorO*C0Avk=H6}|+#R#oL@83xXi-7OL)T<59t8{6C?P$};?1wlS_ zBjwR+JLDJ09lNGePW;18)g8+YsIuSQ+;A#@2IYZrz+??q)VB7Vy*xX=h=+>^a6`a9 z`$4rEdLf0ug)MGeOID!b`4(zq;jkj;d4fam*mxmiEF z!BHS_E>gqd1M2M`dO$SfW^upoL1<*XEyC~H#lVT684de(1{!w;)IG#r;6cEN;CQmd ziogIcE7UAj1SSe(pU<}V1|Lon9Q20@S&UN{m?+S0vEunei_3tMcf$RIe93@l#j3IF zgwttgrYPP>*VGPS;3kwu=|hm2Ahir_N`{pO-CG4E(LhV)p<4V_g6RKS2Ng z_=enNzZlHShGYnHw}J3A;FMUL>A;Qo*3?YwnlMkJgms+fwUqE zkYs~ue{cZXH*+lD+CqK{ez*NZqIAEJZ`( zWJs1CV$XIR-oF@%>Aej}e8RFrHE}_dTek|n9X?MMy304MU!d<4p9BmE7%_0#&Oj_c!3U81 z;gx64m36-}aO5`&)&3P#W7~?Sdd=4#YGln&5S)rT_CWJkJxs0YymJ0~ax+$4b78x>aII$Gagd{;Lv8nXNeolS; zV_>bYi(dlqiK}nE{Ic&Fc%iD|13Td$oK#qliAIC7-?>-! z8hUGiHZ(v{$S^Pk@+kV;ulGZR5J&;PK2ZDT>;L(qu;2U!`t^6-^* zPk+-8dW0-**l=mbf7-^SoYzjgQx>MP^`AN=zqz4!?!6v`?W59@4ehnMFV8s!R_}9N zk|X$G4Wo#}F==y=k(>sW%n_8F76r&dto`JnNnxE9%N(O*!PP6Q1Rs0KxF#Rq z$&z4hT>>?oLW!dVoLClq$2>a7ioxM_RU@b7lxI9H``(dopIJ&leAdBs>%hW*d+Bf?Q`z zO-L)YbJ@0mZe0$7sg{NSEayu0=A36cnJpg#`CzyHEpB}^uXcGlVvXJj>DC{{xquP* zmVA#%5xKP1S<62}Sj(~fHqjE3NTaeuaxzSK!>OiVUZqBNFjy#FKbaOM5&E)-ist3O@#}hX(D{Q|F`+_ zXnT*fIeXNM;YFAT-B2nrdR#po*F-UzUaO4^C(1c=?Rz!0VoLA0EG?~a)Z4YR`o4aw zDY+uppNy1GBV_b_4D^&?!kov69QLip=GbZnSE#h>V?DUokB68Y>S((mQ;IMMlFQ5D ziv>~XdZssK#bk&8*Ay~-<#ABNH9NV$UFru4D~64^60+Sa!nePGHt4y-$!Q=sGb`O3 zLAeD4KSIOTG%_?pM<(CHuTBlfO$7yt%1E&w%vF)m!P@S3RrnCK&g&Bzn(qL`4;(ITHuCIxzlfjM?B@&hyx0XSG&$Pl-t({{`2k;3VR7oE_X|;; z8Y(1wR_4u$0XYIgcdnAvZ&avbloA9_j;o(n$vAIb>5?7SPbDLiB>EwgJPvMX8|@NFzv3Sps2{?ukK%a`=x(+edmW2kJQ)NmxaFY-SwRZp3Psc zwI8qj(a(1Cf3ZJzM7KX-_}*k2Ye(wA)NRur|K;A@gz{~NKfUtyn#~!Kvee3m{J5dJ zg_~shlyoXDymIHMeIsUMYz63?~t&M2jN*_1I4hYQx#DuCC4e>+P$|Sz>GM zaZyX+nzujR)AH(D{NyDSwDt?-7l{Z>tO&a$$OCZ)*FeV&1$}eF;xzyb8&NRcS1MrH zfQ9KN0 zG%T&pkjNN6jUzQCOdLs7>)YXNesWEYx~ zlZ1SZh2~aNRm1HyV4<3Ff2slAxy(tanb4!U~i#(PcsTAtT8xF11I1 zJ^;9zK>AO;#xbcv^_=C=XtW%bj??4xq!GlvCB@y0*6S0yWtfQ|B$NcBo=uXQ2BLJ&=&WjQRkK5h zHdBHl8i}}^)<`rqfDxkWJrXTT!8HS$qAY?RE?2?kTstKGF#!mG3_Euu|#5p@Ekl~363Av~4{ z#BrA0!)4G;Tj0A(U8oC;HIax4#cDyamto8JCSY>8CWQbm(r!olC?3U`B0LE;4Cf~o zjUl)Tgr@_XKsj&uNl5X_1tjDMD?V0SoGA0jtRt2%VQ$)*uzkO{s}d9<4QSZ7ZG@hv zS^H{Z@fXiz^Ev(^SQ!2y=U)@uJDc2>3wy;35nSfzrlV}SlI0%C) z3?#~#UvtVoht32fN%-Udtd>Q*NHI|y0A61mBj_D^<1gcF?^Zo2_J=<>Bd?Qf{qo9> zra$i8u!1#B{w$QeX6)r!7fOXN^}lDs{?uUE#+6?H5SyPD>bf((PX0!DV z1uJ=g8NPf5ttN0BN!LD0CeL0jvVP6jOjfIXw>rUd$f%hc7;U!6q&}6+$X%CAB3}$xurR$rUgxLHRV9ZbBpC#7Qwp z!Q;Te7EN^GOd-i4a9s{l2E25YutXZdQcD!0NZp_&v;#oA;v5)O-CuewiY`Z0=6iiHUaUJM%MZq|0p z2|_3lM~MM`I;e&;1k@+2!Xk_wOBO@b1=99cK5(NHu=wxkR~`)4NtR($+-1=EAkIdNp#@AzF&pO2gvVOJp22S{wbs?ytvihcrynJorng zy6}uFssX_oe8pA&k&^IdI>cyaMDk+;v8%* zeVzBXJDo>y9b$tlLiZD*8au1VyNcO{2?{EobywTxXLgi6ejJ^s4)9OS;32RU25-KF zIU1A$dRZM_&=E6KF*gF zrS!W>&nD;HGKJ<{(Z`xY;wgZlSpHEWu>wkfx zigLbC&Q7%+*&PCW-F*nk^rz~F-huk!(r7Nfyeyp^YF6$d*ub=V2>>hkIBt7EBociQ zEa6e*ETGZl0h+ZI)ZblYW0<9yRvRd0#p={*RY!dxvwjTiOl<@IYOvHQ0I=nagp*u+ zPA-*6#M=vxe)6)*;iz{(>-3}XjL~S}k|bj$0Zb5fdg;0zwBH`B06hg2Cg^kR#DopQ zm$THGlxS+gMP_EW#_AYXbULPe{iKBp$|+4S-cd0><`QROnqYkgtGZa(X4FQPx_lCc zbjRF?1Sy{YDUu@40c}w*Ul@nf)+ya++Hx|{r|QQhM4Xug>e}9yrGW1VSz#MXsk90C zXpTU=f~kG%-UnZ=lIEXS9aIIZQwMEyn^rD;G6q z#2btc#!|Ms{6u&>l<|N>ANW(|_4W>I)CL;VT=`Y}>Q(Lt?qFkY5~gTNWUQQ#(_2An zHese4r#v|MXspgvTEc{lqMQcXQ#vF4rkw5t26YuDqpCSt#o^mMf}m`qnImnL;@WPB zqn;XbijpM?p{OB!1hWXEW0wo6c&-oi9;Gtx+_y&wAqaR#mYLLLsjyRxR}U47m)~c-`V+ckBIZzS7 zhx($Yo1MNR1Ob-0lTZ_5P*=fJqRa)sP)~rfu?Q%zzXB}J+4U7po_@Xfg?|ou|LQneSfhSM1A#UXj*#BHyg0*T1tK z#!Jpw-(_9|bnBA@gk~MXz?E%Ylv&yjLlN*`Uwx{vtKKiz)C>G&q!08DCR35%_V7mo zV83wU4=f00;x5c)FU=G|`2)Fa&2>GCTHU|{JDpGtfV+;dj0 zjE@kEcj3sJlj#K7y?`Xjo#;rM`Lsy8KLKbv+ zv0&N_MsptEBV<~=j^NkFNT;FeTf`^*zz)Lf&-U|qV&E}1*FE-9M4d`4R=rivj4_0y z4VDGrm{n9;p3HZQBNWJ<5;VC&CIKHolza-)49gIEh*%}%K+BJD)llGy5)%_)FyIHY zl!72xpi4;{fg6A^KTCV2C4tD~_Xu4|d`ZZw@&7o4=ny5Ih2pjT!wKw{D0L2>GuoA< z`^g)=Ohih#^t1TUW_@>wq2!x`ehSZ;Xm4o@QDyRj`=4ScXZ*h1D{7dW-%p)4YKHTF zm7lppjLD_n)a3uPHB@qSC~t3Gta>Q^5uzibQFTDRRXtIIE^xH&U;dj*3A7+XC+%cyIbn7o*Qe`0L8=rr&7E z{;hHUe|8C_-EIF7`cIEu$vW|R>~Eq#-j(btA~5U?JBa{mGIZ&z{<|0$j=0c;|2iE2 zr~${SY=1n*0GaK)*K-*G_n|N7HMajQ$mR`(_NU_DF#z)ErSEnEuo*5z`$cXjn4yD! zw>A{IfO$f|TVUl2gRLKpa}bc`dw~O#>(_|DGVj*Z{s0WXSGF;Iv}pA7GWgCEp2%>d zQ*-K5&>&LCQ6Srg=-K>Za>$SP!iP8uO}7$$oRjI7D3MI5FBvs**K<6$ zvStE{I9zL&a;X7V)=gC_<`!sN{A9s)+MVzan1(pTQ)JPUhd{z1a9i)kDntrJumhD-(KgU*$QQ%<573-{smx*X`W0hI5$T5NUW@a&PvD3oX= zz!ZtpSS2V6uSHrjtbos`Kr2Vd6oLmxt;>B93GbUM-CMSdB#l{L$b_3$~0RX<&V-jYAmFT#GAWVWbxo0_bh3=5ZYO1>uie zG~*{Fu)G3g1x!%ITYwK3JJt-}UGl%|k)|UE4dav%m6n{nhLbGaOSYPr6kg;;-nKt6 zY<|7YB$ST4mpd1F>Dz@lajTzIyK?2eNW+0H8INI0+oV!IINNpd?e9|KM)~@M{%;qW zH1S^KRK`!&ew#ilbD)=_4(UErdMKGHJPZ-3!SL5<`oH{Hw^HA1?abWxlT#U6(IeK; z!I@vW>HyOt*$a?Zz0#k%P~RF8Q_b4wKMSgrKtlUYRp6K>rm ziPb$}dN9kcpl-u$H8mK5=4Nhu^K~^P$xSjZ<)S#@i2!!4VuV9GYilOq=^_u(8Aw1R z=Q8|bP+tMtQuydcfsYNo3ym?TfA2l?{)3C@f32#}+yA*sDld8QtEUIjelC0atorJ?V27+eHF>0gs^`^uVL*mS@2UMA%SAQWMFDkF?u7`}&1tGaR2Nm7`T!}0I z*GD1?-OK?i27x~odY@3>d~L7=`)z`J4+@s11Rr84oK7&l0hI*nC=`VQn7)cb0C|MIgBAt}73Ad7& zet}A>wK+SIGd)j4T#t)tGskMkB8ov_8KShh$)HqJ3uaW+*@%PV>+1qle!g~6 z-6(Fiide%UO99_O$*f4PhRek<5=LYdA-JD}kq|-1tO3xpztAdjz<3!S;qyoY_0zqS zLIZbio{$KtQ4%HQ#~4H?P)(Wdnz9U#QMO^l3y>@$#*iT0Lz>$!m z4wpEZ0%I(OCV0ci*r7>;FNl8V@`GfR)cOp=?Fi3`6Ll7&*pAUSqMlixB~F5qTJ3-i zGBo$gr->#Ph`nzWaR5s2T*>^)3=%?TO6@AEU+OVC1r*@#UqAhJKxd%1VBWRq-ok;9 zk!Y6a5M^n>4q2}hBao@|2E>LqYl5GyG-S6bDF9;-!A4hd$2d0zpD>E zf-S-CoP0ZKOaBEq3tei8Nl2E`i>!%em2VEAO-E0NR;gvo!{vVn*0@z@kY~(j}{P#n2>Qa0mlabqJ#JRi4U)!&AViG~vx$9EK|; zRuvYRH6|?A`fdvP1Q-It3Em;|2^;E{hRiaQl5385YqWUE6C$KowvIx#s)oalo$xlw zfO*i2DYZ7fN1&8)z6Uo#E^w=ohD zW5IAOv{CC2r4({sW)6*H8Vq`Uoizs&+b1Z2hC!5d@(xxIh0afT#8I@8p%@Sc4OGVI z7ArALtxHNqhAD9e#jKE=&>%!zGP**GQCbR>!1EUzp`0ouSIdGWvl=e0+h#rd%(yOQ85rE2ncA*1N~pV+V&aEXCSUQhmhVOk(w`I{Fk6ARN{mAKaE9Q zZK0hA;T0`at^<^(i!Nl^!Y}29dI(3&%pp-MLeLmJ_^l8_tlWWwRZ z=*iYl=*u&MC;u6%cIA0$0nYD7n-PZQ$%UY1OE(K^r&4LiROvFde+Y%}Ti%4bf=FF} zy1pLqnBE2a<24VG(f50a*C&6w?my4|BChSf<^Rgm&vo$tkSL(m`WXy^#C{1?n2OR5Gc(AD=CeqGfp^;JQpH z)iHX96sQKU!&x3i&ug9V30=YTu5jS!QK@ERB1Mg%`&M#LvA%-@52g?S;MP@WrU{TG zw5w)H5*2oV)gdLfkA5ha(CpOi@3erG%2mMDqnXrIyfKy;7f|j*ikO63k7Mdw|h!^4uo(Xn9H^@b2W)h>ZN^gVH6jN<*h`U{F#c6({+J z^x`^1A1jxt{Mt(gr2-bwoa7~~!h>9+)h1?J02LNzW~3^vJh9HN5r)w4fcJ?Kr($Ed z4uw>u@_#4YK)mXv{v-8I-IrFgJ~Q-D$4T{H_I{kXcNgb6LYzEh_kp|oyfrA}&E6dZ z1N?wErr2WA=5<(>t8^{9!+y;IE^!xCZ@qu}<5e=~fGkCeCn1}*u#z$7Z&m?t>qi{+ z6?LduowqYTgbnfvuYjrk-^uoK;zSsr%ZE=w7NYU$0zR}(H6%TL2WBxR0jT>TU|a_) zZK(qGu2=+0)cOs_3`)<1ey9meLQ9Xsn+;_yw$O_*1xtYsYym(7&ev60uRShRH@azTY5~y=>r^I&Odab0Balz z-`+vE#9`IxTpXE4!p6l~m%*g0E0JCnHLH7t)XFC$mx>sra5vYfQjdCjZW47|%Fd;G z3BU{0`SDp8xJNO<#S_sSpw%;ORjq5xE*7NMxc}S(kT`JX>-LRoBVV-7a2H;MW#%qY~7r6zOy&*vuilGyNz(ANy0x)kf zKo-j)>I9b=z+&}_6a*!xm~aue{<;+RGs+D7mfkHV;d!#F-e3eAjFeSH5DZ8to+9jk z@!YCuYh1Oo9&VIPY4PtlaoHMP0go%f8i-*L9@g+wyj4u@G?ox!@Pbo$8pq5XZ zbz*k4m7Z-fVzIXTuWxOP42j&9GU+CVpV~&x!l{4&&M|VEdfsUrkJL)rHX+r1qIt2CWJ@eC@{Y7<`3{aZ2It#2 zB7(%YYF>g}pS4tIg&87&JHRDWEWS{CiBjVH#Rv+v7e?j-De&P^Kv9^!`O|Bx|N5_g zd*ycS0owKWvj<=PXz=#Y4psW9)*z>M_bY$+t}AQT)$k)i_Q*#=wWa+$g^;;kfB59D za#1Fc=L^eR(HIum`g{1FEhZ#~I9Yw`T*$k29^Lp4{*&;F45&y~#RBwF z@Ld9GxVe}2ozK|Rlg6qoH4U^m@hy)fZUEpx{yq!Q%X^>ePX|9cAiV{J%p`-8MmtT zqqTg1Bu77Vc4*F5o(D{bQhI;PlQ8W9u8Qeo7*^barMuNc+)-XbFGoU2l{N4i3=|km z;e4n=tSSo{oPh&2UzpQ|aokEu2;C!Cp%ajAYP4W1IU3L!Ye#o7R!fn!RzQjDZH!DL zB&;;qgi*>2ehPqJ4-+UQCd2|zQ)|!41SFC{LW6*7cX=voj2luZ@UTDzL`^o^*iHFe zR$zJzO-lHo9zw8Kt&KqH>H$mg3J1DlVz({dQUYmmM{*JMVEQfR%5Zkrp=dQORfdFw z=uf`+I@?;)`DCHYEUxP@eX}r|M*=TQSapvnv=zi=SoU)^9HKnJ4U@-7xeAFhFU^C- zt~AsDjRx8XR0dt1R0TueC1oWFKDeZsYI(A|*4m%_mhzXu1dD+mf&ApR5g8%>o?TV@ z;pZ8L{5fWw5IO;gNoMpA6_<8jlD+?5U;boDlV=_s10Xl)QUn}1HY`_ZC&y+Mc%7jj z#0!^V03nwzN8i@@USd%kgP3dN+W?i9!=?ds?%>x?^uWkxYD9dc%JLG_Cb6*t{q-U~ zpay2=`Z1+@!fHHxTWrJE*C1d_qZqU*RjwN8orpDSs{g=!|Me5Wv!fb#lm>FUH@>t5 c;iv!+^7-wb@2jnis8%JR#GnL53K%c=AKn_q2mk;8 literal 0 HcmV?d00001 diff --git a/assets/bounce_sfx-02.ogg.import b/assets/bounce_sfx-02.ogg.import new file mode 100644 index 0000000..711cf7c --- /dev/null +++ b/assets/bounce_sfx-02.ogg.import @@ -0,0 +1,15 @@ +[remap] + +importer="ogg_vorbis" +type="AudioStreamOGGVorbis" +path="res://.import/bounce_sfx-02.ogg-eb36d4bdfa9c40de823f3eb2a2e506ac.oggstr" + +[deps] + +source_file="res://assets/bounce_sfx-02.ogg" +dest_files=[ "res://.import/bounce_sfx-02.ogg-eb36d4bdfa9c40de823f3eb2a2e506ac.oggstr" ] + +[params] + +loop=false +loop_offset=0 diff --git a/assets/pixelfont.tres b/assets/pixelfont.tres new file mode 100644 index 0000000..ca4ce69 --- /dev/null +++ b/assets/pixelfont.tres @@ -0,0 +1,7 @@ +[gd_resource type="DynamicFont" load_steps=2 format=2] + +[ext_resource path="res://assets-raw/BBB_Simulator_Black.otf" type="DynamicFontData" id=1] + +[resource] +size = 24 +font_data = ExtResource( 1 ) diff --git a/assets/ui_theme.tres b/assets/ui_theme.tres new file mode 100644 index 0000000..210b666 --- /dev/null +++ b/assets/ui_theme.tres @@ -0,0 +1,6 @@ +[gd_resource type="Theme" load_steps=2 format=2] + +[ext_resource path="res://assets/pixelfont.tres" type="DynamicFont" id=1] + +[resource] +default_font = ExtResource( 1 ) diff --git a/default_env.tres b/default_env.tres new file mode 100644 index 0000000..20207a4 --- /dev/null +++ b/default_env.tres @@ -0,0 +1,7 @@ +[gd_resource type="Environment" load_steps=2 format=2] + +[sub_resource type="ProceduralSky" id=1] + +[resource] +background_mode = 2 +background_sky = SubResource( 1 ) diff --git a/icon.png b/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..c2dbadbe4b1cc542559dc0bb19e9e2cd11b31886 GIT binary patch literal 796 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7T#lEU@XXVb`Ho)PG(@xm{>Y-ulHdG ziDUEYJY2P9O9TYZ1RP!1x=Nuhs$I|3Yi+_+)tzc$sX0a47lxW31B+dQ|PZ(DjzJ-ur&_?|bgpvj4bjW&9?A$-t*QJ=inTbiZ2bJ;5Ua zXAON$p4ld5G}B~P-+cEUF0~!qad*F$%KT-$n%1y>dd0NJJBstv{qilRJ+OVG7&eLf zi24yjKX#RUqPre_oc&V$xIOZk2S;)LYy>oF}T;kc!9kW|Pi&JO5 z;#eDa_;TF$0-+a`rFYL4Ds17ulD+PC^{ZW9jTJsH#mv^NpIJ2Px7yxomlhp& zNMYZxCo}UDW5HH#9{Xsc>C!R#vs920*nIA0*}aI1_o{+5N5n|x9$%xLV`S9978H@y}fP7$LJ_>?BmSL zDZ4^ftIj!S+0w<`k=(%@Ao#q1t=0L0X6R`XrH$ETlkQ69KmR|;mu2I=`+Lky7Kau- zT{U-UtbYjCytT*QAK!k})1>7a=l!{SA?Z^@_o)du)iXV@TOAkH|JnC0zjz?WvF%Um zLnF)o6iZ%z70&zq_rIS{N*`zc6kSnt`N;BJ0y#h49{YH9-9xJf&zFUlhjPjb9c-DC zIsd~#0iOeZk6G7z5%gH-!eC;_2K158zxCgum^MVH-DBLn*xqUKYWY+aokROu`nR#) zNLc5`A!zqXEyMa?o6hbZqCo!>2NW0@E-(j{IFvAW&P{&Br<|MPGk4*;-`zU|SJdQP z2uq)_@?Fk_WxT=Fj9WI`V^{yp+4jD^ufc1LFc-i7a)ysnzjNk`_~$-|Jvs?wpQo#z J%Q~loCIDAQPx1f& literal 0 HcmV?d00001 diff --git a/icon.png.import b/icon.png.import new file mode 100644 index 0000000..a4c02e6 --- /dev/null +++ b/icon.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://icon.png" +dest_files=[ "res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +process/normal_map_invert_y=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/project.godot b/project.godot new file mode 100644 index 0000000..e3c6bf4 --- /dev/null +++ b/project.godot @@ -0,0 +1,93 @@ +; Engine configuration file. +; It's best edited using the editor UI and not directly, +; since the parameters that go here are not all obvious. +; +; Format: +; [section] ; section goes between [] +; param=value ; assign values to parameters + +config_version=4 + +_global_script_classes=[ { +"base": "KinematicBody2D", +"class": "Actor", +"language": "GDScript", +"path": "res://src/Actors/Actor.gd" +} ] +_global_script_class_icons={ +"Actor": "" +} + +[application] + +config/name="Pong" +run/main_scene="res://src/Screens/MainMenu.tscn" +config/icon="res://icon.png" + +[autoload] + +PlayerData="*res://src/AutoLoad/PlayerData.tscn" + +[display] + +window/size/width=1280 +window/size/height=720 +window/stretch/mode="2d" +window/stretch/aspect="keep" + +[editor_plugins] + +enabled=PoolStringArray( ) + +[global] + +window=false + +[input] + +P1_Up={ +"deadzone": 0.5, +"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":87,"physical_scancode":0,"unicode":0,"echo":false,"script":null) +, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":1,"axis_value":-1.0,"script":null) +, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":12,"pressure":0.0,"pressed":false,"script":null) + ] +} +P1_Down={ +"deadzone": 0.5, +"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":83,"physical_scancode":0,"unicode":0,"echo":false,"script":null) +, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":1,"axis_value":1.0,"script":null) +, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":13,"pressure":0.0,"pressed":false,"script":null) + ] +} +P2_Up={ +"deadzone": 0.5, +"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777232,"physical_scancode":0,"unicode":0,"echo":false,"script":null) +, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":1,"axis":1,"axis_value":-1.0,"script":null) +, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":1,"button_index":12,"pressure":0.0,"pressed":false,"script":null) + ] +} +P2_Down={ +"deadzone": 0.5, +"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777234,"physical_scancode":0,"unicode":0,"echo":false,"script":null) +, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":1,"axis":1,"axis_value":1.0,"script":null) +, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":1,"button_index":13,"pressure":0.0,"pressed":false,"script":null) + ] +} +Pause={ +"deadzone": 0.5, +"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777217,"physical_scancode":0,"unicode":0,"echo":false,"script":null) +, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":11,"pressure":0.0,"pressed":false,"script":null) + ] +} + +[layer_names] + +2d_physics/layer_1="World" + +[physics] + +common/enable_pause_aware_picking=true + +[rendering] + +environment/default_environment="res://default_env.tres" diff --git a/src/Actors/Actor.gd b/src/Actors/Actor.gd new file mode 100644 index 0000000..af11a01 --- /dev/null +++ b/src/Actors/Actor.gd @@ -0,0 +1,13 @@ +extends KinematicBody2D +class_name Actor + +export var speed: = Vector2(0, 0) + + +var _velocity: = Vector2.ZERO +var _direction: = Vector2.ZERO + +func calculate_move_velocity(linear_velocity: Vector2, direction: Vector2, current_speed: Vector2) -> Vector2: + var move_velocity: = linear_velocity + move_velocity = current_speed * direction + return move_velocity diff --git a/src/Actors/Ball.gd b/src/Actors/Ball.gd new file mode 100644 index 0000000..afd8c5f --- /dev/null +++ b/src/Actors/Ball.gd @@ -0,0 +1,30 @@ +extends Actor + +export var top_speed: = 1000 + +func _ready() -> void: + randomize() + _direction.x = random_direction() + _direction.y = randf() * random_direction() + +func _physics_process(_delta: float) -> void: + _velocity = calculate_move_velocity(_velocity, _direction, speed) + _velocity = move_and_slide(_velocity) + +func _on_BounceCheck_body_entered(body: PhysicsBody2D) -> void: + bounce(body) + +func bounce(object: PhysicsBody2D) -> void: + if speed.x <= top_speed: + speed.x *= 1.1 + if object is Actor: + _direction.x = -_direction.x + $"SFX/BounceSound-2".play() + else: + _direction.y *= -1 + $"SFX/BounceSound-1".play() + +func random_direction() -> int: + var directions:= [-1, 1] + return directions[randi() % directions.size()] + diff --git a/src/Actors/Ball.tscn b/src/Actors/Ball.tscn new file mode 100644 index 0000000..d1a9cce --- /dev/null +++ b/src/Actors/Ball.tscn @@ -0,0 +1,42 @@ +[gd_scene load_steps=7 format=2] + +[ext_resource path="res://src/Actors/Ball.gd" type="Script" id=1] +[ext_resource path="res://assets/Ball.png" type="Texture" id=2] +[ext_resource path="res://assets/bounce_sfx-01.ogg" type="AudioStream" id=3] +[ext_resource path="res://assets/bounce_sfx-02.ogg" type="AudioStream" id=4] + +[sub_resource type="RectangleShape2D" id=2] + +[sub_resource type="RectangleShape2D" id=1] +extents = Vector2( 14.25, 15 ) + +[node name="Ball" type="KinematicBody2D"] +script = ExtResource( 1 ) +speed = Vector2( 200, 100 ) + +[node name="Sprite" type="Sprite" parent="."] +texture = ExtResource( 2 ) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +shape = SubResource( 2 ) +disabled = true + +[node name="BounceCheck" type="Area2D" parent="."] +position = Vector2( -1, 0 ) +rotation = -3.14159 +scale = Vector2( 1.40155, 1.3282 ) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="BounceCheck"] +modulate = Color( 0.815686, 0.854902, 0.113725, 1 ) +position = Vector2( -0.75, 0 ) +shape = SubResource( 1 ) + +[node name="SFX" type="Node" parent="."] + +[node name="BounceSound-1" type="AudioStreamPlayer" parent="SFX"] +stream = ExtResource( 3 ) + +[node name="BounceSound-2" type="AudioStreamPlayer" parent="SFX"] +stream = ExtResource( 4 ) + +[connection signal="body_entered" from="BounceCheck" to="." method="_on_BounceCheck_body_entered"] diff --git a/src/Actors/Paddle.gd b/src/Actors/Paddle.gd new file mode 100644 index 0000000..80df4e6 --- /dev/null +++ b/src/Actors/Paddle.gd @@ -0,0 +1,15 @@ +extends Actor + +export var Player: = 1 + + +func _physics_process(_delta: float) -> void: + _direction = get_direction() + _velocity = calculate_move_velocity(_velocity, _direction, speed) + _velocity = move_and_slide(_velocity) + +func get_direction() -> Vector2: + return Vector2( + 0, + Input.get_action_strength("P%s_Down" % Player) - Input.get_action_strength("P%s_Up" % Player) + ) diff --git a/src/Actors/Paddle.tscn b/src/Actors/Paddle.tscn new file mode 100644 index 0000000..b3901fa --- /dev/null +++ b/src/Actors/Paddle.tscn @@ -0,0 +1,17 @@ +[gd_scene load_steps=4 format=2] + +[ext_resource path="res://assets/Paddle.png" type="Texture" id=1] +[ext_resource path="res://src/Actors/Paddle.gd" type="Script" id=2] + +[sub_resource type="RectangleShape2D" id=1] +extents = Vector2( 20, 80 ) + +[node name="Paddle" type="KinematicBody2D"] +script = ExtResource( 2 ) +speed = Vector2( 0, 250 ) + +[node name="Sprite" type="Sprite" parent="."] +texture = ExtResource( 1 ) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +shape = SubResource( 1 ) diff --git a/src/AutoLoad/PlayerData.gd b/src/AutoLoad/PlayerData.gd new file mode 100644 index 0000000..7034982 --- /dev/null +++ b/src/AutoLoad/PlayerData.gd @@ -0,0 +1,21 @@ +extends Node + +# TODO: Look into using an array or something to clean this up + +signal p1_score_updated +signal p2_score_updated + +var p1_score: = 0 setget set_p1_score +var p2_score: = 0 setget set_p2_score + +func reset_scores() -> void: + p1_score = 0 + p2_score = 0 + +func set_p1_score(value: int) -> void: + p1_score = value + emit_signal("p1_score_updated") + +func set_p2_score(value: int) -> void: + p2_score = value + emit_signal("p2_score_updated") diff --git a/src/AutoLoad/PlayerData.tscn b/src/AutoLoad/PlayerData.tscn new file mode 100644 index 0000000..005b762 --- /dev/null +++ b/src/AutoLoad/PlayerData.tscn @@ -0,0 +1,6 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://src/AutoLoad/PlayerData.gd" type="Script" id=1] + +[node name="PlayerData" type="Node"] +script = ExtResource( 1 ) diff --git a/src/Screens/Game.gd b/src/Screens/Game.gd new file mode 100644 index 0000000..5df95ac --- /dev/null +++ b/src/Screens/Game.gd @@ -0,0 +1,22 @@ +extends Node + +export var target_score: = 5 + +func _on_Left_area_entered(_area: Area2D) -> void: + score_point(2) + +func _on_Right_area_entered(_area: Area2D) -> void: + score_point(1) + +func score_point(player_scored: int) -> void: + if player_scored == 1: + PlayerData.p1_score += 1 + else: + PlayerData.p2_score += 1 + get_tree().reload_current_scene() + check_winner() + + +func check_winner() -> void: + if PlayerData.p1_score >= target_score or PlayerData.p2_score >= target_score: + get_tree().change_scene("res://src/Screens/ResultsScreen.tscn") diff --git a/src/Screens/Game.tscn b/src/Screens/Game.tscn new file mode 100644 index 0000000..2ae1134 --- /dev/null +++ b/src/Screens/Game.tscn @@ -0,0 +1,86 @@ +[gd_scene load_steps=9 format=2] + +[ext_resource path="res://src/Actors/Paddle.tscn" type="PackedScene" id=1] +[ext_resource path="res://assets/Background.png" type="Texture" id=2] +[ext_resource path="res://src/UI/GameHUD.tscn" type="PackedScene" id=3] +[ext_resource path="res://src/Screens/Game.gd" type="Script" id=4] +[ext_resource path="res://src/Actors/Ball.tscn" type="PackedScene" id=5] + +[sub_resource type="RectangleShape2D" id=1] +extents = Vector2( 640, 0.5 ) + +[sub_resource type="RectangleShape2D" id=2] +extents = Vector2( 4, 358.5 ) + +[sub_resource type="RectangleShape2D" id=3] +extents = Vector2( 4, 358.5 ) + +[node name="Game" type="Node2D"] +script = ExtResource( 4 ) + +[node name="BackgroundLayer" type="CanvasLayer" parent="."] +layer = -101 + +[node name="Background" type="TextureRect" parent="BackgroundLayer"] +anchor_right = 1.0 +anchor_bottom = 1.0 +texture = ExtResource( 2 ) + +[node name="UserInterface" type="CanvasLayer" parent="."] +layer = 100 + +[node name="GameHUD" parent="UserInterface" instance=ExtResource( 3 )] + +[node name="Bounds" type="Node" parent="."] +__meta__ = { +"_editor_description_": "The bounds of the game map" +} + +[node name="Top" type="StaticBody2D" parent="Bounds"] + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Bounds/Top"] +position = Vector2( 640, -0.5 ) +shape = SubResource( 1 ) + +[node name="Bottom" type="StaticBody2D" parent="Bounds"] +position = Vector2( 0, 720 ) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Bounds/Bottom"] +position = Vector2( 640, -0.5 ) +shape = SubResource( 1 ) + +[node name="Left" type="Area2D" parent="Bounds"] +monitorable = false + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Bounds/Left"] +position = Vector2( -4, 359.5 ) +shape = SubResource( 2 ) + +[node name="Right" type="Area2D" parent="Bounds"] +monitorable = false + +[node name="CollisionShape2D2" type="CollisionShape2D" parent="Bounds/Right"] +position = Vector2( 1284, 359.5 ) +shape = SubResource( 3 ) + +[node name="Actors" type="Node" parent="."] +__meta__ = { +"_editor_description_": "All actors in the game" +} + +[node name="Player1" parent="Actors" instance=ExtResource( 1 )] +pause_mode = 2 +modulate = Color( 0.0862745, 0.54902, 0.254902, 1 ) +position = Vector2( 64, 376 ) + +[node name="Player2" parent="Actors" instance=ExtResource( 1 )] +modulate = Color( 0.560784, 0.00392157, 0.658824, 1 ) +position = Vector2( 1216, 376 ) +Player = 2 + +[node name="Ball" parent="Actors" instance=ExtResource( 5 )] +modulate = Color( 1, 0.913725, 0, 1 ) +position = Vector2( 640, 376 ) + +[connection signal="area_entered" from="Bounds/Left" to="." method="_on_Left_area_entered"] +[connection signal="area_entered" from="Bounds/Right" to="." method="_on_Right_area_entered"] diff --git a/src/Screens/MainMenu.tscn b/src/Screens/MainMenu.tscn new file mode 100644 index 0000000..a639d90 --- /dev/null +++ b/src/Screens/MainMenu.tscn @@ -0,0 +1,62 @@ +[gd_scene load_steps=9 format=2] + +[ext_resource path="res://assets-raw/BBB_Simulator_Black.otf" type="DynamicFontData" id=1] +[ext_resource path="res://assets/Background.png" type="Texture" id=2] +[ext_resource path="res://assets/ui_theme.tres" type="Theme" id=3] +[ext_resource path="res://src/UI/QuitButton.tscn" type="PackedScene" id=4] +[ext_resource path="res://src/UI/ChangeScene.tscn" type="PackedScene" id=5] +[ext_resource path="res://src/UI/Title.tscn" type="PackedScene" id=6] + +[sub_resource type="DynamicFont" id=1] +font_data = ExtResource( 1 ) + +[sub_resource type="Theme" id=2] +default_font = SubResource( 1 ) + +[node name="MainMenu" type="Control"] +anchor_right = 1.0 +anchor_bottom = 1.0 +theme = ExtResource( 3 ) + +[node name="Background" type="TextureRect" parent="."] +modulate = Color( 0, 0, 0, 1 ) +margin_right = 40.0 +margin_bottom = 40.0 +theme = SubResource( 2 ) +texture = ExtResource( 2 ) + +[node name="Title" parent="." instance=ExtResource( 6 )] +pause_mode = 2 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +margin_left = -150.5 +margin_top = -215.5 +margin_right = 150.5 +margin_bottom = -148.5 +text = "Pong" + +[node name="MenuButtons" type="VBoxContainer" parent="."] +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +margin_left = -84.0 +margin_top = -36.0 +margin_right = 87.0 +margin_bottom = 63.0 +alignment = 1 + +[node name="PlayButton" parent="MenuButtons" instance=ExtResource( 5 )] +margin_right = 171.0 +margin_bottom = 47.0 +size_flags_vertical = 3 +text = "Play" +next_scene_path = "res://src/Screens/Game.tscn" + +[node name="QuitButton" parent="MenuButtons" instance=ExtResource( 4 )] +margin_top = 51.0 +margin_right = 171.0 +margin_bottom = 99.0 +size_flags_vertical = 3 diff --git a/src/Screens/ResultsScreen.gd b/src/Screens/ResultsScreen.gd new file mode 100644 index 0000000..761accd --- /dev/null +++ b/src/Screens/ResultsScreen.gd @@ -0,0 +1,8 @@ +extends Control + +onready var results_title: Label = $Title + +func _ready() -> void: + var winner: = 1 if PlayerData.p1_score > PlayerData.p2_score else 2 + results_title.text = "Player %s Wins!" % winner + PlayerData.reset_scores() diff --git a/src/Screens/ResultsScreen.tscn b/src/Screens/ResultsScreen.tscn new file mode 100644 index 0000000..2096fb2 --- /dev/null +++ b/src/Screens/ResultsScreen.tscn @@ -0,0 +1,68 @@ +[gd_scene load_steps=10 format=2] + +[ext_resource path="res://assets-raw/BBB_Simulator_Black.otf" type="DynamicFontData" id=1] +[ext_resource path="res://assets/Background.png" type="Texture" id=2] +[ext_resource path="res://assets/ui_theme.tres" type="Theme" id=3] +[ext_resource path="res://src/UI/QuitButton.tscn" type="PackedScene" id=4] +[ext_resource path="res://src/UI/ChangeScene.tscn" type="PackedScene" id=5] +[ext_resource path="res://src/UI/Title.tscn" type="PackedScene" id=6] +[ext_resource path="res://src/Screens/ResultsScreen.gd" type="Script" id=7] + +[sub_resource type="DynamicFont" id=1] +font_data = ExtResource( 1 ) + +[sub_resource type="Theme" id=2] +default_font = SubResource( 1 ) + +[node name="ResultsScreen" type="Control"] +anchor_right = 1.0 +anchor_bottom = 1.0 +theme = ExtResource( 3 ) +script = ExtResource( 7 ) + +[node name="Background" type="TextureRect" parent="."] +modulate = Color( 0, 0, 0, 1 ) +margin_right = 40.0 +margin_bottom = 40.0 +theme = SubResource( 2 ) +texture = ExtResource( 2 ) + +[node name="Title" parent="." instance=ExtResource( 6 )] +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +margin_left = -169.0 +margin_top = -168.0 +margin_right = 169.0 +margin_bottom = -101.0 +text = "Player %s Wins!" + +[node name="MenuButtons" type="VBoxContainer" parent="."] +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +margin_left = -84.0 +margin_top = -36.0 +margin_right = 87.0 +margin_bottom = 63.0 +alignment = 1 + +[node name="Restart" parent="MenuButtons" instance=ExtResource( 5 )] +margin_right = 171.0 +margin_bottom = 40.0 +text = "Restart" +next_scene_path = "res://src/Screens/Game.tscn" + +[node name="MainMenuButton" parent="MenuButtons" instance=ExtResource( 5 )] +margin_top = 44.0 +margin_right = 171.0 +margin_bottom = 84.0 +text = "Main Menu" +next_scene_path = "res://src/Screens/MainMenu.tscn" + +[node name="QuitButton" parent="MenuButtons" instance=ExtResource( 4 )] +margin_top = 88.0 +margin_right = 171.0 +margin_bottom = 128.0 diff --git a/src/UI/ChangeScene.gd b/src/UI/ChangeScene.gd new file mode 100644 index 0000000..ebff763 --- /dev/null +++ b/src/UI/ChangeScene.gd @@ -0,0 +1,11 @@ +tool +extends Button + +export(String, FILE) var next_scene_path: = "" + +func _on_ChangeSceneButton_button_up() -> void: + get_tree().paused = false + get_tree().change_scene(next_scene_path) + +func _on_configuration_warning() -> String: + return "Next Level property can't be empty" if next_scene_path == "" else "" diff --git a/src/UI/ChangeScene.tscn b/src/UI/ChangeScene.tscn new file mode 100644 index 0000000..215f8d6 --- /dev/null +++ b/src/UI/ChangeScene.tscn @@ -0,0 +1,13 @@ +[gd_scene load_steps=3 format=2] + +[ext_resource path="res://assets/ui_theme.tres" type="Theme" id=1] +[ext_resource path="res://src/UI/ChangeScene.gd" type="Script" id=2] + +[node name="ChangeSceneButton" type="Button"] +margin_right = 12.0 +margin_bottom = 20.0 +theme = ExtResource( 1 ) +text = "CHANGE_SCENE" +script = ExtResource( 2 ) + +[connection signal="button_up" from="." to="." method="_on_ChangeSceneButton_button_up"] diff --git a/src/UI/GameHUD.gd b/src/UI/GameHUD.gd new file mode 100644 index 0000000..a28fb69 --- /dev/null +++ b/src/UI/GameHUD.gd @@ -0,0 +1,30 @@ +extends Control + +onready var scene_tree = get_tree() +onready var p1_score: Label = $P1Score +onready var p2_score: Label = $P2Score +onready var pause_overlay: ColorRect = $PauseOverlay + +var paused: = false setget set_paused + +func _ready() -> void: + PlayerData.connect("p1_score_updated", self, "update_interface") + PlayerData.connect("p2_score_updated", self, "update_interface") + update_interface() + +func _unhandled_input(event: InputEvent) -> void: + if event.is_action_pressed("Pause"): + self.paused = not paused + # Prevents other nodes handling the "pause" event + scene_tree.set_input_as_handled() + + +func update_interface() -> void: + p1_score.text = "%s" % PlayerData.p1_score + p2_score.text = "%s" % PlayerData.p2_score + + +func set_paused(value: bool) -> void: + paused = value + scene_tree.paused = value + pause_overlay.visible = value diff --git a/src/UI/GameHUD.tscn b/src/UI/GameHUD.tscn new file mode 100644 index 0000000..6120fef --- /dev/null +++ b/src/UI/GameHUD.tscn @@ -0,0 +1,75 @@ +[gd_scene load_steps=7 format=2] + +[ext_resource path="res://src/UI/GameHUD.gd" type="Script" id=4] +[ext_resource path="res://src/UI/QuitButton.tscn" type="PackedScene" id=5] +[ext_resource path="res://src/UI/Title.tscn" type="PackedScene" id=6] +[ext_resource path="res://src/UI/ChangeScene.tscn" type="PackedScene" id=7] +[ext_resource path="res://assets-raw/BBB_Simulator_Black.otf" type="DynamicFontData" id=8] + +[sub_resource type="DynamicFont" id=1] +size = 48 +font_data = ExtResource( 8 ) + +[node name="GameHUD" type="Control"] +pause_mode = 2 +anchor_right = 1.0 +anchor_bottom = 1.0 +script = ExtResource( 4 ) +__meta__ = { +"_edit_vertical_guides_": [ 640.0 ] +} + +[node name="P1Score" parent="." instance=ExtResource( 6 )] +margin_left = 576.0 +margin_right = 632.0 +margin_bottom = 67.0 +text = "%s" + +[node name="P2Score" parent="." instance=ExtResource( 6 )] +margin_left = 648.0 +margin_right = 704.0 +margin_bottom = 67.0 +text = "%s" + +[node name="PauseOverlay" type="ColorRect" parent="."] +visible = false +anchor_right = 1.0 +anchor_bottom = 1.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +color = Color( 0, 0, 0, 0.235294 ) + +[node name="Title" parent="PauseOverlay" instance=ExtResource( 6 )] +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +margin_left = -150.5 +margin_top = -215.5 +margin_right = 150.5 +margin_bottom = -148.5 +custom_fonts/font = SubResource( 1 ) +text = "Paused" + +[node name="MenuButtons" type="VBoxContainer" parent="PauseOverlay"] +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +margin_left = -84.0 +margin_top = -36.0 +margin_right = 87.0 +margin_bottom = 63.0 +alignment = 1 + +[node name="MainMenuButton" parent="PauseOverlay/MenuButtons" instance=ExtResource( 7 )] +margin_top = 7.0 +margin_right = 171.0 +margin_bottom = 47.0 +text = "Main Menu" +next_scene_path = "res://src/Screens/MainMenu.tscn" + +[node name="QuitButton" parent="PauseOverlay/MenuButtons" instance=ExtResource( 5 )] +margin_top = 51.0 +margin_right = 171.0 +margin_bottom = 91.0 diff --git a/src/UI/QuitButton.gd b/src/UI/QuitButton.gd new file mode 100644 index 0000000..f8c5c4f --- /dev/null +++ b/src/UI/QuitButton.gd @@ -0,0 +1,4 @@ +extends Button + +func _on_QuitButton_button_up() -> void: + get_tree().quit() diff --git a/src/UI/QuitButton.tscn b/src/UI/QuitButton.tscn new file mode 100644 index 0000000..c176e1f --- /dev/null +++ b/src/UI/QuitButton.tscn @@ -0,0 +1,13 @@ +[gd_scene load_steps=3 format=2] + +[ext_resource path="res://assets/ui_theme.tres" type="Theme" id=1] +[ext_resource path="res://src/UI/QuitButton.gd" type="Script" id=2] + +[node name="QuitButton" type="Button"] +margin_right = 12.0 +margin_bottom = 20.0 +theme = ExtResource( 1 ) +text = "Quit" +script = ExtResource( 2 ) + +[connection signal="button_up" from="." to="." method="_on_QuitButton_button_up"] diff --git a/src/UI/Title.tscn b/src/UI/Title.tscn new file mode 100644 index 0000000..d12c3a9 --- /dev/null +++ b/src/UI/Title.tscn @@ -0,0 +1,16 @@ +[gd_scene load_steps=4 format=2] + +[ext_resource path="res://assets-raw/BBB_Simulator_Black.otf" type="DynamicFontData" id=1] +[ext_resource path="res://assets/ui_theme.tres" type="Theme" id=2] + +[sub_resource type="DynamicFont" id=1] +size = 48 +font_data = ExtResource( 1 ) + +[node name="Title" type="Label"] +margin_right = 40.0 +margin_bottom = 14.0 +theme = ExtResource( 2 ) +custom_fonts/font = SubResource( 1 ) +text = "TITLE_TEXT" +align = 1