═нлллл┬┬┬╛╙╙╙╛┬┬┬╛ллл╛люл╛люл╛люлллЛН┬┬лН╙╙юН┬╗юНл╛юлю╛ююю╛ююю╛ююнлллл┬┬┬╛╙╙╙╛┬┬┬╛ллл╛ллл╛люл╛люлллЛН┬┬лН╙╙юН┬╗юНл╛юлл╛ююю╛ююю╛юю╛ллл╛╙╙╙╛╙╛╙╛╙йл╛╙╙╙▄┬┬┬люлнллнл╛л╙╙юЛ╛╙юН╙╙юН╙╙юН┬┬лНюЛНллНН╛ллл╛╙╙╙╛╙╛╙╛╙йл╛╙╙╙▄┬┬┬люлнллнл╛л╙╙юЛ╛╙юН╙╙юН╙╙юН┬┬лНюЛНллНН >ю?pwwwpwpww═ ═ ╩╟╟╩pw ═ ═ ═ ╟╟ ╩╩╟ ╟╟pwwwwppw═ ╙ ╟╟╟╟╟╟╟╟╟ pw ╙ ╟╟╟╟ ╟ ╟╟╟╟wwwwpp╙═ ═ ═ ╙╟ ╟╟╩╩╟ ╟ ╟ллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллалллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллалллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллаллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллалллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл алллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллюллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллюлллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллюллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл ллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллюллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллюллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллюллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллюллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллюлллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл ллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл ллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллюлллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл люлллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл ллллллл лллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл|zлллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл|zлллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл|zллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл╖глллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл╖глллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл╖глллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл╖глллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл|zлллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл|zллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл╖глллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл|zллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл╖глллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл|zлллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл|zлллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл|zлллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл|zлллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл|zллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллгллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл|pюллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл|pюлллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл╖pwлллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл|wwлл|z wюлллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллwwwгл╖г wюллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл|wwwwл╖г ллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллwwwwwг|zлюллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллwwwwwгл╖глллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллwwwwwгл╖глллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллwwwwwгл|zwглллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллwwwwwглл╖wwллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл|wwwwлллwzwглллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл╪╪╪ллллллллллллллллллллллллллллwwwглллwwwwкклллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл╪╪клллллллллллллллллллллллллллл|wwллллwwww╥ллллллллллллллллллллллллллллллккллллллллллллллллллллллллллллллллллллллллллллл╪╪кллллллллллллллллллллллллллллллллллл|wwwwглллллллллллллллллллллл╪╪╪ллллк╩ллллллллллллллллллллллллллллллллллллллллллллл╪╪клллллллллллллллллллллллллллллллwwwwwwллллллллллллл╪╪кллллк╩лллллллллл╪╪╪ллллллллллллллллллллллллллллллллл╩ллллллллллллллллллллллллллллллwwwwwwаллллллллл╪╪кллллк╩╩╩╩╩╩╩╩╩╣╣╣╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩[[[╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩wwfffvww╠╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩[[╩╩╩╩╩╩╣U╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩[[╣╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩qwfffffvw╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩U╣╩╩╩╩╩╩[╣╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩U╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩wgffffffw╠╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩U╣╩╩╩╩╩╩╩╣╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩[╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩qqffffffvw╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩U╣╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩gfffffvw╠╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩U╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩wqqfffffww╠╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩U╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩{ww╩╩╩╩╩╩╩╩╩╩╩╩{www{qffffvwww╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩U╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩www╥╩╩╩╩╩╩╩╩╩ш╥{ww╥{qffffvwww╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩[╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩{wwww╩К╥╩╩╩╩╩{w╩{ww╖╨wfffvwwww╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩wwwww╥╩╩╩╩╩╩[ww╥╩w╖╙╙zqwwwwwwww╥╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩wwwwww╥╩╩ww╥╩{www╩╖╙╙JDw╖wwwww╥{w╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩{wwfffvw╥{www╩{www{w╙╙DDD╓w╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩UUUUUUUUUUUUU[[[UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUwwfffffvwwwwwWuwwwww╙JDDDDUU╣╣[UUUUU╩UUUUUUUUUUU[UUUUUUUUUUUUUUUUUUUUUUU[╩UUU╣WUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUuwgffffffwwwwwwUwwww╖╙DDDDDUU╣╣[UUUUU╣UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU╣╩UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUuqffffffvwwwwwUuwuw╖╙DDDDDUUU╩UUUUUUUUUUUUUUUUUUUUUUUUUUUUU[[UUUUUUUUUUU╣[UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUugfffffvwfffwwUUuw╖╙DDDDDUUU╩UUUUUUUUUUUUUUUUUUUUUUUUUUUUU╩UUUUUUUUUUUUU[UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUwqfffffwwgfffwWUuw╖╙DDDDD UUU╣UUUUUUUUUUUUUUUUUUUUUUUUUUUUU╩UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUuwqffffvwwwfffvwUuw╖╙DDDDD╓╙UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU╩UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU╥{qffffvwwwfff╖Www╙JDDDD╙ZUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU[UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUw╥wfffvwwwwffvqUuw╙╙DDD╓╙ZUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU[[[U[UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUuwwvqwwwwwwwwgffWUw╖╙JDD╙╙UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU[╩UU╩╣╣UUUU╣WUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUwwwgwgwwwwwwwfffWUzU╙╙╙╙╙ZUUUUUUUUUUUUUUU[[[UUUUUUUUUUUUUU[╩UU╩╣[UUUUUUU[[[UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUwwwgffw│╥╩kff│╥╩[U╔╙╙╙╙UUUUUUUUUUUUUUUU[╩UUUUUUUUUUUUUUU[╩UU╣╣[UUUUUUU[╩UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU[[[UUUUUwwwwgfwq{gfffwq[UUUU╔╙╙UUUUUUUUUUUUUUUUU╣[UUUUUUUUUUUU|UU╣[UUU╩UUUUUUUU[╩UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU[╩[[UUUUuwwwwwwwwwwwwwWUUUUUUUUUUUUUUUUUUUUUUUUUU╩╣╣UUUUUUUUUUUUU╣[UUU╩UUUUUUUU╣[UUUUUUUUUUUUUUUUUUUUUUUUU}UUUUUUU╣[╩UUUUUUwWuwwwWuwwwww{wUUUUUUUUUUUUUUUUUUUUUUUUUUU╣╣[UUUUUUUUUUUUUU[UUU╩UUUUUUU╣╥[UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU[╩UUUUUUUUUqqQUUqqwq╠UUUUUUUUUUUUUUUUUUUUUUUUUUUUU╣╣[UU╣╣╣UUUUUUUUUUUU3Ё333333333;3333333333333SS5333333333333333353;╩33333333311113331131╠33333333333333355533333333SS5ЁЁ;33ЁЁ;33333{333ЁЁЁ3333333333333333333333333SS5333333333333333333Ё;333333SSS11113331131╠3333333333333335U333333333SS53╩3333╩3333333333ЁЁ;3333333333333333333333333SS5333333333333333333Ё;333333SS51131133331131QSS333SSS33333555U3333333333U33╩3333Ё3333333333ЁЁ;33333333333333333333333333U33333333ЁЁЁ33333333Ё;3333┐73U51030135551131QS5333SS5333335U5U3333333333U33Ё333333333333333ЁЁ;33333333333333333333333333U33333333ЁЁ;333333333;3333333U31333135U300300U53333U5333335US53333333333U3333333333333333333╩333333333333333333333333333S333333~33╩333333333333333333S30333035U333333U3333U3333335US53333333333S333333333333333333╩333333333333333333333333333SSS3333333Ё3333333333333333333z3333335U333333S33333S333333S535333333333333333333333333333333Ё333333333333333333333333333SS533333333333333333333333;;;33333333S533333333С7333333333Sy333┐733333333333333333333333333333333333333333333333333;;;333U333333333333333333333333;╩333333333S53333333333333333333S53333333333333333333333333333333333333333333333333333333;╩3333S333333333333333333333333;╩333333333S53333333333333333333353333333333333333333333333333333333333333333333333333333Ё╩3333333333333333333333333333;╩33333333335333333333333SSS3333333333333333333333333333333333333333355533333333333333333Ё;33333333333333333333333333333Ё;SSS33333333333333333333SS5333333333333333333333333333333333333333335U3333333333333333333;33333333333333333333333333333Ё;SS5333333333333333333333U53333333333333333333333333333333333333333≥YU≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥╧⌡≥U∙≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥U≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥Y∙≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥⌡≥U≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥Y≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥∙≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥Y≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥≥333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333рP-- title: Sheep Storm -- author: hse -- desc: Save sheep from lightning! -- script: lua -- ============================================================ -- PALETTE COLORS (default TIC-80) -- 0=black, 1=dark purple, 2=dark red, 3=orange -- 4=yellow, 5=light green, 6=cyan, 7=white -- 8=red, 9=orange2, 10=yellow2, 11=green -- 12=blue, 13=indigo, 14=pink, 15=peach -- ============================================================ -- п║п╬я│я┌п╬я▐п╫п╦п╣ п╦пЁя─я▀ local state = "play" -- "play", "gameover" local score = 0 local t = 0 -- п╒я─п╟п╡п╟ - п╢п╣п╨п╬я─п╟я┌п╦п╡п╫я▀п╣ п╨я┐я│я┌п╦п╨п╦ local grass = {} for i=1,60 do table.insert(grass, { x = math.random(0,239), y = math.random(80,120), h = math.random(3,7), c = math.random(0,1)==0 and 11 or 5 }) end -- п╕п╡п╣я┌п╬я┤п╨п╦ local flowers = {} for i=1,20 do table.insert(flowers, { x = math.random(5,234), y = math.random(85,115), c = math.random(8,15) }) end -- ============================================================ -- п·п▓п╕п╚ -- ============================================================ local sheep = {} local function newSheep(x,y) return { x = x or math.random(20,210), y = y or math.random(82,112), vx = (math.random()*2-1)*0.4, vy = 0, dir = 1, animT = math.random(0,60), dragging = false, alive = true, -- я█я└я└п╣п╨я┌ я│п╪п╣я─я┌п╦: п╨я┐я│п╬я┤п╨п╦ я┬п╣я─я│я┌п╦ puffs = nil, puffTimer = 0 } end for i=1,5 do table.insert(sheep, newSheep()) end -- ============================================================ -- п╒пёп╖п≤ п≤ п°п·п⌡п²п≤п≤ -- ============================================================ local clouds = {} local function newCloud() return { x = math.random(20,200), y = math.random(10,40), vx = (math.random()*0.6+0.2) * (math.random()>0.5 and 1 or -1), -- 0=normal, 1=charging, 2=striking, 3=cooldown mode = "normal", chargeT = 0, chargeMax = math.random(90,180), strikeT = 0, boltX = 0, boltY = 0, boltSegs = {}, target = nil, -- п╦п╫п╢п╣п╨я│ п╬п╡я├я▀-я├п╣п╩п╦ size = math.random(2,3) -- 2=small, 3=big } end -- п÷п╣я─п╡я▀п╣ я┌я┐я┤п╦ for i=1,2 do table.insert(clouds, newCloud()) end -- п■п╬п╠п╟п╡п╩п╣п╫п╦п╣ я┌я┐я┤ я│п╬ п╡я─п╣п╪п╣п╫п╣п╪ local cloudTimer = 0 local cloudInterval = 600 -- п╨п╟п╤п╢я▀п╣ 10 я│п╣п╨я┐п╫п╢ п╫п╬п╡п╟я▐ я┌я┐я┤п╟ (п╪п╟п╨я│ 4) -- ============================================================ -- SFX: п╦я│п©п╬п╩я▄п╥я┐п╣п╪ п©я┐я│я┌я▀п╣ я│п╩п╬я┌я▀, я│п╬п╥п╢п╟я▒п╪ п╥п╡я┐п╨п╦ я┤п╣я─п╣п╥ poke п╡ RAM -- п▓п╪п╣я│я┌п╬ я█я┌п╬пЁп╬ п╦я│п©п╬п╩я▄п╥я┐п╣п╪ sfx() я│ п╡я│я┌я─п╬п╣п╫п╫я▀п╪п╦ п╥п╡я┐п╨п╟п╪п╦ -- ============================================================ -- п÷я─п╬я│я┌п╟я▐ я└я┐п╫п╨я├п╦я▐ п╢п╩я▐ "п╥п╡я┐п╨п╟ п╪п╬п╩п╫п╦п╦" я┤п╣я─п╣п╥ sfx -- п▓ TIC-80 п╫п╣я┌ п╡я│я┌я─п╬п╣п╫п╫я▀я┘ sfx, п©п╬я█я┌п╬п╪я┐ п╪я▀ п╦я│п©п╬п╩я▄п╥я┐п╣п╪ -- я┤п╟я│я┌п╬я┌п╫я▀п╣ я█я└я└п╣п╨я┌я▀ я┤п╣я─п╣п╥ п©я─я▐п╪я┐я▌ п╥п╟п©п╦я│я▄ п╡ п©п╟п╪я▐я┌я▄ SFX local function playThunder() -- sfx(0) п╣я│п╩п╦ п╥п╡я┐п╨ 0 п╥п╟п©я─п╬пЁя─п╟п╪п╪п╦я─п╬п╡п╟п╫, п╦п╫п╟я┤п╣ - п╦п╪п╦я┌п╟я├п╦я▐ я┤п╣я─п╣п╥ poke -- п║п╬п╥п╢п╟я▒п╪ "я┬я┐п╪" я┤п╣я─п╣п╥ п╠я▀я│я┌я─я▀п╣ п©п╣я─п╣п╨п╩я▌я┤п╣п╫п╦я▐ -- п≤я│п©п╬п╩я▄п╥я┐п╣п╪ п╥п╡я┐п╨ 0 (noise-like) sfx(0, "C-2", 20, 0, 15, 0) end local function playBaa() sfx(1, "A-3", 10, 1, 12, 2) end local function playPickup() sfx(2, "E-4", 5, 2, 10, 3) end local function playDrop() sfx(3, "C-4", 5, 2, 10, -2) end -- ============================================================ -- п⌠п∙п²п∙п═п░п╒п·п═ п≈п≤п⌠п≈п░п⌠п░ п°п·п⌡п²п≤п≤ -- ============================================================ local function makeBolt(x1,y1,x2,y2) local segs = {} local steps = 8 local dx = x2-x1 local dy = y2-y1 local px,py = x1,y1 for i=1,steps-1 do local frac = i/steps local nx = x1 + dx*frac + (math.random()*16-8) local ny = y1 + dy*frac + (math.random()*6-3) table.insert(segs, {x1=px,y1=py,x2=nx,y2=ny}) px,py = nx,ny end table.insert(segs, {x1=px,y1=py,x2=x2,y2=y2}) return segs end -- ============================================================ -- п÷п∙п═п∙п╒п░п║п п≤п▓п░п²п≤п∙ п°п╚п╗п п·п≥ -- ============================================================ local dragSheep = nil local mx,my,ml = 0,0,false local prevML = false -- ============================================================ -- п÷пёп⌠п·п▓п п≤ п╗п∙п═п║п╒п≤ (я┤п╟я│я┌п╦я├я▀ п©п╬я│п╩п╣ я┐п╢п╟я─п╟ п╪п╬п╩п╫п╦п╦) -- ============================================================ local function makePuffs(x,y) local puffs = {} for i=1,12 do local angle = math.random()*math.pi*2 local spd = math.random()*2+0.5 table.insert(puffs, { x = x + math.random()*10-5, y = y + math.random()*6-3, vx = math.cos(angle)*spd, vy = math.sin(angle)*spd - 1.5, life = 1.0, r = math.random(2,5) }) end return puffs end -- ============================================================ -- п═п≤п║п·п▓п░п²п≤п∙ -- ============================================================ local function drawBackground() -- п²п╣п╠п╬ cls(12) -- я│п╦п╫п╣п╣ п╫п╣п╠п╬ -- п⌠п╬я─п╦п╥п╬п╫я┌ п╦ п╥п╣п╪п╩я▐ for yy=78,136 do local shade if yy < 90 then shade = 11 -- я│п╡п╣я┌п╩п╬-п╥п╣п╩я▒п╫я▀п╧ elseif yy < 105 then shade = 5 -- п╥п╣п╩я▒п╫я▀п╧ else shade = 3 -- я┌я▒п╪п╫п╬-п╥п╣п╩я▒п╫я▀п╧/п╨п╬я─п╦я┤п╫п╣п╡п╟я┌я▀п╧ end line(0,yy,239,yy,shade) end -- п■п╬я─п╬п╤п╨п╟ for yy=118,124 do line(0,yy,239,yy,9) end end local function drawGrass() for _,g in ipairs(grass) do -- п÷я─п╬я│я┌п╬п╧ п╨я┐я│я┌п╦п╨: п╫п╣я│п╨п╬п╩я▄п╨п╬ п╩п╦п╫п╦п╧ line(g.x, g.y, g.x-2, g.y-g.h, g.c) line(g.x, g.y, g.x, g.y-g.h, g.c) line(g.x, g.y, g.x+2, g.y-g.h, g.c) end for _,f in ipairs(flowers) do pix(f.x, f.y, f.c) pix(f.x+1, f.y, 7) end end local function drawSheep(s) if not s.alive then return end local x,y = math.floor(s.x), math.floor(s.y) local anim = math.floor((s.animT/8)) % 2 -- 0 п╦п╩п╦ 1 (я┬п╟пЁ) -- п╒п╣п╩п╬ п╬п╡я├я▀ (п©я┐я┬п╦я│я┌п╬п╣ п╬п╠п╩п╟я┤п╨п╬ п╦п╥ п╨я─я┐п╤п╨п╬п╡) -- п·я│п╫п╬п╡п╫п╬п╧ п╠п╣п╩я▀п╧ п╬п╡п╟п╩ elli(x, y-4, 9, 6, 7) -- п÷я┐я┬п╦я│я┌я▀п╣ п╡я▀я│я┌я┐п©я▀ я┬п╣я─я│я┌п╦ circ(x-6, y-5, 4, 7) circ(x+6, y-5, 4, 7) circ(x, y-9, 5, 7) circ(x-3, y-8, 3, 7) circ(x+3, y-8, 3, 7) -- п▓п╫я┐я┌я─п╣п╫п╫я▐я▐ я┌п╣п╫я▄ п╫п╟ я┬п╣я─я│я┌п╦ elli(x, y-5, 7, 4, 6) -- п⌠п╬п╩п╬п╡п╟ local hx = x + s.dir*8 circ(hx, y-3, 4, 7) -- п°п╬я─п╢п╟ circ(hx, y-3, 3, 1) -- я┌я▒п╪п╫п╟я▐ -- п⌠п╩п╟п╥ pix(hx + s.dir*1, y-4, 0) -- п²п╬я│п╦п╨ pix(hx + s.dir*3, y-2, 8) -- п²п╬пЁп╦ local legOff = anim==0 and 0 or 1 line(x-4, y+2, x-4, y+6+legOff, 1) line(x-2, y+2, x-2, y+6-legOff, 1) line(x+2, y+2, x+2, y+6-legOff, 1) line(x+4, y+2, x+4, y+6+legOff, 1) -- п п╬п©я▀я┌я├п╟ pix(x-4, y+7+legOff, 0) pix(x-2, y+7-legOff, 0) pix(x+2, y+7-legOff, 0) pix(x+4, y+7+legOff, 0) -- п╔п╡п╬я│я┌п╦п╨ local tx = x - s.dir*9 circ(tx, y-2, 3, 7) -- п∙я│п╩п╦ я┌п╟я┴п╦п╪ - п©п╬п╢я│п╡п╣я┌п╨п╟ if s.dragging then circb(x, y-4, 13, 10) end -- п╒я─п╟п╡п╦п╫п╨п╟ п╡п╬ я─я┌я┐ (п╟п╫п╦п╪п╦я─п╬п╡п╟п╫п╟) local grass_off = math.floor(t/30)%2 line(hx+s.dir*4, y-1, hx+s.dir*7+grass_off, y-3+grass_off, 11) end local function drawPuffs(puffs) for _,p in ipairs(puffs) do local alpha = p.life local c = alpha > 0.6 and 7 or (alpha > 0.3 and 6 or 13) circ(math.floor(p.x), math.floor(p.y), math.floor(p.r*p.life+0.5), c) end end local function drawCloud(cloud) local x,y = math.floor(cloud.x), math.floor(cloud.y) local s = cloud.size -- п╕п╡п╣я┌ я┌я┐я┤п╦ п╥п╟п╡п╦я│п╦я┌ п╬я┌ я─п╣п╤п╦п╪п╟ local baseC, darkC if cloud.mode == "normal" then baseC = 6; darkC = 13 elseif cloud.mode == "charging" then -- п╪п╦пЁп╟п╫п╦п╣ п©я─п╦ п╥п╟я─я▐п╢п╨п╣ local flash = math.floor(cloud.chargeT/8)%2 baseC = flash==0 and 13 or 1; darkC = 1 else baseC = 1; darkC = 0 end -- п═п╦я│я┐п╣п╪ я┌я┐я┤я┐ п╦п╥ п╨я─я┐пЁп╬п╡ local r = s==2 and 10 or 14 circ(x, y, r, darkC) circ(x-r, y+4, r-3, darkC) circ(x+r, y+4, r-3, darkC) circ(x, y-2, r-2, darkC) circ(x, y, r-1, baseC) circ(x-r+2,y+4, r-4, baseC) circ(x+r-2,y+4, r-4, baseC) circ(x, y-1, r-3, baseC) -- п≈п╩п╬п╡п╣я┴п╦п╣ пЁп╩п╟п╥п╟ я┌я┐я┤п╦ pix(x-4, y-1, 0) pix(x+4, y-1, 0) -- п²п╟я┘п╪я┐я─п╣п╫п╫я▀п╣ п╠я─п╬п╡п╦ line(x-6,y-4,x-2,y-3,0) line(x+2, y-3, x+6, y-4, 0) -- п≈п╦пЁп╥п╟пЁ п╪п╬п╩п╫п╦п╦ (п©я─п╦ п╥п╟я─я▐п╢п╨п╣ - п╪п╟п╩п╣п╫я▄п╨п╦п╧ я│п╦п╪п╡п╬п╩) if cloud.mode == "charging" then local prog = cloud.chargeT/cloud.chargeMax if prog > 0.5 then -- п°п╟п╩п╣п╫я▄п╨п╟я▐ п╪п╬п╩п╫п╦я▐ п©п╬п╢ я┌я┐я┤п╣п╧ line(x+2, y+r, x-2, y+r+5, 10) line(x-2, y+r+5, x+3, y+r+5, 10) line(x+3, y+r+5, x-1, y+r+10, 10) end end -- п²п╟я│я┌п╬я▐я┴п╟я▐ п╪п╬п╩п╫п╦я▐ if cloud.mode == "striking" and #cloud.boltSegs > 0 then -- п▒п╣п╩я▀п╧ "пЁп╟п╩п╬" for _,seg in ipairs(cloud.boltSegs) do line(seg.x1+1,seg.y1,seg.x2+1,seg.y2, 7) line(seg.x1-1,seg.y1,seg.x2-1,seg.y2, 7) end -- п√я▒п╩я┌п╟я▐ п╪п╬п╩п╫п╦я▐ for _,seg in ipairs(cloud.boltSegs) do line(seg.x1,seg.y1,seg.x2,seg.y2, 10) end -- п▓я│п©я▀я┬п╨п╟ п╡ я┌п╬я┤п╨п╣ я┐п╢п╟я─п╟ if cloud.strikeT < 10 then circ(math.floor(cloud.boltX), math.floor(cloud.boltY), 8, 10) circ(math.floor(cloud.boltX), math.floor(cloud.boltY), 5, 4) end end end local function drawHUD() -- п═п╟п╪п╨п╟ я│п╡п╣я─я┘я┐ rect(0,0,240,10,0) print("SHEEP STORM", 2, 2, 7, false, 1, true) print("Score:"..score, 140, 2, 10, false, 1, true) print("Sheep:"..#sheep, 195, 2, 11, false, 1, true) end local function drawGameOver() -- п≈п╟я┌п╣п╪п╫п╣п╫п╦п╣ for y=0,135,2 do for x=0,239,2 do pix(x,y,0) end end local msg = "GAME OVER" local w = print(msg, -999, -999, 0, false, 2) -- п╦п╥п╪п╣я─п╦я┌я▄ я┬п╦я─п╦п╫я┐ print(msg, 120-w//2, 50, 8, false, 2) print("Score: "..score, 86, 74, 7, false, 1) print("Press Z to restart", 68, 90, 6, false, 1) end -- ============================================================ -- п·п▒п²п·п▓п⌡п∙п²п≤п∙ п⌡п·п⌠п≤п п≤ -- ============================================================ local function updateSheep() for i,s in ipairs(sheep) do if s.alive then s.animT = s.animT + 1 if not s.dragging then -- п║п╩я┐я┤п╟п╧п╫п╬п╣ п╠п╩я┐п╤п╢п╟п╫п╦п╣ if s.animT % 60 == 0 then s.vx = (math.random()*2-1)*0.5 end s.x = s.x + s.vx -- п·пЁя─п╟п╫п╦я┤п╣п╫п╦п╣ п©п╬п╩я▐ if s.x < 12 then s.x=12; s.vx=math.abs(s.vx) end if s.x > 227 then s.x=227; s.vx=-math.abs(s.vx) end -- Y-п╨п╬п╬я─п╢п╦п╫п╟я┌п╟ я│п╩п╣пЁп╨п╟ п©п╬п╨п╟я┤п╦п╡п╟п╣я┌я│я▐ s.y = 95 + math.sin(s.animT*0.05+i)*8 if s.vx > 0.05 then s.dir = 1 elseif s.vx < -0.05 then s.dir = -1 end end else -- п·п╠п╫п╬п╡п╩я▐п╣п╪ я┤п╟я│я┌п╦я├я▀ я┬п╣я─я│я┌п╦ if s.puffs then s.puffTimer = s.puffTimer + 1 local allDead = true for _,p in ipairs(s.puffs) do p.x = p.x + p.vx p.y = p.y + p.vy p.vy = p.vy + 0.05 -- пЁя─п╟п╡п╦я┌п╟я├п╦я▐ p.vx = p.vx * 0.98 p.life = p.life - 0.012 if p.life > 0 then allDead = false end end if allDead then s.puffs = nil end end end end end local function updateClouds() cloudTimer = cloudTimer + 1 if cloudTimer >= cloudInterval and #clouds < 4 then cloudTimer = 0 table.insert(clouds, newCloud()) cloudInterval = math.max(180, cloudInterval - 30) -- я┌я┐я┤п╦ п╡я│я▒ я┤п╟я┴п╣ end for ci,cloud in ipairs(clouds) do -- п■п╡п╦п╤п╣п╫п╦п╣ cloud.x = cloud.x + cloud.vx if cloud.x < 15 then cloud.x=15; cloud.vx=math.abs(cloud.vx) end if cloud.x > 224 then cloud.x=224; cloud.vx=-math.abs(cloud.vx) end if cloud.mode == "normal" then cloud.chargeT = cloud.chargeT + 1 if cloud.chargeT >= cloud.chargeMax then -- п²п╟п╧я┌п╦ п╤п╦п╡я┐я▌ п╬п╡я├я┐ п╢п╩я▐ я┐п╢п╟я─п╟ local targets = {} for si,s in ipairs(sheep) do if s.alive and not s.dragging then table.insert(targets, si) end end if #targets > 0 then cloud.mode = "charging" cloud.target = targets[math.random(#targets)] cloud.chargeT = 0 else -- п²п╣я┌ я├п╣п╩п╦, я│п╠я─п╟я│я▀п╡п╟п╣п╪ cloud.chargeT = 0 cloud.chargeMax = math.random(90,180) end end elseif cloud.mode == "charging" then cloud.chargeT = cloud.chargeT + 1 -- п╒я┐я┤п╟ п╫п╣п╪п╫п╬пЁп╬ п╢п╡п╦п╤п╣я┌я│я▐ п╨ я├п╣п╩п╦ п©п╬ X if cloud.target and sheep[cloud.target] and sheep[cloud.target].alive then local ts = sheep[cloud.target] local dx = ts.x - cloud.x cloud.x = cloud.x + dx*0.01 end if cloud.chargeT >= 60 then -- 1 я│п╣п╨я┐п╫п╢п╟ п╥п╟я─я▐п╢п╨п╦ -- пёп■п░п═! local ts = cloud.target and sheep[cloud.target] if ts and ts.alive and not ts.dragging then -- п÷п╬п©п╟п╩п╟! cloud.boltX = ts.x cloud.boltY = ts.y - 4 cloud.boltSegs = makeBolt(cloud.x, cloud.y+12, ts.x, ts.y-4) cloud.mode = "striking" cloud.strikeT = 0 playThunder() -- пёп╠п╦п╡п╟п╣п╪ п╬п╡я├я┐ ts.alive = false ts.puffs = makePuffs(ts.x, ts.y-4) ts.puffTimer = 0 playBaa() -- п·я┤п╨п╦ я┐п╪п╣п╫я▄я┬п╟я▌я┌я│я▐ score = math.max(0, score - 5) -- п²п╬п╡п╟я▐ п╬п╡я├п╟ я┤п╣я─п╣п╥ 3 я│п╣п╨я┐п╫п╢я▀ (п╢п╬п╠п╟п╡п╦п╪ п╡ я│п©п╦я│п╬п╨) -- п÷я─п╬я│я┌п╬ я┐п╠п╦я─п╟п╣п╪ п╦п╥ sheep (пЁп╣п╧п╪п╬п╡п╣я─ п╣я│п╩п╦ п╡я│п╣ п╪п╣я─я┌п╡я▀) else -- п÷я─п╬п╪п╟я┘п╫я┐п╩п╟я│я▄ (п╬п╡я├я┐ я┐я┌п╟я┴п╦п╩п╦) cloud.boltX = ts and ts.x or cloud.x cloud.boltY = ts and (ts.y-4) or 100 cloud.boltSegs = makeBolt(cloud.x, cloud.y+12, cloud.boltX, cloud.boltY) cloud.mode = "striking" cloud.strikeT = 0 playThunder() score = score + 3 -- +п╬я┤п╨п╦ п╥п╟ я│п©п╟я│п╣п╫п╦п╣ end end elseif cloud.mode == "striking" then cloud.strikeT = cloud.strikeT + 1 if cloud.strikeT >= 25 then cloud.mode = "normal" cloud.chargeT = 0 cloud.chargeMax = math.random(120,240) cloud.boltSegs = {} cloud.target = nil end end end end local function updateDrag() mx,my,ml = mouse() -- п²п╟я┤п╟п╩п╬ п©п╣я─п╣я┌п╟я│п╨п╦п╡п╟п╫п╦я▐ if ml and not prevML then -- п≤я┴п╣п╪ п╠п╩п╦п╤п╟п╧я┬я┐я▌ п╬п╡я├я┐ local best, bestD = nil, 18 for i,s in ipairs(sheep) do if s.alive then local d = math.sqrt((s.x-mx)^2+(s.y-my)^2) if d < bestD then best=i; bestD=d end end end if best then dragSheep = best sheep[best].dragging = true playPickup() end end -- п÷п╣я─п╣я┌п╟я│п╨п╦п╡п╟п╫п╦п╣ if ml and dragSheep then local s = sheep[dragSheep] if s and s.alive then s.x = mx s.y = math.max(85, math.min(120, my)) end end -- п·я┌п©я┐я│п╨п╟п╫п╦п╣ if not ml and prevML and dragSheep then if sheep[dragSheep] then sheep[dragSheep].dragging = false playDrop() end dragSheep = nil end prevML = ml end local function checkGameOver() -- п⌠п╣п╧п╪п╬п╡п╣я─ п╣я│п╩п╦ п╡я│п╣ п╬п╡я├я▀ п╪п╣я─я┌п╡я▀ (п╠п╣п╥ я┤п╟я│я┌п╦я├) local alive = 0 local anyPuffs = false for _,s in ipairs(sheep) do if s.alive then alive = alive + 1 end if s.puffs then anyPuffs = true end end if alive == 0 and not anyPuffs then state = "gameover" end end local function resetGame() state = "play" score = 0 t = 0 sheep = {} for i=1,5 do table.insert(sheep, newSheep()) end clouds = {} for i=1,2 do table.insert(clouds, newCloud()) end cloudTimer = 0 cloudInterval = 600 dragSheep = nil end -- ============================================================ -- п≤п²п≤п╕п≤п░п⌡п≤п≈п░п╕п≤п╞ п≈п▓пёп п·п▓ я┤п╣я─п╣п╥ RAM -- ============================================================ -- п≈п╡я┐п╨ 0: пЁя─п╬п╪ (п╫п╦п╥п╨п╦п╧ я┬я┐п╪) -- п≈п╟п©п╦я│я▀п╡п╟п╣п╪ п╡ RAM SFX (п╟п╢я─п╣я│ 0x100E4) -- п п╟п╤п╢я▀п╧ SFX п╥п╟п╫п╦п╪п╟п╣я┌ 66 п╠п╟п╧я┌: 16 п╫п╬я┌ п©п╬ 3 п╠п╟п╧я┌п╟ + 18 п╠п╟п╧я┌ п╥п╟пЁп╬п╩п╬п╡п╬п╨ -- пёп©я─п╬я┴я▒п╫п╫п╬: п╦я│п©п╬п╩я▄п╥я┐п╣п╪ я│я┌п╟п╫п╢п╟я─я┌п╫я▀п╣ poke п╢п╩я▐ п╠п╟п╥п╬п╡я▀я┘ SFX local function initSFX() -- SFX 0 - Thunder: noise waveform, low pitch, decay -- пёя│я┌п╟п╫п╟п╡п╩п╦п╡п╟п╣п╪ я└п╬я─п╪я┐ п╡п╬п╩п╫я▀ 4 (noise) п╢п╩я▐ SFX 0 -- RAM SFX starts at 0x100E4, each sfx is 66 bytes -- Byte 0-1: speed+note for step 0, etc. -- п÷п╣я─п╡я▀п╣ 4 п╠п╟п╧я┌п╟ п╥п╟пЁп╬п╩п╬п╡п╨п╟ SFX local base = 0x100E4 -- sfx 0: пЁя─п╬п╪ -- waveform = 4 (noise), pitch я│п©я┐я│п╨п╟п╣я┌я│я▐ for i=0,15 do local note = math.max(0, 36 - i*2) -- п╫п╬я┌п╟ я┐п╠я▀п╡п╟п╣я┌ local vol = math.max(0, 15 - i) -- пЁя─п╬п╪п╨п╬я│я┌я▄ я┐п╠я▀п╡п╟п╣я┌ poke(base + i*2, note) poke(base + i*2+1, vol + 0x50) -- 0x50 = waveform 4 (noise) п╡ я│я┌п╟я─я┬п╦я┘ п╠п╦я┌п╟я┘? end -- speed = 3 poke(base + 32, 3) -- sfx 1: п╠п╣-п╣ (A-3, square) local b1 = 0x100E4 + 66 for i=0,15 do local note = 57 + math.floor(math.sin(i*0.8)*3) local vol = math.max(0, 12 - i) poke(b1 + i*2, note) poke(b1 + i*2+1, vol + 0x20) -- waveform 1 (square) end poke(b1 + 32, 2) -- sfx 2: п©п╬п╢я┘п╡п╟я┌ (п╨п╬я─п╬я┌п╨п╦п╧, п╡я▀я│п╬п╨п╦п╧) local b2 = 0x100E4 + 132 for i=0,7 do poke(b2 + i*2, 64 + i*2) poke(b2 + i*2+1, 12 + 0x10) end poke(b2 + 32, 1) -- sfx 3: я│п╠я─п╬я│ (п╫п╦я│я┘п╬п╢я▐я┴п╦п╧) local b3 = 0x100E4 + 198 for i=0,7 do poke(b3 + i*2, 72 - i*3) poke(b3 + i*2+1, 10 + 0x10) end poke(b3 + 32, 1) end -- ============================================================ -- п⌠п⌡п░п▓п²п╚п≥ п╕п≤п п⌡ -- ============================================================ function BOOT() -- п÷я─п╦п╫я┐п╢п╦я┌п╣п╩я▄п╫п╬ п╥п╟п╢п╟я▒п╪ я│я┌п╟п╫п╢п╟я─я┌п╫я┐я▌ п©п╟п╩п╦я┌я─я┐ TIC-80 п╡ VRAM (п╟п╢я─п╣я│ 0x03FC0) -- 16 я├п╡п╣я┌п╬п╡ ц≈ 3 п╠п╟п╧я┌п╟ (R,G,B) local pal = { 0x14,0x0C,0x1F, -- 0 я┤я▒я─п╫я▀п╧ (п©п╬я┤я┌п╦) 0x1D,0x2B,0x53, -- 1 я┌я▒п╪п╫п╬-я│п╦п╫п╦п╧ 0x7E,0x25,0x53, -- 2 я┌я▒п╪п╫п╬-п╨я─п╟я│п╫я▀п╧ 0x00,0x87,0x51, -- 3 я┌я▒п╪п╫п╬-п╥п╣п╩я▒п╫я▀п╧ 0xAB,0x52,0x36, -- 4 п╨п╬я─п╦я┤п╫п╣п╡я▀п╧ 0x5F,0x57,0x4F, -- 5 я┌я▒п╪п╫п╬-я│п╣я─я▀п╧ 0xC2,0xC3,0xC7, -- 6 я│п╡п╣я┌п╩п╬-я│п╣я─я▀п╧ 0xFF,0xF1,0xE8, -- 7 п╠п╣п╩я▀п╧/п╨я─п╣п╪п╬п╡я▀п╧ 0xFF,0x00,0x4D, -- 8 п╨я─п╟я│п╫я▀п╧ 0xFF,0xA3,0x00, -- 9 п╬я─п╟п╫п╤п╣п╡я▀п╧ 0xFF,0xEC,0x27, -- 10 п╤я▒п╩я┌я▀п╧ 0x00,0xE4,0x36, -- 11 п╥п╣п╩я▒п╫я▀п╧ 0x29,0xAD,0xFF, -- 12 пЁп╬п╩я┐п╠п╬п╧ 0x83,0x76,0x9C, -- 13 я│п╣я─п╬-я└п╦п╬п╩п╣я┌п╬п╡я▀п╧ 0xFF,0x77,0xA8, -- 14 я─п╬п╥п╬п╡я▀п╧ 0xFF,0xCC,0xAA, -- 15 п©п╣я─я│п╦п╨п╬п╡я▀п╧ } local addr = 0x03FC0 for i,v in ipairs(pal) do poke(addr + i - 1, v) end initSFX() end function TIC() t = t + 1 if state == "play" then updateDrag() updateSheep() updateClouds() checkGameOver() -- п■п╬п╠п╟п╡п╩я▐п╣п╪ п╬я┤п╨п╦ п╥п╟ п╡я▀п╤п╦п╡п╟п╫п╦п╣ if t % 180 == 0 then score = score + 1 end elseif state == "gameover" then mx,my,ml = mouse() if btnp(4) then resetGame() end -- п╨п╫п╬п©п╨п╟ Z if keyp(50) then resetGame() end -- Enter end -- ---- п═п≤п║п·п▓п░п²п≤п∙ ---- drawBackground() drawGrass() -- п╒п╣п╫п╦ п╬я┌ я┌я┐я┤ for _,cloud in ipairs(clouds) do local sx = math.floor(cloud.x) local sr = cloud.size==2 and 18 or 24 elli(sx, 80, sr, 4, 1) end -- п╖п╟я│я┌п╦я├я▀ я┬п╣я─я│я┌п╦ п╪я▒я─я┌п╡я▀я┘ п╬п╡п╣я├ for _,s in ipairs(sheep) do if not s.alive and s.puffs then drawPuffs(s.puffs) end end -- п╒я┐я┤п╦ for _,cloud in ipairs(clouds) do drawCloud(cloud) end -- п·п╡я├я▀ for _,s in ipairs(sheep) do drawSheep(s) end -- HUD drawHUD() if state == "gameover" then drawGameOver() end -- п я┐я─я│п╬я─ п╪я▀я┬п╦ - я─я┐п╨п╟ п╣я│п╩п╦ п╫п╟п╢ п╬п╡я├п╬п╧ local cursor = 0 for _,s in ipairs(sheep) do if s.alive then local d = math.sqrt((s.x-mx)^2+(s.y-my)^2) if d < 18 then cursor = 1; break end end end -- п═п╦я│я┐п╣п╪ п╨я┐я─я│п╬я─ п╡я─я┐я┤п╫я┐я▌ if cursor == 1 then -- п═я┐п╨п╟ circ(mx, my, 4, 7) pix(mx, my, 0) else -- п║я┌я─п╣п╩п╨п╟ tri(mx,my, mx+6,my+4, mx+2,my+7, 7) trib(mx,my, mx+6,my+4, mx+2,my+7, 0) end end