0,]']±>Sï}WÿÍu§ðp8·d%qy)6o;]ÉA¦ösï÷ôôô”°ÂVl†3<;:98754320000112345679:<=>?ONMKJIGEDB@EGKONLKHFC@@@ACFJLOÿ<004499==?????????????????????0011334556899;<=??????????????W½VÌTÐSàRèPöPðPPPPPPPPPPPPPPPPPPPPPPPüWpVpTtRwQpQ`PXP[PPP@P;P9P0P PPPðPàPàPÐPÀP°P°P PPP€P€P€P€ƒàD„E„D„E…„D B B”@@@ @ @ €€€€€€€€€aaa aa a@@@ @ @ @bbb b b b bbbb ‚ bb‚‚‚bb‚˜0€0¦ ÿDDDa@a¦ pp„qppp„q€q¦ À?wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwp33333333333333333333333333p #""¢ª» 0p"#""¢ª» 0p!#""¢ª» 0p Í#""¢ª» 0pÍ #""¢ª» 0pÐ 33333333333333333333333333ppwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwuwwwwwwwwwwwwwwwwwwwwwwwwwwwuwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwWwwwwwwwwwwwwwwwwwwwwwwwwwwwWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww~wwwwwwwwwwwwwwuwwwwwwwwwwwwwwwwwwwwwwwwwwwuwwwwwwwwwwwwwwwwwwwwwwww~wwwwwwwwwww~www~wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww÷æwwwwwwwwwwwWwwwwwwwwwwwwwwwwwwwwwwwwwwwWwwwwwwwwwwwwwwwwwwwwwww÷æwwwwwww÷æw÷æwwwwwwwwwwwwwwwwwwwwwwwwwwwww~ïfþ÷þwwwwwwwwwwuwwwwwwwwwwwwwwwwwwwwwwwwwwwuwwwwwwwwwwwwwwwwww÷þw~ïfþ÷þw÷þw~ïfþ~ïfþ÷þw÷þw÷þwwwwwwwwwwwwwwwwwwwwwönffçfþæwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwçfþæönffçfþæçfþæönffönffçfþæçfþæçfþæwwwwwwwwwuwwwwwwwwwþffffffffWwwwwwwwwwwwwwwwwwwwwwwwwuwwwwwwwwwwwwwwwwwwwwwwwwwwwwwþffffffMfffMffDdffDdfffMfffMfffMfffffvwwwwwwwWWwwwwwwwwwïffffffffuwwwwwwwwwwwwwwwwwwwwwwwWWwwwwwwwwwwwwwwwuwwwwwwwwwwwwwïffffffDDffDDFÔDfFÔDfffDDffDDffDDfvkfwwwwwwwwwwwuwwwwwwç÷ffffffffwwwwwwwwwwwwwwwwwwwwwwwwwwwuwwwwwwwwwwwwWwwwwwwwwwwwwwç÷ffffFDFdFDFdFDMfFDMfFDFdFDFdFDFdf·»fuuwwwwwwwwWwwwwwwwwnffffffffvwwwwwwwwwwwwwwwwwwwwwwwwwWwwwwwwwwwwwwwwwwwwwwwwwwwwwwnffffDDdfDDdffÔDffÔDfDDdfDDdfDDdfv·»kWwwwwwwwwuwwwwwww~woffffffffvw~wwwwwwwwwwwwwwwwwwwwwwuwwwwwwww~wwwwwwwwwwwwwwwwww~woffffDÔdDDÔdDFFdDFFdDDÔdDDÔdDDÔdDv{»gvwuwwwwwWwwwwwww÷w÷nfffffffffçw~wwwwwwwwwwwwwwwwwwwwWwwwwwww÷æwwwwwWwwwwwwwww÷w÷nffffDMFMDMFMFdFMFdFMDMFMDMFMDMFMf×|ffWwwwwwwwuwwwwwwþnfffffffffffïwwwwwwwwwwwwwwwwwwwwwuww÷þw~ïfþ÷þwwwuuwwwwwwwwþnfffffFdÔÔFdÔÔÔDÖdÔDÖdFdÔÔFdÔÔFdÔÔfÖÌffwuwwwwwwwwwwwwwçofffffffffffföþwwwwwwwwwwwwwwwwwwwwwwwwçfþæönffçfþæwwwwwwwwwwwwçoffffffffFdffFdFMfdFMfdffFdffFdffFdffÍfvwwwwwwwwwwwwwwïffffffffffffffffWwwwwwwwwwwwwwwwwwwwwwwþffffffffffffWwwwwwwwwwwþffffffMffDdffffffffffffffffffffffDdfffffvwwwwwwwwwwwww÷~fffffffffvkfffffuwwwwwwwwwwwwwwwwwwwwwwïfffff&afffffuwwwwwwwwwwïffffffDDFÔDfffffffffffffffffffffFÔDfffffwwwwwwwwwwwwwwwof6fffffff·»fffffwwwwwwwwwwwwwwwwwwwwwwç÷ffffffffffwwwwwwwwwwç÷ffffFDFdFDMffffffcffffffffffffffFDMfffffuuwwwwwwwwwwwwçffscfffffv·»kffffvwwwwwwwwwwwwwwwwwwwwwwnffff&affffvwwwwwwwwwwnffffDDdffÔDfffff6gfffffffffffffffÔDfffffWwwwwwwwwwwwww÷nfvffffffv{»gffffvw~wwwwwwwwwww~wwwwww~woffff&!bffffvw~wwwwww~woffffDÔdDFFdDfffffvffffffffffffffFFdDffffvwuwwwwwwwwwwwwoffgffffff×|ffffffçw~wwwwwww÷æwww÷w÷nfffffÒ,ffffffçw~www÷w÷nffffDMFMFdFMfffffvffffffffffffffFdFMfffffWwwwwwwwwwwww~þfffffffffÖÌfffffffï÷þw÷þw~ïfþ÷þwþnffffffÖÌfffffffï÷þwþnfffffFdÔÔÔDÖdffffffffffffffffffffÔDÖdfffffwuwwwwwwwwwwç÷çffffffffffÍffffffföþçfþæçfþæönffçfþæçoffffffffÍffffffföþçfþæçoffffffffFdFMfdffffffffffffffffffffFMfdffffvwwwwwwwwwwwwwïgfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffDdfffffffffffffffffffffffffffMffDdfvuwwwwwwwwwwww÷nfffff&affefffffffffffffffffffffffffffvkfffffffffffffffffffffffffffffFÔDffffffvkffffff&afffffffffffDDFÔDfuwwwwwwwwwwwwwïffffffffVfffffffffffffffffffffffffff·»ffffffffffcffffffffffffffffffFDMffffff·»fffffffffffffffFDFdFDMfWwwwwwwwwwwww÷nfffff&afffffffffeefffffffffffffffffv·»kffffffff6gfffffffffffffffffffÔDfffffv·»kffff&affffffffDDdffÔDfvuwwwwwwwwwwwwffffff&!bfffffffffvffffffffffffffffffv{»gfffffffffvffffffffffffffffffFFdDffffv{»gffff&!bffffffffDÔdDFFdDfvwwwwwwwwwwwçïffffffÒ,ffffefffffgeffffffffffffffffff×|ffffffffffvffffffffffffffffffFdFMfffff×|ffffffÒ,fffffffffDMFMFdFMfwuwwwwwwwwwww÷nfffffÖÌfffVffffffgfffffffffffffffffffÖÌfffffffffffffffffffffffffffffÔDÖdfffffÖÌffffffÖÌfffffffffFdÔÔÔDÖdVWwwwwwwwwwwwwïgffffffÍfffffffffffffffffffffffffffffffÍfffffffffffffffffffffffffffffFMfdffffffÍfffffffÍfffffffffffFdFMfdvwwwwwwwwwwwwwwïffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffMfffMfffffffffffffffffffffffffffffffMfWwwwwwwwwwwwww÷~fffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffDDffDDffffffffffffffffffffffffffffffDDuwwwwwwwwwwwwwwofffffffffffffffffffffffffffff6fffffffffffffffffffVffffffffffffffFDFdFDFdffffffffffffffffffffffffffffFDFdwwwwwwwwwwwwwwçffffffffffffffffffffffffffffffscfffffffffffffffffffffffffffffffffDDdfDDdffffffffffffffffffeefffffffffDDdfvwwwwwwwwwwwww÷nfffffffffffffffffffffffffffffvffffffffffffffffffffffffffffffffffDÔdDDÔdDfffffffffffffffffvffffffffffDÔdDvw~wwwwwwwwwwwwoffffffffffffffffffffffffffffffgffffffffffffffffffffeffffffffffffDMFMDMFMfffffffffffffffffgefffffffffDMFMfçw~wwwwwwwwww~þffffffffffffffffffffffffffffffffffffffffffffffffffVfffffffffffffFdÔÔFdÔÔfffffffffffffffffgffffffffffFdÔÔffïwwwwwwwwwç÷çffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffFdffFdffffffffffffffffffffffffffffffFdfföþwuwwwwwwwwwwWgffffffffffffffffffffMfffMfffMffDdfffMffDdfffffffffffffffffffMffDdfffffffffffffffffffffffffffffffffffMfffffWWwwwwwwwwwwuugffffff–jfffffffffffDDffDDffDDFÔDfffDDFÔDfffffffffffffffffffDDFÔDfffffffffffffffffffffffffffffffffffDDffffwwwuwwwwwwwwwwwffffff©ªfffffffffFDFdFDFdFDFdFDMfFDFdFDMfffffffffffffffffFDFdFDMfffffffffffffffffffffffffffeeffffFDFdf6ffwwWwwwwwwwwwwwwgffff–©ªjffffffffDDdfDDdfDDdffÔDfDDdffÔDfffffffffffffffffDDdffÔDfffffffffffffffffffffffffffVfffffDDdffscfwuwwwwwwwwwwwWwgffff–šªiffffffffDÔdDDÔdDDÔdDFFdDDÔdDFFdDffffffffffffffffDÔdDFFdDffffffffffffffffffffffffffffffffDÔdDfvffWwwwwwwwwwwwwwuwfffffÙœfffffffffDMFMDMFMDMFMFdFMDMFMFdFMffffffffffffffffDMFMFdFMffffffffffffffffffffffffffffffffDMFMffgfwuwwwwwwwwwwwwwwfffffÖÌfffffffffFdÔÔFdÔÔFdÔÔÔDÖdFdÔÔÔDÖdffffffffffffffffFdÔÔÔDÖdffffffffffffffffffffffffffffffffFdÔÔffffwwwwwwwwwwwwwwwwffffffÍfffffffffffFdffFdffFdFMfdffFdFMfdffffffffffffffffffFdFMfdffffffffffffffffffffffffffffffffffFdffffwwwwwwwwwwwwwwwwWgffffffffffffMfffMfffffffffffffffffffMfffffffffffffffffffMffffffffffffffffffffffffffffffffffffffDdfffMfwwwwwwwwwwwwwwwwuugfffffffffffDDffDDffffffffffffffffffDDffffffffffffffffffDDfffff–jfffffffffffffffffffffffffffffFÔDfffDDwwwwwwwwwwwwwwwwwwwffffffcffFDFdFDFdffffffffffffffffFDFdffffffffffffffffFDFdfffff©ªfffffffffffffffffffffffffffffFDMfFDFdwwwwwwwwwwwwwwwwwwwgffff6gffDDdfDDdfffffffffffffffffDDdfffffffffffffffffDDdfffff–©ªjfffffffffffffffffffffffffffffÔDfDDdfwwwwwwwwwwwwwwwwwWwgfffffvffDÔdDDÔdDfffffffffffföÿofDÔdDffffffffffffffffDÔdDffff–šªiffffffffffffffffffffffffffffFFdDDÔdDwwwwwwwwwwwwwwwwwwuwfffffvffDMFMDMFMffffffffffffÿÿÿfDMFMffffffffffffffffDMFMfffffÙœfffffffffffffffffffffffffffffFdFMDMFMwwwwwwwwwwwwwwwwwwwwffffffffFdÔÔFdÔÔffffffffffffÿÿÿfFdÔÔffffffffffffffffFdÔÔfffffÖÌfffffffffffffffffffffffffffffÔDÖdFdÔÔwwwwwwwwwwwwwwwwwwwwffffffffffFdffFdffffffffffff¯¬üfffFdffffffffffffffffffFdffffffÍfffffffffffffffffffffffffffffFMfdffFdwwwwwwwwwwwwwwwwwwwïffffffffffMfffffffffffffffffÉÌœfffMffDdffDdfffMffDdfffMfffffffffffffffffffffffffffffffffffffffffffffwwwwwwwwwwwwwwwwww÷~ffffffffffDDffffffffffffffff™™™fffDDFÔDfFÔDfffDDFÔDfffDDfffffffffffffffffefffffffffffffff&afffffffffwwwwwwwwwwwwwwwwwwwoffffffffFDFdffffffffffffffffüÿÏfFDFdFDMfFDMfFDFdFDMfFDFdfffffffffffffffffVfffffffcffffffffffffffffwwwwwwwwwwwwwwwwwwçfffffffffDDdffffffffffffffeef36cfDDdffÔDffÔDfDDdffÔDfDDdfffffffffffffffffffffffff6gffffff&affffffffwwwwwwwwwwwwwwwwww÷nffffffffDÔdDfffffffffffffvffffffDÔdDFFdDFFdDDÔdDFFdDDÔdDfffffffffffffffffffffffffvffffff&!bffffffffwwwwwwwwwwwwwwwwwwwoffffffffDMFMfffffffffffffgefffffDMFMFdFMFdFMDMFMFdFMDMFMfffffffffffffffffffefffffvfffffffÒ,fffffffffwwwwwwwwwwwwwwwwww~þffffffffFdÔÔfffffffffffffgffffffFdÔÔÔDÖdÔDÖdFdÔÔÔDÖdFdÔÔffffffffffffffffffVffffffffffffffÖÌfffffffffwwwwwwwwwwwwwwwwwç÷çffffffffffFdffffffffffffffffffffffFdFMfdFMfdffFdFMfdffFdffffffffffffffffffffffffffffffffffÍfffffffffwwwwwwwwwwwwwwwwwwwþfffffffffDdfffffffffffffffffffffffMffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffwwwwwwuwwwwwwwwwwwwwïffffffffFÔDfffffffffffffffffffffffDDffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffuuwwwwWwwwwwwwwwwwwwç÷ffffffffFDMffffffcffffffffeeffffFDFdfffffffffffffffffffff6fffffffffffffffffffffffffffffffffffffffwWwwwwwwwwwwwwwwwwwwwwnfffffffffÔDfffff6gffffffffVfffffDDdffffffeeffffffffffffffscfffffffffffffffffffffffffffffffffffffvWwwwwwwwwwwwwwwwwwww~woffffffffFFdDfffffvffffffffffffffDÔdDfffffvfffffffffffffffvffffffffffffffffffffffffffffffffffffffvuwwwwwwwwWwwwwwwwww÷w÷nffffffffFdFMfffffvffffffffffffffDMFMfffffgefffffffffffffffgfffffffffffffffffffffffffffffffffffffwwwwwwwwwwuuwwwwwwwwþnfffffffffÔDÖdffffffffffffffffffffFdÔÔfffffgffffffffffffffffffffffffffffffffffffffffffffffffffffffuwwwwwwwwwwwwwwwwwwwçoffffffffffFMfdffffffffffffffffffffffFdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffWwwwwwwwwwwwwwwwwwwþffffffffffffffMffffffffwWgffffffffffffMfffMffDdffffffffffffffffffffwffwuWgffffffffffffffffffffffffffvwwwwwwwwwwwwwwwwwwïffffffffffffffDDffffffuuuugfffffffffffDDffDDFÔDffffff&afffffffffffuuwuuWuugffffffffff&affffffffffvkfwwwwwwwwwwwwwwwwwwç÷ffffffffffffFDFdfffffwWwwwwfffffffffFDFdFDFdFDMffffffffffffffffwWwWWwwwwwff6fffffffffffffffff·»fuuwwwwwwwwwwwwwwwwwnffffffffffffDDdfffffvWwwwwwgffffffffDDdfDDdffÔDfffff&affffffffvWwwwwwwwwwgfscfffff&affffffffv·»kWwwwwwwwwwwwwwwww~woffffffffffffDÔdDffffvuwwwWwgffffffffDÔdDDÔdDFFdDffff&!bffffffffvuwwwwwwwWwgfvffffff&!bffffffffv{»gvwuwwwwwwwwwwww÷w÷nffffffffffffDMFMffffwwwwwwuwffffffffDMFMDMFMFdFMfffffÒ,fffffffffwwwwwwwwwwuwffgffffffÒ,ffffffffff×|ffWwwwwwwwwww÷þwþnfffffffffffffFdÔÔffffuwwwwwwwffffffffFdÔÔFdÔÔÔDÖdfffffÖÌfffffffffuwwwwwwwwwwwfffffffffÖÌffffffffffÖÌffwuwwwwwwwwwçfþæçoffffffffffffffffFdffffWwwwwwwwffffffffffFdffFdFMfdffffffÍfffffffffWwwwwwwwwwwwffffffffffÍfffffffffffÍfvwwwwwwwwwwþffffffffffffffffffffffMfffffWwwwwwwwWgffffffffffffMfffffffffffffffffffffvwwwwwwwwwwwffwuffvgffwuWgfffffffffwwwwwwwwwwwwïfvkfffffffffffffffffffDDffffuwwwwwwwuugfffffffffffDDffffffffffffffffffffwwwwwwwwwwwwwuuWgfvuwuuWuugffvkfffuuwwwwwwwwwwç÷f·»ffffff6ffffffffffFDFdffffwwwwwwwwwwwfffffffffFDFdfffffffffffffcffffffuuwwwwwwwwwwWWwwWfWwWWwwwwwff·»ffwWwwwwwwwwwwwwnv·»kfffffscfffffffffDDdfffffvwwwwwwwwwwgffffffffDDdfffffffffffff6gffffffWwwwwwwwwwwwwwwwuWwuwwwwwwwgv·»kvWwwwwwwwwwww~wov{»gfffffvffffffffffDÔdDffffvw~wwwwwwWwgffffffffDÔdDfffffffffffffvffffffvwuwwwwwwwwwwwwwwuwwwwwwwWwgv{»gvuwwwwwwwwww÷w÷nf×|fffffffgfffffffffDMFMfffffçw~wwwwwwuwffffffffDMFMfffffffffffffvfffffffWwwwwwwwwwwwwwwwwwwwwwwwwuwf×|fwwwwwwwwwwwwþnffÖÌfffffffffffffffffFdÔÔffffffïwwwwwwwwffffffffFdÔÔfffffffffffffffffffffwuwwwwwwwwwwwwwwwwwwwwwwwwwfÖÌfuwwwwwwwwwwwçoffffÍfffffffffffffffffffFdfffffföþwwwwwwwwffffffffffFdffffffffffffffffffffvwwwwwwwwwwwwwwwwwwwwwwwwwwwffÍfWwwwwwwwwwwþffffffffffffffffffffffffffMfffffffffvwwwwwwþfffffffffDdffffffffffffffffwffwuwwwwwwwwwwwwwwwwwwwwwwwwwwwwffwuwwwwwwwwwwwïffffffffffffffffffffffffffDDfffff&afwwwwwwwïffffffffFÔDfffffffffffffffuuwuuWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwuuWwwwwwwwwwwç÷ffffffffffffffffffffffffFDFdffffffuuwwwwç÷ffffffffFDMffffffffffffffwWwWWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwWWwwwwwwwwwwwwwnffffffffffffffffffffffffDDdfffff&aWwwwwwwnfffffffffÔDfffffffffffffvWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww~woffffffffffffffffffffffffDÔdDffff&!bvwuww~woffffffffFFdDffffffffffffvuwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww÷w÷nffffffffffffffffffffffffDMFMfffffÒ,ffWww÷w÷nffffffffFdFMffffffffffffwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwþnfffffffffffffffffffffffffFdÔÔfffffÖÌffwuwþnfffffffffÔDÖdffffffffffffuwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwçoffffffffffffffffffffffffffffFdffffffÍfvwwwçoffffffffffFMfdffffffffffffWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwffffffffffffffffffMffDdfffMffDdffffffffwwwwïffffffffffffffMffffffffffffwwwwwwwwwwuwwwwwwwwwwwwwwwwwwwwwwwwwwwuwwwwwwwwwwfffffffffeffffffffDDFÔDfffDDFÔDfffffffuuww÷~ffffffffffffffDDffffffffffuuwwwwwwwwWWwwwwwwwwwwwwwwwwwwwwwwwwwwWWwwwwwwwwwwfffffffffVffffffFDFdFDMfFDFdFDMffffffwWwwwwofffff6ffffffFDFdfffffffffwWwwwwwwwwwwwwuwwwwwwwwwwwwwwwwwwwwwwwwwwwuwwwwwwwwffffffffffffffffDDdffÔDfDDdffÔDfffffvWwwwwçffffffscfffffDDdfffffffffvWwwwwwwwwwwwwWwwwwwwwwwwwwwwwwwwwwwwwwwwwWwwwwwwwwwffffffffffffffffDÔdDFFdDDÔdDFFdDffffvuwwww÷nfffffvffffffDÔdDffffffffvuwwwwwwwwwwwuwwwwwwwwwwwwwwwwwwwwwwwwwwwuwwwwwwwwwwfffffffffffeffffDMFMFdFMDMFMFdFMffffwwwwwwwoffffffgfffffDMFMffffffffwwwwwwwwwwwwWwwwwwwwwwwwwwwwwwwwwwwwwwwwWwwwwwwwwwwwffffffffffVfffffFdÔÔÔDÖdFdÔÔÔDÖdffffuwwwww~þffffffffffffFdÔÔffffffffuwwwwwwwwwwwwuwwwwwwwwwwwwwwwwwwwwwwwwwwwuwwwwwwwwwwffffffffffffffffffFdFMfdffFdFMfdffffWwwwwç÷çffffffffffffffFdffffffffWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwffMffDdfffMffDdfffMfffffffffffffffffvwwwwwïgfffffffffDdfffMfffffffffvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwffDDFÔDfffDDFÔDfffDDffffffffffffffffwwwwww÷nf&afffffFÔDfffDDffffffffwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwFDFdFDMfFDFdFDMfFDFdf6ffffffffffffffuuwwwwïfffffffFDMfFDFdfffff6ffuuwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwDDdffÔDfDDdffÔDfDDdffscfffffffffffffWwwww÷nf&afffffÔDfDDdffffffscfWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwDÔdDFFdDDÔdDFFdDDÔdDfvffffffffffffffvwuwwwff&!bffffFFdDDÔdDfffffvffvwuwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwDMFMFdFMDMFMFdFMDMFMffgffffffffffffffWwwwçïffÒ,fffffFdFMDMFMffffffgffWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwFdÔÔÔDÖdFdÔÔÔDÖdFdÔÔfffffffffffffffffwuwww÷nfÖÌfffffÔDÖdFdÔÔfffffffffwuwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwffFdFMfdffFdFMfdffFdffffffffffffffffvwwwwwïgffÍfffffFMfdffFdffffffffvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwfffffffffffffffffffffffffffffffwffwuwwwwwwwïffffffMfffMffffffffffffwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwfffffffffffffvkfffffffffffffffuuwuuWwwwwww÷~ffffffDDffDDffffffffffuuwwwwwwwwwwwwwwwwwwwwwwwwwuwwwwwwwwwwwwwwwwwwwwwwwwwwfffffffffffff·»ffffffffffffffwWwWWwwwwwwwwwoffffFDFdFDFdfffffffffwWwwwwwwwwwwwwwwwwwwwwwwwwwWwwwwwwwwwwwwwwwwwwwwwwwwwwwfffffeefffffv·»kffffffffffffvWwwwwwwwwwwwwçfffffDDdfDDdfffffffffvWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwfffffvffffffv{»gffffffffffffvuwwwwwwwwwwww÷nffffDÔdDDÔdDffffffffvuwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwfffffgeffffff×|fffffffffffffwwwwwwwwwwwwwwwoffffDMFMDMFMffffffffwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwWwwwwwwwwwwwwwwwwwwwwwwwwwfffffgfffffffÖÌfffffffffffffuwwwwwwwwwwwww~þffffFdÔÔFdÔÔffffffffuwwwwwwwwwwwwwwwwwwwwwwwwwwwwwuuwwwwwwwwwwwwwwwwwwwwwwwwffffffffffffffÍfffffffffffffWwwwwwwwwwwwwç÷çffffffFdffFdffffffffWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwffvgffwuffwuffvgffwuffvgffwuwwwwwuwwwwwwwwwïffffffMffffffffwffwuwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwgfvuwuuWwuuWgfvuwuuWgfvuwuuWwwwwWWwwwwwwww÷~ffffffDDffffffuuwuuWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwWfWwWWwwWWwwWfWwWWwwWfWwWWwwwwwwwwwuwwwwwwwofcffFDFdfffffwWwWWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwuWwuwwwwwwwwuWwuwwwwuWwuwwwwwwwwwwWwwwwwwwçf6gffDDdfffffvWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwuwwwwwwwwwwwuwwwwwwwuwwwwwwwwwwwuwwwwwwww÷nfvffDÔdDffffvuwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwWwwwwwwwwwwofvffDMFMffffwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwuwwwwwwww~þffffFdÔÔffffuwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwç÷çffffffFdffffWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwøv-- title: A Story For The Night -- author: Olivier Sted -- desc: topdown adventure story -- license: MIT License (change this to your license of choice) -- version: 1.0 -- script: lua -- CONSTANTS sizeScreenW=240 -- pixels sizeScreenH=136 sizeBlock=8 blockScreenW=sizeScreenW//sizeBlock -- 30 blocks blockScreenH=sizeScreenH//sizeBlock -- 17 blocks hudH=10 keyUp=0 -- walk & choose action keyDown=1 keyLeft=2 keyRight=3 keyZ=4 -- next text & choose action playerIdleUp=373 playerIdleDown=357 playerIdleLeft=341 playerIdleRight=325 playerWalkUp=368 playerWalkDown=352 playerWalkLeft=336 playerWalkRight=320 storyTeller=389 squirrelIdle=416 squirrelDown=432 squirrelUp=448 dirIdle=0 -- directions dirDownRight=1 dirDownLeft=2 dirUpLeft=3 dirUpRight=4 squirrelSpeed=.5 numberOfSquirrels={ {0,0,2,0,5,4,2,0}, {0,2,4,4,6,2,0,4}, {0,0,5,0,2,4,5,6}, {0,4,6,4,0,5,4,4}, {0,5,5,0,2,4,0,2}, {0,6,5,2,4,6,5,2}, {0,4,2,0,2,5,6,4}, {0,0,0,2,2,0,4,0} } firstBackgroundTile=128 choiceTile=496 selectedChoiceTile=497 pocketCapacitySmall=50 pocketCapacityLarge=200 mushroomTypeRed=144 mushroomTypeBlue=145 mushroomTypeGreen=146 noMushroom=128 -- grass tile tileFloor=131 -- VARIABLES mode="textbox" firstMushroomAlreadyTakenBySquirrel=false alreadyVisitedStoryTeller=false gameIsFinished=false HUD={ mapX=0*blockScreenW, -- blocks mapY=0*blockScreenH, redMushrooms=0, blueMushrooms=0, greenMushrooms=0, maxHarvest=pocketCapacitySmall } player={ x=8*sizeBlock, -- pixels y=14*sizeBlock, vx=0, vy=0, speed=.5, orientation=-1, costume=playerIdleLeft } currentTextNr=1 textBlock=1 textChoice=1 maxTextChoice=0 choicesAvailable=false messagePocketsFullShown=false init=true startMusic=true currentMusic=0 squirrels={} actionLocations={ posX ={13,12,14, 6,10, 0, 0, 0}, posY ={14,13,13,22,40,13,14,15}, textNr={ 3, 4, 4, 6, 8,20,20,20} } actionTexts={ {{" TIC-80 Tiny Tales presents:",""," -= A Story For The Night =-",""," made by Olivier Sted"},{"It's the end of autumn and the nights","have turned long and dark again.","The people of his village gathered","around the fire looking for a pleasant","way to spend the evenings.","They didn't succeed."},{"That's why they send him out to ask the","great old storyteller to lighten up","their gloomy evenings.","That he never paid him a visit before","would be no problem, they assured him."},{"'Just follow the path and everything ","will be fine.'","'And don't forget to collect some","mushrooms for the stew.'"},{"So here he is, on his own.","It really would be nice if he could ","have some help on how to traverse the ","forest safely."},{"Look, over there is a sign.","Maybe it contains some clues on how to","reach the storyteller.","","(Walk towards it and press Z)"}}, -- 01 {{""}}, -- 02 {{"Use arrow keys to walk around.","Press Z to interact with something.","","Use up/down arrows to select an action,","press Z to go to the next text block."}}, -- 03 {{"It's much easier to read the sign","when you're standing in front of it."}}, -- 04 {{"You can't pick up any more mushrooms,","because all your pockets are stuffed","with them already.","If only you could find a basket","or somehting..."}}, -- 05 {{"Under the table lies a basket.","It looks battered, but still strong","enough to hold a large amount of swag.","Like mushrooms, for example.","@Pick up basket","@Leave basket"}}, -- 06 {{"You take the basket with you.","@Ok"}}, -- 07 {{"Well well, look who's there. A visitor.","Tell me, what brings you here?"},{"You want me to come along to your","village to tell some stories?","That's alright, but I suggest you serve","a good meal. My stories a lengthy and","listening to them goes better with a","filled stomach."},{"I suppose you've already collected","some mushrooms on your way.","How much do you have with you?"},{"Hmm, that's not much.","I guess you don't expect you can make","enough stew out of that for your whole","village? Go outside and come back when","you've collected enough mushrooms."}}, -- 08: first visit + not enough {{"'Well well, look who's there. A visitor.","Tell me, what brings you here?'"},{"'You want me to come along to your","village to tell some stories?","That's alright, but I suggest you serve","a good meal. My stories a lengthy and","listening to them goes better with a","filled stomach.'"},{"'I suppose you've already collected","some mushrooms on your way.","How much do you have with you?'"},{"'Good, that will make a nice cauldron of","mushroom stew. Splendid!","And I see that you have a preference","for the red ones. Well, I think I have","a story that goes well with that.'"},{"And that evening the old storyteller","entertains the villagers with the story","of the traveller who finds in a swamp","an overgrown sign.","It has a picture with something that","resembles a snake-like figure."},{"The traveller is glad to find a fork-","shaped branche. With it he will be","abled to keep snakes at a distance."},{"But what if the sign doesn't warn him","for snakes? Only a small part of the","picture was visible. It could also","have depicted other dangerous animals,","for example octopushes."},{"The traveller starts sharpening one end","of the branche. With a spear-like tool","he can defend himself against squid-","shaped monsters."},{"But then a big animal breaks through","the curtains of hanging leaves and the","traveller realizes he had better used","the long branche to clear the sign, so","he could have seen that he had to watch","out for large anrgy elephants."}}, -- 09: first visit + red {{"'Well well, look who's there. A visitor.","Tell me, what brings you here?'"},{"'You want me to come along to your","village to tell some stories?","That's alright, but I suggest you serve","a good meal. My stories a lengthy and","listening to them goes better with a","filled stomach.'"},{"'I suppose you've already collected","some mushrooms on your way.","How much do you have with you?'"},{"'Good, that will make a nice cauldron of","mushroom stew. Splendid!","And I see that you have a preference","for the green ones. Well, I think I","have a story that goes well with that.'"},{"And that evening the old storyteller","entertains the villagers with a story","about the traveller who, in search for","new fishing grounds, discovers a","deserted island."},{"On this island he finds a field full of","melon-like spheres. To his surprise the","round fruits don't have a root with","which they are attached to the ground.","He takes one with him to the clearing","where he has build his camp."},{"The next and the following days he","takes more of the fruits to his tent.","This goes very easy. A nudge is all it","takes to make the round shapes roll","down the slope to his camp."},{"He keeps collecting them, more than he","actually needs, until one morning they","burst open. The fruits are not mellons.","They are eggs which contain baby preda-","tors who are quite hungry."}}, -- 10: first visit + green {{"'Well well, look who's there. A visitor.","Tell me, what brings you here?'"},{"'You want me to come along to your","village to tell some stories?","That's alright, but I suggest you serve","a good meal. My stories a lengthy and","listening to them goes better with a","filled stomach.'"},{"'I suppose you've already collected","some mushrooms on your way.","How much do you have with you?'"},{"'Good, that will make a nice cauldron of","mushroom stew. Splendid!","And I see that you have a preference","for the blue ones. Well, I think I have","a story that goes well with that.'"},{"And that evening the old storyteller","tells the villagers about a man and","woman who own a large garden. In fact,","the garden is so big that his wife","complains that from the terrace she can","barely see the fountain in the back."},{"That's why not until today the man","discovers that the fountain is not","working well. Probably the roots of the","exuberant growning trees are cutting","off the water supply."},{"After digging several holes the man","indeed finds halfway the garden a spot","where some roots are choking the water","pipe.","While attacking the roots with an axe","he unfortunately damages the pipe."},{"The man wants to rush to the house to","gather some equipement to repair the","water pipe, but seeing the fountain of","escaping water, he hesitates."},{"The next morning, when his wife enters","the terrace, she is suprised not only","to see the fountain working, but also","to see it standing on a much better","spot halfway the garden."}}, -- 11: first visit + blue {{"'Well well, look who's there. A visitor.","Tell me, what brings you here?'"},{"'You want me to come along to your","village to tell some stories?","That's alright, but I suggest you serve","a good meal. My stories a lengthy and","listening to them goes better with a","filled stomach.'"},{"'I suppose you've already collected","some mushrooms on your way.","How much do you have with you?'"},{"'Good, that will make a nice cauldron of","mushroom stew. Splendid!","You've collected a nice mash-up of all","sorts, I see. That reminds me of a","story I heard somewhere. I think I will","tell you folks that story tonight.'"},{"And when that evening the people of the","village are gathered around the fire,","the old storyteller tells about the","painter who one morning sees a beauti-","full rainbow outside his window."},{"Immediately he rushes off to gather his","painting supplies to capture the image.","In his haste, he knocks over the water","pot for his brushes. The cloth he uses","to mop up the water still contains some","paint which leaves steaks on the floor."},{"Therefore he has to look for someone","who can lend him a cup of soap.","In the kitchen he discovers that all","the cups are in use, thus he first has","to find a clean cup somewhere."},{"By the time he has refilled his water","pot and taken place behind his canvas,","the rainbow has already be long gone.","Luckily, the setting sun also gives a","colourfull spectacle, which is worth","enough painting."}}, -- 12: first visit + all collours {{"Ah, it's you again.","Well, let me see how much mushrooms","you've collected so far."},{"Hmm, that's still not enough.","Go back outside and come back when","you've collected enough mushrooms."}}, -- 13: second visit + not enough {{"Ah, it's you again.","Well, let me see how much mushrooms","you've collected so far."},{"Good, that will make a nice cauldron of","mushroom stew. Splendid!","And I see that you have a preference","for the red ones. Well, I think I have","a story that goes well with that."},{"And that evening the old storyteller","entertains the villagers with the story","of the traveller who finds in a swamp","an overgrown sign.","It has a picture with something that","resembles a snake-like figure."},{"The traveller is glad to find a fork-","shaped branche. With it he will be","abled to keep snakes at a distance."},{"But what if the sign doesn't warn him","for snakes? Only a small part of the","picture was visible. It could also","have depicted other dangerous animals,","for example octopushes."},{"The traveller starts sharpening one end","of the branche. With a spear-like tool","he can defend himself against squid-","shaped monsters."},{"But then a big animal breaks through","the curtains of hanging leaves and the","traveller realizes he had better used","the long branche to clear the sign, so","he could have seen that he had to watch","out for large anrgy elephants."}}, -- 14: second visit + red {{"Ah, it's you again.","Well, let me see how much mushrooms","you've collected so far."},{"Good, that will make a nice cauldron of","mushroom stew. Splendid!","And I see that you have a preference","for the green ones. Well, I think I","have a story that goes well with that."},{"And that evening the old storyteller","entertains the villagers with a story","about the traveller who, in search for","new fishing grounds, discovers a","deserted island."},{"On this island he finds a field full of","melon-like spheres. To his surprise the","round fruits don't have a root with","which they are attached to the ground.","He takes one with him to the clearing","where he has build his camp."},{"The next and the following days he","takes more of the fruits to his tent.","This goes very easy. A nudge is all it","takes to make the round shapes roll","down the slope to his camp."},{"He keeps collecting them, more than he","actually needs, until one morning they","burst open. The fruits are not mellons.","They are eggs which contain baby preda-","tors who are quite hungry."}}, -- 15: second visit + green {{"Ah, it's you again.","Well, let me see how much mushrooms","you've collected so far."},{"Good, that will make a nice cauldron of","mushroom stew. Splendid!","And I see that you have a preference","for the blue ones. Well, I think I have","a story that goes well with that."},{"And that evening the old storyteller","tells the villagers about a man and","woman who own a large garden. In fact,","the garden is so big that his wife","complains that from the terrace she can","barely see the fountain in the back."},{"That's why not until today the man","discovers that the fountain is not","working well. Probably the roots of the","exuberant growning trees are cutting","off the water supply."},{"After digging several holes the man","indeed finds halfway the garden a spot","where some roots are choking the water","pipe.","While attacking the roots with an axe","he unfortunately damages the pipe."},{"The man wants to rush to the house to","gather some equipement to repair the","water pipe, but seeing the fountain of","escaping water, he hesitates."},{"The next morning, when his wife enters","the terrace, she is suprised not only","to see the fountain working, but also","to see it standing on a much better","spot halfway the garden."}}, -- 16: second visit + blue {{"Ah, it's you again.","Well, let me see how much mushrooms","you've collected so far."},{"Good, that will make a nice cauldron of","mushroom stew. Splendid!","You've collected a nice mash-up of all","sorts, I see. That reminds me of a","story I heard somewhere. I think I will","tell you folks that story tonight."},{"And when that evening the people of the","village are gathered around the fire,","the old storyteller tells about the","painter who one morning sees a beauti-","full rainbow outside his window."},{"Immediately he rushes off to gather his","painting supplies to capture the image.","In his haste, he knocks over the water","pot for his brushes. The cloth he uses","to mop up the water still contains some","paint which leaves steaks on the floor."},{"Therefore he has to look for someone","who can lend him a cup of soap.","In the kitchen he discovers that all","the cups are in use, thus he first has","to find a clean cup somewhere."},{"By the time he has refilled his water","pot and taken place behind his canvas,","the rainbow has already be long gone.","Luckily, the setting sun also gives a","colourfull spectacle, which is worth","enough painting."}}, -- 17: second visit + all collours {{"Hey!","One of those squirrels takes off with","one of the mushrooms he has harvested."}}, -- 18 {{"He can't pick up any more mushrooms.","His basket is completely full, so he","probably has enough for the mushroom-","stew this evening."}}, -- 19 {{"This way leads to his village, but he has","more important things to do in the woods.","He'd better go that direction."}}, -- 20 {{""}} -- 99 } -- special action constants >> doNothingSpecial=500 pickUpBasket=505 actionRedirections={ {-1}, -- 01 {-1}, -- 02 {-1}, -- 0 {-1}, -- 04 {-1}, -- 05 {7,doNothingSpecial}, -- 06 {pickUpBasket}, -- 07 {-1}, -- 08 {-1}, -- 09 {-1} -- 99 } portals={ posX ={231,232, 12, 13, 81, 82, 6, 7,229,230, 5, 6}, posY ={130,130, 44, 44,129,129, 26, 26, 10, 10, 51, 51}, toPosX={ 12, 12,231,231, 6, 6, 81, 81, 6, 6,228,228}, toPosY={ 43, 43,131,131, 25, 25,130,130, 53, 53, 11, 11}, newMusic={2, 2, 0, 0, 2, 2, 0, 0, 1, 1, 0, 0} } -- FUNCTIONS function TIC() if init then initialize() init=false end if startMusic then playMusic() startMusic=false end cls() t=time()//10 if (mode=="walk") then if gameIsFinished then drawEndScreen() else checkForPortals() if updateMap() then init=true end updatePlayer() updateSquirrels() drawMap() drawStoryTeller() drawPlayer() drawSquirrels() checkForSquirrelCollisions() drawHUD() if HUD.redMushrooms+HUD.blueMushrooms+HUD.greenMushroomspocketCapacitySmall then currentTextNr=19 else currentTextNr=5 end mode="textbox" messagePocketsFullShown=true end end -- gameIsFinished==false end -- mode=="walk" if (mode=="textbox") then drawMap() drawStoryTeller() drawPlayer() drawHUD() drawTextBox() end if (gameIsFinished and mode=="walk")==false then processInput() end end -- TIC() function updateMap() mapUpdated=false if player.x<0 then HUD.mapX=HUD.mapX-sizeScreenW//sizeBlock player.x=sizeScreenW-sizeBlock mapUpdated=true elseif player.x>sizeScreenW-sizeBlock then HUD.mapX=HUD.mapX+sizeScreenW//sizeBlock player.x=0 mapUpdated=true elseif player.y<0 then HUD.mapY=HUD.mapY-sizeScreenH//sizeBlock player.y=sizeScreenH-sizeBlock mapUpdated=true elseif player.y>sizeScreenH-sizeBlock then HUD.mapY=HUD.mapY+sizeScreenH//sizeBlock player.y=0 mapUpdated=true end return mapUpdated end -- updateMap() function stopWalking() if(player.costume==playerWalkUp) then player.costume=playerIdleUp elseif(player.costume==playerWalkDown) then player.costume=playerIdleDown elseif(player.costume==playerWalkLeft) then player.costume=playerIdleLeft elseif(player.costume==playerWalkRight) then player.costume=playerIdleRight end end -- stopWalking() function updatePlayer() if (mode=="walk") then local speedFactor=1 if(player.vx~=0 and player.vy~=0) then speedFactor=0.7 end player.x=player.x+player.vx*speedFactor player.y=player.y+player.vy*speedFactor end -- mode=="walk" if (mode=="textbox") then player.vx=0 player.vy=0 end -- mode=="textbox" if(player.vx==0 and player.vy==0) then stopWalking() end -- vx==0 and vy==0 end -- updatePlayer() function drawMap() map(HUD.mapX,HUD.mapY,blockScreenW,blockScreenH) end -- drawMap() function drawPlayer() local factor=15 -- if(player.vx==0 and player.vy==0) then -- factor=30 -- end spr(player.costume+t%60//factor, player.x, player.y, 0) end -- drawPlayer() function drawStoryTeller() if (HUD.mapX==0*blockScreenW and HUD.mapY==2*blockScreenH) then spr(storyTeller+t%60//15,10*sizeBlock,5*sizeBlock,0) end end -- drawStoryTeller() function drawHUD() rect(1,1,sizeScreenW-2,hudH-1,0) spr(mushroomTypeRed,1,1,6) local offsetHarvestBar=10 rectb(offsetHarvestBar,2,HUD.maxHarvest+2,7,3) rect(offsetHarvestBar+1,3,HUD.redMushrooms,5,2) rect(offsetHarvestBar+1+HUD.redMushrooms,3,HUD.blueMushrooms,5,10) rect(offsetHarvestBar+1+HUD.redMushrooms+HUD.blueMushrooms,3,HUD.greenMushrooms,5,11) end -- drawHUD() function drawTextBox() stopWalking() local maxLines=6 local lineHeight=10 rect(0,68/2,sizeScreenW,68,15) rectb(0,68/2,sizeScreenW,68,12) print("[Press Z]",190,95,12) local textLines=#actionTexts[currentTextNr][textBlock] -- look for first line with choice local lineFirstChoice=-1 for line=1,textLines do -- when first char of line is '@', this and the following lines are choices if(lineFirstChoice<0) then if(string.sub(actionTexts[currentTextNr][textBlock][line],1,1)=="@") then lineFirstChoice=line choicesAvailable=true end end end -- for if (lineFirstChoice<0) then lineFirstChoice=textLines+1 end maxTextChoice=textLines-lineFirstChoice+1 for line=1,textLines do local lineText=actionTexts[currentTextNr][textBlock][line] local linePos=line if (string.sub(lineText,1,1)=="@") then linePos=maxLines-textLines+line if (textChoice==line-lineFirstChoice+1) then spr(selectedChoiceTile,5,68/2+4+lineHeight*(linePos-1),0) else spr(choiceTile,5,68/2+4+lineHeight*(linePos-1),0) end -- if print(string.sub(lineText,2,string.len(lineText)),15,68/2+5+lineHeight*(linePos-1),13) else print(lineText,5,68/2+5+lineHeight*(line-1),13) end end -- for end -- drawTextBox() function getText(x,y) local blockX=HUD.mapX+x//sizeBlock local blockY=HUD.mapY+y//sizeBlock for num=1,#actionLocations.posX do if blockX==actionLocations.posX[num] and blockY==actionLocations.posY[num] then currentTextNr=actionLocations.textNr[num] end end -- for if(currentTextNr==8) then -- talking with story teller local offsetTextNr=0 if(alreadyVisitedStoryTeller) then offsetTextNr=5 else alreadyVisitedStoryTeller=true end if HUD.redMushrooms+HUD.blueMushrooms+HUD.greenMushrooms>=pocketCapacityLarge then if HUD.redMushrooms - 10 > HUD.greenMushrooms + HUD.blueMushrooms then currentTextNr=9+offsetTextNr elseif HUD.greenMushrooms - 10 > HUD.redMushrooms + HUD.blueMushrooms then currentTextNr=10+offsetTextNr elseif HUD.blueMushrooms - 10 > HUD.redMushrooms + HUD.greenMushrooms then currentTextNr=11+offsetTextNr else currentTextNr=12+offsetTextNr end else currentTextNr=8+offsetTextNr end end end -- getText(x,y) function processInput() if (mode=="walk") then player.vx=0 player.vy=0 if(btn(keyUp) and (isSolidTile(player.x,player.y-1)==false) and (isSolidTile(player.x+sizeBlock-1,player.y-1)==false)) then player.vy=-1*player.speed player.costume=playerWalkUp end if(btn(keyDown) and (isSolidTile(player.x,player.y+sizeBlock)==false) and (isSolidTile(player.x+sizeBlock-1,player.y+sizeBlock)==false)) then player.vy=player.speed player.costume=playerWalkDown end if(btn(keyLeft) and (isSolidTile(player.x-1,player.y)==false) and (isSolidTile(player.x-1,player.y+sizeBlock-1)==false)) then player.vx=-1*player.speed player.costume=playerWalkLeft end if(btn(keyRight) and (isSolidTile(player.x+sizeBlock,player.y)==false) and (isSolidTile(player.x+sizeBlock,player.y+sizeBlock-1)==false)) then player.vx=player.speed player.costume=playerWalkRight end if(btnp(keyZ)) then getText(player.x+sizeBlock/2,player.y+sizeBlock/2) if(currentTextNr>0) then mode="textbox" end end -- btnp(keyZ) elseif (mode=="textbox") then if(maxTextChoice>0) then if(btnp(keyUp)) and textChoice>1 then textChoice=textChoice-1 elseif(btnp(keyDown)) and textChoice=doNothingSpecial) then if (actionNr==doNothingSpecial) then -- do nothing elseif (actionNr==pickUpBasket) then HUD.maxHarvest=pocketCapacityLarge messagePocketsFullShown=false mset(5,22,tileFloor) actionLocations.posX[4]=-1 actionLocations.posY[4]=-1 currentTextNr=11 end -- after special action exit textbox textBlock=1 currentTextNr=0 mode="walk" else currentTextNr=actionRedirections[currentTextNr][textChoice] end textChoice=1 choicesAvailable=false else -- no more text to show textBlock=1 currentTextNr=0 mode="walk" textChoice=1 end if isEndText() then gameIsFinished=true end end -- btnp(keyZ) end -- mode end -- processInput() function isEndText() if currentTextNr==9 or currentTextNr==10 or currentTextNr==11 or currentTextNr==12 or currentTextNr==14 or currentTextNr==15 or currentTextNr==16 or currentTextNr==17 then return true else return false end end -- isEndText() function isSolidTile(x,y) return mget(HUD.mapX+x//sizeBlock,HUD.mapY+y//sizeBlock)30 then squirrel.direction=math.random(dirIdle,dirUpRight) squirrel.timer=0 end -- if if squirrel.direction==dirIdle then squirrel.costume=squirrelIdle elseif squirrel.direction==dirDownRight then if (isSolidTile(squirrel.x+sizeBlock+1,squirrel.y+sizeBlock+1)==false) and squirrel.x+sizeBlock+10 and squirrel.y+sizeBlock+10 and squirrel.y-1>0 then squirrel.x=squirrel.x-squirrelSpeed squirrel.y=squirrel.y-squirrelSpeed squirrel.costume=squirrelUp else squirrel.costume=squirrelIdle end elseif squirrel.direction==dirUpRight then if (isSolidTile(squirrel.x+sizeBlock+1,squirrel.y-1)==false) and squirrel.x+sizeBlock+10 then squirrel.x=squirrel.x+squirrelSpeed squirrel.y=squirrel.y-squirrelSpeed squirrel.costume=squirrelUp else squirrel.costume=squirrelIdle end end -- if end -- for end -- updateSquirrels() function collision(px,py,ox,oy) hitX=false hitY=false -- check if left or right side of player hit an object if (px>ox and pxox and px+sizeBlockoy and pyoy and py+sizeBlock0 then HUD.redMushrooms=HUD.redMushrooms-1 mushroomTakenBySquirrel=true elseif HUD.greenMushrooms>0 then HUD.greenMushrooms=HUD.greenMushrooms-1 mushroomTakenBySquirrel=true elseif HUD.blueMushrooms>0 then HUD.blueMushrooms=HUD.blueMushrooms-1 mushroomTakenBySquirrel=true end -- if if mushroomTakenBySquirrel then sfx(17,'C-5',15) if (firstMushroomAlreadyTakenBySquirrel==false) then firstMushroomAlreadyTakenBySquirrel=true currentTextNr=18 mode="textbox" end end end -- if else -- squirrel.hitPlayer==true squirrel.hitTimer=squirrel.hitTimer+1 if squirrel.hitTimer>60 then squirrel.hitPlayer=false squirrel.hitTimer=0 end -- if end -- if end -- for end -- checkForSquirrelCollisions() function playMusic() music(currentMusic) end -- playMusic() function drawEndScreen() map(0,0,blockScreenW,blockScreenH) print("= THE END =",66,41,15,false,2) print("= THE END =",65,40,12,false,2) print("Thanks for playing!",71,91,15) print("Thanks for playing!",70,90,12) end -- drawEndScreen()