0~%S+S_WOЋR6‡QџMƒvœџwЈџЃТУЧчVџЬЊ)­џџ№$џёш 0џџџџџџџџ2Tv˜КмўяЭЋ‰gE#2Tv˜Кмў2Tv˜Кмў`ююююююююююююююююююююююююююююююююЊџЏ ЊЊЊ ЇЊЊppppwwwwwwpЊww Њww њww њww њww ЊwwpЊwwwwwwwwwwwwwwwwwwpЊЊz ЊЊЊ њџЊwwЊwwЊ wwЏ wwЏ wwЏ wwЊ wwЊwwЊџџЊЊЊЊЊЇЊЊzpЊpp њwwpЊЊџЏ ЊЊЊ ЇЊЊЊЏ ppЏ wwЊwwpЊww њww њwwpЊpЊЊz ЊЊЊ њџЊwwЊwwЏ wwЊwwЇЊЊzЊЊЊЊЊџџЊww ww  wwp wwwwwwppwwwwwwwwЏ wwЊwwwwwwppwwwwwwwwwwwwwwwwwwwwwwwwwwwwpЊww њwwwwwwwwwwwwwwwwwwww ww  ww№ wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww'wwwwwww'wwwwwwwwwЊЊЊЊwwwwююююююююююююююююЊЊЊЊwwww""""""""""""""""""""""""""""""""rwww"""r"""r"""r"""r"""r"""r""""rwrw"r"r"r"r""""rwrw"r"r"r"r""""rwww"""r"""r""""rwww"""r"""r""""rwrw"r"r"r"r"r"r"r"r"r"r"r"r"""""""'"'ww"""r"""'"""'"'ww"""r"""'r'r''w'w"'"'"'"'"""""'"'""""""""rwww"""rr""rr""rr""rr""rrwwr""""rwww"""r"wwr""rr""rr""rr"""r""""ЏЊЊњЏЊЊњЏЊЊњЏЊЊњЏЊЊњЏЊЊњЏЊЊњЏЊЊњњџџџЇЊЊњЇЎъњЇЊЊњЇЊЊњЇЎъњЇЊЊњwwwЇњџџџЇЊЊњЇњџњЇЇњњЇЇњњЇwЇњЇЊЊњwwwЇЇЇњњЇЇњњЇЇњњЇЇњњЇЇњњЇЇњњЇЇњњЇЇњњџџџџЊЊЊЊџџџџЊЊЊЊЊЊЊЊwwwwЊЊЊЊwwwwР wwwwwwwwwwfwwwџїџяїЊџwџџww~чwwwwwwwfwwwџїџяїЊџwџџwчww~wwwwwwwwwwfwwwџїџяїЊџчџџ~wwwwwwwwwwwwwwfwwwџїџяїЊџwџџwwч~wwwwwwwwwwwfwwwџїџяїЊџwяџwwwwwwwwwwwwwwwwwfwwїџwwў№џїџЊwџџ~wчwwwwwwwwwfwwїџwwў№џїџЊwџџ~w~wwњЇwwwwwgfЛwfoЖwfffgffffffvwwwwwwwwwЇwwњџwwњџwЇњџЇњџЇЊџzїЊЊzwЏЊwwwwwwgfЛwfoЖwfffgffffffqwwww"чююЊююЊџчюЊџюwЊ*юwЊтюw*юютюююю.wююЂџю.ЊџюЂЊџюpwЊюwЊююpЊюю"ЂЊџЂЊџpwЊ*wЊтюp*юютюююююююююююююююююю.чююЂю.ЊџчЂЊџpwЊ*pwЊ*p™™  ™™  ™™ `pw wwwwwp™™  ™™  ™™ `pwwwнwwнџwзџнw§нwзпwwзпww§}ww§}wwнwwwџнwwнџ}wwнпwзџ§}зџ§}wнзпwwзпwwзнwз§џw§пнзп}wзпwз§}wз§}ww§}ww}wwwп}ww§пwwн§}wџ§}wџнпwнзпwwзпw`fЛfhЖfff`ffffffџ№џџ№џ№џџ№џ№№№џ№џџџ№џџ№§}ww§}wwзп}wзппww§нwwзџнwwнџwwwнwwзпwwзпww§}ww§}wнпwнџ}wџнwwнwww§}wwзпзwзп§}w§пнwз§џwwзнwwwwwwwwwзпww§}wз§}w§пwwп}ww}wwwwwwwwwwwwwwfafaі aіfa wwwwwwwpwwopwwowwfwwfwwwwwwннwнџџзџннзпw§§}w§§}wз§}ww§}}wwwwwнwwwџ}wwџ}wwппwwнпwwзпwwзпwwwwwffaffffffff`fff`ffffffwwwwwwwpwwfpwwfwwfwwfwwfwwfw!wwwwwwwwwwwwwwwwwwpww!pwwwwwwwwwwwwwwwwwwwwwwwwwзппwзџннwнџџwwннwwwwwwwwwwwwwwww§}wwџ}wwнwwwwwwwwwwwwwwwwwwwwwwwffwwwwwwwwwwwwwwwwwwwpwwpwwwwwwwwwwwwwwwwwwwwwwwww€                                                                                                    """"                                  ""                !! !                  !       ""    """""   ""  ""   !!!      !            ""                                                                                                                                                                      """  """   !                !                   !                !                 !             !              """"""""""" ""     """"                                                                                                           "                                                                                                                                                                                                                                                                                               !                                            !         !       !          !        !                                            | 0!0! ""##$$%%&'()*+,-.////////}@MO L F  Š \&T/S/S/B/C////////////////////////љ№p№p№œ№œ№ŒёŒђЬѓ|є|ѕ|і|ї|ј|њ|ќ|џџџџџџџџџџџџџџџz@№p№p№|№Œ№ŒёŒёЬё|ђ|ђ|ђ|ѓ|є|є|є|ѕ ѕ ѕ і ї ј ј љ њ ќ § џ џ џ џ `  € ‡%~) ,-.../////////////////////‹№p№p№|№Œ№ŒёŒёЬё|ђ|ђ|ђ|ѓ|є|є|є|ѕ ѕ ѕ і ї ј ј љ њ ќ § џ џ џ џ `#4W|ёудЗŒƒ   @  Š @#Р?џџџџџџџџџџџџџџџџџџпннн§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџЊЊЊЊЊЊЊџџџџџџџџџџџџџџџџџџЏЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊџџџџџџџџџџџџџџџџџџпннн§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџЏЊЊЊЊЊЊЊњџџџџџџџџџџџџџџџџџЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊџџџџџџџџџџџџџџџџџџннннџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџЏЊЊЊЊЊЊЊњџџџџџџџџџџџџџџџџџЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊџџџџџџџџџџџџџџџџџпннннџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџЏЊЊЊЊЊЊЊЊџџџџџџџџџџџџџџџџЏЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊџџџџџџџџџџџџџџџџџнннннџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџЏЊЊЊЊЊЊЊЊњџџџџџџџџџџџџџџџЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊџџџџџџџџџџџџџџџџпнннн§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџЊЊЊЊЊЊЊЊЊњџџџџџџџџџџџџџџџЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊџџџџџџџџџџџџџџџџннннн§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџЊЊЊЊЊЊЊЊЊЊџџџџџџџџџџџџџџЏЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊџџџџџџџџџџџџџџџпннннн§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџЏЊЊЊкЊЊЊЊкн§џџџџџџџџџџџџџЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊџџџџџџџџџџџџџџџнннннн§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџЏЊЊЊЊнннннннџџџџџџџџџџџџЏЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊџџџџџџџџџџџџџџннннннн§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџЊЊЊЊЊннннЊЊЊЊџџџџџџџџџџЏЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊџџџџџџџџџџџџџпннннннн§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџЏЊЊЊЊЊкн­ЊЊЊЊЊњџџџџџџџџџЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊџџџџџџџџџџџџпнннннннн§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџЏЊЊЊЊЊЊ­ЊЊЊЊЊЊЊњџџџџџџџЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊџџџџџџџџџџџпннннннннн§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊџџџџЏЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊ`f`f`f``f``f`f``f`f`f``f``f`f``f`f`ff``fff`ff`f``fff`ff`ff``f``ff`ff`ff`ffff`f`ff``fff`ff`f``fff`ff`ff``f``ff`ff`ff`ffff`f№џџџџ№ёџ№џё№џ№№џ№џё№џёџ№џџџџ№џ№№ёџ№ёџ№џёџёџ№џ№џџџџ№ёџ№џё№џ№№џ№џё№џёџ№џџџџ№џ№№ёџ№ёџ№џёџёџ№џ`faf``f`f`aff`f`f`ff`faf`f``ffff`ffff`ff`f`faf``f`f`aff`f`f`ff`faf`f``ffff`ffff`ff`f`faafffaffa`f`faff`faaffafafaffaff`f`faafffaffa`f`faff`faaffafafaffaff`fнннннннннннннннннџџџџџџџџџџџџџџ`ff`ffннннннннннннннннннннннннннннннннннннннџџџџџџџџџџџџџџџџџџџџџЊЊ`ffЊ`ffЊннннннннннннннннннннннннннннннннн§џџџннџџџџџџџџџџџџџџџџџџџџџЊЊЊЊн­ЊнннннннннннннннннннннннннннннџџџџџџпнннннннџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџЊЊЊЊЊЊЊЊЊкннЊЊЊЊЊЊЊЊЊЊЊкннннннннннннннннннннннннннџџџџџџџџпнннннн§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџЊЊЊЊЊЊЊЊЊкнЊЊЊЊЊЊЊЊЊЊЊЊЊкннннннннннннн­нннннннннн§џџџџџџџџџннннџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊн­ЊЊЊЊЊЊЊЊЊЊЊЊЊЊннннннннннннн­ннннннннн§џџџџџџџџџџџнџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊ­ЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊнннннннннннн­нннннннннџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊкнннннннннннЊнннннннннџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊннннннннннЊЊнннннннн§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊкнннннннн­ЊЊннннннннџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊннннннн­ЊЊЊннннннннџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊкннннннЊЊЊЊннннннн§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџн­ЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊннннн­ЊЊЊЊннннннн§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпннЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊнннннЊЊЊЊЊннннннн§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпнн­ЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊкннн­ЊЊЊЊЊннн§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпнннЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊнннЊЊЊЊЊЊЊ§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпннн­ЊЊЊЊЊЊЊЊЊ­ЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊнн­ЊЊЊЊЊЊњџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџннннн­ЊЊЊЊЊЊЊнЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊкнЊЊЊЊЊЊЊџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџнннннннЊЊЊЊкннЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊк­ЊЊЊЊЊЊЊџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџннннннннннннннЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊк­ЊЊЊЊЊЊЊџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпннннннннннннн­ЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпннннннннннннн­ЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџнннннннннннннн­ЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџннннннннннннннЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпннннннннннннннЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџнннннннннннннннЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпнннннннннннннннЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпнннннннннннннннЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџннннннннннннннннЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпннннннннннннннннЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџнннннннннннннннннЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпнннннннннннннннннЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпннннннннннннннннннЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџнннннннннннннннннннЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпннннннннннннннннннн­ЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпнннннннннннннннннннн­ЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпџџџџџџџџџџџџпннннннннннннннннннннн­ЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпн§џџџџџџџџџннннннннннннннннннннннннЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџнннн§џџџџџннннннннннннннннннннннннннЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџннннннннннннннннннннннннннннннннннннЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџнннннннннннннннннннннннннннннннннннн­ЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпннннннннннннннннннннннннннннннннннн­ЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџннннннннннннннннннннннннннннннннннннЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпннннннџџџџџпннннннннннннннннннннннн­ЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊ­ЊЊЊЊЊЊЊЊЊџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпннннџџџџџџџџџпннннннннннннннннннннн­ЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊ­ЊЊЊЊЊЊЊЊЊџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџнннџџџџџџџџџџџпнннннннннннннннннннннЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊкнџџџџџЏЊЊЊџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџннџџџџџџџџџџџџџпнннннннннннннннннннн­ЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊ§џџџџџџџџЊЊџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпџџџџџџџџџџџџџџџпннннннннннннннннннннЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊџџџџџџџџџџџЏџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџнннннннннннннннннннн­ЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџннннннннннннннннннннЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊЊњџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпннннннннннннннннннн­ЊЊЊЊЊЊЊЊЊЊЊЊЊЊњџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџнннннннннннннннннннн­ЊЊЊЊЊЊЊЊЊЊЊЊЊџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпннннннннннннннннннннЊЊЊЊЊЊЊЊЊЊЊЊњџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџнннннннннннннннннннннЊЊЊЊЊЊЊЊЊЊЊџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпннннннннннннннннннннн­ЊЊЊЊЊЊЊЊ§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпннннннннннннннннннннннЊЊЊЊЊкнџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџнннннннннннннннннннннннннннн§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџннннннннннннннннннннннннннн§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџнннннннннннннннннннннннннџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпнннннннннннннннннннннн§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџнџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџннннннннннннннннннннн§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпнннџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџннннннннннннннннннннџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџнннннннн§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпнннннннннннннннннннџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџннннннннн§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпннннннннннннннннннџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпннннннннн§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџннннннннннннннннн§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпнннннннннн§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпнннннннннннннннн§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпннннннннннннџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџнннннннннннннннн§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџ§џџџџннннннннннннннџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпнннннннннннннннџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпннннннннннннннннннн§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџнннннннннннннннџџџџџџџџџџџџџџџџџџџџџџџџџџџџџнннннннннннннннннннн§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпннннннннннннннџџџџџџџџџџџџџџџџџџџџџџџџџџџџџнннннннннннннннннннннџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпннннннннннннннџџџџџџџџџџџџџџџџџџџџџџџџџџџџпнннннннннннннннннннннџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџннннннннннннннџџџџџџџџџџџџџџџџџџџџџџџџџџџџнннннннннннннннннннннн§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпнннннннннннннџџџџџџџџџџџџџџџџџџџџџџџџџџџпнннннннннннннннннннннннџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпнннннннннннннџџџџџџџџџџџџџџџџџџџџџџџџџџџнннннннннннннннннннннннн§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџнннннннннннннџџџџџџџџџџџџџџџџџџџџџџџџџџннннннннннннннннннннннннннџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџнннннннннннннџџџџџџџџџџџџџџџџџџџџџџџџџпнннннннннннннннннннннннннн§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџнннннннннннннџџџџџџџџџџџџџџџџџџџџџџџџџннннннннннннннннннннннннннннџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпннннннннннннџџџџџџџџџџџџџџџџџџџџџџџџннннннннннннннннннннннннннннн§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпнннннннннннн§џџџџџџџџџџџџџџџџџџџџџџннннннннннннннннннннннннннннннн§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпнннннннннннн§џџџџџџџџџџџџџџџџџџџџпннннннннннннннннннннннннннннннннн§џџџџџџџџџџ§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџнннннннннннн§џџџџџџџџџџџџџџџџџџџнннннннннннннннннннннннннннннннннннн§џџџџџџџџн§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџнннннннннннннџџџџџџџџџџџџџџџџџџџнннннннннннннннннннннннннннннннннннннн§џџџџннннџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџнннннннннннннџџџџџџџџџџџџџџџџџџџнннннннннннннннннннннннннннннннннннннннннннннннџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџнннннннннннннџџџџџџџџџџџџџџџџџџџннннннннннннннннннннннннннннннннннннннннннннннн§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџннннннннннннн§џџџџџџџџџџџџџџџџџџннннннннннннннннннннннннннннннннннннннннннннннн§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџннннннннннннн§џџџџџџџџџџџџџџџџџџннннннннннннннннннннннннннннннннннннннннннннннннџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџннннннннннннннџџџџџџџџџџџџџџџџџџннннннннннннннннннннннннннннннннннннннннннннннннџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџнннннннннннннн§џџџџџџџџџџџџџџџџџнннннннннннннннннннннннннннннннннннннннннннннннн§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџнннннннннннннн§џџџџџџџџџџџџџџџџџнннннннннннннннннннннннннннннннннннннннннннннннннџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџнннннннннннннннџџџџџџџџџџџџџџџџџнннннннннннннннннннннннннннннннннннннннннннннн§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџннннннннннннннн§џџџџџџџџџџџџџџџџнннннннннннннннннннннннннннннннннннннннннннннџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпннннннннннннннннџџџџџџџџџџџџџџџџннннннннннннннннннннннннннннннннннннннннннн§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпнннннннннннннннн§џџџџџџџџџџџџџџџЊџЏ ЊџЏ ЊџЏ ЊџЏ ЊџЏ ЊџЏ ЊџЏ ЊџЏ ЊџЏ ЊџЏ ЊџЏ ЊџЏ ЊџЏ ЊџЏ ЊџЏ ЊџЏ ЊџЏ ЊџЏ ЊџЏ ЊџЏ ЊџЏ ЊџЏ ЊџЏ ЊџЏ ЊџЏ ЊџЏ ЊџЏ ЊџЏ ЊџЏ ЊџЏ ЊЊЊ ЊЊЊ ЊЊЊ ЊЊЊ ЊЊЊ ЊЊЊ ЊЊЊ ЊЊЊ ЊЊЊ ЊЊЊ ЊЊЊ ЊЊЊ ЊЊЊ ЊЊЊ ЊЊЊ ЊЊЊ ЊЊЊ ЊЊЊ ЊЊЊ ЊЊЊ ЊЊЊ ЊЊЊ ЊЊЊ ЊЊЊ ЊЊЊ ЊЊЊ ЊЊЊ ЊЊЊ ЊЊЊ ЊЊЊ ЇЊЊЇЊЊЇЊЊЇЊЊЇЊЊЇЊЊЇЊЊЇЊЊЇЊЊЇЊЊЇЊЊЇЊЊЇЊЊЇЊЊЇЊЊЇЊЊЇЊЊЇЊЊЇЊЊЇЊЊЇЊЊЇЊЊЇЊЊЇЊЊЇЊЊЇЊЊЇЊЊЇЊЊЇЊЊЇЊЊppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww"Т-- title: Nao vire nugget! [ENG] -- author: Moiko -- desc: Rescue your lost eggs, while you try to not fry to you death! -- script: lua -- saveid: MoikoNugget -- version: 2 --[[ This game code is a mess! the game was been made for a game jam so i was on a rush, srry! <3 ]] --organizations vars timer = false dirx={0, 0,-1, 1,-1,-1, 1, 1} diry={-1,1, 0, 0, -1,1, -1,1} pi=math.pi pi2=pi*2 min=math.min max=math.max sin=math.sin cos=math.cos rdm=math.random sqrt=math.sqrt flr=math.floor ceil=math.ceil abs=math.abs atan2=math.atan2 smoll = 0.00001 board = false screen = { w = 240, h = 136 } emojof = { [305] = -3, [306] = -3, [307] = -3 } lvlCol = { {2,7,10}, {5,11,14} } pops = { intro = { 'Arrow keys to move', '', 'Press "up" near a sign to read it', '', 'Press "R" to try again' }, tut1 = { 'Prees "Z" to jump!' }, tut2 = { 'Hold "Z" to jump higher.' }, l2t1 = { 'Jump when touching a wall to perform', 'a wall jump.' }, l3t1 = { 'Try sliding down these walls!' }, l3t2 = { 'Press "R" to try again.' }, l5t1 = { 'This pepper is really hot!', "i won't eat it if i was you, i heard", "this pepper is so hot, that it sets", "you in fire instantly,", "you'd better run very fast if you", 'end up eating it!' }, l5t2 = { 'I heard that if you press "R" you can', 'try again.', '', 'I have no idea what does this mean.' }, l9t1 = { 'This wood box right there is', 'extremely weak, i think even a little', 'fire could cause a big damage on it.' }, l12t1 = { 'Press pause ("S") and then use the', 'arrow keys to visualize the entire', 'level.' }, l13t1 = { 'This water is very cold, good to', '"cool" down your head, i guess...', '(Press "R" to try again)' }, l15t1 = { 'Those green things? Apparently', 'they are an attempt of the dev to', 'make leaves...', '', 'The important thing is that they are', 'extremely weak and burn very', 'quickly.' }, l16t1 = { 'I would recommend pressing "S" and', 'using the arrow keys to see the', 'entire level.' }, l17t1 = { 'This is way easier than it looks,', 'just stay focused to jump as high as', 'possible (holding "Z") and '.."don't", 'stop holding right' }, l18t1 = { 'You will need a big fall, if you want', 'that egg down there.' }, l20t1 = { "I think you'd better keep an eye on", 'your time down below' }, outro = { "That's it, this is the end!", 'I know it was an unexpected ending,', 'but i ran out of time lol.', '', 'Thx for playing <3', '(You unlocked the SPEEDRUN TIMER)' } } lvl = 1 lvlData = { --lvl1 { pos = {0,0,0,0}, mobs = { {'item','egg',25,6}, {'sign',pops.tut1,8,11}, {'sign',pops.tut2,13,10}, {'player',3,0} } }, --lvl2 { pos = {30,0,0,0}, mobs = { {'item','egg',49,5}, {'sign',pops.l2t1,45,13}, {'player',41,13} } }, --lvl3 { pos = {60,0,0,0}, mobs = { {'item','egg',72,8}, {'sign',pops.l3t1,75,3}, {'sign',pops.l3t2,80,14}, {'player',74,3} } }, --lvl4 { pos = {90,0,0,0}, mobs = { {'item','egg',106,5}, {'player',103,9} } }, --lvl5 { pos = {120,0,0,0}, mobs = { {'item','egg',145,8}, {'item','pepper',124,7}, {'sign',pops.l5t1,124,9}, {'sign',pops.l5t2,130,14}, {'player',129,9} } }, --lvl6 { pos = {150,0,0,0}, mobs = { {'item','egg',177,3}, {'item','pepper',152,11}, --{'sign',pops.l6t1,163,13}, {'player',152,13} } }, --lvl7 { pos = {180,0,0,0}, mobs = { {'item','egg',204,5}, {'item','pepper',184,12}, {'player',181,13} } }, --lvl8 { pos = {210,0,0,0}, mobs = { {'item','egg',237,2}, {'item','pepper',212,11}, {'player',228,6} } }, --lvl9 { pos = {0,17,0,0}, mobs = { {'box',12,24,6,4}, {'item','egg',19,29}, {'item','pepper',24,22}, {'sign',pops.l9t1,10,23}, {'player',5,23} } }, --lvl10 { pos = {30,17,0,0}, mobs = { {'item','egg',55,30}, {'item','pepper',48,20}, {'spike',48,31,4,5}, {'spike',41,31,4,2}, {'spike',36,31,4,2}, {'spike',39,21,4,2}, {'spike',45,21,4,2}, {'spike',42,19,3,2}, {'player',44,31} } }, --lvl11 { pos = {90,17,0,0}, mobs = { {'box',104,20,3,1}, {'box',92,23,17,2}, {'box',95,28,22,4}, {'item','egg',111,24}, {'item','pepper',105,18}, {'spike',97,25,4,12}, {'spike',92,25,4,3}, {'spike',95,32,4,22}, {'player',101,19} } }, --lvl12 { pos = {120,17,30,0}, mobs = { {'box',121,23,5,3}, {'box',132,28,6,3}, {'box',141,26,6,3}, {'box',150,28,6,3}, {'box',158,30,6,3}, {'box',167,26,3,3}, {'box',159,22,3,4}, {'item','egg',176,21}, {'item','pepper',123,20}, {'spike',151,22,2,4}, {'spike',166,24,2,2}, {'spike',170,24,1,2}, {'spike',152,21,4,7}, {'spike',159,22,1,4}, {'spike',121,26,3,5}, {'sign',pops.l12t1,126.5,22}, {'player',123,22} } }, --lvl13 { pos = {180,17,0,0}, mobs = { {'box',192,25,3,3}, {'box',195,25,3,3}, {'box',198,25,3,3}, {'box',201,25,3,3}, {'water',182,28,5,3}, {'item','egg',203,21}, {'item','pepper',190,26}, {'sign',pops.l13t1,190,27}, {'player',188,27} } }, --lvl14 { pos = {210,17,0,0}, mobs = { {'box',218,27,9,1}, {'box',224,29,9,1}, {'water',229,24,6,2}, {'water',216,24,6,2}, {'item','egg',225,31}, {'item','pepper',214.5,22}, {'item','pepper',235.5,22}, {'spike',224,26,4,3}, {'spike',224,28,4,3}, {'spike',221,27,4,3}, {'spike',227,29,4,3}, --{'spike',214,32,4,4}, --{'spike',233,32,4,4}, {'player',222.5,23} } }, --lvl15 { pos = {0,34,0,0}, mobs = { {'grass',4,41,1,6}, {'grass',7,45,3,3}, {'grass',12,43,3,3}, {'grass',17,41,3,3}, {'grass',22,39,3,3}, {'item','egg',27,35}, {'item','pepper',2,44}, {'spike',25,37,2,14}, {'spike',5,34,1,7}, {'spike',5,41,1,6}, {'spike',5,47,1,4}, {'sign',pops.l15t1,2.5,46}, {'player',2,46} } }, --lvl16 { pos = {30,34,30,0}, mobs = { {'grass',39,41,2,4}, {'grass',74,41,3,4}, {'grass',77,45,9,3}, {'box',41,45,2,2}, {'box',43,45,2,2}, {'box',45,45,2,2}, {'box',47,45,2,2}, {'box',49,45,2,2}, {'box',51,45,2,2}, {'box',53,45,2,2}, {'box',55,45,2,2}, {'box',57,45,2,2}, {'box',59,45,2,2}, {'box',61,45,2,2}, {'box',63,45,2,2}, {'box',65,45,2,2}, {'box',67,45,2,2}, {'box',69,45,2,2}, {'water',31,45,5,3}, {'item','egg',87,43}, {'item','pepper',37,42}, {'spike',77,45,1,6}, {'spike',85,45,2,6}, {'sign',pops.l16t1,37.5,44}, {'player',37,44} } }, --lvl17 { pos = {60,17,0,0}, mobs = { {'box',77,21,3,8}, {'item','egg',78,18}, {'item','pepper',72,30}, {'spike',70,17,1,16}, {'spike',80,21,2,8}, {'sign',pops.l17t1,75,29}, {'player',72,32} } }, --lvl18 { pos = {90,34,0,17}, mobs = { {'grass',109,52,1,3}, {'grass',101,39,8,3}, {'water',101,55,8,12}, {'water',97,60,4,7}, {'item','egg',94,58}, {'item','pepper',110,53}, {'spike',101,36,1,10}, {'spike',108,39,2,7}, {'spike',108,49,2,3}, {'spike',108,52,2,3}, {'spike',101,49,1,3}, --{'spike',94,54,4,5}, --{'spike',113,48,4,2}, {'sign',pops.l18t1,112.5,54}, {'player',112,54} } }, --lvl19 { pos = {120,34,0,0}, mobs = { {'box',123,48,14,3}, {'box',120,40,2,6}, {'box',126,42,6,3}, {'box',135,40,3,2}, {'grass',145,34,1,16}, --{'grass',126,34,6,8}, {'item','egg',147,48}, {'item','pepper',143,47}, {'spike',144,39,2,11}, --{'spike',125,37,2,5}, {'spike',125,42,2,3}, {'spike',126,45,3,6}, {'spike',132,42,1,3}, {'player',143,49} } }, --lvl20 { pos = {150,34,0,0}, mobs = { {'item','egg',176.5,46.5}, {'item','pepper',155,46.5}, {'bub',-3,160,46.5}, {'bub',-3,167.5,46.5}, {'bub',-3,174.5,46.5}, {'spike',170,38,4,3}, {'sign',pops.l20t1,157.5,47}, {'player',153,47} } }, --lvl21 { pos = {180,34,0,0}, mobs = { {'item','egg',207.5,41.5}, {'item','pepper',183.5,41.5}, {'bub',-1,187.5,39.5}, {'bub',-9,187.5,41.5}, {'bub',-1,191.5,39.5}, {'bub',-9,191.5,41.5}, {'bub',-9,195.5,39.5}, {'bub',-1,195.5,41.5}, {'bub',-1,199.5,39.5}, {'bub',-9,199.5,41.5}, {'bub',-9,203.5,39.5}, {'bub',-1,203.5,41.5}, {'player',181.5,42} } }, --lvl22 { pos = {210,34,0,0}, mobs = { {'grass',221,35,1,7}, {'grass',215,47,2,2}, {'item','egg',213,47}, {'item','pepper',223.5,47.5}, {'bub',-9,220.5,47.5}, {'spike',225,37,4,5}, {'spike',226,41,4,3}, {'spike',222,40,1,2}, {'player',218,48} } }, --lvl23 { pos = {0,51,0,0}, mobs = { {'item','egg',25,54}, {'item','pepper',5.5,64.5}, {'bub',-8,7.5,64.5}, {'bub',9,9.5,57.5}, {'spike',18,65,4,2}, {'spike',13,64,3,3}, {'spike',22,64,3,3}, {'player',3,65} } }, --lvl24 { pos = {30,51,0,0}, mobs = { {'sign',pops.outro,52,63}, {'player',37,63} } }, --lvl3 { pos = {0,0,0,0}, mobs = { {'box',4,4,1,1}, --{'box',9,4,8,2}, {'water',13,11,11,5}, {'water',10,13,3,3}, {'item','egg',4,1}, {'item','pepper',6,9}, {'item','pepper',5,10}, {'spike',12,4,1,5}, {'player',4,3} } } } -- #TABLES# -- setBurnT = 10 waterPal = {2,13,15} firePal = {14,9,6,4,1} cam = { goalX = 0, goalY = 0, x = 0, y = 0, rx = 0, ry = 0 } function fgRemap(tile,x,y) local outTile = tile if fget(tile,1) then outTile = 0 end return outTile,0,0 end function bgRemap(tile,x,y) local outTile = tile if fget(tile,1) == false then outTile = 0 end return outTile,0,0 end function round(am) if am - flr(am) < 0.5 then return flr(am) else return ceil(am) end end function lerp(x,g,m) return (x - g) * m + g end function drdm(min,max) return rdm()*(max-min)+min end function texquad(sx,sy,sw,sh,dx,dy,dw,dh,flip,color) --adjust the spr size if dw==nil then dw=sw end if dh==nil then dh=sh end --flip vertically if flip==1 or flip==3 then sx=sx+sw-0.1 sw=sw*-1 end --flip horizontally if flip==2 or flip==3 then sy=sy+sh-0.1 sh=sh*-1 end --floor the result (for no visual glitch) dx=flr(dx) dy=flr(dy) --draw the sspr textri(dx,dy,dx+dw,dy,dx,dy+dh,sx,sy,sx+sw,sy,sx,sy+sh,false,color) textri(dx+dw,dy+dh,dx,dy+dh,dx+dw,dy,sx+sw,sy+sh,sx,sy+sh,sx+sw,sy,false,color) end function sizee(s, x, y, col, fix, size, smol) local txt = '' local emoji = false local emojis = 0 local x, y, col, fix, size, smol = x or 0, y or 0, col or 15, fix or false, size or 1, smol or false for i = 1, #s do l = string.sub(s,i,i) if emoji then if tonumber(l) == nil or l == ' ' then emoji = false end end if emoji == false then if l == '#' then emojis = emojis + 1 emoji = true else txt = txt .. l end end end return print(txt,-9999,-9999,col,fix,size,smol) + emojis * 8 end function eprint(out, s, x, y, col, fix, size, smol) local x, y, col, fix, size, smol = x or 0, y or 0, col or 15, fix or false, size or 1, smol or false local l for i = 1,#s do l = string.sub(s,i,i) if l == '#' then for o = i + 1, #s + 1 do local num = tonumber(string.sub(s, i + 1, o)) if num == nil or string.sub(s,o,o) == ' ' or o > #s then if out ~= nil then for op = 1, 8 do print(string.sub(s,1,i - 1),x + dirx[op],y + diry[op],out,fix,size,smol) end end local len = print(string.sub(s,1,i - 1),x,y,col,fix,size,smol) if out ~= nil then palall(out) for op = 1, 8 do spr(tonumber(string.sub(s, i + 1, o - 1)), len + x + dirx[op], y - 1 * size + diry[op], 0, size) end pal() end local off = (emojof[tonumber(string.sub(s, i + 1, o - 1))] or 0) if off ~= 0 then pal(15,col) end spr(tonumber(string.sub(s, i + 1, o - 1)), len + x, y - 1 * size, 0, size) pal() eprint(out, string.sub(s, o, #s), x + len + 9 * size + off * size, y, col, fix, size, smol) return end end end end if out ~= nil then for op = 1, 8 do print(s,x + dirx[op],y + diry[op],out,fix,size,smol) end end print(s, x, y, col, fix, size, smol) end function sspr(id,x,y,sx,sy,dx,dy,flip,color) local id=flr(id) texquad((id%16)*8,(id//16)*8,sx,sy,x,y,dx,dy,flip,color) end function pal(c0,c1) if(c0==nil and c1==nil) then for i=0,15 do poke4(0x3FF0*2+i,i) end else poke4(0x3FF0*2+c0,c1) end end function palall(c1) for i=0,15 do poke4(0x3FF0*2+i,c1) end end function exp(x,y,spd,fric,pol,ang) local p = { x = x, y = y, r = 0, fric = fric, spd = spd, pol = pol, } p.ang = (ang or rdm()*pi2) table.insert(exps, p) end function updExp() for i=#exps,1,-1 do local p = exps[i] p.r = p.r + p.spd p.spd = p.spd * p.fric if p.spd < 0.025 then table.remove(exps,i) end end end function drwExp() --local deg = 8 local thicc = 3 for i,p in pairs(exps) do for i=1,p.pol do local ang = pi2/p.pol*i + p.ang local ang2 = ang + pi2/p.pol local x,y = sin(ang) * p.r + p.x - cam.rx, cos(ang) * p.r + p.y - cam.ry local x2,y2 = sin(ang2) * p.r + p.x - cam.rx, cos(ang2) * p.r + p.y - cam.ry --line(x,y,x2,y2,0) local offx = sin(ang)*p.spd*thicc local offy = cos(ang)*p.spd*thicc local offx2 = sin(ang2)*p.spd*thicc local offy2 = cos(ang2)*p.spd*thicc tri(x+offx,y+offy,x2+offx2,y2+offy2,x-offx,y-offy,15) tri(x2-offx2,y2-offy2,x-offx,y-offy,x2+offx2,y2+offy2,15) line(x-offx,y-offy,x2-offx2,y2-offy2,13) --pix(x+math.sin(ang)*p.spd*4,y+math.cos(ang)*p.spd*4,0) end end end function addPar(x,y,r,t,pol,col,xv,yv,fric) local p = { x = x + drdm(0,0.999), y = y + drdm(0,0.999), xv = (xv or 0), yv = (yv or 0), fric = (fric or 0), r = r, t = t, startT = t, a = drdm(0,pi2), pol = pol, col = col } table.insert(par, p) end function addFire(fg,x,y,r,t,pol,xv,yv,fric) local f = { x = x + drdm(0,0.999), y = y + drdm(0,0.999), xv = (xv or 0), yv = (yv or 0), fric = (fric or 0), r = r, t = t, startT = t, a = drdm(0,pi2), pol = pol } if fg then table.insert(fire.fg, f) else table.insert(fire.bg, f) end end function updPar() for i = #par, 1, -1 do local pa = par[i] pa.t = pa.t - 1 if pa.t <= 0 then table.remove(par,i) else pa.x = pa.x + pa.xv pa.y = pa.y + pa.yv pa.xv = pa.xv * pa.fric pa.yv = pa.yv * pa.fric end end end function updFire() for i = #fire.fg, 1, -1 do local f = fire.fg[i] f.t = f.t - 1 if f.t <= 0 then table.remove(fire.fg,i) else f.x = f.x + f.xv f.y = f.y + f.yv f.xv = f.xv * f.fric f.yv = f.yv * f.fric end end end function popup(txt) popa = { t = 0, close = false, maxT = 10 } sfx(8) pop = true popTxt = txt end function updPopup() if not popa.close and popa.t == popa.maxT then if keyp() then popa.close = true sfx(9) else for i = 0, 7 do if btnp(i) then sfx(9) popa.close = true break end end end end if popa.close then popa.t = popa.t - 1 if popa.t <= 0 then pop = false end else popa.t = min(popa.maxT,popa.t + 1) end end function drwPopup() local mult = sin(popa.t/popa.maxT*(pi/2)) local pSize = round(7*mult)+1 for x = 0,screen.w,pSize do for y = 0,screen.h,pSize do rect(x,y,pSize,pSize,pix(x+pSize//2,y+pSize//2)) end end local w = screen.w-32 local h = (#popTxt*8+8) local hh = (h*mult or 0) local y = screen.h//2-h//2 local yy = screen.h//2-hh//2 rect(24,yy+8,w,hh,0) rect(16,yy,w,hh,9) rectb(15,yy-1,w+2,hh+2,0) rectb(16,yy,w,hh,15) rectb(17,yy+1,w-2,hh-2,15) rectb(18,yy+2,w-4,hh-4,15) clip(0,yy+3,screen.w,hh-6) rect(19,yy+3,w-6,2,6) for i = 1, #popTxt do eprint(0, popTxt[i],21,y+(i-1)*8+5,15) end clip() end function updSign() for i = #sign, 1, -1 do local si = sign[i] if p.col.bottom and aabb(round(p.x),round(p.y),p.w,p.h,si.x,si.y,si.w,si.h) then si.col = true else si.col = false end if si.col and bt.upp then popup(si.txt) end end end function updBgFire() for i = #fire.bg, 1, -1 do local f = fire.bg[i] f.t = f.t - 1 if f.t <= 0 then table.remove(fire.bg,i) else f.x = f.x + f.xv f.y = f.y + f.yv f.xv = f.xv * f.fric f.yv = f.yv * f.fric end end end function updSpike() for i = #spike, 1, -1 do local s = spike[i] local hit = true if diry[s.dir] ~= 0 then if diry[s.dir] == -1 then hit = p.xv <= 0 else hit = p.xv >= 0 end else if dirx[s.dir] == -1 then hit = p.yv <= 0 else hit = p.yv >= 0 end end if hit and aabb(round(p.x),round(p.y),p.w,p.h,s.x,s.y,s.w,s.h) then dedPlayer() end end end function updItem() if p.alive then for i = #item, 1, -1 do local b = item[i] if aabb(round(p.x),round(p.y),p.w,p.h,b.x,b.y,8,8) then -- --exp(b.x+rdm(4,5),b.y+rdm(4,5),4,0.8,60) if b.type == 'egg' then exp(b.x+rdm(4,5),b.y+rdm(4,5),8,0.8,16) gg() table.remove(item,i) else if not p.onFire then exp(b.x+rdm(4,5),b.y+rdm(4,5),2,0.8,16) --peppers = peppers + 1 sfx(6) eat() table.remove(item,i) end end end end end end function drwPar() for i, pa in pairs(par) do local r = pa.t/pa.startT*pa.r --circ(pa.x,pa.y,r,15) for i = 1, pa.pol do local ang = (pi2/pa.pol)*i + pa.a local ang2 = ang + pi2/pa.pol local x1 = pa.x+sin(ang)*r-cam.rx local y1 = pa.y+cos(ang)*r-cam.ry local x2 = pa.x+sin(ang2)*r-cam.rx local y2 = pa.y+cos(ang2)*r-cam.ry --pix(pa.x+sin(ang)*r,pa.y+cos(ang)*r,pa.col) --line(pa.x+sin(ang)*r,pa.y+cos(ang)*r,pa.x+sin(ang2)*r,pa.y+cos(ang2)*r,pa.col) tri(pa.x-cam.rx,pa.y-cam.ry,x1,y1,x2,y2,pa.col) end end end function drwFire() for i, f in pairs(fire.fg) do local r = sin(f.t/f.startT*pi)*f.r --circ(pa.x,pa.y,r,15) for i = 1, f.pol do local ang = (pi2/f.pol)*i + f.a local ang2 = ang + pi2/f.pol local x1 = f.x+sin(ang)*r-cam.rx local y1 = f.y+cos(ang)*r-cam.ry local x2 = f.x+sin(ang2)*r-cam.rx local y2 = f.y+cos(ang2)*r-cam.ry --pix(pa.x+sin(ang)*r,pa.y+cos(ang)*r,pa.col) --line(pa.x+sin(ang)*r,pa.y+cos(ang)*r,pa.x+sin(ang2)*r,pa.y+cos(ang2)*r,pa.col) local val = flr(f.t/f.startT*(#firePal))+1 local col = firePal[#firePal - val+1] tri(f.x-cam.rx,f.y-cam.ry,x1,y1,x2,y2,col) end end end function drwHud() if p.alive and not win and not exi then --[[local x = screen.w / 2 - (peppers/2)*8 for i = 1,peppers do local px = x+i*8-8 palall(0) for l = 1,8 do spr(275,px+dirx[l]*1,diry[l]*1+1,7) end pal() spr(275,px,1,7) end]] --print(p.burnT) -- if tran==nil and timer then local o = (pmem(lvl)/60) + 0.00 local o2 = string.format("%02.0f", string.sub(math.fmod(o,1),3,4)) txt2 = 'Best: '..string.format("%02.0f:", flr(o))..o2..'s' local o = gameT/60 + 0.00 local o2 = string.format("%02.0f", string.sub(math.fmod(o,1),3,4)) txt = 'Time: '..string.format("%02.0f:", flr(o))..o2..'s' eprint(0,txt,0,0,15,false,1,true) eprint(0,txt2,0,8,15,false,1,true) end if p.onFire then local txt do local o = max(p.burnT,0) + 0.00 local o2 = string.format("%01.0f", string.sub(math.fmod(o,1),3,3)) txt = string.format("%01.0f:", flr(o))..o2 end --print(setBurnT) local bar = flr(p.burnT/setBurnT*screen.w) rect(0,screen.h-4,screen.w,4,2) rect(0,screen.h-6,bar-3,6,15) tri(bar-3,screen.h-6,bar-3,screen.h,bar+3,screen.h,15) local w = print(txt,-999,-999,10,false,2,true) - 2 local x = screen.w//2-w//2 local y = screen.h-13 for i2 = 0,1 do for i = 1,8 do print(txt,x+dirx[i],y+diry[i]+i2,0,false,2,true) end end print(txt,x,y+1,7,false,2,true) print(txt,x,y,10,false,2,true) clip(0,y+2,screen.w,2) print(txt,x,y,15,false,2,true) clip() end end end function drwBgFire() for i, f in pairs(fire.bg) do local r = sin(f.t/f.startT*pi)*f.r --circ(pa.x,pa.y,r,15) for i = 1, f.pol do local ang = (pi2/f.pol)*i + f.a local ang2 = ang + pi2/f.pol local x1 = f.x+sin(ang)*r-cam.rx local y1 = f.y+cos(ang)*r-cam.ry local x2 = f.x+sin(ang2)*r-cam.rx local y2 = f.y+cos(ang2)*r-cam.ry --pix(pa.x+sin(ang)*r,pa.y+cos(ang)*r,pa.col) --line(pa.x+sin(ang)*r,pa.y+cos(ang)*r,pa.x+sin(ang2)*r,pa.y+cos(ang2)*r,pa.col) local val = flr(f.t/f.startT*(#firePal))+1 local col = firePal[#firePal - val+1] tri(f.x-cam.rx,f.y-cam.ry,x1,y1,x2,y2,col) end end end function aabb(x,y,w,h,x2,y2,w2,h2) w=w/2 x=x+w w2=w2/2 x2=x2+w2 h=h/2 y=y+h h2=h2/2 y2=y2+h2 return math.abs(x-x2)-w-w2<0 and math.abs(y-y2)-h-h2<0 end function lineF(x,y,x2,y2,f) local l = lvlData[lvl].pos if x~=x2 or y~=y2 then c=max(abs(x-x2),abs(y-y2))/8 for i=0,c do local xx = ((x-x2)/c*i+x2)//8 local yy = ((y-y2)/c*i+y2)//8 if yy >= l[2] and yy <= l[2]+l[4]+16 and xx >= l[1] and xx <= l[1]+l[3]+29 then --cam.goalY = max(l[2]*8,min(l[2]*8+l[4]*8,cam.goalY)) if fget(mget(xx,yy),f) then finish=true break end end end end if finish~=true then if y//8 >= l[2] and y//8 <= l[2]+l[4]+16 and x//8 >= l[1] and x//8 <= l[1]+l[3]+29 then return fget(mget(x//8,y//8),f) else return false end else finish=nil return true end end function rectF(x,y,w,h,f) local tx = x //8 local xx = (x + w - 1) // 8 local yy = (y + h - 1) // 8 repeat local ty = y // 8 repeat if fget(mget(tx,ty),f) then return true end --rect(tx*8,ty*8,8,8,1) ty = ty + 1 until ty > yy tx = tx + 1 until tx > xx end function addPlayer(x,y) p = { alive = true, dedT = 0, blink = false, fireAcc = 0, onWater = false, waterT = 9999, onFire = false, burnT = 0, x = (x * 8) + 7 - 6, y = (y * 8) + 7 - 5, xv = 0, yv = 0, coyote = 0, flip = 0, wallCoyote = 0, wallDir = -1, wallCrt = 0, wallSetCrt = 10, setCoyote = 7, buff = 0, setBuff = 7, state = "walk", lastState = "", aniIndex = 0, aniAdd = 0, ani = { idle = {256}, air = {257}, walk = {257,258,257,256,259,260,259,256}, slide = {261,262} }, w = 6, h = 5, ssx = 0, ssy = 0, offx = -1, offy = -3, sp = 256, grav = 0.1, fGrav = 0.25, fric = 0.8, fireFric = 0.875, spd = 0.2, col = { bottom = false, top = false, left = false, right = false } } return e end function addWater(x,y,w,h) local w = { x = x*8, y = y*8+5, w = w*8, h = h*8-5 } table.insert(water,w) end spike = {} function addSpike(x,y,dir,size) local s = {} s.x = x * 8 s.y = y * 8 s.offx = 0 s.offy = 0 local size = size * 8 if diry[dir] ~= 0 then s.ax = 0 s.ay = 8 s.w = 2 s.h = size if diry[dir] == 1 then s.x = s.x + 6 s.offx = -5 else s.offx = -1 end else s.ax = 8 s.ay = 0 s.w = size s.h = 2 if dirx[dir] == 1 then s.y = s.y + 6 s.offy = -5 else s.offy = -1 end end s.size = size s.dir = dir table.insert(spike,s) end --sign={} function addSign(txt,x,y) local si = { x = x * 8 - 8, y = y * 8 - 8, w = 24, h = 24, col = false, txt = txt } table.insert(sign,si) end --addSign(pops.jump1,5,10) function addBubble(am, x, y) local b = { x = x*8-2, y = y*8-2, w = 12, h = 12, am = am } table.insert(bub,b) end function drwBubble() if p.onFire or gameT%2==0 or pause then for i,b in pairs(bub) do --rectb(b.x-cam.rx,b.y-cam.ry,b.w,b.h,5) local x = b.x-cam.rx-2--+round(cos(gameT/120)*4) local y = b.y-cam.ry+round(sin(gameT/30+b.x/10)*2)-2 local n = abs(b.am) local tcol if b.am < 0 then pal(13,6) tcol = 6 else tcol = 13 end spr(294,x,y,7,1,0,0,2,2) for i = 1, 8 do print(n,x+dirx[i]+6,y+diry[i]+6,tcol,true,1,true) end print(n,x+6,y+6,15,true,1,true) pal() end end end function updBubble() for i = #bub, 1, -1 do local b = bub[i] if p.onFire and p.alive and aabb(round(p.x),round(p.y),p.w,p.h,b.x,b.y,b.w,b.h) then p.burnT = min(setBurnT, p.burnT + b.am) if b.am < 0 then sfx(10,'A-3',-1,2) else sfx(10,'B-5',-1,2) end exp(b.x+rdm(5,6),b.y+rdm(5,6 ),2,0.8,16) table.remove(bub,i) end end end --addBubble(-5,176,46) function addBox(x,y,w,h) local b = { type = 'box', x = x*8, y = y*8, w = w*8, h = h*8, offX = 0, offY = 0, burn = false, burnT = 120, parT = 0 } table.insert(box,b) end function addGrass(x,y,w,h) local b = { type = 'grass', x = x*8, y = y*8, w = w*8, h = h*8, offX = 0, offY = 0, burn = false, burnT = 15, parT = 0 } table.insert(box,b) end function addItem(type,x,y) local b = { type = type, x = x*8, y = y*8 } if type == 'egg' then b.sp = 274 else b.sp = 273 end table.insert(item,b) end --[[addItem('pepper',4,4) addItem('pepper',5,4) addItem('pepper',6,4) addItem('egg',7,4)]] function boundY(self) local l = lvlData[lvl].pos local y = l[2]*8 local h = l[4]*8+17*8 if round(self.y)+self.h > y+h then self.y = y+h-self.h self.yv = 0 dedPlayer() elseif round(self.y) < y then self.y = y self.yv = 0 end end function boundX(self) local l = lvlData[lvl].pos local x = l[1]*8 local w = l[3]*8+30*8 if round(self.x)+self.w > x+w then self.x = x+w-self.w self.xv = 0 elseif round(self.x) < x then self.x = x self.xv = 0 end end function moveX(self, am) self.col.right = false self.col.left = false --check if he will move more than 1 pixel if round(self.x + am) == round(self.x) then --if not, then just move, no need to check if it ins't going to move a pixel self.x = self.x + am else local stop = false --dir store the direction the ent is moving, -1 = left, 1 = right dir = am / abs(am) --how much pixels the ent will move plus 1 loop = abs(round(self.x+am) - round(self.x)) + 1 --save the x position for later oldx = self.x + 0 ---loop through every pixel the player will move for i_ = 0, loop do --checks if the ent already looped trough every pixel and din't collide if i_ < loop - 1 then --if not, then he will move 1 pixel self.x = self.x + dir elseif stop~=true then --if so, the ent will move "am" pixels self.x = oldx+am for l = #box, 1, -1 do local b = box[l] if aabb(round(self.x),round(self.y),self.w,self.h,b.x,b.y,b.w,b.h) then if p.onFire then b.burn = true end local halfw=self.w/2 local halfw2=b.w/2 self.x=round((halfw2+b.x-halfw)+halfw*(dir*-1)+halfw2*(dir*-1)) self.xv = 0 if dir == -1 then self.col.left = true else self.col.right = true end end end return end local rx = round(self.x)+(self.w - 1)*max(dir,0) if lineF(rx,round(self.y),rx,round(self.y)+self.h-1,0) then self.xv = 0 if dir == -1 then self.col.left = true self.x=(rx // 8)*8+8 - 0.5 else self.col.right = true self.x=(rx // 8)*8-self.w + 0.5 - (smoll / 2) end --lol=tostring(self.y) loop=-1 stop=true return end end end end function moveY(self, am) self.col.bottom = false self.col.top = false --check if he will move or more than 1 pixel if round(self.y + am) == round(self.y) then --if not, then just move, no need to check if it ins't going to move a pixel self.y = self.y+am else local stop = false --dir store the direction the ent is moving, -1 = up, 1 = down dir = am/abs(am) --how much pixels the ent will move loop = abs(round(self.y+am) - round(self.y)) + 1 --loop=abs(round(self.y+abs(am))-self.y)+1 --save the y position for later oldy = self.y + 0 ---loop through every pixel the player will move for i_ = 0, loop do --checks if the ent already looped trough every pixel din't collide if i_ < loop - 1 then --if not, then he will move 1 pixel self.y = self.y + dir elseif stop~=true then --if so, the ent will move "am" pixels self.y=oldy+am for l = #box, 1, -1 do local b = box[l] if aabb(round(self.x),round(self.y),self.w,self.h,b.x,b.y,b.w,b.h) then if p.onFire then b.burn = true end local halfh=self.h/2 local halfh2=b.h/2 self.y=round((halfh2+b.y-halfh)+halfh*(dir*-1)+halfh2*(dir*-1))+0.5-smoll self.yv = 0 if dir == -1 then self.col.top = true else self.col.bottom = true end end end return end local ry = round(self.y)+(self.h - 1)*max(dir,0) if lineF(round(self.x),ry,round(self.x)+self.w-1,ry,0) then if dir == -1 then self.col.top = true self.yv = 0 self.y=(ry // 8) * 8 + 8 - 0.5 else self.col.bottom = true self.yv = 0 self.y =(ry // 8) * 8 - self.h + 0.5 - (smoll / 2) end --lol=tostring(self.y) loop=-1 stop=true return end end end end function updBoard() if keyp() then board = true else for i=0,7 do if btnp(i) then board = false return end end end end function updBtn() bt = { left = btn(2), right = btn(3), up = btn(0), upp = btnp(0), down = btn(1), jump = btn(4), jumpp = btnp(4), fire = btn(5), firep = btnp(5), resetp = keyp(18), pausep = btnp(7) } if not board then bt.resetp = btnp(6) end end function limitCam(init) local l = lvlData[lvl].pos cam.goalX = max(l[1]*8,min(l[1]*8+l[3]*8,cam.goalX)) cam.goalY = max(l[2]*8,min(l[2]*8+l[4]*8,cam.goalY)) if init then cam.x = cam.goalX cam.y = cam.goalY end end function updCam() limitCam(gameT == 0) cam.x = lerp(cam.x,cam.goalX,0.9) cam.y = lerp(cam.y,cam.goalY,0.9) cam.rx = round(cam.x) cam.ry = round(cam.y) end -- game functions -- function loadLvl(le) --peppers = 0 fire = { fg = {}, bg = {} } bub = {} sign = {} gameT = 0 exps = {} ents = {} -- enemies water = {} -- waters box = {} -- boxs item = {} p = {} -- player par = {} -- particles win = false shake = 0 initClouds() local l = lvlData[le] for i = 1, #l.mobs do local mob = l.mobs[i] addType[mob[1]](mob[2],mob[3],mob[4],mob[5]) end end function initClouds() clouds = {} for i=1, 15 do local cx = rdm(-32,screen.w+32) local cy = rdm(-32,screen.h+32) local g = rdm(1,5) local spd = drdm(0.2,0.5) if i < 15//2 then col = 10 spd = spd / 2 else col = 15 end for i2 = 1,g do local ang = drdm(0,pi2) local dist = drdm(0,64) local c = { x = cx+sin(ang)*dist, y = cy+cos(ang)*dist, r = rdm(16,32), spd = spd, col = col } table.insert(clouds,c) end end end function drwClouds() for i,c in pairs(clouds) do local x = c.x - cam.rx*(c.spd*1.5) local y = c.y - cam.ry*(c.spd*1.5) circ((x+32)%(screen.w+64)-32,(y+32)%(screen.h+64)-32,c.r,c.col) end end function updClouds() for i = #clouds,1,-1 do local c = clouds[i] c.x = c.x - c.spd end end function initMenu() cls() open=false openT = 0 ggLvls = max(pmem(0),1) menuT = 0 lvlx = 0 lvlxGoal = 0 lvlSize = 0 selLvl = lvl menuState = 0 initClouds() updState = updMenu drwState = drwMenu end function updMenu() updClouds() if open then openT = openT + 1 if openT > 10 then initGame() end end if menuState == 0 and menuT > 3 then if keyp() then menuState = 1 else for i = 0,7 do if btnp(i) then menuState = 1 end end end elseif menuState == 1 then lvlSize = max(0, lvlSize - 0.25) if not open then if bt.pausep and ggLvls>=24 then timer = not timer sfx(1) end for i = 3,4 do if btnp(i-1,20,5) then selLvl = selLvl + dirx[i] lvlSize = 6 sfx(2) end end end selLvl = (selLvl-1)%ggLvls+1 lvlxGoal = (selLvl-1) * 32 if btnp(4) and not open then lvl = selLvl open = true --initGame() end lvlx = lerp(lvlx, lvlxGoal, 0.9) end menuT = menuT + 1 end function drwMenu() cls(13) drwClouds() map(210,119,30,17,0,0,14,1) --map(210,119,30,17,0,0,14,1) if menuState == 0 then drwTitle() else --80 90 100 112 local x = round(80 + 32 * selLvl - lvlx) rect(x-3,64-2,22,20,0) rect(x-2,64-3,20,22,0) rect(x-2,64-1,20,18,15) rect(x-1,64-2,18,20,15) drwLvls() eprint(0,'Z: Confirm',0,screen.h-13) eprint(0,'Arrow keys: Choose level',0,screen.h-6) local o = max(pmem(selLvl)/60,0) + 0.00 local o2 = string.format("%02.0f", string.sub(math.fmod(o,1),3,4)) txt = string.format("%02.0f:", flr(o))..o2 local s = 'Best Time: '..txt..'s' local w = print(s,-999,-999,0,false,1,true) local x2 = x+8-(w-1)//2 local y = 50 for i = 1,8 do print(s,x2+dirx[i],y+diry[i],0,false,1,true) end print(s,x2,y,15,false,1,true) if ggLvls>=24 then local nao = 'Off' if timer then nao = 'On' end local s = 'Speedrun Timer: '..nao local w = print('Speedrun Timer: Ye',-999,-999,0,false,1) local x2 = x+8-(w-1)//2 local y = 90 for i = 1,8 do --print(s,x2+dirx[i],y+diry[i],0,false,1,true) end eprint(0,s,x2,y,15,false,1) local s = '(Press "S" to choose)' local w = print(s,-999,-999,0,false,1,true) local x2 = x+8-(w-1)//2 local y = 98 for i = 1,8 do print(s,x2+dirx[i],y+diry[i],0,false,1,true) end print(s,x2,y,15,false,1,true) end end drwLogo(35,screen.h-sin(min(menuT/20,pi/2))*122+sin(menuT/10)*4) --print(lvlx,0,0,0) if menuT < 10 then rect(0-(menuT/10)*screen.w,0,screen.w,screen.h,0) end if open then rect(screen.w-(openT/10)*screen.w,0,screen.w,screen.h,0) end --print(pmem(1)) end function drwLvls() for i = 0,8 do local off = lvlx - 80 local uwu = flr(off // 32 + i) if uwu >= 1 and uwu <= 24 then local x = round(i*32-off%32) local s = 0 if uwu == selLvl then s = sin(menuT/2)*lvlSize end local xx = x - s/2 local yy = 64 - s/2 local si = round(16+s) local ind = 1 if uwu <= ggLvls then ind = 2 end rect(xx,yy,si,si,lvlCol[ind][2]) line(xx+1,yy,xx+si-1,yy,lvlCol[ind][3]) line(xx+si-1,yy,xx+si-1,yy+si-2,lvlCol[ind][3]) line(xx,yy+1,xx,yy+si-1,lvlCol[ind][1]) line(xx,yy+si-1,xx+si-2,yy+si-1,lvlCol[ind][1]) --line(x-s/2,x+16+s,32-s/2 local w = print(uwu,-999,-999) print(uwu,x+8-w//2,64+6,lvlCol[ind][3]) print(uwu,x+8-w//2,64+5,lvlCol[ind][1]) end end end function drwTitle() if menuT%60 < 30 then local w = print('Press any button',-999,-999) eprint(0,'Press any button',screen.w // 2 - w // 2,80) end end initMenu() function initGame() updState = updGame drwState = drwGame exi = false loadLvl(lvl) pause = false limitCam(true) updCam() tran = { on = true, load = true, t = 25, mt = 50, level = level } end function updGame() if not pop then if bt.pausep and p.alive and not win and not exi then pause = not pause end if not pause then updClouds() updPar() updBgFire() updFire() updPlayer() updSpike() updItem() updBubble() updSign() updBox() updExp() updCam() poke(0x3ff9,round(drdm(-shake,shake))) poke(0x3ffa,round(drdm(-shake,shake))) shake = shake * 0.9 if shake < 0.5 then shake = 0 end if lvl == 1 and not win and p.alive and gameT == 60 then popup(pops.intro) end gameT = gameT + 1 else if bt.right then cam.goalX = cam.goalX + 3 end if bt.left then cam.goalX = cam.goalX - 3 end if bt.down then cam.goalY = cam.goalY + 3 end if bt.up then cam.goalY = cam.goalY - 3 end updCam() if bt.fire and tran==nil then exi = true initTran() end end else updPopup() end end function updBox() for i = #box, 1, -1 do local b = box[i] if b.burn then if b.burnT <= 0 then for s = #spike, 1, -1 do sp = spike[s] local offx = diry[sp.dir]*8 local offy = dirx[sp.dir]*8 --sp.x = sp.x + offx --sp.y = sp.y + offy if aabb(b.x,b.y,b.w,b.h,sp.x+offx,sp.y+offy,sp.w,sp.h) then table.remove(spike,s) end end addShake(2) sfx(7,'C-4',-1,3) exp(b.x+b.w//2,b.y+b.h//2,6,0.8,rdm(3,6)) table.remove(box,i) else b.parT = b.parT + max(1,((b.w//8) * (b.h//8))/3) while b.parT >= 10 do --addPar(b.x+rdm(0,b.w-1),b.y+rdm(0,b.h-1),rdm(2,3),rdm(20,40),rdm(3,4),fire[rdm(1,#fire)],drdm(-0.5,0.5),drdm(-0.5,0.5),0.9) addFire(true,b.x+rdm(0,b.w-1),b.y+rdm(0,b.h-1),rdm(2,3),rdm(30,60),5,drdm(-0.5,0.5),drdm(-0.5,0.5),0.975) b.parT = b.parT - 10 end if b.burnT%3 == 0 then b.offX = rdm(-1,1) b.offY = rdm(-1,1) end b.burnT = b.burnT - 1 end end end end function initTran(level) tran = { on = true, load = false, t = 0, mt = 30, level = level } end function gg() if p.alive and win == false then sfx(0,'C-6',-1,3) win = true --lvl = lvl + 1 pmem(0,max(pmem(0),lvl+1)) if pmem(lvl)==0 then pmem(lvl,gameT) else pmem(lvl,min(gameT,pmem(lvl))) end print(lvl) if timer then initTran(lvl) else initTran(lvl+1) end end end function addShake(val) shake = shake + val end function dedPlayer() if p.alive and win == false then p.yv = -4 p.alive = false addShake(8) --oof = oof + 1 exp(p.x+rdm(0,p.w-1),p.y+rdm(0,p.h-1),10,0.8,16) --exp(p.x+rdm(0,p.w-1),p.y+rdm(0,p.h-1),10,0.8,3) --exp(p.x+rdm(0,p.w-1),p.y+rdm(0,p.h-1),30,0.9,16) --loadLvl(lvl) sfx(3,'G-3',-1,3) end end function eat() p.onFire = true addShake(4) sfx(4,'F-4',-1,3) p.fireFirst = true --exp(p.x+(p.w-1)//2,p.y+(p.h-1)//2,8,0.8,4) --peppers = peppers - 1 p.burnT = setBurnT + 0 for i = 1, 20 do local ang = drdm(0,pi2) local force = drdm(0,4) addFire(false,p.x+rdm(0,p.w-1),p.y+rdm(0,p.h-1),rdm(4,8),rdm(30,60),5,sin(ang)*force,cos(ang)*force,0.9) end end function updPlayer() if p.alive then p.blink = false p.fireFirst = false if p.col.bottom or p.col.top or p.col.left or p.col.right then p.wallCrt = 0 end if bt.resetp then dedPlayer() end --[[if keyp(15) then if not win then sfx(0,'C-6',-1,3) win = true --lvl = lvl + 1 initTran(lvl-1) end elseif keyp(16) then gg() end]] if bt.firep and p.onFire == false and false then p.onFire = true addShake(4) sfx(4,'F-4',-1,3) p.fireFirst = true --exp(p.x+(p.w-1)//2,p.y+(p.h-1)//2,8,0.8,4) --peppers = peppers - 1 p.burnT = setBurnT + 0 for i = 1, 20 do local ang = drdm(0,pi2) local force = drdm(0,4) addFire(false,p.x+rdm(0,p.w-1),p.y+rdm(0,p.h-1),rdm(4,8),rdm(30,60),5,sin(ang)*force,cos(ang)*force,0.9) end end p.aniIndex = (p.aniIndex + p.aniAdd) % #p.ani[p.state] p.ssx = p.ssx * 0.9 p.ssy = p.ssy * 0.9 if abs(p.ssx)<1 then p.ssx = 0 end if abs(p.ssy)<1 then p.ssy = 0 end if p.onWater == false then if bt.jump or p.yv >= 0 then p.yv = p.yv + p.grav else p.yv = p.yv + p.fGrav end end if p.onFire == false then p.xv = p.xv * p.fric else p.xv = p.xv * p.fireFric end if bt.right then if not bt.left then p.flip = 0 end p.xv = p.xv + p.spd end if bt.left then if not bt.right then p.flip = 1 end p.xv = p.xv - p.spd end if abs(p.xv)<0.1 then p.xv = 0 end if p.col.bottom then if p.xv == 0 then p.state = 'idle' else if gameT % 5 == 0 then addPar(p.x+rdm(0,p.w-1),p.y+p.h-1,rdm(2,3),rdm(20,40),rdm(3,4),10+rdm(0,1)*5) end if gameT % 15 == 0 then --sfx(2) end p.state = 'walk' p.aniAdd = abs(p.xv) / 4 end else local x if p.flip == 0 then x = round(p.x) + p.w else x = round(p.x) - 1 end local slideBox = false for i, b in pairs(box) do if aabb(round(p.x)+(p.flip-0.5)*-2,round(p.y),p.w,p.h,b.x,b.y,b.w,b.h) then slideBox = true if p.onFire then b.burn = true end end end if (slideBox or lineF(x,round(p.y),x,round(p.y)+p.h-1,0)) and p.wallCrt == 0 then if p.yv > 0 then p.yv = p.yv / 1.2 if gameT%4==0 then addPar(p.x+p.w-1-(p.w-1)*p.flip,p.y+rdm(0,p.h-1),rdm(2,3),rdm(20,30),rdm(3,4),10+rdm(0,1)*5) end end p.state = 'slide' p.aniAdd = 0.2 p.wallCoyote = p.setCoyote + 2 if p.flip == 0 then p.wallDir = 1 else p.wallDir = -1 end else p.state = 'air' end end p.buff = p.buff - 1 if bt.jumpp then p.buff = p.setBuff end if p.buff > 0 then if p.coyote > 0 then p.buff = 0 p.coyote = 0 p.wallCoyote = 0 p.xv = p.xv * 1.5 p.yv = - 2 sfx(1,'B-3') p.ssx = -4 p.ssy = 8 for i = 1, 10 do addPar(p.x+rdm(-1,p.w),p.y+p.h-1+rdm(-1,1),rdm(2,3),rdm(20,30),rdm(3,4),10+rdm(0,1)*5,0,drdm(-0.75,-0.25),0.9) end elseif p.wallCoyote > 0 then p.buff = 0 p.coyote = 0 p.wallCoyote = 0 sfx(1,'B-2') p.ssx = 8 p.ssy = -2 --p.xv = p.xv - p.wallDir * 2 local dx = p.x + ((p.w-1) / 2) + (((p.w-1) / 2) * (p.wallDir * 1)) for i = 1, 10 do addPar(dx+rdm(-1,1),p.y+rdm(-1,p.h),rdm(2,3),rdm(20,30),rdm(3,4),10+rdm(0,1)*5,drdm(-0.75,-0.25)*p.wallDir,0,0.9) end if p.onFire then p.wallCrt = p.wallSetCrt // 2 else p.wallCrt = p.wallSetCrt end end end if p.wallCrt > 0 then if p.onFire then p.xv = - p.wallDir * 1.65 p.yv = - 1.5 else p.xv = - p.wallDir * 1.65 p.yv = - 1 end p.wallCrt = p.wallCrt - 1 p.flip = (p.wallDir + 1) / 2 --p.ssx = 4 --p.ssy = -2 end moveX(p,p.xv) boundX(p) moveY(p,p.yv) boundY(p) if p.onFire then if p.burnT <= 0 then for i = 1, 20 do local ang = drdm(0,pi2) local force = drdm(0,4) addFire(false,p.x+rdm(0,p.w-1),p.y+rdm(0,p.h-1),rdm(4,8),rdm(30,60),5,sin(ang)*force,cos(ang)*force,0.9) end dedPlayer() else p.burnT = p.burnT - 1/60 end end local mod = flr(p.burnT/setBurnT*60) p.fireAcc = p.fireAcc + 1 if p.onFire and p.fireAcc >= mod then p.blink = true p.fireAcc = 0 sfx(5,'C-6',-1,1,5-flr(p.burnT/setBurnT*5)) end if p.onFire and gameT%5==0 then addFire(false,round(p.x)+rdm(0,p.w-1),round(p.y)+rdm(0,p.h-1),4,rdm(20,40),rdm(3,5),-p.xv*drdm(0,0.5)+drdm(-0.6,0.6),drdm(-1.25,-0.75),0.9) end if p.col.bottom and p.coyote < p.setCoyote then p.ssx = 8 p.ssy = -4 end if p.col.bottom then p.coyote = p.setCoyote else p.coyote = p.coyote - 1 end p.wallCoyote = p.wallCoyote - 1 if p.state ~= p.lastState then p.lastState = p.state p.aniIndex = 0 end cam.goalX = round(p.x) - screen.w//2 + p.w // 2 cam.goalY = round(p.y) - screen.h//2 + p.h // 2 p.waterT = p.waterT + 1 local oldWater = false oldWater = p.onWater p.onWater = false for i = #water, 1, -1 do local w = water[i] local off = sin(gameT/10+round(p.x)/14)*3 + 1 if aabb(p.x,p.y,p.w,p.h,w.x,w.y + off,w.w,w.h) then p.onFire = false p.onWater = true if oldWater == false and p.waterT > 20 then for pa = 1,15 do addPar(p.x+rdm(0,p.w-1),p.y+rdm(0,p.h-1),rdm(4,6),rdm(10,50),rdm(4,10),13,drdm(-1,1),drdm(-1,-0.5),0.925) end end p.waterT = 0 p.coyote = p.setCoyote p.yv = p.yv - p.grav * 1.5 p.yv = max(p.yv,-1.5) break end end elseif p.alive == false then p.dedT = p.dedT + 1 if p.dedT == 10 then initTran(lvl) end end end function drwGame() if p.fireFirst == nil or p.fireFirst == false then cls(13) drwClouds() drwBgMap() drwSign() drwBgFire() drwBgWater() drwPlayer() drwSpike() drwBox() drwFgWater() drwFgMap() drwPar() drwExp() drwFire() drwBubble() drwItem() --drwHud() else cls(15) end if pop then drwPopup() end --drwBox(32,32,32,16) --drwWater(32,32,32,16) --drwWaterL(32,32,32,16) end function drwLogo(x,y) local size = 2 rect(0,13,screen.w,14,0) for i = 0,1 do eprint(0,'N#306o Vire Nugget!',x,y+i*2,1,false,size) end eprint(nil,'N#306o Vire Nugget!',x,y,6,false,size) clip(x,y+2*size,screen.w,1*size) eprint(nil,'N#306o Vire Nugget!',x,y,15,false,size) clip() end function drwBgWater() for i,w in pairs(water) do drwWater(w.x,w.y-4,w.w,w.h+4) end end function drwFgWater() for i,w in pairs(water) do drwWaterL(w.x,w.y-4,w.w,w.h+4) end end function drwBox() for i,w in pairs(box) do if w.type == 'grass' then drwGrass(w.x+w.offX,w.y+w.offY,w.w,w.h) else drwCrate(w.x+w.offX,w.y+w.offY,w.w,w.h) end end end function drwSign() for i,si in pairs(sign) do --rectb(si.x-cam.rx,si.y-cam.ry,si.w,si.h,6) local sprite = 292 if gameT%30 < 15 and si.col then sprite = 293 end if si.col then palall(15) for o = 1, 4 do spr(sprite,si.x-cam.rx+8+dirx[o],si.y-cam.ry+8+diry[o],7) end pal() end spr(sprite,si.x-cam.rx+8,si.y-cam.ry+8,7) end end function drwSpike() for i,sp in pairs(spike) do for o = 1,sp.size//8 do spr(287+sp.dir,sp.x+sp.ax*(o-1)-cam.rx+sp.offx,sp.y+sp.ay*(o-1)-cam.ry+sp.offy,14) end --rectb(sp.x-cam.rx,sp.y-cam.ry,sp.w,sp.h,6) end end function drwItem() for i,b in pairs(item) do local x = b.x - cam.rx local y = round(b.y + 0.5 + sin(gameT/10+b.x)*2 - cam.ry) --draw outline if b.pick then palall(15) else palall(0) end for i = 1, 8 do --spr(p.sp,round(p.x)+p.offx+dirx[i],round(p.y)+p.offy+diry[i],7) spr(b.sp,x+dirx[i],y+diry[i],7) --spr(b.sp,x+dirx[i],y+diry[i],8,8,w,h,0,7) end pal() if b.pick then palall(15) end --sspr(b.sp,x,y) spr(b.sp,x,y,7) pal() end end function drwPlayer() if p.alive then local x = round(p.x)+p.offx-p.ssx/2-cam.rx local y = round(p.y)+p.offy-p.ssy-cam.ry local sprite = p.ani[p.state][flr(p.aniIndex)+1] --draw outline palall(0) for i = 1, 8 do --spr(p.sp,round(p.x)+p.offx+dirx[i],round(p.y)+p.offy+diry[i],7) sspr(sprite,x+dirx[i],y+diry[i],8,8,p.ssx+8,p.ssy+8,p.flip,7) end pal() if p.blink then palall(15) elseif p.onFire then pal(15,8) pal(10,1) end sspr(sprite,x,y,8,8,p.ssx+8,p.ssy+8,p.flip,7) pal() end end function drwBgMap() map(cam.rx//8,cam.ry//8,31,18,-(cam.rx%8),-(cam.ry%8),14,1,bgRemap) end function drwFgMap() map(cam.rx//8,cam.ry//8,31,18,-(cam.rx%8),-(cam.ry%8),14,1,fgRemap) --map(0,0,30,17,0,0,14,1,fgRemap) end function drwGrass(x,y,w,h) local x = x - cam.rx local y = y - cam.ry local xw = x+w local yh = y+h rect(x,y,w,h,11) --rect(x+(w-1)//6,y+1,w-((w-1)//6*2),2,15) pix(x,yh-5,5) pix(xw-1,yh-5,5) rect(x,yh-4,w,4,5) --[[clip(x,y,w,h) for i = 0,1 do elli(x+(w-1)//2+i,y+(h-1)//2,(w-1)//2+1,(h-1)//3,11) end]] clip() rect(x+2,y+1,w-4,4,15) end function drwCrate(x,y,w,h) local x = x - cam.rx local y = y - cam.ry local xw = x+w local yh = y+h --box inside rect(x+2,y+2,w-3,h-3,6) line(x+2,y+2,xw-3,y+2,1) line(x+1,y+3,xw-3,yh-1,1) line(xw-2,y+3,x+2,yh-1,1) --box holder thing???? tri(x+2,y+1,x+1,y+2,xw-2,yh-3,9) tri(xw-3,yh-2,xw-2,yh-3,x+1,y+2,9) tri(xw-3,y+1,xw-2,y+2,x+1,yh-3,9) tri(x+2,yh-2,x+1,yh-3,xw-2,y+2,9) --box borders rectb(x,y,w,h,9) rectb(x+1,y+1,w-2,h-2,9) --rect(x,y,w,2,12) --rect(xw-2,y,2,h,12) --box "buttons" spr(272,x,y,0) spr(272,xw-2,y,0) spr(272,x,yh-2,0) spr(272,xw-2,yh-2,0) --white highlight line(x+3,y,xw-4,y,14) end function drwWater(x,y,w,h) local dist = w//8 local y = y - cam.ry for i=0,dist-1 do local x_ = x + (i * 8) - cam.rx local x2 x2_ = x_ + 8 local y_ = y + 4 + sin(gameT/10+(x_+cam.rx)/14)*3 local y2_ = y + 4 + sin(gameT/10+(x2_+cam.rx)/14)*3 tri(x_,y_,x_,y+8,x2_,y+8,13) tri(x_,y_,x2_,y+8,x2_,y2_,13) end rect(x-cam.rx,y+8,w,h-8,13) end function drwWaterL(x,y,w) local dist = w//8 local y = y - cam.ry for i=0,dist-1 do local x_ = x + (i * 8) - cam.rx local x2 x2_ = x_ + 8 local y_ = y + 4 + sin(gameT/10+(x_+cam.rx)/14)*3 -1 local y2_ = y + 4 + sin(gameT/10+(x2_+cam.rx)/14)*3 -1 --line(x_,y_,x2_,y2_,13) tri(x_,y_,x_,y_+1,x2_,y2_+1,15) tri(x_,y_,x2_,y2_,x2_,y2_+1,15) end end addType = { player = addPlayer, box = addBox, grass = addGrass, water = addWater, item = addItem, spike = addSpike, sign = addSign, bub = addBubble } --initGame() --[[addPlayer(2,0) addWater(13,11,12,5) addWater(10,13,3,3) addBox(16,10,5,2) addBox(4,4,4,5)]] function drwTran() if tran ~= nil and tran.on then local y = screen.h/2 local dist = sin((tran.t/tran.mt)*pi)*(screen.h/2)+8 rect(0,screen.h-dist,screen.w,screen.h//2+8,0) rect(0,dist-screen.h/2-8,screen.w,screen.h//2+8,0) tran.t = tran.t + 1 if tran.load == false and tran.t > tran.mt//2 then if tran.level == nil then initMenu() else lvl = tran.level loadLvl(tran.level) tran.load = true end end if tran.t > tran.mt then tran.on = false tran = nil end end end function TIC() updBoard() updBtn() updState() drwState() --drwHud() drwTran() --print(lvl) --print(collectgarbage('count'),0,8) end function OVR() poke(0x03FF8, 1) cls(1) if drwState == drwGame then drwHud() if pause and tran==nil then local s = 'Pause!' local w = print(s,-99,-99)-1 local x = screen.w//2-w//2 local y = screen.h//2-4 for i = 1, 8 do print(s,x+dirx[i],y+diry[i],0) end print(s,x,y,15) local s = '(Press "X" to return to menu)' local w = print(s,-99,-99)-1 local x = screen.w//2-w//2 local y = screen.h//2+8 for i = 1, 8 do print(s,x+dirx[i],y+diry[i],0) end print(s,x,y,15) end end end