Merge pull request #285 from raysan5/develop

Integrate develop branch
This commit is contained in:
Ray 2017-05-12 14:01:39 +02:00 • committed by GitHub
commit 1ed3d3285f
27 changed files with 4919 additions and 3837 deletions

View file

@ -14,8 +14,8 @@
<!-- Facebook metatags for sharing -->
<meta property="og:title" content="raylib HTML5 GAME">
<meta property="og:image:type" content="image/png">
<meta property="og:image" content="http://www.raylib.com/img/raylib_logo.png">
<meta property="og:image" content="http://www.raylib.com/img/raylib_logo.png">
<meta property="og:image" content="http://www.raylib.com/common/img/raylib_logo.png">
<meta property="og:image" content="http://www.raylib.com/common/img/raylib_logo.png">
<meta property="og:url" content="http://www.raylib.com/games">
<meta property="og:site_name" content="raylib.com">
<meta property="og:description" content="New hmtl5 videogame, developed using raylib videogames library">
@ -24,8 +24,8 @@
<meta name="twitter:site" content="@emegemegames">
<meta name="twitter:title" content="raylib HTML5 GAME">
<meta name="twitter:description" content="New HTML5 videogame, developed using raylib videogames library">
<meta name="twitter:image" content="http://www.raylib.com/img/raylib_logo.png">
<meta name="twitter:url" content="http://www.raylib.com/img/raylib_logo.png">
<meta name="twitter:image" content="http://www.raylib.com/common/img/raylib_logo.png">
<meta name="twitter:url" content="http://www.raylib.com/common/img/raylib_logo.png">
<!--<link rel="stylesheet" href="./Koala Seasons by emegeme_files/main.css">-->
<link rel="shortcut icon" href="http://www.raylib.com/favicon.ico">

View file

@ -14,8 +14,8 @@
<!-- Facebook metatags for sharing -->
<meta property="og:title" content="raylib HTML5 GAME">
<meta property="og:image:type" content="image/png">
<meta property="og:image" content="http://www.raylib.com/img/raylib_logo.png">
<meta property="og:image" content="http://www.raylib.com/img/raylib_logo.png">
<meta property="og:image" content="http://www.raylib.com/common/img/raylib_logo.png">
<meta property="og:image" content="http://www.raylib.com/common/img/raylib_logo.png">
<meta property="og:url" content="http://www.raylib.com/games">
<meta property="og:site_name" content="raylib.com">
<meta property="og:description" content="New hmtl5 videogame, developed using raylib videogames library">
@ -24,8 +24,8 @@
<meta name="twitter:site" content="@emegemegames">
<meta name="twitter:title" content="raylib HTML5 GAME">
<meta name="twitter:description" content="New HTML5 videogame, developed using raylib videogames library">
<meta name="twitter:image" content="http://www.raylib.com/img/raylib_logo.png">
<meta name="twitter:url" content="http://www.raylib.com/img/raylib_logo.png">
<meta name="twitter:image" content="http://www.raylib.com/common/img/raylib_logo.png">
<meta name="twitter:url" content="http://www.raylib.com/common/img/raylib_logo.png">
<!--<link rel="stylesheet" href="./Koala Seasons by emegeme_files/main.css">-->
<link rel="shortcut icon" href="http://www.raylib.com/favicon.ico">

View file

@ -14,8 +14,8 @@
<!-- Facebook metatags for sharing -->
<meta property="og:title" content="raylib HTML5 GAME">
<meta property="og:image:type" content="image/png">
<meta property="og:image" content="http://www.raylib.com/img/raylib_logo.png">
<meta property="og:image" content="http://www.raylib.com/img/raylib_logo.png">
<meta property="og:image" content="http://www.raylib.com/common/img/raylib_logo.png">
<meta property="og:image" content="http://www.raylib.com/common/img/raylib_logo.png">
<meta property="og:url" content="http://www.raylib.com/games">
<meta property="og:site_name" content="raylib.com">
<meta property="og:description" content="New hmtl5 videogame, developed using raylib videogames library">
@ -24,8 +24,8 @@
<meta name="twitter:site" content="@emegemegames">
<meta name="twitter:title" content="raylib HTML5 GAME">
<meta name="twitter:description" content="New HTML5 videogame, developed using raylib videogames library">
<meta name="twitter:image" content="http://www.raylib.com/img/raylib_logo.png">
<meta name="twitter:url" content="http://www.raylib.com/img/raylib_logo.png">
<meta name="twitter:image" content="http://www.raylib.com/common/img/raylib_logo.png">
<meta name="twitter:url" content="http://www.raylib.com/common/img/raylib_logo.png">
<!--<link rel="stylesheet" href="./Koala Seasons by emegeme_files/main.css">-->
<link rel="shortcut icon" href="http://www.raylib.com/favicon.ico">

View file

@ -14,8 +14,8 @@
<!-- Facebook metatags for sharing -->
<meta property="og:title" content="raylib HTML5 GAME">
<meta property="og:image:type" content="image/png">
<meta property="og:image" content="http://www.raylib.com/img/raylib_logo.png">
<meta property="og:image" content="http://www.raylib.com/img/raylib_logo.png">
<meta property="og:image" content="http://www.raylib.com/common/img/raylib_logo.png">
<meta property="og:image" content="http://www.raylib.com/common/img/raylib_logo.png">
<meta property="og:url" content="http://www.raylib.com/games">
<meta property="og:site_name" content="raylib.com">
<meta property="og:description" content="New hmtl5 videogame, developed using raylib videogames library">
@ -24,8 +24,8 @@
<meta name="twitter:site" content="@emegemegames">
<meta name="twitter:title" content="raylib HTML5 GAME">
<meta name="twitter:description" content="New HTML5 videogame, developed using raylib videogames library">
<meta name="twitter:image" content="http://www.raylib.com/img/raylib_logo.png">
<meta name="twitter:url" content="http://www.raylib.com/img/raylib_logo.png">
<meta name="twitter:image" content="http://www.raylib.com/common/img/raylib_logo.png">
<meta name="twitter:url" content="http://www.raylib.com/common/img/raylib_logo.png">
<!--<link rel="stylesheet" href="./Koala Seasons by emegeme_files/main.css">-->
<link rel="shortcut icon" href="http://www.raylib.com/favicon.ico">

View file

@ -14,8 +14,8 @@
<!-- Facebook metatags for sharing -->
<meta property="og:title" content="raylib HTML5 GAME">
<meta property="og:image:type" content="image/png">
<meta property="og:image" content="http://www.raylib.com/img/raylib_logo.png">
<meta property="og:image" content="http://www.raylib.com/img/raylib_logo.png">
<meta property="og:image" content="http://www.raylib.com/common/img/raylib_logo.png">
<meta property="og:image" content="http://www.raylib.com/common/img/raylib_logo.png">
<meta property="og:url" content="http://www.raylib.com/games">
<meta property="og:site_name" content="raylib.com">
<meta property="og:description" content="New hmtl5 videogame, developed using raylib videogames library">
@ -24,8 +24,8 @@
<meta name="twitter:site" content="@emegemegames">
<meta name="twitter:title" content="raylib HTML5 GAME">
<meta name="twitter:description" content="New HTML5 videogame, developed using raylib videogames library">
<meta name="twitter:image" content="http://www.raylib.com/img/raylib_logo.png">
<meta name="twitter:url" content="http://www.raylib.com/img/raylib_logo.png">
<meta name="twitter:image" content="http://www.raylib.com/common/img/raylib_logo.png">
<meta name="twitter:url" content="http://www.raylib.com/common/img/raylib_logo.png">
<!--<link rel="stylesheet" href="./Koala Seasons by emegeme_files/main.css">-->
<link rel="shortcut icon" href="http://www.raylib.com/favicon.ico">

View file

