0,]']±>Sï}WÿÍu§ðp8·d%qy)6o;]ÉA¦ösï÷ôôô”°ÂVl†3Ö9×+؉ Ú»‹ /Ü?‰:˜/„{ RRTUWX____SSTUVX[]^___________$%&')*,-//////////////////////5;??6;?6;??6;?6 ; ??6 ; ??6 ; ??6 ; ??Äÿÿþýûúù ú ú û ü üüýþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ = @j j  j j j j j j0 Hh h h h*@h h hhhhhHhhh` Hh h h h*@h h hhhhhHhh`h0 1ÎÀ?fffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwfffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwfffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwfvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgfwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgfffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgfffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwfffffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwfffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgfffffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffÌÌÌfffvwwgffffvwwgffffvwwgfffÌÌÌÌÌfvwwgffffvwwgffffvwwgffffvwwgffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffÌÌÌfffwwwwffffwwwwffffwwwwfffÌÌÌÌÌfwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffÌÌÌÝÝffwwwwffffwwwwffffwwwwfffvwwwwgffvwwwwgffvwwwwgffvÌÌÌÝÝfvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌvwwwwgffvwwwwgffvwwwwgffwwwwwwffwwwwwwffwwwwwwÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌwÌÌÌÌÌÌwwwwwwffwwwwwwffwwwwwwfvwwwwwwgvwwwwwwgvwwwwwwÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌwÌÌÌÌÌÌwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌwwÌÌÌwgÌÌÌÌÌÌÌÌÌÌÌwÌÌÌÌÌwwwwwwgvwwwwwwgvwwwwwwgwwwwwwwwwwwwwwwwwwwwwwwÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌwwÌÌÌwwÌÌÌÌÌÌÌÌÌÌÌwÌÌÌÌÌwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌwwwwÌÌÌwwwwÌÌÌÌÌÌwÌÌÌÌÌwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌwwwwÌÌÌwwwwÌÌÌÌÌÌwÌÌÌÌÌwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌwwwwÌÌÌwwwwÌÌÌÌÌÌÌÌÌwÌÌÌÌÌÌwwwwwwwwwwwwwwwwwwwwwwwvwwwwwwgvwwwwwwgvwwwwwwÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌwwwwÌÌÌwwwgÌÌÌÌÌÌÌÌÌwÌÌÌÌÌÌwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwÌÌÌÌÌÌÌÌÌÌÌÝÝÝÝÝÝÝÝwwwwÝÝÝwwwgÝÝÝÝÝÝÝÝÝwÝÝÝÝÝÝwwwwwwgvwwwwwwgvwwwwwwgfwwwwwwffwwwwwwffwwwwwwÌÌÌÌÌÌÌÌÌÌÌÝÝÝÝÝÝÝÝwwwwÝÝÝwwwfÝÝÝÝÝÝÝÝÝwÝÝÝÝÝÝwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwÌÌÌffwÌÌ333333wwwwwwwffwffwwwwwwffwwwwwwffwwwwwwffvwwwwgffvwwwwgffvwwwwgÌÌÌffvÌÌ333333wwwgwwgffgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgÌÌÌwwgÌ333vwwwwgffvwwwwgffvwwwwgffvwwwwgfffwwwwffffwwwwffffwwwwfÌÌÌwwfÌ333fwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwfÌÌÌwwf33333333333333333333333333333333333333333wwwwffffwwwwffffwwwwffffwwwwffffvwwgffffvwwgffffvwwgfÌÌÌwgf33333333333333333333333333333333333333333vwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgfÌÌÌwgf33333333333333333333333333333333333vwwgffffvwwgffffvwwgffffvwwgfffffwwffffffwwffffffwwffÌÌÌwff33333333333333333333333333333333333fwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffÌÌÌwff333333333333333wwf333333333ff33333333fwwffffffwwffffffwwffffffwwffffffvgffffffvgffffffvgffÌÌÌgff333333333333333vgf333333333ff33333333fvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffÌÌÌgff333333333333333vgf333333333gfff333fvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffÌÌÌgff333333333333333vgf333333333gfff333fvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffÝÝÝgff333333333333333333333333333gfff333333fvgffffffvgffffffvgffffffvgffffffwwffffffwwffffffwwffÝÝÝwff333333333333333333333333333wfff333333fwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffwff333333""""""""""""""""""""wfff""""""fwwffffffwwffffffwwffffffwwfffffvwwgffffvwwgffffvwwgfwgf333333""""""""""""""""""""wgff""""""vwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgf333fgfDDDwgffffvwwgffffvwwgffffvwwgffffvwwgffffwwwwffffwwwwffffwwwwffffwwwwf333fwfDDDwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwf333wwfffDDDwffffwwwwffffwwwwffffwwwwffffwwwwfffvwwwwgffvwwwwgffvwwwwgffvwwwwg333wwgffDDDwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwg333wwgDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffwwwwwwffwwwwwwffwwwwwwffwwwwww333wwwDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwww333wwwDDDDDDDDDDDDDDDDDDDDDDDDDDDDDwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwfvwwwwwwgvwwwwwwgvwwwwwwgvwwwwww333wwwDDDDDDDDDDDDDDDDDDDDDDDDDDDDDwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwww333wwwDDDDDDDDDDDDDDDDDDDDDDDDDDDDDwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww333wwwDDDDDDDDDDDDDDDDDDDDDDDDDDDDDwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww333wwwDDDDDDDDDDDDDDDDDDDDDDDwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww333wwwDDDDDDDDDDDDDDDDDDDDDDDwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww"""wwwDDDDDDDDDDDDDDDDDDDDDDDDDDDwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwvwwwwwwgvwwwwwwgvwwwwwwgvwwwwww"""wwwDDDDDDDDDDDDDDDDDDDDDDDDDDDvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwwwwDDDDDD333333333333333333333vwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgfwwwwwwffwwwwwwffwwwwwwffwwwwwwwwwDDDDDD333333333333333333333fwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwDDDfffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgDDDfffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgDDDwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgfffwwwwffffwwwwffffwwwwffffwwwwffffwwwwfDDDwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwfDDDwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgfDDDwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgfDDDwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgfffffwwffffffwwffffffwwffffffwwffffffwwffDDDwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffDDDwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffvgffffffvgffffffvgffffffvgffffffvgffDDDgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffDDDgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffDDDgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgff333gffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffwwffffffwwffffffwwffffffwwffffffwwff333wffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwfffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgfwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwfffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwfvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgvwwwwwwgfwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffwwwwwwffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgffvwwwwgfffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgfffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffvgffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwffffffwwfffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffvwwgffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwffffwwwwff‹`-- title: pquirrel's picture poker -- author: pquirrel -- desc: Tiny recreation of SM64DS Picture Poker -- license: MIT License (change this to your license of choice) -- version: 1.0 -- script: lua -- input: mouse -- PMEM: -- 0: Highest Streak -- 1: Load Settings (0:F, 1:T) -- 2: Saved Music Setting (0:F, 1:T) -- 3: Saved Sound Setting (0:F, 1:T) histreak=0 streak=0 -- 0: Title, 1: Game page=0 -- 0: Player Action 1: Game Action act=0 -- Frames since start t=0 -- Frames since play button clicked tss=0 -- Mouse click state last frame mlf=false -- Current Bet cbet=1 -- Current # of Coins ccoin=20 -- Your Cards cards={ 0,0,0,0,0 } -- Cards You've selected csel={ false,false,false,false,false } -- Sort Map of cards csort={ 0,0,0,0,0 } cardsv={0,0,0} -- Opponent's Cards comps={ 0,0,0,0,0 } compsRM={ false,false,false,false,false } osort={ 0,0,0,0,0 } compsv={0,0,0} -- Interactivity istate=false -- Sort Readiness sortReady=false -- Show text showText=false showResult=false result=0 coinsWon=0 addedCoinsWon=false gameOver=false -- Hand value to string hvs={ "JUNK", "1 PAIR", "2 PAIRS", "3-OF-A-KIND", "FULL HOUSE", "4-OF-A-KIND", "FLUSH" } -- Hand Value to multiplier htm={ 1,2,3,4,6,8,16 } -- Animation a={ deal={ -- Card deal v=0, r=false, l=150 }, cs={ -- Card select {v=0,r=0},{v=0,r=0}, -- r=0: not running {v=0,r=0},{v=0,r=0}, -- r=1: inc v {v=0,r=0}, -- r=2: dec v l=15 }, flip={ -- Flip selected cards v=0, r=0, l=30 }, rise={ -- Give selected cards to dealer v=0, r=0, l=60 }, deal2={ -- Deal new cards v=0, r=false, l=90, bl=90, }, sort={ -- Sort cards v=0, r=false, l=60 }, ochange={ -- Opponent Change Cards v=0, r=false, l=40 }, osort={ v=0, r=false, l=60 }, reveal={ -- Opponent Reveal v=0, r=false, l=60 }, vflash={ -- Flash Card Values a=0, b=0, r=false, v=0 }, reward={ v=0, r=false, l=120, }, lose={ v=0, r=false, l=30, }, draw={ v=0, r=false, l=60, }, set={ v=0, r=0, l=30 } } s={ false, -- Disable Music false, -- Disable SFX } timer={ 0, nil } function BOOT() -- Start Music music(0) -- Pmem histreak=pmem(0) if pmem(1)==1 then if pmem(2)==1 then s[1]=true music() else s[1]=false end if pmem(3)==1 then s[2]=false else s[2]=false end end pmem(1,0) end function TIC() -- Draw Contents map() if tss<120 then drawTitle() end if tss>0 then drawGameUI() drawCards() drawText() end drawSettings() -- Increment Tick Counter t=t+1 if page==1 then tss=tss+1 end incAnim() if timer[1]>0 then timer[1]=timer[1]-1 if timer[1]==0 then timer[2]() end end -- Update Mouse state local mx,my,l=mouse() mlf=l end function wait(t,onComplete) timer[1]=t timer[2]=onComplete end -- Increment Animation Counters function incAnim() -- Round start if a.deal.r then a.deal.v=a.deal.v+1 if a.deal.v>a.deal.l then a.deal.r=false a.deal.v=0 -- Enable interactivity istate=true end end -- Card select for i=1,5 do if a.cs[i].r>0 then if a.cs[i].r==1 then a.cs[i].v=a.cs[i].v+1 if a.cs[i].v>a.cs.l then a.cs[i].r=0 a.cs[i].v=a.cs.l end elseif a.cs[i].r==2 then a.cs[i].v=a.cs[i].v-1 if a.cs[i].v<0 then a.cs[i].r=0 a.cs[i].v=0 end end end end -- Flip Cards if a.flip.r>0 then if a.flip.r==1 then a.flip.v=a.flip.v+1 if a.flip.v>a.flip.l then a.flip.r=0 a.flip.v=a.flip.l -- Start rise animation a.rise.r=1 end elseif a.flip.r==2 then a.flip.v=a.flip.v-1 if a.flip.v<0 then a.flip.r=0 a.flip.v=0 end end end -- Give Cards to dealer if a.rise.r==1 then a.rise.v=a.rise.v+1 if a.rise.v>a.rise.l then a.rise.r=2 a.rise.v=a.rise.l dealNewCards() end end -- New cards to player if a.deal2.r then a.deal2.v=a.deal2.v+1 if a.deal2.v>a.deal2.l then a.deal2.r=false a.deal2.v=a.deal2.l prepSort(false) end end -- Sort your cards if a.sort.r then a.sort.v=a.sort.v+1 if a.sort.v>a.sort.l then a.sort.r=false a.sort.v=a.sort.l opponentMove() end end -- Opponent Change Cards if a.ochange.r then a.ochange.v=a.ochange.v+1 if a.ochange.v>a.ochange.l then a.ochange.r=false a.ochange.v=0 prepSort(true) end end -- Sort opponent's cards if a.osort.r then a.osort.v=a.osort.v+1 if a.osort.v>a.osort.l then a.osort.r=false a.osort.v=a.osort.l a.reveal.r=true end end -- Reveal opponent's cards if a.reveal.r then a.reveal.v=a.reveal.v+1 if a.reveal.v>a.reveal.l then a.reveal.r=false a.reveal.v=a.reveal.l roundEndSequence() end end -- Add coins for winning if a.reward.r then a.reward.v=a.reward.v+1 if a.reward.v>=a.reward.l*.75 and not addedCoinsWon then ccoin=ccoin+coinsWon addedCoinsWon=true end if a.reward.v>a.reward.l then a.reward.r=false a.reward.v=0 wait(90,prepAndStartRound) end end -- Slide coins bet away if a.lose.r then a.lose.v=a.lose.v+1 if a.lose.v>a.lose.l then a.lose.r=false a.lose.v=a.lose.l wait(90,prepAndStartRound) end end -- Put coins bet back if a.draw.r then a.draw.v=a.draw.v+1 if a.draw.v>a.draw.l then a.draw.r=false a.draw.v=a.draw.l ccoin=ccoin+coinsWon wait(90,prepAndStartRound) end end -- Flash card values if a.vflash.r then a.vflash.v=a.vflash.v+1 if a.vflash.v>60 then a.vflash.v=0 end end -- Settings Menu if a.set.r>0 then if a.set.r==1 then a.set.v=a.set.v+1 if a.set.v>a.set.l then a.set.r=0 a.set.v=a.set.l end elseif a.set.r==2 then a.set.v=a.set.v-1 if a.set.v<0 then a.set.r=0 a.set.v=0 end end end end -- Sequence that occurs after opponent's -- cards are revealed function roundEndSequence() -- Win sequence showText=true result=determineWinner()+1 wait(45,function() -- Result Actions if result==1 then -- Player won coinsWon=htm[cardsv[1]]*cbet -- Update streak streak=streak+1 if streak>histreak then histreak=streak pmem(0,histreak) end csfx(3) elseif result==2 then -- Opponent Won coinsWon=0 -- Update streak streak=0 csfx(4) else -- Tie coinsWon=cbet csfx(5) end -- Show Winner showResult=true -- Trigger Reward Animation wait(120,function() -- Hide stuff a.vflash.r=false showResult=false -- Select Reward Animation if result==1 then csfx(6) a.reward.r=true elseif result==2 then csfx(7) a.lose.r=true else csfx(10) a.draw.r=true end end) end) end function prepSort(opponent) if opponent then osort=getSortedHandIndices(comps) compsv[1],compsv[2],compsv[3]=valueOfHand(comps) for i=1,5 do if osort[i]~=i then -- Sort Animation a.osort.r=true return end end -- No Sort Animation a.reveal.r=true else csort=getSortedHandIndices(cards) cardsv[1],cardsv[2],cardsv[3]=valueOfHand(cards) sortReady=true for i=1,5 do if csort[i]~=i then -- Sort Animation a.sort.r=true return end end -- No Sort Animation opponentMove() end end -- Draw the title screen function drawTitle() -- Variance in Y of logo local logoYVar=(6*math.sin(t/40))-(20/(t/30+1)) if page==1 then logoYVar=logoYVar-((tss/10)*(tss/10)) end -- Logo spr(432,44,0+logoYVar,6,2,0,0,10,5) -- Check if play is clicked if page==0 then local tcpRes=mouseRange(120,110,32,16) if tcpRes==0 then -- Play Held spr(446,88,94,6,2,0,0,2,2) spr(478,120,94,6,2,0,0,2,2) elseif tcpRes==1 and mlf then -- Play Clicked page=1 startRound() csfx(13,1) spr(442,88,94,6,2,0,0,2,2) spr(474,120,94,6,2,0,0,2,2) else -- Play Not Clicked local sprNum=(tcpRes-1)*2+442 spr(sprNum,88,94,6,2,0,0,2,2) spr(sprNum+32,120,94,6,2,0,0,2,2) end elseif page==1 then -- Quad Move Down local pyp=((tss/10)*(tss/10)) spr(442,88,94+pyp,6,2,0,0,2,2) spr(474,120,94+pyp,6,2,0,0,2,2) end end -- Checks whether or not the mouse is clicked -- in a given region. -- 0: Mouse is leftclicked in the region -- 1: Mouse is in the region -- 2: Mouse is not in the region function mouseRange(cx,cy,rangeX,rangeY) local mx,my,click=mouse() if mxcx-rangeX then if mycy-rangeY then if click then return 0 else return 1 end end end return 2 end -- Draws Ingame UI function drawGameUI() -- Card Value Indicators local valIndVarX=30/(tss/10+1)-2 if tss>90 then valIndVarX=0 end spr(126,1-valIndVarX,70,7,1,0,0,2,9) -- Value indicator flashes if a.vflash.r and a.vflash.v%60>=30 then if a.vflash.a==a.vflash.b then spr(232,1-valIndVarX,59+a.vflash.a*11,15,1,0,0,2,2) else spr(234,1-valIndVarX,59+a.vflash.a*11,15,1,0,0,2,2) spr(236,1-valIndVarX,59+a.vflash.b*11,15,1,0,0,2,2) end end -- Bet Arrow if istate then local betSpr=210 local bm=mouseRange(9,16,8,8) if bm==0 then -- Set to held sprite betSpr=178 elseif bm==1 and mlf then -- Click bet action on release bet() end -- Flash bet if math.floor(t)%60>=30 and act==0 then betSpr=betSpr+2 end spr(betSpr,1-valIndVarX,11,7,1,0,0,2,2) end -- Init Bet coins/Coin amount local iy=27 if not istate then iy=10 end spr(242,1-valIndVarX,iy,7) -- Bet Coins local function coinsBetPos(i) local sx=-8+9*i local sy=1 if a.lose.v>0 then return xyt(sx,sy,sx,-9,a.lose.v,a.lose.l,1) elseif a.draw.v>0 then return xyt(sx,sy,1,iy,a.draw.v,a.draw.l,1) else return sx,sy end end for i=1,5 do if cbet>=i then local cbpx,cbpy=coinsBetPos(i) spr(242,cbpx,cbpy,7) end end -- Coin Amount local function coinAmountY() if a.reward.v>=a.reward.l*.75 then return iy-jiggle((a.reward.v-a.reward.l*.75)/(a.reward.l*.25))*4 else return iy end end font(ccoin,10-valIndVarX,coinAmountY(),7,9) -- Add bonus local function bonusY() if a.reward.v0 then cbet=cbet+1 ccoin=ccoin-1 csfx(1) else csfx(12) end end -- Returns a tweened point from x1,y1 to x2,y2. -- The tweened value is a position in between -- these points. The closer t is to tf, -- the closer the point is to x2,y2. -- e is the index of an easing function. -- 0: linear -- 1: inOutQuad function xyt(x1,y1,x2,y2,t,tf,e) local xd=x2-x1 local yd=y2-y1 local p=t/tf if e==1 then p=outQuad(p) end if e==2 then p=inCubic(p) end return x1+xd*p,y1+yd*p end function inOutQuad(p) if p<0.5 then return 2*p*p else local h=(-2*p)+2 return 1-h/2 end end function inCubic(p) return p*p*p end function jiggle(p) local c1=3*math.pi local c2=math.pi/2 return math.sin(p*c1)*math.cos(p*c2) end function outQuad(p) return 1-(1-p)*(1-p) end -- Draws Cards function drawCards() -- Round start animation if a.deal.r and (a.deal.v0 then return 116-hv-(outQuad(a.rise.v/a.rise.l)*(148-hv)) else return 116-inOutQuad(a.cs[i].v/a.cs.l)*hv end end local function cflip(i) -- Card flip if csel[i] then return (a.flip.v/a.flip.l)*math.pi else return 0 end end for i=1,5 do card(30+30*i,cardY(i),cards[i],cflip(i)) end -- Opponent Cards for i=1,5 do card(30+30*i,20,comps[i],math.pi) end -- Newly distributed cards local b=0 for i=1,5 do if csel[i] then -- Tween Card local ap=a.deal2.v-b*15 if ap==5 then csfx(15) end if ap<0 then ap=0 end if ap>a.deal2.bl then ap=a.deal2.bl end local x,y=xyt(120,-40,30+30*i,116,ap,a.deal2.bl,1) b=b+1 -- Draw card with tweening card(x,y,cards[i],0) end end -- Toggle Selected if istate then toggleCSel() end else -- Sorting Animation -- Opponent Change card Y local function oCardY(i) if compsRM[i] then return 20-math.sin((a.ochange.v*math.pi)/a.ochange.l)*40 else return 20 end end local function oCardRot() return math.pi*inOutQuad((a.reveal.l-a.reveal.v)/a.reveal.l) end for i=1,5 do local x,y=xyt(30+30*i,116,30+30*csort[i],116,a.sort.v,a.sort.l,1) card(x,y,cards[i],0) local ox,oy=xyt(30+30*i,20,30+30*osort[i],20,a.osort.v,a.osort.l,1) card(ox,oCardY(i),comps[i],oCardRot()) end end end -- Draws Status Text function drawText() if showText then -- Hand Values local bw=font(hvs[cardsv[1]],0,-10,7,9) font(hvs[cardsv[1]],(240-bw)//2,92,7,9) local tw=font(hvs[compsv[1]],0,-10,7,9) font(hvs[compsv[1]],(240-tw)//2,36,7,9) end if showResult then -- "You win/lose/tie" if result==3 then spr(397,95,52,6,2,0,0,3,2) elseif result==2 then spr(400,55,58,6,2,0,0,4,2) spr(408,117,44,6,2,0,0,5,2) elseif result==1 then spr(400,62,52,6,2,0,0,4,2) spr(404,124,50,6,2,0,0,4,2) end end if gameOver then -- Game Over spr(368,39,52,6,2,0,0,10,2) end end -- Draw Settings Menu function drawSettings() -- Normalize Set Animation local function nsa() return inOutQuad(a.set.v/a.set.l)*16 end -- Streak if page==1 then local sy=math.floor(40/(tss/10+1)-4) if tss>90 then sy=0 end local function raf(text,x,y) local w=font(text,0,-10,7,9) font(text,x-w,y-sy,7,9) end raf("STRK",240-nsa(),1) raf("*"..histreak,240-nsa(),10) raf(streak,240-nsa(),19) end -- Mouse Interactivity local m1=mouseRange(232-nsa(),136,8,16) local iconPress=0 if m1==0 then iconPress=1 elseif m1==1 and mlf then csfx(2,1) if (a.set.v==0) then a.set.r=1 -- Move up if at bottom elseif (a.set.v==a.set.l) then a.set.r=2 -- Move down if at top elseif (a.set.r==1) then a.set.r=2 -- Move down if moving up elseif (a.set.r==2) then a.set.r=1 -- Move up if moving down end end local function setIdxToNum(i) if s[i] then return 2 else return 0 end end for i=1,2 do local m=mouseRange(248-nsa(),-8+i*16,8,8) if m==1 and mlf then s[i]=not(s[i]) -- Handle Setting Change if i==1 then -- Music if s[i] then -- Enable music music() else -- Disable Music music(0) end end end end -- Draw icons spr(134+iconPress*2,224-nsa(),120,7,1,0,0,2,2) rect(240-nsa(),0,16,136,0) spr(198+setIdxToNum(1),240-nsa(),0,7,1,0,0,2,2) spr(166+setIdxToNum(2),240-nsa(),16,7,1,0,0,2,2) end -- Determines the winner of the game -- 0: Player Wins -- 1: Opponent Wins -- 2: Tie function determineWinner() -- Check Hand Value if cardsv[1]>compsv[1] then return 0 elseif compsv[1]>cardsv[1] then return 1 else -- Check card index of best/second best cards a.vflash.r=true a.vflash.a=cardsv[2] a.vflash.b=compsv[2] for i=2,3 do if cardsv[i]a.deal.l-60 then ap=a.deal.l-60 end local x,y=xyt(120,-40,fpos[pid][1],fpos[pid][2],ap,a.deal.l-60,1) -- Flip card local r=0 if flip then r=math.pi end -- Draw Card card(x,y,sid,r) end -- Animates Cards when selected function cardSel(pid,sid) card(30+pid*30,116,sid,0) end -- Draws a single card function card(x,y,idx,r) -- Index to sprite local idxToSpr={ 0,3,6,9,12,64 } local sp=idxToSpr[idx] if r>math.pi/2 and r<3*math.pi/2 then sp=70 end -- Card UV local u1=(sp*8)%128 local v1=math.floor(sp/16)*8 local u2=u1+24 local v2=v1 local u3=u1 local v3=v1+32 local u4=u2 local v4=v3 -- Card XY local x1=x-12*math.cos(r) local y1=y-16 local x2=x+12*math.cos(r) local y2=y1 local x3=x1 local y3=y+16 local x4=x2 local y4=y3 -- Draw Card ttri(x1,y1,x2,y2,x3,y3,u1,v1,u2,v2,u3,v3,0,7) ttri(x2,y2,x3,y3,x4,y4,u2,v2,u3,v3,u4,v4,0,7) end -- Starts a round. function startRound() initCardsInRound() a.deal.r=true end -- Initializes cards for a given round function initCardsInRound() -- Initialize your cards for i=1,5 do cards[i]=math.random(6) end -- Initialize opponent cards for i=1,5 do comps[i]=math.random(6) end end -- Resets animation state to round start function prepAndStartRound() act=0 csel={false,false,false,false,false} --csort={0,0,0,0,0} --cardsv={0,0,0} compsRM={false,false,false,false,false} --osort={0,0,0,0,0} --compsv={0,0,0} istate=false sortReady=false showResult=false result=0 coinsWon=0 addedCoinsWon=false for i=1,5 do a.cs[i].v=0 a.cs[i].r=0 end a.deal.v=0 a.flip.v=0 a.flip.r=0 a.rise.v=0 a.rise.r=0 a.deal2.v=0 a.deal2.l=a.deal2.bl a.sort.v=0 a.ochange.v=0 a.osort.v=0 a.reveal.v=0 a.vflash.v=0 a.vflash.a=0 a.vflash.b=0 a.reward.v=0 a.reward.v=0 a.lose.v=0 a.draw.v=0 if ccoin>0 then -- Update Remaining Values ccoin=ccoin-1 cbet=1 showText=false csfx(13) startRound() else -- Restore values sortReady=true a.reveal.v=a.reveal.l a.sort.v=a.sort.l a.osort.v=a.osort.l a.lose.v=a.lose.l -- Game over sequence csfx(14) gameOver=true wait(300,function() pmem(1,1) for i=1,2 do if s[i] then pmem(i+1,1) else pmem(i+1,0) end end reset() end) end end -- Move the opponent makes based -- on their cards. Also starts -- the corresponding animation. function opponentMove() -- Value hand local type,bi,si=valueOfHand(comps) -- Sort cards table.sort(comps) -- Full House or Flush: No move if type==6 or type==3 then -- 4-of-a-kind or two pairs: Remove odd if comps[1]==comps[2] then compsRM[5]=true else compsRM[1]=true end elseif type==4 then -- 3-of-a-kind: Remove 2 odd if comps[1]==comps[2] and comps[2]==comps[3] then compsRM[4]=true compsRM[5]=true elseif comps[2]==comps[3] and comps[3]==comps[4] then compsRM[1]=true compsRM[5]=true elseif comps[3]==comps[4] and comps[4]==comps[5] then compsRM[1]=true compsRM[2]=true end elseif type==2 then -- One pair: Remove 3 odd local m=0 for i=1,4 do if comps[i]==comps[i+1] then m=i break end end for i=1,5 do if not(i==m or i==m+1) then compsRM[i]=true end end elseif type==1 then -- Junk: Remove all but most valuable for i=2,5 do compsRM[i]=true end end -- Get new cards for i=1,5 do if compsRM[i] then comps[i]=math.random(6) end end -- Animate if not(type==7 or type==5) then -- Animate card change a.ochange.r=true else -- Skip to sort prepSort(true) end end -- Calculates the value of a hand. -- Hand is a table of 5 values -- Containing card indices. function valueOfHand(hand) -- Get sorted hand local shand={0,0,0,0,0} for i=1,5 do shand[i]=hand[i] end table.sort(shand) -- Get Best/Second best from consecutives local best=0 local besti=0 local sbest=0 local sbesti=0 local cs=1 for i=2,5 do if shand[i-1]==shand[i] then cs=cs+1 else if (cs>best) then sbest=best sbesti=besti best=cs besti=shand[i-1] elseif (cs>sbest) then sbest=cs sbesti=shand[i-1] end cs=1 end end if (cs>best) then sbest=best sbesti=besti best=cs besti=shand[5] elseif (cs>sbest) then sbest=cs sbesti=shand[5] end -- Get type -- 1: Junk -- 2: One Pair -- 3: Two Pairs -- 4: 3-of-a-kind -- 5: Full House -- 6: 4-of-a-kind -- 7: Flush local handType=1 if (best==5) then handType=7 elseif (best==4) then handType=6 elseif (best==3) then if (sbest==2) then handType=5 else handType=4 end elseif (best==2) then if (sbest==2) then handType=3 else handType=2 end end -- Return hand type, -- card index of best match, and -- card index of second best match return handType,besti,sbesti end -- Plays a sound effect if enabled function csfx(id,channel) if not s[2] then local c=0 if channel then c=channel end sfx(id,nil,-1,c) end end