ªªªªÊ¬ªªÌ̬ªªÌʪªªÊ̪ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªDDDDDDDDÿÿÿÿDDDDDDDDÿÿÿÿDDDDDDDD33333333ÿÿÿÿ33333333ÿÿÿÿ33333333""""""""ÿÿÿÿ""""""""ÿÿÿÿ""""""""ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿWÌÌ Ìüû Ì»»À»Ì¼+""ÌÌÌÀÀÀÌÀÌÌÀ Ì¼Ì ¼»Ì ,»Ï,¼ËÌ,¼Ï "Ë ÀḬ̀¿ÏÌ»»Ì Ì» ""²Ë ÌÌÌ Ì Ì À¼ "ÀüËÂ̼ËÂü»ÂÀÌ»ËÀÀÌËÌÀ Ì #22##0 02#02 # #2 2# 2 ªªªªªªªª*ª#ª2¢2¢ª#£ªªªªªªªªªªªªªª¢ªªª#ªª:¢ªª*ªªª:2ªªª#ªªª¢ªªªªªªªªªªªªªªªª¡:2ª*#*#ª2ª¢ªªªªªªªªªª¡ªª*ªªª2ªªª#£ªªª¢ªª*£ªª2ªªª*ªª0DD4CüÌOCüÌO3DD4033000000333C40ÄL0ôO0ÄL33ÄL0ôOC4CDDôÌÏ4ôÌÏ4CDD303300C4ôO0ÄL33ÄLôOÄL0C43303@DDÄ0LÄL@D@D@@@DDÀLC@@@@CDÀL@D@@D@D@ÄLÄ0L@DD@DÄ D4@4@Ä D@DUUUÌ\  Ì\ÅÀPRUU"URUR%%%Ì PR U%Ì\RUU"UUPP P%P\P PUUUÀPÅÌÀÁ \ÅÌUU%PU" %U%R RPÀ ÅRÀUPU"UPU%ÅÌRUÀÁ%ÀÌ R0322"#2"300#0203 30#20"002032# 323#23"#2"#0#3000#302 #30#0"#2306`ceS5VÀQ PUUeVeV``Ve`Å6`VUeVUe``Å6Ve``eVeVPUUÀQ eS5V6`cVec\0QVUeVUe0Qc\VeDDDDDDDD33333333""""""""@@@@@@@@@@@ @ @ @@@@@@ @@@@@ @ @ 000000@0000000000@000000000000000000@00000000000000000000000000000@00000000000000000000000000000@00000000000000@@@@@@@00000000000000000000000000000000000000000000000000000000000000 >À?ªªªªªªªªªª*"ª*"ª*"ª*"ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªª*"ªªªªªªªªÊ¬ªªÊ¬ªªÊ¬¢¢Â¢¢¢Â¢¢¢Â¢ªªÊ¬ªªÊ¬ªªÊ¬ªªÊ¬ªªÊ¬ªªÊ¬ªªÊ¬ªªÊ¬ªªÊ¬ªªÊ¬ªªÊ¬ªªÊ¬ªªÊ¬ªªÊ¬ªªÊ¬ªªÊ¬ªªÊ¬ªªÊ¬ªªÊ¬ªªÊ¬ªªÊ¬ªªÊ¬"*¬ªªÊ¬ªªÌ̬ªÌ̬ªÌÌ¢"ÂÂ"¢Â"¢¢"¬ªÌ̬ªÌ̬ªÌ̬ªÌ̬ªÌ̬ªÌ̬ªÌ̬ªÌ̬ªÌ̬ªÌ̬ªÌ̬ªÌ̬ªÌ̬ªÌ̬ªÌ̬ªÌ̬ªÌ̬ªÌ̬ªÌ̬ªÌ̬ªÌ̬ªÌÌ"¢Â̬ªÌ̬ªªÌʪªÌʪªÌªªÂʪ¢ÌÊ¢ªÌʪªÌʪªÌʪªÌʪªÌʪªÌʪªÌʪªÌʪªÌʪªÌʪªÌʪªÌʪªÌʪªÌʪªÌʪªÌʪªÌʪªÌʪªÌʪªÌʪªÌʪªÌʪªÌ"ª¢ÌʪªÌʪªªÊ̪ªÊ̪ª*"ª*"Ì*"Ê,"ªÊ̪ªÊ̪ªÊ̪ªÊ̪ªÊ̪ªÊ̪ªÊ̪ªÊ̪ªÊ̪ªÊ̪ªÊ̪ªÊ̪ªÊ̪ªÊ̪ªÊ̪ªÊ̪ªÊ̪ªÊ̪ªÊ̪ªÊ̪ªÊ̪ªÊ̪ª*"ªªÊ̪ªÊ̪ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªÊ¬ªªÊ¬ªªÊ¬ªªÊ¬ªªÊ¬ªªÊ¬ªªÊ¬ªªÊ¬ªªÊ¬ªªÊ¬ªªÊ¬ªªÊ¬ªªÊ¬ªªÊ¬ªªÊ¬ªªÊ¬ªªÊ¬ªªÊ¬ªªÊ¬ªªÊ¬ªªÊ¬ªªÊ¬ªªÊ¬ªªÊ¬ªªÊ¬ªªÊ¬ªªÊ¬ªªÊ¬ªªÊ¬ªªÊ¬ªªÌ̬ªÌ̬ªÌ̬ªÌ̬ªÌ̬ªÌ̬ªÌ̬ªÌ̬ªÌ̬ªÌ̬ªÌ̬ªÌ̬ªÌ̬ªÌ̬ªÌ̬ªÌ̬ªÌ̬ªÌ̬ªÌ̬ªÌ̬ªÌ̬ªÌ̬ªÌ̬ªÌ̬ªÌ̬ªÌ̬ªÌ̬ªÌ̬ªÌ̬ªÌ̬ªªÌʪªÌʪªÌʪªÌʪªÌʪªÌʪªÌʪªÌʪªÌʪªÌʪªÌʪªÌʪªÌʪªÌʪªÌʪªÌʪªÌʪªÌʪªÌʪªÌʪªÌʪªÌʪªÌʪªÌʪªÌʪªÌʪªÌʪªÌʪªÌʪªÌʪªªÊ̪ªÊ̪ªÊ̪ªÊ̪ªÊ̪ªÊ̪ªÊ̪ªÊ̪ªÊ̪ªÊ̪ªÊ̪ªÊ̪ªÊ̪ªÊ̪ªÊ̪ªÊ̪ªÊ̪ªÊ̪ªÊ̪ªÊ̪ªÊ̪ªÊ̪ªÊ̪ªÊ̪ªÊ̪ªÊ̪ªÊ̪ªÊ̪ªÊ̪ªÊ̪ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÿÿÿDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÿÿÿDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÿÿÿDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÿÿÿDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÿÿÿDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÿÿÿDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÿÿÿDDDDDDDDDDDDÿÿÿÿDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÿÿÿDDDDDDDDDDDDÿÿÿÿDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÿÿÿDDDDDDDDDDDDÿÿÿÿDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÿÿÿDDDDDDDDDDDDÿÿÿÿDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÿÿÿDDDDDDDDDDDDÿÿÿÿDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÿÿÿDDDDDDDDDDDDÿÿÿÿDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ0DD4ÿÿÿÿDDDDDDDDDDDDÿÿÿÿDDDDDDDDDDDDC4DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿCüÌOÿÿÿÿDDDDDDDDDDDDÿÿÿÿDDDDDDDDDDDDôO0DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿCüÌOÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÄL33ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDDDDDDDDDDDDDDDDDDDDDDÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ3DD4ÿÿÿÿDDDDDDDDDDDDÿÿÿÿDDDDDDDDDDDDÄLDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ033ÿÿÿÿDDDDDDDDDDDDÿÿÿÿDDDDDDDDDDDDôODDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ00ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÄL0ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDDDDDDDDDDDDDDDDDDDDDDÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ00ÿÿÿÿDDDDDDDDDDDDÿÿÿÿDDDDDDDDDDDDC433DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ00ÿÿÿÿDDDDDDDDDDDDÿÿÿÿDDDDDDDDDDDD03DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD333333333333333333333333333333333333333333333333333333333333ÿÿÿÿ333333333333ÿÿÿÿ333333333333ÿÿÿÿÿÿÿÿ0DD4ÿÿÿÿÿÿÿÿÿÿÿÿ3333333333333333333333333333333333333333333333333333333333333333ÿÿÿÿ333333333333ÿÿÿÿ333333333333ÿÿÿÿÿÿÿÿCüÌOÿÿÿÿÿÿÿÿÿÿÿÿ3333ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿCüÌOÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ333333333333333333333333333333333333333333333333333333333333ÿÿÿÿ333333333333ÿÿÿÿ333333333333ÿÿÿÿÿÿÿÿ3DD4ÿÿÿÿÿÿÿÿÿÿÿÿ3333333333333333333333333333333333333333333333333333333333333333ÿÿÿÿ333333333333ÿÿÿÿ333333333333ÿÿÿÿÿÿÿÿ033ÿÿÿÿÿÿÿÿÿÿÿÿ3333ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ00ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ333333333333333333333333333333333333333333333333333333333333ÿÿÿÿ333333333333ÿÿÿÿ333333333333ÿÿÿÿÿÿÿÿ00ÿÿÿÿÿÿÿÿÿÿÿÿ3333333333333333333333333333333333333333333333333333333333333333ÿÿÿÿ333333333333ÿÿÿÿ333333333333ÿÿÿÿÿÿÿÿ00ÿÿÿÿÿÿÿÿÿÿÿÿ33333333333333333333333333333333333333333333333333333333ÿÿÿÿÿÿÿÿÌÌ ÿÿÿÿÿÿÿÿ3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333ÿÿÿÿÿÿÿÿÌüû ÿÿÿÿÿÿÿÿ333333333333333333333333333333333333333333333333ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÌ»»ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ3333333333333333333333333333333333333333333333333333ÿÿÿÿÿÿÿÿÀ»Ìÿÿÿÿÿÿÿÿ3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333ÿÿÿÿÿÿÿÿ¼+""ÿÿÿÿÿÿÿÿ333333333333333333333333333333333333333333333333ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÌÌÌÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ3333333333333333333333333333333333333333333333333333ÿÿÿÿÿÿÿÿÀÀÿÿÿÿÿÿÿÿ3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333ÿÿÿÿÿÿÿÿÀÌÀÌÿÿÿÿÿÿÿÿ3333333333333333333333333333333333333333333333333333333333333333ÿÿÿÿ33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333ÿÿÿÿ3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ3333333333333333ÿÿÿÿ33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333ÿÿÿÿ3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ3333333333333333ÿÿÿÿ33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333ÿÿÿÿ3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333ÿÿÿÿ33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333ÿÿÿÿ3333333333333333ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333ÿÿÿÿ33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333ÿÿÿÿ3333333333333333ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333ÿÿÿÿ33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333ÿÿÿÿ3333333333333333""""""""""""""""""""""""ÿÿÿÿ""""""""""""""""""""""""""""""""""""""""ÿÿÿÿ""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""ÿÿÿÿ""""""""""""""""""""""""""""""""""""""""ÿÿÿÿ""""""""""""""""""""""""""""""""""""""""""""""""ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ""""""""""""""""""""""""ÿÿÿÿ""""""""""""""""""""""""""""""""""""""""ÿÿÿÿ""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""ÿÿÿÿ""""""""""""""""""""""""""""""""""""""""ÿÿÿÿ""""""""""""""""""""""""""""""""""""""""""""""""ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ""""""""""""""""""""""""ÿÿÿÿ""""""""""""""""""""""""""""""""""""""""ÿÿÿÿ""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""ÿÿÿÿ""""""""""""""""""""""""""""""""""""""""ÿÿÿÿ""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""ÿÿÿÿ""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""ÿÿÿÿ""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ""""""""""""""""""""""""ÿÿÿÿ""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""ÿÿÿÿ""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ""""""""""""""""""""""""ÿÿÿÿ""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""ÿÿÿÿ""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""ÿÿÿÿ""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""ÿÿÿÿ""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ""""""""""""""""""""""""ÿÿÿÿ""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""ÿÿÿÿ""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ""""""""""""""""""""""""ÿÿÿÿ""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""ÿÿÿÿ""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""À """"""""""""""""""""""""""""""""""""""""""""""""""""""""ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿUUUÿÿÿÿÿÿÿÿ""""""""""""""""""""""""""""""""ÅR""""""""""""""""""""""""""""""""""""""""""""""""""""""""ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀPÅÌÿÿÿÿÿÿÿÿ""""""""ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÁÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ""""""""""""""""""""""""UPU"""""""""""""""""""""""""""""""""""""""""""""""""""""""""ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ \ÅÌÿÿÿÿÿÿÿÿ""""""""""""""""""""""""""""""""UPU%""""""""""""""""""""""""""""""""""""""""""""""""""""""""ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿUU%ÿÿÿÿÿÿÿÿ""""""""ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÅÌRUÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿPU"ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ""""""""""""""""""""""""ÀÁ%""""""""""""""""""""""""""""""""""""""""""""""""""""""""ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ %U%ÿÿÿÿÿÿÿÿ""""""""""""""""""""""""""""""""ÀÌ R""""""""""""""""""""""""""""""""""""""""""""""""""""""""ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿR RPÿÿÿÿÿÿÿÿ""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""B-- title: Dig Dug Remake -- author: Omar Khan -- desc: A somewhat faithful remake of the classic atari game "Dig Dug" -- license: MIT License (change this to your license of choice) -- version: 0.1 -- script: lua --create player object, pooka object, --and fygar object! local middleclass = { _VERSION = 'middleclass v4.1.1', _DESCRIPTION = 'Object Orientation for Lua', _URL = 'https://github.com/kikito/middleclass', _LICENSE = [[ MIT LICENSE Copyright (c) 2011 Enrique García Cota Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ]] } local function _createIndexWrapper(aClass, f) if f == nil then return aClass.__instanceDict elseif type(f) == "function" then return function(self, name) local value = aClass.__instanceDict[name] if value ~= nil then return value else return (f(self, name)) end end else -- if type(f) == "table" then return function(self, name) local value = aClass.__instanceDict[name] if value ~= nil then return value else return f[name] end end end end local function _propagateInstanceMethod(aClass, name, f) f = name == "__index" and _createIndexWrapper(aClass, f) or f aClass.__instanceDict[name] = f for subclass in pairs(aClass.subclasses) do if rawget(subclass.__declaredMethods, name) == nil then _propagateInstanceMethod(subclass, name, f) end end end local function _declareInstanceMethod(aClass, name, f) aClass.__declaredMethods[name] = f if f == nil and aClass.super then f = aClass.super.__instanceDict[name] end _propagateInstanceMethod(aClass, name, f) end local function _tostring(self) return "class " .. self.name end local function _call(self, ...) return self:new(...) end local function _createClass(name, super) local dict = {} dict.__index = dict local aClass = { name = name, super = super, static = {}, __instanceDict = dict, __declaredMethods = {}, subclasses = setmetatable({}, {__mode='k'}) } if super then setmetatable(aClass.static, { __index = function(_,k) local result = rawget(dict,k) if result == nil then return super.static[k] end return result end }) else setmetatable(aClass.static, { __index = function(_,k) return rawget(dict,k) end }) end setmetatable(aClass, { __index = aClass.static, __tostring = _tostring, __call = _call, __newindex = _declareInstanceMethod }) return aClass end local function _includeMixin(aClass, mixin) assert(type(mixin) == 'table', "mixin must be a table") for name,method in pairs(mixin) do if name ~= "included" and name ~= "static" then aClass[name] = method end end for name,method in pairs(mixin.static or {}) do aClass.static[name] = method end if type(mixin.included)=="function" then mixin:included(aClass) end return aClass end local DefaultMixin = { __tostring = function(self) return "instance of " .. tostring(self.class) end, initialize = function(self, ...) end, isInstanceOf = function(self, aClass) return type(aClass) == 'table' and type(self) == 'table' and (self.class == aClass or type(self.class) == 'table' and type(self.class.isSubclassOf) == 'function' and self.class:isSubclassOf(aClass)) end, static = { allocate = function(self) assert(type(self) == 'table', "Make sure that you are using 'Class:allocate' instead of 'Class.allocate'") return setmetatable({ class = self }, self.__instanceDict) end, new = function(self, ...) assert(type(self) == 'table', "Make sure that you are using 'Class:new' instead of 'Class.new'") local instance = self:allocate() instance:initialize(...) return instance end, subclass = function(self, name) assert(type(self) == 'table', "Make sure that you are using 'Class:subclass' instead of 'Class.subclass'") assert(type(name) == "string", "You must provide a name(string) for your class") local subclass = _createClass(name, self) for methodName, f in pairs(self.__instanceDict) do if not (methodName == "__index" and type(f) == "table") then _propagateInstanceMethod(subclass, methodName, f) end end subclass.initialize = function(instance, ...) return self.initialize(instance, ...) end self.subclasses[subclass] = true self:subclassed(subclass) return subclass end, subclassed = function(self, other) end, isSubclassOf = function(self, other) return type(other) == 'table' and type(self.super) == 'table' and ( self.super == other or self.super:isSubclassOf(other) ) end, include = function(self, ...) assert(type(self) == 'table', "Make sure you that you are using 'Class:include' instead of 'Class.include'") for _,mixin in ipairs({...}) do _includeMixin(self, mixin) end return self end } } function middleclass.class(name, super) assert(type(name) == 'string', "A name (string) is needed for the new class") return super and super:subclass(name) or _includeMixin(_createClass(name), DefaultMixin) end setmetatable(middleclass, { __call = function(_, ...) return middleclass.class(...) end }) local width = 30 local height = 16 local traversable = {} local timer = 0 local POOKA1_ALIVE = true; local POOKA2_ALIVE = true; local POOKA3_ALIVE = true; local FYGAR1_ALIVE = true; local FYGAR2_ALIVE = true; local class = middleclass local Dug = class('Dug') local Pooka = class('Pooka') local Fygar = class('Fygar') function Dug:initialize (x, y, sp, score, lives) self.x = x self.y = y self.sp = sp self.score = score self.lives = lives self.attacking = false self.attackcount = 0 end function Pooka:initialize (x, y, sp, direction) self.x = x self.y = y self.sp = sp self.direction = direction self.alive = true end function Fygar:initialize (x, y, sp, direction) self.x = x self.y = y self.sp = sp self.direction = direction self.alive = true end local digdug local pooka1 local pooka2 local pooka3 local fygar1 local fygar2 function checkMeanieAlive(meanie) if meanie.alive then return true else return false end end function initialize(score, lives) digdug = Dug:new(15, 7, 256, score, lives) if timer == 0 then pooka1 = Pooka:new(7, 5, 274, "left") pooka2 = Pooka:new(19, 5, 275, "up") pooka3 = Pooka:new(26, 6, 274, "left") fygar1 = Fygar:new(6, 12, 291, "up") fygar2 = Fygar:new(24, 14, 288, "right") aliveMeanies = { pooka1, pooka2, pooka3, fygar1, fygar2 } return else aliveMeanies = {} if checkMeanieAlive(pooka1) then pooka1 = Pooka:new(7, 5, 274,"left") table.insert(aliveMeanies, pooka1) end if checkMeanieAlive(pooka2) then pooka2 = Pooka:new(19, 5, 275, "up") table.insert(aliveMeanies, pooka2) end if checkMeanieAlive(pooka3) then pooka3 = Pooka:new(26, 6, 274, "left") table.insert(aliveMeanies, pooka3) end if checkMeanieAlive(fygar1) then fygar1 = Fygar:new(6, 12, 291,"up") table.insert(aliveMeanies, fygar1) end if checkMeanieAlive(fygar2) then fygar2 = Fygar:new(24, 14, 288, "right") table.insert(aliveMeanies, fygar2) end end end local WALKABLE_TILES = {[1]= true, [64] = true} function Walkable(x,y) return WALKABLE_TILES[mget(x,y)] end function checkCollision(entity1, entity2) if entity1.x == entity2.x and entity1.y == entity2.y then return true end end function checkLineOfSight(meanie, digdug) if meanie.x == digdug.x then --check if the path between is traversible --check for x line of sight if meanie.y < digdug.y then start = meanie.y + 1 finish = digdug.y else start = digdug.y + 1 finish = meanie.y end for y = start, finish - 1 do if not Walkable(meanie.x, y) then return false end end return true --check for y line of sight elseif meanie.y == digdug.y then if meanie.x < digdug.x then start = meanie.x + 1 finish = digdug.x else start = digdug.x + 1 finish = meanie.x end for x = start, finish - 1 do if not Walkable(x,meanie.y) then return false end end return true end return false end function moveMeanie(meanie) if digdug.attacking == true and attackedMeanie == meanie then --nothing if frozen return end -- Check if Dig Dug is in line of sight if checkLineOfSight(meanie, digdug) then -- Move in direction of Dig Dug if meanie.x < digdug.x then if Walkable(meanie.x + 1, meanie.y) then meanie.x = meanie.x + 1 meanie.direction = "right" end elseif meanie.x > digdug.x then if Walkable(meanie.x - 1, meanie.y) then meanie.x = meanie.x - 1 meanie.direction = "left" end end if meanie.y < digdug.y then if Walkable(meanie.x, meanie.y + 1) then meanie.y = meanie.y + 1 meanie.direction = "down" end elseif meanie.y > digdug.y then if Walkable(meanie.x, meanie.y - 1) then meanie.y = meanie.y - 1 meanie.direction = "up" end end end -- Count how many valid directions there are to determine if we are at a fork local valid = 0 -- Valid directions to move in don't include the one we are coming from if meanie.direction ~= "down" and Walkable(meanie.x, meanie.y - 1) then valid = valid + 1 end if meanie.direction ~= "up" and Walkable(meanie.x, meanie.y + 1) then valid = valid + 1 end if meanie.direction ~= "left" and Walkable(meanie.x - 1, meanie.y) then valid = valid + 1 end if meanie.direction ~= "right" and Walkable(meanie.x + 1, meanie.y) then valid = valid + 1 end -- Pick a direction and keep moving in it until a wall or a fork in the road if valid > 1 then newDirection(meanie) end -- Move in the current direction if it's valid if meanie.direction == "up" and Walkable(meanie.x, meanie.y - 1) then meanie.y = meanie.y - 1 elseif meanie.direction == "down" and Walkable(meanie.x, meanie.y + 1) then meanie.y = meanie.y + 1 elseif meanie.direction == "left" and Walkable(meanie.x - 1, meanie.y) then meanie.x = meanie.x - 1 elseif meanie.direction == "right" and Walkable(meanie.x + 1, meanie.y) then meanie.x = meanie.x + 1 else -- Can't move in that direction, so pick a new direction newDirection(meanie) end end function newDirection(meanie) local possibleDir = {} --check every direction except the one we came from if Walkable(meanie.x, meanie.y - 1) then table.insert(possibleDir, "up") end if Walkable(meanie.x, meanie.y + 1) then table.insert(possibleDir, "down") end if Walkable(meanie.x - 1, meanie.y) then table.insert(possibleDir, "left") end if Walkable(meanie.x + 1, meanie.y) then table.insert(possibleDir, "right") end numdir = #possibleDir if numdir > 0 then --pick new direction meanie.direction = possibleDir[math.random(numdir)] end end function pookaSpriteChange(pooka) if pooka.direction == "up" then pooka.sp = 275 elseif pooka.direction == "down" then pooka.sp = 273 elseif pooka.direction == "left" then pooka.sp = 274 elseif pooka.direction == "right" then pooka.sp = 272 end end function fygarSpriteChange(fygar) if fygar.direction == "up" then fygar.sp = 291 elseif fygar.direction == "down" then fygar.sp = 289 elseif fygar.direction == "left" then fygar.sp = 290 elseif fygar.direction == "right" then fygar.sp = 288 end end function TIC() if not digdug then initialize(0,4) end if digdug.score >= 600 then trace("you win!") exit() end for index, meanie in ipairs(aliveMeanies) do if checkCollision(digdug, meanie)then digdug.attacking = false digdug.attackCount = 0 attackedMeanie = nil digdug.lives = digdug.lives - 1; --reset locations of everything initialize(digdug.score, digdug.lives) if digdug.lives < 0 then exit() end end end function whipPosition() if digdug.sp == 256 then return digdug.x + 1, digdug.y elseif digdug.sp == 257 then return digdug.x, digdug.y + 1 elseif digdug.sp == 258 then return digdug.x - 1, digdug.y elseif digdug.sp == 259 then return digdug.x, digdug.y - 1 end end --freeze meanie if whip collides --determine where whip is -> check collision with meanie --then press whip 3 times to kill meanie if btnp(4)and digdug.attacking == false then local whipX, whipY = whipPosition() for index,meanie in ipairs(aliveMeanies) do if whipX == meanie.x and whipY == meanie.y then digdug.attacking = true attackedMeanie = meanie digdug.attackCount = 1 break end end elseif btnp(4) and digdug.attacking == true and attackedMeanie then digdug.attackCount = digdug.attackCount + 1 if digdug.attackCount >= 3 then attackedMeanie.alive = false for index, meanie in ipairs(aliveMeanies) do if meanie == attackedMeanie then if meanie.class == Pooka then digdug.score = digdug.score + 100 else digdug.score = digdug.score + 150 end end if meanie == attackedMeanie then table.remove(aliveMeanies, index) break end end digdug.attacking = false attackedMeanie = nil digdug.attackCount = 0 end end --if movement attempted during attack, reset if (btnp(0) or btnp(1) or btnp(2) or btnp(3)) and digdug.attacking == true then digdug.attacking = false digdug.attackCount = 0 attackedMeanie = nil end if btnp(0) and Walkable(digdug.x, digdug.y - 1) then digdug.sp = 259; digdug.y = digdug.y - 1 --moving up elseif btnp(0)and not Walkable(digdug.x, digdug.y - 1) and mget(digdug.x, digdug.y - 1) ~= 0 then digdug.sp = 259; digdug.y = digdug.y - 1 mset(digdug.x, digdug.y, 64) end if btnp(1) and Walkable(digdug.x, digdug.y + 1) then digdug.sp = 257; digdug.y = digdug.y + 1 --moving down elseif btnp(1)and not Walkable(digdug.x, digdug.y + 1) and mget(digdug.x, digdug.y + 1) ~= 0 then digdug.sp = 257; digdug.y = digdug.y + 1 mset(digdug.x, digdug.y, 64) end if btnp(2) and Walkable(digdug.x - 1, digdug.y) then digdug.sp = 258; digdug.x = digdug.x - 1 --moving left elseif btnp(2)and not Walkable(digdug.x - 1, digdug.y) and mget(digdug.x - 1, digdug.y) ~= 0 then digdug.sp = 258; digdug.x = digdug.x - 1 mset(digdug.x, digdug.y, 64) end if btnp(3) and Walkable(digdug.x + 1, digdug.y) then digdug.sp = 256; digdug.x = digdug.x + 1; elseif btnp(3)and not Walkable(digdug.x + 1, digdug.y) and mget(digdug.x + 1, digdug.y) ~= 0 then digdug.sp = 256; digdug.x = digdug.x + 1 mset(digdug.x, digdug.y, 64) end --change meanie sprites based on direction for index, meanie in ipairs(aliveMeanies) do if meanie.class == Pooka then pookaSpriteChange(meanie) elseif meanie.class == Fygar then fygarSpriteChange(meanie) end if timer % 20 == 0 then moveMeanie(meanie) end end map(0,0) if btnp(4) then --digdug attack (draw whip) if digdug.sp == 256 then spr(260, (digdug.x + 1) * 8, digdug.y * 8) elseif digdug.sp == 257 then spr(261, digdug.x * 8, (digdug.y + 1) * 8) elseif digdug.sp == 258 then spr(262, (digdug.x - 1) * 8, digdug.y * 8) elseif digdug.sp == 259 then spr(263, digdug.x * 8, (digdug. y - 1) * 8) end end spr(digdug.sp, digdug.x * 8, digdug.y * 8) -- Scale coordinates for index, meanie in ipairs(aliveMeanies) do spr(meanie.sp, meanie.x * 8, meanie.y * 8) end local str_lives = string.rep("@", digdug.lives) print(str_lives, 20, 0, 2) print(digdug.score,220, 0, 2) timer = timer + 1 end