@ -615,7 +615,63 @@ cΆ
u" –-÷~~XT§ʲâŘł¦Ś•]aaěiÇ‘úéŔ˙oďŢc«®î€'MÆS¦Č„D<>ĚAym¸‰Ż!$čnşi&fĹÄ1 Îŕt‰2µ "uČĂńpK&dnĚ=€: §d¨“âÔŤ‡Pކ­8"ęf ĺě÷ýµ·)ĺŢ>¤“}>ÉInzoOĎí?ßďďśď9g~2­şäwéóýĄYđTŰ€ěýř\śóßöĘ<<3C>(6ćH:şŽź™Ćn®[¨€Ł•”ĺűŐkŇĄ_{öŤ§;_~W:{î®tŢĎövH‹„âęŤu+óůÚ°&_rśYP,ę®ăg” Ô˝&>Óô)Ž nË–şć Ŕŕ¬ß ˛~еv'Ń÷Ž4<ę!zŢľ <0A>˛¦č<C2A6>űU>“âýĆm€­ô “4ś±OާWţę@źŰ–Ąaďí<C48F>ÖőşŮé[ëVqOÓ;ŇŔXď;mIÝiY ??K0š·Š»×¤Hb:˝p `KŇÍ€A?Ş.™ĚônG<02>'V;Ň©qRÔ$7ş2 Ë«bcŽď2hţźŢuG{ <Şě#X}sÝţ'?>vjęĎÚôůyµGÜş^7«c€†ĄŠ¸ÜgÔŠm›Ž=%ťűÓ˝E[çËďL_\ýĎťů;±]ŻĄ@}H0/ ¸·:ť“%.ĹÚé·¶#ŘťŽ‹ĎŚŻ©›tÖÂßýĸ‡KŽ7ľË—W﩯[p0G{ Ö„š7]Ľ|ËË]ĆÜ“úVţ9 ťS{Dí¤±łňęöXż?’ cX´=ŤŠsş\{oÉ`<1D>:‚y|.ź¨żr¸Ľ- @ĹÔę4lţޢ­×-mK®/îË*qraK‰EżÉkR|—ĆŁ‹pÔg˛ŐúqŇÝE˶Ľxň ÓÓ)ăI˝'­JÜ™†<TŰ®żÓůФ/=±ai[ÎĺouŚqdńöTSĺC<ż/–ÎÎsóvÖC»˛ż{gş jÓ›±g?ß<>P₦ @Ź›çµ8óŃë–%­&Ť˙Ç­éśřÜůŹoÚ_jśŃ⽡ ×ü+v
4.dú€c<E282AC>ěNݢ-vDP<wQő®ž“~ž>rŮ­éÄkg¶«}lôäÔ}ÂĚý°ó€y„ŐíŤWoO_˝ćőşÇb©âŚ;VĄĎÍ­=¬ĹĎăýoTżýBÄ“FTäN‚Ľ¸p[:/Ž0îqóÜÔ/KŠőí´Hf//y@!řÇ˙/’¨ŻŻ}g]ŚaŔ´×Zc|—|‰$űn¦˙8vI@ö¤Ĺhq(Mϸ<C48E>/Ž©˝xĹ–—‡/ýű–áUëw^Xµa{Öj.Y˝ç•«6\ëüQí-˝©nŮČßV/żfíľĘ| `ýÚö?ÝĆÚzóXßľtCMç+îHĽąčňC·oĎOÔcë`ś"<22>Ř5ŰĐôžřě§§¬-ąśŃó{Y0kŮ{MŽîÔĽŻHtâvÉs{^č9é‘üwŠőcޱaéúmy­B$(.ŕ'eůŐ˝»S·8Č&¦Đc ?Š#<23>Ćě@ăĹë8ĺ/NÝ‹'ŘXoĎ[ĽÎZţ|[Ű®Ô3‚[G<Ý6^]Ľ# ż~sÝýg.űO—1÷§Á3v¦Ďţ¤ö°ďő™üë|Ť=ĘnV<0F>ď.Řš>; "8óîµEű‰vĘ RĹ<52>x3.;j~Ć@ÓBĘ+«÷WĹ“}˙býÄXc\‘LÄwČ/NĘľ“§><‰@ö”›OťG€ŠŕYĚ{ĺ-^ÇĎb«]Ľß´~V?íŢ©#<23>[Ţ_ö·# ÇÔ}ßű—<~ôä˘u
ńł“ĆÎL=nśőN86ßfŻ#ɉ<C389><E280B0>†ĚYYŰ㻋Z¬g¸ôą7žĘŹ®O$Ęšö“×'l©»­ëwx?j'JőÓĺęűRďÉ‹ĆŘó; â˙hí€yBP–?íÖ·˛cőÔ3
ñ— E­BŸþòý¨9èuûª4hví!íŒÉkó†|ê>¦Ú›ï5ÖlK_¹ò¥·~ÓeÌ”tæÔ×Òàì÷𶓝ŸŸ†Ì}z_~PÌj4«g(Ì$Dá_ü­Šé;GŒ-Æø©i‹ß‹àGç3 ¦þ ÉHCOä1•>jÅÖ ±s!‚l¡ñ„ìi;rßÊGk&n=0¶aê¾Sód"ƒ˜Ú¿ø<C2BF>›Ÿ?!Kºß¸(}rââ¼E½ïúÅ¿£"ßÎXd[aáR¥Xÿï>aƾ˜-h^c»hÅÖõã6×ÝOþ…àoê>@˱ŽÞP°8gäâW_Qµþõ(X±äo¯\µî­GcŠ?ŠýŠ<C3BD> X¨+ˆÓ£<>˞ݽxÀôÇÿQ1ãÉ·Ìxb߈߿ú—,hOÉψ[ Kmÿ˃Øî3 #÷×g²1l¸°jý¶Kôc‹$#?ï¿ë"àÿ3 ˆš€,€Çú~×XˆÅxâ<78>¢¼ØÍ<C398>oÛ«ßfשD?õ[ø²ÏEmÁM5ÆÅV¾¨ˆ>òä¡• <E280A2>NîH§F"}ÄõÅ…bÉSŒ-¯A¨/ø³æ’DÞ—Nl,VŒÛã©¿¾±¼•>ÊóÏe¿Óó¬£@0ï'úm¥˜±1‰C‡"Ù(LŠ%ëÇöQOýð¿›8¤µó÷Ë‚}¡•€>šL– ú­û/öÆêåCp-tEXtSoftwareby.blooddy.crypto.image.PNG24Encoder¨îIEND®B`‚RIFF.eWAVEfmt D¬ˆXdatae óÿñÿïÿíÿëÿéÿçÿåÿäÿâÿàÿÞÿÝÿÛÿÙÿ×ÿÖÿÔÿÒÿÑÿÏÿÍÿÌÿÊÿÉÿÇÿ%FHJLNòÿ·ÿ¶ÿ´ÿ³ÿ±ÿ°ÿ®ÿ­ÿ«ÿªÿ©ÿ§ÿ¦ÿ¤ÿ£ÿ¢ÿ ÿŸÿžÿ<C5BE>ÿ›ÿšÿ™ÿ˜ÿ–ÿÔÿ’”–—™š†ÿ…ÿƒÿ‚ÿ<E2809A>ÿ€ÿÿ~ÿ}ÿ{ÿzÿyÿxÿwÿvÿuÿtÿsÿrÿqÿpÿoÿnÿmÿlÿkÿ'çéêìí‰ZÿYÿXÿWÿVÿUÿUÿTÿSÿRÿQÿQÿPÿOÿNÿMÿMÿLÿKÿJÿJÿIÿHÿHÿGÿFÿ‚BCEFG€4ÿ3ÿ2ÿ2ÿ1ÿ1ÿ0ÿ/ÿ/ÿ.ÿ.ÿ-ÿ,ÿ,ÿ+ÿ+ÿ*ÿ*ÿ)ÿ)ÿ(ÿ(ÿ'ÿ'ÿ&ÿ&ÿc££¤¥¦Tÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ
ñ— E­BŸþòý¨9èuûª4hví!íŒÉkó†|ê>¦Ú›ï5ÖlK_¹ò¥·~ÓeÌ”tæÔ×Òàì÷𶓝ŸŸ†Ì}z_~PÌj4«g(Ì$Dá_ü­Šé;GŒ-Æø©i‹ß‹àGç3 ¦þ ÉHCOä1•>jÅÖ ±s!‚l¡ñ„ìi;rßÊGk&n=0¶aê¾Sód"ƒ˜Ú¿ø<C2BF>›Ÿ?!Kºß¸(}rââ¼E½ïúÅ¿£"ßÎXd[aáR¥Xÿï>aƾ˜-h^c»hÅÖõã6×ÝOþ…àoê>@˱ŽÞP°8gäâW_Qµþõ(X±äo¯\µî­GcŠ?ŠýŠ<C3BD> X¨+ˆÓ£<>˞ݽxÀôÇÿQ1ãÉ·Ìxb߈߿ú—,hOÉψ[ Kmÿ˃Øî3 #÷×g²1l¸°jý¶Kôc‹$#?ï¿ë"àÿ3 ˆš€,€Çú~×XˆÅxâ<78>¢¼ØÍ<C398>oÛ«ßfשD?õ[ø²ÏEmÁM5ÆÅV¾¨ˆ>òä¡• <E280A2>NîH§F"}ÄõÅ…bÉSŒ-¯A¨/ø³æ’DÞ—Nl,VŒÛã©¿¾±¼•>ÊóÏe¿Óó¬£@0ï'úm¥˜±1‰C‡"Ù(LŠ%ëÇöQOýð¿›8¤µó÷Ë‚}¡•€>šL– ú­û/öÆêåCp-tEXtSoftwareby.blooddy.crypto.image.PNG24Encoder¨îIEND®B`‚—D´C<00>æ)7ÿ€£DÚ´C Ѩ9Ðæ)7ÿ°D¶u²C<C2B2>2<EFBFBD>» æ)7ÿ€¼Dg™µCg¹•;æ)7ÿÉD£†´CâóÄ:pæ)7ÿ€ÕD—Þ±CþvÇ»!æ)7ÿâD¸e®Cb"ƒ¼æ)7ÿ€îD ²C™`µ»+æ)7ÿûDï´¯CÜøH¼«æ)7ÿÀE´Ñ¸CX—a<Wæ)7ÿ
E/§C1+½?æ)7ÿ@E¬€µC4®Œ;« æ)7ÿ€E®CåmŒ¼À æ)7ÿÀEœ¸C©í?<
æ)7ÿ#E—½´C·«
;<
æ)7ÿ@)E5µCøb; Iæ)7ÿ€/E¥ÿ¨Cm¿½ÐÕæ)7ÿÀ5EñϰCÇ8¼æ)7ÿ<Ea.¦CA¸!½]æ)7ÿ@BEx
'CÄ"<22>¾æ)7ÿ€HEX¤C —:½Dæ)7ÿÀNE $çCI¡>_æ)7ÿUEva‹CQ®í½æ)7ÿ@[E´«Cw0¼æ)7ÿ€aE]D¦C· ½ÿÿæ)7ÿÀgE<67>ã¸CdÛd<æ)7ÿnEZÚC“‹Þ=æ)7ÿ@tE…B§C ½æ)7ÿ€zEßWìC Ø$>æ)7ÿ`€E¶‰<C2B6>Có€Ï½æ)7ÿ€ƒE Ó®Cà+r¼æ)7ÿ †E&A§C´(½æ)7ÿÀ‰EnÛ¬C/§¼æ)7ÿàŒEÃù C±£^½æ)7ÿ<00>Ez ¸C8/A<æ)7ÿ “E Dè—¾æ)7ÿ@–E¢ƒC)¾æ)7ÿ`™EîØÃC§u9=æ)7ÿ€œEk•¦Cm½æ)7ÿ ŸEÆ×«Ckì¾¼æ)7ÿÀ¢El»C·­<æ)7ÿà¥E-®Cm Œ¼æ)7ÿ©E„;„CÁ ¾æ)7ÿ ¬Ev·C¥"<æ)7ÿ@¯EÃÈCÇÒj=æ)7ÿ`²Edý¤C…©/½æ)7ÿ€µE“cžC,é|½æ)7ÿ ¸EU†£CÀÎ@½æ)7ÿÀ»EêÅ«CpŽÀ¼æ)7ÿà¾EÆCNS=æ)7ÿÂEÇÀ¶C•ß<æ)7ÿ ÅE*’CÁ
Ľæ)7ÿ@ÈE(ÈCäk=æ)7ÿ`ËEïrµCû§‡;æ)7ÿ€ÎE¼$©C§þ¼æ)7ÿ ÑEIƒÄCL?A=æ)7ÿÀÔE†î‰CÑ(ö½æ)7ÿà×E&½²Ci$l»æ)7ÿÛE¯)³C»æ)7ÿ ÞEüÆÌCˆû<CB86>=æ)7ÿ@áEæÍC¨‹—=æ)7ÿ`äEƒÖŸC.ôk½æ)7ÿ€çE ²C™`µ»æ)7ÿ êE‘W©Cætù¼æ)7ÿÀíEô£³C¼¦†ºæ)7ÿàðEËç¬CŸ ¦¼æ)7ÿôE ¦ÀCM=æ)7ÿ ÷EYà¹CQЉ<æ)7ÿ@úE{ÑžCôâw½æ)7ÿ`ýEê~­Cƒ<˜¼æ)7ÿ@FEf¤C’6½æ)7ÿÐF)–¹CêÁ‚<æ)7ÿ`FO(åCÒ>æ)7ÿðF|W²C?@›»æ)7ÿ€FxV‹C¡îí½æ)7ÿFð<46><C3B0>CjˆÕ½æ)7ÿ  F˜°•Cž[±½æ)7ÿ0 FË–¦CXò½æ)7ÿÀ F 1¯C¹a¼æ)7ÿPFìè3C¹ƒ¾æ)7ÿàFpŸC×_u½æ)7ÿpFͧŸCÒn½æ)7ÿF—9òCn 6>.æ)7ÿ<00>Fñ(ÒC‡z°=èhæ)7ÿ Fjé‘Cþvǽæ)7ÿ°Fð¯C|+>¼æ)7ÿ@F'ÖÆCøp\=æ)7ÿÐFúÇCwD_=æ)7ÿ`Fó_8Cu€¾æ)7ÿðFé±›C8޽æ)7ÿ€F<>D#§d>æ)7ÿ!Fk‘C’Zʽæ)7ÿ "F©ä¤CëÊ0½æ)7ÿ0$FŒzÈCĨo=æ)7ÿÀ%F-ú¥C6$½æ)7ÿP'F–<×CP/Î=æ)7ÿà(FáߺC>ç <æ)7ÿp*Fn™²Cb"ƒ»æ)7ÿ,FÐnµC&†; æ)7ÿ<00>-FcL¾Cz
ñ<æ)7ÿ /Fõ3<C3B5>C/e…½æ)7ÿ°0Fƒà§C®ß ½æ)7ÿ@2Fî$øCá^G>æ)7ÿÐ3F×÷ªCÅeÓ¼æ)7ÿ`5F÷w¶C0ç;æ)7ÿð6F•I’CFDŽæ)7ÿ€8FÒÃCD%9=æ)7ÿ:FŪC† ؼæ)7ÿ ;F –CŒà®½æ)7ÿ0=FÑ}óCÂ9>æ)7ÿÀ>F]j§C^F½æ)7ÿP@FÛ¢ùCI¼K>æ)7ÿàAF»iºCÞ–<æ)7ÿpCF( ¢C7$R½æ)7ÿEF{4–CãW®½æ)7ÿ<00>FF8ŽhCÛn:¾æ)7ÿ HF4<46>£C\~@½æ)7ÿ°IF8=ÄCT >=æ)7ÿ@KF Dúɾæ)7ÿÐLFÊf<C38A>C¾;„½æ)7ÿ`NF'º›Cà޽æ)7ÿðOF25¬C×a¶¼ æ)7ÿ€QFryÜCDÕì=ÿÿÿÿæ)7ÿSFØ »C8ì¤<ÿÿÿÿæ)7ÿ TF.¶CInÀ;æ)7ÿ0VF<56>ÅÌC~ó<>=æ)7ÿÀWF¡T¾CiËñ<!"æ)7ÿPYF³¦<C2B3>ChN¾@`æ)7ÿàZF˜,¡CÑP\½à/dæ)7ÿp\FX4¥Ci&-½P0dæ)7ÿ^FÕõ½C­ é< 0dæ)7ÿ<00>_Fë¡—C‹ý¥½À/dæ)7ÿ aF©´9C¸÷~¾ .dæ)7ÿ°bFyj›C!Ú<>½°.dæ)7ÿ@dFYn„CV, ¾°-dæ)7ÿÐeFËñ‚C¹…¾ð-dæ)7ÿ`gFõüCùÀR>X1dæ)7ÿðhFßf”Cô丽(1dæ)7ÿ€jFù]CêI¾Ø2dæ)7ÿlFîušC q•½ˆ2dæ)7ÿ mFµ¤CZ:½ Ç¢æ)7ÿ0oF.ÖDäón>æ)7ÿÀpF U&Ch§<68>¾æ)7ÿPrFË›ÜC=ží= æ)7ÿàsF§²~CÀ
¾æ)7ÿpuFîT<C3AE>C?¤„½æ)7ÿwF4ú¢C¯6G½æ)7ÿ<00>xF¹7ÄCË==æ)7ÿ zF Du¤Ý¾æ)7ÿ°{F»ÈClœr=æ)7ÿ@}Fqw½C^’Ý<æ)7ÿÐ~Fsl‹Cní½æ)7ÿ0€FX<46><58>C½’¾æ)7ÿø€FR1‘C4¬Ë½æ)7ÿÀ<>FF˺CêŸ<æ)7ÿˆ‚FJ°TCØ~W¾æ)7ÿPƒF«7˜CN‘¢½æ)7ÿ„FZÖCsÇ=æ)7ÿà„FHgiCS19¾æ)7ÿ¨…FV¶¬C9“ª¼ æ)7ÿp†FsëßC> æ)7ÿ8‡FüžC‹ðu½æ)7ÿˆF D¯iœ¾æ)7ÿȈFEJ«CpÜ˼æ)7ÿ<00>‰FKÉÊCU…=æ)7ÿXŠF"­ãCº| >æ)7ÿ ‹F[¸CIn@<æ)7ÿè‹F˜ê¦Cš½æ)7ÿ°ŒFbKCD<43>e¾æ)7ÿx<>F «’Cƒ ýæ)7ÿ@ŽF\®Cy„¼æ)7ÿ<08>F¾ÇCac^=æ)7ÿÐ<>FPÊ¿CÜú =
æ)7ÿ˜<>F›¯mC<6D>í2¾“
¸«æ)7ÿ`‘Fö˜<C3B6>Cšv¾¯
´«æ)7ÿ(’F¼kwCî¯$¾«
°«æ)7ÿð’FÉѯCT²C¼§
¬«æ)7ÿ¸“Fm¡ÿCÿE]>£
¨«æ)7ÿ€”FhŒfC~^=¾¿
¤«æ)7ÿH•FPÿÌCE’=»
 «æ)7ÿ–F‹\âCö£>·
œ«æ)7ÿØ–FÿáC¤’>³
˜«æ)7ÿ —F꤮Ct¶z¼Ï
”«æ)7ÿh˜FᓆC<E280A0>ä¾Ë
<EFBFBD>«æ)7ÿ0™Flõ$C§¨Ž¾Ç
Œ«æ)7ÿø™FBãEC¨%m¾Ã
ˆ«æ)7ÿÀšFK£—C<E28094>õ¥½ß
„«æ)7ÿˆ›FBgÎCPš=Û
€«æ)7ÿPœF C–r¨>×
ü«æ)7ÿ<18>FòF†C¦Å¾Ó
ø«æ)7ÿà<>FeKÆCV=ï
ô«æ)7ÿ¨žFò‘CXȽë
ð«æ)7ÿpŸF5œáC>q>ç
ì«æ)7ÿ8 FÂs¿Cö=ã
è«æ)7ÿ¡FIÅCJJ=ÿ
䫿)7ÿÈ¡FÃëC&#>û
à«æ)7ÿ<00>¢FäP”C“e¹½÷
Ü«æ)7ÿX£F’¼¿CZ =ó
Ø«æ)7ÿ ¤FyáÔC?fÀ=
Ô«æ)7ÿè¤FNŸCtu½
Ыæ)7ÿ°¥F©
¦CGZ#½
Ì«æ)7ÿx¦F:¿C²b=
È«æ)7ÿ@§F­R™CLœ½
Ä«æ)7ÿ¨FhO CVmf½
À«æ)7ÿШFl¸<6C>C oνÿÿÿÿæ)7ÿ˜©F*BœC슽ÿÿÿÿæ)7ÿ`ªF”¼CµØÈ<ÿÿÿÿæ)7ÿ(«F;¸×CÑÑ=æ)7ÿð«F°BÇCga= æ)7ÿ¸¬F—»Cˆ,¥<33æ)7ÿ€­F¾G“Cu¿½˜3dæ)7ÿH®Fk-ÝC]òð=ˆ4dæ)7ÿ¯F½Ð‹C+#ë½84dæ)7ÿدF<µÀC(¸=Ð9dæ)7ÿ °F)›½CjÖà<0:dæ)7ÿh±FéÉCÊñv=@:dæ)7ÿ0²Fù¿C<C2BF> =À:dæ)7ÿø²F D«ž¾8dæ)7ÿÀ³FÖÌuCÞ'¾@7dæ)7ÿˆ´FO«Cjáϼ08dæ)7ÿPµFgɾC¢xü<07dæ)7ÿ¶FÂHºC#“<8=dæ)7ÿà¶F„J<E2809E>C½òнæ)7ÿ¨·FQ>°CÁÙ/¼àæ)7ÿp¸F/­«C=Ѽæ)7ÿ8¹F3-ÃCï›1=æ)7ÿºFe*—Cí¸¨½æ)7ÿȺFØ™C¼B<C2BC>½æ)7ÿ<00>»F<C2BB>ʪCçŠ×¼ æ)7ÿX¼Fž9‹Cr—î½ æ)7ÿ ½FÄ.®Cš(ˆ¼æ)7ÿè½FéQíCª³'>æ)7ÿ°¾FåÇÍCÍÚ–=æ)7ÿx¿FOÀ·Cr™/<æ)7ÿ@ÀF*’CÁ
Ľæ)7ÿÁFוC‡z°½ æ)7ÿÐÁF<C381>ÔvC<00>%¾æ)7ÿ˜ÂF¼ÎÐC¼<43>¨=æ)7ÿ`ÃF¯^òCõy6>æ)7ÿ(ÄFM¾C¥ì<æ)7ÿðÄF<Z€C¾æ)7ÿ¸ÅF=RÉCú„y=æ)7ÿ€ÆFZaÉCÕ5z=æ)7ÿHÇF<C387>ÿ±Ch»»æ)7ÿÈFBgœCúнæ)7ÿØÈF£¶‹Cè»ë½æ)7ÿ ÉFÓÕ¸CHXb<æ)7ÿhÊFq¹·CãW.< æ)7ÿ0ËF"âŒCnã使)7ÿøËF
—½Còuà<æ)7ÿÀÌFe<ˆC<CB86>
¾æ)7ÿˆÍFÐáCtÿ>æ)7ÿPÎF²ëbC­B¾æ)7ÿÏFK6˜CX™¢½æ)7ÿàÏFN+ÊC¡¸<C2A1>=<00><00>æ)7ÿ¨ÐFìµ§CÒ½$;dæ)7ÿpÑFÖb[C¶²M¾ç º«æ)7ÿ8ÒF|³CèîÀºã ¶«æ)7ÿÓF9wÕC|ÒÃ=ÿ ²«æ)7ÿÈÓF £C¬eF½û ®«æ)7ÿ<00>ÔF~.šC—½÷ ª«æ)7ÿXÕF Dt|â¾ó ¦«æ)7ÿ ÖF¡cÊC:ƒ= ¢«æ)7ÿèÖFmèËC:å‹= ž«æ)7ÿ°×FéÍÆC€\= š«æ)7ÿxØFÐd­CxŸš¼ –«æ)7ÿ@ÙFÂ<46>†Cžð¾ ’«æ)7ÿÚF¾„C5C
¾ Ž«æ)7ÿÐÚFÿ™CŒë<C592>½ Š«æ)7ÿ˜ÛF^³ÄCrC= †«æ)7ÿ`ÜFµa@C¡3u¾/ ‚«æ)7ÿ(ÝF˜SCÔY¾+ þ«æ)7ÿðÝF`;“Cn½¿½' ú«æ)7ÿ¸ÞFíï†CA×¾# ö«æ)7ÿ€ßFÐÛ‚Cƾ? ò«æ)7ÿHàFÎ-³Ca¾»; î«æ)7ÿáF•N–C&¿­½7 ê«æ)7ÿØáF—œ·C[)<3 æ«æ)7ÿ âFz<±C5`¼O â«æ)7ÿhãF¯)³C»K Þ«æ)7ÿ0äFí}ƒC¼ë ¾G Ú«æ)7ÿøäFHbDËÚ<C38B>>C Ö«æ)7ÿÀåFäUüC¢S>_ Ò«æ)7ÿˆæF<C3A6>U¼C<C2BC>Ã<[ Ϋæ)7ÿPçF„\QCß\\¾W Ê«æ)7ÿèF£ó³C.³¹S Æ«æ)7ÿàèFy ¨C1Ý ½æ)7ÿ¨éFOÁCÞÀ=Ge;¸æ)7ÿpêF/‡ªC†²Ý¼é³ü¶æ)7ÿ8ëFkøÏC«ª£=tÌ·æ)7ÿìF­C<C2AD>C«¨â½{M°·æ)7ÿÈìFtPöC?B>B8æ)7ÿ<00>íF» •CJ µ½Á.8æ)7ÿXîF˜áC/e>b„O7æ)7ÿ ïF ÉåC^¨>::Æ·æ)7ÿèïFÿ¥C[¸.½Ä/×8æ)7ÿ°ðFG¢ÔCuô¾=Û;F6æ)7ÿxñF“TöCNB>˜¶D8æ)7ÿ@òF蓵Cê¶“;{E©8æ)7ÿóF)zŽCá<43>Û½‡aÄ·æ)7ÿÐóFÉH#C+â<>¾¤õ·æ)7ÿ˜ôFÐ<46>äCï>”f8æ)7ÿ`õFÒ”Cëq¶½Cj‡¸æ)7ÿ(öF¦H”CΕ¹½;Ϲæ)7ÿðöFN?¨CQŠ ½n0<6E>8æ)7ÿ¸÷FŠº£CÌk>½b>ƒ¸æ)7ÿ€øFx·C#o <;¾¸æ)7ÿHùF=‚ Cud½1)v8æ)7ÿúF"ضCß$<ô䏿)7ÿØúF
Ç”C;²¶½Ú¶C¹æ)7ÿ ûFK‹C áï½4†V¸æ)7ÿhüF– ¬C-D¸¼e✷æ)7ÿ0ýF$¹C…§n<È€¬·æ)7ÿøýF•e½CYðÛ<)<ž¸æ)7ÿÀþFBÞsC]â)¾É5…8æ)7ÿˆÿF«³£C/¼>½vS$9æ)7ÿ(G DËE™¾v<13>¸æ)7ÿŒG©
¦CGZ#½9ª8æ)7ÿðG( ¢C7$R½D´ª·æ)7ÿTGÍ|ÌCnI<6E>=ÊQû6æ)7ÿ¸GOÀ…C<E280A6>O¾}äã·æ)7ÿGòF¸Cî7H<‘•¸æ)7ÿ€GÂ…°C”É"¼P£¸æ)7ÿäG„âDýd€>´[7æ)7ÿHG­¾C0Åì<Òç 7æ)7ÿ¬G3¶»C‚´<¾‡8æ)7ÿG2øƒC† ¾>;€8æ)7ÿtGyj›C!Ú<>½ûh¸æ)7ÿØG™‚C²ì¾·o‡8æ)7ÿ<GÆø¨Cѽ9¤·æ)7ÿ G Døµã¾šà<C5A1>7æ)7ÿGöhªCòuà¼:­[¸æ)7ÿhGcîC"²)>&&9æ)7ÿÌGÊ@ÎC9ž™=óqÀ6æ)7ÿ0G&<26>©CÕŽô¼O+ú·æ)7ÿ”GP”CŸº½úÝT6æ)7ÿøGzÙ¹CŠéˆ<sà<73>·æ)7ÿ\GÄ¥ƒC-w ¾ñ)·æ)7ÿÀG<>Ï®CÐìr¼[ãÙ6æ)7ÿ$ GÊCwÇ€=Þ¶æ)7ÿˆ G÷[½CBÛ<™Ðóµæ)7ÿì G§ù¬C™k¤¼×47æ)7ÿP
G·cÁC ²=ÙéQ7æ)7ÿ´
G4ã­C)<11>¼¨Ï˜6æ)7ÿ GÖ<47>ôCßÝ<>Ù6æ)7ÿ| G,I¿CŒ=ñéÛ5æ)7ÿà G_ÑÜCÁ×î=8 ¢6æ)7ÿD GÄ8„CÉ ¾ü³5æ)7ÿ¨ G8ËŽC–µÙ½¢8<C2A2>6æ)7ÿ Gg}¼C¶Æ<IEŵæ)7ÿp G›[²Ca¾™»“
l7æ)7ÿÔ G‘ºÒC§Î³=¿’
¶æ)7ÿ8G ¨©C¹ ò¼hÓ6æ)7ÿœGÔ§œC&™ˆ½œ6¥6æ)7ÿGDïœC ÷†½½°³6æ)7ÿdG}Œ¿C\'=E]¸6æ)7ÿÈGú…ÊC2˃=Mжæ)7ÿ,G·GÈCãUm=â”·æ)7ÿ<00>GÔV–Cꎭ½”š·æ)7ÿôG¯¶CÌk¾;c+(·æ)7ÿXGPÿ8C<38>€¾³\66æ)7ÿ¼Gr»¤CA­2½XR·æ)7ÿ GwB}CZ%¾\º“¶æ)7ÿ„GõþóCÙ;;>Ûå6æ)7ÿèGÄ=XCiLR¾þ¶æ)7ÿLGLO¬Câþ³¼yÍß4æ)7ÿ°G²ë’C¯<43>Á½ëÕB6æ)7ÿG:×µCfU¬;/ ·æ)7ÿxGH•µC‰7”;pŽ6æ)7ÿÜG‹Ý¿CòÛ
=<00>"w6æ)7ÿ@G*Cꊾ°™Î6æ)7ÿ¤G¹®ËC™“Š=޵æ)7ÿGåáCEF>€Æ=¶æ)7ÿlG§â#C q<C2A0>¾µjŽ6æ)7ÿÐG º§CÜ¡½^çK7æ)7ÿ4G7ƼCN^Í<RVð6æ)7ÿ˜G CvÁþ>>Ù<>5æ)7ÿüGÔ§œC&™ˆ½CÚœ¶æ)7ÿ`GD6ÍC®†“=úìH7æ)7ÿÄG#ä«C˽¼Ìq5æ)7ÿ(GéÈ<C3A9>C)ν<00>¾b7æ)7ÿŒGúÃC8:0=F¢í6æ)7ÿðG*¥ÅC´N=5æ)7ÿTGª×…C9 ¾#[ɳæ)7ÿ¸GÝÆC[Á\=ÑaF¶æ)7ÿG›ÚÔC >À=Ï©@·æ)7ÿ€G妞C]Õy½Q0µæ)7ÿäGSJ¥C*%,½wxŠ·æ)7ÿHG4%¨CÊ»
½£Ð6æ)7ÿ¬G¸¬¬COt«¼›ƒ¶æ)7ÿGÍŠC„ñ½ øS´æ)7ÿtG”G¥CRE,½LF0·æ)7ÿØG¡Á½CÅZä<uïN5æ)7ÿ<G^úôCh>>ë0ˆ5æ)7ÿ Gú4’CۼŽ¾ç¶æ)7ÿGžòðCÎP2>tèk4æ)7ÿhGÞ÷§C[Î ½pGƶæ)7ÿÌG D žÓ¾<00>¿B´æ)7ÿ0 G-Þ¬Cµî¦¼m 7æ)7ÿ” G»|C‡ç¾Yº©¶æ)7ÿø Gs<47>ˆCÏ:þ½þ(`6æ)7ÿ\!G¢ÀC×=MÇ6æ)7ÿÀ!G=£ÏCA¸¡=9&á¶æ)7ÿ$"G„¢C_<43>L½5bl6æ)7ÿˆ"G<è®C6gn¼„Q7æ)7ÿì"GPŸC<14>u½Š϶æ)7ÿP#GoâÏC *£=s(Ç6æ)7ÿ´#GfÌ£CÈš=½ò,ô6æ)7ÿ$G<>íŽC<C5BD>ìØ½ä Å6æ)7ÿ|$Gô,¬CÇ"·¼>+ª6æ)7ÿà$GìHÚCgà=Õdü¶æ)7ÿD%GyDÌCÖÿ<C396>=E1¶æ)7ÿ¨%G¡–CÐÜ«½ÛÂæ¶æ)7ÿ &G£`³C­ éºÃtì4æ)7ÿp&G/££C}?½gp·æ)7ÿÔ&GpûãCÕa >‡áË7æ)7ÿ8'G —C–A©½Yq<59>8æ)7ÿœ'G-¸ÝCJô=¢ñœ¶æ)7ÿ(G³Â¬CÒq©¼vº¸æ)7ÿd(Gå D_–‰>{ZÎ7æ)7ÿÈ(GŠ™ØC1)Ö=²`@¸æ)7ÿ,)GU5<55>C$]…½Þ‘8æ)7ÿ<00>)G Caä¾>òÙ¸æ)7ÿô)GóòšCƒ•’½Ûaß8æ)7ÿX*Gä³ïCL¬.>Ç‘J8æ)7ÿ¼*GéלCʇ½36·æ)7ÿ +GùK¹Ców< <0F>8æ)7ÿ„+G¡C9C^½6‚ê·æ)7ÿè+G ÌÁCñw!=ލ—·æ)7ÿL,G®\¡CZ½'g98æ)7ÿ°,GDžÈCÉJq=¹ÔÅ·æ)7ÿ-GjÈ”C1ª¶½_¨È¶æ)7ÿx-Gåd¤C'¢6½•8¸æ)7ÿÜ-GÐW,C÷A‰¾` 䏿)7ÿ@.G-³wClG$¾ì͸æ)7ÿ¤.Gï€C` ¾ º­6æ)7ÿ/G}âDÛ+‰>u2¯¸æ)7ÿl/G4bžCAù|½ðsu¸æ)7ÿÐ/G*“@CGët¾*Zc8æ)7ÿ40G1üC?ùR>fyŶæ)7ÿ˜0G<´C¹a9DÛì·æ)7ÿü0G0›ºCxŸš<S<03>¸æ)7ÿ`1GP—ŸCÁ×n½©#Ò8æ)7ÿÄ1G Düû¾}ºª8æ)7ÿ(2GœCÅ‹½ɬ}¸æ)7ÿŒ2G¯ ˆC6“¾NÙ¥8æ)7ÿð2GjîÇCÕ@i=èBA·æ)7ÿT3Gm>¤CTd8½‘ÿº7æ)7ÿ¸3G @YC•ÒP¾>_x¸æ)7ÿ4G- EC Cn¾ù*ˆ·æ)7ÿ€4G¯›¶C].ô;èV$¹æ)7ÿä4GD˜CôH¢½:8æ)7ÿH5G…39C£´¾ÑˆŠµæ)7ÿ¬5GûàØC7Ë×=ßÎ:8æ)7ÿ6G8ËòC·7>ÌÄ;8æ)7ÿt6G©ß C+Õ_½&øó7æ)7ÿØ6GOSêCÐð>rDI9æ)7ÿ<7G^¼CeJ½<íÉ8æ)7ÿ 7G°˜ÑCs.­=?<3F>¸æ)7ÿ8G½JªC^9ã¼>zQ8æ)7ÿh8GkzC4ß ¾‰}º8æ)7ÿÌ8GBy+CÀ䉾—Á¸æ)7ÿ09Gû;ƒC¬¬¾–H9æ)7ÿ”9GBÙ=C7èx¾2=9·æ)7ÿø9G‰q¸C’P<ü:·æ)7ÿ\:GçÁŸCYål½l×8æ)7ÿÀ:G.iD Pr>¡Ÿ·æ)7ÿ$;Góü¢C‡G½\±®¸æ)7ÿˆ;G+[°C9“*¼ĘM¸æ)7ÿì;G9j„Ce8 ¾îf 8æ)7ÿP<GOC&Ñ_¾ïy͸æ)7ÿ´<GDR”C‰]¹½Ë`·æ)7ÿ=G7ì[C¾éL¾§•·æ)7ÿ|=GUÕ(C$Ó‹¾‡d¸æ)7ÿà=GÔVúCÕÊM>äËü·æ)7ÿD>GÔ†ŸC°˜o½éö¶·æ)7ÿ¨>Gx“³C™Äžº̳†8æ)7ÿ ?G D`¾¾Ȭ
8æ)7ÿp?Gé¬gCt¸;¾‘P­8æ)7ÿÔ?Gt*ÃCÆ{1=€?æ)7ÿ8@G0u¹C^|<mÄ~?æ)7ÿœ@GöŽ«C©”ż¾{?æ)7ÿAG íùCU•L> út?æ)7ÿdAGøÊÛCSØè=^ƒl?æ)7ÿÈAGb“îC6`+>˜Åa?æ)7ÿ,BGám…C¸@¾1ÛT?æ)7ÿ<00>BGÛ<47>˜C4ß ½äE?æ)7ÿôBG )”C´Nº½ó5?æ)7ÿXCGÅ&ÅC<C385>¸H=™g"?æ)7ÿ¼CG DóOоÚ9?æ)7ÿ DG<44>®«C±Â¼êZñ>æ)7ÿ„DG°|¦CÓ#½ïÃ>æ)7ÿèDG\Q“CÏ<¿½1 ”>æ)7ÿLEGwû®CÛâj¼ÂÅG>æ)7ÿ°EG§OéC#ù>6½È=æ)7ÿFG}EÁCRP=0<>$æ)7ÿxFG5U±C5µù»6½È½æ)7ÿÜFG´ŠˆCãJþ½ÂÅG¾æ)7ÿ@GGÅÕŒCÇ+å½1 ”¾æ)7ÿ¤GGÏqšC+‰•½ïþæ)7ÿHG?“ËCÒò‰=êZñ¾æ)7ÿlHG]sCHŸ*¾Ú9¿æ)7ÿÐHG‹¼ÂC<C382>u,=™g"¿æ)7ÿ4IGƒÖÑC3˜®=ó5¿æ)7ÿ˜IGÔîšC¡­’½äE¿æ)7ÿüIG_žCÏ“x½1ÛT¿æ)7ÿ`JG€`DQif>˜Åa¿æ)7ÿÄJGu”DFMs>^ƒl¿æ)7ÿ(KGs³‰C}‚÷½ út¿æ)7ÿŒKGAðÆCr¢]=¾{¿æ)7ÿðKGã~°C" $¼mÄ~¿æ)7ÿTLGbÕ„Cáþ ¾<00>€æ)7ÿ¸LG DEŸ¿ãðÿ>æ)7ÿMGÌûŠC2𽞺ÿ>æ)7ÿ€MGóÑÏC”É¢=é\ÿ>æ)7ÿäMG‰{ŽCׇ۽Ô×þ>æ)7ÿHNGjî•CÞñ¯½r+þ>æ)7ÿ¬NG <20>CPؾÞWý>æ)7ÿOGhþ™Co,˜½:]ü>æ)7ÿtOG—_ÁCÍ<43>=«;û>æ)7ÿØOG-ú¥C6$½^óù>æ)7ÿ<PGùãïCú8/>†„ø>æ)7ÿ PG§Œ­Cõú–¼[ïö>æ)7ÿQGû¯Cÿ(<¼4õ>æ)7ÿhQG}k<>CÍ1нSó>æ)7ÿÌQGÃÉ—Ck¥½zLñ>æ)7ÿ0RGjÃÂCñÅ,=° ï>æ)7ÿ”RGÎS´Cœ/u:Ðì>æ)7ÿøRGž’CÝQýÙZê>æ)7ÿ\SG‚Dß$…>‡Áç>æ)7ÿÀSG<²C°L¥»yå>æ)7ÿ$TGˆ®LCY5c¾$â>æ)7ÿˆTGÞ,C3r‰¾Û ß>æ)7ÿìTGÌ“CòöÀ½4ûÛ>æ)7ÿPUGö¨Cø/½¡³Ø>æ)7ÿ´UGƒ§Cø$½¤JÕ>æ)7ÿVG×näCw³ >ÂÀÑ>æ)7ÿ|VG«ÉCR‘v=‰Î>æ)7ÿàVGÚ²CH
W»‡LÊ>æ)7ÿDWGÑx[CŽ’M¾TcÆ>æ)7ÿ¨WG—*‚CŠÌ¾‰[Â>æ)7ÿ XG†0¶CÖýÌ;Å5¾>æ)7ÿpXG
vÀC”Ô=¬ò¹>æ)7ÿÔXGñæ¥CLü$½ç’µ>æ)7ÿ8YG¨þDB~‰>«„?æ)7ÿœYG=}œCZ’‰½É¿|?æ)7ÿZG<5A>©¡C¼™V½Å‹w?æ)7ÿdZGå÷¤CÔé/½sõo?æ)7ÿÈZGEz´C|ݲ:ˆf?æ)7ÿ,[Gbh·C‰…<jòY?æ)7ÿ<00>[GµC_öF;ø»K?æ)7ÿô[Gi^¬C-<2D>²¼;<3B>;?æ)7ÿX\GµCÑQ;”)?æ)7ÿ¼\Guµ¨C #½Ùö?æ)7ÿ ]G$î³CÑQ¹äç?æ)7ÿ„]GÐ"³CUÈ!»A6Õ>æ)7ÿè]Gp´³C¿]º<12>¦>æ)7ÿL^G&ã³C Ѩ¹šl>æ)7ÿ°^GAý³CEŸ¸†Ï >æ)7ÿ_G`´CEŸ€7,Ã=æ)7ÿx_G!ù³CÇ ¸&ÆÁ9æ)7ÿÜ_G þ³CEŸ€· [Õ;æ)7ÿ@`G<>ú³CEŸ€¸º¥<æ)7ÿ¤`G`´CEŸ€7®‘(=æ)7ÿaGAý³CEŸ¸è<>=æ)7ÿlaG`´CEŸ€7’wÕ=æ)7ÿÐaGAý³CEŸ¸™>æ)7ÿ4bG¿´CEŸ8BE>æ)7ÿ˜bG´CD²z>æ)7ÿübG´C›=š>æ)7ÿ`cGáû³Cèî@¸ ϸ>æ)7ÿÄcGAý³CEŸ¸~Ø>æ)7ÿ(dG¿´CEŸ8C¶ø>æ)7ÿRIFF.eWAVEfmt D¬ˆXdatae óÿñÿïÿíÿëÿéÿçÿåÿäÿâÿàÿÞÿÝÿÛÿÙÿ×ÿÖÿÔÿÒÿÑÿÏÿÍÿÌÿÊÿÉÿÇÿ%FHJLNòÿ·ÿ¶ÿ´ÿ³ÿ±ÿ°ÿ®ÿ­ÿ«ÿªÿ©ÿ§ÿ¦ÿ¤ÿ£ÿ¢ÿ ÿŸÿžÿ<C5BE>ÿ›ÿšÿ™ÿ˜ÿ–ÿÔÿ’”–—™š†ÿ…ÿƒÿ‚ÿ<E2809A>ÿ€ÿÿ~ÿ}ÿ{ÿzÿyÿxÿwÿvÿuÿtÿsÿrÿqÿpÿoÿnÿmÿlÿkÿ'çéêìí‰ZÿYÿXÿWÿVÿUÿUÿTÿSÿRÿQÿQÿPÿOÿNÿMÿMÿLÿKÿJÿJÿIÿHÿHÿGÿFÿ‚BCEFG€4ÿ3ÿ2ÿ2ÿ1ÿ1ÿ0ÿ/ÿ/ÿ.ÿ.ÿ-ÿ,ÿ,ÿ+ÿ+ÿ*ÿ*ÿ)ÿ)ÿ(ÿ(ÿ'ÿ'ÿ&ÿ&ÿc££¤¥¦Tÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ
˙
˙
˙
@ -12967,8 +13023,6 @@ Lޚ
zIWÂ$přYńčöiCúó…“ »»ő“ÍĄÍ@Ăp(QkË\*ś˙wb5ç Ł#Ľ®ˇ6ĐÂ˙Žěü@0€ ú˝ÔŤ,,ĐďOgIÝ j {R Ún±łsp‘"|5óÎýÜÄĐ5Đď”覼V—Ë%ńďř9Âś
 %QghÚÄŹj˘Uź1oX]CSÚi| ˘qáđňŘA˝ü}hďA=Wţ<57>=S^ž”Ć7M•ŤHI>úźÇ(űzŹ!7ađN„vEýł‚ŹęÝyŕR˙®1ŕFČZ*EµRf„ éëĘÔÍřúź ?hřpxÓ>íöÂďáßUč&<€şŐ+2# ŤÄ§íBH´Ř‡ ß%qĐó_ޢżg 8&3<>Ň<EFBFBD>ŠFČĐvĐ`*<2A>uPPŁ×w”FřŠ<03>_ˇš&rቦ©L·Ţ!Ô|vdŮđ˙;¤ř ĐÉŇ·ŁVJ4źö8ÁAO8zω˙¶Sď˛V¤­ŇI[µ©âyŇ—‹ęútŽÜRćÝüűż çś ŠťeŇ&IEND®B`‚‰PNG

IHDR`?útEXtSoftwareAdobe ImageReadyqÉe< iTXtXML:com.adobe.xmp<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.0-c060 61.134777, 2010/02/12-17:32:00 "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" xmp:CreatorTool="Adobe Photoshop CS5 Windows" xmpMM:InstanceID="xmp.iid:05C26790E09811E6BD84DA7C8067DC0F" xmpMM:DocumentID="xmp.did:05C26791E09811E6BD84DA7C8067DC0F"> <xmpMM:DerivedFrom stRef:instanceID="xmp.iid:05C2678EE09811E6BD84DA7C8067DC0F" stRef:documentID="xmp.did:05C2678FE09811E6BD84DA7C8067DC0F"/> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="r"?>¢R¸,GIDATxÚbüÿÿ?Ã(8À8¦kÜ<6B>´ÄhP xÁÂÀpaÇh8 ` ‚<>À`à1Z \4Z <09>‚F60n+ާ¸ºIEND®B`‚‰PNG

IHDR€€L\öśsRGB®ÎégAMA±Ź üa pHYsĂĂÇo¨dtEXtSoftwarePaint.NET v3.5.11GóB7»IDATx^í—ŃbŁ: Ű˙˙Ý»ď˛c6±>„CäRće—Z˛ä1Ťš/•oţý4j]wśJ–;żM \×-&ëŔ*içČ*śu!YçČ:o^a‘ËĚ:Hšąż[ŕ:n/öóŽ.pxj<78>ţăßî8•QűC«ţ˘f‰Qů´Ŕ˝ÔuŃÚÝy»q‹EŕQĐŞC^Čoxt?´ę<C2B4>—Ćč··?´Ć¨CXe´7°ć,Ńhőá«Ä©Ľ[­-ęýŔnÜuĺ7ż@^H–÷ s4­:äŮEg‰qł·?´ĆÜCř\Đš7„łČ꯮‹VňŇq tżXjZuČ q7¨’%P%Ú­:äĄq•‹+qhŤąĘv×u<C397>Öńż »Ą.Z[˘!o!Kôč§ĆÉo~<7E>Ľ<EFBFBD>¬ Qq÷w4­:äŮŽ&¦ć¬ó˘5ć· aw\´ú‡°›O‹9‹ş?´ę<C2B4>·ŕ“%:«ż{äč~hŐ!ď îWâĐ“5„ÝbܸúCëřß„łâTŢ­‹VňF9ȧp×Ekźň+B^ČU~Ş?´ę<C2B4>—†[LÖ~%­1Ła·@W]´Ž˙MŘÍ(‡VňÔ<>¸ă˛p÷‡Ö>÷^çč9ĐŞCŢŻxVZcÔ!śu•QűCkŢţô<C5A3>ł©Ď<C2A9>VňÜł.$«?ůÍ/<2F>âăf´‹C«yi˘łş)uŃŁa•¬»qť­ţ!<şč¬ţęşhŐ!oÁ}!î8•¬ş÷>ČŃ‹C«yi˘ŹxJhŤÉÂY˘?}qh˝Î7awś›ş.Z[˘!oa”<61>|
w]´ę<C2B4>˘68ş@wŃ~hŐ!/ŤO‰©9«.Zc˛†°Š[ ;®Zóľ Ź§ňn]´ę<C2B4>·0ş7îţĐÚ§üŠ<C3BC>2şčŃúCëB÷Ł<C3B7>Ľá޸/doZc˛†°—…«?´ę¸Ž§ňn]´¶DźEä-Ś~`7îóĘ~ŢCxťŁqhŐ!Ď.Đ}`•¬ş´Ćd áŃqť­ý?? Yo Ęč\÷‡VňÔgĹ©dőwádкнň.#0{?´Ćd ᬠVqő‡V˙ÎťUWĄ®‹VňÜÎ<12>ŐZű¸‡pY˘Ł8´.ÜC8଺hŤÉÂn˛D÷@ëřC8+NĺÝşhm‰n„ĽÝd‰qăî­}ÜC8KôhuŃŞCŢđÝýťU­1Łáź":­ăa÷~nęţĐŞCŢBÖ…¸EgŐEku«¸˘’uqhŐ!ď2UÔş{űCkĚčCXĺ,<2C>GA««¸ĹŚ*şP×EkKt#äťĆż <?ńýU/ńĽ¬€Ö>ęţioŕłÎ‡hžź<C5BE>ú€ç?˙ń캀îGyv<79>î‹;‡Ń§Ä±đ´ÄsůÉŢşhŤQ‡đ‘ݎéěŮŁ›/ő˛ˇG†Â*Žý0Ş9%T˝€ş?´¶¸‡đ–Nđ  ą<15>~Ťß€čž#Ö´řŤ!üJ}˘ĐÚÇ=„źˇÇD<1F>źţßöÇZżoyA«y–_őÂÜŕĆ›_xÄÎuyŢdÚď?ĂŹÖ„Nű±¦Ĺł°Ľ Ń ĹZcÔ!¬˛vqô¸*¨G»{iB'Xcőĺ‚?y<>…§7šgióĐęÂ{âč1îr;ßč Ö´xŢ߼ö‚VňBŹŹ.•ýćPő#k†çMGâGÖR—gmó žĐÚGÂ*Ϣé1čDżîß^0kA| ˙–:ß„Y V'ĐŞCžüć+ĐcÜĺs]˘7qaÎËB\ya­-]âĐŁaőBÖâč±í2€č žµĘŃăŁ<C483>çWć…<oîĎÂ÷u†đ =Ć]V-ź™ç—řý±Ö‰´ŕ Öţ­Ö^ĐÚÝyVč18CËZ†áD?íż Ńkń,LKńކčůÍW‡đž7ż@Źq—D÷ ú5~ăâ<C483>ţ˙ÇÂZ«<÷<>Ľ uˇ{!äY™|<1C>ç-ć<>̡=¦ýţ&LđŁUžD˝żĽX<ÇÁŃ˝P.­1őŤ<C591>× ľůî8•x? áČ]·ZýCXĹ}!űăĐßľ¤§P÷‡Ö–čFČ[p‹9÷ z÷9ä7ż@^H¦č?<3F>>Ł'<27>ŢÇŃ­:䥉~çŔîAôg(ýˇ5FÂ*ďÜâ§ÇˇŐ?„Ő8•¬şnęţĐÚ’5„Gí®‹Vň~,Ł]ZuČKĂ-PÝď¬8´ĆŚ>„łpő‡V˙Îâ§ő‡ÖůFDÜű©¨uGď/Ť«L;ÇUĤ‘uwÝ«śCć*Ixsss“Ĺ××˙Źă5É<35>{IEND®B`‚‰PNG


View file

@ -14,8 +14,8 @@
<!-- Facebook metatags for sharing -->
<meta property="og:title" content="raylib HTML5 GAME">
<meta property="og:image:type" content="image/png">
<meta property="og:image" content="http://www.raylib.com/img/raylib_logo.png">
<meta property="og:image" content="http://www.raylib.com/img/raylib_logo.png">
<meta property="og:image" content="http://www.raylib.com/common/img/raylib_logo.png">
<meta property="og:image" content="http://www.raylib.com/common/img/raylib_logo.png">
<meta property="og:url" content="http://www.raylib.com/games">
<meta property="og:site_name" content="raylib.com">
<meta property="og:description" content="New hmtl5 videogame, developed using raylib videogames library">
@ -24,8 +24,8 @@
<meta name="twitter:site" content="@emegemegames">
<meta name="twitter:title" content="raylib HTML5 GAME">
<meta name="twitter:description" content="New HTML5 videogame, developed using raylib videogames library">
<meta name="twitter:image" content="http://www.raylib.com/img/raylib_logo.png">
<meta name="twitter:url" content="http://www.raylib.com/img/raylib_logo.png">
<meta name="twitter:image" content="http://www.raylib.com/common/img/raylib_logo.png">
<meta name="twitter:url" content="http://www.raylib.com/common/img/raylib_logo.png">
<!--<link rel="stylesheet" href="./Koala Seasons by emegeme_files/main.css">-->
<link rel="shortcut icon" href="http://www.raylib.com/favicon.ico">

File diff suppressed because one or more lines are too long

View file

@ -541,6 +541,11 @@ physac/physics_restitution: physac/physics_restitution.c
# compile [physac] example - physics shatter
physac/physics_shatter: physac/physics_shatter.c
$(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -static -lpthread -D$(PLATFORM) $(WINFLAGS)
ifeq ($(PLATFORM),PLATFORM_ANDROID)
external/native_app_glue.o : native_app_glue.c native_app_glue.h
$(CC) -c $< $(CFLAGS) $(INCLUDES) -D$(PLATFORM) -D$(SHAREDFLAG)
endif
# fix dylib install path name for each executable (MAC)
fix_dylib:

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 977 B

View file

@ -26,6 +26,8 @@
#include "raylib.h"
#include "screens.h"
#include <stdio.h>
#include <stdlib.h> // Required for: malloc(), free()
#include <math.h> // Required for: sqrtf(), asinf()
@ -79,7 +81,7 @@ static Rectangle waveRec;
// Samples variables
static Sample *samples; // Game samples
static int totalSamples = 0; // Total game samples (proportional to waveData num samples)
static int totalSamples; // Total game samples (proportional to waveData num samples)
static int collectedSamples; // Samples collected by player
static int currentSample; // Last sample to go through player collect area
static float samplesSpeed; // All samples move at the same speed
@ -91,7 +93,6 @@ static Texture2D texPlayer;
static Texture2D texSampleSmall;
static Texture2D texSampleMid;
static Texture2D texSampleBig;
static Texture2D texLine;
static RenderTexture2D waveTarget;
@ -103,7 +104,7 @@ static Sound fxPause; // Pause sound
//------------------------------------------------------------------------------------
// Module Functions Declaration (local)
//------------------------------------------------------------------------------------
static void DrawSamples(Sample *samples, int sampleCount, int playedSamples, Rectangle bounds, Color color);
static void DrawSamplesMap(Sample *samples, int sampleCount, int playedSamples, Rectangle bounds, Color color);
//----------------------------------------------------------------------------------
// Gameplay Screen Functions Definition
@ -123,7 +124,6 @@ void InitGameplayScreen(void)
texSampleSmall = LoadTexture("resources/textures/sample_small.png");
texSampleMid = LoadTexture("resources/textures/sample_mid.png");
texSampleBig = LoadTexture("resources/textures/sample_big.png");
texLine = LoadTexture("resources/textures/line.png");
waveRec = (Rectangle){ 32, 32, 1280 - 64, 105 };
waveTarget = LoadRenderTexture(waveRec.width, waveRec.height);
@ -164,15 +164,15 @@ void InitGameplayScreen(void)
int samplesDivision = (int)(wave.sampleCount/requiredSamples);
totalSamples = wave.sampleCount/samplesDivision;
// We don't need wave any more (already got waveData)
UnloadWave(wave);
collectedSamples = 0;
// Init samples
samples = (Sample *)malloc(totalSamples*sizeof(Sample));
// Normalize wave data (min vs max values) to scale properly
float minSampleValue = 0.0f;
float maxSampleValue = 0.0f;
@ -184,7 +184,7 @@ void InitGameplayScreen(void)
}
float sampleScaleFactor = 1.0f/(maxSampleValue - minSampleValue); // 400 pixels maximum size
// Initialize samples
for (int i = 0; i < totalSamples; i++)
{
@ -200,11 +200,16 @@ void InitGameplayScreen(void)
samples[i].active = true;
samples[i].collected = false;
samples[i].color = RED;
samples[i].renderable = false;
}
samplesSpeed = MAX_SAMPLES_SPEED;
currentSample = 0;
//FILE *samplesFile = fopen("resources/samples.data", "wb");
//fwrite(samples, totalSamples*sizeof(Sample), 1, samplesFile);
//fclose(samplesFile);
// We already saved the samples we needed for the game, we can free waveData
free(waveData);
@ -250,7 +255,7 @@ void UpdateGameplayScreen(void)
player.position.y += movement.y*0.1f; // Scale gamepad movement value
}
*/
// Player logic: check player area limits
if (player.position.x < playerArea.x) player.position.x = playerArea.x;
else if ((player.position.x + player.width) > (playerArea.x + playerArea.width)) player.position.x = playerArea.x + playerArea.width - player.width;
@ -329,15 +334,13 @@ void UpdateGameplayScreen(void)
// Check ending conditions
if (currentSample >= totalSamples - 1)
{
StopMusicStream(music);
endingStatus = 1; // Win
finishScreen = 1;
}
if (synchro <= 0.0f)
{
synchro = 0.0f;
StopMusicStream(music);
endingStatus = 2; // Loose
finishScreen = 1;
}
@ -365,33 +368,20 @@ void DrawGameplayScreen(void)
if (i < (currentSample + 1)) col = Fade(DARKGRAY, 0.5f);
else col = WHITE;
//DrawCircleV(samples[i].position, samples[i].radius, col);
if (!samples[i].collected)
{
if (combo > 50) DrawTexture(texSampleSmall, samples[i].position.x - texSampleSmall.width/2, samples[i].position.y - texSampleSmall.height/2, col);
else if (combo > 25) DrawTexture(texSampleMid, samples[i].position.x - texSampleMid.width/2, samples[i].position.y - texSampleMid.height/2, col);
else DrawTexture(texSampleBig, samples[i].position.x - texSampleSmall.width/2, samples[i].position.y - texSampleBig.height/2, col);
//DrawCircleV(samples[i].position, samples[i].radius, col);
if (combo > 30) DrawTexture(texSampleSmall, samples[i].position.x - texSampleSmall.width/2, samples[i].position.y - texSampleSmall.height/2, col);
else if (combo > 15) DrawTexture(texSampleMid, samples[i].position.x - texSampleMid.width/2, samples[i].position.y - texSampleMid.height/2, col);
else DrawTexture(texSampleBig, samples[i].position.x - texSampleBig.width/2, samples[i].position.y - texSampleBig.height/2, col);
}
if (i < (currentSample + 1)) col = Fade(GRAY, 0.3f);
else col = Fade(WHITE, 0.5f);
else col = Fade(RED, 0.5f);
// Draw line between samples
//DrawLine(samples[i].position.x, samples[i].position.y, samples[i + 1].position.x, samples[i + 1].position.y, col);
float dx = samples[i + 1].position.x - samples[i].position.x;
float dy = samples[i + 1].position.y - samples[i].position.y;
float d = sqrtf(dx*dx + dy*dy);
float angle = asinf(dy/d);
// Draw lines using textures
//DrawTextureEx(texLine, (Vector2){ samples[i].position.x - 2, samples[i].position.y - 2 }, -RAD2DEG*angle, d/SAMPLES_SPACING, col);
// Draw lines using textures - IMPROVED
// TODO: Further improving to draw lines properly
DrawTexturePro(texLine, (Rectangle){ 0, 0, texLine.width, texLine.height },
(Rectangle){ samples[i].position.x, samples[i].position.y, (float)texLine.width*d/SAMPLES_SPACING, texLine.height },
(Vector2){ 0, (float)texLine.height/2 }, -RAD2DEG*angle, col);
DrawLineEx(samples[i].position, samples[i + 1].position, 3.0f, col);
}
}
@ -432,7 +422,7 @@ void DrawGameplayScreen(void)
// Draw wave
// NOTE: Old drawing method, replaced by rendertarget
//DrawSamples(samples, totalSamples, currentSample, waveRec, MAROON);
//DrawSamplesMap(samples, totalSamples, currentSample, waveRec, MAROON);
//DrawRectangle(waveRec.x + (int)currentSample*1240/totalSamples, waveRec.y, 2, 99, DARKGRAY);
//DrawRectangleLines(20, 20, 1240, 140, DARKGRAY);
//DrawRectangle(20, 150, (float)currentSample/totalSamples*1240, 10, GRAY);
@ -440,7 +430,7 @@ void DrawGameplayScreen(void)
// Draw wave using render target
ClearBackground(BLANK);
BeginTextureMode(waveTarget);
DrawSamples(samples, totalSamples, currentSample, (Rectangle){ 0, 0, waveTarget.texture.width, waveTarget.texture.height }, MAROON);
DrawSamplesMap(samples, totalSamples, currentSample, (Rectangle){ 0, 0, waveTarget.texture.width, waveTarget.texture.height }, MAROON);
EndTextureMode();
// TODO: Apply antialiasing shader
@ -451,13 +441,14 @@ void DrawGameplayScreen(void)
// Gameplay Screen Unload logic
void UnloadGameplayScreen(void)
{
StopMusicStream(music);
// Unload textures
UnloadTexture(texBackground);
UnloadTexture(texPlayer);
UnloadTexture(texSampleSmall);
UnloadTexture(texSampleMid);
UnloadTexture(texSampleBig);
UnloadTexture(texLine);
UnloadRenderTexture(waveTarget);
@ -466,7 +457,7 @@ void UnloadGameplayScreen(void)
UnloadSound(fxSampleOff);
UnloadSound(fxPause);
free(samples); // Unload game samples (crashes game)
free(samples); // Unload game samples
}
// Gameplay Screen should finish?
@ -483,7 +474,7 @@ int FinishGameplayScreen(void)
// NOTE: For proper visualization, MSAA x4 is recommended, alternatively
// it should be rendered to a bigger texture and then scaled down with
// bilinear/trilinear texture filtering
static void DrawSamples(Sample *samples, int sampleCount, int playedSamples, Rectangle bounds, Color color)
static void DrawSamplesMap(Sample *samples, int sampleCount, int playedSamples, Rectangle bounds, Color color)
{
// NOTE: We just pick a sample to draw every increment
float sampleIncrementX = (float)bounds.width/sampleCount;

View file

@ -38,7 +38,8 @@ GameScreen currentScreen;
SpriteFont font;
Music music;
int endingStatus; // 1 - Win, 2 - Lose
//char *sampleFilename;
char *sampleFilename; // Required for custom music file
#ifdef __cplusplus
extern "C" { // Prevents name mangling of functions

View file

@ -19,6 +19,9 @@
#include <stdlib.h>
#include <stdio.h> // Required for: printf()
#include <string.h> // Required for: strcpy()
#if defined(PLATFORM_WEB)
#include <emscripten/emscripten.h>
#endif
@ -57,20 +60,27 @@ int main(int argc, char *argv[])
{
// Initialization
//---------------------------------------------------------
/*
#if !defined(PLATFORM_WEB)
// TODO: Add support for dropped files on the exe
sampleFilename = (char *)malloc(256);
// TODO: Support for dropped files on the exe
// Support command line argument for custom music file
if (argc > 1)
{
// Just supporting an input argument parameter!!! o__O
if ((IsFileExtension(argv[1], ".ogg")) ||
(IsFileExtension(argv[1], ".wav")))
{
if (sampleFilename != NULL) free(sampleFilename);
sampleFilename = (char *)malloc(256);
strcpy(sampleFilename, argv[1]);
printf("Custom audio file: %s", sampleFilename);
}
}
#endif
*/
SetConfigFlags(FLAG_MSAA_4X_HINT);
InitWindow(screenWidth, screenHeight, "GGJ17 - WAVE COLLECTOR");
@ -104,8 +114,6 @@ int main(int argc, char *argv[])
// De-Initialization
//--------------------------------------------------------------------------------------
StopMusicStream(music);
switch (currentScreen)
{
case LOGO: UnloadLogoScreen(); break;
@ -251,7 +259,7 @@ static void UpdateDrawFrame(void)
} break;
case GAMEPLAY:
{
{
UpdateGameplayScreen();
if (FinishGameplayScreen() == 1) TransitionToScreen(ENDING);

View file

@ -101,7 +101,7 @@ ifeq ($(PLATFORM),PLATFORM_ANDROID)
# Android standalone toolchain path
# NOTE: This path is also used if toolchain generation
#ANDROID_TOOLCHAIN = $(CURDIR)/toolchain
ANDROID_TOOLCHAIN = C:/raylib/android-standalone-toolchain
ANDROID_TOOLCHAIN = C:/raylib/android-toolchain
# Android architecture: ARM or ARM64
ANDROID_ARCH ?= ARM
@ -230,8 +230,13 @@ endif
# external required libraries (stb and others)
INCLUDES = -I. -Iexternal
# OpenAL Soft library
INCLUDES += -Iexternal/openal_soft/include
ifeq ($(PLATFORM),PLATFORM_ANDROID)
INCLUDES += -Iandroid/jni/include/AL
else
INCLUDES += -Iexternal/openal_soft/include
endif
# define any directories containing required header files
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
@ -325,12 +330,12 @@ else
endif
ifeq ($(PLATFORM),PLATFORM_ANDROID)
$(CC) -shared -o $(OUTPUT_PATH)/libraylib.so $(OBJS)
@echo "raylib shared library (libraylib.so) generated!"
@echo "raylib shared library generated (libraylib.so)!"
endif
else
# compile raylib static library.
$(AR) rcs $(OUTPUT_PATH)/libraylib.a $(OBJS)
@echo "libraylib.a generated (static library)!"
@echo "raylib static library generated (libraylib.a)!"
ifeq ($(SHARED_OPENAL),NO)
@echo "expected OpenAL Soft static library linking"
else
@ -377,7 +382,6 @@ external/stb_vorbis.o: external/stb_vorbis.c external/stb_vorbis.h
utils.o : utils.c utils.h
$(CC) -c $< $(CFLAGS) $(INCLUDES) -D$(PLATFORM) -D$(SHAREDFLAG)
# It installs generated and needed files to compile projects using raylib.
# The installation works manually.
# TODO: add other platforms.

View file

@ -1,161 +0,0 @@
/**********************************************************************************************************************************
*
* OpenAL cross platform audio library
* Copyright (c) 2004-2006, Apple Computer, Inc. All rights reserved.
* Copyright (c) 2007-2008, Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following
* conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following
* disclaimer in the documentation and/or other materials provided with the distribution.
* 3. Neither the name of Apple Inc. ("Apple") nor the names of its contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
**********************************************************************************************************************************/
#ifndef __OAL_MAC_OSX_OAL_EXTENSIONS_H__
#define __OAL_MAC_OSX_OAL_EXTENSIONS_H__
#include <OpenAL/al.h>
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ALC_EXT_MAC_OSX
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
// Retrieve functions via alGetProcAddress() by passing in strings: alcMacOSXMixerOutputRate or alcMacOSXGetMixerOutputRate
// Setting the Mixer Output Rate effectively sets the samnple rate at which the mixer
typedef ALvoid (*alcMacOSXRenderingQualityProcPtr) (ALint value);
typedef ALvoid (*alMacOSXRenderChannelCountProcPtr) (ALint value);
typedef ALvoid (*alcMacOSXMixerMaxiumumBussesProcPtr) (ALint value);
typedef ALvoid (*alcMacOSXMixerOutputRateProcPtr) (ALdouble value);
typedef ALint (*alcMacOSXGetRenderingQualityProcPtr) ();
typedef ALint (*alMacOSXGetRenderChannelCountProcPtr) ();
typedef ALint (*alcMacOSXGetMixerMaxiumumBussesProcPtr) ();
typedef ALdouble (*alcMacOSXGetMixerOutputRateProcPtr) ();
/* Render Quality. Used with alcMacOSXRenderingQuality() */
#define ALC_MAC_OSX_SPATIAL_RENDERING_QUALITY_HIGH 'rqhi'
#define ALC_MAC_OSX_SPATIAL_RENDERING_QUALITY_LOW 'rdlo'
// High Quality Spatial Algorithm suitable only for headphone use
#define ALC_IPHONE_SPATIAL_RENDERING_QUALITY_HEADPHONES 'hdph'
/*
Render Channels. Used with alMacOSXRenderChannelCount()
Allows a user to force OpenAL to render to stereo, regardless of the audio hardware being used
*/
#define ALC_MAC_OSX_RENDER_CHANNEL_COUNT_STEREO 'rcst'
/* GameKit extension */
#define AL_GAMEKIT 'gksr'
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
AL_EXT_SOURCE_NOTIFICATIONS
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
/*
Source Notifications
Eliminates the need for continuous polling for source state by providing a
mechanism for the application to receive source state change notifications.
Upon receiving a notification, the application can retrieve the actual state
corresponding to the notification ID for which the notification was sent.
*/
#define AL_QUEUE_HAS_LOOPED 0x9000
/*
Notification Proc: ALSourceNotificationProc
sid - source id
notificationID - id of state that has changed
userData - user data provided to alSourceAddNotification()
*/
typedef ALvoid (*alSourceNotificationProc)(ALuint sid, ALuint notificationID, ALvoid* userData);
/*
API: alSourceAddNotification
sid - source id
notificationID - id of state for which caller wants to be notified of a change
notifyProc - notification proc
userData - ptr to applications user data, will be returned in the notification proc
Returns AL_NO_ERROR if request is successful.
Valid IDs:
AL_SOURCE_STATE
AL_BUFFERS_PROCESSED
AL_QUEUE_HAS_LOOPED - notification sent when a looping source has looped to it's start point
*/
typedef ALenum (*alSourceAddNotificationProcPtr) (ALuint sid, ALuint notificationID, alSourceNotificationProc notifyProc, ALvoid* userData);
/*
API: alSourceRemoveStateNotification
sid - source id
notificationID - id of state for which caller wants to remove an existing notification
notifyProc - notification proc
userData - ptr to applications user data, will be returned in the notification proc
*/
typedef ALvoid (*alSourceRemoveNotificationProcPtr) (ALuint sid, ALuint notificationID, alSourceNotificationProc notifyProc, ALvoid* userData);
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ALC_EXT_ASA : Apple Spatial Audio Extension
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
/*
Used with the ASA API calls: alcASAGetSource(), alcASASetSource(), alcASAGetListener(), alcASASetListener()
*/
typedef ALenum (*alcASAGetSourceProcPtr) (ALuint property, ALuint source, ALvoid *data, ALuint* dataSize);
typedef ALenum (*alcASASetSourceProcPtr) (ALuint property, ALuint source, ALvoid *data, ALuint dataSize);
typedef ALenum (*alcASAGetListenerProcPtr) (ALuint property, ALvoid *data, ALuint* dataSize);
typedef ALenum (*alcASASetListenerProcPtr) (ALuint property, ALvoid *data, ALuint dataSize);
/* listener properties */
#define ALC_ASA_REVERB_ON 'rvon' // type ALuint
#define ALC_ASA_REVERB_GLOBAL_LEVEL 'rvgl' // type ALfloat -40.0 db - 40.0 db
#define ALC_ASA_REVERB_ROOM_TYPE 'rvrt' // type ALint
/* reverb room type presets for the ALC_ASA_REVERB_ROOM_TYPE property */
#define ALC_ASA_REVERB_ROOM_TYPE_SmallRoom 0
#define ALC_ASA_REVERB_ROOM_TYPE_MediumRoom 1
#define ALC_ASA_REVERB_ROOM_TYPE_LargeRoom 2
#define ALC_ASA_REVERB_ROOM_TYPE_MediumHall 3
#define ALC_ASA_REVERB_ROOM_TYPE_LargeHall 4
#define ALC_ASA_REVERB_ROOM_TYPE_Plate 5
#define ALC_ASA_REVERB_ROOM_TYPE_MediumChamber 6
#define ALC_ASA_REVERB_ROOM_TYPE_LargeChamber 7
#define ALC_ASA_REVERB_ROOM_TYPE_Cathedral 8
#define ALC_ASA_REVERB_ROOM_TYPE_LargeRoom2 9
#define ALC_ASA_REVERB_ROOM_TYPE_MediumHall2 10
#define ALC_ASA_REVERB_ROOM_TYPE_MediumHall3 11
#define ALC_ASA_REVERB_ROOM_TYPE_LargeHall2 12
#define ALC_ASA_REVERB_EQ_GAIN 'rveg' // type ALfloat
#define ALC_ASA_REVERB_EQ_BANDWITH 'rveb' // type ALfloat
#define ALC_ASA_REVERB_EQ_FREQ 'rvef' // type ALfloat
/* source properties */
#define ALC_ASA_REVERB_SEND_LEVEL 'rvsl' // type ALfloat 0.0 (dry) - 1.0 (wet) (0-100% dry/wet mix, 0.0 default)
#define ALC_ASA_OCCLUSION 'occl' // type ALfloat -100.0 db (most occlusion) - 0.0 db (no occlusion, 0.0 default)
#define ALC_ASA_OBSTRUCTION 'obst' // type ALfloat -100.0 db (most obstruction) - 0.0 db (no obstruction, 0.0 default)
#endif // __OAL_MAC_OSX_OAL_EXTENSIONS_H__

View file

@ -801,20 +801,26 @@ void ResumeMusicStream(Music music)
}
// Stop music playing (close stream)
// TODO: To clear a buffer, make sure they have been already processed!
void StopMusicStream(Music music)
{
alSourceStop(music->stream.source);
/*
// Clear stream buffers
// WARNING: Queued buffers must have been processed before unqueueing and reloaded with data!!!
void *pcm = calloc(AUDIO_BUFFER_SIZE*music->stream.sampleSize/8*music->stream.channels, 1);
for (int i = 0; i < MAX_STREAM_BUFFERS; i++)
{
UpdateAudioStream(music->stream, pcm, AUDIO_BUFFER_SIZE);
//alBufferData(music->stream.buffers[i], music->stream.format, pcm, AUDIO_BUFFER_SIZE*music->stream.sampleSize/8*music->stream.channels, music->stream.sampleRate);
//UpdateAudioStream(music->stream, pcm, AUDIO_BUFFER_SIZE); // Update one buffer at a time
alBufferData(music->stream.buffers[i], music->stream.format, pcm, AUDIO_BUFFER_SIZE*music->stream.sampleSize/8*music->stream.channels, music->stream.sampleRate);
}
free(pcm);
*/
// Restart music context
switch (music->ctxType)
@ -896,9 +902,9 @@ void UpdateMusicStream(Music music)
break;
}
}
// This error is registered when UpdateAudioStream() fails
if (alGetError() == AL_INVALID_VALUE) TraceLog(WARNING, "OpenAL: Error buffering data...");
// Free allocated pcm data
free(pcm);
// Reset audio stream for looping
if (!active)
@ -918,8 +924,6 @@ void UpdateMusicStream(Music music)
// just make sure to play again on window restore
if (state != AL_PLAYING) PlayMusicStream(music);
}
free(pcm);
}
}
@ -1066,7 +1070,8 @@ void CloseAudioStream(AudioStream stream)
}
// Update audio stream buffers with data
// NOTE: Only updates one buffer per call
// NOTE 1: Only updates one buffer of the stream source: unqueue -> update -> queue
// NOTE 2: To unqueue a buffer it needs to be processed: IsAudioBufferProcessed()
void UpdateAudioStream(AudioStream stream, const void *data, int samplesCount)
{
ALuint buffer = 0;
@ -1075,9 +1080,10 @@ void UpdateAudioStream(AudioStream stream, const void *data, int samplesCount)
// Check if any buffer was available for unqueue
if (alGetError() != AL_INVALID_VALUE)
{
alBufferData(buffer, stream.format, data, samplesCount*stream.channels*stream.sampleSize/8, stream.sampleRate);
alBufferData(buffer, stream.format, data, samplesCount*stream.sampleSize/8*stream.channels, stream.sampleRate);
alSourceQueueBuffers(stream.source, 1, &buffer);
}
else TraceLog(WARNING, "[AUD ID %i] Audio buffer not available for unqueuing", stream.source);
}
// Check if any audio stream buffers requires refill

Some files were not shown because too many files have changed in this diff Show more