0 D$404mNJN…L04e$ĞFHuqaY}ÎÒ},…•¡mª,Òª™mÂÊÚÔ^ŞîÖ 0ÿÿÿÿÿÿÿÿ2Tv˜ºÜşïÍ«‰gE#2Tv˜ºÜş2Tv˜ºÜş [[»µ»»»»»»µ»µ»»µ»µ»»»»[»µ[»»»»»[ss37333333737337373333s37s33333sîîéîîîîîéîéîîîîéîîîîééîéîîéîI™™I™™I™”I™™”I™™™™III™™™DDDAAAADADAADDDADAAAAADDADAADAAA‚ˆ‚ˆˆˆˆˆˆ‚ˆ‚ˆˆˆˆ‚ˆ‚ˆˆˆˆˆˆ‚ˆ‚ˆˆˆˆ[[»µ»»»»´»D±DDDDDADDDADDDDADUUUµ[µUUUUµUU[UU[UU[UU[U[UUUUµU[ÿÿÿÿÿğğğÿğğğÿÿÿÿÿÿÿÿÿÿÿªªz¯ªªz¯ªªz¯ªªz¯ªªz¯ªªwwwwwDDDDADDAAAAADDAADDDDİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİADDDDDDDDADDDDDADDDADDDDAD00000ÿÿÿÿÿîîïîîïîîïîîïîîïîî™™™™™ÿÿÿÿÿˆˆ(ˆˆ(ˆˆ(ˆˆ(ˆˆ(ˆˆ"""""ffffaffffffffffaffffffffD™™™™I”™™™™D™D™™™™™DI”™™™™D™D™™™™îîîîéîîîî™î™îîîîî™éîîîî™î™îîîU»»»»[µ»»»»U»U»»»»»U[µ»»»»U»U»»»UUUUPUUUUUUUUUUPUUUUUUUU"""" """""""""" """""""""ˆˆˆˆ(‚ˆˆˆˆ"ˆ"ˆˆˆˆˆ"(‚ˆˆˆˆ"ˆ"ˆˆˆfÌÌÌÌlÆÌÌÌÌfÌfÌÌÌÌÌflÆÌÌÌÌfÌfÌÌÌDDDD@DDDDDDDDDD@DDDDDDDD3333033333333330333333333wwww7swwww3w3wwwww37swwww3w3wwwªÿÿÿÿ¯úÿÿÿÿªÿªÿÿÿÿÿª¯úÿÿÿÿªÿªÿÿÿADD´DKDK´A´KDD´DAKT´ADKDDADwwww7333733373337333733373337333wİİİ£İİİ£İİİ£İİİ£İİİ£İİİ£İİİ£İİݪªªªÚİİİÚİİİÚİİİÚİİİÚİİİÚİİİÚİİݪİİİ}İİİ}İİİ}İİİ}İİİ}İİİ}İİİ}İİİ}}İİww×İww×İswÓİ=7İİİÓİİİİİİİİİİ}mİİwfÖİwfÖİsfÑİ=İİİÑİİİİİİİİİİmmİİffÖİffÖİafÑİİİİÑİİİİİİİİİİİİİİİİİİİİİDİİ@DİİDDİİØİİØİİİİİİİİİİİİİİİİİDİİİİİİİİİİİİİİDİİİİİİİİ@DİİDDİİôHİİDİİD@İİDİİİİDİİDDİİ„Oİİ@DİİDİİDİİİİİİİİİİİİDİİDDİİDDİİDDİİİİİİİİİİİİDİİDDİİİİİİİİİİİİİİİİDİİDDİİİİİİİİ@DİİDDİİDDİİDDİİ7333ªªªªİİİİİİİİİİİİİİİİİİİİİİİİ£İİݪİİİİİİİİİİİİİİİİİİİİİİİİİİİÚİİİwwwwİİİİİİİİİİİİİİİİİİİİİİİİ}İİİwİİİİİİİİİİİİİİİİİİİİİİİİİİİİØİİØİİÑİİÑİİÑİİÑİİ=Óİİ=Ó݈ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆİİ݈İİ݈İİ݈İİ݈İİ݈İİ݈İİ݈İİ݈ˆİİ݈İİ݈İİ݈İİ݈İİ݈İİ݈İİ݈İİİİİ݈İİ݈İİ݈İİ݈İİ݈İİ݈İİ݈İİ݈ˆİİ݈İİ݈İİ݈İİ݈İİ݈İİ݈İİ݈İİİDDˆˆDDˆˆDDˆˆDDˆˆİİİİİİİ݈ˆDDˆˆDDˆˆDDˆˆDDİİİİİİİİDDˆˆDDˆˆDDˆˆDDˆˆİİİİİİİ݈ˆDDˆˆDDˆˆDDˆˆDDİİİİİİİİİİ݈İİ݈İİ݈İİ݈İİİİİİİİİİİ݈İİ݈İİ݈İİ݈İİİİİİİİİİİİİİİİİ݈İİ݈İİ݈İİ݈İİİİİİİİİİİ݈İİ݈İİ݈İİ݈İİİİİİİİİİİİİİİİİİİİİİİİİ33İİ33İİ33İİ33İİİİİİİİ33İİ33İİ33İİ33İİİİİİİİİİİİ33İİ33İİ33İİ33İİİİİİİİ33İİ33İİ33İİ33İİİİİİİİİİİİİİİİİ3İİİ3İİİ3İİİ3İİİİİİİİİİİİ3İİİ3İİİ3İİİ3İİİİİİİİİİİİİİİİİİ3İİİ3İİİ3İİİ3İİİİİİİİİİİİ3İİİ3İİİ3İİİ3İİİ |;9 99<?????????????????????????,++,.///////////////////////// ----,,+)'//////////////..--,+/ """"""""##$%&(),//////////////321111248>????????????????????  65433346>????????????????????? :8=???????????????????????????            ;2>???????????????????????????t@Cb b cc c cc A Aaaaa a a cccC c c ccc C C c c c c cc ƒ ƒƒc " " " "" ##"" "" " "" """ "" " "" "" " " ƒ ƒƒc c c c c ccc c c c c cccC CCC # ƒ ƒ ƒƒƒ ƒƒƒ ƒ ƒƒƒƒƒƒ `` ` ``.ƒƒFÅÅ`EC †ACP†@ ÁPEÃÀ?DDDDDD4333333³»»»»»»»»»»»»»333333CDDDDDDDDDDD´»»»»»»İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİDDDDDDÿ3ó?333³»»»»ûÿ»»»û¿»»33ÿóÿ?CDDDDDDDDDDD´»»»»»»İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİñOODÿÿñÿÿ33÷ÿ?C´ÿ»OÿñO»»ÿO±3ÿÿs7ÿCÿÿDDDDDDDDDD´»»D±İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİñÿÿôÿDÿ3ó?ÿ?3C´ÿ»Oÿ¿O»ûOOôÿó3ÿsÿ?óDÿDDDDDDDDDD´»»D±İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİôôñôÿDDÿ7ó?ÿ?wCñÿDÿDOÿôÿÿDD÷3ÿó?wóÿDDDDDADDDDDADDDDİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİôôôÿÿDôÿó?óÿ?CDDñÿDÿDAD3ÿÿóÿÿCÿÿADDDDADDDDADİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİDDDAD43s7333CDDADDDDAD337333CDDADDDDADDDDADİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİADDDDD13333w3ADDDDDDDDD3333w3ADDDDDADDDDDADDDDİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİADDDDD13333w3ADDDDDDDDD3333w3ADDDDDADDDDDADDDDİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİDDADDDt73s733CDDDDDDDDDDDw3s733CDADDDDDADDDDDDDDDİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİDDDDDD4333333GDDDADDDDDDADD333333GDDDDDDDDDDDDDDDADDİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ5s7s337³[µ[»»µADDDDDDDAD»U»µ»[;s7s337³[µ[»»µADDDDİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ;s7s337³[µ[»»µADDDDDDDAD»U»µ»[;s7s337³[µ[»»µADDDDİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ;333333³»»»»»»KDDDDDDDDADDD»»»»»»;333333³»»»»»»KDDDDDİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ;333333³»»»»»»KDDDDDDDDADDD»»»»»»;333333³»»»»»»KDDDDDİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ1333w33C´»»DDKDDDDADDDDDAD»»KD;333w33C´»»DDKDDDDAİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ1333w33C´»»DDKDDDDADDDDDAD»»KD;333w33C´»»DDKDDDDAİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİt73333wCADDDDDADDDDDDDDDDDDDDDt73333wCADDDDDADDDDİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ43s7333CDDADDDDADDDDADDDDAD43s7333CDDADDDDADİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ43s÷?33óODÿÿOôODÿñÿÿôÿÿôÿÿôÿÿñÿÿ4ÿ7ÿ?3ÿOôÿOÿDDDADİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİô?ÿó?w3ÿODDDôOÿOôOÿDÿôODôODÿDDÿñ?óó?ÿóADDÿôÿADDDDİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ4ÿ?33ÿ?óODDDÿDñOôÿôDôôÿOôÿôODôO1ÿ?óÿ÷óÿODÿODÿADDDDİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİtÿ?ó?33óOôOOôOôOñOôôDÿDÿDDÿDÿAôDÿô?óó?óóOôôODDÿDDDDDDİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİô?ÿó?33ÿÿôOôÿDÿÿDÿODÿOôÿOñÿOôODÿO4ÿ?3ÿ?3ÿOôÿÿôÿODDDADDİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ4333333GDDDDDDDDDADDDDDDADDDDDDD4333333GDDDDDDDDDADDİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ´[µû¿û¿ÿODDñÿÿÿOôÿDñÿDÿÿOôÿDÿÿñÿ[ÿÿ¿ÿÿñÿDôÿD´[µ[»»µİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİô[ÿû¿ÿ¿ûOôDDÿDÿDDÿOÿDODôOÿOÿDÿô_µû¿»õÿDOÿO´[µ[»»µİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİô»ÿ»»û¿KÿÿDôÿDÿÿôÿDôÿDAÿDôÿDÿÿDÿ¿¿»ÿ»»ÿKôÿôÿD´»»»»»»İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ´ÿÿû¿û¿KDôôOÿDODôÿDOÿDOñODÿDODñOÿ´¿û¿»¿ûOÿDÿDO´»»»»»»İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİA´ÿûOÿÿKÿOôOôÿDÿÿDôÿAôÿDÿDñÿDÿÿDñÿ´ÿ»DôÿKôÿDôÿD´»»D±İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİAÿ¿»DDKDDDDDDDDDDADDDDDADDDDDD´»»DDKDDDDDD´»»D±İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİDAôODDôñÿÿDDôAôODÿOÿOôÿÿDÿODÿDÿÿOôÿDôÿñÿDôÿDADDDDİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİôÿÿôODÿOôADÿODÿñOôôOñôODôOôñÿDDôOÿAÿôOÿOÿDODDADİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİDôOAÿOôOôÿODôOôAÿÿDÿÿôÿODÿAÿDDÿDÿÿÿOOôÿOñÿODDADİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİÿDôODDñODDÿôOñOôÿÿDñDDôDDÿñOôDÿDñODÿDOÿODDODDADDDDİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİôÿÿôODDÿÿôÿOôOÿÿDDODÿDÿOôÿÿOôÿOÿADôÿDôÿAôÿDôÿADDDDİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİDDADDDDDADDDDDDDDDDDDDDDDADDDDDADDDDDADDDDDDDDDİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİDDÿôôODDDDDDDDDDADDDDDDADDDDDDDDDDDDDDDDDDDDDDDADDİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİÿÿôOÿOADDDD4s7s3373w373s3DDDAADDDDADDDD´[µ[»»µ»U»µ»[»İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİôAÿDDñOADDDD4s7s3373w373s3DDDAADDDDADDDD´[µ[»»µ»U»µ»[»İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİôDÿôOôODDDDDD43333333333333DDDADDDDDDDDDDDDDD´»»»»»»»»»»»»»İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİDÿÿôOÿÿDDDDDD43333333333333DDDADDDDDDDDDDDDDD´»»»»»»»»»»»»»İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİADDDDDDDDDDD4333w33333s733DDDDDDDDDDDDDDDDDD´»»D±D»»KD±İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİñODôODÿDDDDDD4333733333s733DDDDDDDDDDDDDDDDDD´»»D±D»»KD±İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİôÿOôOôÿDADDDDt7333s7w3333s7DDDDDDADDDDDADDDDDADDDDDDDDDDİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİôOôAÿôDDDAD43s733333w3333DDDADDDDADDDDADDDDADDDDADİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİôOôôOÿÿODDAD43s333333w3333DDADDDDADDDDADDDDADDDDADİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİôOôôODôADDDDD1333s733333s73DDDDDADDDDDADDDDDADDDDDDDDDİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİADDDDDADDDDD1333s733333s73DDDDDADDDDDADDDDDADDDDDDDDDİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİDDñOôODÿADDDt73w333w33w333DADDDDDADDDDDADDDDDDDDDDDDDDDİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİôOôôÿOôOÿDDD433333s333333sDDDDDDDDDDDDDDDDDDDDDADDDDDDADDİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİôOôDôOôÿôDDD433333s333333sDDDDDDDDDDDDDDDDDDDDDADDDDDDADDİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİÿOôOñOô÷s3373s7s3373w373s33w373sADDDD´[µ[»»µADDDD»U»µ»[»İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİñDôOÿÿ4ÿ?s3373s7s3373w373s33w373sADDDD´[µ[»»µADDDD»U»µ»[»İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİKDDDDD433333333333333333333333333CDDDDD´»»»»»»KDDDDD» ĞİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİKDDDDD433333333333333333333333333CDDDDD´»»»»»»KDDDDD» ĞİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİADDDDD4333w333333w33333s733333s73CDDDDDD´»»DDKDDDDAD ĞİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİADDDDD4333w333333733333s733333s33CDDDDDD´»»DDKDDDDAD ĞİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİDADDDDt73333ws7333s7w3333s7w3333wCADDDDDADDDDDADDDDD@DDDDDĞİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİDDDAD43s733333s733333w333333w333CDDADDDDADDDDADD@DDDDDĞİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİDDDAD43s733333s333333w3333337333CDDADDDDADDDDADDDDDDDDDÔİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİADDDDD13333w33333s733333s733333w3ADDDDDADDDDDADDDDDôHDˆÿÔİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİADDDDD13333w33333s733333s733333w3ADDDDDADDDDDADDDDDôHDˆOÔİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİDDADDDt73s733s73w333w33w333w3s733CDADDDDDADDDDDDDDDDDDDDDÔİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİDDDDDD4333333733333s333333s333333GDDDDDDDDDDDDDDDADDDDDDDDÔİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİDDDDDD4333333733333s333333s333333GDDDDDDDDDDDDDDDADDDDD@D@DÔİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ4s7s337³[µ[»»µ»[µ[»»µ»U»µ»[»»U»µ»[;s7s337ADDDD´[µ[»»µ»UD@DÔİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ4s7s337³[µ[»»µ»[µ[»»µ»U»µ»[»»U»µ»[;s7s337ADDDD´[µ[»»µ»UD@DÔİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ4333333³»»»»»»»»»»»»»»»»»»»»»»»»»»;333333CDDDDD´»»»»ˆˆˆˆˆˆˆˆˆˆˆˆˆØİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ4333333³»»»»»»»»»»»»»»»»»»»»»»»»»»;333333CDDDDD´»»»»ˆˆˆˆˆˆˆˆˆˆˆˆˆØİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ1333w33C´»»DDK´»»D±D»»KD±D»»KD;333w33CDDDDDD´»»DˆˆˆˆˆˆˆˆˆˆˆˆˆØİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ1333w33C´»»DDK´»»D±D»»KD±D»»KD;333w33CDDDDDD´»»DˆˆˆˆˆˆˆˆˆˆˆˆˆØİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİt73333wCADDDDDADDDDDDDDDDDDDDDt73333wCADDDDDADDˆˆˆˆˆˆˆˆˆˆˆˆˆØİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ43s7333CDDADDDDADDDDADDDDAD43s7333CDDADDDDˆˆˆˆˆˆˆˆˆˆˆˆˆØİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ43s7333CDDADDDDADDDDADDDAD43s7333CDDADDDDˆˆˆˆˆˆˆˆˆˆˆˆˆØİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ43333w3ADDDDDADDDDDDDDDDDDDD13333w3ADDDDDADDDˆˆˆˆˆˆˆˆˆˆˆˆˆØİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ43333w3ADDDDDADDDDDDDDDDDDDD13333w3ADDDDDADDDˆˆˆˆˆˆˆˆˆˆˆˆˆØİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİt73s733CDADDDDDDDDDDDDDDDDADDDt73s733CDADDDDDDDˆˆˆˆˆˆˆˆˆˆˆˆˆØİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ4333333GDDDDDDDDDADDDDDDADDDDDDD4333333GDDDDDDDDDAˆˆˆˆˆˆˆˆˆˆˆˆˆØİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİݵ[µ[»»µADDDDADDDDDDDADDDDA´[µ[»»µ»[µ[»»µADDDˆˆˆˆˆˆˆˆˆˆˆˆˆ¸[Ûİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ»[µ[»»µADDDDADDDDDDDADDDDA´[µ[»»µ»[µ[»»µADDDˆˆˆˆˆˆˆˆˆˆˆˆˆ¸[Ûİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ»»»»»»»KDDDDDDDDDDDDDDADDDDDDADD´»»»»»»»»»»»»»KDDDDDD„ˆˆˆˆˆˆHDD´»Ûİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ»»»»»»»KDDDDDDDDDDDDDDADDDDDDADD´»»»»»»»»»»»»»KDDDDDD„ˆˆˆˆˆˆHDD´»ÛİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİA´»»DDKDDDDDDDDDDADDDDDADDDDDD´»»DDK´»»DDKDDDDDDD„ˆˆˆˆˆˆHDDDÛİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİA´»»DDKDDDDDDDDDDADDDDDADDDDDD´»»DDK´»»DDKDDDDDDD„ˆˆˆˆˆˆHDDDÛİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİDADDDDDADDDDDADDDDDDDDDDDDDDDDADDDDDADDDDDADDDDD„ˆˆˆˆˆˆHDDDDÔİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİDDDADDDDADDDDADDDDADDDDADDDDADDDDADDDDDDD„ˆˆˆˆˆˆHDDDÔİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİDDDADDDDADDDDADDDDADDDADDDDADDDDADDDDDDD„ˆˆˆˆˆˆHDDDÔİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİADDDDDADDDDDADDDDDDDDDDDDDDADDDDDADDDDDADDDDDADDDDÑİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİADDDDDADDDDDADDDDDDDDDDDDDDADDDDDADDDDDADDDDDADDDDÑİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİDDADDôOÿÿODDDDDDDDDDDDDÿDÿÿÿDÿÿOADDDDDADDDDDDDDDDDADDDÔİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİôOOôÿôOÿDDDDDDDDADÿôDOôOÿôÿDDôODôODDDDDDDDDDDDDDADDDDADDDÔİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİôÿÿDÿODDÿÿDDDDDDDADÿÿOOôODDÿDôÿDDÿDDDDDDDDDDDDDDDADDDDADDDÔİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİõûõ[ÿ¿õ¿[õ_»»µ»[µ[»»¿¿_ûÿ¿ÿ»ÿUÿµ»_û_µ[»»µ»[µ[»»µ»[µ[»»µ»UQ»µ»[»[µ[»»µ»[µ[»»µ»[µ[»»µ»U»µ»[»İİİİİİİİİİİİİİİİİİİİİİİİûûõû¿ÿõ¿ÿÿ[»»µ»[µ[»»¿¿_»õ¿ÿûÿ_ÿÿ¿ûÿ[µ[»»µ»[µ[»»µ»[µ[»»µ»UQ»µ»[»[µ[»»µ»[µ[»»µ»[µ[»»µ»U»µ»[»İİİİİİİİİİİİİİİİİİİİİİİİ»»»»»»»»»»»»»»»»»»»»»»»ûÿ»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»±»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»İİİİİİİİİİİİİİİİİİİİİİİİ»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»±»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»İİİİİİİİİİİİİİİİİİİİİİİİA´»»DDK´»»DDK´»»D±D»»KD±D»»KDK´»»DDK´»»DDK´»»D±D±»KDK´»»DDK´»»DDK´»»D±D»»KD±İİİİİİİİİİİİİİİİİİİİİİİİA´»»DDK´»»DDK´»»D±D»»KD±D»»KDK´»»DDK´»»DDK´»»D±D±»KDK´»»DDK´»»DDK´»»D±D»»KD±İİİİİİİİİİİİİİİİİİİİİİİİDADDDDDADDDDDADDDDDDDDDDDDDDDDADDDDDADDDDDADDDDDDDDDDADDDDDADDDDDADDDDDDDDDDİİİİİİİİİİİİİİİİİİİİİİİİDDDADDDDADDDDADDDDADDDDADDDDADDDDADDDDADDADADDDDADDDDADDDDADDDDADİİİİİİİİİİİİİİİİİİİİİİİİDDDADDDDADDDDADDDDADDDADDDDADDDDADDDDADDAADDDDADDDDADDDDADDDDADİİİİİİİİİİİİİİİİİİİİİİİİADDDDDADDDDDADDDDDDDDDDDDDDADDDDDADDDDDADDDDD333333CDDDDADDDDDADDDDDADDDDDDDDDİİİİİİİİİİİİİİİİİİİİİİİİADDDDDADDDDDADDDDDDDDDDDDDDADDDDDADDDDDADDDDD333333CDDDDADDDDDADDDDDADDDDDDDDDİİİİİİİİİİİİİİİİİİİİİİİİDDADDDDDADDDDDDDDDDDDDDDDADDDDDADDDDDADDDDDDDDDDD333333ADDDDDADDDDDADDDDDDDDDDDDDDDİİİİİİİİİİİİİİİİİİİİİİİİDDDDDDDDDDDDDDDDADDDDDDADDDDDDDDDDDDDDDDDDDDDDDADDDD333333CDDDDDDDDDDDDDDDDDDDADDDDDDADDİİİİİİİİİİİİİİİİİİİİİİİİADDDDADDDDADDDDDDDADDDDAADDDDADDDDADDDDD333333CDDAADDDDADDDDADDDDDDDADîîîéîîîîîîéîîîîîéîîîADDDDADDDDADDDDDDDADDDDAADDDDADDDDADDDDD333333CDDAADDDDADDDDADDDDDDDADîîîéîîîîîîéîîîîîéîîîDDDDDDDDDDDDDDDDDDDDDADDDDDDADDDDDDDDDDDDDDDDDDDDDDDADDDDDDADDDDDDDDDDDDDDDDDDDDDDDADDDî™îîîîîéîîîîîéîîîîîéîDDDDDDDDDDDDDDDDDDDDDADDDDDDADDDDDDDDDDDDDDDDDDDDDDDADDDDDDADDDDDDDDDDDDDDDDDDDDDDDADDDî™îîîîîéîîîîîéîîîîîéîADDDDDDDDDDDDDDDDADDDDDADDDDDDDDDDDDDDDDDDDDDDADDDDDADDDDDDDDDDDDDDDDDDDDDDADDDDDAîîîéîîîîî™îîîîîî™îîîîîîADDDDDDDDDDDDDDDDADDDDDADDDDDDDDDDDDDDDDDDDDDDADDDDDADDDDDDDDDDDDDDDDDDDDDDADDDDDAîîîîîîîîî™îîîîîî™îîîîîîDADDDDDADDDDDADDDDDDDDDDDDDDDDADDDDDADDDDDADDDDDDDDDDDDDDDDADDDDDADDDDDADDDDDDDDDD™îîîîîéîîîîîéîîîîîéîîDDDADDDDADDDDADDDDADDDDADDDDADDDDADDDDADDDDADDDDADDDDADDDDADDDDADDDDADîî™î™îéîéî™îéîéî™îéîéDADDDDADDDDADDDDADDDADDDDADDDDADDDDADDDDADDDADDDDADDDDADDDDADDDDADîîéî™îéîéî™îéîéî™îéîîDDDDDADDDDDADDDDDDDDDDDDDDADDDDDADDDDDADDDDDDDDDDDDDDADDDDDADDDDDADDDDDDDDDîîîîîîîîîîîîîîîîîîîîîîîî@DDDDDADDDDDADDDDDDDDDDDDDDADDDDDADDDDDADDDDDDDDDDDDDDADDDDDADDDDDADDDDDDDDDîîîîîîîîîîîîîîîîîîîîîîîîDDDADDDDDADDDDDDDDDDDDDDDDADDDDDADDDDDADDDDDDDDDDDDDDDDADDDDDADDDDDADDDDDDDDDDDDDDD™éîî™ééîî™ééîî™é™îD„HDDDDDDDDDDDDDADDDDDDADDDDDDDDDDDDDDDDDDDDDDDADDDDDDADDDDDDDDDDDDDDDDDDDDDDDADDDDDDADDîîîîîîîîîîîîîîîîîîîîîD„HDDDDDDDDDDDDDADDDDDDADDDDDDDDDDDDDDDDDDDDDDDADDDDDDADDDDDDDDDDDDDDDDDDDDDDDADDDDDDADDîîîîîîîîîîîîîîîîîîîîîHDDDADDDDADDDDDDDADDDDAADDDDADDDDADDDDDDDADDDDAADDDDADDDDADDDDDDDADDDDAADDDDADDDDADDHDDDADDDDADDDDDDDADDDDAADDDDADDDDADDDDDDDADDDDAADDDDADDDDADDDDDDDADDDDAADDDDADDDDADDDADDDDDDDDDDDDDDDDDDADDDDDDADDDDDtwwwwwwwwwwwwwwwwwww§ªªªªzwwwwwwwwwwwwwwwwwwwGDDDDDDDDADDDDDDADDDDDDDDDDDDDDDDDDADDDDDDDDDDDDDDDDDDADDDDDDADDDDDt[[»µzADDzss37zîî骂ˆ‚ˆwI™™IzDDDAzUUUµz00JDDDDDDDDADDDDDDADDDDDDDDDDDDDDDDDAADDDDDDDDDDDDDDADDDDDADDDDDDDDt»»»»zDDDz3333zîîˆˆˆw™™I™zAAADz[µUUzJDDDDADDDDDADDDDDDDDDDDDDDDDDDDDDAADDDDDDDDDDDDDDADDDDDADDDDDDDDt´»D±zDDDAz3373zîîé‚ˆ‚w”I™™zADAAzUUµUzJDDDDADDDDDADDDDDDDDDDDDDDDDDDDDDD4CDDDDDADDDDDADDDDDDDDDDDDDDDDAtDDDzDDDz7337zéîîˆˆˆwzDDDAzU[UUzJADDDDDDDDDDDDDDDDADDDDDADDDDDADD4CADDDDADDDDADDDDADDDDADDDDtDDzDDz3733zî骂ˆ‚ˆw”I™™zDAAAz[UU[zJDDADDDDADDDDADDDDADDDDADDDD[[»µADDDDADDDDADDDDADDDADDDDtADDzADDz33s3zîîîˆˆˆw™™IIzAADDzUU[Uz0JDDADDDDADDDADDDDADDDDADDDD»»»»DDDADDDDDADDDDDDDDDDDDDDADtDADDzDADDz7s33zééî骈‚ˆ‚wI™™™zADAAz[UUUz0ADDDDDDDDDDDDDDADDDDDADDDDDADD´»D±DDDADDDDDADDDDDDDDDDDDDDADtDDADzDDADz333szîîéˆˆˆwzDAAAzUµU[z0ADDDDDDDDDDDDDDADDDDDADDDDDADDDDDDDDDDADDDDDDDDDDDDDDDDADDDDD¡ªªªªªªªªªªªªªªªªªªªzwwww§ªªªªªªªªªªªªªªªªªªªJDDDDDDDDDDDDADDDDDADDDDDADDDDDDDDDDDDDDDDDDDDADDDDDDADDDDDDDDDDDDDDDDDDDDDDDADDDDDDADDDDDDDDDDDDDDDDDDDDDDDADDDDDDADDDDDDDDDDDDDDDDDDDDDDDADDDDDDDDDDDDDDADDDDDDADDDDDDDDDDDDDDDDDDDDDDDADDDDDDADDDDDDDDDDDDDDDDDDDDDDDADDDDDDADDDDDDDDDDDDDDDDDDDDDDDDADD3373s7s3373s7s3373w373s33w373s3s7s3373s7s3373s7s3373w373s33w373s3s7s3373s7s3373s7s3373w373s3DDDAADDDDADDDDADDDDAD3373s7s3373s7s3373w373s33w373s3s7s3373s7s3373s7s3373w373s33w373s3s7s3373s7s3373s7s3373w373s3DDDAADDDDADDDDADD“H-- title: McTic [DEV] -- author: martsadas -- desc: just another minecraft clone -- script: lua music(0) --[[ CHANGELOG -- 0.1a -- First release! -- 0.2a -- some mobile support added seeds to world generation added leaves changed some splashes fixed player teleporting after walking to x>128 added debug screen -- 0.3a -- changed some splashes changed the world to use chunks rewrote world generation changed textures added background removed world border added music added pregenerated world size option added bedrock added trees changed debug screen text color (12 -> 15) added version, hotbar slot, direction and view distance to the debug screen -- 0.3.1a -- fixed 2 things being in the same place in the debug screen removed "nil" splash -- 0.4-d1a added invalid block added inventory (X/B) added wool added iron, gold and diamond blocks fixed block redering order (almost) added mousex and mousey to the debug screen -- 0.4-d2a changed world genarator optimized the world generator added orthographic mode (S/X) ]] ------------------------------------------------------ -- Constants NOISE_LAYERS = {} for i = 1,7 do NOISE_LAYERS[i] = {a = math.random(4, 12)/5, b = math.random(5, 12)/76, c = math.random(4, 12)/5, d = math.random(5, 12)/76} end BLOCK_TEXTURES = { {top = 0 , side = 16 , bottom = 32 }, -- Grass Block {top = 32 , side = 32 , bottom = 32 }, -- Dirt {top = 1 , side = 1 , bottom = 1 }, -- Stone {top = 2 , side = 2 , bottom = 2 }, -- Sand {top = 15 , side = 15 , bottom = 15 }, -- Water {top = 3 , side = 3 , bottom = 3 }, -- Planks {top = 20 , side = 4 , bottom = 20 }, -- Log {top = 17 , side = 17 , bottom = 17 }, -- Leaves {top = 33 , side = 33 , bottom = 33 }, -- Bedrock {top = 48 , side = 48 , bottom = 48 }, -- Wool {top = 49 , side = 49 , bottom = 49 }, -- Wool {top = 50 , side = 50 , bottom = 50 }, -- Wool {top = 51 , side = 51 , bottom = 51 }, -- Wool {top = 52 , side = 52 , bottom = 52 }, -- Wool {top = 53 , side = 53 , bottom = 53 }, -- Wool {top = 54 , side = 54 , bottom = 54 }, -- Wool {top = 55 , side = 55 , bottom = 55 }, -- Wool {top = 56 , side = 56 , bottom = 56 }, -- Wool {top = 57 , side = 57 , bottom = 57 }, -- Wool {top = 58 , side = 58 , bottom = 58 }, -- Wool {top = 59 , side = 59 , bottom = 59 }, -- Wool {top = 19 , side = 19 , bottom = 19 }, -- Iron block {top = 34 , side = 34 , bottom = 34 }, -- Gold block {top = 35 , side = 35 , bottom = 35 }, -- Diamond block } ITEM_TEXTURES = { 16 , -- Grass Block 32 , -- Dirt 1 , -- Stone 2 , -- Sand 15 , -- Water 3 , -- Planks 4 , -- Log 17 , -- Leaves 33 , -- Bedrock 48 , -- Wool 49 , -- Wool 50 , -- Wool 51 , -- Wool 52 , -- Wool 53 , -- Wool 54 , -- Wool 55 , -- Wool 56 , -- Wool 57 , -- Wool 58 , -- Wool 59 , -- Wool 19 , -- Iron block 34 , -- Gold block 35 , -- Diamond block } -- Invalid block BLOCK_TEXTURES[-1] = {top = 255, side = 255, bottom = 255} ITEM_TEXTURES [-1] = 255 -- Dont question it SPLASHES = { "A good game!", "Kinda messy Code!", "Try out mc80 and MineTic", "Now 2.5d!", "Alpha!", "Will be getting updates unlike mc80!", "Not 1.0 yet!", "The \"menu\" looked empty so \ni added this text", "100% lua 0% javascript", "Just another minecraft clone", "The first version was made in 3 days!", "No Z-Buffer!", "I Have TIC-80 PRO!!!", "A Minecraft clone on the TIC-80!", } -- Variables time_ = 0 last_time = 0 world_size = 0 render_dist = 4 chunks = {} camera_pos = {x = 0, y = 0, z = 0} player = { x = 0, y = 150, z = 0, vx = 0, vy = 0, vz = 0, direction = 0, hotbarslot = 0, hotbar = {1,2,3,4,5,6,7,8,9}, inv_open = false, inventory = { -1 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , } } current_splash = SPLASHES[ (math.random(134, 276)% #SPLASHES-1)+2 ] gamestate = 1 genx = -16 genz = -16 seed = math.random(-10000, 10000) / 1567 f = 0 ------------------------------------------------------ function noise(x, y) n = 1 for i = 1, #NOISE_LAYERS do n = n * (NOISE_LAYERS[i].a * math.sin(math.sin(x * NOISE_LAYERS[i].b))) * (NOISE_LAYERS[i].c * math.sin(math.sin(y * NOISE_LAYERS[i].d))) trace(n,i == #NOISE_LAYERS and 13 or 12) end return n end ------------------------------------------------------ -- Generate the background for i = 0,239 do for j = 0,16 do local height = (noise(i+seed, i)//0.16)+16 if j > height then mset(i,j,1) elseif j == height or j == height-1 then mset(i,j,32) elseif j == height-2 then mset(i,j,16) else mset(i,j,31) end end end ------------------------------------------------------ -- Creates a chunk function gen(cx,cz) local chunk = {} for i = 1,16 do chunk[i] = {} for k = 1,16 do chunk[i][k] = {} local x = (cx*16)+i local z = (cz*16)+k local height = (noise(x+seed, z+seed)//0.16)+16 for j = 1,128 do if j < height then chunk[i][k][j] = (j == 1 ) and 9 or 3 elseif j == height or j == height+1 then chunk[i][k][j] = 2 elseif j == height+2 then chunk[i][k][j] = (j <= 17) and 4 or 1 else chunk[i][k][j] = (j <= 16) and 5 or 0 end end end end -- add a tree local treex = math.random(3,13) local treez = math.random(3,13) local height = (noise((treex+seed+(cx*16)), (treez+seed+(cz*16)))//0.16)+16 if height > 17 then for i = treex-2,treex+2 do for k = treez-2,treez+2 do chunk[i][k][height+3] = 8 chunk[i][k][height+4] = 8 end end for i = treex-1,treex+1 do for k = treez-1,treez+1 do chunk[i][k][height+5] = 8 chunk[i][k][height+6] = 8 end end for j = height+1,height+5 do chunk[treex][treez][j] = 7 end end if chunks[cx] == nil then chunks[cx] = {} end chunks[cx][cz] = chunk end -- end end end end end end end end end end end end end ------------------------------------------------------ -- Shows the inventory and makes it work function inv(mousex, mousey, mousel, lastmousel) rect(75,48,90,40,0) for i = 1,9 do for j = 0,3 do spr(ITEM_TEXTURES[ player.inventory[(j*9)+i] ] or 0, 66+(i*10),49+(j*10)) end end if mousel and not lastmousel then if mousex>65 and mousex<165 and mousey>49 and mousey<90 then player.hotbar[player.hotbarslot+1] = player.inventory[((mousex-65)//10)+((mousey-49)//10*9)] end end end ------------------------------------------------------ -- Draws a quad function quad(v1, v2, v3, v4, tex) t1 = {x = (tex * 8) % 128 , y = (tex // 16 * 8)+8} t2 = {x = (tex * 8) % 128+8, y = (tex // 16 * 8)+8} t3 = {x = (tex * 8) % 128+8, y = (tex // 16 * 8) } t4 = {x = (tex * 8) % 128 , y = (tex // 16 * 8) } if v1.z > 0 and v2.z > 0 and v3.z > 0 then textri( v2.x, v2.y, v3.x, v3.y, v1.x, v1.y, t2.x, t2.y, t3.x, t3.y, t1.x, t1.y, false, 13 ) end if v4.z > 0 and v1.z > 0 and v3.z > 0 then textri( v3.x, v3.y, v4.x, v4.y, v1.x, v1.y, t3.x, t3.y, t4.x, t4.y, t1.x, t1.y, false, 13 ) end end ------------------------------------------------------ -- Calculates a point function calc_point(x, y, z, offset) if offset then x = x - (camera_pos.x%1) y = y - (camera_pos.y%1) z = z - (camera_pos.z%1) end y=1-y if z > 0 and not btn(6) then x = x / z y = y / z elseif btn(6) then x = x / 5 y = y / 5 end x = (x + 240/136) * 68 y = (y + 1) * 68 return {x = x, y = y, z = z} end ------------------------------------------------------ -- Draws the blocks function draw_blocks(x, y, z) x=x//1 y=y//1 z=z//1 -- Loop over the blocks for zz = z+render_dist+render_dist, z, -1 do for yy = y-render_dist, y+render_dist do for xx = x-render_dist, x+render_dist do if xx == (player.x // 1) and yy == (player.y // 1) and zz == (player.z // 1) then -- Draw steve (top) for xx=0,1 do for yy=-1,0 do quad( calc_point(xx-1, yy-1, 5, false), calc_point(xx , yy-1, 5, false), calc_point(xx , yy , 5, false), calc_point(xx-1, yy , 5, false), 264+xx+((2-yy)*16) + (player.direction * 2) ) end end end if xx == (player.x // 1) and yy == ((player.y + 1) // 1) and zz == (player.z // 1) then -- Draw steve (bottom) for xx=0,1 do for yy=1,2 do quad( calc_point(xx-1, yy-1, 5, false), calc_point(xx , yy-1, 5, false), calc_point(xx , yy , 5, false), calc_point(xx-1, yy , 5, false), 264+xx+((2-yy)*16) + (player.direction * 2) ) end end end -- Skip block if it's air if get_block(xx,yy,zz) == 0 then goto continue1 end -- Draw the faces -- Top if get_block(xx,yy+1,zz) == 0 then quad( calc_point(xx-x , yy-y+1, zz-z , true), calc_point(xx-x+1, yy-y+1, zz-z , true), calc_point(xx-x+1, yy-y+1, zz-z+1, true), calc_point(xx-x , yy-y+1, zz-z+1, true), BLOCK_TEXTURES[ get_block(xx,yy,zz) or -1 ] .top) end -- Bottom if get_block(xx,yy-1,zz)== 0 then quad( calc_point(xx-x , yy-y , zz-z , true), calc_point(xx-x+1, yy-y , zz-z , true), calc_point(xx-x+1, yy-y , zz-z+1, true), calc_point(xx-x , yy-y , zz-z+1, true), BLOCK_TEXTURES[ get_block(xx,yy,zz) or -1 ] .bottom) end -- Left if get_block(xx-1,yy,zz) == 0 and xx-x > 0 then quad( calc_point(xx-x , yy-y , zz-z , true), calc_point(xx-x , yy-y , zz-z+1, true), calc_point(xx-x , yy-y+1, zz-z+1, true), calc_point(xx-x , yy-y+1, zz-z , true), BLOCK_TEXTURES[ get_block(xx,yy,zz) or -1 ] .side) end -- Right if get_block(xx+1,yy,zz) == 0 and x-xx > 0 then quad( calc_point(xx-x+1, yy-y , zz-z , true), calc_point(xx-x+1, yy-y , zz-z+1, true), calc_point(xx-x+1, yy-y+1, zz-z+1, true), calc_point(xx-x+1, yy-y+1, zz-z , true), BLOCK_TEXTURES[ get_block(xx,yy,zz) or -1 ] .side) end -- Front if get_block(xx,yy,zz-1) == 0 then quad( calc_point(xx-x , yy-y , zz-z , true), calc_point(xx-x+1, yy-y , zz-z , true), calc_point(xx-x+1, yy-y+1, zz-z , true), calc_point(xx-x , yy-y+1, zz-z , true), BLOCK_TEXTURES[ get_block(xx,yy,zz) or -1 ] .side) end ::continue1:: end end end end ------------------------------------------------------ -- Clamps a number between 2 numbers function clamp(min, num, max) if min > num then return min elseif max < num then return max else return num end end ------------------------------------------------------ function titlescreen() map(f//8,0,31,17,8-f%8-8,0) print("version 0.4-d2a", 1, 130, 15) print("mctic", 120-print("mctic", 0, -15, 15, 0, 2) //2, 8, 15, 0, 2, false) print(current_splash, 120-print(current_splash, 0, -15) //2, 40, 14) rect( 118-print("pregenerated world size:", 0, -9)//2, 98, print("pregenerated world size:", 0, -9)+4, 16, 7 ) print("pregenerated world size:", 120-print("pregenerated world size:", 0, -9)//2, 100, 15) local size_str if world_size == 0 then size_str = "small" end if world_size == 1 then size_str = "medium" end if world_size == 2 then size_str = "big" end print(size_str, 120-print(size_str, 0, -9)//2, 106, 15) rect( 118-print("play", 0, -9)//2, 89, print("play", 0, -9)+4, 8, 7 ) print("play", 120-print("play", 0, -9)//2, 90, 15) if mousex > 118-print("play", 0, -9)//2 and mousey > 89 and mousex < 118+print("play", 0, -9)//2 and mousey < 97 and mousel and not lastmousel or btnp(4) then gamestate = 2 if world_size == 0 then size = 1 end if world_size == 1 then size = 8 end if world_size == 2 then size = 16 end genx = -size genz = -size end if mousex > 118-print("pregenerated world size:", 0, -9)//2 and mousey > 98 and mousex < 118+print("pregenerated world size:", 0, -9)//2 and mousey < 113 and mousel and not lastmousel or btnp(5) then world_size = (world_size + 1) % 3 end end ------------------------------------------------------ function game() if world_size == 0 then size = 1 end if world_size == 1 then size = 8 end if world_size == 2 then size = 16 end -- Generating world screen if genz <= size then gen(genx,genz) -- Generate the world genx = genx + 1 if genx == size+1 then genx = -size genz = genz + 1 end rect( 116-print("Generating world", 0, -9)//2, 60, print("Generating world", 0, -9)+8, 9, 0) print("Generating world", 120-print("Generating world", 0, -9)//2, 62, 15) rect(103, 70, 35, 35, 0) for i = -16,16 do for j = -16,16 do if chunks[i] ~= nil then pix(i+120,j+87,chunks[i][j] and 11 or 15) else pix(i+120,j+87,6) end end end else -- make sure that the player is -- ALWAYS in a chunk if chunks[player.x//16] == nil then chunks[player.x//16] = {} end if chunks[player.x//16][player.z//16] == nil then gen(player.x//16, player.z//16) end -- Change the render distance -- S + up/down if btn(7) then if btnp(0) then render_dist=render_dist+1 end if btnp(1) then render_dist=render_dist-1 end end player.x = player.x + player.vx player.y = player.y + player.vy player.z = player.z + player.vz player.vx = player.vx / 1.2 player.vy = player.vy / 1.1 player.vz = player.vz / 1.2 camera_pos.x = player.x camera_pos.y = player.y camera_pos.z = player.z - 4 -- Player movement -- Fowards if btn(0) and get_block( player.x , player.y , player.z + 1) == 0 then player.vz = clamp(-0.15, player.vz + 0.03, 0.15) player.direction = 0 end -- Backwards if btn(1) and get_block( player.x , player.y , player.z - 1) == 0 then player.vz = clamp(-0.15, player.vz - 0.03, 0.15) player.direction = 1 end -- Left if btn(2) and get_block( player.x - 1, player.y , player.z ) == 0 then player.vx = clamp(-0.15, player.vx - 0.03, 0.15) player.direction = 2 end -- Right if btn(3) and get_block( player.x + 1, player.y , player.z ) == 0 then player.vx = clamp(-0.15, player.vx + 0.03, 0.15) player.direction = 3 end -- Jump if btn(4) and get_block( player.x , player.y - 2, player.z ) > 0 then player.vy = clamp(-0.1, player.vy + 0.52, 0.52) end if get_block( player.x , player.y - 1, player.z ) == 0 then player.vy = clamp(-0.15, player.vy - 0.03, 0.1) end if get_block( player.x , player.y - 1, player.z ) > 0 then player.vy = clamp(0, player.vy, 0.65) end if get_block( player.x , player.y + 2, player.z ) > 0 then player.vy = clamp(-0.15, player.vy, 0) end cls(13) -- Clears the screen with sky blue draw_blocks(camera_pos.x, camera_pos.y, camera_pos.z) -- Draws the blocks ui() end end ------------------------------------------------------ -- Get a block function get_block(x, y, z) x = x // 1 y = y // 1 z = z // 1 local cx = x // 16 local cz = z // 16 if y<1 or y>128 then return 0 end if chunks[cx] == nil then return 0 end if chunks[cx][cz] == nil then return 0 end return chunks[cx][cz][(x%16)+1][(z%16)+1][y] end ------------------------------------------------------ -- Set a block function set_block(x, y, z, b) x = x // 1 y = y // 1 z = z // 1 local cx = x // 16 local cz = z // 16 if y<1 or y>128 then return 0 end if chunks[cx] == nil then return 0 end if chunks[cx][cz] == nil then return 0 end chunks[cx][cz][(x%16)+1][(z%16)+1][y] = b end ------------------------------------------------------ -- Draw the UI function ui() if player.inv_opened then inv(mousex, mousey, mousel, lastmousel) end if btnp(5) then player.inv_opened = not player.inv_opened end for s=0,8 do spr(256, 75+(s*10), 122, 13, 1, 0, 0, 2, 2) if player.hotbar[s+1] > 0 then spr(ITEM_TEXTURES[player.hotbar[s+1] or -1], 76+(s*10), 123, 13) end end player.hotbarslot = (player.hotbarslot + (sy // 2)) % 9 spr(258, 75+(player.hotbarslot*10), 122, 13, 1, 0, 0, 2, 2) if mousey >= 122 and mousey <= 130 and mousex >= 75 and (mousex-75)//10 < 9 and mousel then player.hotbarslot = (mousex-75)//10 end if player.direction == 0 then dx = 0 dz = -1 end if player.direction == 1 then dx = 0 dz = 1 end if player.direction == 2 then dx = -1 dz = 0 end if player.direction == 3 then dx = 1 dz = 0 end -- Block Breaking if mousel and not lastmousel and mousex < 40 and mousey > 96 and ( get_block( player.x - (mousex//8*-dx) , player.y + ((mousey-96)//-8)+4, player.z - (mousex//8* dz) ) ~= 0) then set_block( player.x - (mousex//8*-dx) , player.y + ((mousey-96)//-8)+4, player.z - (mousex//8* dz) , 0) elseif -- Block Placing ((mouser and not lastmouser) or (mousel and not lastmousel)) and mousex < 40 and mousey > 96 and get_block( player.x - (mousex//8*-dx) , player.y + ((mousey-96)//-8)+4, player.z - (mousex//8* dz) ) == 0 then set_block( player.x - (mousex//8*-dx) , player.y + ((mousey-96)//-8)+4, player.z - (mousex//8* dz) , player.hotbar[player.hotbarslot+1]) end for x = 0,4 do for y = 0,4 do if get_block( player.x + (x*dx), player.y + y-1 , player.z - (x*dz)) > 0 then spr( BLOCK_TEXTURES[get_block( player.x + (x*dx), player.y + y-1 , player.z - (x*dz)) or -1 ].side, x*8, (4-y)*8+96) end end end spr(263, 0, 112, 13) spr(279, 0, 120, 13) time_ = time() debug_screen() end ------------------------------------------------------ function debug_screen() print("mctic v0.4-d2a" ,1,1 ,15) print("x:"..player.x,1,19,15) print("y:"..player.y,1,25,15) print("z:"..player.z,1,31,15) print("d:"..player.direction ,1,37,15) print("h:"..player.hotbarslot,1,43,15) print("v:"..render_dist ,1,49,15) print("mx:"..mousex ,1,90,15) print("my:"..mousey ,40,90,15) end ------------------------------------------------------ -- Main Loop function TIC() f = f + 1 -- Update the mouse variables mousex, mousey, mousel, mousem, mouser, sx, sy = mouse() if gamestate == 1 then titlescreen() elseif gamestate == 2 then game() end -- Clicking sound if mousel and not lastmousel then sfx(63) end lastmousel = mousel lastmousem = mousem lastmouser = mouser end