0,]']>S}Wup8d%qy)6o;]AsVl3)'&%%%%%&')*+,-.////////////// -.2////////////////////////////PPQQRRSUWY \ ^ _ _ ________________T9779: :77 : :: 8 8:?=???????????????@ A   C C EFHI   s=<:777:<=?????????????????????874455567789::;<<==>>?????????C, A a A a A a A a A a A a A a A aaaaa A a A a A a A a``` ` ` ` ` ` ` ` ` ` ` ` b b b b b bAaAaAaAa A a A aAaAaAaAaAaAa A a A a A a A a``` ` ` ` ` ` ` `` ` ```` ` ` ``    `` ` ` ` ` `````@@` ` ` ` ` ` bb `` ` ` ` ` `````@@` `` `` ` bb   ``` ```` ` ``` ` ````` ```` ` ``` `AAAA!AAAaAa A a A a A a A a A a A aAaAaAaAa A a A a A a A a                  AaAa```  ```  `` ` `` `` ` ``` `` `Aa aaa a a aAa aaa a a aAa aaa a a aAa aaaa aaAa aaa a a a AAaAAa aaAa aaa a a aAa aaa aa a ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ```` ` ` ` ` `     ````` ` ` ` ` ` `` ` ``` @ @@@AaaAaaAaaAaaAaaaAaaaAaaa a a a A AaaaaaaaAa aaaaaaa Aaaaaa aaaAa aa aAaa      ` ` ` `           b bbb AaaaaAa aa aaa Aaaa a  AaaaaAa aaAaa Aa Aaa a a` ````` ` ` ` ` ` ```` ` ` ` ` `    a aAa aAaaa Aaaaa a a aa aAa aAa aAa Aa Aaaa a a@``` `` ` ``` ` ` ``@``` `` ` ``  ` ```@b     b     bAa aa aaa aaaa aAa aa  Aa aa aaa aaaa aAa aa  ` ` ` ` ` ` ` ` `` ``````` ` `` ` ` ` ` ` ` ` ` ` ` `` ` `` ``@ ``@` ` `` @ `` @ @````@ @0@@a@$@a@,@<E5E5Uuyy@@))YY???__??__?3"?3"_Uf_Ufw3"3"UfUfw3"3"UfUfw//oofVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVeVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVfvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfggfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffhfvwfiwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffifVUYffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUefUVeȜVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUfUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUɌfUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegheeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVXgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVeVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVfvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgffgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwfyffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUfiUffVUffVUffVUffVUffhfVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUhfUVYefUVefUVefUVefUVefUefYefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVeɉVefUȜfUVefUVefUVefUVefUVefUYVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeeeegeɌgeeegeeegeeegeeegeeegeeȜeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfYUfghVUfgVUfgVUfgVUfgVUfgVUɌVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvfhvffvvffvvffvvffvvffvvfhfvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfhgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVeYefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUhUYfUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeegieeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeefgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVȜgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvfɌvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfhgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvxfvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffYffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVeifUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVȜUVefUVefUVefUifUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeegeeɌeeegeeegeeegegeigeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfXfgVXUfgVUfgVUfgVɉgiVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvivvffxffvvffvvffvvfxvfȜvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgffgfgfgfgfgfgfgfgfgfgfgfgɌfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffhvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVXfVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeefgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvfvxffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgiggfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvhvivwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVYfVUffVUffVffhfVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefiUVefUVefUVeffUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUfUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVeȜVefUVefUVefUVfYVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeeɌeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUXfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvfxvffvxfvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgɉfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgffgfgfgfgfgfgfvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvfvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwf˼wffvwffvwffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVifVUffVUffVUffVUffVUiVUffVUffVUffVUffVUffVUffVUffVUffVUf̺UffVUffVUffUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUViUYVefUVefUVefUVefUVefUVefUVefUVefUVe̯VefUVefUVeVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefefȜefUVefUVefUVefUVefUVefUefUVefUVefU˙fUVefUVefUeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegeeegɉegɌegeeegeeegeeegeeegeeegkgeeegeeegegeeegeeegeUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgVUfgXfhgVUfgVUfgVUfgVUfgVUfgjgVUfgVUfgVogVUfgVUfgVfvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvffvvhvvffvvffvvffvffvvffvvfvvffvvffvvfffvvffvvffvvffgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfkfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffvwffwhfvwffvwffvwffvwffvwffvwzwffvwffvwffvwffvwffvwlfvwffvwffvwffvUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUffVUfffVUffVUffVUffVUffVUffVUfVUffVUffVUffVUffVUffVUffVUffVUffVUffVVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefifUVefUVefUVefUefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUfUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVXVefUVefUVfXV[VefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVefUVeoeeegeeeoeeegeeeoeeegeeeoeeegeeeoeeegeeeoeeegeeeoeeegeeeegeeeoeeejeegeeeoeeegeeeoeeegeeeoeeegeeeoeeegeeeoeeegeeeoVUfgVUfoVUfgVUfoVUfgVUfoVUfgVUfoVUfgVUfoVUfgVUfoVUfgVUoYUfgVjVUYUfVUfgVUfoVUfgVUfoVUfgVUfoVUfgVUfoVUfgVUfoVUfgVUfffvqffffvqffffvqffffvqffffvqffffvqffffvqffffvqf˫ifhfffvqffffvqffffvqffffvqffffvqffffvqffwofgfwofgfwofgfwofgfwofgfwofgfwogfwofghffwofgfwofgfwofgfwofgfwofgfwofgfwqwwqwwqwwqwwqwwqwwɉqwwq{ywwqwwqwwqwwqwwqwwqwww!"www!"www!"www!"www!"www!"wwwwww!"www!"www!"www!"www!"www!"www!"www!"www"www"www"www"wwwwww"www˫www"www"www"www"www"www"www"www"www!"www!"www!"www!"www!oww!"www!www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!owww*"www!www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"wwwjwww˫"www!"www!"www!"www!"www!"www!"www!"www!"www!"www"www"www"www"wwwLww"www"wwwxwwyw"www"www"www"ww"ww"www!"www!"www!"www!"wwwwww*www!zwww!zw!"Ȝw!"www+www!{www!"|w!"w!"www!"www!"www!"www!"wwwwww+www!{www!̩{!"Ɍw!"www*www!zwww!"{w!"w!"www!"www!"www!"www!"www!Owww˫"www!"www!xw!xw!"www"xw!"www!"ww!"ww!"www"www"www"www"www"www"www"wwwwwɉ"www"www"ə"www"www"www"www!"www!"www!"www!"www!"www+"www!www!yww!"www!"www!"ʌ!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!˫www!"www!"www!"www!"yȬ!"www!"ww!"www!"www!"www!"www!"www!"www!"www!"www!www!"www!"www!"www!"!"www!"www!"www!"www"www"www"www"www"www"wwwww"www"yw"wwww"www"www"www"www!"www!"www!"www!"www!"www!"www!"x!"zww!"y!"www!ɨxw!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"y!"˫ww!"Ȝw!"www!"̊w!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"ww!"ww!"Ɍw!"www!w!"www!"www!"www!"www"www"www"www"www"www"www"www"{ww"x"wwwww"www"www"www"www!"www!"www!"www!"www!"www!"www!"www!"www!{!"wwwȬxw!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"wwwz!"www!yw!"www!"www!"www"www!"www!"www!"www!"www!"www!"www!"www!"wwwww!"www(yww!"www!"www!"www!"www"www"www"www"www"www"www"www"wwwwww"wwwɉxww"www"www"www"www!"www!"www!"www!"www!"www!"www!"www!"www!"www"ww˛̊ww!"www!"ww"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"ww)ww)ww!"www!"w˼www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"wwwȜ"www!"www!www!"w̺www!"www"www"www"www"www"www"www"www"www"wwwɌ"wwwwwwwww"wwww"www!"www!"www!"www!"www!"www!"www!"www!"www!"ww(wwwɉʌwwwwww!"w˙www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"ww"wwwȬxww!www!"wwww!"www!"www!"www!"www!"www!"www!"www!"www!"www!"yw!"www)yww!"www!"wwww!"www"www"www"www"www"www"www"www"www"xw"www(yww"www"ww"www"www!"www!"www!"www!"www!"www!"www!"www!"www!"ww!"wwwɉxww!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"wwẘww!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www)ww!"www!"www!"www!www"www"www"www"www"www"www"www"www"www"wwwww"www"www"www"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"wwwʌww!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"wwwȬxw!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!yw!"www!"www!"www!"www"www"www"www"www"www"www"www"www"www"www"xw"www"www"www"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"̊w!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!ə!"www!"www!"www!"www"www"www"www"www"www"www"www"www"www"www"ʌ"www"www"www"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"ɉȬ!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"yw!"www!"www!"www!"www"www"www"www"www"www"www"www"www"www"www"www"www,www"www"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"www!"wia-- title: Cirno Day Danmaku -- author: slavaxkt -- desc: Made in 4 days for Cirno Day -- script: lua BUL={ {384,2,12,true,2,1},--SMALL FRIENDLY {400,3,6,true,2,3}, --BIG FRIENDLY {386,2,12,false,2}, --SMALL ENEMY (B) {403,3,6,false,2.5},--BIG ENEMY (B) {416,1,1,false,3}, --GIANT ENEMY (B) {388,2,12,false,2}, --SMALL ENEMY (R) {406,3,6,false,2.5},--BIG ENEMY (R) {417,1,1,false,3}, --GIANT ENEMY (R) {390,2,12,false,2}, --SMALL ENEMY (G) {409,3,6,false,2.5},--BIG ENEMY (G) {418,1,1,false,3}, --GIANT ENEMY (G) {392,2,12,false,2}, --SMALL ENEMY (Y) {412,3,6,false,2.5},--BIG ENEMY (Y) {419,1,1,false,3}, --GIANT ENEMY (Y) } EN={ {288,2,12},--BLUE FAIRY {290,2,12},--RED FAIRY {292,2,12},--GREEN FAIRY {294,2,12},--YELLOW FAIRY {304,1,1}, --FROZEN FAIRY {296,2,10},--BLUE BIG FAIRY {298,2,10},--GREEN BIG FAIRY {300,4,10,12},--HINA SPIN {305,3,8,11}, --BLUE KEDAMA {308,3,8,11}, --RED KEDAMA {311,1,1}, --FROZEN KEDAMA {312,1,1}, --FROZEN HINA } STG_NAME={ "Great Youkai Forest", "Moriya Shrine", } DIA={ [1]={ [1]={ {0,false,"Hey, why are you shooting at me?"}, {32,true,"You were the first one to do it."}, {4,false,"I've got business to do, so go away."}, {34,true,"Hey, that's not very nice.", "I guess I'll have to teach you a lesson."}, {4,false,"And why the hecc should I care?"}, {"music",1}, {32,true,"I'm the goddess of misfortune,", "that's why."}, {6,false,"Oh, I'm going to have 2 frozen", "goddesses today!"}, {36,true,"...","What?"}, } } } function startGame() p={ x=-20, y=68, xs=1.35, ys=1.35, xv=0, yv=0, hit=2, shot=0, bomb=0, lives=2, bombs=2, score=0, dispScore=0, graze=0, bombsGot=0, dead=38, iF=0, hitFunc=function() if p.invul then return end p.dead=60 p.iF=70 p.invul=true turnBulIntoItem() sfx(8,24,-1,1) for i=1,40 do addPart(2,p.x+rand(0,8),p.y+rand(0,8), rand(-1000,1000)/1000,rand(-1000,1000)/1000, 1,120,1) end addPart(4,p.x+4,p.y+4,0,0,1,23,1) if p.lives==0 then p.dead=-1 end end } part={} spellbg={} bul={} enemy={} item={} camX=0 diaY=136 lvl=1 spellX=0 nextdia={1,1} dialogue=0 dispStgName=0 spellcard=nil boss=nil t=0 spawnT=0 spawnUpd=true cd=0 results=0 music(0) end t=0 option=1 inMenu=true music(2) --SPAWN-- function spawn1() local st=spawnT if st==60 then addEnemy(240,70,1,1,16,8,1) end if range(st,180,260) and (st%40==20) then addEnemy(240,30+(st-180),1,1,16,8,1) end if st==360 then dispStgName=240 end if range(st,500,580) and (st%8==0) then addEnemy(240+st%16//8*10,30+(st-500),st%16//8+1,1,12,8,2) end if st==660 then for i=1,3 do addEnemy(240,40*i-10,i%2+1,1,14,8,(i+1)%2+1) end end if st==780 then for i=1,3 do addEnemy(240,40*i-10,(i+1)%2+1,1,14,8,i%2+1) end end if st==900 then for i=1,5 do addEnemy(240,20*i+10,(i+1)%2+1,1,14,8,i%2+1) end end if st==1100 then addEnemy(240,70,8,2,999,12,1) end if range(st,1800,2400) and (st%100==0) then addEnemy(240,rand(30,90),st%400//200+1,1,14,8,2) end end --ENEMY BEHAVIOR-- --Frozen enemy function enBeh0(v) v.yv=v.yv+0.05 if v.y+v.yv>128 then for i=-1,1 do addPart(1,v.x,130,i*1.25,-1,1+i,25,0.85) end if v.anim==11 then for i=-6,6 do addBul(3+v.id*3,v.x,136,270+i*90/6,1) end end sfx(3,24,-1,1) if v.anim==12 then v.beh=v.nt v.anim=8 v.y=128 v.t=0 v.yv=0 v.fr=0.8 return false end return true end end --STAGE 1 PRE-MIDBOSS ENEMY --flies forward, shoots and flies away --id1: shoot cluster forward --id2: shoot aimed beam function enBeh1(v) if v.t<60 then v.x=v.x-(60-v.t)/40 end if v.t==70 then if v.id==1 then for i=-4,4 do addBul(v.anim*3,v.x,v.y+5, 180+i*10,1) addBul(v.anim*3+1,v.x+2,v.y+5, 180+i*10,0.9) end v.xv=3 end if v.id==2 then local ang=angToPlr(v) for i=1,7 do for j=-1,1 do addBul(v.anim*3+1,v.x,v.y+5, ang+j*30,1.8-i/20) end end v.xv=-3*cos(ang) v.yv=-3*sin(ang) end sfx(1,48,-1,1) end if v.t>=140 then v.x=v.x-(v.t-140)/40 v.y=v.y-(v.t-140)/20 end if v.t==280 then return true end end function enBeh2(v) if v.t==0 then v.invul=true v.bossPart=true end if v.t<40 then v.x=v.x-(60-v.t)/40 v.cx,v.cy=v.x,v.y else v.x=v.cx+sin((v.t-40)*0.84)*10 v.y=v.cy+sin(v.t-40)*50 if range(v.t,40,2100) then if v.t%55==40 then sfx(4,36,-1,1) end if v.t%55==5 then sfx(1,48,-1,1) addEnemy(v.x,v.y,9+v.t%100//50, 3,7,8,v.t%100//50) end if range(v.t%55,5,25) then v.x=v.x-sin((v.t%55-5)*9)*7 end end end if spawnT==2500 then v.beh=4 v.t=0 v.hp=300 v.nt=5 boss=v bossHP=300 cd=30*60 spellcard="Bad Luck Sign [Bad Fortune]" spawnUpd=false end end --KEDAMA function enBeh3(v) if v.t==0 then v.ang=angToPlr(v) v.spd=-1 else v.x=v.x+cos(v.ang)*v.spd v.y=v.y+sin(v.ang)*v.spd v.spd=clamp(v.spd+0.025,-0.25,1) if v.x<-8 then for i=-6,6 do addBul(3+v.id*3,-4,v.y+4,i*90/6,1) end sfx(1,48,-1,1) return true end if v.x>248 then for i=-6,6 do addBul(3+v.id*3,244,v.y+4,180+i*90/6,1) end sfx(1,48,-1,1) return true end if v.y<0 then for i=-6,6 do addBul(3+v.id*3,v.x+4,4,90+i*90/6,1) end sfx(1,48,-1,1) return true end if v.y>144 then for i=-6,6 do addBul(3+v.id*3,v.x+4,140,270+i*90/6,1) end sfx(1,48,-1,1) return true end end end --HINA UNFORTUNE WHEEL function enBeh4(v) if range(v.t,0,60) then v.x=v.x+(200-v.x)/8 v.y=v.y+(70-v.y)/8 end if v.t==90 then v.invul=false end if v.t>=90 then local vt=v.t%180 if v.t%90==0 then v.ang=angToPlr(v) end if range(vt,90,135) and vt%2==0 then local ang=vt*3+180 addBul(7,v.x+4+cos(ang)*20, v.y+4+sin(ang)*15,vt*4+v.ang-45,1) addBul(7,v.x+4+cos(ang)*19, v.y+4+sin(ang)*14,vt*4+v.ang-90,1.3) end if range(vt,0,45) and vt%2==0 then local ang=(22.5-vt)*3+180 addBul(7,v.x+4+cos(ang)*20, v.y+4+sin(ang)*15,(45-vt)*4+v.ang-45,1) addBul(7,v.x+4+cos(ang)*19, v.y+4+sin(ang)*14,(45-vt)*4+v.ang-90,1.3) end end end --HINA DIALOGUE function enBeh5(v) if range(v.t,10,90) then v.x=v.x+(200-v.x)/8 v.y=v.y+(70-v.y)/8 end if v.t==60 then dialogue=310 end if (v.t>60) and (dialogue>0) then v.t=61 end if v.t==90 then v.beh=6 v.hp=300 v.t=0 v.invul=false v.nt=7 v.stopAt=100 boss=v bossHP=300 cd=30*60 end end --HINA NONSPELL 1 function enBeh6(v) local vt,x,y=v.t%300,v.x+4,v.y+4 if range(vt,0,180) and (vt%2==0) then addBul(7,x+cos(vt*4)*8, y+sin(vt*4)*8,vt*4+45,-1.5) addBul(7,x+cos(vt*4+180)*8, y+sin(vt*4+180)*8,vt*4-45,-1.5) addBul(4,x+cos(vt*4+90)*8, y+sin(vt*4+90),vt*4+135,-1.5) addBul(4,x+cos(vt*4-90)*8, y+sin(vt*4-90),vt*4-135,-1.5) end if range(vt,0,180) and (vt%30==0) then addBul(5,x,y,angToPlr(v),1) end if range(vt,240,300) then if vt==240 then v.aimX=rand(180,220) v.aimY=rand(45,95) end v.x=v.x+(v.aimX-v.x)/8 v.y=v.y+(v.aimY-v.y)/8 end end function enBeh7(v) if v.t==0 then v.dmgRate=0.3 v.nt=8 spellcard="Flawed Sign [Broken Amulet]" turnBulIntoItem() cd=60*60 end if v.t==60 then v.invul=false end if v.t>=60 then vt=(v.t-60)%180 if vt==0 then v.ang=angToPlr(v) end if range(vt,0,80) and (vt%20==0) then local count=8+sin(vt*2.25)*4//1*8//1 for i=1,count do for j=1,2 do addBul(6,v.x+4,v.y+4,v.ang+i*360/count,0.8,1) end end end if range(vt,120,179) then if vt==120 then v.aimX=rand(180,220) v.aimY=rand(45,95) end v.x=v.x+(v.aimX-v.x)/8 v.y=v.y+(v.aimY-v.y)/8 end else v.x=v.x+(200-v.x)/8 v.y=v.y+(70-v.y)/8 end end function enBeh8(v) if range(v.t,10,70) then v.x=v.x+(200-v.x)/8 v.y=v.y+(70-v.y)/8 end if v.t==10 then v.hp=300 v.stopAt=100 v.nt=9 v.dmgRate=1 bossHP=300 boss=v cd=30*60 end if v.t==90 then v.invul=false end if v.t>=90 then local vt=(v.t-90)%340 if range(vt,0,240) and (vt%5==0) then local r=clamp(vt/7,0,15) local a=vt*2.23 for i=1,4 do addBul(7,v.x+4+cos(vt*4)*r, v.y+4+sin(vt*4)*r,a,1) addBul(4,v.x+4+cos(vt*4+180)*r, v.y+4+sin(vt*4+180)*3,a+45,1) a=a+90 end end if range(vt,240,260) and (vt%5==0) then local ang=angToPlr(v) for i=-4,4 do addBul(6,v.x+4,v.y+4,ang+i*15,1) end end if range(vt,300,360) then if vt==300 then v.aimX=rand(180,220) v.aimY=rand(45,95) end v.x=v.x+(v.aimX-v.x)/8 v.y=v.y+(v.aimY-v.y)/8 end end end function enBeh9(v) if range(v.t,0,60) then v.x=v.x+(200-v.x)/8 v.y=v.y+(70-v.y)/8 end if v.t==0 then v.stopAt=50 v.dmgRate=0.25 v.nt=10 spellcard="Evil Spirit [Misfortune's Wheel" turnBulIntoItem() cd=60*60 end if v.t==90 then v.invul=false end if v.t>=90 then local vt=(v.t-90)%300 if range(vt,0,200) and (vt%4==0) then local ang,bang,r=vt/3,v.t*3.43,vt/3 for i=1,8 do addBul(3,v.x+4+sin(ang)*r,v.y+4+ cos(ang)*r,bang,0.2,2) ang,bang=ang+45,bang+45 end end if range(vt,240,299) then if vt==240 then v.aimX=rand(180,220) v.aimY=rand(45,95) end v.x=v.x+(v.aimX-v.x)/8 v.y=v.y+(v.aimY-v.y)/8 end end end function enBeh10(v) if range(v.t,0,59) then v.x=v.x+(200-v.x)/8 v.y=v.y+(70-v.y)/8 end if v.t==0 then v.nt=11 spellcard="Wound Sign [Pain Flow]" spellX=0 turnBulIntoItem() cd=60*60 end if v.t==70 then v.invul=false end if v.t>=70 then local vt,mult=(v.t-70)%100, (v.t-70)//100*3 if range(vt,0,20) and (vt%5==0) then if vt==0 then v.ang=angToPlr(v) end for i=1,30 do addBul(3+rand(0,1)*3,v.x+4,v.y+4, v.ang+i*12+rand(-1000,1000)*mult/1000,1) end end if range(vt,40,99) then if vt==40 then v.aimX=rand(180,220) v.aimY=rand(45,95) end v.x=v.x+(v.aimX-v.x)/8 v.y=v.y+(v.aimY-v.y)/8 end end end function enBeh11(v) v.anim=12 v.x=v.x-0.3 v.bossPart=false if v.t==120 then lvlEnd=true end end --ENEMY-- function drawEn() for k,v in pairs(enemy) do local ens=EN[v.anim] local sp=ens[1]+t//ens[3]%ens[2] if v.bossPart then for i=1,5 do circ(v.x+3+sin(t*5+(6-i)*15)*(i-1), v.y+6-i*2,6-i,1) circ(v.x+4-sin(t*5+(6-i)*15)*(i-1), v.y+6-i*2,6-i,1) end for i=1,5 do circ(v.x+3+sin(t*5+(6-i)*15)*(i-1), v.y+6-i*2,5-i,2) circ(v.x+4-sin(t*5+(6-i)*15)*(i-1), v.y+6-i*2,5-i,2) end end spr(sp,v.x,v.y,0) end end function updEn() if cd>0 then cd=cd-1 if cd<=0 then boss.hitFunc(boss,999999) end end local k=1 while k<=#enemy do local v=enemy[k] local remove=_G["enBeh"..v.beh](v) v.x=v.x+v.xv v.y=v.y+v.yv v.xv=v.xv*v.fr v.yv=v.yv*v.fr if sqr(v.x-p.x)+sqr(v.y-p.y)<= sqr(v.hit+p.hit) then p.hitFunc(p) end if remove then table.remove(enemy,k) else v.t=v.t+1 k=k+1 end end end function addEnemy(ax,ay,an,ab,ah,ar,aid) table.insert(enemy,{ x=ax, y=ay, xv=0, yv=0, anim=an, beh=ab, hp=ah, hit=ar, id=aid, dmgRate=1, fr=0.8, t=0, hitFunc=function(v,dmg) if not(v.invul) then p.bombs=p.bombs+0.0075*dmg v.hp=v.hp-dmg*v.dmgRate if (v.stopAt~=nil) and (v.hp<=v.stopAt) then v.hp=v.stopAt v.invul=true v.beh=v.nt v.t=0 v.stopAt=nil end if v.hp<=0 then p.score=p.score+10000 v.invul=true v.beh=0 if EN[v.anim][4]~=nil then v.anim=EN[v.anim][4] else v.anim=5 end if boss==v then spellcard=nil boss=nil cd=0 turnBulIntoItem() if not(v.gave1UP) then v.gave1UP=true addItem(v.x,v.y,2,false) end if cd>0 then p.score=p.score+ (clamp(cd,5*30,55*30)-15*30)*5000+50000 end local len=#spellbg for i=1,len do local v1=spellbg[1] addPart(3,v1.x,v1.y,0,v1.yv, v1.s,20,1) table.remove(spellbg,1) end else addItem(v.x,v.y,0,false) end v.fr=1 v.xv=0 v.yv=0 sfx(2,48,-1,1) end end end }) end --BUL BEHAVIORS-- function bul1(v) if (v.t%30==0) and (rand(1,4)==1) and range(v.t,30,90) and not(v.changed) then v.ang=v.ang+30*(rand(0,1)*2-1) v.changed=true end end function bul2(v) v.spd=clamp(v.spd+0.0075,0,1) end --BUL-- function drawBul() for k,v in pairs(bul) do local b=BUL[v.type] local sp=b[1]+v.t//b[3]%b[2] spr(sp,v.x-4,v.y-4,0) end end function updBul() local k=1 while k<=#bul do local v,remove=bul[k],false v.x=v.x+cos(v.ang)*v.spd v.y=v.y+sin(v.ang)*v.spd v.t=v.t+1 if v.id~=nil then _G["bul"..v.id](v) end if not(range(v.x,-16,256)) or not(range(v.y,-16,152)) then remove=true end if remove or bulCollide(k,v) then if k>#bul then return end table.remove(bul,k) else k=k+1 end end end function addBul(at,ax,ay,aa,as,aid) table.insert(bul,{ type=at, x=ax, y=ay, ang=aa, spd=as, id=aid, t=0, }) end function bulCollide(k,v) local check,dmg={p},BUL[v.type][6] if BUL[v.type][4] then check=enemy else dmg=0 end for k1,v1 in pairs(check) do local d1,d2=sqr(v1.x+4-v.x)+ sqr(v1.y+4-v.y),v1.hit+ BUL[v.type][5] if d1<=sqr(d2) then for i=1,dmg do addPart(2,v1.x+4,v1.y+4, rand(-1000,1000)/1000, rand(-1000,1000)/1000,12,120,1) end v1.hitFunc(v1,dmg) return true elseif d1<=sqr(d2+8) then if not(v.grazed) and not(BUL[v.type][4]) then v.grazed=true addPart(2,v1.x+4,v1.y+4, rand(-1000,1000)/1000, rand(-1000,1000)/1000,12,120,1) p.graze=p.graze+1 p.score=p.score+500 p.bombs=p.bombs+0.01 end end end return false end --ITEM-- function addItem(ax,ay,at,ah) table.insert(item,{ x=ax, y=ay, type=at, xv=1, homing=ah, }) end function turnBulIntoItem() local len,k=#bul,1 for i=1,len do local v=bul[k] if not(BUL[v.type][4]) then addItem(v.x-4,v.y-4,1,true) table.remove(bul,k) else k=k+1 end end end function drawItem() for k,v in pairs(item) do spr(464+v.type,v.x,v.y,0) end end function updItem() local k=1 while k<=#item do local v=item[k] if v.homing then if p.dead~=0 then v.homing=false else if v.x-p.x>2.5 then v.x=v.x-2.25 end if v.x-p.x<-2.5 then v.x=v.x+2.25 end if v.y-p.y>2.5 then v.y=v.y-2.25 end if v.y-p.y<-2.5 then v.y=v.y+2.25 end v.xv=0 end else v.xv=clamp(v.xv-0.025,-1.5,1) v.x=v.x+v.xv if p.x>180 then v.homing=true end end if (v.x<-8) or itemGrab(v) then table.remove(item,k) else k=k+1 end end end function itemGrab(v) if sqr(v.x-p.x)+sqr(v.y-p.y)<= sqr(p.hit+8) then if v.type==0 then p.score=p.score+ floor((clamp(p.x,60,180)-60) *5000/120+5000) sfx(5,36) end if v.type==1 then p.score=p.score+ floor((clamp(p.x,60,180)-60) *500/120+500) sfx(5,36) end if v.type==2 then p.lives=p.lives+1 sfx(7,36) end return true end end --PLR-- function drawPlr() local sp=256+t//12%2 if p.shot>0 then sp=261+t//12%2 end if p.bomb>20 then sp=258 elseif p.bomb>15 then sp=259 elseif p.bomb>0 then sp=260 end if ((p.invul) and (t//4%2==0)) or not(p.invul) then spr(sp,p.x,p.y-1,0) end end function updPlr() if (p.dead~=0) then if range(p.dead,1,39) then p.x=30-p.dead if p.dead==39 then p.lives=p.lives-1 p.bombs=2 end end if p.dead<0 then p.x=-20 end p.dead=p.dead-1 if p.dead<40 then return end end if p.iF>0 then p.iF=p.iF-1 if p.iF<=0 then p.invul=false end end if lvlEnd then if p.endSeq then p.xv=clamp(p.xv+0.05,0,2) p.yv=clamp(p.yv+0.05,0,1) p.x=p.x+p.xv p.y=p.y-p.yv if (p.x>240) or (p.y<-8) then results=1 p.endSeq=false end elseif p.endSeq==nil then p.shot=0 p.bomb=0 p.xv=0 p.yv=0 p.endSeq=true end else local spd=1 if p.shot>0 then p.shot=p.shot-1 spd=0.6 end if p.bomb>0 then p.bomb=p.bomb-1 if p.bomb==20 then if p.superbomb then turnBulIntoItem() for k,v in pairs(enemy) do v.hitFunc(v,50) end sfx(1,48,-1,0,15,-2) p.xv=p.xv-12 addPart(4,p.x+4,p.y+4,0,0,1,23,1) else p.xv=p.xv-6 for i=-5,5 do addBul(2,p.x+4,p.y+5,i*7,3) addBul(2,p.x+2,p.y+5,i*5,2.8) addBul(2,p.x,p.y+5,i*3,2.6) sfx(1,48) end end end if p.bomb==0 then p.superbomb=false end end if p.bombs<5 then if dialogue<=0 then addBombs(0.001) end else p.bombs=5 end p.bombsGot=0 if (p.bomb<=10) and (p.dead==0) then if btn(0) then p.yv=-p.ys*spd end if btn(1) then p.yv=p.ys*spd end if btn(2) then p.xv=-p.xs*spd end if btn(3) then p.xv=p.xs*spd end end if dialogue==0 then if p.bomb==0 then if btn(4) and (p.shot==0) and (p.dead==0) then p.shot=4 for i=-1,1 do addBul(1,p.x+6,p.y+5,i*10,5) end sfx(0,36) end if btnp(5) and (p.bombs>=1) then if p.bombs>=5 then p.bombs=0 p.bomb=60 p.superbomb=true p.iF=60 p.invul=true p.dead=0 sfx(6,36) elseif p.dead==0 then p.bombs=p.bombs-1 p.bomb=30 end end end else if btnp(4) then dialogue=1 end if btn(5) and (dialogue>5) then dialogue=5 end end p.x=p.x+p.xv p.y=p.y+p.yv if p.x<-1 then p.x=-1 end if p.x>233 then p.x=233 end if p.y<9 then p.y=9 end if p.y>129 then p.y=129 end p.xv=p.xv*0.8 p.yv=p.yv*0.8 end end function addBombs(b) if (p.bombsGot-b)<=1 then p.bombs=p.bombs+b p.bombsGot=p.bombsGot+b elseif (p.bombsGot<1) then p.bombs=p.bombs+b-p.bombsGot p.bombsGot=1 end end --MAP-- --[[function drawMap() local mx,x,y=-(camX//1%8), camX//8%240,camX//1920+1 for i=1,31 do map(x,y,1,16,mx,8,0) x=x+1 if x>239 then x=0 y=y+17 end mx=mx+8 end end]] --BGS-- function bg1() local cx=camX//24 for x=0,30 do for y=1,16 do local sp,bx=480+y%2*16,-(camX//3%8) if y>=10 then sp=482 if cx%2==1 then sp=sp-1 end if y==10 then sp=sp+16 end else bx=-(camX//(y//4+1)%8) end spr(sp,bx+x*8,y*8) end cx=cx+1 end end function drawSpell() for k,v in pairs(spellbg) do circ(v.x,v.y,v.s+sin(v.t*4)*1.5,1) end if spellcard~=nil then local len=print(spellcard,0,-8) if spellX0 then local ntxt=STG_NAME[lvl] local sx,nx,nlen=120,40,print(ntxt,0,-8) if dispStgName>180 then sx=240-(240-dispStgName)*2 nx=-nlen+(240-dispStgName)* (40+nlen)/60 end if dispStgName<80 then sx=120-(80-dispStgName)*2 nx=40+(80-dispStgName)*200/80 end local txt="Stage "..lvl local len=print(txt,0,-8) tri(sx-8,66,sx-1,66,sx-1,59,15) rect(sx-1,59,len+1,8,15) print(txt,sx,60,12) tri(nx-8,76,nx-1,76,nx-1,69,15) rect(nx-1,69,nlen+1,8,15) print(ntxt,nx,70,12) dispStgName=dispStgName-1 end end function drawHUD() rect(0,0,240,8,14) for i=1,5 do local sp=368 if p.lives=5) and (t//8%5+1==i) then sp=376 end spr(sp,i*8+36,0,0) end p.dispScore=clamp(p.dispScore+3579, 0,p.score) local txt=p.dispScore.."" while #txt<10 do txt="0"..txt end local len=print(txt,0,-8) print(txt,239-len,1,12) print("G:"..p.graze,150,1,12) if boss~=nil then rect(87,1,60,6,15) rect(87,1,60*boss.hp/bossHP,6,5) end if (t<60) or ((t<120) and (t//4%2==0)) then line(183,8,183,136,12) local txt="ITEM GET LINE" for i=1,#txt do print(string.sub(txt,i,i),185,i*6+30,12) end end if cd>0 then local num=((cd+59)//60).."" local len=print(num,0,-8) rect(238-len,128,len+2,8,15) print(num,239-len,129,12) end drawStgName() drawDia() end --DIALOGUE-- function drawDia() rect(0,diaY,240,20,14) if dialogue>0 then local dia=DIA[lvl][nextdia[1]][nextdia[2]] local sp,t1,t2=dia[1],dia[3],dia[4] local aY=0 if dialogue>295 then aY=1 end if t1==nil then t1="" end if t2==nil then t2="" end if dia[2] then rect(222,diaY+2,16,16,15) spr(sp,222,diaY+2-aY,0,1,0,0,2,2) print(t1,2,diaY+3,12) print(t2,2,diaY+11,12) else rect(2,diaY+2,16,16,15) spr(sp,2,diaY+2-aY,0,1,0,0,2,2) print(t1,20,diaY+3,12) print(t2,20,diaY+11,12) end end end function updDia() if dialogue>0 then if diaY>116 then diaY=diaY-2 end dialogue=dialogue-1 if dialogue==0 then local dia=DIA[lvl][nextdia[1]][nextdia[2]+1] if dia~=nil then nextdia[2]=nextdia[2]+1 if dia[1]=="music" then music(dia[2]) nextdia[2]=nextdia[2]+1 end dialogue=300 else nextdia[1]=nextdia[1]+1 end end elseif diaY<136 then diaY=diaY+2 end end --RESULT SCREEN-- function resultScreen() if results>0 then if range(results,30,49) then for x=0,29 do for y=1,16 do spr(511,x*8,y*8,0) end end elseif results>=50 then music() rect(0,8,240,128,15) if results==50 then p.score=p.score+25000*p.lives+ floor(10000*(p.bombs//1)) end center("STAGE "..lvl.." RESULTS",40) center("PLAYER SCORE: "..(25000*p.lives),48) center("BOMBS SCORE: "..floor(10000*(p.bombs//1)//1),56) center("Yeah, this is the end for now",120) center("Thanks for playing :p",128) if results>=200 then center("Press A(Z) to continue",80) if btnp(4) then inMenu=true music(2) end end end results=results+1 end end function deathScreen() if range(p.dead,-49,-30) then for x=0,29 do for y=1,16 do spr(511,x*8,y*8,0) end end elseif p.dead<=-50 then music() rect(0,8,240,128,15) center("GAME OVER",40) center("P.S. This game is too short",56) center("to have continues :P",64) if p.dead<=-200 then center("Press A(Z) to continue",80) if btnp(4) then inMenu=true music(2) end end p.dead=p.dead-1 end end --MENU-- function menuFunc() local a=-(t//4%8) for ax=0,30 do for ay=0,17 do spr(510,ax*8+a,ay*8+a) end end spr(0,54,4,0,1,0,0,2,2) center("CIRNO DAY DANMAKU",10) local options={"START","QUIT"} for k,v in pairs(options) do center(v,60+k*8) if option==k then local len=print(v,0,-8) spr(261+t//12%2,111-len/2,58+k*8,0) end end if btnp(0) and (option>1) then option=option-1 end if btnp(1) and (option<#options) then option=option+1 end if btnp(4) then if option==1 then startGame() inMenu=false end if option==2 then exit() end end t=t+1 end --MAIN-- function draw() _G["bg"..lvl]() --drawMap() drawSpell() drawPlr() drawEn() drawItem() drawBul() drawPart() drawHUD() end function upd() if spellcard~=nil then spellBG() end if (p.dead<=-50) or (results>50) then return end updPlr() updEn() updBul() updItem() updPart() updDia() _G["spawn"..lvl]() camX=camX+0.3 t=t+1 if spawnUpd then spawnT=spawnT+1 end end function TIC() if inMenu then menuFunc() else draw() upd() resultScreen() deathScreen() end end --UTILS-- function sin(a) return math.sin(rad(a)) end function cos(a) return math.cos(rad(a)) end function rad(a) return a*math.pi/180 end function range(n,a,b) return (n>=a) and (n<=b) end function rand(a,b) return math.random(a,b) end function sqr(a) return a*a end function angToPlr(v) return math.atan2(p.y-2-v.y,p.x-v.x)*180/math.pi end function clamp(n,a,b) if nb then n=b end return n end function floor(a) return math.floor(a) end function center(txt,y) local len=print(txt,0,-8) print(txt,120-len/2,y,12) end