0,]']±>Sï}WÿÍu§ğp8·d%qy)6o;]ÉA¦ösï÷ôôô޲ŞÎ]u@ 0ÿÿÿÿÿÿÿÿ2Tv˜ºÜşïÍ«‰gE#2Tv˜ºÜş2Tv˜ºÜş<ÀÿpU\U\U\¥\é\9ÿÿÿUUU UUU9UUU9ªªV9ÿÿW9\9\9W9ÀU9p U9\9U9\9V9\9W9\9\9\9ÿU U9U:ªÿ\9\9\9\Õ\9\U\9\U\9\U\9\¥\9\é\9\9\9\9\ÕW9\UU9\UU9\UU:pUªÀÿÿ\9\9Àÿ\9pU\9\U\:\U°°ªÀÀÿ€uU€uhPwe`7e`ˆf`†b`bÀV€f…b†€b‡€fWvX@vhp–hpfipfip–h@vhvX€fW€b‡b†f…ÀV€`b`†b`ˆf`7ePwe€uh€uUUUffUUîî™™UUªª333333333333DDDD""""™™ªªîîÿÿ»»ªªUU""""""""""""DDDDq@‚AW\u@U@¥ªZ‚AÕ5]U¥ªZ€  p p \5Ü7·ŞwŞ\UU5\j©5pj© pii ÀiiÀeYgÙU@UUTU©ª¤ªªªPUU©©UUeÀÿÿÿÀê >*€ YUUıÿÿÿÀ«¼ ¨€·ŞÀu^Àu^pmz pmz \­z5\­z5gÙWÕ\5\5p p   € 0p @@@p p 0¼@Ğää¸*¤¨&¤¤PA”E‘„@AÀ ¼?¼00ÀT@UUPUUPZ¥PZ¥T^åTUU@•Z¥X_Ö—Ôõ_Ôõ_X_Ö—@•Z¥VTõ%¥ı@©ıP¹õ%Ğ©VP¥TUU(U(V@VPVVUUUPj©¥kéZäj¹äj¹¤j©((PTUUT]]TwwTwwÔÕÕPUUPUUTUÔõTõPU@U•© ¥ P•@U(U(”j©TUU<eÙZåUª¯Z•ªªU™UYU•UUUª¤Z¥»¤ªêïXª¿¿àşïõ¹şuöªÿÕ÷îå5úoe=ş[e/«ZÖ?®VõnUù ¥© @å@ù@u@úPö üPzıÿÀוğÕY|_iÀÕ—VĞÿšßeY—j_V ¿»eÀû¥€ÿ_»ş_UxeYÀV¥Øÿ¯[•¾ ^©¯–ê¿¥ú§ıÿ*~«ÿZ¥PùİÿTúÿ_”Yıg”šU©PY©ZP©VU@UUTgZ•ejV-  00   0 àáàá 0!0! 0ğñğñ0 @0 àáàá 0!P! ĞÑğñ0  0àáàá0!0! ğñğñ @0ĞÑĞÑ0!P!ĞÑ  0!0!@!!P! M000000000000000000000000000000;86544444456778899:;;<<<<==>>>    31137;99;==<<>????????????????000000000000000000000000000000         '%$##"""""##$$$$$##"""""##$$$%' hh hh20•?€ˆˆˆ˜ˆˆˆˆ˜™™™™‰ˆˆˆˆ™™™™™ˆˆˆ™IDDDDDD™™™™‰ˆˆˆˆˆˆ™™™ˆˆˆˆˆˆ˜™™IDD¤¤¤¤¤¤©©©¨©©¨©¨©©¨©©©¤¤¤©©¨¨¨¨€ˆˆˆˆ™™™ˆ˜™™™™‰ˆˆˆˆ˜™™™™ˆˆˆ™™™DDDDD™™™™‰ˆˆˆˆˆˆ™™™ˆˆˆˆˆˆ˜™™IDDJJJJJšššŠŠšŠŠššŠšŠšššJJJšššŠŠŠ€ˆˆˆˆˆ™™™ˆˆˆ˜™™‰ˆˆˆˆˆˆˆˆ™ˆˆˆ™™™DDD”™™™™™‰ˆˆˆˆˆˆ˜™™ˆˆˆˆˆˆ˜™™I$D¤¤¤¤¤¤¤©©¨©©¨©©¢¨©©©¤¤¤¤©©©©¨¨€ˆˆ™ˆˆ™™™ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™‰ˆ™™™DDD”™™™™™‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ˜™™IDDJJJJJJJšŠŠšŠŠššŠšššJJJJJšššŠŠŠ€ˆˆ™‰ˆˆ˜™ˆˆˆˆˆˆˆˆ™™‰ˆˆˆˆˆ™‰ˆˆ˜™DDD”™™™™™‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ˜™™IDD¤¤¤¤¤¤¤¢©¨©©¨¨©¨¨©©©¤¤¤¤¤¤©©¨¨€ˆˆ™‰ˆˆˆˆˆ˜ˆˆˆˆˆˆ™™™™‰ˆˆˆ™‰ˆˆ˜™™™™™™™™™™ˆˆˆˆˆ™ˆˆˆˆˆˆˆˆˆˆ™™™DDDJJJJJJšš*ššŠŠšŠŠšJJJJJJJJšššŠŠˆˆˆ™‰ˆˆˆˆˆ˜™‰ˆˆˆˆ™™™™‰ˆˆˆ™‰ˆˆ™™™™™™™™˜™™ˆˆˆˆˆ™‰ˆˆˆˆˆˆˆˆˆ™™™™ID¤¤¤¤¤¤¤©¨¨©¨¨©©¨©©$¤¤¤¤¤¤¤©©©¨ˆˆˆ™™‰ˆˆˆˆ™™ˆˆˆˆˆ˜™™™ˆˆˆ˜™ˆˆˆ˜™™™™™™™ˆ˜™ˆˆˆˆˆ™‰ˆˆ˜™ˆˆˆˆˆ™™™™IDJJJJJJššŠššŠŠšŠŠšJJJBJJJJJššŠŠˆˆˆ™™™™™™ˆ™™ˆˆˆˆˆ˜™ˆ™‰ˆˆ˜™ˆˆˆˆˆˆ˜™™™™ˆ˜™‰ˆˆˆˆ™‰ˆˆ˜™‰ˆˆˆˆ™™™™ID¤¤¤¤¤©¤©¨¨©¨¨©©¨©©¤¤¤¤¤¤¤¤¤©©¨Àˆˆˆ™™™™™™™™™‰ˆˆˆˆ˜™ˆ™‰˜™™™ˆˆˆˆˆˆˆˆˆˆ™ˆ˜)‰ˆˆˆˆ™™™ˆ˜™‰ˆˆˆˆ™™™™IDJJJJJšššŠššŠŠšŠŠšJJJJJJJJJJšŠŠ ˆˆˆ™™™™™™™™™™™™™ˆ˜™ˆ™‰˜™™™™‰ˆˆˆˆˆˆˆˆˆˆ˜™‰ˆˆˆˆ™™™™™™‰ˆˆˆˆ™™™™™™©¤¤¤¤©©©¨¨¨¨¨©©¨©©¤¤¤¤¤¤¤¤¤©©¨ˆˆˆ™™™™™™™™™™™™™ˆ˜™ˆ™‰˜™™™™‰ˆˆˆˆˆˆˆˆˆˆ˜™ˆˆˆˆˆˆ™™™™™ˆˆˆˆˆ™™™™™™JJJšššŠšŠŠŠŠŠŠŠŠšššJJJJ*JJJšŠŠˆˆˆ™™ˆˆ™™™™™™™™™ˆ˜™ˆ™‰˜™™™™ˆˆˆˆˆˆˆˆˆˆˆ™‰ˆˆˆˆ˜™‰ˆ™™‰ˆˆˆˆ˜™™™™™I¤¤¤)©©¨¨¨©¢¨¨¨¨¨©©©¤¤¤¤¤¤¤¤©¨¨€ˆˆ˜‰ˆˆ˜™™™™™™™™‰ˆˆˆ˜™ˆ™™™™™™™ˆˆˆˆˆˆˆˆˆ™‰ˆˆˆˆ˜™™™™™‰ˆˆˆˆ˜™™™™™™ššJšššŠŠŠšššššŠšššJJJJJJJšššŠš€ˆˆˆˆˆˆ˜™™™™™™™™‰ˆˆˆˆˆˆ™™™™™™™™™™‰ˆˆˆˆˆ™‰ˆ˜™™™™™™™™‰ˆˆˆˆ˜™™™™™™©©©©©¨¨¨¨©©©©©¨¨¨©©¤¤¤¤¤¤©©©¨¨€ˆˆˆ˜™ˆˆ™™™™™™™‰ˆˆˆˆˆˆˆ™™™™™™™™™™™™ˆˆˆˆ™™ˆ˜™‰ˆˆ˜™™™™ˆˆˆˆ˜™ˆˆ˜™™ÌœššŠŠŠšššššššŠŠŠšššJJJJJšššŠšˆˆˆ˜™ˆˆˆˆ™™™™™‰ˆˆ™™™ˆˆ™™™™™™™™™™™™ˆˆˆˆYUU•™‰ˆˆˆ˜™™™ˆˆˆˆ™‰ˆˆˆˆˆ¨©©©¨¨¨©©¨¨¨¨)¨¨¨©©©¤¤¤©¤©©©¨©ˆˆˆˆ™ˆˆˆˆ™™™™ˆ‰ˆˆ™™™™ˆˆ˜™™™™™™™™™™ˆˆˆˆY‰ˆ•ˆˆˆˆˆ™™™™™™‰ˆ™‰ˆˆˆˆˆŠŠŠŠŠŠŠššŠŠŠŠŠŠŠššššJJJšš’ŠŠŠšˆˆˆˆˆ™™‰ˆ™™™™ˆˆˆˆ™™™™ˆˆ˜™™™™™™™™™™ˆˆˆˆY‰ˆ…ˆˆˆˆˆ™™™™™™‰ˆ™‰ˆˆˆˆˆ¨¨¨¨¨¨¨¨©¨¨¨¨¨¨¨¨¨¨©¤¤¤©©©¨¨(¨ˆˆˆˆ˜™™ˆˆˆ˜™‰ˆˆˆˆˆˆˆ‰ˆˆ™™™™™™™™™™‰ˆˆˆˆY‰ˆ…ˆˆˆˆˆ™™™™™™‰ˆ™™ˆˆˆˆˆŠŠŠŠŠŠŠššŠŠŠŠŠŠŠŠŠššššššššŠŠŠšˆˆ™ˆ˜™™ˆˆˆˆˆˆˆˆˆˆˆˆˆ˜‰ˆ˜™™™™™™™™™™ˆˆˆ˜Yˆˆ…ˆˆˆˆˆ™™™™™™ˆˆ™‰ˆˆˆˆˆ¨¨¨¨¨¨¨©©¨¨¨©©¨¨¨¨©©©©©¨¨¨¨¨¨©°€ˆˆ™ˆˆˆˆˆˆˆˆˆˆˆ™™™ˆˆˆ˜‰ˆˆ˜™™™™™™™™™ˆˆˆ˜YUU…ˆˆˆˆˆ™™™™™™ˆˆ™‰ˆˆˆˆˆˆˆˆˆˆ˜ˆ™‰ˆˆ˜™™™™‰ˆ™™™™‰ˆˆˆˆ˜™˜€ˆˆ™ˆˆˆˆˆ˜™ˆˆˆˆ™™™™ˆˆ˜™ˆˆ˜™™™™™™ˆ˜™ˆˆˆ˜™ˆˆˆ™ˆˆˆˆ™™™™™™‰ˆ™™™™ˆˆˆˆˆˆˆˆ˜™™™‰ˆ˜™™™™‰ˆˆˆˆ™‰ˆˆˆˆ˜™ˆ€ˆˆ™™‰ˆˆˆ˜™ˆˆˆˆ™‰ˆ‰ˆˆ™‰ˆˆˆˆˆ™™™‰ˆ™‰ˆˆˆ˜‰ˆˆ˜‰ˆˆˆ˜™™™™™™‰ˆ™™™‰ˆ™ˆ˜ˆˆˆˆ˜™™™™™™™™™™‰ˆˆˆˆˆˆˆˆˆˆ˜™ˆ€ˆˆ™™™™™™˜™ˆˆˆˆ˜‰ˆ™ˆ™™‰ˆˆˆˆˆˆˆˆˆˆ™‰ˆˆˆ˜™™‰˜‰ˆˆˆ˜™™™™™™™™™™™‰ˆ™ˆ˜™ˆ™ˆ™™™™™™™™‰ˆ™ˆˆˆˆˆˆˆˆ™™™˜‰ˆ€ˆˆ™™™™™™™™™™™‰ˆˆˆ™ˆ™™™™ˆˆˆˆˆˆˆˆˆ™‰ˆˆˆ˜™™™™‰ˆˆˆ˜™™™™™™™™™™™‰ˆˆˆˆ˜ˆ™™™™™™™™™™‰ˆ™ˆˆˆˆˆˆˆˆ™™™ˆˆˆ€ˆˆ˜™‰˜™™™™™™™‰ˆˆˆˆˆ™™™™ˆˆˆˆˆˆˆˆˆ™‰ˆˆˆ˜™™™™‰ˆˆˆ˜™™™™™™™™™™™‰ˆˆˆˆˆˆ™™™™™™™™™™‰ˆ™ˆˆˆˆˆ™‰ˆ™™™ˆˆˆ€ˆˆ˜™‰ˆ™™™™™™‰ˆˆˆˆˆˆ™™™‰ˆˆˆˆˆˆˆˆˆ™ˆˆˆˆ‰˜™™™‰ˆˆˆ˜™™™™™™™™™™ˆˆˆˆˆˆˆˆ™™™™™™™™™™‰ˆ™ˆˆˆˆˆ™‰ˆˆˆ˜ˆˆˆ€ˆˆ˜™ˆˆˆ™™™™™ˆˆ™™™ˆ˜™™™‰ˆˆˆˆˆˆˆˆˆ™ˆˆˆˆˆˆˆ˜™‰ˆˆˆ˜™™™™™™™™™™ˆˆ˜™‰ˆˆˆ™™™™™™™™™™‰ˆ™ˆˆˆˆ˜™ˆˆˆˆˆˆ˜‰€ˆˆˆ˜ˆˆˆ™™™‰ˆˆˆ™™™‰ˆˆ™™™™™‰ˆˆˆˆˆˆ™ˆ˜‰ˆˆˆˆ˜™‰ˆˆˆ˜™™™™™™™™™™ˆˆ˜™™™‰ˆ™™™™™™™™™™‰ˆ™ˆˆ™ˆˆˆˆˆˆ˜™€ˆˆˆˆ™™ˆ™™™‰ˆˆˆˆ˜™‰ˆˆ™™™™™™™™™ˆˆˆ™‰˜™ˆˆˆˆ˜™‰ˆˆˆ˜™ˆ™™™™™™™ˆˆˆ˜™™™‰ˆˆ˜™™™™™™™™‰ˆ™ˆˆ™™™‰ˆˆˆ˜™€ˆ˜ˆˆ™™ˆˆˆˆˆˆˆˆˆˆˆ˜‰ˆ™™™™™™™™™ˆˆ˜™ˆ˜‰ˆˆˆˆ™™ˆˆˆˆ™‰ˆˆˆˆ™™™‰ˆˆ™‰ˆ˜™ˆˆˆ™™™™™™™™™ˆ˜™ˆˆ™™™™™™™˜™€ˆ˜‰ˆˆ˜ˆˆˆˆˆˆ™™ˆˆˆ˜‰ˆˆ™™™™™™™™ˆˆ˜™ˆˆˆˆˆˆˆ™™™™™ˆ™‰ˆˆˆˆˆˆˆˆˆˆ™‰ˆˆˆˆˆˆ™™™™™™™™ˆˆ˜™ˆˆ™™™™™™™™€ˆ˜‰ˆˆˆˆ™‰ˆˆˆ™™™ˆˆ˜‰ˆˆ™™™™™™™™ˆˆ˜™ˆˆˆˆˆˆˆ™™™™™ˆ™‰ˆˆˆˆˆˆˆˆˆˆ™‰ˆˆˆˆˆˆˆ˜™™™™™™ˆˆ˜™ˆˆ™ ™™™™™€ˆˆ™™ˆˆˆ™‰ˆˆˆ˜™™ˆˆ˜‰ˆˆ™™™™™‰˜™ˆˆ˜™ˆˆ˜ˆˆˆˆ™™™™™ˆ™‰ˆˆˆˆˆˆˆˆˆˆ™‰ˆˆ‰ˆˆˆˆ˜™™™‰™™ˆˆ˜™ˆˆ™™™ˆˆ˜™™™™™™ˆˆˆˆ˜‰˜ˆˆ˜‰ˆˆˆ˜™™™‰˜™ˆˆ™™‰ˆ˜™ˆˆˆ™™™™‰˜™ˆˆˆˆˆˆˆˆˆˆ˜™ˆˆ˜™™™‰ˆ™™™™ˆˆˆˆˆ™‰ˆˆ™™ˆˆ˜™™™™™™™ˆˆ‰ˆˆˆˆ˜™ˆˆˆˆˆˆˆ˜ˆ™‰ˆˆ˜™™ˆ™‰ˆˆ˜™™™™‰ˆ™™™ˆˆˆˆˆˆˆ˜™™ˆˆ˜™™™‰ˆˆˆ™™ˆˆˆˆ™ˆˆˆˆ™ ˆˆˆ™‰™™™™™™‰ˆˆˆˆˆ˜™™ˆˆˆˆˆˆˆˆ™YUU…™™™™‰ˆˆˆ™™™™‰ˆ™™™™ˆˆˆˆˆˆ˜™™™™™™™™‰ˆˆˆˆˆˆˆˆˆ™‰ˆˆˆ™ €ˆˆ™‰ˆˆ˜™™™‰ˆ˜™™ˆ˜™™‰ˆˆˆˆˆˆˆ˜Yˆˆ…‰™™™‰ˆˆˆ™™™™™™™™™ˆˆˆˆˆˆˆ˜™™™™™™™™ˆˆˆˆˆˆˆ˜™™ˆ‰ˆˆ€ˆˆ˜‰ˆˆ˜™™‰ˆˆ˜™™‰ˆ™™‰ˆˆˆˆˆˆˆ˜Yˆˆ…ˆˆˆ˜‰ˆˆˆ™™™™™™™™™ˆˆ˜™‰ˆˆ™™™™™™™™™ˆˆˆˆˆˆˆ™™‰ˆˆˆ€ˆˆˆ˜™‰˜™™‰ˆˆˆˆ˜‰˜™™™™™‰ˆˆˆˆ™X˜™…ˆˆˆ™ˆˆˆ˜™™™™™™™‰‰ˆˆ™™™‰ˆ˜™™™™™™™‰ˆˆˆˆ˜‰ˆ˜™‰ˆˆˆˆˆ™‰˜™‰ˆˆˆˆˆˆˆˆˆ˜‰˜™™™™™™™‰ˆ™Xˆˆ…ˆˆˆ™ˆˆˆ˜‰ˆˆ™™™™‰ˆˆ™˜™™‰ˆ˜™™™™™™™‰˜ˆˆˆ˜‰ˆˆˆˆˆˆˆˆˆ™ˆˆˆˆˆˆˆˆ™™™ˆˆ™ˆˆ™™™™™™™ˆˆ™XUU…ˆˆˆ˜™™ˆ˜‰ˆˆˆˆˆ˜‰ˆˆ™ˆˆˆˆˆ˜™™™™™™™‰ˆ™ˆˆ‰ˆˆˆˆˆ™ ˆˆ™ˆˆˆˆ™ˆˆˆ™™™ˆˆ™ˆˆ™™™™™ˆ™ˆˆ™ˆˆˆ˜‰ˆˆ˜™™‰˜‰ˆˆˆˆˆˆˆˆˆ™ˆˆˆˆˆˆˆ™™™™™‰ˆˆ™ˆˆ™™™‰ˆˆ˜™ˆˆ™™™™‰™ˆˆˆˆˆˆˆ˜‰ˆˆˆˆ˜™‰˜‰ˆ˜‰ˆˆˆ™ˆˆˆ™™™ˆ™‰ˆˆˆˆˆˆˆˆ˜‰ˆˆˆˆˆˆ˜™™™˜™ˆˆ˜‰ˆˆ™™™™™™ ™ˆˆˆ™™™™™™™ˆˆˆˆˆ˜™‰ˆˆˆˆˆˆˆ™ˆ˜™™™™™ˆˆˆ™™™ˆ™‰ˆˆˆˆˆˆˆˆ˜‰ˆˆ™™™‰˜™™™ˆˆˆ˜˜‰ˆ™™™™™™ ˆˆˆ™ˆˆ˜™™™ˆˆ™™‰˜™™ˆˆˆˆˆˆˆ™ˆ˜™™™™™ˆˆˆ™™™ˆ™™™™ˆˆˆˆˆˆ™™‰ˆ™™™‰ˆˆˆ™ˆˆˆ˜‰ˆˆ™ ™™ ˆˆˆ˜™ˆ™™‰ˆˆˆ™™ˆˆ™™‰ˆˆˆˆˆˆ™ˆˆˆˆˆˆ™ˆˆˆ™™™ˆ˜™™™ˆˆ™‰ˆˆ™™™™™™™‰ˆˆˆˆˆ™‰˜‰ˆˆ˜™™ ˆ˜ˆ˜™ˆ˜‰ˆˆˆˆˆˆ™˜™™™™™‰ˆˆ˜‰ˆˆˆˆˆˆ‰ˆˆ˜™™™™™™‰ˆˆ˜™™‰ˆ™™™™™™™ˆˆˆˆˆ˜™™ˆˆˆˆ™ ˆ˜‰ˆˆˆˆˆˆ˜™™ˆˆ™ˆˆ™™™™™™ˆ˜‰ˆˆˆˆˆˆ‰ˆˆ˜‰ˆˆˆ™™‰ˆ˜‰ˆ˜‰ˆ™™™™™™™ˆˆˆ˜‰˜™™ˆˆˆ™ ˆˆ‰ˆˆˆ™ˆˆ˜™™‰ˆ™ˆˆ™™™™‰™UUUˆˆ˜‰ˆˆ™™‰˜‰ˆˆˆ˜ˆˆˆ˜‰ˆˆˆˆ™™™™™™‰ˆˆˆ˜‰ˆˆˆˆˆˆˆˆ˜™™‰™ˆˆˆˆˆˆˆ™ˆˆˆˆ˜™‰™…˜Yˆˆ˜‰ˆˆ™™‰˜‰ˆˆˆˆˆˆˆ˜‰ˆˆˆˆˆ˜™™™™‰ˆ˜‰˜‰ˆˆˆˆ™ ˆˆ™™™™™™‰ˆ˜™‰˜™™ˆˆˆˆˆˆ™…™X™™™‰ˆˆ™™ˆ™ˆˆˆˆˆˆˆˆ™ˆˆ™™™ˆ˜™™‰ˆˆˆ˜‰˜™™™‰ˆ˜ ˆˆ˜™‰˜™™ˆˆˆ™‰ˆ™™ˆˆˆˆˆˆ™…™X˜™™‰ˆˆ™™ˆ™™™‰ˆˆˆˆˆ˜™ˆ˜™™‰ˆˆ˜‰ˆˆ˜‰ˆ™™™™™™ˆ˜ˆ™‰˜‰ˆˆˆˆˆ˜™™™ˆˆˆˆˆ˜‰…ˆXˆˆˆˆˆ˜™™‰˜™™‰ˆ˜™ˆˆ™™™™™™‰ˆˆˆˆ˜™˜‰ˆ™ ™™™ €ˆ˜ˆˆˆˆˆˆ˜™™ˆ˜™‰™™™™ˆˆˆ‰UUUˆˆˆˆˆ˜‰™™™™™ˆ˜˜™™‰˜™™™™™‰ˆˆˆˆ˜™‰ˆˆ™ ™ˆˆ™ˆˆ˜ˆˆˆ™™ˆ˜‰ˆˆˆ™™ˆ‰ˆ‰˜ˆ˜‰ˆˆ™ˆ˜‰ˆˆ™˜™ˆ˜‰ˆˆˆ™™™™™™ˆˆˆ™ˆˆ™ˆˆˆ ™€ˆ™™™™™ˆˆ˜™‰˜™‰ˆˆˆˆˆ‰ˆ™˜™™‰ˆˆ™™˜‰ˆˆˆˆˆˆˆ‰ˆˆˆ˜ˆ™™™™‰ˆˆ™ˆˆˆˆ™€ ˜™™ˆ‰˜ˆˆˆˆ˜™™ˆˆˆˆˆ˜‰˜‰™™™ˆˆ˜™‰˜ˆˆˆˆˆˆˆ˜ˆˆ™ˆˆ˜™™‰ˆˆˆ™™™‰ˆˆ™™ˆˆˆ™ˆˆ™™ˆ˜™ˆ™ˆˆˆˆ˜‰˜‰ˆˆˆˆˆ˜™‰˜™ˆˆˆˆˆ˜˜‰ˆ™™™ˆ˜™‰ˆˆ™ˆ™™™™™‰ˆˆ‰ˆˆ™™ˆ˜™ˆ™™™™‰˜‰‰ˆˆˆˆˆˆ˜‰ˆ˜™™ˆˆ‰ˆ˜˜™™™™™ˆˆˆˆ˜ˆ™˜‰˜™™ 0™™™ˆˆBˆ˜ˆˆ˜™™‰™˜‰ˆˆ™ˆˆ™‰˜‰ˆ˜‰ˆˆˆ‰ˆˆ˜™™™™™ˆˆˆˆ˜™ˆ˜‰ 3‘™!B€ˆˆˆˆˆ™™ˆ™™™ˆˆ™‰™ˆˆ™ˆˆˆ˜ˆˆˆ™ˆ™™™‰ˆˆ™ˆˆ‰ˆˆ8™“C’"!B™€ˆˆˆˆ˜‰™‘™‰ˆˆ™‰™ˆˆˆˆˆˆ˜ˆˆ™™‰™™‰ˆˆ‰™ˆˆˆ˜3 33$‘!"™@ˆˆˆ˜‰ƒ(‚ˆˆ™‰™™™™ˆˆ˜™™™™™‰ˆˆˆˆˆ™™™™ˆ˜9031$!B@DDD‚‰(2‚ˆˆ‰ˆ™™™ˆ˜‰™™‰™™™‰ˆˆˆ˜™ˆ™™™™91031$!@D433‰("2"2ˆ‰ˆ‰ˆˆˆ˜‰ˆ™ˆ˜™™ˆˆ˜ˆ˜‰ˆ‰"™913C"UUU@DD4”„$"33""˜ˆˆˆˆˆˆ™ˆ˜ˆˆ˜™‰˜ˆ˜ˆˆˆ˜"’33C‚•™X@DDD“4C4#""#˜)ƒˆˆˆH™ˆ˜™‰ˆ˜‰ˆˆ™™™‰˜)’ĞİİİİİİC‚…˜X@DDDDC3$"333“)3C3CH”DDD„ˆˆˆ˜™™™™™"!41Ğİİİİİİİİİİ!ˆ…Ø]@DDDDD433D4C”94DDDD”DDD„ˆˆ‰˜™™ˆ”"!41İİİİİİİİİİİİİ•‰X@DDDDDDD34434C44DDDIDDD4ƒ˜ˆˆˆ™@’!B3ĞİİİİİİİİİİİİİİUUU@DDDDDDDCDDC4DDDDDDDDDD43’™™ˆ™@$!"!41Ğİİİİİİİİİİİİİİ݈ˆ@DDDDDDDDDDDDDDDDDDDDD432“™™™ $"!41İİİİİİİİİİİİİİİİİİØ DDDDDDDDDDDDDDDDDDDDD443’)I"""41İİİİİİİİİİİİİİİİİİİİİ DDDDDDDDDDDDDDDDDDDDC33#"™$"!41Ğİİİİİİİİİİİİİİİİİİİİİİ4CDDDDDDDDDDDDDDDDD443#""@"!"B41Ğİİİİİİİİİİİİİİİİİİİİİİİİ@DDDDDDDDDDDDDDDDD4C33"!@$"!B1Àİİİİİİİİİİİİİİİİİİİİİİİİİ @DCDDDDDDDDDDDDDDD3##2!$"B413Ğİİİİİİİİİİİİİİİİİİİİİİ݈İİ44C4DDDDDDDDDDCD43D"#"$!"!43İİİİİİİİİİİİİİİİİİİİİİ݉‰Øİ CCCDDDDDDDDDDDD432#"2"A""!"43Ğİİİİİİİİİİİİİİİİİİİİİݘ™ˆØİİ0CD3UUUD4C44DD3D332!!!A""!D3İİİİİİİİİİİİİİİİİİİİİİ(""‚İİ 0#D254T4DCC43443"#"A$""!B413Ğİİİİİİİİİİİİİİİİİİİİİ݈(ˆØ‚Øİİ32#53SC44CD#$#3""!A$"""41İİİİİİİİİİİİİİİİİİİİİİİ(ˆˆ‚ˆØİ ""%S33#43332"!A$!""D13İİİİİİİİİİİİİİİİİİİİİİİİ(˜ˆ‚ˆİİ "#%3S#3"3"#3"!D"!"!D313Ğİİİİİİİİİİİİİİİİİİİİİİİİ(˜‰‚ˆØİİ UUU#2"233"D"!"!B43İİİİİİİİİİİİİİİİUUUİİİİİ(""‚ˆİİİ ""!#"!"!!D""""4313İİİİİİİİİİİİİİİİÕİ]İİİİ݈˜Ù‰ˆØİİİ !!""!!D$""""D33ĞİİİİİİİİİİİİİİİİÕİ]İİİİݘ™ØˆØİİİİ!!""DD""""D33İİİİİİİİİİİİİİİİİÕ]İİİİİ݈ˆˆİİİİİ DDDD""!"""D313İİİİİİİİİİİİİİİİİÕ]İİİİİİİØİİİİİİİMDDDD$"""""""!"D313ĞİİİİİİİİİİİİİİİİİUUUİİİİİİİİİİİİİİİİ""""""""!"D313Ğİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ!""""""!BD313Ğİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ-""Òİİ""""""""""!BD333İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ-İØÒİİ-""""!"D333İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ-ˆÒİİ""D3133İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ-˜ˆÒİİ"BD43133Ğİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ-˜Òİİİ"""""DD33133Ğİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ-""Òİİİ""""DDDDD3133ĞİİİİİİİİİİİİİİİİİİİÌİİİİİİİİİİİİİİİİİDDDD33333333Ğİİİİİİİİİİİİİİİ݌݈İÜİİİİİİİİİİİİİİİİİ3333333İİİİİİİİİİİİİİİİİÌİÌİÜİİİİİİİİİİİ-İÒİİİ333333İİİİİİİİİİİİİİİİİÜİÌÌÒİİ3Óİİİİİİİİ‚Üİİİ=33333333İİİİİİİİİİİİİİİİİÂÌÌ,İİ=33İİİİİİ݈È-""Ò İİİİİİİİİİİİİİİİİ-ÂÌÂÜİ333ÓİİȈˆˆİÒ-İİÒ İİİİİİİİİİİİİİDÔİÍÌÂ,Ì=3333ˆˆİİİİİİ-˜İÒ PUUİİİİİİİİİİİİİMDDİÍÌÌ̈83333Òİİİİİİİ-˜Ò Pˆ˜İİİİİİİİİİİİİDDDÔ̈ÌÌÌ<3333İİİİİİİİ-ˆÒ PݘİİİİİİİİİİİİMDDDDˆÈÈŒ"""2"""İİİİİİİ-""Ò PˆˆİİİİİİİİİİÈHDDDDÌ,""""822İ-İİİİİİİİİİİ P˜‰İİİ-İ҈ȈØ-BDDDD"Òİİ--‚2ÒØ-İİİİİİİİİİİ PUU İİİ݈Øİİİİ-İDDD„(Òİİ-݉҂Ø-İİİİİİİİİİİ UUUİİİİŒÜİİİİİİİMDD"Òİİİ-ÙÒÒˆ(İİİİİİİİİİİ Õ˜PİİİİÒ-İİİİİİİİD„İİİİİ-""Ò"""İİİİİİİİİİİ …ˆYĞİİİİİİİİİİİİ݈Øİİİİİİİİİİİİİİİİİİİİİİİ•‰XĞİİİİİİİİİİİİİØİİİİİİİİİİİİİİİİİİİİİİİİ…ˆXĞİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİUUUĞİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ ĞİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİĞİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİĞİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ   """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""(""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""‚(""""""""""" """""""" " " " " """""""""""""""""" " " ""‚(" """" """  """"  "  " """" """"""""   ""‚("  """" "" """   """" """"""" ""‚(" """""""" """    """" """""""""   ""‚(  """" "" """"" " " " " "" " """"""" "" " " ""‚(""" """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""‚ """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""„x-- title: Falacy Gorx -- author: Popolon -- desc: 1980's arcade style pseudo3D space shoot them'up -- script: lua -- saveid: Falacy_Gorx -- 50000km m=math cos=m.cos sin=m.sin rnd=m.random flr=m.floor abs=m.abs sqr=m.sqrt pi=m.pi pi2=pi*2 p12=pi/2 p14=pi/4 p18=pi/8 p16=pi/16 stf=string.format debug=false showdot=false drawlim=false simu=false Yinv=true rdr=false scrb=true wf=false ff=true txt=true qty=5 snd=true sdv=15 intrpl=true g={simu=simu,Yinv=Yinv,wf=wf,ff=ff,txt=txt,qty=qty,rdr=rdr,scrb=scrb,snd=snd,sdv=sdv,lvl=1} grovaisso=0 highscore=0 newhighscore=false lvls={{intrpl=true}} btnh=0 btnb=1 pause=false display_pause=false rpf=0 -- parametres persrot sr=0 --rotation de la scene dst=70 --dist cam <-> plan -- coordonnees initiales z=10 cx=0 cy=0 x0=0 y0=0 -- limites affichage xM=240 yM=136 xm=xM>>1 ym=yM>>1 zm=-dst zM=1500 inter=150 --intervalle entre plans --0=mainmenu 1=ingame gamode=0 -- bounding de la scene --lHx=240 lHy=136 lBx=0 lBy=0 lMx=(lHx-lBx)/2 lMy=(lHy-lBy)/2 lHx=540 lHy=436 lBx=-250 lBy=-100 lMx=lBx+(lHx-lBx)/2 lMy=lBy+(lHy-lBy)/2 lims={{x=lBx,y=lBy},{x=lHx,y=lBy} ,{x=lHx,y=lHy},{x=lBx,y=lHy}} sRx=xM/(lHx-lBx) sRy=yM/(lHy-lBy) --pos ecr=lim/(xmM,yM) sm=1 sM=12 sD=5 -- speed --position vaissal ivs={x=xm,y=ym-20,ph=0,a=0,vx=0,vy=0,v=sD,z=0,shd=100} vs={} --reacts={{-10,5},{10,5},{-10,-5},{10,-5}} reacts={{-10,0},{10,0}} lnchr={{-30,0,ivs.x-30,ivs.y,t=2},{30,0,ivs.x+30,ivs.y,t=2}} score=0 -- radar Rx=60 Ry=20 CoLckb=5 CoLckd=4 CoUlckb=2 -- z,t,a, zbuf={} lkbuf={} objt={ --objs immobile -- dist(zpos),posx,y,type {z,x,y,t,i} } oths={} --other living objects oths.rc=2 xplz={} -- c={cx,cy,sx,sy,nc,cl{c2,c3,c4}} cells={ aster={40,144, 16,16, 4,{8,9,13},"cir"}, mouche={56,144, 32,16, 4,{8,2,3},"rec"}, grov={0,160, 64,16, 4,{8,9,9},"rec"}, grovl={0,160, 64,16, 4,{8,9,255,2,4},"rec"}, fantom={0,144, 16,16, 4,{5,12,8},"cir"}, ckpup={32,128, 16,16,4,{12,8,2},"tru"}, ckpdw={48,128, 16,16,4,{12,8,2},"trd"}, ckpbk={0,128, 32,16,4,{12,8,2},"tru"}, aile={64,128, 24,8, 4,{12,8,2},"rec"}, lnchr={64,136, 8,8,4,{12,8,2},"cir"}, lnchu={72,136, 8,8,4,{12,8,2},"tru"}, bulet={80,136, 8,8,4,{8,10,12},"circ"}, shldup={88,136, 8,8,4,{2,13,4},"circ"}, satrn={32,128+64, 64,64,4,{1,2,4},"circ"} } fantom={ {x=rnd(lBx,lHx),y=rnd(lBy,lHy),z=rnd(50,zM),ph=0,a=0,v=vs.v,scl=1,c=cells["fantom"],expld=false,t=1,lkd=false,score=1000} } mslt={{s=8,v=10,c=12,cs=4,ce=0,g=true}, -- muessli type {s=5,v=10,c=12,cs=8,ce=13,g=true}, {s=3,v=10,c=12,cs=11,ce=15,g=false}} msls={} -- muessli msls.rc=4 buls={} Lm=300 LM=1000 Ld=1500 -- technical stuff u=1 v=2 PMAP=0x3FF0 DMOD=2*0x03FFC function lg(x,y)return sqr(x*x+y*y)end function nlz(x,y)local l=lg(x,y) if l==0 then return 0,0 else return x/l,y/l end end function rot(cx,cy,x,y,phi) local c,n=cos(phi),sin(phi) return cx+(x-cx)*c-(y-cy)*n, cy+(x-cx)*n+(y-cy)*c end function rotz(x,y,phi) local c,n=cos(phi),sin(phi) return x*c-y*n, x*n+y*c end function rotscr(cx,cy,x,y,phi) local c,n=cos(phi),sin(phi) return (-lBx+cx)*sRx+(x-cx)*c-(y-cy)*n, (-lBy+cy)*sRy+(x-cx)*n+(y-cy)*c end function proj32bg(x,y) -- x,y=rot(xm-x0,ym-y0,x,y,0-sr) -- x,y=rot(0,0,x,y,0-sr) x,y=rotz(x,y,-sr) -- x,y=rot(xm,ym,xm-x,ym-y,0-sr) -- x,y=rot(0,0,x-y0,y-y0,0-sr*2) -- x,y=rot(0,0,x-y0,y-y0,0-sr*2) -- return vs.x/2+16+(lMx-x)-xm,vs.y+(lMy-y) -- return x0+x,y0+y return x0+x,y0+y end function proj32rot(x,y,z) local dstf=dst/(z+dst) xr=cx+(x-cx)*dstf yr=cy+(y-cy)*dstf return rotscr(cx,cy,xr,yr,0-sr) end function proj32rots(x,y,z,s) local dstf=dst/(z+dst) local xr,yr,s=cx+(x-cx)*dstf,cy+(y-cy)*dstf,s*dstf local x,y=rotscr(cx,cy,xr,yr,0-sr) return x,y,s end function prjr32rs(x,y,z,s) z=z-vs.z local dstf=dst/(z+dst) local xr,yr,s=cx+(x-cx)*dstf,cy+(y-cy)*dstf,s*dstf local x,y=rotscr(cx,cy,xr,yr,0-sr) return x,y,s end function prjr32rsa(x,y,z,s,a) z=z-vs.z local dstf=dst/(z+dst) local xr,yr,s=cx+(x-cx)*dstf,cy+(y-cy)*dstf,s*dstf local x,y=rotscr(cx,cy,xr,yr,a-sr) return x,y,s,a-sr end function prjr32rs2a(x,y,z,sx,sy,a) z=z-vs.z local dstf=dst/(z+dst) local xr,yr,sx,sy=cx+(x-cx)*dstf,cy+(y-cy)*dstf,sx*dstf,sy*dstf local x,y=rotscr(cx,cy,xr,yr,a-sr) return x,y,sx,sy,a-sr end function grid_rect(x,y,w,h,c) if g.txt then local k=0 for j=0,h do for i=0,w do if k%2==1 then pix(x+i,y+j,c)end k=k+1 end end elseif g.ff then rect(x,y,w,h,c) elseif g.wf then rectb(x,y,w,h,c)end end function drw_qd(xd1,yd1,xd2,yd2,xd3,yd3,xd4,yd4,cx,cy,us,vs,clr,mode) if xd1<0 and xd2<0 and xd3<0 and xd4<0 then return end if yd1<0 and yd2<0 and yd3<0 and yd4<0 then return end if xd1>240 and xd2>240 and xd3>240 and xd4>240 then return end if yd1>136 and yd2>136 and yd3>136 and yd4>136 then return end if mode==4 then poke4(DMOD, mode) poke4(PMAP*2+1,clr[1])poke4(PMAP*2+2,clr[2])poke4(PMAP*2+3,clr[3])else poke4(DMOD,2)end if g.txt then textri(xd1,yd1,xd2,yd2,xd3,yd3, cx,cy,cx+us,cy,cx,cy+vs,false,0) textri(xd2,yd2,xd3,yd3,xd4,yd4,cx+us,cy,cx,cy+vs,cx+us,cy+vs,false,0) elseif g.ff then tri(xd1,yd1,xd2,yd2,xd3,yd3,clr[1]) tri(xd2,yd2,xd3,yd3,xd4,yd4,clr[1]) elseif g.wf then line(xd1,yd1,xd2,yd2,clr[1])line(xd2,yd2,xd4,yd4,clr[1]) line(xd1,yd1,xd3,yd3,clr[1])line(xd3,yd3,xd4,yd4,clr[1]) end if showdot then line(xd2,yd2,xd3,yd3,5)line(xd1,yd1,xd3,yd3,5) line(xd2,yd2,xd4,yd4,5)end if mode==4 then poke4(PMAP*2+1,1)poke4(PMAP*2+2,2)poke4(PMAP*2+3,3) poke4(DMOD,1)end end function trib(x1,y1,x2,y2,x3,y3,c) line(x1,y1,x2,y2,c)line(x2,y2,x3,y3,c)line(x3,y3,x1,y1,c) end function upd_col(c,m) local f={} for i=1,m-1 do if c[i]<250 then f[i]=c[i] elseif c[i]==255 then f[i]=rnd(c[4],c[5])end end return {f[1],f[2],f[3]} end --function drw_spr(x,y,sx,sy,a,c,cx,cy,cl,f) function drw_spr(x,y,sx,sy,a,c) local cl=upd_col(c[6],c[5]) local cs,sn=cos(a),sin(a) local ex,ey,nx,ny=sx*cs*.5,-sx*sn*.5,sy*sn*.5,sy*cs*.5 if g.txt or c[7]=="rec" then drw_qd(x-ex-nx,y-ey-ny,x+ex-nx,y+ey-ny,x-ex+nx,y-ey+ny,x+ex+nx,y+ey+ny,c[1]+1,c[2]+1,c[3]-2,c[4]-2,upd_col(c[6],c[5]),c[5]) elseif c[7]=="tru" then if g.ff then tri(x-nx,y-ny,x-ex+nx,y-ey+ny,x+ex+nx,y+ey+ny,cl[1])elseif g.wf then trib(x-nx,y-ny,x-ex+nx,y-ey+ny,x+ex+nx,y+ey+ny,cl[1])end elseif c[7]=="trd" then if g.ff then tri(x-ex-nx,y-ey-ny,x+ex-nx,y+ey-ny,x+nx,y+ny,cl[1])elseif g.wf then trib(x-ex-nx,y-ey-ny,x+ex-nx,y+ey-ny,x+nx,y+ny,cl[1],cl[1])end elseif c[7]=="cir" then if g.ff then circ(x,y,lg(sx,sy)*.5,cl[1])elseif g.wf then circb(x,y,lg(sx,sy)*.5,cl[1])end end end -- t=1=>circle -- t=2=>circleb -- t=3=>sprite -- t=5=>shape function findz(z) for i=1,#zbuf do if zbuf[i].z > z then return i end end return #zbuf+1 end function dfindz(z) local l=1 local M=#zbuf local m=0 while l <= M do m = math.floor((l+M)/2) if zbuf[m].z < z then l=m+1 else M=m-1 end end return M+1 end function zadd_circ(x,y,r,c,z) i=dfindz(z)table.insert(zbuf,i,{t=1,x=x,y=y,r=r,c=c,z=z}) end function zadd_circb(x,y,r,c,z) i=dfindz(z)table.insert(zbuf,i,{t=2,x=x,y=y,r=r,c=c,z=z}) end function zadd_spr(x,y,sx,sy,a,c,z) i=dfindz(z)table.insert(zbuf,i,{t=3,x=x,y=y,sx=sx,sy=sy,a=a,c=c,z=z}) end function drw_zbuf() -- trace("drw:".. #zbuf) for i=#zbuf,1,-1 do local z=zbuf[i] if z.t==3 then drw_spr(z.x,z.y,z.sx,z.sy,z.a,z.c) elseif z.t==1 then if g.wf then circb(z.x,z.y,z.r,z.c)else circ(z.x,z.y,z.r,z.c)end elseif z.t==2 then circb(z.x,z.y,z.r,z.c)end table.remove(zbuf,i) end end function radar() local u=Ry/(lHy-lBy) grid_rect(xM-Rx,0,xM,Ry,10) line(xM-Rx,Ry-1-flr(u*(vs.y-lBy)),xM-(Rx-3*cos(vs.a)), Ry-1-flr(u*(vs.y-lBy)+3*sin(vs.a)), 12) local o=msls for i=1,#o do pix(xM-Rx+(o[i].z-vs.z)*Rx/zM,Ry-1-flr(u*(o[i].y-lBy)),o.rc)end o=oths for i=1,#o do pix(xM-Rx+(o[i].z-vs.z)*Rx/zM,Ry-1-flr(u*(o[i].y-lBy)),o.rc)end end strs={} function ini_strs() for i=#strs,1,-1 do table.remove(strs,i) end for i=1,300 do strs[i]={x=rnd(-400,400),y=rnd(-250,250),c=rnd(8,12)} end end function drw_strs() for i=1,#strs do local tx,ty=proj32bg(strs[i].x,strs[i].y) --tx,ty=rotscr(lMx,lMy,strs[i].x,strs[i].y,sr) pix(tx,yM-ty,strs[i].c) end end pls1={{-80,20,10,3,nil},{50,50,20,4,nil},{0,0,20,13,0}} pls={} function ini_plts() for i=#pls,1,-1 do table.remove(pls,i)end for i=1,#pls1 do local p=pls1[i] pls[i]={p[1],p[2],p[3],p[4]}end end function upd_plts() if g.lvl==1 then pls[#pls][3]=pls[#pls][3]+0.022 pls[#pls-1][3]=pls[#pls-1][3]+0.010 end end function drw_ann(tx,ty,r,rear) local rax,ray=r*1.5,r*0.75 local cp,sp=cos(.46-sr),sin(.46-sr) -- local cntr=0 if g.qty>5 then for i=0,pi2,0.025 do local cs,sn=cos(i),sin(i) for j=1,r*.5,3*.5 do local x,y=(rax+j)*cs,(ray+j)*sn local x2,y2=x*cp-y*sp,x*sp+y*cp -- cntr=cntr+1 if i>pi and ir then pix(tx+x2+rnd(1,3)*.75,yM-(ty+y2)+rnd(1,3)*.75,4-2*sin(j*rp+rnd(1,2))*rp)end end end -- for i=0,pi2,0.025 do -- local cs,sn=cos(i),sin(i) -- for j=1,r*.5,3*.5 do -- local x,y=(rax+j)*cs,(ray+j)*sn -- local x2,y2=x*cp-y*sp,x*sp+y*cp -- local x2,y2=x*cp-y*sp,x*sp+y*cp -- local cp,sp.cos(.46-sr),sin(.46-sr) -- for j=1,r*.5,3*.5 -- for i=0,pi2,0.025 do -- local cs,sn=cos(i),sin(i) -- do x2,y2=rotz((rax+j)*cs,(ray+j)*sn,.46-sr) -- cntr=cntr+1 -- if i>pi and ir then -- pix(tx+x2+rnd(1,3)*.75,yM-(ty+y2)+rnd(1,3)*.75,4-2*sin(j*rp+rnd(1,2))*rp)end else local t={{{}},{{}}} local ot,nt=t[1],t[2] local k=1 local x,y local st,nd=pi,pi2 if rear then st,nd=0,pi end local cs,sn=cos(st),sin(st) for j=1,r*.6,r*.5 do x,y=(rax+j)*cs,(ray+j)*sn ot[k]={flr(tx+x*cp-y*sp),flr(yM-(ty+x*sp+y*cp))} k=k+1 end for i=st,nd+0.5,pi/16 do cs,sn=cos(i),sin(i) k=1 for j=1,r*.6,r*.5 do x,y=(rax+j)*cs,(ray+j)*sn nt[k]={flr(tx+x*cp-y*sp),flr(yM-(ty+x*sp+y*cp))} k=k+1 end -- for l=1,r*.5,0.1 do -- x= -- line(nt[2][1],nt[2][2], ot[2][1],ot[2][2]) if g.txt or g.ff then --4col drw_qd(nt[2][1],nt[2][2], ot[2][1],ot[2][2], nt[1][1],nt[1][2], ot[1][1],ot[1][2],1,128-15,6,14,cells["satrn"][6],4) --16col drw_qd(nt[2][1],nt[2][2], ot[2][1],ot[2][2], nt[1][1],nt[1][2], ot[1][1],ot[1][2],9,128-15,6,14,cells["satrn"][6],1) elseif g.wf then line(nt[2][1],nt[2][2], ot[2][1],ot[2][2],cells["satrn"][6][1]) line(nt[1][1],nt[1][2], ot[1][1],ot[1][2],cells["satrn"][6][1]) end ot[1]={nt[1][1],nt[1][2]} ot[2]={nt[2][1],nt[2][2]} end end end function drw_pln() for i=1,#pls do local tx,ty=proj32bg(pls[i][1],pls[i][2]) if pls[i][4]==4 then r,rp=pls[i][3],5/pls[i][3] drw_ann(tx,ty,r,true) if g.txt and gamode==0 or gamode==1 and vs.z<25000 then -- planet (not rings) disappear behind target planet xr,yr=.75*r*cos(.46+p12-sr),.75*r*sin(.46+p12-sr) for j=-r,r do local y=yM-(j+ty) if y>136 or y<0 then j=j+1 else for k=-r,r do local x=tx+k if tx+k<0 then k=-tx elseif x>240 then k=r+1 else if lg(k,j)<=r then pix(x,y,4-2*sin((lg(xr-k,yr-j)+rnd(1,5))*rp+5)-1)end end end end end elseif g.ff then circ(tx,yM-ty,pls[i][3],pls[i][4]) elseif g.wf then circb(tx,yM-ty,pls[i][3],pls[i][4])end drw_ann(tx,ty,r,false) -- elseif pls[i][4]==4 then r=pls[i][3] elseif g.ff then circ(tx,yM-ty,pls[i][3],pls[i][4]) elseif g.wf then circb(tx,yM-ty,pls[i][3],pls[i][4]) end end local tx,ty=proj32bg(100,50) -- drw_spr(tx,yM-ty,cells["satrn"][3],cells["satrn"][4],-sr,cells["satrn"]) end function drw_glx() local a=0-t/200 for i=1,200,0.5 do tx,ty=proj32bg(50+i/(i%2)*cos(a),50+i/(i%2)*sin(a)) if g.txt then circ(tx,yM-ty,2,2) circ(tx,yM-ty,1,3) elseif g.ff then circ(tx,yM-ty,2,2) elseif g.wf then circb(tx,yM-ty,2,2) end a=a+0.03 end end function ini_etfil() oths[1]={x=0,y=0,xv=rnd(1,2),yv=rnd(1,2),ox=0,oy=0,s=rnd(1,3),c=rnd(2,6)} end function upd_etfil() for i=1,#oths do o=oths[i] o.x,o.y=o.x+o.xv,o.y+o.yv o.ox,o.oy=o.x-o.xv*50,o.y-o.yv*50 end if o.x>300 or o.y>300 then ini_etfil() end end function drw_etfil() for i=1,#oths do o=oths[i] local tx,ty=proj32bg(o.x,o.y) local tx2,ty2=proj32bg(o.ox,o.oy) if g.txt then local l=lg(tx2-tx,ty2-ty) local dx,dy,dr=0,0,0 if l~=0 then dx,dy,dr=(tx2-tx)/l,(ty2-ty)/l,(o.s*2-o.s)/l end for i=0,l do pix(tx+i*dx+rnd(0,2)*(o.s/2+dr*i),yM-(ty+i*dy+rnd(0,2)*(o.s/2+dr*i)),o.c) end circ(tx,yM-ty,o.s,o.c) elseif g.ff then circ(tx,yM-ty,o.s,o.c)line(tx,yM-ty,tx2,yM-ty2,o.c) elseif g.wf then circb(tx,yM-ty,o.s,o.c)line(tx,yM-ty,tx2,yM-ty2,o.c) end end end function drw_bg() if intrpl then drw_strs()drw_pln() end if drawlim then for iz=zM,0,-inter do fz=iz-(vs.z%inter) local tx,ty=proj32rot(lims[1].x,lims[1].y,fz) for i=1,4 do local j=i+1 if j==5 then j=1 end local tx2,ty2=proj32rot(lims[j].x,lims[j].y,fz) line(tx,yM-ty,tx2,yM-ty2,7) tx=tx2 ty=ty2 end end for i=1,#objs do local tx,ty,r=proj32rots(objs[i].x,objs[i].y,fz,10) -- circ(tx,yM-ty,r,objs[i].c) end end end function ini_xplz(o) local xp=#xplz+1 if g.snd then sfx(1,rnd(2,10),30,2,15-(o.z-vs.z)/50)end xplz[xp]={x=o.x,y=o.y,z=o.z,v=o.v,scl=o.scl,sx=o.sx,sy=o.sy,a=o.a,ph=o.ph,pt={},sf=flr(lg(o.sx,o.sy)*o.scl/2)} local p=xplz[xp] local mx,my=flr(abs(p.sx*p.scl*0.5)),flr(abs(p.sy*p.scl*0.5)) for i=1,rnd(2,3+p.sf) do --flr(7*p.scl)) do p.pt[i]={x=rnd(-mx,mx),y=rnd(-my,my),r=rnd(5,p.sf),c=rnd(4,5)<<2,lt=rnd(20,60*p.sf),l=0} end end function upd_xplz() local p,q for i=#xplz,1,-1 do local p=xplz[i] if #p.pt==0 then table.remove(xplz,i) else p.z=p.z+p.v p.v=p.v*0.5 for j=#p.pt,1,-1 do local q=p.pt[j] local d=dst/(p.z+dst) if q.r<1 then table.remove(p.pt,j) else q.l=q.l+1 ec=0.4*(q.l)/q.lt q.x,q.y=q.x+q.x*ec,q.y+q.y*ec q.r=q.r+1-q.l*0.2 if q.c>0 then q.c=q.c-20/q.r else q.c=0 end end -- -0.6 end end end end function drw_xplz() for i=#xplz,1,-1 do local p=xplz[i] if p.z-vs.z>zm then local x,y=proj32rot(p.x,p.y,p.z-vs.z) local d=dst/((p.z-vs.z)+dst) for j=#p.pt,1,-1 do local q=p.pt[j] zadd_circ(x+(q.x+q.l)*d,yM-(y+(q.y+q.l)*d),q.r*d,flr(q.c*0.25),p.z) end end end end function ini_oths() for i=#oths,1,-1 do table.remove(oths,i) end end function collide(a,b,dist) if dist>abs(a.z-b.z)and dist>abs(a.x-b.x)and dist>abs(a.y-b.y)then return true else return false end end function add_mche() for i=1,4 do oths[#oths+1]={x=lBx+i*200,y=lMy+(lHy-lMy)/2,z=vs.z+zM,ph=0,a=0,v=vs.v-3,ph=0,a=0,scl=3,sx=cells["mouche"][3],sy=cells["mouche"][4],c=cells["mouche"],expld=false,t=4,lkd=false,atk=0,score=1500} end end function upd_mche(i) local o=oths[i] o.z=o.z+o.v if t%120==0 and o.atk==0 then o.x,o.y=o.x+2*rnd(-20,20),o.y+2*rnd(-20,20) else o.x,o.y=o.x+rnd(-2,2),o.y+rnd(-2,2)end if o.x>lHx then o.x=lHx elseif o.xlHy then o.y=lHy elseif o.y250 and o.atk==0 then o.v=vs.v-3 o.prox=false end local ta=90 if d<=220 and t%(150*i)==0 then o.atk=1 o.dx,o.dy,o.dz=(vs.x-o.x)/ta,(vs.y-o.y)/ta,(vs.z-o.z)/ta elseif o.atk>0 then o.atk=o.atk+1 o.x,o.y,o.z=o.x+o.dx,o.y+o.dy,o.z+o.dz if o.atk==ta then o.dx,o.dy,o.dz=-o.dx,-o.dy,-o.dz elseif o.atk>=ta+ta then o.atk=0 end end end function upd_oths() for i=#oths,1,-1 do local o=oths[i] if o.expld then ini_xplz(o) if o.t==3 then if g.snd then sfx(1,"f-2",-1,1,0)end end table.remove(oths,i) else if o.z-vs.z<=zM and o.z-vs.z>=zm then if o.t~=3 and collide(o,vs,o.sx*o.scl) then plyr_impact(o) if o.t~=5 then ini_xplz(o)end table.remove(oths,i) elseif o.t==1 or o.t==5 then o.z=o.z+o.v elseif o.t==2 then o.z=o.z o.a=o.a+0.01 elseif o.t==3 then o.z=o.z+o.v if g.snd and t%50 then sfx(1,"f-2",-1,1,15-(abs(o.z-vs.z)/((zM-zm)/15)))end elseif o.t==4 then upd_mche(i)end elseif o.t==2 and o.z-vs.z1500 then i=#oths+1 oths[i]={x=lMx,y=lHy*.75,z=vs.z,ph=0,a=0,v=6,scl=8,sx=cells["grov"][3],sy=cells["grov"][4],c=cells["grov"],expld=false,t=3,lkd=false,score=5000}grovaisso=i if g.snd then sfx(1,"C#1",-1,1,15)end end -- mouche if t%5000==1000 then add_mche() end -- if t%5000==2500 then if t%5000==500 then oths[#oths+1]={x=lMx,y=lMy,z=vs.z+(zM-zm)/2,v=vs.v*0.90,ph=0,a=0,scl=6,sx=cells["shldup"][3],sy=cells["shldup"][4],c=cells["shldup"],t=5,score=0} end end function add_lock(o,x,y) if o.lkd then lkbuf[#lkbuf+1]={x,y,CoLckd} else local d=o.z-vs.z if dLm then lkbuf[#lkbuf+1]={x,y,CoLckb} elseif dLM or d<=Lm then lkbuf[#lkbuf+1]={x,y,CoUlckb}end end end function drw_locks() for i=#lkbuf,1,-1 do local l=lkbuf[i] rectb(l[1]-3,l[2]-3,6,6,l[3]) table.remove(lkbuf,i) end end function drw_oths() for i=1,#oths do o=oths[i] if o.z-vs.z<=zM and o.z-vs.z>=zm then if o.t==3 then -- grov for j=1,7 do local d=o.z-j*35 if d-vs.z>=zm then xt,yt,stx,sty,at=prjr32rs2a(o.x,o.y,d,o.sx*o.scl,o.sy*o.scl,o.ph) if j<7 then zadd_spr(xt,yM-yt,stx,sty,at,cells["grov"],d) else zadd_spr(xt,yM-yt,stx,sty,at,cells["grovl"],d)end if j%2==0 then add_lock(o,xt,yM-yt)end end end elseif o.t==5 then local xt,yt,stx,sty,at=prjr32rs2a(o.x,o.y,o.z,o.sx*o.scl+8*sin(t/5),o.sy*o.scl+8*sin(t/5),0) zadd_spr(xt,yM-yt,stx,sty,0,o.c,o.z) else local xt,yt,stx,sty,at=prjr32rs2a(o.x,o.y,o.z,o.sx*o.scl,o.sy*o.scl,o.ph) zadd_spr(xt,yM-yt,stx,sty,at+o.a,o.c,o.z) add_lock(o,xt,yM-yt) end end -- print(stf("oths[%d]x=%.0f y=%.0f z=%.0f=>xt=%.0f ty=%.0f",i,o.x,o.y,o.z,xt,yM-yt),0,30+i*6,0) end end function lnch_bls() if #buls<50 then buls[#buls+1]={x=vs.x,y=vs.y,z=vs.z,v=vs.v+10,cells["bullet"],lt=120} if g.snd then sfx(3,"C-5",10,2) end end end function upd_bls() for i=#buls,1,-1 do local b=buls[i] if b.lt>0 then b.lt=b.lt-1 b.z=b.z+b.v for i=1,#oths do o=oths[i] if collide(o,b,8)then o.expld=true table.remove(buls,i) score=score+o.score end end else table.remove(buls,i)end end end function drw_bls() for i=1,#buls do local b=buls[i] -- draw muesly x,y,s=proj32rots(b.x,b.y,b.z-vs.z,8) zadd_spr(x,yM-y,s,s,0,cells["bulet"],b.z) end end function lnch_msl(t) for i=1,#lnchr do if lnchr[i].t==t then -- sfx(1,"D#8",60,3,8) if g.snd then sfx(1,rnd(60,80),60,3,8)end local j=#msls+1 msls[j]={tp=t,x=lnchr[i][3],y=lnchr[i][4],z=vs.z,s=mslt[t].s,v=vs.v-1,d={x=0,y=0},mt=25, c=mslt[t].c,ct={mslt[t].cs,mslt[t].ce},tl={},l=nil} if mslt[t].g and #oths>=1 then local k=1 while msls[j].l==nil and k<=#oths do local o=oths[k] if not o.lkd and o.t~=5 and o.z-vs.zLm then msls[j].l=o o.lkd=true else k=k+1 end end end end end end function upd_msls() for i=#msls,1,-1 do local m=msls[i] if m.l~=nil then local dx,dy,dz=m.l.x-m.x,m.l.y-m.y,m.l.z-m.z if collide(m,m.l,32)then m.l.expld=true table.remove(msls,i) score=score+m.l.score else if m.z-vs.z>15 then dx,dy=nlz(dx,dy) m.d.x,m.d.y=dx*10,dy*10 m.x=m.x+m.d.x m.y=m.y+m.d.y end end end if m.v.25 then zadd_circ(x,yM-y,s,m.c,m.z)end for j=1,#m.tl do local x,y,s=proj32rots(m.tl[j].x,m.tl[j].y,m.tl[j].z-vs.z,m.tl[j].s) if s>.25 then zadd_circ(x,yM-y,s,m.tl[j].c,m.tl[j].z)end end end end function upd_lnchr() for i=1,#lnchr do xt,yt=rot(vs.x,vs.y,vs.x+lnchr[i][1],vs.y+lnchr[i][2],vs.ph*2) lnchr[i][3],lnchr[i][4]=xt,yt end end function drw_lnchr() for i=1,#lnchr do local l=lnchr[i] x,y,s=prjr32rsa(vs.x+l[1],vs.y+l[2],vs.z,4,vs.ph*2) circ(x,yM-y,4,4) end end function drw_vsl() local x,y,z,ph,sa=vs.x,vs.y,0,vs.ph*2,sin(vs.a) x0,y0=proj32rot(x,y,0) local xa,ya=rot(x,y,x,y+10*sa,ph) local xh,yh=proj32rot(xa,ya,0) xa,ya=rot(x,y,x-16,y+5*sa,ph) local xag,yag=proj32rot(xa,ya,0) xa,ya=rot(x,y,x+16,y+5*sa,ph) local xad,yad=proj32rot(xa,ya,0) xa,ya=rot(x,y,x-30,y+5*sa,ph) local xlg,ylg=proj32rot(xa,ya,0) xa,ya=rot(x,y,x+30,y+5*sa,ph) local xld,yld=proj32rot(xa,ya,0) --cockpit zadd_spr(xlg+sin(vs.a*2)*cos(vs.ph+p12),yM-(ylg+sin(vs.a*2)*cos(vs.ph)),cells["lnchu"][3],cells["lnchu"][4]*sin(vs.a*2),vs.ph,cells["lnchu"],vs.z+0.2) zadd_spr(xld+sin(vs.a*2)*cos(vs.ph+p12),yM-(yld+sin(vs.a*2)*cos(vs.ph)),-cells["lnchu"][3],cells["lnchu"][4]*sin(vs.a*2),vs.ph,cells["lnchu"],vs.z+0.2) zadd_spr(xag+sin(vs.a*2)*cos(vs.ph+p12),yM-(yag+sin(vs.a*2)*cos(vs.ph)),cells["aile"][3],cells["aile"][4]*sin(vs.a*2),vs.ph,cells["aile"],vs.z+0.2) zadd_spr(xad+sin(vs.a*2)*cos(vs.ph+p12),yM-(yad+sin(vs.a*2)*cos(vs.ph)),-cells["aile"][3],cells["aile"][4]*sin(vs.a*2),vs.ph,cells["aile"],vs.z+0.2) if vs.a>p18 then if vs.a*2+pi>pi-p14 then va=sin(p14)else va=sin(vs.a*2)end local z1=3*va zadd_spr(xh+z1*cos(vs.ph+p12),yM-(yh+z1*cos(vs.ph)),cells["ckpup"][3],cells["ckpup"][4]*va,vs.ph,cells["ckpup"],vs.z+0.2) elseif vs.api-p14 then vs.a=vs.a-(pi/150)else vs.a=-p14 end vs.vy=-1 elseif btn(btnb) then -- fleche bas if vs.a+pip14 then vs.ph=vs.ph-0.03 vs.vx=1 end else vs.ph=vs.ph*.95 vs.vx=0 end -- vitesse if btn(4) then if vs.v>sm then vs.v=vs.v-0.2 else vs.v=sm end elseif btn(5) then if vs.vsD then vs.v=vs.v-0.05 elseif vs.v45 then lnch_msl(2)vs.ll=t end if keyp(16)or keyp(48)or keyp(49)then pause=true end end function plyr_impact(o) if o.t==5 then vs.shd=100 if g.snd then music()sfx(6,"a-3",60)end return end if vs.shd<=0 then if g.snd then music()end vs.dead=true if score>highscore then highscore=score newhighscore=true end return end -- already without shield vs.shd=vs.shd-o.sx if vs.shd<=0 then if g.snd then music(0)end end end gonetimer=0 function game_over() gonetimer=gonetimer+1 if gonetimer==300 then ini_menu() gamode=0 gonetimer=0 end end function ovr_game_over() local lg=gonetimer*4 if lg>240 then lg=240 end if vs.z>49000 then local col=15 else local col=8 end for i=0,1 do rect(0,68*i,lg,34,col)end for i=0,1 do rect(240-lg,34+68*i,lg,34,col)end if lg>=240 then if vs.z>49000 then print("GOAL REACHED",12,52,0,true,3) print("GOAL REACHED",10,50,2,true,3) else print("GAME OVER",42,52,0,true,3) print("GAME OVER",40,50,2,true,3) end if newhighscore then print("NEW HIGH SCORE",42,82,0,true,2) print("NEW HIGH SCORE",40,80,5,true,2) print(score,102,102,0,true,2) print(score,100,100,5,true,2) else print("SCORE "..score,72,82,0,true,2) print("SCORE "..score,70,80,11,true,2) end end end function upd_plyr() vs.z=vs.z+vs.v -- *cos(vs.a) -- local y1=10*sin(vs.a) if g.simu then local y1=5*sin(vs.a) vs.x=vs.x+((y1+2))*cos(vs.ph+p12) vs.y=vs.y+y1*cos(vs.ph) else vs.x,vs.y=vs.x+vs.vx*2,vs.y+vs.vy*2 end if vs.x>lHx then vs.x=lHx-(vs.x-lHx) vs.ph=0 -- faire plut elseif vs.xlHy then vs.y=lHy-(vs.y-lHy) vs.a=0 elseif vs.y",2}, {"p: pause",false,3},{"shield up",555,5},{" Locker:",false,3}, {"Unlockable:",CoUlckb,4},{"Lockable",CoLckb,4},{"Locked",CoLckd,4} }--,{ -- } } function OVR() if gamode==0 then ovr_menu() elseif gamode==1 then ovr_gameloop() if pause and display_pause then ovr_menu() elseif vs.dead then ovr_game_over()end end end