0,]']±>Sï}WÿÍu§ðp8·d%qy)6o;]ÉA¦ösï÷ôôô”°ÂVl†3à2"" """ "2#23"" " """"  ""# 2  """ "ÝÝÝÝíîîîíîîîíîîîíîîîíîîîíîîîÞÝÝÝÝÝÝÝîîîÞîîîÞîîîÞîîîÞîîîÞîîîÞÝÝÝí@D@$44#44#D44#34"@#4##D4##34#wwpgpvwfpVwVpfwfpfwfpfwfwwwvwvwvwVwpfwwwýÿÿÿÝþÝþíþîþýÿÿÿýÝþÝýîþîýÿÿÿàîîîÿÿÿÿÝþÝþîþîþÿÿÿÿþÝþýþîþþÿÿÿÿîîî4#344#"44#44#D44#344#344#"44#4#34##"4##4##D4##34##34##"4##4#pVvVpfffpgVfpgfpVpfpfpffwgwfwfwVwVwfvfwfVfwffvwVfwfw """ 22 32"$D"""3""#2"#3"232"íîÝàî 33Ð3""Ð"""Ð<2"Ð<ÒÝîÞî 3Ý"2Ó""Ò"ÒÞ#ÓÞÀÍÌÍÍÍÍÜÀÜÜÌÀÜÌ3Ì33<3#ÌÍÌÍ ÜÌÍ3333333"ppVwwfwwfggfWfVwgfwfpfvwvwVwvwfwfwVwfwB4DB33 3DD CDD CDD DDD DDD@C$3"3$3"4C$#D3$"D4CDD2DD"DD"ÐÌÃÝÍÝÝÍÜÝÐÜÝÐÍÝÍÜ#íÞ=íÞÝí Ýî Ýî íÞ33"3033333030 ÌÌ ÀÌÀÀ À ÌÌÌÌÌÌÀÌÌ ÌÌÌÌ À`™ ™™™™™™™™™ ™ ™ ™ ™ ™™™™™ ™ ™ ™ ™ ™ ™™™™™™ ™™ ™™ ™™ ™™ ™™ ™™ ™™™™™™™™™™™™ ™™™ ™™™™™™™™™™™™™™™ ™™ ™™ ™™™™™™™ ™ ™™ ™ ™ ™ ™ ™ ™™™™™ ™ ™ ™ ™ ™ ™™™™™™™™ ™ ™™™™™ ™ ™ ™ ™ ™ ™™™™ ™™ ™ ™ ™ ™ ™™ ™™ ™™ ™™ ™™ ™™ ™ ™™™ ™™™™™™™™™™™™ ™™™™™™™™™™™™™ ™ ™ ™ ™ ™ ™ ™ ™™™™ ™™™™™™™™ ™™ ™™™™™™™™ ™™ ™™™™ ™™ ™ ™ ™ ™ ™™ ™ ™ ™ ™ ™ ™ ™™™™ ˜00 ?00?00?00???????????????????Ò0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@D0900000000000000000000000000000 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@D0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@3 0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 0@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ 700000000000000000000000000000700000000000000000000000000000)700000000000000000000000000000ðàÀ €€ @@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@D=,‚b ‚ b ‚ b‚b ‚ b ‚ b‚b‚b ‚b ‚ b¢ b ‚b ‚ b¢ b ‚b ‚b,‚b ‚ b ‚ b‚b ‚ b ‚ b‚b‚b ‚b ‚ b¢ b ‚b ‚ b¢ b ‚b ‚bb‚ ‚ ‚ ‚‚ ‚‚ ‚ ‚ ‚¢‚¢¢‚ ‚ ‚‚ ‚ ‚ ‚‚‚b‚ ‚ ‚ ‚‚ ‚‚ ‚ ‚ ‚¢‚¢¢‚ ‚ ‚¢¢¢¢ ¢¢ À?DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD""BDDDDDDDDDDDD""BDDDDDDDDDDDD""BDDDDDDDDDDDD""BDDDDDDDDDDDD""BDDDDDDDDDDDD""BDDDDDDDDDDDD""BDDDDDDDDDDDD"DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD""BDDDDDDDDDDDD""BDDDDDDDDDDDD""BDDDDDDDDDDDD""BDDDDDDDDDDDD""BDDDDDDDDDDDD""BDDDDDDDDDDDD""BDDDDDDDDDDDD""BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD""BDDDDDDDDDDDD""BDDDDDDDDDDDD""BDDDDDDDDDDDD""BDDDDDDDDDDDD""BDDDDDDDDDDDD""BDDDDDDDDDDDD""BDDDDDDDDDDDD""BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDfffF""BDDDDDDDDDDDDDDDDDDDDD""BDDDDDDDDDDDDDDDDDDDDD""BDDDDDDDDDDDDDDDfffFDD""BDDDDDDDDDDDDDDDDDDDDD""BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD""BDDDDDDDDDDDDDDDDDDDDD""BDDDDDDDDDDDDDDDDDDDDD""BDDDDDDDDDDDDDDDDDDDDD""BDDDDDDDDDDDDDDDDDDDDD""BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD""BDDDDDDDDDDDDDDDDDDDDD""BDDDDDDDDDDDfffFDDDDDD""BDDDDDDDDDDDDDDDDDDDDD""BDDDDDDDDDDDDDDDDDDDDD""BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDfffFDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDfffFDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDfffFDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDfffFDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDfffFDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDfffFDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDfffFDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDfffFDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDfffFDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD""""""""""BDDDDDDDDDDDDDDDDDDD""""""""""BDDDDDDDDDDDDDDDDDDD""""""""""BDDDDDDDDDDDDDDDDDDD""""""DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD$""""BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD3333DDDDDDDDDDDDDDDDDDDDDDDD333DDD33DDDBDD$B$DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD3333DDDDDDDDDDDDDDDDDDDDDDDD333DDD33DDDBDD$#$DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD333DDDD333DD3333DDD333DDDDDD33D33D333DDDB$BD2"DDDBBDD"DDDDDDDDDD$DDDD$DBDDDD"DDDDDDDDDDD"DDDDDDDBDDDDDDDBDDDDBBDDBDBDDDD333DDDD333DD3333DDD333DDDDDD33D33D333DDDB2B23#DDDBB$B$D$B$D"B$BD"B$DD"B"D$BDBBBB$D$B$BDDBBBBBBBBDD"BBB$BD$BD$BD$BBBBDDDDD333DD33DD3D33DD3D3DD33DDDDD333D3DD33DDD"#D23#DDDBBBB$DBDBB"BBBD$DBBD$DBBBBD"D"DBB"DBB"BBBBBBB"DBD"BBB"DBBDDBBB"D"DBDDDDD333DD33DD3D33DD3D3DD33DDDDD333D3DD33DDD23#D2"DDD"B"D$DBDBBBB"DD$DBBD$DBB"DDBDBDBBDB"DDDBBBBBBBDBDBBBBDBBBDDBBBDB"DDDDDDDD333D33DD3D33DD3D33333DDDDD33DD3DD33DDD23#$#$DDD"B$B"B$B$DBB$BDDB$DDDBBB$BDBDBD$D"D$BDD"D$B$BBDBDBB$B"DB$BD$BB"DBBBDDDDDD333D33DD3D33DD3D33333DDDDD33DD3DD33DDD"#D$B$DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD3333DDD333DD33DD3DDDD33DDDDDD333DD3333DDB2BDD$DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD3333DDD333DD33DD3DDDD33DDDDDD333DD3333DDB$BDD$DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD333DDDDDDDDDDDDDDDDDD$""""BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD333DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD333333333333ÓÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝDDDD333333333333ÓÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝDDDD333333333333ÓÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝDDDD333333333333ÓÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD«-- title: Prose-Duuri -- author: Leonard Somero -- desc: 20 pieces of procedural music -- script: lua t=0 local source={ { {code=[[ if t%10==0 then sfx(4,12*6-t%6,4,1) end if t%16==0 then sfx(4,12*5-t%6,4,1) end]],label='noise' },{code=[[if t>=20*14*2+120*8+120*8+20 then t=-1 end end if t>=20*14*2 and t<20*14*2+120*8 and t%3==0 then sfx(8,12*4+t%16-t%4+((t-20*14*2)//120*2)%7,3,0) end if t%20==0 and t<20*14*2-20*2 then sfx(8,12*5-t%14-t%7,6,0) end]],label='arpeggi'}, { code=[[ if t%60==20 and t<20*14*2-20*2 then sfx(2,12*1,20,1) end if t>=20*14*2 and t<20*14*2+120*8 and t%40==0 then sfx(2,12*1+((t-20*14*2)//120*2)%7,35,3) end if t%20==0 and t>=20*14*2+120*8 then if t<=20*14*2+120*8+120*4 then sfx(2,12*1+t%12-t%8,20,3) else if t<20*14*2+120*8+120*8+20 then sfx(2,12*1+2+t%16-t%12,20,3) end end]],label='bass' }, }, {{code=[[ if (t%30==0 or t%8==0) and (not (t%60==0)) and (t<60*16 or t>=60*16+60*6) then sfx(10+(t//60)%2,12+(t%12*4),20,3) end if t%60==0 then sfx(4,12+(t%11*4),20,1) end]],label='noise'}, {code=[[ if t%15==0 then local off=0 local base=60*16+60*6+60*4 if t>=base then off=(t-(base))%12 end if t>=base+60*2 then off=(t-(base+60*2))%11 end if t>=base+60*4 then off=(t-(base+60*4))%10 end if t>=base+60*6 then off=(t-(base+60*6))%8 end if t>=base+60*8 then off=(t-(base+60*8))%13 end sfx(2,12*1+t%12-t%4+off,10,2) if t>=60*16+60*6+60*4+60*12 then t=-1 end end if (t%60==30 or t%60==45) and t<60*16 then sfx(2,12*3+(t%12-t%4+(t//120)%6*4-(t//240*3)%6*3),40,0) end if t>=60*16 and t<=60*16+60*6 and t%3==0 then sfx(2,12*3+t%17-t%16,4,0) end]],label='melody'}, }, {{code=[[ if t<6*10*4*2+60*2+60*2+60*2+60*2+6 then if t%12==t%10 then sfx(4,12*5,3,1) end else if t%18==t%6 and t<6*10*4*2+60*2+60*2+60*2+60*2+6+60*2*4-60-10-10-20-20-6-30 then sfx(4,12*5,8,1) end end if (t>=6*10*4*2 and t<6*10*4*2+60*2) or (t>=6*10*4*2+60*2+60*2 and t<6*10*4*2+60*2+60*2+60*2+6) then if t%4==t%10 then sfx(4,12*2,3,1) end else if t%6==t%10 then sfx(4,12*2,3,1) end end ]],label='noise'},{code=[[ if t%6==0 and t<6*10*4 then sfx(2,12*3+t%5*3+t%3*5,4,0) end if t>=6*10*4 and t<6*10*4*2 and t%6==0 then sfx(2,12*3+t%5*3+t%4*5,4,0) end if t>=6*10*4*2 and t<6*10*4*2+60*2 then sfx(2,12*3+t%5*3+t%4*5,4,0) end if t>=6*10*4*2+60*2 and t<6*10*4*2+60*2+60*2 and t%6==0 then sfx(2,12*5,3,0) end if t>=6*10*4*2+60*2+60*2 and t<6*10*4*2+60*2+60*2+60*2 then sfx(2,12*3+t%5*3+t%3*5,4,0) end if t>=6*10*4*2+60*2+60*2+60*2 and t<6*10*4*2+60*2+60*2+60*2+60*2+6 and t%6==0 then sfx(2,12*5-2,3,0) end if t>=6*10*4*2+60*2+60*2+60*2+60*2+6+60*2*4-60-10-10-20-20-6 then t=-1 end ]],label='melody'}}, {{code=[[ if t%2==t%3 and t%4==t%5 then sfx(4,12*5,3,0) end if t%12==t%15 and t%2==t%5 then sfx(4,12*4,3,0) end if t%16==t%15 then sfx(4,12*3,3,0) end ]],label='noise'},{code=[[ if t>60*4+60*4+20 and t%2==t%3 and t%4==t%5 then sfx(2,12*2+(t%7-t%6)%12,8,1) end if t>60*4+60*4+60*4+60*4+20 and t%2==t%3 and t%4==t%5 then sfx(2,12*2+4+(t%7-t%6)%12,8,2) end if t>=60*4+60*4+60*4*6 then t=-1 end ]],label='melody'}}, {{code=[[ if t%9==t%6 then sfx(2,12*3+(t%7-t%8),30,0) sfx(2,12*2+(t%7-t%8),30,1) end if t>215*2 then t=-1 end ]],label='melody'}}, {{code=[[ if t<60*4*3+60*4*2+30*4-30 then if t%30==0 or (t>60*4 and t%15==0) or (t>60*4*2 and t%12==0) or (t>60*4*3 and t%6==0) then sfx(4,12*6,4,3) end if t%11==t%4 then sfx(4,12*4,8,1) end elseif t%9==t%6 then sfx(10+t%2,12*6,4,1) end ]],label='noise'},{code=[[ if t<60*4*3+60*4*2+30*4-30 then if (t<60*4*3 and t%10==t%6) or (t>=60*4*3 and t%10==t%4) then sfx(4+t%7,12*5+t%6*2-t%4*2,8,0) end elseif t%9==t%6 then sfx(4+t%7,12*5+t%7*2-t%8*2,8,0) end ]],label='glitch'},{code=[[ if t>=60*4*3+60*4*2+30*4-30+60*4*4+30*4-30 then t=-1 end if t<60*4*3+60*4*2+30*4-30 then if t%10==t%9 and t<60*4*3+20 then sfx(2,12*2-4+t%9,10,2) end if t>=60*4*3 and t%6==0 then sfx(2,12*2-4+t%9,10,2) end end if t>=60*4*3+60*4*2+30*4-30+60*8-30 and t%12==0 then sfx(2,12*2-(t//8)%5*2,10,2) end ]],label='melody'}}, {{code=[[ if t%11==0 then sfx(2,12*1+t%4+t%7+(t//88*2),9,0) end ]],label='bass'},{code=[[ if t>=88*8 then t=-1 end if t%88==0 then sfx(8,12*4+t%9*3,20,1) end ]],label='arpeggi'}}, {{code=[[ if t>=11*8*16 and t%11==t%7 then sfx(4,12*4,6,2) end if t%22==0 then sfx(4,12*6,3,2) end if t%22==t%16 then sfx(4,12*3,6,1) end ]],label='noise'},{code=[[ if t>=11*8*16*2 then t=-1 end if t%11==0 then sfx(2,12*4-t%15*3+t%16*2-t//(11*8*16+11*8*8)*2,6,0) end if t<11*8*16 and t%44==0 then sfx(2,12*5-t%6+t%7,22,0) end ]],label='melody'}}, {{code=[[ if t%11==0 then sfx(4,12*6,8,0) end if (t<11*16*4-11*8+11*16 and t%11==t%4) or (t>=11*16*4-11*8-11*8+11*16 and (t%11==t%5 or t%11==t%9)) then sfx(4,12*4,8,0) end if t%11==t%6 then sfx(4,12*2,8,0) end ]],label='noise'},{code=[[ if t>=11*12*16-11 then t=-1 end if t==11*16*4-11*8+11*16 or t==(11*16*4-11*8+11*16)*2-11*8*2 then sfx(8,12*5+t%5,60,2) end if t%22==0 and t>=11*16*2-11*8 and t<11*16*4-11*8+11*16 then sfx(2,12*2+t%20-t%16*2,11,1) end if t%11==0 and t>=11*16*4-11*8+11*16 then sfx(2,12*2+t%20-t%16*2,11,1) end ]],label='melody'}}, {{code=[[ if t<60*4+10 and t%6==t%7 then sfx(12,12*3+t%7,50,0) end if t>=60*4+10 and t%6==t%8 then sfx(12,12*3+t%7,50,0) end ]],label='kick'},{code=[[ if t==0 then rt=0 end if t>=60*4+10+12*8*8+12*8*4+12 then t=-1 end if t<60*4+10 and t%12==t%14 then sfx(8,12*3+10+t%7*2,30,1) end if t>=60*4+10 and t%12==0 then if rt<32 then sfx(2,12*3+10+(t%10*2-t%11*3)%18,30,1) else if t>=60*4+10+12*8*8 then sfx(2,12*4+10+(t%7*3-t%8*3)%18,30,2) else sfx(2,12*3+10+(t%10*2-t%11*3)%9,30,1) end end if rt<30 then t=60*4+10 rt=rt+1 end if t>=60*4+10+12*8*4 then if rt<31 then t=60*4+10; rt=rt+1 elseif rt<32 then rt=rt+1 end end end ]],label='melody'}}, {{code=[[ if t<6*8*6 and t%2==t%3 then sfx(2,12*5+t%18,3,0) end if t>=6*8*6 and t<6*8*8*2 and t%2==t%3 then sfx(2,12*5+t%18+t//8%11*4,3,0) end if t>=6*8*8*2 and t<6*8*8*2*3-6*8*8+8 and t%2==t%3 then sfx(2,12*5-t%14+t//88%11*6,3,0) end if t>=6*8*8*2*3-6*8*8+8 then t=-1 end ]],label='melody'}}, {{code=[[ if t%60==t%10 then if t>=240*4*2 then t=-1 end sfx(2,12*4-((t//240)%4*2)%(6+t//(240*4)%2),20,0) sfx(2,12*4-((t//240)%4*2+3)%(6+t//(240*4)%2),20,1) sfx(2,12*4-((t//240)%4*2+7)%(6+t//(240*4)%2),20,2) end ]],label='chords'}}, {{code=[[ if t>=72*8+72*3*2+24+72*2+72*3+36+72*3-36+72*3+36+36 then t=-1 end if t<72*8 then sfx(4,12*3+t%18-t%16*2,3,0) end if t>=72*8 and t<72*8+72*3 then sfx(4,12*3+t%6*3-t%14*2,3,0) end if t>=72*8+72*3 and t<72*8+72*3*2+24 then sfx(4,12*4+t%6*3-t%14*2,3,0) end if t>=72*8+72*3*2+24 and t<72*8+72*3*2+24+72*2+72*3+36 then sfx(4,12*4+t%3*7-t%4*6,3,0) end if t>=72*8+72*3*2+24+72*2+72*3+36 then sfx(10+t%2,12*3+t%18-t%16*2,3,0) end ]],label='noise'},{code=[[ if ((t>=72*8+72*3*2+24+72*2 and t<72*8+72*3*2+24+72*2+72*3+36) or (t>=72*8+72*3*2+24+72*2+72*3+36+72*3-36 and t<72*8+72*3*2+24+72*2+72*3+36+72*3-36+72*3+36+36)) and t%(t%6+1)==0 then sfx(12,12*3,50,1) end if t>=72*8+72*3*2+24+72*2+72*3+36 and t<72*8+72*3*2+24+72*2+72*3+36+72*3-36-36-36 then sfx(12,12*3+t%15,50,1) end ]],label='kick'}}, {{code=[[ if t>=22*6*6-11+22*6*6-11+22*6*6-11+22*2 then t=-1 end if t<22*6*6-11 and t%(1)==0 then sfx(2,12*3+t%9*2+t%6*3-t%11*4,4,0) end if t>=22*6*6-11 and t<22*6*6-11+22*6*6-11 and t%9==0 then sfx(2,12*3+t%9*2+t%6*3-t%11*4,9,0) end if t>=22*6*6-11+22*6*6-11 and t<22*6*6-11+22*6*6-11+22*6*6-11+22*2 and t%5==0 then sfx(2,12*3+t%9*2+t%6*3-t%11*4,9,0) end ]],label='melody'},{code=[[ if t>120 and t<22*6*6-11 and t%22==0 then sfx(4,12*6,6,1) end if t>=22*6*6-11 and t<22*6*6-11+22*6*6-11 and t%18==0 then sfx(4,12*6,6,1) end if t>=22*6*6-11+22*6*6-11 and t%10==0 then sfx(4,12*6,6,1) end if t>120 and t<22*6*6-11 and t%11==t%6 then sfx(4,12*3,12,2) end if t>=22*6*6-11 and t<22*6*6-11+22*6*6-11 and t%27==0 then sfx(4,12*3,12,2) end if t>=22*6*6-11+22*6*6-11 and t%15==0 then sfx(4,12*3,12,2) end ]],label='noise'},{code=[[ if t==0 then rt=0 end if t==22*6*6-11 and rt<14 then t=22*6*6-11-4 sfx(4,12*6,3,1) rt=rt+1 end if t==22*6*6-11+22*6*6-11 and rt<28 then t=22*6*6-11+22*6*6-11-4 sfx(4,12*6,3,1) rt=rt+1 end if t==22*6*6-11+22*6*6-11+22*6*6-11+22*2 and rt<42 then t=22*6*6-11+22*6*6-11+22*6*6-11+22*2-4 sfx(4,12*6,3,1) rt=rt+1 end ]],label='retrigger'}}, {{code=[[ if t//2%(t//2%6+1)==0 then sfx(4,12*4,3,3) end ]],label='noise'},{code=[[ if t<9*8*4*2+9*8*4*2 then if t//2%(t//2%9+1)==0 then sfx(2,12*4-t//(9*8*4*2+9*8*4)*2-t//(9*8*4*2+9*8*4+9*8*2)*2,2,0) end if t>=9*8*4 and t//2%(t//2%9+1)==0 then sfx(2,12*4+3-t//(9*8*4*2+9*8*4)*2-t//(9*8*4*2+9*8*4+9*8*2)*0,2,1) end if t>=9*8*4*2 and t//2%(t//2%9+1)==0 then sfx(2,12*4+7-t//(9*8*4*2+9*8*4)*2-t//(9*8*4*2+9*8*4+9*8*2)*2,2,2) end end ]],label='chords'},{code=[[ if t>=9*8*4*2+9*8*4*2+9*8*4*2+9*8*4*4 then t=-1 end if t>=9*8*4*2+9*8*4*2 then if t<9*8*4*2+9*8*4*2+9*8*4*2 and t//2%(t//2%9+1)==0 then sfx(8,12*4+t//2%9,40,0) end if t>=9*8*4*2+9*8*4*2+9*8*4*2 and t//2%(t//2%12+1)==0 then sfx(2,12*4+t//2%9,40,0) end if t<9*8*4*2+9*8*4*2+9*8*4*2 and t%5==0 then sfx(2,12*2+t%7,40,1) end if t>=9*8*4*2+9*8*4*2+9*8*4*2 and t//2%(t//2%12+1)==0 then sfx(2,12*2+t//2%9,40,2) end end ]],label='melody'}}, {{code=[[ if t>=(24*4*8+24)*3+24*4*4+24*4*4 then t=-1 end if t<24*4*8+24 and t//4%(t//4%12+1)==0 then sfx(2,12*4+t//3%10+t//3%5*3-t//3%4*3,30,0) end if t>=24*4*8+24 and t<(24*4*8+24)*2 and t//4%(t//4%6+1)==0 then sfx(2,12*3+t//3%12+t//3%8*3-t//3%6*3,30,2) end if t>=(24*4*8+24)*2 and t//4%(t//4%6+1)==0 then sfx(2,12*4+t//3%5*3-t//3%3*3,30,0) end ]],label='melody'},{code=[[ if t==0 then rt=0 end if t<(24*4*8+24)*3 and (t%24==0 or t%24==t%16 or (t>=24*4*8+24 and t%24==16)) then sfx(4,12*5,6,1) end if t>=(24*4*8+24)*3 and t%48==0 then sfx(4,12*5,6,1) end if t<(24*4*8+24)*3 and t%24*4<8 then sfx(4,12*5+t%(24*4)*6,6,1) end if t==6 and rt<7 then sfx(4,12*5+rt*6,6,2) rt=rt+1 t=0 end ]],label='noise'}}, {{code=[[ local base=6*4*4*2+6*8+6*2 if (t=base*6) and t%6==0 then sfx(2,12*5+t%15-(t-20)%5-(t-40)%4,6,0) end if t>=base*5 and t=base*7 and t=base*9.5 and t%6==0 then sfx(2,12*5+t%15-(t-20)%7-(t-40)%6,6,0) end if t>=base*10.5 and t%6==0 then sfx(2,12*5+t%15-(t-20)%17-(t-40)%16,6,0) end if t>=base*(14+4) then t=-1; sfx(-1,0,0,1) end ]],label='melody'},{code=[[ local base=6*4*4*2+6*8+6*2 if t>=base and t%base==0 then sfx(2,12*2+(t-base)%5*5,280,1) end ]],label='bass'}}, {{code=[[ if t<16*4*8+16*4*8+16*4*8 and (t%4==0 or (t>=16*4*4 and t<16*4*8+16*4*8 and t%2==0)) then sfx(4,12*4+t%16*6,3,1) end if t>=16*4*8+16*4*8+16*4*8 and (t%32==0) then sfx(4,12*3+t%96*12,20,1) end ]],label='noise'},{code=[[ if t<16*4*8 and t%16<4 then sfx(8,12*4+t%8-(t-20)%8+(t-40)%8*(t//(16*4))%2,20,0) end if t>=16*4*8 and t%16<4 then sfx(8,12*4+t%6-(t-20)%6+(t-40)%6*(t//(16*4))%2,20,0) end if t>=16*4*8+16*4*8 and t<16*4*8+16*4*8+16*4*8 and t%16<4 then sfx(8,12*4+t%5-(t-20)%5+(t-40)%5*(t//(16*4))%2,20,0) end if t>=16*4*8+16*4*8+16*4*8+16*4*8+16*4 then t=-1 end ]],label='arpeggi'}}, {{code=[[ local tempo=7 if t>=107*4*4-107*2 then tempo=14 end if t%107==0 then sfx(2,12*4+t%tempo-(t-20)%tempo*2+(t-40)%tempo+2,108,0) end if t%107==43 then sfx(2,12*4+3+t%tempo-(t-20)%tempo*2+(t-40)%tempo+2,108,1) end if t%107==86 then sfx(2,12*4+7+t%tempo-(t-20)%tempo*2+(t-40)%tempo+2,108,2) end if t>=107*4*4-107*2+107*4*4-107*2-107*2-107+40 then for c=0,3 do sfx(-1,0,0,c) end; t=-1 end ]],label='chords'}}, {{code=[[ if t<18*4*4*4 and (((t%9==t%3 or t%16==t%13) and not (t%12==t%8)) or (t%18==0 or t%21==0 or t%96>80)) then sfx(4,12*4-t%19+(t-20)%6*2+(t-40)%9*5,6,0) end if t>=18*4*4*4+18*4*4 and (t<18*4*4*4*2-18*4*4 and ((t%9==t%13 or t%16==t%14) and not (t%12==t%8)) or (t%18==0 or t%21==0 or t%96>80)) then sfx(4,12*3-t%19+(t-20)%6*2+(t-40)%9*5,6,0) end if t>=18*4*4*4*2-18*4*4 and ((t%36==t%34 or t%26==t%23) and not (t%12==t%8)) or t%42==0 or t%96>80 then sfx(4,12*2-t%19+(t-20)%6*2+(t-40)%9*5,6,0) end if t>=18*4*4*4*3-18*4 then t=-1 end ]],label='noise'},{code=[[ if t<18*4*4*4+18*4*4 and t%9==t%3 then sfx(2,12*2-t%8+(t-30)%4*2+(t-50)%6*5-(t-80)%4*5+t%2*9,6,1) end if t>=18*4*4*4+18*4*4 and t<18*4*4*4*2 and (t%9==t%3 or t%16==t%13) or t%21==0 then sfx(2,12*2-t%8+(t-20)%4*2+(t-50)%7*5-(t-70)%3*5,30,1) end if t>=18*4*4*4*2 and t%12==t%8 then sfx(2,12*2-t%8+(t-20)%4*2+(t-50)%7*5-(t-70)%3*5,30,1) end ]],label='melody'}}, } for i,pack in ipairs(source) do for j,v in ipairs(pack) do v.y=0 end end source[1].comment='Welcome to the Prose-Duuri music disk! We\'ll kick things off with a catchy tune.' source[2].comment='This one sounds like an overworld theme for an RPG. I wonder if these songs will be used in a game.' source[3].comment='Quite wild. Someone in the TIC-80 Telegram group suggested this could be a boss battle theme.' source[4].comment='Definitely menu music. The major key harmony sounds a bit goofy.' source[5].comment='Very short melody but it does the job.' source[6].comment='Glitchy track, made by alternating waveforms with respect to time.' source[7].comment='Short but tense. Maybe a boss battle intro?' source[8].comment='Usually procedurally generated melodies sound... oppressive, but this one is just plain happy. Sounds like it was composed by a human.' source[9].comment='Look at the bass go! Catchy rhythms too.' source[10].comment='This melody makes me think of a snake boss battle. Introducing kick drums!' source[11].comment='Minimalistic but very appealing. It\'s like a birdsong.' source[12].comment='Moody chords, maybe this could play as game over music.' source[13].comment='This massages my ears. The kick drum comes as a complete surprise.' source[14].comment='Playful melody that takes wild turns. The retrigger effect sounds really good.' source[15].comment='I know this is Prose-Duuri (\'duuri\' is Finnish for major key), but I just like minor key progressions. Another boss battle, against something royal?' source[16].comment='For this one I focused on a catchy drum beat, and the melodies support that.' source[17].comment='When I first heard this melody, I realized I\'ve got a banger on my hands. The bass augments the lead melody nicely.' source[18].comment='So tense! The drums are spot-on, offering variety.' source[19].comment='Had to make one that\'s just long chords. Pretty satisfied with this one, maybe ending credits music?' source[20].comment='Now here\'s a crazy song to end the music disk. Not the only one on this disk inspired by Autechre.' function procmusic1() if t%10==0 then sfx(4,12*6-t%6,4,1) end if t%16==0 then sfx(4,12*5-t%6,4,1) end if t%60==20 and t<20*14*2-20*2 then sfx(2,12*1,20,1) end if t>=20*14*2 and t<20*14*2+120*8 and t%40==0 then sfx(2,12*1+((t-20*14*2)//120*2)%7,35,3) end if t%20==0 and t>=20*14*2+120*8 then if t<=20*14*2+120*8+120*4 then sfx(2,12*1+t%12-t%8,20,3) else if t<20*14*2+120*8+120*8+20 then sfx(2,12*1+2+t%16-t%12,20,3) end end if t>=20*14*2+120*8+120*8+20 then t=-1 end end if t>=20*14*2 and t<20*14*2+120*8 and t%3==0 then sfx(8,12*4+t%16-t%4+((t-20*14*2)//120*2)%7,3,0) end if t%20==0 and t<20*14*2-20*2 then sfx(8,12*5-t%14-t%7,6,0) end end function procmusic2() if (t%30==0 or t%8==0) and (not (t%60==0)) and (t<60*16 or t>=60*16+60*6) then sfx(10+(t//60)%2,12+(t%12*4),20,3) end if t%60==0 then sfx(4,12+(t%11*4),20,1) end if t%15==0 then local off=0 local base=60*16+60*6+60*4 if t>=base then off=(t-(base))%12 end if t>=base+60*2 then off=(t-(base+60*2))%11 end if t>=base+60*4 then off=(t-(base+60*4))%10 end if t>=base+60*6 then off=(t-(base+60*6))%8 end if t>=base+60*8 then off=(t-(base+60*8))%13 end sfx(2,12*1+t%12-t%4+off,10,2) if t>=60*16+60*6+60*4+60*12 then t=-1 end end if (t%60==30 or t%60==45) and t<60*16 then sfx(2,12*3+(t%12-t%4+(t//120)%6*4-(t//240*3)%6*3),40,0) end if t>=60*16 and t<=60*16+60*6 and t%3==0 then sfx(2,12*3+t%17-t%16,4,0) end end function procmusic3() if t<6*10*4*2+60*2+60*2+60*2+60*2+6 then if t%12==t%10 then sfx(4,12*5,3,1) end else if t%18==t%6 and t<6*10*4*2+60*2+60*2+60*2+60*2+6+60*2*4-60-10-10-20-20-6-30 then sfx(4,12*5,8,1) end end if (t>=6*10*4*2 and t<6*10*4*2+60*2) or (t>=6*10*4*2+60*2+60*2 and t<6*10*4*2+60*2+60*2+60*2+6) then if t%4==t%10 then sfx(4,12*2,3,1) end else if t%6==t%10 then sfx(4,12*2,3,1) end end if t%6==0 and t<6*10*4 then sfx(2,12*3+t%5*3+t%3*5,4,0) end if t>=6*10*4 and t<6*10*4*2 and t%6==0 then sfx(2,12*3+t%5*3+t%4*5,4,0) end if t>=6*10*4*2 and t<6*10*4*2+60*2 then sfx(2,12*3+t%5*3+t%4*5,4,0) end if t>=6*10*4*2+60*2 and t<6*10*4*2+60*2+60*2 and t%6==0 then sfx(2,12*5,3,0) end if t>=6*10*4*2+60*2+60*2 and t<6*10*4*2+60*2+60*2+60*2 then sfx(2,12*3+t%5*3+t%3*5,4,0) end if t>=6*10*4*2+60*2+60*2+60*2 and t<6*10*4*2+60*2+60*2+60*2+60*2+6 and t%6==0 then sfx(2,12*5-2,3,0) end if t>=6*10*4*2+60*2+60*2+60*2+60*2+6+60*2*4-60-10-10-20-20-6 then t=-1 end end function procmusic4() if t%2==t%3 and t%4==t%5 then sfx(4,12*5,3,0) end if t%12==t%15 and t%2==t%5 then sfx(4,12*4,3,0) end if t%16==t%15 then sfx(4,12*3,3,0) end if t>60*4+60*4+20 and t%2==t%3 and t%4==t%5 then sfx(2,12*2+(t%7-t%6)%12,8,1) end if t>60*4+60*4+60*4+60*4+20 and t%2==t%3 and t%4==t%5 then sfx(2,12*2+4+(t%7-t%6)%12,8,2) end if t>=60*4+60*4+60*4*6 then t=-1 end end function procmusic5() if t%9==t%6 then sfx(2,12*3+(t%7-t%8),30,0) sfx(2,12*2+(t%7-t%8),30,1) end if t>215*2 then t=-1 end end function procmusic6() if t>=60*4*3+60*4*2+30*4-30+60*4*4+30*4-30 then t=-1 end if t<60*4*3+60*4*2+30*4-30 then if t%30==0 or (t>60*4 and t%15==0) or (t>60*4*2 and t%12==0) or (t>60*4*3 and t%6==0) then sfx(4,12*6,4,3) end if t%11==t%4 then sfx(4,12*4,8,1) end elseif t%9==t%6 then sfx(10+t%2,12*6,4,1) end if t<60*4*3+60*4*2+30*4-30 then if t%10==t%9 and t<60*4*3+20 then sfx(2,12*2-4+t%9,10,2) end if t>=60*4*3 and t%6==0 then sfx(2,12*2-4+t%9,10,2) end end if t>=60*4*3+60*4*2+30*4-30+60*8-30 and t%12==0 then sfx(2,12*2-(t//8)%5*2,10,2) end if t<60*4*3+60*4*2+30*4-30 then if (t<60*4*3 and t%10==t%6) or (t>=60*4*3 and t%10==t%4) then sfx(4+t%7,12*5+t%6*2-t%4*2,8,0) end elseif t%9==t%6 then sfx(4+t%7,12*5+t%7*2-t%8*2,8,0) end end function procmusic7() if t>=88*8 then t=-1 end if t%11==0 then sfx(2,12*1+t%4+t%7+(t//88*2),9,0) end if t%88==0 then sfx(8,12*4+t%9*3,20,1) end end function procmusic8() if t>=11*8*16*2 then t=-1 end if t%11==0 then sfx(2,12*4-t%15*3+t%16*2-t//(11*8*16+11*8*8)*2,6,0) end if t<11*8*16 and t%44==0 then sfx(2,12*5-t%6+t%7,22,0) end if t>=11*8*16 and t%11==t%7 then sfx(4,12*4,6,2) end if t%22==0 then sfx(4,12*6,3,2) end if t%22==t%16 then sfx(4,12*3,6,1) end end function procmusic9() if t>=11*12*16-11*4 then t=-1 end if t%11==0 then sfx(4,12*6,8,0) end if (t<11*16*4-11*8+11*16 and t%11==t%4) or (t>=11*16*4-11*8-11*8+11*16 and (t%11==t%5 or t%11==t%9)) then sfx(4,12*4,8,0) end if t%11==t%6 then sfx(4,12*2,8,0) end if t==11*16*4-11*8+11*16 or t==(11*16*4-11*8+11*16)*2-11*8*2 then sfx(8,12*5+t%5,60,2) end if t%22==0 and t>=11*16*2-11*8 and t<11*16*4-11*8+11*16 then sfx(2,12*2+t%20-t%16*2,11,1) end if t%11==0 and t>=11*16*4-11*8+11*16 then sfx(2,12*2+t%20-t%16*2,11,1) end end function procmusic10() if t==0 then rt=0 end if t<60*4+10 and t%6==t%7 then sfx(12,12*3+t%7,50,0) end if t>=60*4+10 and t%6==t%8 then sfx(12,12*3+t%7,50,0) end if t<60*4+10 and t%12==t%14 then sfx(8,12*3+10+t%7*2,30,1) end if t>=60*4+10 and t%12==0 then if rt<32 then sfx(2,12*3+10+(t%10*2-t%11*3)%18,30,1) else if t>=60*4+10+12*8*8 then sfx(2,12*4+10+(t%7*3-t%8*3)%18,30,2) else sfx(2,12*3+10+(t%10*2-t%11*3)%9,30,1) end end if rt<30 then t=60*4+10 rt=rt+1 end if t>=60*4+10+12*8*4 then if rt<31 then t=60*4+10; rt=rt+1 elseif rt<32 then rt=rt+1 end end end if t>=60*4+10+12*8*8+12*8*4+12 then t=-1 end end function procmusic11() if t<6*8*6 and t%2==t%3 then sfx(2,12*5+t%18,3,0) end if t>=6*8*6 and t<6*8*8*2+6*8*6-6*8*2 and t%2==t%3 then sfx(2,12*5+t%18+t//8%11*4,3,0) end if t>=6*8*8*2+6*8*6-6*8*2 and t<6*8*8*2*3-6*8*8+8 and t%2==t%3 then sfx(2,12*5-t%14+t//88%11*6,3,0) end if t>=6*8*8*2*3-6*8*8+8 then t=-1 end end function procmusic12() if t>=240*4*2 then t=-1 end if t%60==t%10 then sfx(2,12*4-((t//240)%4*2)%(6+t//(240*4)%2),20,0) sfx(2,12*4-((t//240)%4*2+3)%(6+t//(240*4)%2),20,1) sfx(2,12*4-((t//240)%4*2+7)%(6+t//(240*4)%2),20,2) end end function procmusic13() if t<72*8 then sfx(4,12*3+t%18-t%16*2,3,0) end if t>=72*8 and t<72*8+72*3 then sfx(4,12*3+t%6*3-t%14*2,3,0) end if t>=72*8+72*3 and t<72*8+72*3*2+24 then sfx(4,12*4+t%6*3-t%14*2,3,0) end if t>=72*8+72*3*2+24 and t<72*8+72*3*2+24+72*2+72*3+36 then sfx(4,12*4+t%3*7-t%4*6,3,0) end if ((t>=72*8+72*3*2+24+72*2 and t<72*8+72*3*2+24+72*2+72*3+36) or (t>=72*8+72*3*2+24+72*2+72*3+36+72*3-36 and t<72*8+72*3*2+24+72*2+72*3+36+72*3-36+72*3+36+36-36)) and t%(t%6+1)==0 then sfx(12,12*3,50,1) end if t>=72*8+72*3*2+24+72*2+72*3+36 and t<72*8+72*3*2+24+72*2+72*3+36+72*3-36-36-36 then sfx(12,12*3+t%15,50,1) end if t>=72*8+72*3*2+24+72*2+72*3+36 then sfx(10+t%2,12*3+t%18-t%16*2,3,0) end if t>=72*8+72*3*2+24+72*2+72*3+36+72*3-36+72*3+36+36 then t=-1 end end function procmusic14() if t==0 then rt=0 end if t<22*6*6-11 and t%(1)==0 then sfx(2,12*3+t%9*2+t%6*3-t%11*4,4,0) end if t>=22*6*6-11 and t<22*6*6-11+22*6*6-11 and t%9==0 then sfx(2,12*3+t%9*2+t%6*3-t%11*4,9,0) end if t>=22*6*6-11+22*6*6-11 and t<22*6*6-11+22*6*6-11+22*6*6-11+22*2 and t%5==0 then sfx(2,12*3+t%9*2+t%6*3-t%11*4,9,0) end if t==22*6*6-11 and rt<14 then t=22*6*6-11-4 sfx(4,12*6,3,1) rt=rt+1 end if t==22*6*6-11+22*6*6-11 and rt<28 then t=22*6*6-11+22*6*6-11-4 sfx(4,12*6,3,1) rt=rt+1 end if t==22*6*6-11+22*6*6-11+22*6*6-11+22*2 and rt<42 then t=22*6*6-11+22*6*6-11+22*6*6-11+22*2-4 sfx(4,12*6,3,1) rt=rt+1 end if t>120 and t<22*6*6-11 and t%22==0 then sfx(4,12*6,6,1) end if t>=22*6*6-11 and t<22*6*6-11+22*6*6-11 and t%18==0 then sfx(4,12*6,6,1) end if t>=22*6*6-11+22*6*6-11 and t%10==0 then sfx(4,12*6,6,1) end if t>120 and t<22*6*6-11 and t%11==t%6 then sfx(4,12*3,12,2) end if t>=22*6*6-11 and t<22*6*6-11+22*6*6-11 and t%27==0 then sfx(4,12*3,12,2) end if t>=22*6*6-11+22*6*6-11 and t%15==0 then sfx(4,12*3,12,2) end if t>=22*6*6-11+22*6*6-11+22*6*6-11+22*2 then t=-1 end end function procmusic15() --if t==0 then t=9*8*4*2+9*8*4*2 end if t//2%(t//2%6+1)==0 then sfx(4,12*4,3,3) end if t<9*8*4*2+9*8*4*2 then if t//2%(t//2%9+1)==0 then sfx(2,12*4-t//(9*8*4*2+9*8*4)*2-t//(9*8*4*2+9*8*4+9*8*2)*2,2,0) end if t>=9*8*4 and t//2%(t//2%9+1)==0 then sfx(2,12*4+3-t//(9*8*4*2+9*8*4)*2-t//(9*8*4*2+9*8*4+9*8*2)*0,2,1) end if t>=9*8*4*2 and t//2%(t//2%9+1)==0 then sfx(2,12*4+7-t//(9*8*4*2+9*8*4)*2-t//(9*8*4*2+9*8*4+9*8*2)*2,2,2) end else if t<9*8*4*2+9*8*4*2+9*8*4*2 and t//2%(t//2%9+1)==0 then sfx(8,12*4+t//2%9,40,0) end if t>=9*8*4*2+9*8*4*2+9*8*4*2 and t//2%(t//2%12+1)==0 then sfx(2,12*4+t//2%9,40,0) end if t<9*8*4*2+9*8*4*2+9*8*4*2 and t%5==0 then sfx(2,12*2+t%7,40,1) end if t>=9*8*4*2+9*8*4*2+9*8*4*2 and t//2%(t//2%12+1)==0 then sfx(2,12*2+t//2%9,40,2) end end if t>=9*8*4*2+9*8*4*2+9*8*4*2+9*8*4*4 then t=-1 end end function procmusic16() if t==0 then rt=0 end if t<24*4*8+24 and t//4%(t//4%12+1)==0 then sfx(2,12*4+t//3%10+t//3%5*3-t//3%4*3,30,0) end if t>=24*4*8+24 and t<(24*4*8+24)*2 and t//4%(t//4%6+1)==0 then sfx(2,12*3+t//3%12+t//3%8*3-t//3%6*3,30,2) end if t>=(24*4*8+24)*2 and t//4%(t//4%6+1)==0 then sfx(2,12*4+t//3%5*3-t//3%3*3,30,0) end if t<(24*4*8+24)*3 and (t%24==0 or t%24==t%16 or (t>=24*4*8+24 and t%24==16)) then sfx(4,12*5,6,1) end if t>=(24*4*8+24)*3 and t%48==0 then sfx(4,12*5,6,1) end if t<(24*4*8+24)*3 and t%24*4<8 then sfx(4,12*5+t%(24*4)*6,6,1) end if t==6 and rt<7 then sfx(4,12*5+rt*6,6,2) rt=rt+1 t=0 end if t>=(24*4*8+24)*3+24*4*4+24*4*4 then t=-1 end end function procmusic17() local base=6*4*4*2+6*8+6*2 if (t=base*6) and t%6==0 then sfx(2,12*5+t%15-(t-20)%5-(t-40)%4,6,0) end if t>=base*5 and t=base*7 and t=base*9.5 and t%6==0 then sfx(2,12*5+t%15-(t-20)%7-(t-40)%6,6,0) end if t>=base*10.5 and t%6==0 then sfx(2,12*5+t%15-(t-20)%17-(t-40)%16,6,0) end if t>=base and t%base==0 then sfx(2,12*2+(t-base)%5*5,280,1) end if t>=base*(14+4) then t=-1; sfx(-1,0,0,1) end --[[if t%(6*4)==0 then sfx(12,12*3,30,1) end]] end function procmusic18() if t<16*4*8 and t%16<4 then sfx(8,12*4+t%8-(t-20)%8+(t-40)%8*(t//(16*4))%2,20,0) end if t>=16*4*8 and t%16<4 then sfx(8,12*4+t%6-(t-20)%6+(t-40)%6*(t//(16*4))%2,20,0) end if t>=16*4*8+16*4*8 and t<16*4*8+16*4*8+16*4*8 and t%16<4 then sfx(8,12*4+t%5-(t-20)%5+(t-40)%5*(t//(16*4))%2,20,0) end if t<16*4*8+16*4*8+16*4*8 and (t%4==0 or (t>=16*4*4 and t<16*4*8+16*4*8 and t%2==0)) then sfx(4,12*4+t%16*6,3,1) end if t>=16*4*8+16*4*8+16*4*8 and (t%32==0) then sfx(4,12*3+t%96*12,20,1) end if t>=16*4*8+16*4*8+16*4*8+16*4*8+16*4 then t=-1 end end function procmusic19() local tempo=7 if t>=107*4*4-107*2 then tempo=14 end if t%107==0 then sfx(2,12*4+t%tempo-(t-20)%tempo*2+(t-40)%tempo+2,108,0) end if t%107==43 then sfx(2,12*4+3+t%tempo-(t-20)%tempo*2+(t-40)%tempo+2,108,1) end if t%107==86 then sfx(2,12*4+7+t%tempo-(t-20)%tempo*2+(t-40)%tempo+2,108,2) end if t>=107*4*4-107*2+107*4*4-107*2-107*2-107+40 then for c=0,3 do sfx(-1,0,0,c) end; t=-1 end end function procmusic20() --if t==0 then t=18*4*4*4*2-18*4*4 end if t<18*4*4*4 and (((t%9==t%3 or t%16==t%13) and not (t%12==t%8)) or (t%18==0 or t%21==0 or t%96>80)) then sfx(4,12*4-t%19+(t-20)%6*2+(t-40)%9*5,6,0) end if t>=18*4*4*4+18*4*4 and (t<18*4*4*4*2-18*4*4 and ((t%9==t%13 or t%16==t%14) and not (t%12==t%8)) or (t%18==0 or t%21==0 or t%96>80)) then sfx(4,12*3-t%19+(t-20)%6*2+(t-40)%9*5,6,0) end if t>=18*4*4*4*2-18*4*4 and ((t%36==t%34 or t%26==t%23) and not (t%12==t%8)) or t%42==0 or t%96>80 then sfx(4,12*2-t%19+(t-20)%6*2+(t-40)%9*5,6,0) end if t>=18*4*4*4*3-18*4 then t=-1 end if t<18*4*4*4+18*4*4 and t%9==t%3 then sfx(2,12*2-t%8+(t-30)%4*2+(t-50)%6*5-(t-80)%4*5+t%2*9,6,1) end if t>=18*4*4*4+18*4*4 and t<18*4*4*4*2 and (t%9==t%3 or t%16==t%13) or t%21==0 then sfx(2,12*2-t%8+(t-20)%4*2+(t-50)%7*5-(t-70)%3*5,30,1) end if t>=18*4*4*4*2 and t%12==t%8 then sfx(2,12*2-t%8+(t-20)%4*2+(t-50)%7*5-(t-70)%3*5,30,1) end --[[for i=0,240 do local col=3 if i%12==i%8 or i%21==0 then col=6 end pix(i,12*4-i%8+(i-20)%4*2+(i-50)%7*5-(i-70)%3*5,col) end]] end musa=1 lengths={ 20*14*2+120*8+120*8+20, 60*16+60*6+60*4+60*12, 6*10*4*2+60*2+60*2+60*2+60*2+6+60*2*4-60-10-10-20-20-6, 60*4+60*4+60*4*6, 215*2, 60*4*3+60*4*2+30*4-30+60*4*4+30*4-30, 88*8, 11*8*16*2, 11*12*16-11*4, 60*4+10+12*8*8+12*8*4+12+30+10+12*8*4+20, 6*8*8*2*3-6*8*8+8, 240*4*2, 72*8+72*3*2+24+72*2+72*3+36+72*3-36+72*3+36+36, 22*6*6-11+22*6*6-11+22*6*6-11+22*2+42+20+20+20+60, 9*8*4*2+9*8*4*2+9*8*4*2+9*8*4*4, (24*4*8+24)*3+24*4*4+24*4*4+6*7, (6*4*4*2+6*8+6*2)*(14+4), 16*4*8+16*4*8+16*4*8+16*4*8+16*4, 107*4*4-107*2+107*4*4-107*2-107*2-107+40, 18*4*4*4*3-18*4, } local maxmusa local i=1 while 1 do if _G['procmusic'..tostring(i)] then maxmusa=i else break end i=i+1 end local at=0 function global_update() cls(4) if btnp(2) and not autoplay then prevmusa(); loop=loops; at=0; t=0; tt=0; firstinput=true; for i=0,3 do sfx(-1,0,0,i) end end if btnp(3) and not autoplay then nextmusa(); loop=loops; at=0; t=0; tt=0; firstinput=true; for i=0,3 do sfx(-1,0,0,i) end end _G['procmusic'..tostring(musa)]() if visual=='code' then if source[musa] then for j=1,#source[musa] do if source[musa][j].dy then source[musa][j].y=source[musa][j].y+source[musa][j].dy end clip((j-1)*240/#source[musa],0,240/#source[musa],136-24+2) local tw=print(source[musa][j].label,0,-6) local tx,ty=3,source[musa][j].y+12 for i=1,#source[musa][j].code do tx=tx+print(string.sub(source[musa][j].code,i,i),tx+(j-1)*240/#source[musa],ty,3,true) if tx>=240/#source[musa]-6 or string.sub(source[musa][j].code,i,i)=='\n' then tx=3; ty=ty+6 end if ty>=136-24+8 then if not source[musa][j].dy then source[musa][j].dy=-0.25 end end if i==#source[musa][j].code and source[musa][j].dy and ty<136-24-6 then source[musa][j].dy=-source[musa][j].dy end if i==1 and source[musa][j].dy and ty>12 then source[musa][j].dy=-source[musa][j].dy end end rect((j-1)*240/#source[musa]+2,0+1,240/#source[musa]-2*2,8,2) print(source[musa][j].label,(j-1)*240/#source[musa]+240/(#source[musa]*2)-tw/2,2,4) end clip() end end if visual=='graph' then if source[musa] then old_t=t old_rt=rt old_sfx=sfx sfx=function(a,b,c,d) local col if d==0 then col=6 end if d==1 then col=2 end if d==2 then col=10 end if d==3 then col=12 end local sx=t-old_t if sx<0 then sx=sx+old_t+i-t end line(sx,12*10-b,sx+c,12*10-b,col) end t=old_t i=0 repeat _G['procmusic'..tostring(musa)]() t=t+1 i=i+1 until i==240 t=old_t rt=old_rt sfx=old_sfx end end local tw=print(string.format('Song %.2d',musa),4,136-4-6*2-4,3,false,2,false) if autoplay then spr(24,4+tw+2,136-4-6*2-6+1,0,1,0,0,2,2) end if shuffle then spr(24+2,4+tw+2,136-4-6*2-6+1,0,1,0,0,2,2) end if not autoplay and not shuffle then spr(24+2+2,4+tw+2,136-4-6*2-6+1,0,1,0,0,2,2) end --if not firstinput and not autoplay and not shuffle then -- print('Left/Right to switch song.',4+tw+2,136-4-6*2,12,false,1,true) --else if source[musa].comment then local tw2=print(source[musa].comment,0,-6,3,false,1,true) clip(4+tw+2+12+2,136-4-6*2-6+1,240-(4+tw+2+12+2)-2,10) print(source[musa].comment,4+tw+2+12+2+240-(4+tw+2+12+2)-2-tt*0.5%(tw2+(240-(4+tw+2+12+2)-2)),136-4-6*2-6+4,2,false,1,true) clip() end --end if lengths[musa] then rect(4,136-8,1*(240-8),4,13) local rw=at/lengths[musa] rect(4,136-8,rw*(240-8),4,3) end at=at+1 if t==-1 then at=0 if autoplay or shuffle then loop=loop-1 if loop==0 then nextmusa() loop=loops tt=-1 end end end t=t+1 tt=tt+1 end tt=0 dist=0 function titlescr() cls(4) if dist==0 then procmusic5() end local msg={'-=* A procedurally generated','music disk by Leonard Somero *=-',string.format('-=* %d tunes! *=-',maxmusa)} local k=0 for j,lin in ipairs(msg) do local tw=print(lin,0,-6,0,false,1,true) local tx=0 for i=1,#lin do local offy=0 if j==1 then offy=-dist end if j>1 then offy= dist end local col=3 if j==3 then col=2 end if (k*0.4+tt*0.2)%16<4 then col=12 end tx=tx+print(string.sub(lin,i,i),240/2-tw/2+tx,136/2+(j-1)*8+math.sin(k*0.5+tt*0.3)*2+offy,col,false,1,true) k=k+1 end end rect(0+dist*3,136-12-12,240,12,2) if tt%60<30 then local msg='Any key to start.' local tw=print(msg,0,-12,0,false,2,false) print(msg,240/2-tw/2+dist*3,136-12-12,4,false,2,false) end for i=0,11-1 do pal(9,1) spr(256+i,11+i*10*2+1-dist*3,10+1,0,2,0,0,1,2) pal(9,(tt*0.2+i)%16) spr(256+i,11+i*10*2-dist*3,10,0,2,0,0,1,2) pal() end if dist>0 then dist=dist+1 end for i=1,65 do if dist==0 and tt>0 and (keyp(i) or (i-1<=5 and btnp(i-1))) then sfx(-1,0,0,0); sfx(-1,0,0,1); sfx(8,12*5,40,0); dist=1 break end end if dist>=90 then TIC=options t=-1 dist=0 end tt=tt+1 t=t+1 end visual='graph' function options() cls(4) if not nosound then procmusic4() end if dist>0 then dist=dist+1 end if btnp(0) and dist==0 then nosound=true; sfx(8,12*5,40,0); op_p=0; dist=1; end if btnp(1) and dist==0 then --[[nyi=t;]] sfx(13,12*5+2,12,3); if visual=='code' then visual='graph' else visual='code' end end if btnp(2) and dist==0 then sfx(13,12*5+2,12,3); op_p=2; dist=1; end if btnp(3) and dist==0 then sfx(13,12*5+2,12,3); op_p=3; dist=1; end local d=dist*2 if op_p==0 then d=0 end spr(8,240/2-4,136/2-4-8-(tt*0.2)%3-d,0) local msg='Manual play' local tw=print(msg,0,-6) print(msg,240/2-tw/2,136/2-4-8-8-2-d,8) local d=dist*2 if op_p==2 then d=0 end local msg='Autoplay' local tw=print(msg,0,-6) print(msg,240/2-4-8-d-tw-5,136/2-8+1,12) spr(8,240/2-4-8-(tt*0.2)%3-d,136/2-8,0,1,0,3) local d=dist*2 if op_p==3 then d=0 end local msg='Shuffle' local tw=print(msg,0,-6) print(msg,240/2+4+1+d+8+5,136/2-8+1,6) spr(8,240/2+4+1+(tt*0.2)%3+d,136/2-8,0,1,0,1) local d=dist*2 if op_p==1 then d=0 end local msg=string.format('Visuals: %s',visual) --[[if nyi then msg='Other visuals not implemented yet.' if t-nyi>=60 then nyi=nil end end]] local tw=print(msg,0,-6) print(msg,240/2-tw/2,136/2-4+1+8+5+d,3) spr(8,240/2-4,136/2-4+1+(tt*0.2)%3+d,0,1,0,2) if dist>=60 then if op_p==0 then t=-1; TIC=global_update; musa=1; tt=-1 end if op_p==2 or op_p==3 then TIC=options_modal end dist=0 end tt=tt+1 t=t+1 end loops=2 function options_modal() cls(4) if dist==0 then procmusic4() end if dist>0 then dist=dist+1 end if btnp(2) and dist==0 and loops>1 then sfx(13,12*5+2,12,3); loops=loops-1 end if btnp(3) and dist==0 then sfx(13,12*5+2,12,3); loops=loops+1 end if btnp(4) then dist=1; sfx(8,12*5,40,0) end if op_p==2 then local d=dist*2 spr(8,240/2-4-8-(tt*0.2)%3-d,136/2-8,0,1,0,3) local msg='Autoplay' local tw=print(msg,0,-6) print(msg,240/2-4-8-tw-5-d,136/2-8+1,12) end if op_p==3 then local d=dist*2 spr(8,240/2+4+1+(tt*0.2)%3+d,136/2-8,0,1,0,1) local msg='Shuffle' local tw=print(msg,0,-6) print(msg,240/2+4+1+8+5+d,136/2-8+1,6) end local msg=string.format('Play each song <%d> times',loops) if tt%24<16 then msg=string.format('Play each song %d> times',loops) end if tt%24<8 then msg=string.format('Play each song <%d times',loops) end local d=dist*2 local tw=print(msg,0,-6) print(msg,240/2-tw/2,136/2+8+d,1) local totlen=0 for i,l in ipairs(lengths) do totlen=totlen+l*loops end local msg=string.format('Music disk lasts for %d min %d s',math.floor(totlen/60/60),math.floor(totlen/60)%60) if totlen>60*60*60 then msg=string.format('Music disk lasts for %d hours %d min %d s',math.floor(totlen/60/60/60),math.floor(totlen/60/60)%60,math.floor(totlen/60)%60) end local tw=print(msg,0,-6) print(msg,240/2-tw/2,136/2+8*3+d,3) if dist>=60 then if op_p==2 then autoplay=true; musa=1 end if op_p==3 then shuffle=true local musa_ids={} shuffle_ids={} for i=1,20 do table.insert(musa_ids,i) end repeat local r=math.random(1,#musa_ids) table.insert(shuffle_ids,musa_ids[r]) table.remove(musa_ids,r) until #musa_ids==0 for i=1,20 do trace(shuffle_ids[i]) end shuffle_ids.i=1 musa=shuffle_ids[shuffle_ids.i] end loop=loops TIC=global_update dist=0 t=-1 tt=-1 end tt=tt+1 t=t+1 end function prevmusa() if not shuffle then musa=musa-1 if musa<1 then musa=maxmusa end else shuffle_ids.i=shuffle_ids.i-1 if shuffle_ids.i<1 then shuffle_ids.i=1 end musa=shuffle_ids[shuffle_ids.i] end end function nextmusa() if not shuffle then musa=musa+1 if musa>maxmusa then musa=1 if autoplay then for c=0,3 do sfx(-1,0,0,c) end; TIC=titlescr; t=-1; autoplay=false end end else shuffle_ids.i=shuffle_ids.i+1 if shuffle_ids.i>maxmusa then for c=0,3 do sfx(-1,0,0,c) end; TIC=titlescr; t=-1; shuffle=false else musa=shuffle_ids[shuffle_ids.i] end end end -- palette swapping by BORB function pal(c0,c1) if(c0==nil and c1==nil)then for i=0,15 do poke4(0x3FF0*2+i,i) end else poke4(0x3FF0*2+c0,c1) end end --TIC=global_update TIC=titlescr