ΞΜΜΜ̈ˆˆ¬ͺͺͺ¬ˆˆˆ¬ΜΜΜ¬ΜΐΜ¬ΜΐΜ¬ΜΐΜΜΜμΜξͺͺΐΐξΜ¬ΐΜΐ¬ΐΐΐ¬ΐΐΐ¬ΐΐΞΜΜΜ̈ˆˆ¬ͺͺͺ¬ˆˆˆ¬ΜΜΜ¬ΜΜΜ¬ΜΐΜ¬ΜΐΜΜΜμΜξͺͺΐΐξΜ¬ΐΜΜ¬ΐΐΐ¬ΐΐΐ¬ΐΐ¬ΜΜΜ¬ͺͺͺ¬ͺ¬ͺ¬ͺΚΜ¬ͺͺͺŒˆˆˆΜΐΜΞΜΜΞΜ¬Μͺͺΐμ¬ͺΐξͺͺΐξͺͺΐΜξΐμξΜΜξξ¬ΜΜΜ¬ͺͺͺ¬ͺ¬ͺ¬ͺΚΜ¬ͺͺͺŒˆˆˆΜΐΜΞΜΜΞΜ¬Μͺͺΐμ¬ͺΐξͺͺΐξͺͺΐΜξΐμξΜΜξξ >ΐ?pwwwpwpww    »°°»pw       °° »»° °°pwwwwppw  ͺ °°°°°°°° pw ͺ °°°p° °°°°wwwwppͺ      ͺ° °°pw»° ° pw°wwέfffffffffffffffffffffΦέΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜ ΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜmffffffffffffffffffffffέΝΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΐΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜmffffffffffffffffffffffέΝΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜmffffffffffffffffffffffέΝΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜmffffffffffffffffffffffέΝΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜmffffffffffffffffffffffέΝΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜmffffffffffffffffffffffέΝΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜmffffffffffffffffffffffέΝΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜέfffffffffffffffffffffΦέΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜέfffffffffffffffffffffΦέΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜέmffffffffffffffffffffέΝΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜάέfffffffffffffffffffΦέΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜέmffffffffffffffffffέΝΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜάέfffffΦέfffΦέfffffΦέΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜέέfffΖΜΜέέέΝΜΜfffΦέΝΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜέέέΝΜΜΜΜΜΜΜΜΜΜέέέΝΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΑΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΑΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΑΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΑΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΑΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΑΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΑΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΑΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΑΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΑΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜ|wwΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜwwwΗΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜ\\\ΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜ|wwwwΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜ\\ΕΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΑΜΜΜΜΜΜΜΜΜΜwwwwwΗΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜ\\ΕΜΜΜΜΜΜΜΜΜΜΜΜΜΜΛΛΛΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜwwwwwΗΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΕΕΕΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜ\ΑΜΜΜΜΜΜΜΜΜΛ»ΜΜΜΜΜΜΜΜΜΜΜΜ»»»»wwfffvw·»»»»»»»»»»»»»»»»»΅U»»»»»»»»»»»»»»»»»»»»»»±»»»»»»»»»»»»»»»»»»»»»±»»{wfffffvw»»»»»»»»»»»»»»»»»[U»»»»»»»»»»»»»»»»»»»»»qww»»»»»»»»»»»»»»»»»»»»»»»wgffffffw·»»»»»»»»»»»»»»»»[΅»»»»»»»»»»»»»»»»»»»»»www±΅΅»»»»»»»»»»»»»»»»»»±»{qffffffvw»»»»»»»»»»»»»΅΅΅»΅»»»»»»»»»»»»»»{ww»»»»qwwww΅U»»»»»»»»»»»»»»»»»»»»»gfffffvw»»»»»»»»»»»»»΅U»»»»»»»»»»»»»»»»»www·»»»»wwwww±[U»»»»»»»»»»»»»»»΅΅΅»»»qww»{qfffffww·»»»»»»»»»»»»΅U»»»»»»»»»»»»»»»»{wwww»»»»»»wwwww±»»[΅»»»»»»»»»»»»»»»΅U»»»»»»»»±»»www»{qffffvwww»»»»»»»»»»»»΅U»»»»»»»»»»»»»»»»wwwww·»»»»»»»»wwfffvw»»»»»»»΅»»»»»»»»»»»»»»»΅U»»»»»»»»»»»»»»λ·»»»»»{wwww{qffffvwww»»»»»»»»»»»»[΅»»»»»»»»»»»»»»»»wwwww·»»»»»»»»»»»{wfffffvw»»»»»»»»»»»»»»»»»»»»»»»΅U»»»»»»»»»»»»»»»»»»»»»wwwww·wfffvwwww»»»»»»»»»»»»[΅»»»»»»»»»»»»»»»wwfffvw·»»»»»»»»»»wgffffffw·»»»»»»»»»»»»»»»»»»»»»»[΅»»[[»»»»»»»»»»»»»»»»»wwwww·{qwwwwwwww·»»»»»»»»»»»»[΅»»»»»»»»΅΅΅»»»{wfffffvw»»»»»»»»»{qffffffvw»»»»»»»»»»»»»»»»»»»»»»[΅»»U΅»»»·»»»»»»»»»»»»wwfffvw·wΗwwwww·{w»»»»»»»»»»»[[[΅»»»»»»»»΅U»»»»wgffffffw·»»»»»»»»gfffffvw»»»»»»»»»»»»x»»»»»»»»»»΅»»U»»»»»»»»»»»»»»»»{wfffffvw»»w»»»»»»»»»»»»»»[[΅»»»»»»»»»΅U»»»{wffffffvq»»»»»»»{qfffffww·»»»»»»»»»»»»»»»»»»»»»»»»»UUUUUUUUUUU[[[UUUwgffffffwWUUUUUUUUUUUU΅[UUUUUUUUUUUUUUUU»U΅uwffffffWUUUUU»uqffffvwwwUUUUU΅΅΅UUUUUUUUUUUUUUUUUUUUUUUUUUUU[»UUUuwffffffvqUUUUUUUUUUUU΅[UUUUUUUUUUUUUUU΅[UUwwgffffvqUUUUUU{qffffvwww΅UUUU΅΅[UUUUUUUUUUUUUUUUUUUUUUUUUU[[[»UUUuwffffffWUUUUUUUUUUUU[UUUUUUUUUUUUUUU΅[Uuwwwffffvq΅[UUUU΅wfffvwwww[UUUU΅΅[UUUU΅΅΅UUUUUUUUUUUUUUUUUUU[»[»UUUwwgffffvqUUUUUUUUUUUUUUUUUUUUUUUUUUUUU[Uuwwwffffvx[UUUUUUuqwwwwwwww·UUUUUU»UUUUU΅΅[UUUUUUUUUUUUUUUUUUU[»΅[UUuwwwffffvq[UUUUUUUUUUUUUUUUUUUUU…WUUUUUUUUUuwwwwfffv·WU{UUUUUwWwwwwwWuw΅UUUUUU»UUUUUU»UUUUUUUUUUUUUUUUUUUU΅[΅[UUuwwwffffvx UUUUUUUUUUUUUUUUU΅΅΅UUUUUUUUUUUUUUwwwwwwwwwqvw΅΅UUUUUUUwUUUUUUUUUU΅UUUUUU΅UUUUUUUUUUUUUUUUUUUU΅[΅[UUuwwwwfffv·UUUUUUUUUUUUUUUUUUU΅΅[UUUUUεWUUUUUUUuwUwwwwwgwgfw·[UUUUUUUU[[UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU…WU[UUUwwwwwwwwwqUUUUUUUUUUUUUUUUUUUUU»[UUUUUUUUUUUUUUUUuwffffw·[UUUUUUUU»UUUUUUUUUUUUUUUUU[[[UUUUUUUUUUUUUUUUUU[UUUUUuwUwwwwwWwWUUUUUUUU{UUUUUUUUUUUU»UUUUUUUUUUUUUUUUUfffvww[UUUUUUUU»U[[[UUUUUUUUUUUUU[»UUUUUUUUUUUUUUU[[[[[UUUUUUUUwUUUUUUUUUUUUUUUUUUUUUUUU΅UUUUUUUUUUUUUUU΅[fffwwwWUUUU΅΅΅U»U[»UUUUUUUUUUUUUU[»UUUUUUUUUUUUUUU[»[»UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU΅‡fffwwwWUUUU΅΅[U[U΅»UUUUUUUUUUUUUU[»UUUUUUUUUUUUUUU[»΅[UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU{qffwwwwWUUUUU»[UUUU΅[U΅[UUUUUUUUUUUUUU΅[UUUUUUU΅΅UUUUUU΅[U[UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUwwwwwwwwUUUUUU»UUUUUU[UU[|UUUUUUUUUUUUU΅[UUUUUUU΅΅UUUUUU΅[UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUwuwwwwUwWUUUUUU΅UUUUUUUUUUUUUUUUUUUUUUUU»΅΅UUUUU΅΅UUUUUUU[UUUUεWUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUqqwqQUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU΅΅[UUUUUU»3333333333333333333SSS333333333333333333333333333333333333333333333311311333333333333333SSS3333333SS5333γ7333»;33U533»3333333333333333SSSUSS53333333333333333333333333333333333333333333333311311333333333333333SS533333333U33}333333»333U333³3333333333333333SS5SxS5333333333333333333333333333333333333333333333;;113113333333333333333U533333333U333333333³333S33333333333333333333SS533U333555333333355533333333333SSS3333333333333333;»113113333333333333333U333333333SSSS33333333333333333333333333333333Uƒ73U3335U333333335U333333333333SS533333333333³³³33;»003003333333333333333S3333333333SS533333333333333333333333333333333U3;;[333SU33333333SU3333333333333U533333333;;;³³;33;»33333333333333333333333“733333333U333333333333333333333333333333333S3;»3333S533333333S53333333333333U333333333;»3³³;3|³;333333333333333333333333333333333S33333333333333333333333333333333333³;33333533333333353333333333333S333333333;»3³³;33³;;;333333333333333333333333333333333;;;33333333333333333;;;333333333333;3333333;;;33333333333333333333333333333³;33»333³;»3333³³³33z333333333333333333333333;»SS3333333333333333;»333333333333333333333;»333333333333333333333333333333³;33»3333;»3333³³;3333333333333333333333;;;33;»S53333333333333333³;333333333333333333333³»333333333333333333333333333333³;33»3333;»3333³³;3333333333333333333333;»333;»S533333333333333333;333333333333333333333³;3333333333333333333333333333333;33³3333΅55333³³;3333333333333333333333³»333³[S53333333333333333333333333333333333333333;333333333333333333333333333333333333333΅U33333»33333333333333333333333³;333³;U333333333333™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™YU™™™™™»™™™™™™™™™™™™™™™™™™™™™™™™›™™™™›U™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™Y•™™™™™»™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™U™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™•™™™™™Ή™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™Y™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333ΣP-- title: Sheep Storm -- author: anna -- desc: Save sheep from lightning! -- script: lua -- ============================================================ -- PALETTE COLORS (default TIC-80) -- 0=black, 1=dark purple, 2=dark red, 3=orange -- 4=yellow, 5=light green, 6=cyan, 7=white -- 8=red, 9=orange2, 10=yellow2, 11=green -- 12=blue, 13=indigo, 14=pink, 15=peach -- ============================================================ -- БостояниС ΠΈΠ³Ρ€Ρ‹ local state = "play" -- "play", "gameover" local score = 0 local t = 0 -- Π’Ρ€Π°Π²Π° - Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ кустики local grass = {} for i=1,60 do table.insert(grass, { x = math.random(0,239), y = math.random(80,120), h = math.random(3,7), c = math.random(0,1)==0 and 11 or 5 }) end -- Π¦Π²Π΅Ρ‚ΠΎΡ‡ΠΊΠΈ local flowers = {} for i=1,20 do table.insert(flowers, { x = math.random(5,234), y = math.random(85,115), c = math.random(8,15) }) end -- ============================================================ -- ΠžΠ’Π¦Π« -- ============================================================ local sheep = {} local function newSheep(x,y) return { x = x or math.random(20,210), y = y or math.random(82,112), vx = (math.random()*2-1)*0.4, vy = 0, dir = 1, animT = math.random(0,60), dragging = false, alive = true, -- эффСкт смСрти: кусочки ΡˆΠ΅Ρ€ΡΡ‚ΠΈ puffs = nil, puffTimer = 0 } end for i=1,5 do table.insert(sheep, newSheep()) end -- ============================================================ -- ВУЧИ И ΠœΠžΠ›ΠΠ˜Π˜ -- ============================================================ local clouds = {} local function newCloud() return { x = math.random(20,200), y = math.random(10,40), vx = (math.random()*0.6+0.2) * (math.random()>0.5 and 1 or -1), -- 0=normal, 1=charging, 2=striking, 3=cooldown mode = "normal", chargeT = 0, chargeMax = math.random(90,180), strikeT = 0, boltX = 0, boltY = 0, boltSegs = {}, target = nil, -- индСкс ΠΎΠ²Ρ†Ρ‹-Ρ†Π΅Π»ΠΈ size = math.random(2,3) -- 2=small, 3=big } end -- ΠŸΠ΅Ρ€Π²Ρ‹Π΅ Ρ‚ΡƒΡ‡ΠΈ for i=1,2 do table.insert(clouds, newCloud()) end -- Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ‚ΡƒΡ‡ со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ local cloudTimer = 0 local cloudInterval = 600 -- ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ 10 сСкунд новая Ρ‚ΡƒΡ‡Π° (макс 4) -- ============================================================ -- SFX: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ пустыС слоты, создаём Π·Π²ΡƒΠΊΠΈ Ρ‡Π΅Ρ€Π΅Π· poke Π² RAM -- ВмСсто этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ sfx() с встроСнными Π·Π²ΡƒΠΊΠ°ΠΌΠΈ -- ============================================================ -- ΠŸΡ€ΠΎΡΡ‚Π°Ρ функция для "Π·Π²ΡƒΠΊΠ° ΠΌΠΎΠ»Π½ΠΈΠΈ" Ρ‡Π΅Ρ€Π΅Π· sfx -- Π’ TIC-80 Π½Π΅Ρ‚ встроСнных sfx, поэтому ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ -- частотныС эффСкты Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€ΡΠΌΡƒΡŽ запись Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ SFX local function playThunder() -- sfx(0) Ссли Π·Π²ΡƒΠΊ 0 Π·Π°ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½, ΠΈΠ½Π°Ρ‡Π΅ - имитация Ρ‡Π΅Ρ€Π΅Π· poke -- Π‘ΠΎΠ·Π΄Π°Ρ‘ΠΌ "ΡˆΡƒΠΌ" Ρ‡Π΅Ρ€Π΅Π· быстрыС ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ -- Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π·Π²ΡƒΠΊ 0 (noise-like) sfx(0, "C-2", 20, 0, 15, 0) end local function playBaa() sfx(1, "A-3", 10, 1, 12, 2) end local function playPickup() sfx(2, "E-4", 5, 2, 10, 3) end local function playDrop() sfx(3, "C-4", 5, 2, 10, -2) end -- ============================================================ -- Π“Π•ΠΠ•Π ΠΠ’ΠžΠ  Π—Π˜Π“Π—ΠΠ“Π ΠœΠžΠ›ΠΠ˜Π˜ -- ============================================================ local function makeBolt(x1,y1,x2,y2) local segs = {} local steps = 8 local dx = x2-x1 local dy = y2-y1 local px,py = x1,y1 for i=1,steps-1 do local frac = i/steps local nx = x1 + dx*frac + (math.random()*16-8) local ny = y1 + dy*frac + (math.random()*6-3) table.insert(segs, {x1=px,y1=py,x2=nx,y2=ny}) px,py = nx,ny end table.insert(segs, {x1=px,y1=py,x2=x2,y2=y2}) return segs end -- ============================================================ -- ΠŸΠ•Π Π•Π’ΠΠ‘ΠšΠ˜Π’ΠΠΠ˜Π• ΠœΠ«Π¨ΠšΠžΠ™ -- ============================================================ local dragSheep = nil local mx,my,ml = 0,0,false local prevML = false -- ============================================================ -- ΠŸΠ£Π“ΠžΠ’ΠšΠ˜ Π¨Π•Π Π‘Π’Π˜ (частицы послС ΡƒΠ΄Π°Ρ€Π° ΠΌΠΎΠ»Π½ΠΈΠΈ) -- ============================================================ local function makePuffs(x,y) local puffs = {} for i=1,12 do local angle = math.random()*math.pi*2 local spd = math.random()*2+0.5 table.insert(puffs, { x = x + math.random()*10-5, y = y + math.random()*6-3, vx = math.cos(angle)*spd, vy = math.sin(angle)*spd - 1.5, life = 1.0, r = math.random(2,5) }) end return puffs end -- ============================================================ -- Π Π˜Π‘ΠžΠ’ΠΠΠ˜Π• -- ============================================================ local function drawBackground() -- НСбо cls(12) -- синСС Π½Π΅Π±ΠΎ -- Π“ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚ ΠΈ зСмля for yy=78,136 do local shade if yy < 90 then shade = 11 -- свСтло-Π·Π΅Π»Ρ‘Π½Ρ‹ΠΉ elseif yy < 105 then shade = 5 -- Π·Π΅Π»Ρ‘Π½Ρ‹ΠΉ else shade = 3 -- Ρ‚Ρ‘ΠΌΠ½ΠΎ-Π·Π΅Π»Ρ‘Π½Ρ‹ΠΉ/ΠΊΠΎΡ€ΠΈΡ‡Π½Π΅Π²Π°Ρ‚Ρ‹ΠΉ end line(0,yy,239,yy,shade) end -- Π”ΠΎΡ€ΠΎΠΆΠΊΠ° for yy=118,124 do line(0,yy,239,yy,9) end end local function drawGrass() for _,g in ipairs(grass) do -- ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ кустик: нСсколько Π»ΠΈΠ½ΠΈΠΉ line(g.x, g.y, g.x-2, g.y-g.h, g.c) line(g.x, g.y, g.x, g.y-g.h, g.c) line(g.x, g.y, g.x+2, g.y-g.h, g.c) end for _,f in ipairs(flowers) do pix(f.x, f.y, f.c) pix(f.x+1, f.y, 7) end end local function drawSheep(s) if not s.alive then return end local x,y = math.floor(s.x), math.floor(s.y) local anim = math.floor((s.animT/8)) % 2 -- 0 ΠΈΠ»ΠΈ 1 (шаг) -- Π’Π΅Π»ΠΎ ΠΎΠ²Ρ†Ρ‹ (ΠΏΡƒΡˆΠΈΡΡ‚ΠΎΠ΅ ΠΎΠ±Π»Π°Ρ‡ΠΊΠΎ ΠΈΠ· ΠΊΡ€ΡƒΠΆΠΊΠΎΠ²) -- Основной Π±Π΅Π»Ρ‹ΠΉ ΠΎΠ²Π°Π» elli(x, y-4, 9, 6, 7) -- ΠŸΡƒΡˆΠΈΡΡ‚Ρ‹Π΅ выступы ΡˆΠ΅Ρ€ΡΡ‚ΠΈ circ(x-6, y-5, 4, 7) circ(x+6, y-5, 4, 7) circ(x, y-9, 5, 7) circ(x-3, y-8, 3, 7) circ(x+3, y-8, 3, 7) -- ВнутрСнняя Ρ‚Π΅Π½ΡŒ Π½Π° ΡˆΠ΅Ρ€ΡΡ‚ΠΈ elli(x, y-5, 7, 4, 6) -- Π“ΠΎΠ»ΠΎΠ²Π° local hx = x + s.dir*8 circ(hx, y-3, 4, 7) -- ΠœΠΎΡ€Π΄Π° circ(hx, y-3, 3, 1) -- тёмная -- Π“Π»Π°Π· pix(hx + s.dir*1, y-4, 0) -- Носик pix(hx + s.dir*3, y-2, 8) -- Ноги local legOff = anim==0 and 0 or 1 line(x-4, y+2, x-4, y+6+legOff, 1) line(x-2, y+2, x-2, y+6-legOff, 1) line(x+2, y+2, x+2, y+6-legOff, 1) line(x+4, y+2, x+4, y+6+legOff, 1) -- ΠšΠΎΠΏΡ‹Ρ‚Ρ†Π° pix(x-4, y+7+legOff, 0) pix(x-2, y+7-legOff, 0) pix(x+2, y+7-legOff, 0) pix(x+4, y+7+legOff, 0) -- Π₯востик local tx = x - s.dir*9 circ(tx, y-2, 3, 7) -- Если Ρ‚Π°Ρ‰ΠΈΠΌ - подсвСтка if s.dragging then circb(x, y-4, 13, 10) end -- Π’Ρ€Π°Π²ΠΈΠ½ΠΊΠ° Π²ΠΎ Ρ€Ρ‚Ρƒ (Π°Π½ΠΈΠΌΠΈΡ€ΠΎΠ²Π°Π½Π°) local grass_off = math.floor(t/30)%2 line(hx+s.dir*4, y-1, hx+s.dir*7+grass_off, y-3+grass_off, 11) end local function drawPuffs(puffs) for _,p in ipairs(puffs) do local alpha = p.life local c = alpha > 0.6 and 7 or (alpha > 0.3 and 6 or 13) circ(math.floor(p.x), math.floor(p.y), math.floor(p.r*p.life+0.5), c) end end local function drawCloud(cloud) local x,y = math.floor(cloud.x), math.floor(cloud.y) local s = cloud.size -- Π¦Π²Π΅Ρ‚ Ρ‚ΡƒΡ‡ΠΈ зависит ΠΎΡ‚ Ρ€Π΅ΠΆΠΈΠΌΠ° local baseC, darkC if cloud.mode == "normal" then baseC = 6; darkC = 13 elseif cloud.mode == "charging" then -- ΠΌΠΈΠ³Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈ зарядкС local flash = math.floor(cloud.chargeT/8)%2 baseC = flash==0 and 13 or 1; darkC = 1 else baseC = 1; darkC = 0 end -- РисуСм Ρ‚ΡƒΡ‡Ρƒ ΠΈΠ· ΠΊΡ€ΡƒΠ³ΠΎΠ² local r = s==2 and 10 or 14 circ(x, y, r, darkC) circ(x-r, y+4, r-3, darkC) circ(x+r, y+4, r-3, darkC) circ(x, y-2, r-2, darkC) circ(x, y, r-1, baseC) circ(x-r+2,y+4, r-4, baseC) circ(x+r-2,y+4, r-4, baseC) circ(x, y-1, r-3, baseC) -- Π—Π»ΠΎΠ²Π΅Ρ‰ΠΈΠ΅ Π³Π»Π°Π·Π° Ρ‚ΡƒΡ‡ΠΈ pix(x-4, y-1, 0) pix(x+4, y-1, 0) -- НахмурСнныС Π±Ρ€ΠΎΠ²ΠΈ line(x-6,y-4,x-2,y-3,0) line(x+2, y-3, x+6, y-4, 0) -- Π—ΠΈΠ³Π·Π°Π³ ΠΌΠΎΠ»Π½ΠΈΠΈ (ΠΏΡ€ΠΈ зарядкС - малСнький символ) if cloud.mode == "charging" then local prog = cloud.chargeT/cloud.chargeMax if prog > 0.5 then -- МалСнькая молния ΠΏΠΎΠ΄ Ρ‚ΡƒΡ‡Π΅ΠΉ line(x+2, y+r, x-2, y+r+5, 10) line(x-2, y+r+5, x+3, y+r+5, 10) line(x+3, y+r+5, x-1, y+r+10, 10) end end -- Настоящая молния if cloud.mode == "striking" and #cloud.boltSegs > 0 then -- Π‘Π΅Π»Ρ‹ΠΉ "Π³Π°Π»ΠΎ" for _,seg in ipairs(cloud.boltSegs) do line(seg.x1+1,seg.y1,seg.x2+1,seg.y2, 7) line(seg.x1-1,seg.y1,seg.x2-1,seg.y2, 7) end -- Жёлтая молния for _,seg in ipairs(cloud.boltSegs) do line(seg.x1,seg.y1,seg.x2,seg.y2, 10) end -- Π’ΡΠΏΡ‹ΡˆΠΊΠ° Π² Ρ‚ΠΎΡ‡ΠΊΠ΅ ΡƒΠ΄Π°Ρ€Π° if cloud.strikeT < 10 then circ(math.floor(cloud.boltX), math.floor(cloud.boltY), 8, 10) circ(math.floor(cloud.boltX), math.floor(cloud.boltY), 5, 4) end end end local function drawHUD() -- Π Π°ΠΌΠΊΠ° свСрху rect(0,0,240,10,0) print("SHEEP STORM", 2, 2, 7, false, 1, true) print("Score:"..score, 140, 2, 10, false, 1, true) print("Sheep:"..#sheep, 195, 2, 11, false, 1, true) end local function drawGameOver() -- Π—Π°Ρ‚Π΅ΠΌΠ½Π΅Π½ΠΈΠ΅ for y=0,135,2 do for x=0,239,2 do pix(x,y,0) end end local msg = "GAME OVER" local w = print(msg, -999, -999, 0, false, 2) -- ΠΈΠ·ΠΌΠ΅Ρ€ΠΈΡ‚ΡŒ ΡˆΠΈΡ€ΠΈΠ½Ρƒ print(msg, 120-w//2, 50, 8, false, 2) print("Score: "..score, 86, 74, 7, false, 1) print("Press Z to restart", 68, 90, 6, false, 1) end -- ============================================================ -- ΠžΠ‘ΠΠžΠ’Π›Π•ΠΠ˜Π• Π›ΠžΠ“Π˜ΠšΠ˜ -- ============================================================ local function updateSheep() for i,s in ipairs(sheep) do if s.alive then s.animT = s.animT + 1 if not s.dragging then -- Π‘Π»ΡƒΡ‡Π°ΠΉΠ½ΠΎΠ΅ Π±Π»ΡƒΠΆΠ΄Π°Π½ΠΈΠ΅ if s.animT % 60 == 0 then s.vx = (math.random()*2-1)*0.5 end s.x = s.x + s.vx -- ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ поля if s.x < 12 then s.x=12; s.vx=math.abs(s.vx) end if s.x > 227 then s.x=227; s.vx=-math.abs(s.vx) end -- Y-ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π° слСгка покачиваСтся s.y = 95 + math.sin(s.animT*0.05+i)*8 if s.vx > 0.05 then s.dir = 1 elseif s.vx < -0.05 then s.dir = -1 end end else -- ОбновляСм частицы ΡˆΠ΅Ρ€ΡΡ‚ΠΈ if s.puffs then s.puffTimer = s.puffTimer + 1 local allDead = true for _,p in ipairs(s.puffs) do p.x = p.x + p.vx p.y = p.y + p.vy p.vy = p.vy + 0.05 -- гравитация p.vx = p.vx * 0.98 p.life = p.life - 0.012 if p.life > 0 then allDead = false end end if allDead then s.puffs = nil end end end end end local function updateClouds() cloudTimer = cloudTimer + 1 if cloudTimer >= cloudInterval and #clouds < 4 then cloudTimer = 0 table.insert(clouds, newCloud()) cloudInterval = math.max(180, cloudInterval - 30) -- Ρ‚ΡƒΡ‡ΠΈ всё Ρ‡Π°Ρ‰Π΅ end for ci,cloud in ipairs(clouds) do -- Π”Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ cloud.x = cloud.x + cloud.vx if cloud.x < 15 then cloud.x=15; cloud.vx=math.abs(cloud.vx) end if cloud.x > 224 then cloud.x=224; cloud.vx=-math.abs(cloud.vx) end if cloud.mode == "normal" then cloud.chargeT = cloud.chargeT + 1 if cloud.chargeT >= cloud.chargeMax then -- Найти ΠΆΠΈΠ²ΡƒΡŽ ΠΎΠ²Ρ†Ρƒ для ΡƒΠ΄Π°Ρ€Π° local targets = {} for si,s in ipairs(sheep) do if s.alive and not s.dragging then table.insert(targets, si) end end if #targets > 0 then cloud.mode = "charging" cloud.target = targets[math.random(#targets)] cloud.chargeT = 0 else -- НСт Ρ†Π΅Π»ΠΈ, сбрасываСм cloud.chargeT = 0 cloud.chargeMax = math.random(90,180) end end elseif cloud.mode == "charging" then cloud.chargeT = cloud.chargeT + 1 -- Π’ΡƒΡ‡Π° Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ двиТСтся ΠΊ Ρ†Π΅Π»ΠΈ ΠΏΠΎ X if cloud.target and sheep[cloud.target] and sheep[cloud.target].alive then local ts = sheep[cloud.target] local dx = ts.x - cloud.x cloud.x = cloud.x + dx*0.01 end if cloud.chargeT >= 60 then -- 1 сСкунда зарядки -- УДАР! local ts = cloud.target and sheep[cloud.target] if ts and ts.alive and not ts.dragging then -- Попала! cloud.boltX = ts.x cloud.boltY = ts.y - 4 cloud.boltSegs = makeBolt(cloud.x, cloud.y+12, ts.x, ts.y-4) cloud.mode = "striking" cloud.strikeT = 0 playThunder() -- Π£Π±ΠΈΠ²Π°Π΅ΠΌ ΠΎΠ²Ρ†Ρƒ ts.alive = false ts.puffs = makePuffs(ts.x, ts.y-4) ts.puffTimer = 0 playBaa() -- ΠžΡ‡ΠΊΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°ΡŽΡ‚ΡΡ score = math.max(0, score - 5) -- Новая ΠΎΠ²Ρ†Π° Ρ‡Π΅Ρ€Π΅Π· 3 сСкунды (Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π² список) -- ΠŸΡ€ΠΎΡΡ‚ΠΎ ΡƒΠ±ΠΈΡ€Π°Π΅ΠΌ ΠΈΠ· sheep (Π³Π΅ΠΉΠΌΠΎΠ²Π΅Ρ€ Ссли всС ΠΌΠ΅Ρ€Ρ‚Π²Ρ‹) else -- ΠŸΡ€ΠΎΠΌΠ°Ρ…Π½ΡƒΠ»Π°ΡΡŒ (ΠΎΠ²Ρ†Ρƒ ΡƒΡ‚Π°Ρ‰ΠΈΠ»ΠΈ) cloud.boltX = ts and ts.x or cloud.x cloud.boltY = ts and (ts.y-4) or 100 cloud.boltSegs = makeBolt(cloud.x, cloud.y+12, cloud.boltX, cloud.boltY) cloud.mode = "striking" cloud.strikeT = 0 playThunder() score = score + 3 -- +ΠΎΡ‡ΠΊΠΈ Π·Π° спасСниС end end elseif cloud.mode == "striking" then cloud.strikeT = cloud.strikeT + 1 if cloud.strikeT >= 25 then cloud.mode = "normal" cloud.chargeT = 0 cloud.chargeMax = math.random(120,240) cloud.boltSegs = {} cloud.target = nil end end end end local function updateDrag() mx,my,ml = mouse() -- Начало пСрСтаскивания if ml and not prevML then -- Π˜Ρ‰Π΅ΠΌ Π±Π»ΠΈΠΆΠ°ΠΉΡˆΡƒΡŽ ΠΎΠ²Ρ†Ρƒ local best, bestD = nil, 18 for i,s in ipairs(sheep) do if s.alive then local d = math.sqrt((s.x-mx)^2+(s.y-my)^2) if d < bestD then best=i; bestD=d end end end if best then dragSheep = best sheep[best].dragging = true playPickup() end end -- ΠŸΠ΅Ρ€Π΅Ρ‚Π°ΡΠΊΠΈΠ²Π°Π½ΠΈΠ΅ if ml and dragSheep then local s = sheep[dragSheep] if s and s.alive then s.x = mx s.y = math.max(85, math.min(120, my)) end end -- ΠžΡ‚ΠΏΡƒΡΠΊΠ°Π½ΠΈΠ΅ if not ml and prevML and dragSheep then if sheep[dragSheep] then sheep[dragSheep].dragging = false playDrop() end dragSheep = nil end prevML = ml end local function checkGameOver() -- Π“Π΅ΠΉΠΌΠΎΠ²Π΅Ρ€ Ссли всС ΠΎΠ²Ρ†Ρ‹ ΠΌΠ΅Ρ€Ρ‚Π²Ρ‹ (Π±Π΅Π· частиц) local alive = 0 local anyPuffs = false for _,s in ipairs(sheep) do if s.alive then alive = alive + 1 end if s.puffs then anyPuffs = true end end if alive == 0 and not anyPuffs then state = "gameover" end end local function resetGame() state = "play" score = 0 t = 0 sheep = {} for i=1,5 do table.insert(sheep, newSheep()) end clouds = {} for i=1,2 do table.insert(clouds, newCloud()) end cloudTimer = 0 cloudInterval = 600 dragSheep = nil end -- ============================================================ -- Π˜ΠΠ˜Π¦Π˜ΠΠ›Π˜Π—ΠΠ¦Π˜Π― Π—Π’Π£ΠšΠžΠ’ Ρ‡Π΅Ρ€Π΅Π· RAM -- ============================================================ -- Π—Π²ΡƒΠΊ 0: Π³Ρ€ΠΎΠΌ (Π½ΠΈΠ·ΠΊΠΈΠΉ ΡˆΡƒΠΌ) -- ЗаписываСм Π² RAM SFX (адрСс 0x100E4) -- ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ SFX Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ 66 Π±Π°ΠΉΡ‚: 16 Π½ΠΎΡ‚ ΠΏΠΎ 3 Π±Π°ΠΉΡ‚Π° + 18 Π±Π°ΠΉΡ‚ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ -- Π£ΠΏΡ€ΠΎΡ‰Ρ‘Π½Π½ΠΎ: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ стандартныС poke для Π±Π°Π·ΠΎΠ²Ρ‹Ρ… SFX local function initSFX() -- SFX 0 - Thunder: noise waveform, low pitch, decay -- УстанавливаСм Ρ„ΠΎΡ€ΠΌΡƒ Π²ΠΎΠ»Π½Ρ‹ 4 (noise) для SFX 0 -- RAM SFX starts at 0x100E4, each sfx is 66 bytes -- Byte 0-1: speed+note for step 0, etc. -- ΠŸΠ΅Ρ€Π²Ρ‹Π΅ 4 Π±Π°ΠΉΡ‚Π° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° SFX local base = 0x100E4 -- sfx 0: Π³Ρ€ΠΎΠΌ -- waveform = 4 (noise), pitch спускаСтся for i=0,15 do local note = math.max(0, 36 - i*2) -- Π½ΠΎΡ‚Π° ΡƒΠ±Ρ‹Π²Π°Π΅Ρ‚ local vol = math.max(0, 15 - i) -- Π³Ρ€ΠΎΠΌΠΊΠΎΡΡ‚ΡŒ ΡƒΠ±Ρ‹Π²Π°Π΅Ρ‚ poke(base + i*2, note) poke(base + i*2+1, vol + 0x50) -- 0x50 = waveform 4 (noise) Π² ΡΡ‚Π°Ρ€ΡˆΠΈΡ… Π±ΠΈΡ‚Π°Ρ…? end -- speed = 3 poke(base + 32, 3) -- sfx 1: Π±Π΅-Π΅ (A-3, square) local b1 = 0x100E4 + 66 for i=0,15 do local note = 57 + math.floor(math.sin(i*0.8)*3) local vol = math.max(0, 12 - i) poke(b1 + i*2, note) poke(b1 + i*2+1, vol + 0x20) -- waveform 1 (square) end poke(b1 + 32, 2) -- sfx 2: ΠΏΠΎΠ΄Ρ…Π²Π°Ρ‚ (ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ, высокий) local b2 = 0x100E4 + 132 for i=0,7 do poke(b2 + i*2, 64 + i*2) poke(b2 + i*2+1, 12 + 0x10) end poke(b2 + 32, 1) -- sfx 3: сброс (нисходящий) local b3 = 0x100E4 + 198 for i=0,7 do poke(b3 + i*2, 72 - i*3) poke(b3 + i*2+1, 10 + 0x10) end poke(b3 + 32, 1) end -- ============================================================ -- ГЛАВНЫЙ Π¦Π˜ΠšΠ› -- ============================================================ function BOOT() -- ΠŸΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π°Π΄Π°Ρ‘ΠΌ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρƒ TIC-80 Π² VRAM (адрСс 0x03FC0) -- 16 Ρ†Π²Π΅Ρ‚ΠΎΠ² Γ— 3 Π±Π°ΠΉΡ‚Π° (R,G,B) local pal = { 0x14,0x0C,0x1F, -- 0 Ρ‡Ρ‘Ρ€Π½Ρ‹ΠΉ (ΠΏΠΎΡ‡Ρ‚ΠΈ) 0x1D,0x2B,0x53, -- 1 Ρ‚Ρ‘ΠΌΠ½ΠΎ-синий 0x7E,0x25,0x53, -- 2 Ρ‚Ρ‘ΠΌΠ½ΠΎ-красный 0x00,0x87,0x51, -- 3 Ρ‚Ρ‘ΠΌΠ½ΠΎ-Π·Π΅Π»Ρ‘Π½Ρ‹ΠΉ 0xAB,0x52,0x36, -- 4 ΠΊΠΎΡ€ΠΈΡ‡Π½Π΅Π²Ρ‹ΠΉ 0x5F,0x57,0x4F, -- 5 Ρ‚Ρ‘ΠΌΠ½ΠΎ-сСрый 0xC2,0xC3,0xC7, -- 6 свСтло-сСрый 0xFF,0xF1,0xE8, -- 7 Π±Π΅Π»Ρ‹ΠΉ/ΠΊΡ€Π΅ΠΌΠΎΠ²Ρ‹ΠΉ 0xFF,0x00,0x4D, -- 8 красный 0xFF,0xA3,0x00, -- 9 ΠΎΡ€Π°Π½ΠΆΠ΅Π²Ρ‹ΠΉ 0xFF,0xEC,0x27, -- 10 ΠΆΡ‘Π»Ρ‚Ρ‹ΠΉ 0x00,0xE4,0x36, -- 11 Π·Π΅Π»Ρ‘Π½Ρ‹ΠΉ 0x29,0xAD,0xFF, -- 12 Π³ΠΎΠ»ΡƒΠ±ΠΎΠΉ 0x83,0x76,0x9C, -- 13 сСро-Ρ„ΠΈΠΎΠ»Π΅Ρ‚ΠΎΠ²Ρ‹ΠΉ 0xFF,0x77,0xA8, -- 14 Ρ€ΠΎΠ·ΠΎΠ²Ρ‹ΠΉ 0xFF,0xCC,0xAA, -- 15 пСрсиковый } local addr = 0x03FC0 for i,v in ipairs(pal) do poke(addr + i - 1, v) end initSFX() end function TIC() t = t + 1 if state == "play" then updateDrag() updateSheep() updateClouds() checkGameOver() -- ДобавляСм ΠΎΡ‡ΠΊΠΈ Π·Π° Π²Ρ‹ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ if t % 180 == 0 then score = score + 1 end elseif state == "gameover" then mx,my,ml = mouse() if btnp(4) then resetGame() end -- ΠΊΠ½ΠΎΠΏΠΊΠ° Z if keyp(50) then resetGame() end -- Enter end -- ---- Π Π˜Π‘ΠžΠ’ΠΠΠ˜Π• ---- drawBackground() drawGrass() -- Π’Π΅Π½ΠΈ ΠΎΡ‚ Ρ‚ΡƒΡ‡ for _,cloud in ipairs(clouds) do local sx = math.floor(cloud.x) local sr = cloud.size==2 and 18 or 24 elli(sx, 80, sr, 4, 1) end -- Частицы ΡˆΠ΅Ρ€ΡΡ‚ΠΈ ΠΌΡ‘Ρ€Ρ‚Π²Ρ‹Ρ… ΠΎΠ²Π΅Ρ† for _,s in ipairs(sheep) do if not s.alive and s.puffs then drawPuffs(s.puffs) end end -- Π’ΡƒΡ‡ΠΈ for _,cloud in ipairs(clouds) do drawCloud(cloud) end -- ΠžΠ²Ρ†Ρ‹ for _,s in ipairs(sheep) do drawSheep(s) end -- HUD drawHUD() if state == "gameover" then drawGameOver() end -- ΠšΡƒΡ€ΡΠΎΡ€ ΠΌΡ‹ΡˆΠΈ - Ρ€ΡƒΠΊΠ° Ссли Π½Π°Π΄ ΠΎΠ²Ρ†ΠΎΠΉ local cursor = 0 for _,s in ipairs(sheep) do if s.alive then local d = math.sqrt((s.x-mx)^2+(s.y-my)^2) if d < 18 then cursor = 1; break end end end -- РисуСм курсор Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ if cursor == 1 then -- Π ΡƒΠΊΠ° circ(mx, my, 4, 7) pix(mx, my, 0) else -- Π‘Ρ‚Ρ€Π΅Π»ΠΊΠ° tri(mx,my, mx+6,my+4, mx+2,my+7, 7) trib(mx,my, mx+6,my+4, mx+2,my+7, 0) end end