O pp @`  @`! #@%`)+-/1 3@57;?/C@E`GKMOQ S@U`WY[]_a c@e`gkmoq s@u`wy{} @` @ ` @ ` @ ` @ ` ǀ ɠ @ ` ׀ ٠  @` @`!a   !Aa!!#%a')+-/1!3A5a79;=?A!CAEaGIKMOQ!SAUaWY[]_a!cAeagikmoq!sAuawy{}!Aa!Aa@`  @`! #@%`)+-/1 3@57;?/C@E`GKMOQ S@U`WY[]_a c@e`gkmoq s@u`wy{} @` @ ` @ ` @ ` @ ` ǀ ɠ @ ` ׀ ٠  @` @`!a   !Aa!!#%a')+-/1!3A5a79;=?A!CAEaGIKMOQ!SAUaWY[]_a!cAeagikmoq!sAuawy{}!Aa!Aa EISPLA2 IMG | qFONT2 IMG | GAMEAREAIMG '<HELPPLATIMG 6 HIGHSCORES /9MENUPLATIMG D : OBENPLATIMG = REMOVEANIMG c@XTILES IMG ATILES NEO bF I}MATCHIT MUS :5i0MATCH_ITS wnXUBUDGIE IMG w}MATCH_ITPRG w$ E˼ܼ̻̼̼ܼ˻˼˼ܻܼ˻̼˼̼˻pܻ̻ܻ˼ܻܻ̻˻̼˼ܻ˼˻̼̼˻̻̼̻˼˻ܼ؀ ܼ˻ܻܻܻ˻̻˻̻̼˻ܻ˻̼̻˻˼˼˼ܻ̻ܻ˼͘ ܼ˻ܻܻܻ˻̻˻˻̼˻ܻ˻̼̻˼˼˼˼ܻ˻ܻ˼͈p wgwxwvfxwfgfwxfxvfgwfvfvfwwwwwggfwxvfvwfwvfggwgwfwvgvgwvgvvgfgvfgfxvvwvgvxxwxwvw` gfwwxvgggfvgfvvvwwvgwgffgvvgwgwfvwwggvfvvfwfwggfgfvfwggvfwwwgfwvgvvfvvgwfvfvwfwwwvl݈p ffwxwf xwf gvffgvwxwvffgxwwf+ggxxv݈ w˼xܺwvfxx̻xvgfwfvgfgwffvggffgvgwgvx˪ܺ˺݈p f˪ܻwx˪˩wvgxvfwwxfvgwfgwxxx˻˼ޘ v˺˺ܼ˻˪xwwvwxwfwffgxx̺˼ܼܼUUU ˶g˺˺w̻̻ܺxxvvgxwvfgvwx˫UUU fܼܺ˺x˻ܼܻwwwwgvgfwx˺̺UUU fx˺ܻ˫ww˪ܺwgxxgwfgwݺ˩UUU vxܼ˺˻˺xvwܼ˩xwgxwwx˫˼ܺUUU ww˺˼ܺwfxxxw˼˻wfxwgwg̻˫ܺUUU vgܺ˩fxxw˼˪xxvggvffx˫ܻUUU ffw̺˪xvgxwxܺxwxwvfgfww̺̼̼UUU vvx̻ܻxvxwxwx˻ܼ˩wgwwvvgx˺̺UUU f˼˻̺xxg˪˼˺wwgg˻UUU fxx̺˩gxxܺ˻ܻܺvvx˺UUU ˶fwx˪˩wvxxxܻܺxxvfx˫UUU fܻܻxvwxw̺˼̻wwwww˺UUU fܼܼ̺x˼˩wfg˪ܻ˻wffxx̼˻UUU fx˼˫wg˩vxwܼ̻ffvx˼UUU vxx̻̺wvgx̻˺˺w˼ܼ˺fwgwxܼUUU vgxfvwܻܼܻ˺̻˺x˫˩wfxww˩ܼUUU vgww̺̼̺ܺ˩wܼ˺vxx˩̺̼UUU fgx̼˼˻˩xwwxܻ˼˻vxgw̺˼˼UUU vw̺xx˫˺wxwgܼUUU fܻxwx̺̺ܺwwfx̼˫UUU fxw̺̻̺vxw̺ܺ˫vxvx̺ܻ˫UUU fxwxܻ˩wx̻˩w˺˼˫˻UUU vgg̻ܻܺxwx̼˪̺xܻ˪̼ܻܻ˺˪UUU vggx̻˼˺̺vxܼ˻ܻxxܻ̻˻̻̼ܻܺUUU fvxwx̼˼˻vgxxܺ˩x̻˻˪̻˺UUU fgwx˼̻vvg˺̻̻̼ܺ˫˼˫˩UUU fxwwܼ̻̻˼˻gfx˺ܺ˺w˫ܻUUU vwxx˼ܼ˪xvg̻˪˻wx̼˪̺UUU fg˼˺wxvx˫̺˪x̻ܺ˩퉅UUU fx̼̻wfxxx˺xܻ˼˻˩˫݈UUU v˻˼˩vgxx˩wܼܺ˺wuUUU f˼˪fxwwܼ˩xvx˪̻veUUU w̺̼˻vg˻ܺw˺̻˺˩̻feUUU LJ̺̻̻ܻ˼˺vxܺܺxw˫˺wfuUUU w˫ܻ˺̻x˪˺xwxgܼ˩wweUUU Ljܼ˪˫˫̻ܼ˪wwvxܼ̺wwx̻fuUUU ؈˩˪̻̺w˪˼ܻx̻x˫˩xfwgxfeUUU ؘ̻̺˺˻ܻܺwx̻ܼ˫˪̺xxvwfwxweUUUؙ̼ܻ˩˫˪xwxwܼ˫ܼw˻gxvgxwwvvgfeUUU̺˼˪vgw˫˫̺x̼˼˪vxxvxwfwwgfeUUU˻˺˫ܺwxx˪ܼ̺˻̻ܻܺwgwvxvxvgxvuUUU؉˻˩˫˪x̼ܺ˺̻˺˺̻̻wxvfxvgfwfxweUUU˻ܺ˺ܼܺ˻wܼ̻̼ܺ˪̺̻xvgwfwgfvwwuUUU˩˺˼̺x˼̺̼˻xx̺˼˻̼˪wwfvwgvwfx͇UUUܺ˼̻˩x˻̻̻fwvfgvfg݈uUUU̼ܺ˼ܺx˫˫̻̻gvwwgw݈UUU˺ܺ˺x˫̻̺˼̼̺xvxxg݈UUU˼˪̺ܺ˺w˼˩xgxxUUU̼̻̻˪˪xwܻ̺wx˻ܻ˻˩wwUUU˻̼̺xx˼˻˺˫̼̻̺wwwUUU˻˺xwwwwx˼ܼ˻˼ܼ˻˺x݈UUU˩xvwwwwwfxw̺̻̻ܺxUUUܼܺwxwwwwvgwwx˺ܻ̻˪˻UUU̼̻˩wwxwwܼ˻˩˼˩˩UUU̼˩vxvwxwx˫˼ܼܻ˫˺˼UUUܺgfgw˫ܼ̺ܺ˼ܼ˪˫˫̼UUUܺwwwfxܻ˪˪˼ܼ˫ܻ˫UUU˫˩wxvfxx̺˫˺˺˪˻˻ܺUUUܼܻ˩xgwx̻ܻ˻̻˩̻˼˪UUU ˪˺xw̺̺˺˩̺̼ܼ̼˩UUUܼܼ̼˫ܺxw˫ܻܻ˪˻˺˼ܼ˺UUU ̼˻˼̻ܻxܻ˻˪ܻ˺˪̼ܺ˪UUUؙ˻̻ܼ˪wxwܼ˺̺˪ܻ˪ܼܺﺥUUU ̺˫̻ܼ˪̻̻ܻ˫ܻ̺UUU ؇ܻܼ˼˻˼ܼ̻˫̻ܼ˻˺UUU v˼˼̼˺̺wx˫˻˻̻˼˫UUU g˫̼ܻ˫ܼ˩˼˻˻xܼ˻̻̼̼ܼ˫ܼUUU x˪ܻ̺˼˼˩̺vw˼˼ܼ˫ܻUUU ؇̻ܺ˩˻˫ܼ˩wfgxܼܼ̻̻˼˼UUU vܼ̻̺ܺ˪ܻ˺xvgx˼ܻ̻˻˼UUU w˼˪˺ܻ̺xxxxܻ˼̼˻ܼܼ̻̻UUU ؈ܺ˫˩˼˺˪˩x̺w˫˼ܻUUU x̺˼˻˩˺ܺܺwgww˻̻ܼ̻ܻܼUUU w̻˼˪̺ݚ̺ܻܺvxx̺wwxܻ̻˼ܻ˼˻˼݈UUU wܺ˩˪x˩˩˪gxvx̼ܼܻܼ˼ܼ˼툅UUU g˺̺x˻˩̺̻vvxgx̼ܼܻ̼̻̼UUU f˩xw˩˪̺fgx˻̻ܻ̻˻˼ܼܻUUU vܺ˻˻̺˪vgx˻˼̻˼ܼ̻UUU ˶f̺ܺ˩vx˺˼̼ܻܻ˻ܺUUU f˪̺w˺̻˼˼ܻܻ̻˼˼UUU v˪wxxxxx̺̻ܼ̻˼˼˼ܼܼUUU v̻gwwxxx˺̻˼˼̼˼ܼ̼UUU vwx̺ffxvgxxxg̻˪ܼܺ˼̼̻˻˼UUU vxgxggvgxxwx˪˩̼˺˫ܼܼ˻̼˼̼˺UUU fgvxgvxxfxwxxw˫̺ܼܼܻܺ˻ܻ̻˼ܻ˻UUU ˶fxxxwfvwvxwgwfxxxw̺˼˺˼˼ܻܻ̼ܻUUU vffvgggvvfgxxx˺ܺ˼ܼܼ˼̺݈uUUU vvfggfwggvxgx˪̻ܺ˻˼˼˻ܻܼ̻˼툅UUU vxxxvgvwwgwgwvg̻̼˫̼ܼ˼˻̻̼˼ܻ˻UUU vwwwxxvwxvwfwfggxx˩˩ܻ˻̻˻˼ܼ̼̼˼˼̻UUU vxwxxxxvxxwgvgxvvgxxw˪̺̼̻˻ܼ̻̻̼˼˻ܻUUU ˶fxwxxxxgxvfxvwvwxwwgx˺˼˻ܼܻܻ˼ܼ̼̼˼ܼUUU vxxwvgwwgvvxxwwgx̼ܺܺ˻ܼܼ̻ܼܼUUU ˶fxxxxwfyfvggw˪̼ܼ˻̼̼̼̼˻UUU vxwvwvxw̺̻˼˼ܻ̼ܼ˼ܻ݈uUUU vwx˪vvgܻ̻˺̻ܼ̻ܻܼ˼̻˼ܻ̼ܼܺweUUU v˩w̻gw˼ܻ̼̻̻ܼ˻˼ܻ˼˼ܻ˩weUUU v˺wg˼˻˻ܻ̻˼˼ܼ̻ܻ˼˪wuUUU v˫ܺfg˩˫˼˼˼˫̻˪˻˻̻ܼ̻̼˼ܻ݇UUU g˪˪˩gxܺ˼ܼܼܻܼܻ˼˻̻˻̼̼˫˩݈uUUU w˪˺x˪ܻܼ˫ܻ̼ܻ˼ܼ̻˺wuUUU w˼˻˪˪˫˪ܻ̼̼ܼ̼̼ܺ݇uUUU LJ˪̻˪˪˫̺˫˼˩ܻ˻˼̻ܻ˼˼݈UUU ؈˺̼˫˼ܺ˫˺˪˪ܼ˺˻̼̻̻̼̻UUUؙ˼ܼܼܼܻ˼˪ܺ˻ܻ̼ܻ̻ܻ˼ܼ̻˻݈UUUܼܻܻ̼ܼ˪˻˼ܼܻ˼ܼ̼ܻ˻ܻUUUܼ˼ܼܻܻ˼̼ܼ˼˼˼̼˻uUUU˼˼̻˻̼̼ܼ̻ܼܻ˻݇eUUUܼ̼̺ܻܼ̻˼˼˼wuUUUܼ˼̻̻̺˻̼݈UUUܼܼ˼̼̻˼ܻ̻˼UUUܼܺ˪˺ܼܻ˼UUUܼܼ̻̼̼ܼ̼ܺܺUUU˼ܼ˪̼ܼܻ̻ܼ̻ﻥUUU̻˻ܼ˼˻̻̼˼˼UUU̺˻̼˼˩ܼ˻ܻܻܻܻUUU ٙ˺ܻ̺̻̼˼˼˼˼ܼ̼UUUى̺˻w̼̻ܻ̻˻̼ܻܼUUU˺˪x̻ܻ˻˼ܼUUU˩̼˩wܻ̼˻UUU̼˩˪̻ܺvxܻ̼UUU̻ܼܼ˺wvx˺̼ܻ˻UUU˻˼̺̻˺xvgxxx˫˻˫݇uUUU̼˼̺ܼܻܺfwxxwxܻ˻ܻ툅UUU˪ܼ˪˻ܼ˪vvwwwܻ̼ܻUUU˫̻˩̻̻ܻ˪wwwfg̻̼ܻ̻UUU˺˻ܻܼwwgwgwܻ̼˼˼UUU ̺̻vwx˫˪vvwx˫˻̻ܼUUU x˩̺ggx˪vwxܻ˼ܻܼUUUwܻܺ˩vfxܺwܼܻ˼ܻUUU w̺˺˩wxvfxܺvx̼UUU v˩wgfg˪w˪˼ܼUUU wܺvgfw̻x̼˼̼ܼܼUUU LJ˪wwg˺̻̻歹UUU ؈˩ܺfx˻˻ܻ˼˻UUU و˺˻wx̻̺̻˼ܼ˪̼̼˫UUU x̼˪x˪ܻ˼˺̼ܻܻ˪݈UUU wxܻ˼̺˩ܼܻ˫̺̺˺̼˼ܻUUU wxx̼ܼ˻˩ܼ˫̼˫ܺ˻ܼܻܺ˼̺UUU vwg˻ܼܺ˻˫ܻ̼ܼܻ̼˩UUU fwfgw˫˩˼ܼ˫ܼ˪ܼ̺˼ܺUUU fwfxܼ̻˼ܼ˼ܼܼ˻ܻ̻ܻܼUUU wgܼ˪ܻܼ̻̻˼̼˼˫UUU و˩w˻ܼܼ̻˼ܼܺܺUUU w˻˼ܼܼ˻̺ܻܼUUU LJ˫̼ܼ˫ܼ˼ܼUUU ؈˺˫ܼ̻˼ܼ˺UUU٘˺̼˼ܻܻUUU ܼܺ˼̺̼˺UUUܺ˼ܼܼ˼˼˼ܻܼܻUUU̻ܻ̼ܺܺ˻̻ܼ̻˫ܻUUU˪˼̼̻˼˼ܻ˫̻ܺUUU˫˼ܼ̻ܻ˫̺ܺ˼ܻ˻݈UUU ܼܻ̻ܻܻ̺˪ܻܼܼܺ˫˪݇UUU ܼܼܼ̼ٚ˻̼̺̺˫˩̼ܻ˫˫̻wuUUU ڙܻ̻ܼܼ̻ܻܻ˩ܺܺwUUU˫˼˪˫˫ܻܻ̺˺˼ܺ˪˺˩͈UUU ܼ݉UUU ܼ̻UUU ̼UUU ˼UUU ݇xwxvggwwxwUUU wxxxxwgvgfvxxwwxgUUU xwxwgxgfxxgfvfxxfxvxwgfxuUUU U U U U U U UP40B0PP!DEbD2!"#2A20$DUDV #1010A0`!0A00!BWA!4#W2D!DD'EUc"!"pA"0p1'p!32A'ps3A#pDEf"'pTEUegp20#p1fpVws#ec""!DQ7w2#$7ws0DDA#p!!A""0A7202A"" Ws""'UVgs2"#p""!7p7s""wws!'pVWp3weVVgw#7pW!Wpgp20Wwws"0$""31Vww"0w"3!!#7w3p!7E0Wwwq"7ew"'Wwws3+Ww37eegs27p7w3"#p1"7wr""wpr'Ug#7pegwb 5gWWFw7W2#Awws"0Vp27p#wp1"#uwpw%WW#wFwp37W"0W7eVgs7w2#p"7"p7p!'Vw7wVweW"26WV"dWVp#V"#pp2#Up3w20wp#7Fppp4cW37pUpwF3Ffw27p7p#w#e7UDV2'Eq'wfpeg20wVfp2 egefp"pEp"7p$#pF`7p" 7tWp1'pVUV7wdVppFp#pFA V!#p!'wfUUUDEVp"7eUWp"7F37Vp1Vg7pVpVp"VgUVppEp2wA'#pUg'ww2!0wEg1"A'pgwvefefpUpB#pVw"'fw27p'0p#weeUep2'eUg7Vs! fppEg#'pUpfp2UgUfp4pE`wpA'#pEV'w2#tUg!DA#DwWwV`UVpVp3pVp7BpVp7""0DV#pfVVp2#UVgwVp2!0VppFg#'VpeV`3&gVVp!#pEWwp'e@#pEfw2TF`"6peVgT"7wEpffUfpVpep#7pV`wpfp3#Ugp#p'fp#vVeegpfp"fpA"pUg7Upefg&gff`A#pEfp!'TV'pUVpeUw3fpUefepVwwE`eV`fpfV`UWpdV`1B#weVg#pVp2!#Vg'p'p7dVpVV#pWp""gsA"#pVg7VpVVgffVe`B#pEVp2#fVc7Uf`!VpeVpeVf`VpefpEgefeTAefpeUEDUgeff"#7pdeg'pgp3""#eg7'eUDUgpeef3pg""3c"""7pfgwfgEfgeefpefU7pUfp"0efwVfg2e`eUgpUfeUgpUVpUfVVfVVfgpfVUVVwUVf37wUVc"#7g3"7vw77UVVVfwfVf7pg23wp1&7ww37VfpVgFVgUVgpff"3wEVf`2#&VpUff2!VfUfwVwUepEefpUfgwfffgpEef7weff"#37gs3wp77wwwfgpvffwg3wpvw7ffppfgUefUgwvfcwpUwww3"3vfVwwp3"vefwpefwpwpwwpwwwwwwww wppwwwpppwwppwwwwpwwwppwwwpwpwpwwwwpwwpe`UDA UU`!04#!1#2010DA#"`D02D#DA"0"0! !0 !AUg1VpAwF#pfw"7p"wp2"7$"A#p$#ec""wDw20"#6wp"6g""#wDw!0"33fw1#wf`"3! $"# DApUVV7pUfp'pWp3pU`#w2 3wA#"3fgpA#0VVw2"02p7p'"7vgp!7dw#w37p$7p2##7wvgp"7pV"32#0Dwq#0 Awefp"7fffp!'f#pV7p"wpB#wvWw4"3wEfp"'27p4w'7wVw#vEp'pwA#wwp7wVwwVp'ws3cA#p#p#7 !#pUVp7Vgp1'Vp#pU`w3 'pwpew$#7pdVgp2#2"7A3pA7wgp7uVp7pA#vefwgp2fp76Vp"#ps!"3w 1#pEep7fg'euP#pa'p2"w'pVpA7wdfw"3p"#w3pwpVfV`#7dVp#3"#6UVUPpVw!"gpwefp37p!#3wp #pEVp!7eVw'VvU'pg7pwFgpA#wUVp"3pw3#pwr7pwefA#wUVpwws"06gwffpfpUc"#3pVVpw#7wp pEep'egpVpeR'&fgefw7pUfp#p1#p#wV`3vEf"6f#7wVpeVpVwws"0"03Efp#wq"0 pEVp'VwfpfR7A7U`gVgpe#wUVpB#p'p7pPeg""6EV3pef`#7fpUfpegp1#3#36Ffp! #0#w "pefp'Vp"7pb7$weUgEfgUp7pef`A#pB7A#wPFVgwwuUfwpVUVg"7eVpVV`VV#p37uUgpD2"3wp! 10eVp'gp272w7pVPVVVwTVpwVg47p1B77peGf`TfgdVfpgpUfw"3Ugpeefee`13pwdVgA#pwwpD'%fp7Uw'#pA#weffpeefUDUfp!ef7$7A#eDUgVfUFfwUefpfeVgp23!VweVgwpVe"7pE`Ufw"#pA#p#&VpWp'#pA#pfVpEV`UVffVVfp0fVf!#w"36UVVgfeefgpEVgpeUfw32#gpUwwfc""3wVgeVgp37p!3"#p2""7fpw73p#pffpUefUefgp#wefc7p1#30#eeffwffgwegwvVwps33wWpc33wpefgww7p37pwwwpppwpwpwwwpwpwwwpwwwwpwwpwwpwww wwDA A 20"'p"w"p ec'"3w#7q#7p VVw2"0~#7p3w3w Efp"'~7w#wq#wp dVgp2#0!r'wwpwp dfw"3pAA#prwppUVp"3p!!"#7w3pUfp#p1"3wwpA UVpB#p3wpp s"wef`A#pwp#7pVg47pp3wef7#wpfV`!#wwpegc7pp wwwwp '##' !%+* + "*& %) &" ) ($ ( )! $!!*xfK1+Pwz)r,eFoU[L!XsQ;?&\8(`-MuR *=E{bdgC^|ny2i4j.09amt@Tp_I'SB]cVhvAWND%qO"  $$(&(  "!* '%"& )'+! )!#+  % ** )# !7m;pfy&FBhcg8{O/C._K4(N=T\j)b%2I-qS uz,3"?esvPRnt|X9L`x!EiM*UD'+]woraWQA>[d:0^/InBwf.AD4L)K:d|;F[JW"?h`uvX(@O2&Erx=b\9,c70g3 " &' &!"+) $ !+#*))*!$%' * # ! % ( ( EoFIz:j _2mdqh0N{b,*x;OnJ+iM4.'=K` $#$  !)!&")+!&"' )!  ( (' %**#  %* +`dc49oNTV!g:|%WOEh" te_-Ln<+.P@w{[f8/'=rzav02pxqsmJRD(*A1biX,?BUQS)F\^;u3j7&K]MI>yC + # +)  '#!!$  ( *&"!'(%*!)&$ * ) "%  rbqUDp&(9yh .KE/!`0mP-*CA8wRBSg;>OcveMsuji|14Jt,7^xTI]N+Q@%\WF"ofn{a=':[LB]e&qX`R!!% % "# "# ' ! )*'! +  $+ &$ (&*) )(*eT(u[7v-1cyL%0AN"fW=JVS3a|*BPD) $)%$"#)  ' *& ( ('"!! %&  +!+ # * ! *n=A-v&_xhUFm{c@+"7%9\Qw(N,i'V!DW:MJLozdf/C2jE4IRe^O[bSB;s8t.*3K0*!' '!! ) !+# )* # +)* % (% & &"$(" $ 8>.ie%(/EOx0y\o?QWg93_b2S1[n)N:=Rj`|LwI]fU "Th+-q{&!svMPb:A43_' %%$#**$ (+ (& ) "+ *! !"! )#& '  )'!SgO\u^X:/j'Qp>Jdwq@xh1a[J"%*!() #+!$% *'&$+" '  )&   *( # !  )! )_JU9gFSmwx0`Tbf{L+d|qE;W=,vhD4u/B*c?23"paNy:i\AszQeKMRV'X.1! +'((! *&   !%%*+))! $#&)* "$#'"     01>,mncu{zho|4xs"BXj%p3WriD2T+=CF.-!gf[*)O qQ]IyEUavbwJK(/7\d_ML^:9N'`?@?V&-ATtx!RehF8_L=rgdycS\N'1IV)?W+B^, !() !'" '%( #*$ $# %* " &)  ! *! +&+)ByT4d3\D-XP|cI0>Apf[V!M^]r (N7=:g+1;@[^OQAUj]hqVocL=fWpu%\&)bdst{^RE8!%LrdhqQm'&ynx"BV)1]:pcPg\9v{JutzO?[7oAUD2WSj.e,0`CXK+ !&)!$!#" % &)% )  "('*   # *+*+$('!rtBzAD;&1]{9EReKyMx*O(d%q<-3QvsPFThmo8n4?/pj' CWLa=,c|!gV7\^>I_[+@fJbw2`uX"Ni:U)S.0   !"  ! !  %'("!  &*$)'*& $()#%)*+#+"|upr!qoMLVDE24`a+b_m]vj.(XFBC;:%0-*3TdeSU7W@&tRwx/',A ?zhOc8i\J=Qf>PnsNy{g[9K)I<^1'*( ( #* )!! ! $* )'  )! "+ "% & $%+ &#V7TJ<^Q)"8hW=?u0_O]+`d{!q4segzKIX&9at(v|c/m.2%*nyDj@C,brwSipfLN3F 'x:M;R>E\PoBA[-1U+%     )%* "'  (!!&"# )*! *+)( # $!'&$ruw^*gDnsq|J7>TE9MNdfz1Ky=t_BQ/R4[]W!X%':jF`c<(") mvox,AOhaP-@e&VU3p2b.IS8\;?LC+{0i)$ (+*& +%!*  $%# "  !'&! (!*")#'  )z'3nC@T\:0^uIMNc>i8o.%/UpPamyh")t4-veF(V2_xW|?d1RBJ9;=s!<+ ]qrw[SO{KQg7E*,LA&DjbX`f' *)  "$" * +') ! )& %#! $%# &(!+*  ! (`=sA0F-BCo?w "_T[!\PKb/e{I'.h2jm;&)LqgVQ@fztcN*9(1puvyEXax%8Mr+,i>d3|^DW4:U7JOR]Sn< * * !'$#!!  *%)'""& &+ )) #  (%$! +(%I]\hzo{4XF"p^,[tbOa'EjgfUC9|yu) VeiS7P`_qc&TR/KNvnJQ?@D*=;xdML2Bw:1-.08+s!$) ' * !  "*+&#$) (&#*  !+'! )% "%  (LAc,P|rgdn2O?@qiI<`{FBhS3]:se(tz[&0X1V-_4pyM=7KxUj"CW)+;b^a8'f muvDo*9/NQwE\!>R%TJ. * )!! # *+ %!) )$# *($'&" &+"!%   ( ' d;F|<`iK(JUm9\c{XTy>R.1hI,Wt-nSj"]=qe* V^vMB3[8osxz%2ENapwQ/:ObLr+gfC)@?D'!&u_0PA74!+* '" &#( %$*    #)&!$ '  %*)"( +!)! 3{`='?Qm%C-R^*O"V&qwfa/tJoc]:2Fvxr|AL(UE)<79PszyX>1SB Wj!;N[n@TK_0hpb8i+gM4,d\uI.eD"+ &    !#  $%' #  *! +'!% ( "$!))&)*(*|MD]*dK+bRC) $ "   #)!(    !"* +!)+  #* $' %%*'&(!&m9z">W_psv{au'y [tJQO?*iTVowM<8@,h/X\U3CF&+A1)];NjnqdxK^-R`|c0(LSf%IP2!.gre:4=DbE7B) '+&  ( &"#  !%% *  #'$)*$"( !!*+!)m>b/Q1aX@B-!U*f[vI^qotd9nLxp`uyzXm%UD=PrvSBJ]2E9CAjbi^OT3\q/h$ #) *&(  ' +)" *&! )  !$'* ! !#" (%+%qaz|K(b2+y< Jc;{X"?h,A0o^:MC3sd9*&`RSV.!nxeT7]N>pv%mIjFuw/1Pg=QDW8L\rfE'4)-_B[UOit@)% )$&#"    (&" ! #* *! * + '!$+!)'%  (ep7"n^z4mKATgQR;V]xNdaiDq=y|ICW&0\:2Fr?(vP.*9ocsuM`bjw{ 3+>[tf,/J!OX)BEL_-1SUSVfN+K0wC+  $)!'% ! +(%! #'  &* &!#"* * $)( )" [TK+9i(haV3odJ"Lfte)>N {r=!<pyMFBP0nuW-7&cR\^?.sxwXU1vjCEI*'O4|@SA2mz8;bQ]/q`_D%g:,' &' *)!)%*!" #%) $&#!* ( + $ + "!(  at&,[!pc?2`]4'sdBSgi<@FMfyDhE8mKovJjw|^)uxOR* 0V\z9;%IC"_{-+>.A1L(eWNQqb3X7r:UnP=/T*)' *) !" &#$)($*!  +!" '#+  %% & ?!   (8u7;PC)"Mw@/!J^RTsc2pz-[tvxn_h3myK(iEq|',dSOb&f reQ+aI.N1:4UW\0L )*" '#+  ( *"!$ *$ #& !'%!+ %! )( &)  `vI8)WLFCV9'MJD[TNs&Sd0#!*$ #& ')' "!"! !)( %+&   % )$  (+ **yOw/zMTV>{]U7-bgLc9*@hau)=X4m\`jqR W^v.I(2Eo|J'AdSBDnt%[0C3,pr"KfQx:<8;!i_N&P+1sF?e! '&+% !* ' "!!**# ")$# &+($)(  ) % (auAmvnt?8pC=d{*!%og: -R;,Isx3F^>.B`h0V\_]9eTLNW4qyJ)[bQ"z|rUS2@/KJC1j)/df! !#  " *&!* ( "+& (%+* $')#)  ' $%  !) Nw.")i;{b|Bj<@8:>AF=[,2Qg tTL_KR^yp`%rzC!afcSmx'uen]h3qd*sv7\VE/OIW9X(1JU-4oM&+?0PD !  "  ! +)+& %#"! & )! *$**'%($() '#  g=FDK-uJowPyO*,`1@MAr{(;3Ej_|a SfsxqV%:dhT['".0tzLp\v?RIB!&987nbQ]4>2iX^c+CNW)/eUm<' *   ))& $'(! +) *$%%  +!(! "&#" * !#sW{4(@7=:-KOVSiJF;h8,>e]p\%Q1Mv'DTN"[tugqzryBUmX20!^R`P* adofn|.ACE+j/b3&<?9_)wLcIx# # !"$**! " &$ !)% !)(&+'* '( % +  )   J?D{g;SEm`rbqh[]d-f\:sx"9(&>P4I8a@*,1LFow=!cjM<+)2uy.W/Unvp| '7eBQ3^V_NKtTiAXR0Cz%O(&) (# !'    +* )*)& *'!% !!  +%  "#$$"[nC2W"y\g<ma/wJo:3S!q`]7_tFVX+b%9f& 'LO>@Bi{j,cR^s-Qdx*1(Nr|uvzPhIM)AE=D;eKp0?48.UT%+ %"'"+*! '!  *$( !( )$!)    )#&*& #[j49aSf=WIKVci1hTLNMe^.o!qg\A*"s@%;?bwp`nd8BC3m{+-(/rzP,&u|DXvy2QF_U)>'tx E:t*s%`T0hcaz-eV8&SgCUf9_Qby   !( %)! # $$"#+ !('* *'& )*!"  +%)  &FX ps['PQ)J\9ji0!-]mIaD2W|"*@.8^4C;=+oV{UNM(_,TRnEq`vrfxdb/#$$)  ( )*)'  #( +' * &%  !+!% *!  !""&^hbQu SpO?!.Xr-E(/'yIBUznw\o%qNJ=P"M,+&7]8L[{@eV4mstx:TgR|D3;*02FjaC19ivW`cK_df)<>A) %)  $ #!&! !'$ (+ '! **%&# ( )+*""   zv"!xhruDC'VW|sjw(X`-?032f&/cTyg 1B{94U.KFNe8EPbSRt7,: &'%$+$& !#)+% "!* )  !#)* '"*  (  ! (:>r{`SznpOFq.KvItAx!C /h\N+[y%(cw]a1Wm8,BP-sjU2@e3X);*do|^4fE&9L_?RJQuDTV=gM"0i'b7<"(!#$*) !)&'"    )#+ *$!  %&'+ %(!* @A[7'"WiLMNI];Ozg+/sxhU:e3?=*raB,S 2!DR%boc0f1p).t(jFCQX^VuT-q '# !%!"  !*' *! &+ *+)() ($ # "  %)$&01|"fejpzy%[;<2 4ngVU`rq^&mDbP\s3Cc>MN,-=v*uh]I)d_oB!7'i/aXx(tE{9SWQwK?FOT8RLJ:A+.@)*  !+" & '  #& *(%*!+ ! (%' !"$#) $ )70[u_yJ EQT'/2-.3i!m&r=ovdS1De4aPt{OUX"%I\;*,^V8jKpxc+RA:BNC`g"" )*)  & '$$  # &! %%+!#' *!((+!)  *vzCB qu"|<;,-Tf>=0Aoj+.tpn{iy1Sxg_W^\UVD(PJr?hw78&XmI]dQ@34KME/2Rab)!s[cNe'L9*:%`OF ) (* !%  $   $') !"+*( %*! !+&'&#")#X4@.()nwed"xf,+>-;M:N_'Oosihut=zpF!a&8RQ/cr*K9A]7ILv123^PSy|q?0[%gmDjV{\UbTJC4&o|bgDX9(K_*C[nV32fB"qv J^!ry]cMa:E\OT+AN-,h%dQ1eW*  )*!" "$)+!+ '($*)!  '& # #% &! %( |x-fei{.? %sp"Q&/!jnz0>['2,BcwW14Fh8RdSP7gV\aOJEtA@y<*+3bmK9ouq]CUIv(:L);=MX_T^D`rN#! (*)*+ # %""&$)'! ()& ' *$!  !+ %%m7iWUTsp-.ed\n'()[I?@rxaw0,X"h{+/ovt`gj94fCc|;8JQSKLRy8bF=>1B_Bjn3)4foqV_2@bd;&i\RSwEt7I?[AMW-e]'T*$#& # +* $)" & )% ")* %'! !(+(   '!!01"jiDCEU!{tI[)(uq<*8Jsp|r&+`v3/ANb -WoF2XVg%4.xn;mO,]cadS@7>Q^K'_wehP?:\9fTLMR=Byzp܏E?wV|Eet/_t30D>>?~Օ?ɛ6|'/ ;sC[\?>tGJx_Cx|x'xz^?~o>OQ /#/tۋ7axzkΕ%t_O<ת+C uByzֶ/Izig<p܏E?wV|Eet/_t30D ?? ' ;sC>tG@ Cx|x?z?~> /#/@ 7axz%_O<ת+C uByzֶ/Izig<p܏E?wV|Eet/_t30D op?`? {sCG@ {W|x?~|>|#/@ gxz?<ת+C uByzֶ/Izig<p܏E?wV|Eet/_t30D `pp`p? ppp@ pP?ppppp@ `pp8ת+C uByzֶ/Izig<p܏E?wV|Eet/_t32+ op3`;? {}oW@ zV|,?np>?}{{}ҳ@ g{w?.>-ת+CDGuByֶ/Izig<p܏E?wV|Eet/_390D ++?}? ";sC3#~tG@ GHs|x?J?~21>3#-#/@ vxz$y<ת+K3 uBzֶ/Izig<NEW MODE SLIME  BIG ALEC BUDGIE UK XDELTAFORCEFRONT 242 KRAFTWERK ,NITZER EBBTHE SHAMENdTHE CURE Dv+K%5(ñ~i{Fv</h՗X"H_p܏E?w2EZ|Ցo_WKO}4MoiVFb 2~ V|Eet].knNS O>}-7av_9Ft./_t30Df>?SW3~&_ߠÞ?jjoĐ;s? M\~s ~Օ?G_7'|s749+dx&%~̡2a?cɛ6|'/ ;sC\ztW  >~Njs~?/3_֠/s_՟.`[\?>tG<zK=[  Ǐ?I~T`>>RG/l'7"` Jx_Cx|x?B<>?y{^y' _: o$~<'xz^?~{#A_I}O|W}?/_}x}>% U}% o>~_{_RA=+Cr G=|^Wz^}/OQ /#/= Aؾ\O/>9^T6˙~+<ʝ7b>s?Xtۋ7axz I]S\^5\ˣx&+t}O>U?kΕ%t_O<zr/W1_ANZzB^\ǣ~~t ת+C =]zZ  gW^С?^|{u ?9ko/'O^uByzy͇,C%_09[dZ F4}k ^|7wb>+ֶ/Izig<Dv+K%5(ñ~i{Fv</h՗X"H_p܏E?w2EZ|Ցo_WKO}4MoiVFb 2~ V|Eet].knNS O>}-7av_9Ft./_t30Df>?_!aa3~&_ߠÞ?jjoĐ;$$wߘ? M\~ ~Օ?ii$$ '|s749+d|?%~̡2ayyɛ6|'/ ;sC}yy0$$GztW  >~Nk`s?/3_֠/ߒay8$[\?>tGyy8!!C=[  Ǐ?I~T`ÿ<`G/l'7?GJx_Cx|xyy8!!<>?y{^y' `ߓ: o$qy''xz^?~Ii(;$$_I}|W}?`}x}>% Ay8=o>d`faa{_A=+Cr`ǘx|^Wz^}~ $'#OQ /#/=}Î30\O/>^T6˙~rL?ʝ7b>s?XɆ?tۋ7axz I]S\^5\ˣx&+t}O>U?kΕ%t_O<zr/W1_ANZzB^\ǣ~~t ת+C =]zZ  gW^С?^|{u ?9ko/'O^uByzy͇,C%_09[dZ F4}k ^|7wb>+ֶ/Izig<????????????????????????????????????????????????????????????????????????   &ܳÏ~zv|spln`bG~GQÆ~Fj⎬n`sp\~|~_v7*p^\]>rp?q}ds~~?c>{x>p?q]~s~қq}f?~>7n$+WgGy>|~ʦ?~>]{>zy>??|~~;ea?m?wɒcԩIk]ɓիɒwɓw~l թɓVݺɓիɒIlHcǃ??+T;֓G;~2y>?]~{~?ڳy?>&|~~ƫT֓+.q?*V;֓G=+W;֓Gnlƫֻ֓7q?GG*T;VDGG=FGzy}V{Vګy|GFoyGFVVaFG6qLFG*W;VGGONu[_NdOIqZDFGnUU;W*DFG)XgLJ?LFG*W;VGGFGUUWDGF5DFGnUU;W*DFG#XgLJ?tv~q~l~6~~@GFdGFUr8~KvdT~|[g~ͮmo8|~dI'd䎯M4\?Z??.bXa'[p:N\EŀbeL?>2YȟȞ>s~f~? @cbQD2`GFugs†‡|kg||MG‡?~r[Zp>?c\ooVIib$b⟗4HNO-GF~2FGLFzfK`xx~.0ݺ@n~ժ~+uի*:vիժUUn}Uժթի~*u@^U~+ݹ@jE%~=#`../TVjN@DF`PGjODGjGF*!R,7Oh||:J8y}<3yo={x8yW}??[ri+h}l?B}9ys|2==5[[=CC=<#hCC4[5B™=4=[SC=f2gLC݃Fj;ɨWV+9~~E~~V};jɫk:kC,#Gݺݻ(cɒɓ:k׷n]ݻAlݺݻ9\+k~]ݺA&ݻݺTɒɓ8ׯoݺݻ;LGÇ?ٛٛYfgYfg|Yٛ@|?>~M}~m~~GS}}|?>@tYٛfgfgٛٛ6Clٚٛ٘fgYfg6ٛٛٛ@mpMvnofyFconigٛٚfgfgmYٛ@i"l~ٚٛfgfggnٛٛٛ@ !o5Nrs1srj! ٛٛٚYfgfgYٛ@i"~6<sysKv~U'~@7HDH ‚ƒ"#FWa~<>?g1FsÜv~U'~@wHNH ‚ƒ"#F.6Wat>?Nr>?l1rp~L~@w U‚ƒ2"#GT~??GGGggΗFGGnb~U?~@GHH ‚ƒ"#%FM44D*p~r@NOzAAlfq~qU~`ZjO ‚ƒH3"#Fc{??O>NONz6ÎÏS~~`G` ‚ƒ2"#%GレiO{O[<>?<g~U3~ ZK` ‚ƒ2"#%GレiOT^&]6~ßx>?|g2 U*~7zN``@‚ƒ3"#FヲSCЃ/j5pR`??x|>?OyUf:c|d~=~wKH ‚ƒ3"#%Fj1=~>?>dS⟈?z{Á爦#"dw#VWtDFGwu7nj;~n\wwWg lnoi> `6 onmnwvWV"FGEFGuVW5UWj;]C~X7NO` @'ΛGFonoEnoUno-moj-mÇx>?JB‡Y5DFGc@#"#"# b5GFO‡†s?>c7ꏝxbb5rvgBBg晘 {ބ 1 h~ |?Ţ~ Q4$ɑԫͱ,~F{9MD||s۳~{>?A>?k@Lgtf#k?>v>?~o>MD||cg`unRoxy54' 2?ھGU;6MD||i>/tyB)a>?>E7d?> ?>oi?4^i3rSo;kC?6Nv/~~~m~~~~~?~?~?~~~}?~W?~?~~k~~U~?<cv9~~~e>~?~َ~>om~#=?~H?~~:?;9oڞ~6i32m9o?~~+~~~~~><ci>"j|]?__~~~y~Ͼ~}~7|ce0`33$$55FWWgww . @BÏ~^????LLt~\?l~~~hh\mǒǑGGFGFG|t,.0=|}z]>?w+****v~[g~y7p~r#rp?+ɒcT;֓V;֓T;VW;VW;Vq~Z??x??ݺ@`../|:l?v|qWԩIl~ͮ.I1|~[Zn~ժ~+TVJB}sp}dsgk]ɓGǓGǑDGGGGGG6~mbf=i|p>?jN8y9yln`~Gիɒw==~oXaF`>~c\oouի*@DF}sb~?y>|~ɓ;~ǩFGOFG8|~'[pVI`<3y|2G~Gc>ʦ?~>w2y>?+zyN@GFdKx0? @cbib:vիժPGQÆ~{]{>~l]~{~?W;֓}V{Vu[_NUUWdGFI'd:N\ !QD$bUjOo=Fx>zy>?ڳy?>ګydOUr\Eŀ&pq2`GF4HNOUDG{x==jp??|~&|~G|GFIqDGF8ICBթjW}5[sp]~s~թɓyGFDFGDFGKL2YȟȞSGFի~*GF?[\~|~қqVݺɓnnHbc>Rs†‡~u@*=}f?իɒfTֻ֓֓VVUU;WUU;WvS"#s~2FG^U~+!?CC_~>IǪ+**d;ǧ|LFݹ@R[=<v~laFGDFGDFGuff;kg|zjr77n;.76)#><|f,7#*p$eaHcǃ?qqqXgLJ?XgLJ?TM4MG‡?cMG‡?K`xxE%Oi+hLC,ll~~t~{{^jjjjj݃6<<>???4??&]51=~;;]-mFj#Gݺݻٛٛٚٛ~ٚٛ>?NrGDO6~p>?~CÇx>?CC;(Yfg٘fgfgsg>?GG*p~O>[<ßx>?R`??>n\ww~JB‡4[cɒɓYfgYfgfgy1lggrNO|x|>?dSWgX7NOY5DFGW:k|Yٛ6ٛٛgnٛٛsFs1ΗFG@NO>?gOy? lnoc@5V+ɷn]ݻ@ٛ@ٛ@KrpGzNz<2Ufi>` #"#B™9A|?>mp !v~v~nAA6ÎÏ :c㇐z{ "#~lݺݻ~M}Mvnoo5U'~U'~~b~lfq~qS~g~|d~`6@ b~9~fyNrs@@L~U?~U~~U3~U*~=~Á爁 on5GF=E~~\+km~~Fc1sr7w@@`` #"'O‡†V}~]ݺGS}onjHHwG7wdmnwvs?>4=[ڹA}|?>i! ΛcS&ݻݺ@ٛDNZZz;ֿtYٛgٛٚٛٚH H HjOG`K`N`KwWVGFCjTɒɓfgfgYfg‚ƒ‚ƒ H    `H #VW"FGono7=8יfgfgfg"#"#U‚ƒ‚ƒ‚ƒ‚ƒ‚ƒ@‚ƒ‚ƒtDFGEFGEnoxbfkɯoݺݻٛٛmYٛYٛFュF2"#"#H3"#2"#2"#3"#3"#wuϮuVWUnob2g:;@@.6G%FツF%G%GツF%F7n5UW-mo5kCLGÇ?6Ci"i"WaWaTM4ciOiOSCЃ/iiiivvv>>33/~9~9~rvsc /~~~g۳~gt"r2~~~{>?`yjSmm~e>o~BBg晘A>?uno~~~?~|~  {ބ kRoxyJ~~َ~>x>πππ@01 @54 ;H;k9?~om~=?~@xh~ Lg' JߙiCo?~#;:-I~6~?~@>.v>?:Ҙ>?o~~~,~~ھiy~~k~fo%F{R}GϾ~~~ڞU~V~<9>;64^7|<?<;64Y,Y6Y7I8!I`^g@B(#|$` @Y#(!I((f$h h"!hh+*!h,0!h(Nu...Greetz to Galtan 6, TCB, OVR, NPG, ACF & Winnie the Puh (WTP)...(4fD()WpapS(fh"$hR f !h`$h(#( jpCЀ0r((g\(%('fg*f(&d(r`(&e(A' dAdAdA(:Ch8 (;g (;g`h8`h8h(rJ($f8S( fh "h )gR`"h(<m`BNua:"h>()WS(5f h=5 gR>Jg`r0(6NuS(*fh+*$h0R0 f !h,0`$h0()g` ANu ,.. M / gaw GGp0S#}Y8{eQ>, ~wpjd^YTOKGC?;852/,*'%#!   Btz 6      ! *7Cn);C.A                    D           ^cw         g )UH*M5400 457457754054-- 54540540-)5400 Q457457754054-- 54540540-)5405405457540+-- 02454+5405405457<7545400 <:95+0 +0 + -))+0 +02475455 <€<€ <€ <€<€ <€<€ <€ <€<€ ZZ Z ZZ ZZ Z ZZ$+0$+2$+4$+2$+0+$+0$+2$+4$+2$+0+$)0$)2$)4$)2$)0)$)0$)2$)4$)2$)0)$+0$+2$+4$+2$+0+$+0$+2$+7$+5$+40$)0$).$)-$).$)-)$)0$)5$):$)9$)500044004044004400404400550050550055005055<_Z_$0+$4+$0$0+$4+$0$0)$4)$0$0)$4)$0$0+$4+$0$0+$4+$0$0)$4)$0$0)$4)$0+$2+$2+++$2+$2++)$2)$2)))$2)$2))+$2+$2+++$2+$2++)$2)$2)))$2)$2))$$$$$+$$$$$+$$$$$)$$$$$)$$$$$+$$$$$+$$$$$)$$$$$)++++++++++))))))))))++++++++++))))))))))0242002420024200242002420024200242002420A_*E *** ?*** *** M A T C H - I T ! *** *** ~ *** *** ?*** *** (C) by New Mode of Delta Force *** *** ?*** ***-?*** *** Programmerstellung begann am: 29.10.89 *** *** Aktuelles Datum : 28.11.90 *** ***-?*** *E ystartline EQU 24 ; ab dort beginnen Tiles eisrand EQU 8 ; ab dort auf Eisplatte sind die Tiles TEXT pea start(PC) move.w #38,-(A7) trap #14 addq.l #6,A7 clr.w -(A7) trap #1 start: move.w #2,-(a7) trap #14 addq.l #2,a7 move.l d0,oldscreen move.b $f8260.w,oldres move.l A7,oldstack lea stack,A7 clr.w highscoremade bsr loadhighscores bsr initscroller lea leerfeld,A0 moveq #7,D0 clrleerfeld: clr.l (A0)+ dbra D0,clrleerfeld lea scrollsavebuff,A0 ; Scrollbuff lschen move.w #(15*40)-1,D0 clrscrollbuff: clr.l (A0)+ dbra D0,clrscrollbuff movem.l leerfeld,D0-D7 movem.l D0-D7,hilfspalette1 lea font,A0 move.l #7200,D0 bsr backform lea eisplatte,A0 move.l #28960,D0 bsr backform bsr preferences ; Raster an, usw. bsr do_budgie move.l #vblquit,$70.w bsr make_leveltab ; zufallsmige Verteilung der Levels move.w #1,scrollready ; nicht Zeichnen clr.l cheatmode ; Pos. move.l #cheatmode,cheatpoint move.w #1,musicflag ; Music an menu: move.l #mauszeiger2,mousepointer clr.l rettbuff ; Maus nicht restaurieren move.w #100,mousex move.w #100,mousey ; Maus positionieren move.w #1,scrollready movem.l leerfeld,D0-D7 movem.l D0-D7,hilfspalette1 move.l #vblmenu,$70.w movea.l screen1(PC),A0 bsr cls lea menuplatte,A0 movea.l screen1(PC),A1 lea 37*160(A1),A1 lea 37*160(A1),A2 ; Platten reinkopieren lea 37*160(A2),A3 lea 37*160(A3),A4 move.w #(16*40)-1,D0 copymenu: move.l (A0),(A1)+ move.l (A0),(A2)+ move.l (A0),(A3)+ move.l (A0)+,(A4)+ dbra D0,copymenu lea menutext0,A0 movea.l screen1(PC),A1 moveq #40,D0 moveq #5,D1 moveq #5,D2 bsr textaus2 lea menutext1,A0 movea.l screen1(PC),A1 moveq #40,D0 moveq #5,D1 move.w #38,D2 bsr textaus lea menutext2,A0 movea.l screen1(PC),A1 moveq #40,D0 moveq #3,D1 move.w #75,D2 E bsr textaus lea menutext3,A0 movea.l screen1(PC),A1 moveq #40,D0 moveq #4,D1 move.w #112,D2 bsr textaus lea menutext4,A0 movea.l screen1(PC),A1 moveq #40,D0 moveq #8,D1 move.w #149,D2 bsr textaus bsr vsync lea scrollsavebuff,A0 movea.l screen1(PC),A1 lea 184*160(A1),A1 move.w #(15*40)-1,D0 copyscrollbuff: move.l (A0)+,(A1)+ dbra D0,copyscrollbuff clr.w scrollready ; Scroller an bsr fadeup3 tst.w musicflag bne.s nixanschalten ; falls Musik aus war, -> anmachen bsr musiconoff nixanschalten: clr.w mousek clr.b keybuffer waitforkey: cmpi.b #1,keybuffer ; Escape? beq ende move.b mousek,D0 ; Maustaste holen btst #1,D0 ; linke Maustaste gedrckt? beq.s waitforkey moveq #0,D0 move.w mousey,D0 sub.w #37,D0 divu #37,D0 ; damit Werte von 0-3 swap D0 cmp.w #16,D0 ; Rest>16? bgt.s waitforkey swap D0 tst.w D0 bne.s notstartgame bsr rettscrollbuff bsr fadedown3 bsr gamestart ; Spiel beginnen! bra menu notstartgame: cmp.w #1,D0 ; Highscores? bne.s nothighs bsr rettscrollbuff bsr fadedown3 bsr highscoreout ; Highscores zeigen! bra menu nothighs: cmp.w #2,D0 bne.s notinstr bsr rettscrollbuff bsr fadedown3 bsr instructions ; Highscores zeigen! bra menu notinstr: cmp.w #3,D0 beq ende ; Programm beenden bra.s waitforkey rettscrollbuff: move.w #1,scrollready ; Scroller aus bsr vsync lea scrollsavebuff,A1 movea.l screen1(PC),A0 lea 184*160(A0),A0 move.w #(15*40)-1,D0 copyscrollbuff2:move.l (A0)+,(A1)+ dbra D0,copyscrollbuff2 rts gamestart: clr.w score ; Score=0 move.w #1,stage ; Level 1 move.w #2,helpcount ; 3 Helps move.w #70,timeverzoegerung move.l #mauszeiger,mousepointer levelloop: bsr initgame gameloop: bsr oneplayermouse ; jeweilige Joyroutine tst.w endeflag ; falls Zu Ende-> Main bpl nixgameover ; Ende des Spiels (Zeit aus!) bsr gameover rts nixgameover: cmpi.w #2,endeflag beq endegame ; zurck ins Men cmpi.w #1,endeflag ; nchster Level? bne.s gameloop nextlevel: move.w #1,timestop ; Zeit sofort anhalten move.l #vblpause,$70.w bsr initpalpointers bsr fadeup2 ; auf wei hochblenden lea hilfspalette1,A0 moveq #15,D0 fillpalweiss: move.w #$0777,(A0)+ dbra D0,fillpalweiss move.l #vblgame2,$70.w bsr vsync bsr exitpalpointers movea.l screen1(PC),A0 bsr cls lea welldonetext,A0 movea.l screen1(PC),A1 moveq #40,D0 moveq #5,D1 moveq #2,D2 bsr textaus lea clearedstagetext,A0 movea.l screen1(PC),A1 moveq #40,D0 moveq #0,D1 moveq #40,D2 bsr textaus move.w stage,D0 bsr hexdez lea hexdezbuff+4,A0 moveq #2,D0 bsr nullfix movea.l screen1(PC),A1 moveq #18,D1 moveq #40,D2 bsr textaus moveq #0,D0 move.w helpcount,D0 mulu #100,D0 move.w D0,helpbonus cmpi.w #5,helpcount ; hat schon 5 Helps beq.s nixaddhelp tst.w helpverbraucht ; hat Help benutzt! bne.s nixaddhelp ; bekommt kein Help dazu! addq.w #1,helpcount ; pro Level 1 Help dazu! nixaddhelp: lea scoretext,A0 moveq #40,D0 moveq #2,D1 moveq #70,D2 movea.l screen1(PC),A1 bsr textaus e lea timebonustext,A0 moveq #40,D0 moveq #2,D1 move.w #90,D2 movea.l screen1(PC),A1 bsr textaus lea helpbonustext,A0 moveq #40,D0 moveq #2,D1 move.w #110,D2 movea.l screen1(PC),A1 bsr textaus bsr outputhelpbonus bsr outputscore bsr outputtime bsr fadedown2 moveq #20,D7 waitabithere: bsr vsync dbra D7,waitabithere move.w time,D7 subq.w #1,D7 bmi.s nixaddtimetoscore addtimetoscore: bsr vsync subq.w #1,time ; Zeit -1 addq.w #1,score ; Score +1 bsr outputscore bsr outputtime dbra D7,addtimetoscore nixaddtimetoscore: moveq #20,D7 waitabithere2: bsr vsync dbra D7,waitabithere2 moveq #0,D7 move.w helpbonus,D7 divu #100,D7 subq.w #1,D7 bmi.s nixaddhelptoscore addhelptoscore: moveq #9,D1 verz: bsr vsync dbra D1,verz subi.w #100,helpbonus addi.w #100,score bsr outputscore bsr outputhelpbonus dbra D7,addhelptoscore nixaddhelptoscore: addq.w #1,stage ; Level erhhen cmpi.w #65,stage ; Spiel geschafft? bne notlaststage ; Spiel zu Ende! move.w #-3,endeflag lea stage64text,A0 moveq #40,D0 moveq #0,D1 move.w #130,D2 movea.l screen1(PC),A1 bsr textaus2 lea bonus64text,A0 moveq #40,D0 moveq #0,D1 move.w #150,D2 movea.l screen1(PC),A1 bsr textaus2 addi.w #5000,score bsr outputscore bsr button bra gameovereins notlaststage: bsr button bsr fadedown3 movea.l screen1(PC),A0 bsr cls clr.w endeflag cmpi.w #20,timeverzoegerung ; niedrigestes Niveau beq.s nixsubstarttime subq.w #2,timeverzoegerung ; Zeit -5 Sekunden nchster Level nixsubstarttime: bra levelloop endegame: rts backform: ; formt Bild aus Spezialformat zurck ; a0=Adresse ; d0=Lnge lsr.l #3,D0 ; Length/Bitblocks subq.l #1,D0 movea.l A0,A1 ; Dest. (Atari) backformloop0: moveq #0,D1 ; clear Plane 0-3 moveq #0,D2 moveq #0,D3 moveq #0,D4 moveq #3,D5 ; 4 words backformloop1: move.w (A0)+,D7 ; get word (Special) add.w D7,D7 ; shift left by 1 addx.w D1,D1 ; Plane 0 set add.w D7,D7 ; addx.w D2,D2 ; add.w D7,D7 ; addx.w D3,D3 ; add.w D7,D7 ; addx.w D4,D4 ; add.w D7,D7 ; addx.w D1,D1 ; add.w D7,D7 ; addx.w D2,D2 ; add.w D7,D7 ; addx.w D3,D3 ; add.w D7,D7 ; addx.w D4,D4 ; add.w D7,D7 ; addx.w D1,D1 ; add.w D7,D7 ; addx.w D2,D2 ; add.w D7,D7 ; addx.w D3,D3 ; add.w D7,D7 ; addx.w D4,D4 ; add.w D7,D7 ; addx.w D1,D1 ; add.w D7,D7 ; addx.w D2,D2 ; add.w D7,D7 ; addx.w D3,D3 ; add.w D7,D7 ; addx.w D4,D4 ; dbra D5,backformloop1 move.w D4,(A1)+ ; move.w D3,(A1)+ move.w D2,(A1)+ move.w D1,(A1)+ dbra D0,backformloop0 rts do_budgie: ; Kopiert Logo rein und faded es hoch und runter bsr fadebudgie lea budgie_pic,A0 movea.l screen1(PC),A1 move.w #7999,D0 copy_budgie: move.l (A0)+,(A1)+ dbra D0,copy_budgie moveq #0,D7 fade_all_white: lea $f8242.w,A0 moveq #14,)D0 copy_col: move.w D7,(A0)+ dbra D0,copy_col bsr vsync bsr vsync add.w #$0111,D7 cmp.w #$0888,D7 bne.s fade_all_white moveq #9,D7 w1: bsr vsync ; kurz warten dbra D7,w1 bsr fadefromwhitedown moveq #29,D7 w2: bsr vsync ; kurz warten dbra D7,w2 bsr fadebudgie rts fadebudgie: lea $f8240.w,A0 moveq #15,D2 bsr fade_down bsr vsync bsr vsync lea $f8240.w,A0 moveq #15,D0 check: move.w (A0)+,D1 and.w #$0777,D1 bne.s fadebudgie dbra D0,check rts movea.l screen1(PC),A1 move.w #7999,D0 clear_budgie: clr.l (A1)+ dbra D0,clear_budgie rts fade_down: ; faded Paletten runter ; a0=Zeiger auf Farben ; d2=Anzahl Farben fdl0a: move.w (A0),D0 and.w #%111,D0 beq.s col2a subq.w #1,D0 move.w (A0),D1 and.w #%1 000,D1 or.w D0,D1 move.w D1,(A0) bra.s coloka col2a: move.w (A0),D0 and.w #%1110,D0 beq.s col3a sub.w #$10,D0 move.w (A0),D1 and.w #%1 0001,D1 or.w D0,D1 move.w D1,(A0) bra.s coloka col3a: move.w (A0),D0 and.w #%1110,D0 beq.s coloka sub.w #$0100,D0 move.w (A0),D1 and.w #%10001,D1 or.w D0,D1 move.w D1,(A0) coloka: lea 2(A0),A0 dbra D2,fdl0a rts fadefromwhitedown: ; faded von Wei herunter auf Palette lea budgie_pal+2,A0 ; Zielfarben lea $f8242.w,A1 moveq #14,D0 ; 15 Farben fadeloop: move.w (A0),D1 ; Zielfarbe holen move.w (A1),D2 ; aktuelle Farbe and.w #7,D2 ; nur Blauwert and.w #7,D1 cmp.w D1,D2 beq.s blau_ok subq.w #1,D2 ; Farbe -1 blau_ok: move.w D2,D3 ; Merken move.w (A0),D1 ; Zielfarbe holen move.w (A1),D2 ; aktuelle Farbe and.w #%1110,D2 ; nur Grnwert and.w #%1110,D1 cmp.w D1,D2 beq.s gruen_ok sub.w #$10,D2 ; Farbe -1 gruen_ok: or.w D2,D3 ; Merken move.w (A0)+,D1 ; Zielfarbe holen move.w (A1),D2 ; aktuelle Farbe and.w #%1110,D2 ; nur Rotwert and.w #%1110,D1 cmp.w D1,D2 beq.s rot_ok sub.w #$0100,D2 ; Farbe -1 rot_ok: or.w D2,D3 move.w D3,(A1)+ ; und abspeichern dbra D0,fadeloop bsr vsync bsr vsync bsr vsync bsr vsync lea $f8242.w,A1 lea budgie_pal+2,A0 moveq #14,D0 ; 15 Farben comparecols: move.w (A1)+,D1 and.w #$0777,D1 cmp.w (A0)+,D1 bne.s fadefromwhitedown dbra D0,comparecols rts gameovererzeug: cmpi.l #$136d7c22,cheatmode bne.s nixxx move.w #-1,endeflag nixxx: rts button: lea pressbuttontext,A0 moveq #20,D0 moveq #0,D1 move.w #180,D2 movea.l screen1(PC),A1 bsr textaus2 clr.w mousek waitforbutt: move.b mousek,D0 and.b #3,D0 beq.s waitforbutt rts gameover: ; Spiel zuende -> Time vorbei move.l #vblpause,$70.w bsr initpalpointers bsr fadeup2 lea hilfspalette1,A0 moveq #15,D0 fillpalweiss2: move.w #$0777,(A0)+ dbra D0,fillpalweiss2 move.l #vblgame2,$70.w bsr vsync bsr exitpalpointers gameovereins: movea.l screen1(PC),A0 bsr cls lea gameovermess,A0 moveq #40,D0 moveq #6,D1 move.w #2,D2 movea.l screen1(PC),A1 bsr textaus cmpi.w #-3,endeflag beq.s gamesolved cmpi.w #-2,endeflag ; war checkmated? bne.s nixendcheckmated lea checkmatedmess,A0 moveq #40,D0 moveq #5,D1 move.w #22,D2 movea.l screen1(PC),A1 bsr textaus bra.s nixendtimeout nixendcheckmated: lea timeoutmess,A0 moveq #40,D0 moveq #6,D1 move.w #22,D2 movea.l screen1(PC),A1 bsr textaus bra.s nixendtimeout gamesolved: lea gamesolvedmess,A0 moveq #40,D0 moveq #5,D1 move.w #22,D2 movea.l screen1(PC),A1 bsr textaus nixendtimeout: moveq #0,D0 move.w score,D0 ; schauen ob Highscore gemacht lea highscores,A0 moveq #0,D1 ; 10 Pltze durchschauen hiscoreschauen: moveq #0,D2 move.w (A0),D2 cmp.l D2,D0 ; Score grer? bgt.s highscoregemacht lea 12(A0),A0 ; nchster Platz addq.w #1,D1 cmp.w #10,D1 bne.s hiscoreschauen bra nixhighscore highscoregemacht:move.w #-1,highscoremade ; Highscores saven am Ende move.w D1,highscoreplatz lea highscores+(8*12),A1 move.w #8,D0 ; 9 Pltze maximal kopieren sub.w D1,D0 bmi nixcopyhighscore hiscoredowncopy:move.l (A1),12(A1) ; einen Platz nach unten schieben move.l 4(A1),16(A1) move.l 8(A1),20(A1) lea -12(A1),A1 dbra D0,hiscoredowncopy ; in a0=Platzpointer jetzt nixcopyhighscore:move.w score,(A0)+ move.l A0,-(A7) move.w D1,-(A7) lea madehighscoretext,A0 movea.l screen1(PC),A1 moveq #40,D0 moveq #3,D1 move.w #60,D2 bsr textaus lea onplacetext,A0 movea.l screen1(PC),A1 moveq #40,D0 moveq #0,D1 move.w #90,D2 bsr textaus move.w highscoreplatz,D0 addq.w #1,D0 bsr hexdez lea hexdezbuff+4,A0 moveq #2,D0 bsr nullfix moveq #17,D1 move.w #90,D2 movea.l screen1(PC),A1 bsr textaus lea enternametext,A0 movea.l screen1(PC),A1 moveq #40,D0 moveq #0,D1 move.w #140,D2 bsr textaus bsr fadedown2 bsr eingabe move.w (A7)+,D0 movea.l (A7)+,A0 ; Namenspos. im Highscore lea namebuff,A1 tst.b (A1) ; nichts eingegeben bne.s nixcopydefname lea defaultname,A1 nixcopydefname: moveq #9,D0 ; 10 Zeichen copynameintab: move.b (A1)+,(A0)+ dbra D0,copynameintab bsr fadedown3 movea.l screen1(PC),A0 bsr cls bsr drawhighscores bsr fadeup3 bra.s warten nixhighscore: bsr fadedown2 warten: clr.w mousek moveq #0,D0 waitmoo: move.b mousek,D0 and.w #3,D0 beq.s waitmoo endgameover: bsr fadedown3 movea.l screen1(PC),A0 bsr cls rts ; zum Menue zurck highscoreout: movea.l screen1(PC),A0 bsr cls bsr drawhighscores bsr waitmouse2 rts drawhighscores: lea highscores,A6 moveq #1,D7 ; 10 Pltze moveq #5,D6 ; Y-Zhler hiscoreloop: move.w D7,D0 bsr hexdez lea hexdezbuff+4,A0 moveq #2,D0 moveq #0,D1 move.w D6,D2 movea.l screen1(PC),A1 ; Nummer ausgeben bsr textaus2 lea 2(A6),A0 ; Name moveq #10,D0 ; max. 10 Zeichen moveq #3,D1 move.w D6,D2 movea.l screen1(PC),A1 bsr textaus2 move.w (A6),D0 bsr hexdez lea hexdezbuff+1,A0 moveq #5,D0 bsr nullfix moveq #15,D1 move.w D6,D2 movea.l screen1(PC),A1 bsr textaus2 ; Score ausgeben lea 12(A6),A6 add.w #18,D6 addq.w #1,D7 cmp.w #11,D7 bne.s hiscoreloop rts outputscore: movea.l screen1(PC),A1 lea 70*160+13*8(A1),A1 bsr cleartext move.w R score,D0 bsr hexdez lea hexdezbuff+1,A0 moveq #5,D0 bsr nullfix movea.l screen1(PC),A1 moveq #13,D1 moveq #70,D2 bsr textaus2 rts outputtime: movea.l screen1(PC),A1 lea 90*160+13*8(A1),A1 bsr cleartext move.w time,D0 bsr hexdez lea hexdezbuff+3,A0 moveq #3,D0 bsr nullfix movea.l screen1(PC),A1 moveq #13,D1 move.w #90,D2 bsr textaus2 rts outputhelpbonus: movea.l screen1(PC),A1 lea 110*160+13*8(A1),A1 bsr cleartext move.w helpbonus,D0 bsr hexdez lea hexdezbuff+3,A0 moveq #3,D0 bsr nullfix moveq #13,D1 move.w #110,D2 movea.l screen1(PC),A1 bsr textaus2 rts cleartext: moveq #14,D0 ; 15 Scanlines cleartextloop: clr.l (A1)+ clr.l (A1)+ clr.l (A1)+ clr.l (A1)+ clr.l (A1)+ clr.l (A1)+ clr.l (A1)+ clr.l (A1)+ clr.l (A1)+ clr.l (A1)+ lea 120(A1),A1 dbra D0,cleartextloop rts oneplayermouse: ; diese Routine ist fr 1 Spieler mit Maus und Tastaturhilfe bsr umrechen ; Maus.Koord umrechnen moveq #0,D0 move.b keybuffer,D0 moveq #0,D1 lea keytab(PC),A0 ; nur Sonderfunktionen testkey: tst.b (A0) ; prfen ob erlaubt bmi.s nokeyfound cmp.b (A0)+,D0 beq.s keyfound addq.w #4,D1 bra.s testkey nokeyfound: move.b mousek,D0 ; Maustaste btst #1,D0 ; linke Taste bne selekttile btst #0,D0 ; rechter Knopf bne deselekttile rts keyfound: lea keyroutinen(PC),A0 ; je nach Taste movea.l 0(A0,D1.w),A0 ; Routine anspringen jsr (A0) rts initscroller: move.l #scrolltext,textpos move.l #fontbuff,mempos clr.w zeichen rts ;- Instructions - instructions: lea instrtext1,A6 bsr outputinstructions2 bsr waitmouse lea instrtext2,A6 bsr outputinstructions2 bsr waitmouse rts waitmouse2: bsr fadeup3 bra.s waitmm waitmouse: bsr fadeup4 waitmm: clr.b mousek waitmousek: moveq #0,D0 move.b mousek,D0 and.w #3,D0 beq.s waitmousek bsr fadedown3 rts loadhighscores: clr.w -(A7) pea filename move.w #$3d,-(a7) trap #1 addq.l #8,a7 tst.w d0 bmi.s error move.w d0,d7 pea highscores move.l #512,-(a7) move.w d0,-(a7) move.w #$3f,-(a7) trap #1 lea 12(a7),a7  cmp.l #512,d0 bne.s error move.w d0,-(A7) move.w #$3e,-(a7) trap #1 addq.l #4,a7  moveq #0,d0 rts error: lea highscores2,a0 lea highscores,a1 move.w #512-2,d0 copyscores: move.b (a0)+,(A1)+ dbra d0,copyscores move.w #-1,highscoremade rts writehighscores: clr.w -(A7) pea filename move.w #$3c,-(a7) trap #1 addq.l #8,a7 tst.w d0 bmi.s error2 move.w d0,d7 pea highscores move.l #512,-(a7) move.w d0,-(a7) move.w #$40,-(a7) trap #1 lea 12(a7),a7  cmp.l #512,d0 bne.s error2 move.w d0,-(A7) move.w #$3e,-(a7) trap #1 addq.l #4,a7  moveq #0,d0 rts error2: moveq #-1,d0 rts outputinstructions: ; gibt die Instructions zentriert auf dem Screen aus ; a6=pointer auf Text movea.l screen1(PC),A0 bsr cls moveq #0,D2 ; Y-Counter instroutloop: tst.b (A6) bmi.s endoutput ; -1, dann Ende Ausgabe moveq #0,D3 movea.l A6,A0 counttext: tst.b (A0)+ beq.s textendefound addq.w #1,D3 ; Lnge erhhen bra.s counttext textendefound: movea.l A0,A5 ; Merken! moveq #20,D1 sub.w D3,D1 lsr.w #1,D1 movea.l A6,A0 movea.l screen1(PC),A1 moveq #40,D0 bsr textaus2 add.w #16,D2 ; Y erhhen movea.l A5,A6 bra.s instroutloop outputinstructions2: ; gibt die Instructions zentriert auf dem Screen aus (mit 8er Font{) ; a6=pointer auf Text movea.l screen1(PC),A0 bsr cls moveq #0,D2 ; Y-Counter instroutloop2: tst.b (A6) bmi.s endoutput ; -1, dann Ende Ausgabe moveq #0,D3 movea.l A6,A0 counttext2: tst.b (A0)+ beq.s textendefound2 addq.w #1,D3 ; Lnge erhhen bra.s counttext2 textendefound2: movea.l A0,A5 ; Merken! moveq #40,D1 sub.w D3,D1 lsr.w #1,D1 movea.l A6,A0 movea.l screen1(PC),A1 moveq #80,D0 bsr textaus3 add.w #9,D2 ; Y erhhen movea.l A5,A6 bra.s instroutloop2 endoutput: rts scroller: ; Laufschrift am unteren Rand subq.w #2,zeichen ; um 2 Zeichen scrollen bpl.s do_it ; alles gescrollt? move.w #14,zeichen movea.l textpos,A0 tst.b (A0) bne.s gweiter ; noch nicht Ende von Text move.l #scrolltext,textpos movea.l textpos,A0 gweiter: moveq #0,D0 move.b (A0),D0 ; Zeichen holen add.w D0,D0 lea fonttabelle,A6 move.w 0(A6,D0.w),D0 lea fontbuff,A6 adda.w D0,A6 lea 2(A6),A6 ; Maske berspringen move.l A6,mempos addq.l #1,textpos do_it: moveq #2,D7 ; 3 Planes movea.l mempos,A4 movea.l screen1(PC),A3 lea 184*160+152(A3),A3 planescroll_loop: movea.l A4,A2 movea.l A3,A0 move.w zeichen,D4 ; Anzahl wieviel gescrollt ist moveq #14,D5 ; Anzahl der Scrollzeilen-1 scrollloop: moveq #0,D0 move.w (A2),D0 ; 4 mal 16 Pixel von Zeichen lsr.w D4,D0 and.w #3,D0 REPT 20 moveq #0,D1 move.w (A0),D1 ; vom Quellbildschirm lsl.l #2,D1 ; um 2 Bits nach links schieben or.w D0,D1 ; alten Rest einodern move.w D1,(A0) ; abspeichern auf Zielbildschirm swap D1 ; Hiword <-> Lowword move.w D1,D0 ; Herausgeschobenes merken lea -8(A0),A0 ENDR lea 320(A0),A0 ; auf Bitplane1 1 Zeile tiefer lea 10(A2),A2 ; im Charscreen 1 Zeile tiefer dbra D5,scrollloop lea 2(A3),A3 lea 2(A4),A4 dbra D7,planescroll_loop rts ende: ; Spiel ganz verlassen bsr fadedown3 move.w #1,scrollready movem.l leerfeld,D0-D7 movem.l D0-D7,hilfspalette1 move.l #vblquit,$70.w bsr vsync moveq #0,D0 jsr music ; Musik abschalten bsr hbl_off movem.l oldpal,D0-D7 movem.l D0-D7,$f8240.w ; alte Palette move.l oldscreen,D0 bsr setscreen bsr vsync move.b oldres,$f8260.w ; Midres movea.l oldstack,A7 bsr writehighscores rts no_new_move: rts sendkeyboard: lea $fc00.w,A0 waitkeyready: btst #1,(A0) beq.s waitkeyready move.b D0,2(A0) rts cheatlevel: cmpi.l #$136d7c22,cheatmode bne.s nixcheatlevel move.w #1,endeflag ; Level geschafft (mit Beschi) nixcheatlevel: rts musiconoff: eori.w #1,musicflag moveq #0,D0 move.w musicflag,D0 ; 0 oder 1 jsr music clr.b keybuffer rts addscore:  cmpi.l #$136d7c22,cheatmode bne.s nixaddscore addi.w #100,score movea.l screen1(PC),A1 bsr draw_score nixaddscore: rts umrechen: ; rechnet Koordinaten von Maus in Koord. im Feld um move.w mousex,D0 addq.w #6,D0 ; Mittelpunkt lsr.w #4,D0 ; X/16 subq.w #1,D0 ; -2 wegen Startfeld=16 moveq #0,D1 move.w mousey,D1 addq.w #6,D1 ; Mittelpunkt sub.w #ystartline,D1 ; Startzeile abziehen divu #20,D1 ; / Hhe teilen move.w D0,xpos1 move.w D1,ypos1 rts selekttile: ; diese Routine selektiert das Tile, auf dem geklickt wurde. tst.b tile1selektpos ; schon selektiert? bne.s tile2selekt ; dann 2. selekt. moveq #0,D2 ; umrechnen in Pos. move.w xpos1,D0 move.w ypos1,D1 move.w D1,D2 mulu #18,D2 ; * Breite add.w D0,D2 ; + X lea matchitbuff,A0 tst.b 0(A0,D2.w) ; dort berhaupt Tile? beq.s notileselekt move.w #-1,kasten1aktiv movem.l D0-A6,-(A7) bsr vsync bsr restmouse ; Maus restaurieren clr.l rettbuff joyrest: movem.l (A7)+,D0-A6 move.w D0,tile1selektx ; Koord. speichern move.w D1,tile1selekty move.b D2,tile1selektpos bsr draw_kasten clr.w kasten1aktiv notileselekt: rts tile2selekt: tst.b tile1selektpos beq notileselekt2 moveq #0,D5 ; umrechnen in Pos. move.w xpos1,D0 move.w ypos1,D1 move.w D1,D5 mulu #18,D5 ; * Breite add.w D0,D5 ; + X lea matchitbuff,A0 tst.b 0(A0,D5.w) ; dort berhaupt Tile? beq notileselekt2 cmp.w tile1selektx,D0 ; = alten Koord.? bne.s tile2xntile1x cmp.w tile1selekty,D1 beq notileselekt2 tile2xntile1x: move.w D0,tile2selektx ; Koord. speichern move.w D1,tile2selekty move.b D5,tile2selektpos moveq #0,D4 move.b tile1selektpos,D4 move.b 0(A0,D4.w),D2 ; Wert holen move.b 0(A0,D5.w),D3 ; Wert holen bsr tilevergleich ; Tausch mglich ? tst.w D7 bne notileselekt2 ; Nein-> Nichts move.w D0,D2 ; X2 move.w D1,D3 ; Y2 move.w tile1selektx,D0 ; X1 move.w tile1selekty,D1 ; Y1 movem.l D0-A6,-(A7) move.w #-1,kasten1aktiv ; Kasten 1 aus bsr vsync bsr restmouse clr.l rettbuff tile2selektrj: move.w tile2selektx,D0 move.w tile2selekty,D1 bsr draw_kasten movem.l (A7)+,D0-A6 helpeinsprung: clr.w mousek bsr such_weg ; Verbindungslinie? tst.w D0 ; geklappt? bne notawegfound moveq #10,D7 waitahalf: bsr vsync dbra D7,waitahalf addq.w #1,score ; Score erhhen bsr draw_weg subq.w #1,paaranzahl bne.s notallpaars move.w #1,endeflag ; alle Paare weg! = nchster Level! rts notallpaars: clr.w kasten1aktiv ; Kasten an clr.b tile1selektpos ; kein Tile selekt. bsr checkmatetest ; Kucken ob noch was geht! notileselekt2: rts notawegfound: move.w tile2selektx,D0 move.w tile2selekty,D1 movea.l screen1(PC),A0 ; wieder Tiles zeichnen bsr draw_tile clr.w kasten1aktiv ; Joystick an bra.s notileselekt2 deselekttile: tst.b tile1selektpos ; schon Tile selekt. beq.s notiledeselekt movea.l cheatpoint,A0 cmpa.l #cheatmode+4,A0 ; Pos. in Cheatmode beq.s nomorecheat move.b tile1selektpos,(A0)+ move.l A0,cheatpoint cmpi.l #$136d7c22,cheatmode bne.s nomorecheat movem.w cheatpalette(PC),D0-D2 movem.w D0-D2,palette1+26 nomorecheat: move.w #-1,kasten1aktiv bsr restmouse clr.l rettbuff move.w tile1selektx,D0 move.w tile1selekty,D1 movea.l screen1(PC),A0 bsr draw_tile ; Tile zeichnen clr.w kasten1aktiv clr.b tile1selektpos notiledeselekt: rts helpfunktion: tst.w helpcount beq nomorehelp ; kein Help mehr da? bsr vsync bsr restmouse clr.l rettbuff move.w #-1,kasten1aktiv moveq #0,D4 moveq #0,D5 lea posbuff+96,A0 ; Pos. moveq #0,D0 ; 95 Tiles (wegen 2Loop) searchhelploop: move.b -(A0),D4 ; Pos. 1 tst.b D4 beq posgleich0 movea.l A0,A1 move.w #94,D1 sub.w D0,D1 searchhelploop2:move.b -(A1),D5 ; Pos. 2 tst.b D5 beq pos2gleich0 lea matchitbuff,A2 move.b 0(A2,D4.w),D2 ; 2 Tiles holen move.b 0(A2,D5.w),D3 d bsr tilevergleich ; mgliche Kombination? tst.w D7 bne pos2gleich0 move.l D0,-(A7) move.l D1,-(A7) moveq #0,D2 ; umrechnen in Koord. move.w D4,D2 divu #18,D2 move.w D2,D1 swap D2 move.w D2,D0 moveq #0,D2 move.w D5,D2 divu #18,D2 move.w D2,D3 swap D2 move.w D0,tile1selektx move.w D1,tile1selekty move.w D2,tile2selektx move.w D3,tile2selekty bsr such_weg ; Weg da? move.w D0,D6 move.l (A7)+,D1 move.l (A7)+,D0 tst.w D6 bne.s pos2gleich0 ; Ja-Wegnehmen move.b D4,tile1selektpos move.b D5,tile2selektpos move.w tile1selektx,D0 move.w tile1selekty,D1 bsr draw_kasten ; Feld umrahmen move.w tile2selektx,D0 move.w tile2selekty,D1 bsr draw_kasten ; Feld umrahmen move.w #-1,helpverbraucht cmpi.l #$136d7c22,cheatmode ; Cheatmode an? beq.s unlimitedhelps subq.w #1,helpcount bra.s limitedhelps unlimitedhelps: move.w #5,helpcount ; wieder 5 Helps bei Cheatmode! limitedhelps: move.w tile1selektx,D0 move.w tile1selekty,D1 move.w tile2selektx,D2 move.w tile2selekty,D3 move.b tile1selektpos,D4 move.b tile2selektpos,D5 bra helpeinsprung pos2gleich0: dbra D1,searchhelploop2 posgleich0: addq.w #1,D0 cmp.w #95,D0 bne searchhelploop move.w #-2,endeflag ; Game over! (checkmated) nomorehelp: clr.w kasten1aktiv rts endgame: move.w #2,endeflag ; zurck ins Men springen rts checkmatetest: ; berprft ob noch mgliche Tiles da sind moveq #0,D4 moveq #0,D5 lea posbuff+96,A0 ; Pos. moveq #0,D0 ; 95 Tiles (wegen 2Loop) searchhloop: move.b -(A0),D4 ; Pos. 1 tst.b D4 beq posgleich01 movea.l A0,A1 move.w #94,D1 sub.w D0,D1 searchhloop2: move.b -(A1),D5 ; Pos. 2 tst.b D5 beq pos2gleich01 lea matchitbuff,A2 move.b 0(A2,D4.w),D2 ; 2 Tiles holen move.b 0(A2,D5.w),D3 bsr tilevergleich ; mgliche Kombination? tst.w D7 bne pos2gleich01 move.l D0,-(A7) move.l D1,-(A7) moveq #0,D2 ; umrechnen in Koord. move.w D4,D2 divu #18,D2 move.w D2,D1 swap D2 move.w D2,D0 moveq #0,D2 move.w D5,D2 divu #18,D2 move.w D2,D3 swap D2 move.w D0,tile1selektx move.w D1,tile1selekty move.w D2,tile2selektx move.w D3,tile2selekty bsr such_weg ; Weg da? move.w D0,D6 move.l (A7)+,D1 move.l (A7)+,D0 tst.w D6 bne.s pos2gleich01 ; Ja-Wegnehmen rts ; OK! noch was da! pos2gleich01: dbra D1,searchhloop2 posgleich01: addq.w #1,D0 cmp.w #95,D0 bne searchhloop move.w #-2,endeflag ; Game over! (checkmated) rts make_leveltab: lea leveltab,A6 ; komplett lschen moveq #63,D7 clrleveltab: move.b #-1,(A6)+ dbra D7,clrleveltab lea leveltab,A6 moveq #63,D7 makelevelsloop: bsr random and.w #63,D0 cmpi.b #-1,0(A6,D0.w) ; Feld dort belegt bne.s makelevelsloop move.b D7,0(A6,D0.w) ; Nummer ablegen dbra D7,makelevelsloop bsr random move.w D0,D1 bsr random mulu D1,D0 and.w #63,D0 move.w D0,level rts make_buff: moveq #0,D0 move.w level,D0 addq.w #1,D0 and.w #63,D0 ; 64 Level move.w D0,level lea leveltab,A0 move.b 0(A0,D0.w),D0 ; Levelnummer holen mulu #240,D0 lea buffers,A0 adda.w D0,A0 lea matchitbuff,A1 move.w #143,D0 copybuff: move.b (A0)+,(A1)a+ dbra D0,copybuff lea posbuff,A1 moveq #95,D0 copypbuff: move.b (A0)+,(A1)+ dbra D0,copypbuff rts random: movem.l D1-D7,-(A7) move.l $0466.w,D7 ; VBL-Count not.l D7 add.l oldrandom(PC),D7 move.l D7,D6 move.l #127773,D2 bsr.s div move.l D4,D5 muls #-2836,D5 mulu #42591,D4 move.l D4,D6 add.l D4,D4 add.l D6,D4 sub.l D4,D7 moveq #4,D4 ran1: move.l D7,D6 lsl.l #3,D7 sub.l D6,D7 dbra D4,ran1 add.l D5,D7 bpl.s exran1 add.l #2147483647,D7 exran1: move.l D7,D0 move.l D0,oldrandom movem.l (A7)+,D1-D7 rts oldrandom: DC.L 0 div: add.l D6,D6 moveq #0,D4 moveq #14,D3 move.w D6,D5 swap D6 and.l #$f,D6 div1: add.w D4,D4 add.w D5,D5 addx.l D6,D6 cmp.l D2,D6 bmi.s div2 sub.l D2,D6 addq.w #1,D4 div2: dbra D3,div1 rts tilevergleich: ; vergleicht die zwei Tiles und gibt in d7 zurck ob es geht. ; (Blumen-Blumen, Jahreszeiten-Jahreszeiten) ; d2,d3=Werte ; d7=0 -> geht, d7<>0 geht nicht clr.w blumjzverz2 cmp.b D2,D3 bne.s nichtgleich ; ungleich! cmp.b #35,D2 blt.s noverzan cmp.b #42,D2 bgt.s noverzan move.w #4,blumjzverz2 ; Verz. einschalten noverzan: moveq #0,D7 rts nichtgleich: cmp.b #35,D2 ; Jahreszeit? blt.s tileungleich ; < -> ungleich cmp.b #38,D2 bgt.s keinejahresz ; keine Jahreszeit cmp.b #35,D3 ; anderes Tile? blt.s tileungleich cmp.b #38,D3 bgt.s tileungleich ; geht nicht! moveq #0,D7 ; war Jahreszeit! move.w #4,blumjzverz2 rts keinejahresz: cmp.b #42,D2 ; grer als Blume? bgt.s tileungleich ; ist verschieden! cmp.b #42,D3 bgt.s tileungleich cmp.b #39,D3 blt.s tileungleich moveq #0,D7 move.w #4,blumjzverz2 rts tileungleich: moveq #-1,D7 ; geht nicht! rts draw_tile2: ; diese Routine zeichnet ein Steinchen an Pos. X und Y ; diese Koordinaten bezeichnen das Bytefeld "Matchitbuff". ; diese Routine holt auch den entsprechenden Wert aus der ; Tabelle. ; mit Schatten! ; ; bergabe: ; - ; d0 = x ; d1 = y ; a0 = Screenadresse movem.l D0-A2,-(A7) moveq #0,D2 moveq #0,D3 move.w D1,D2 ; Y nach d2 mulu #18,D2 ; mal Breite add.w D0,D2 ; + X lea matchitbuff,A1 ; Spielfeld move.b 0(A1,D2.w),D3 ; Wert holen tst.b D3 beq nixfrei ; Leerfeld! move.w D2,-(A7) subq.w #1,D3 ; -1 wegen Stein 1=0 lea tilesgrafik(PC),A1 ; dort ist die Grafik mulu #20*8,D3 ; so gro ist ein Tile adda.l D3,A1 ; auf Adresse addieren lsl.w #3,D0 ; X mal 8 addq.w #8,D0 ; X + 8 wegen Startfeld and.l #$f,D1 ; Y nur Lowword mulu #20*160,D1 ; mal einer "Zeile" add.w #ystartline*160,D1 ; ab dort beginnen Tiles add.w D0,D1 adda.l D1,A0 ; auf Screen addieren move.l A0,-(A7) movem.l (A1)+,D0-D7 ; 8 Longs (=4 Zeilen) move.l D0,(A0) ; auf Screen speichern move.l D1,4(A0) move.l D2,160(A0) move.l D3,164(A0) move.l D4,320(A0) move.l D5,324(A0) move.l D6,480(A0) move.l D7,484(A0) lea 640(A0),A0 ; 4 Zeilen tiefer movem.l (A1)+,D0-D7 ; 8 Longs (=4 Zeilen) move.l D0,(A0) ; auf Screen speichern move.l D1,4(A0) move.l D2,160(A0) move.l D3,164(A0) move.l D4,320(A0) move.l D5,324(A0) move.l D6,480(A0) move.l D7,484(A0) lea 640(A0),A0 ; 4 Zeilen tiefer movem.l (A1)+,D0-D7 ; 8 Longs (=4 Zeilen) move.l D0,(A0)  ; auf Screen speichern move.l D1,4(A0) move.l D2,160(A0) move.l D3,164(A0) move.l D4,320(A0) move.l D5,324(A0) move.l D6,480(A0) move.l D7,484(A0) lea 640(A0),A0 ; 4 Zeilen tiefer movem.l (A1)+,D0-D7 ; 8 Longs (=4 Zeilen) move.l D0,(A0) ; auf Screen speichern move.l D1,4(A0) move.l D2,160(A0) move.l D3,164(A0) move.l D4,320(A0) move.l D5,324(A0) move.l D6,480(A0) move.l D7,484(A0) lea 640(A0),A0 ; 4 Zeilen tiefer movem.l (A1)+,D0-D7 ; 8 Longs (=4 Zeilen) move.l D0,(A0) ; auf Screen speichern move.l D1,4(A0) move.l D2,160(A0) move.l D3,164(A0) move.l D4,320(A0) move.l D5,324(A0) move.l D6,480(A0) move.l D7,484(A0) movea.l (A7)+,A1 move.w (A7)+,D2 lea matchitbuff,A0 tst.b 1(A0,D2.w) ; Tile rechts frei? beq.s rechtsfrei ; Ja->Schatten tst.b 18(A0,D2.w) ; Tile unten frei? bne.s nixfrei rechtsfrei: lea schatten(PC),A0 lea schattenmaske(PC),A2 moveq #$15,D0 ; 22 Zeilen drawshadow: movem.l (A0)+,D1-D4 move.w (A2)+,D5 ; Maske not.w D5 and.w D5,(A1) and.w D5,2(A1) and.w D5,4(A1) and.w D5,6(A1) move.w (A2)+,D5 not.w D5 and.w D5,8(A1) and.w D5,10(A1) and.w D5,12(A1) and.w D5,14(A1) or.l D1,(A1)+ or.l D2,(A1)+ or.l D3,(A1)+ or.l D4,(A1)+ lea 144(A1),A1 dbra D0,drawshadow nixfrei: movem.l (A7)+,D0-A2 rts hexdez: ; in d0=Wort ; wandelt in Dezimal um ; Ergebnis steht rechtsbndig in hexdezbuff move.l A0,-(A7) move.l #'0',hexdezbuff ; mit Null vorinitialisieren move.w #'00',hexdezbuff+4 lea hexdezbuff+6,A0 makedezloop: moveq #0,D1 move.w D0,D1 divu #10,D1 swap D1 add.b #'0',D1 move.b D1,-(A0) swap D1 move.w D1,D0 cmp.w #10,D0 bge.s makedezloop add.b #'0',D0 move.b D0,-(A0) movea.l (A7)+,A0 rts nullfix: ; a0=Textpointer (erste Zahl) ; d0=Lnge (maximal) ; Rckgabe: a0=neuer Pointer, d0=neue Lnge cmpi.b #'0',(A0) ; fhrende Nullen raushauen bne.s gibtwertraus lea 1(A0),A0 subq.w #1,D0 ; Anzahl -1 bne.s nullfix moveq #1,D0 ; wenn Zeit=0 dann nur 1 Null lea hexdezbuff+5,A0 gibtwertraus: rts draw_time: ; zeichnet die Zeit (3stellig) auf Screen1 movem.w hexdezbuff,D0-D2 ; 3 Worte movem.w D0-D2,hexdezbuff2 ; retten moveq #0,D0 move.w time,D0 bsr hexdez ; Zeit in Hex umwandeln lea obenplatte+80,A0 ; Retten movea.l screen1(PC),A1 lea 80(A1),A1 moveq #15,D1 ; 16 Scanlines restoreoben: movem.l (A0),D2-D7 ; 6 Longs movem.l D2-D7,(A1) lea 160(A0),A0 lea 160(A1),A1 dbra D1,restoreoben lea hexdezbuff+3,A0 ; ab dort sehen moveq #3,D0 ; 3 Zeichen maximal bsr nullfix ; fhrende Nullen weg movea.l screen1(PC),A1 moveq #10,D1 moveq #1,D2 bsr textaus movem.w hexdezbuff2,D0-D2 ; 3 Worte movem.w D0-D2,hexdezbuff ; zurck retten rts draw_score: ; zeichnet den Score (4stellig) auf Screen1 ; a1=Screenpointer moveq #0,D0 move.w score,D0 bsr hexdez ; Zeit in Hex umwandeln lea obenplatte+24,A0 ; Retten movea.l A1,A3 ; Screen lea 24(A3),A3 moveq #15,D1 ; 16 Scanlines restoreoben2: movem.l (A0),D2-D7/A2/A4-A6 ; 10 Longs movem.l D2-D7/A2/A4-A6,(A3) lea 160(A0),A0 lea 160(A3),A3 dbra D1,restoreoben2 lea hexdezbuff+1,A0 ; ab dort sehen moveq #5,D0 ; 3 Zeichen maximal bsr nullfix ; fhrende Nullen weg moveq #3,D1 moveq #1,D2 bsr textaus rts draw_tile: ; diese Routine zeichnet ein Steinchen an Pos. X und Y ; diese Koordinaten bezeichnen das Bytefeld "Matchitbuff". ; diese Routine holt auch den entsprechenden Wert aus der ; Tabelle. ; ohne Schatten! ; ; bergabe: ; - ; d0 = x ; d1 = y ; a0 = Screenadresse movem.l D0-A2,-(A7) moveq #0,D2 moveq #0,D3 move.w D1,D2 ; Y nach d2 mulu #18,D2 ; mal Breite add.w D0,D2 ; + X lea matchitbuff,A1 ; Spielfeld move.b 0(A1,D2.w),D3 ; Wert holen tst.b D3 beq nixfrei2 ; Leerfeld! subq.w #1,D3 ; -1 wegen Stein 1=0 lea tilesgrafik(PC),A1 ; dort ist die Grafik mulu #20*8,D3 ; so gro ist ein Tile adda.l D3,A1 ; auf Adresse addieren lsl.w #3,D0 ; X mal 8 addq.w #8,D0 ; X + 8 wegen Startfeld and.l #$f,D1 ; Y nur Lowword mulu #20*160,D1 ; mal einer "Zeile" add.w #ystartline*160,D1 ; ab dort beginnen Tiles add.w D0,D1 adda.l D1,A0 ; auf Screen addieren movem.l (A1)+,D0-D7 ; 8 Longs (=4 Zeilen) move.l D0,(A0) ; auf Screen speichern move.l D1,4(A0) move.l D2,160(A0) move.l D3,164(A0) move.l D4,320(A0) move.l D5,324(A0) move.l D6,480(A0) move.l D7,484(A0) lea 640(A0),A0 ; 4 Zeilen tiefer movem.l (A1)+,D0-D7 ; 8 Longs (=4 Zeilen) move.l D0,(A0) ; auf Screen speichern move.l D1,4(A0) move.l D2,160(A0) move.l D3,164(A0) move.l D4,320(A0) move.l D5,324(A0) move.l D6,480(A0) move.l D7,484(A0) lea 640(A0),A0 ; 4 Zeilen tiefer movem.l (A1)+,D0-D7 ; 8 Longs (=4 Zeilen) move.l D0,(A0) ; auf Screen speichern move.l D1,4(A0) move.l D2,160(A0) move.l D3,164(A0) move.l D4,320(A0) move.l D5,324(A0) move.l D6,480(A0) move.l D7,484(A0) lea 640(A0),A0 ; 4 Zeilen tiefer movem.l (A1)+,D0-D7 ; 8 Longs (=4 Zeilen) move.l D0,(A0) ; auf Screen speichern move.l D1,4(A0) move.l D2,160(A0) move.l D3,164(A0) move.l D4,320(A0) move.l D5,324(A0) move.l D6,480(A0) move.l D7,484(A0) lea 640(A0),A0 ; 4 Zeilen tiefer movem.l (A1)+,D0-D7 ; 8 Longs (=4 Zeilen) move.l D0,(A0) ; auf Screen speichern move.l D1,4(A0) move.l D2,160(A0) move.l D3,164(A0) move.l D4,320(A0) move.l D5,324(A0) move.l D6,480(A0) move.l D7,484(A0) nixfrei2: movem.l (A7)+,D0-A2 rts clear_tile: ; diese Routine lscht zwei Steinchen an Pos. X und Y ; mehrere Mglichkeiten, das Tile zu verschwinden lassen ; diese Koordinaten bezeichnen das Bytefeld "Matchitbuff". ; kopiert Eisplatte an die Stelle ; lscht auch in Tabelle ; ; bergabe: ; - ; d0 = x1 ; d1 = y1 ; d2 = x2 ; d3 = y2 ; a0 = Screenadresse and.l #$f,D0 and.l #$f,D1 and.l #$f,D2 and.l #$f,D3 movea.l A0,A3 bsr.s makeparasforclear movem.l A0-A2,regs1 ; Register fr Stein 1 move.l D2,D0 move.l D3,D1 movea.l A3,A0 ; Screen bsr.s makeparasforclear ; Regsiter fr Stein 2 movem.l A0-A2,regs2 lea removeani1(PC),A6 moveq #14,D7 ; 15 Animationsstufen clearloop: movea.l A6,A3 movem.l regs1,A0-A2 bsr clearrout1 movea.l A6,A3 movem.l regs2,A0-A2 bsr.s clearrout1 movea.l A3,A6 bsr vsync dbra D7,clearloop rts makeparasforclear: ; erstellt Register fr Clear-Routine moveq #0,D4 move.w D1,D4 ; Y nach d2 mulu #18,D4 ; mal Breite add.w D0,D4 ; + X lea matchitbuff,A1 moveq #0,D5 move.b 0(A1,D4.w),D5 ; Wert holen subq.b #1,D5 clr.b 0(A1,D4.w) ; Tile lschen  move.w #95,D6 ; 96 Tiles lea posbuff,A1 searchinposbuff:cmp.b (A1),D4 ; in Posbuff lschen bne.s notthereinpos clr.b (A1) ; lschen bra.s readyinpos notthereinpos: lea 1(A1),A1 dbra D6,searchinposbuff readyinpos: lea eisplatte,A1 ; Eisplatte holen lsl.w #3,D0 ; X mal 8 addq.w #8,D0 ; X + 8 wegen Startfeld adda.l D0,A1 ; auf Eisplatte addieren and.l #$f,D1 ; Y nur Lowword mulu #20*160,D1 ; mal einer "Zeile" adda.l D1,A1 ; auf Eisplatte adda.l #(eisrand-1)*160,A1 ; ab dort Steinchen add.l #ystartline*160,D1 ; ab dort beginnen Tiles add.l D0,D1 adda.l D1,A0 ; auf Screen addieren lea tilesgrafik(PC),A2 mulu #160,D5 ; Nummer des Tiles*160 adda.l D5,A2 rts clearrout1: ; erste Lschroutine ; in a0=Screenadresse ; in a1=Eisplatte ; a2=altes Tile moveq #19,D0 ; 20 Zeilen movea.l A0,A4 ; Screen movea.l A1,A5 ; Eisplatte clearr1l1: move.l (A5)+,(A4)+ ; Eisplatte kopieren move.l (A5)+,(A4)+ lea 152(A5),A5 lea 152(A4),A4 dbra D0,clearr1l1 movea.l A0,A4 ; Screen movea.l A2,A5 ; Tile moveq #19,D0 ; 20 Zeilen clearr1l2: move.w (A3)+,D1 ; Maske holen move.w (A5)+,D2 and.w D1,D2 move.w (A5)+,D3 and.w D1,D3 move.w (A5)+,D4 and.w D1,D4 move.w (A5)+,D5 and.w D1,D5 move.w D2,D6 ; Maske bilden or.w D3,D6 or.w D4,D6 or.w D5,D6 not.w D6 and.w D6,(A4) or.w D2,(A4)+ and.w D6,(A4) or.w D3,(A4)+ and.w D6,(A4) or.w D4,(A4)+ and.w D6,(A4) or.w D5,(A4)+ lea 152(A4),A4 dbra D0,clearr1l2 rts draw_screen: ; baut Spielbildschirm auf ; mit Platte lea obenplatte(PC),A0 movea.l screen2(PC),A1 move.w #(16*40)-1,D0 copyobenplatte: move.l (A0)+,(A1)+ dbra D0,copyobenplatte movea.l screen2(PC),A1 lea 17*160(A1),A1 ; ab Zeile 16 lea eisplatte,A0 move.w #(181*40)-1,D0 copyeisplatte: move.l (A0)+,(A1)+ dbra D0,copyeisplatte moveq #1,D0 ; X-Start-Pos. dsl0: moveq #1,D1 ; Y-Start-Pos. dsl1: movea.l screen2(PC),A0 move.l D0,-(A7) move.l D1,-(A7) bsr draw_tile2 move.l (A7)+,D1 move.l (A7)+,D0 addq.w #1,D1 ; Y+1 cmp.w #7,D1 bne.s dsl1 addq.w #1,D0 cmp.w #17,D0 bne.s dsl0 movea.l screen2(PC),A1 bsr draw_score movea.l screen2(PC),A1 bsr draw_helps rts draw_kasten: ; knpft Kasten ein (bei Helpfunktion) ; d0,d1=X,Y movem.l D0-A1,-(A7) lea kasten(PC),A0 movea.l screen1(PC),A1 lsl.w #3,D0 ; X mal 8 addq.w #8,D0 ; X + 8 wegen Startfeld and.l #$f,D1 ; Y nur Lowword mulu #20*160,D1 ; mal einer "Zeile" add.w #ystartline*160,D1 ; ab dort beginnen Tiles add.w D0,D1 adda.l D1,A1 ; auf Screen addieren moveq #19,D0 dkl0: move.w (A0)+,D1 ; Werte holen move.w (A0)+,D2 move.w (A0)+,D3 move.w (A0)+,D4 moveq #0,D5 ; Maske bilden move.w D1,D5 or.w D2,D5 or.w D3,D5 or.w D4,D5 not.w D5 and.w D5,(A1) or.w D1,(A1)+ and.w D5,(A1) or.w D2,(A1)+ and.w D5,(A1) or.w D3,(A1)+ and.w D5,(A1) or.w D4,(A1)+ lea 152(A1),A1 dbra D0,dkl0 movem.l (A7)+,D0-A1 rts new_mouse: movem.l D0-D1/A0,-(A7) lea keybuffer,A0 move.b (A0)+,D0 cmp.b #$f8,D0 ; Testen ob Mauspaket bcs.s nomousepak cmp.b #$fc,D0 bcc.s nomousepak move.b D0,mousek ; Taste move.b (A0)+,D0 ; Deltax move.b (A0)+,D1 ; Deltay ext.w D0 ext.w D1 tst.w D0 bne.s nix_x_m tst.w D1 bne.s nix_x_m bra.s nix_x_m1 nix_x_m: clr.w mousek ; falls Maus bewegt und Taste->nix T. nix_x_m1: add.w D0,mousex add.w D1,mousey cmpi.w #281,mousex blt.s nixxzgr move.w #281,mousex nixxzgr: cmpi.w #28,mousex bgt.s nixxzkl move.w #28,mousex nixxzkl: cmpi.w #ystartline+20-6,mousey bgt.s nixyzkl move.w #ystartline+20-6,mousey nixyzkl: cmpi.w #ystartline+140-7,mousey blt.s nomousepak move.w #ystartline+140-7,mousey nomousepak: movem.l (A7)+,D0-D1/A0 rts restmouse: ; Maus restaurieren movem.l D0-D4/A0-A1,-(A7) lea rettbuff,A0 movea.l (A0)+,A1 ; Screenwert cmpa.l #0,A1 beq.s nichtrest ; nicht restaur. moveq #12,D0 ; 13 Zeilen reml0: movem.l (A0)+,D1-D4 ; 4 Longs movem.l D1-D4,(A1) lea 160(A1),A1 dbra D0,reml0 nichtrest: movem.l (A7)+,D0-D4/A0-A1 rts putmouse: ; Maus zeichnen movem.l D0-A6,-(A7) moveq #0,D0 moveq #0,D1 move.w mousex,D0 ; Koord. holen move.w mousey,D1 move.w D0,D4 ror.l #4,D0 ; x/16 rol.w #3,D0 ; x*8 movea.l screen1(PC),A1 move.w D1,D2 mulu #160,D1 adda.w D0,A1 adda.w D1,A1 ; Screenpos clr.w D0 rol.l #4,D0 ; Rest -> Schiebwert movea.l mousepointer,A0 ; Grafik der Maus (13 hoch) lea rettbuff,A2 moveq #12,D1 ; 13 Zeilen move.l A1,(A2)+ ; Screen in Buff pml0: moveq #0,D2 ; Shapewert 0 movem.l (A1),D4-D7 ; in Buffer retten movem.l D4-D7,(A2) lea 16(A2),A2 moveq #0,D2 move.w (A0)+,D2 ; 1 Wort holen ror.l D0,D2 ; Shiften moveq #0,D3 move.w (A0)+,D3 ; 1 Wort holen ror.l D0,D3 ; Shiften moveq #0,D4 move.w (A0)+,D4 ; 1 Wort holen ror.l D0,D4 ; Shiften moveq #0,D5 move.w (A0)+,D5 ; 1 Wort holen ror.l D0,D5 ; Shiften move.l D2,D6 ; Maske bilden or.l D3,D6 or.l D4,D6 or.l D5,D6 not.l D6 and.w D6,(A1) or.w D2,(A1)+ and.w D6,(A1) or.w D3,(A1)+ and.w D6,(A1) or.w D4,(A1)+ and.w D6,(A1) or.w D5,(A1)+ swap D2 swap D3 swap D4 swap D5 swap D6 and.w D6,(A1) or.w D2,(A1)+ and.w D6,(A1) or.w D3,(A1)+ and.w D6,(A1) or.w D4,(A1)+ and.w D6,(A1) or.w D5,(A1)+ lea 144(A1),A1 ; eine Zeile tiefer dbra D1,pml0 movem.l (A7)+,D0-A6 rts textaus: ; gibt Text aus (knpft ein) ; a0=Textpointer ; a1=Screenpointer ; d0=Lnge in Bytes hrt aber auch bei 0 als ASCII auf ; d1=X (0-19) ; d2=Y (0-199) movem.l D0-D6/A0-A4,-(A7) subq.w #1,D0 ; -1 wegen DBRA bmi.s textausende mulu #160,D2 ; y lsl.w #3,D1 ; x adda.w D1,A1 adda.l D2,A1 ; Screen aufaddieren lea fonttabelle,A2 textausloop: moveq #0,D1 move.b (A0)+,D1 beq.s textausende ; 0 bekommen -> Textende add.w D1,D1 ; *2 wegen Worttabelle move.w 0(A2,D1.w),D1 ; Offset auf Font holen lea fontbuff,A3 adda.w D1,A3 ; Offset aufaddieren movea.l A1,A4 moveq #14,D1 ; 15 Scanlines knuepfcharloop: movem.w (A3)+,D2-D6 ; 1 Wort Maske, 4 Worte Daten and.w D2,(A4) or.w D3,(A4)+ and.w D2,(A4) or.w D4,(A4)+ and.w D2,(A4)  or.w D5,(A4)+ and.w D2,(A4) or.w D6,(A4)+ lea 152(A4),A4 ; eine Scanline tiefer dbra D1,knuepfcharloop lea 8(A1),A1 ; 16 Pixel weiter dbra D0,textausloop textausende: movem.l (A7)+,D0-D6/A0-A4 rts textaus2: ; gibt Text aus ; a0=Textpointer ; a1=Screenpointer ; d0=Lnge in Bytes hrt aber auch bei 0 als ASCII auf ; d1=X (0-19) ; d2=Y (0-199) movem.l D0-D6/A0-A4,-(A7) subq.w #1,D0 ; -1 wegen DBRA bmi.s textausende2 mulu #160,D2 ; y lsl.w #3,D1 ; x adda.w D1,A1 adda.l D2,A1 ; Screen aufaddieren lea fonttabelle,A2 textausloop2: moveq #0,D1 move.b (A0)+,D1 beq.s textausende2 ; 0 bekommen -> Textende add.w D1,D1 ; *2 wegen Worttabelle move.w 0(A2,D1.w),D1 ; Offset auf Font holen lea fontbuff,A3 adda.w D1,A3 ; Offset aufaddieren movea.l A1,A4 moveq #14,D1 ; 15 Scanlines knuepfcharloop2:movem.w (A3)+,D2-D6 ; 1 Wort Maske, 4 Worte Daten movem.w D3-D6,(A4) lea 160(A4),A4 ; eine Scanline tiefer dbra D1,knuepfcharloop2 lea 8(A1),A1 ; 16 Pixel weiter dbra D0,textausloop2 textausende2: movem.l (A7)+,D0-D6/A0-A4 rts textaus3: ; gibt Text aus (8er Font) ; a0=Textpointer ; a1=Screenpointer ; d0=Lnge in Bytes hrt aber auch bei 0 als ASCII auf ; d1=X (0-39) ; d2=Y (0-199) movem.l D0-D6/A0-A4,-(A7) subq.w #1,D0 ; -1 wegen DBRA bmi.s textausende3 mulu #160,D2 ; y adda.l D2,A1 move.w D1,D2 moveq #0,D2 lsr.w #1,D1 ; x/2 = 0-19 lsl.w #3,D1 adda.w D1,A1 and.w #1,D2 beq.s nixadd1 addq.l #1,A1 moveq #1,D2 bra.s textausloop3 nixadd1: moveq #7,D2 textausloop3: moveq #0,D1 move.b (A0)+,D1 beq.s textausende3 ; 0 bekommen -> Textende move.w D1,D3 lea chars8,A2 and.w #31,D3 adda.w D3,A2 lsr.w #5,D1 lsl.w #8,D1 adda.w D1,A2 ; Zeichen errechnet move.b (A2),(A1) move.b 32(A2),160(A1) move.b 64(A2),320(A1) move.b 96(A2),480(A1) move.b 128(A2),640(A1) move.b 160(A2),800(A1) move.b 192(A2),960(A1) move.b 224(A2),1120(A1) eori.w #6,D2 adda.w D2,A1 ; 1 oder 7 Bytes weiter dbra D0,textausloop3 textausende3: movem.l (A7)+,D0-D6/A0-A4 rts such_weg: ; Routine, die eine Verbindungslinie von Tile 1 zu Tile 2 sucht. ; Die Verbindungslinie darf nicht mehr als 2 Knicke haben. ; Die Lsung des Problems ist iterativ und nicht rekursiv. ; (Alles in einem 20*10 groen Bytefeld) ; ; bergabewerte: ; - ; d0=x1,d1=y1,d2=x2,d3=y2 ; Rckgabewerte: ; - ; d0=0 -> geklappt ; d0=-1 -> nicht geklappt ; in der Tabelle Weg ist der Weg zu finden, wobei bedeutet: ; 1=rechts, 2=links, 3=unten, 4=oben movem.l D1-A6,-(A7) lea matchitbuff2,A0 move.w #(20*10)-1,D4 fillhelpbuff: move.b #-1,(A0)+ ; mit -1 fllen dbra D4,fillhelpbuff lea matchitbuff,A0 lea matchitbuff2+21,A1 moveq #7,D4 ; 8 Zeilen fillhelpl: moveq #17,D5 ; 18 Spalten fillhelpl1: move.b (A0)+,(A1)+ dbra D5,fillhelpl1 ; Feld reinkopieren lea 2(A1),A1 dbra D4,fillhelpl mulu #20,D1 ; Hhe * 20 add.w #21,D1 ; wegen Rahmen add.w D0,D1 ; + Breite lea matchitbuff2,A5 ; Hilfsbuffer lea 0(A5,D1.w),A5 ; Pointer auf Pos.Start mulu #20,D3 ; Hhe * 20 add.w #21,D3 ; wegen Rahmen add.w D2,D3 ; + Breite lea matchitbuff2,A6 ; Hilfsbuffer lea 0(A6,D3.w),A6 ; Pointer auf Pos. Ziel lea weg,A0 lea wege,A1 moveq #-1,D0 ; alte Richtung moveq #-1,D1 ; Knicke wegen Startknick bsr.s suchweg moveq #-1,D0 ; nix gefunden cmpa.l #wege,A1 beq.s foundnoweg moveq #0,D0 ; gef2unden lea wege,A2 move.l #10,D1 ; aktuelle Lnge countwegloop: cmpa.l A1,A2 bge.s allesgesucht movea.l A2,A3 ;aktuellen Weg merken moveq #0,D7 laenge: tst.b (A2)+ beq.s endweg addq.w #1,D7 bra.s laenge endweg: cmp.w D1,D7 bge.s countwegloop move.w D7,D1 movea.l A3,A4 bra.s countwegloop allesgesucht: lea weg,A0 copywegeinweg: move.b (A4)+,(A0)+ dbra D1,copywegeinweg foundnoweg: movem.l (A7)+,D1-A6 rts suchweg: movem.l D0-D1/A5,-(A7) ; Parameter retten cmp.b #2,D0 beq.s linksrout ; von links kommend? cmp.b #1,D0 ; wieder rechts? beq.s keinknickrechts cmp.w #2,D1 ; Anz. Knicke=2? beq.s linksrout addq.w #1,D1 ; Knicke +1 moveq #1,D0 ; Richt. rechts keinknickrechts:lea 1(A5),A5 ; Pos. +1 cmpa.l A5,A6 ; Ziel erreicht? bne.s rechtskeinz bsr wegsave bra nixmoeglich ; eins zurck rechtskeinz: tst.b (A5) ; Feld frei? bne.s linksrout ; dort Rand oder Tile move.b D0,(A0)+ ; Weg bsr.s suchweg lea -1(A0),A0 linksrout: movem.l (A7),D0-D1/A5 cmp.b #1,D0 beq.s untenrout ; von rechts kommend? cmp.b #2,D0 ; wieder links? beq.s keinknicklinks cmp.w #2,D1 ; Anz. Knicke=2? beq.s untenrout addq.w #1,D1 ; Knicke +1 moveq #2,D0 ; Richt. links keinknicklinks: lea -1(A5),A5 ; Pos. -1 cmpa.l A5,A6 ; Ziel erreicht? bne.s linkskeinz bsr.s wegsave bra.s nixmoeglich ; eins zurck linkskeinz: tst.b (A5) ; Feld frei? bne.s untenrout ; dort Rand oder Tile move.b D0,(A0)+ ; Weg bsr.s suchweg lea -1(A0),A0 untenrout: movem.l (A7),D0-D1/A5 cmp.b #4,D0 beq.s obenrout ; von oben kommend? cmp.b #3,D0 ; wieder unten? beq.s keinknickunten cmp.w #2,D1 ; Anz. Knicke=2? beq.s obenrout addq.w #1,D1 ; Knicke +1 moveq #3,D0 ; Richt. unten keinknickunten: lea 20(A5),A5 ; ypos1. +1 cmpa.l A5,A6 ; Ziel erreicht? bne.s untenkeinz bsr.s wegsave bra.s nixmoeglich ; eins zurck untenkeinz: tst.b (A5) ; Feld frei? bne.s obenrout ; dort Rand oder Tile move.b D0,(A0)+ ; Weg bsr suchweg lea -1(A0),A0 obenrout: movem.l (A7),D0-D1/A5 cmp.b #3,D0 beq.s nixmoeglich ; von unten kommend? cmp.b #4,D0 ; wieder oben? beq.s keinknickoben cmp.w #2,D1 ; Anz. Knicke=2? beq.s nixmoeglich addq.w #1,D1 ; Knicke +1 moveq #4,D0 ; Richt. unten keinknickoben: lea -20(A5),A5 ; ypos1. -1 cmpa.l A5,A6 ; Ziel erreicht? bne.s obenkeinz bsr.s wegsave bra.s nixmoeglich ; eins zurck obenkeinz: tst.b (A5) ; Feld frei? bne.s nixmoeglich ; dort Rand oder Tile move.b D0,(A0)+ ; Weg bsr suchweg lea -1(A0),A0 nixmoeglich: lea 12(A7),A7 rts wegsave: move.b D0,(A0)+ ; letztes Wegstck clr.b (A0) lea weg,A2 copyweg: move.b (A2)+,(A1)+ ; Weg kopieren bne.s copyweg lea -1(A0),A0 rts draw_weg: ; zeichnet den Weg von Tile 1 zu Tile 2 move.w tile1selektx,D0 move.w tile1selekty,D1 ; beide Steine zeichnen movea.l screen1(PC),A0 bsr draw_tile move.w tile2selektx,D0 move.w tile2selekty,D1 movea.l screen1(PC),A0 bsr draw_tile lea weg,A0 ; dort liegt der Weg move.w tile1selektx,D0 ; Koord. move.w tile1selekty,D1 move.w tile2selektx,D2 move.w tile2selekty,D3 makeweg: move.b (A0)+,D4 ; Weg holen cm7p.b #1,D4 ; rechts? bne.s wegnotrechts moveq #0,D7 addq.w #1,D0 ; X+1 cmpi.b #3,(A0) ; nchstes Stck unten bne.s nixnextur move.w #4*160,D7 bra.s wegweiter nixnextur: cmpi.b #4,(A0) bne.s wegweiter move.w #3*160,D7 bra.s wegweiter wegnotrechts: cmp.b #3,D4 ; unten? bne.s wegnotunten move.w #160,D7 addq.w #1,D1 ; Y+1 cmpi.b #1,(A0) bne.s nixnextru move.w #2*160,D7 bra.s wegweiter nixnextru: cmpi.b #2,(A0) bne.s wegweiter move.w #3*160,D7 bra.s wegweiter wegnotunten: cmp.b #4,D4 ; oben? bne.s wegnotoben move.w #160,D7 subq.w #1,D1 ; Y-1 cmpi.b #1,(A0) bne.s nixnextul move.w #5*160,D7 bra.s wegweiter nixnextul: cmpi.b #2,(A0) bne.s wegweiter move.w #4*160,D7 bra.s wegweiter wegnotoben: subq.w #1,D0 ; X-1 moveq #0,D7 cmpi.b #3,(A0) bne.s nixnextlu move.w #5*160,D7 bra.s wegweiter nixnextlu: cmpi.b #4,(A0) bne.s wegweiter move.w #2*160,D7 wegweiter: cmp.w D0,D2 ; X1=X2? bne.s nixkoorgleich cmp.w D1,D3 bne.s nixkoorgleich move.w tile1selektx,D0 move.w tile1selekty,D1 move.w tile2selektx,D2 move.w tile2selekty,D3 movea.l screen1(PC),A0 bsr clear_tile ; Tile 1+2 lschen bsr draw_screen bsr switch tst.w blumjzverz2 beq.s nixnewverz move.w blumjzverz2,blumjzverz ; falls Verz. -> an nixnewverz: rts nixkoorgleich: movem.l D0-A0,-(A7) movea.l screen1(PC),A2 lsl.w #3,D0 ; X mal 8 addq.w #8,D0 ; X + 8 wegen Startfeld and.l #$f,D1 ; Y nur Lowword mulu #20*160,D1 ; mal einer "Zeile" add.w #ystartline*160,D1 ; ab dort beginnen Tiles add.w D0,D1 adda.l D1,A2 ; auf Screen addieren lea weggrafik(PC),A1 adda.w D7,A1 ; Element addieren moveq #19,D0 dwgrf: movem.w (A1)+,D1-D4 ; 4 Worte holen moveq #0,D5 move.w D1,D5 ; Maske bilden or.w D2,D5 or.w D3,D5 or.w D4,D5 not.w D5 and.w D5,(A2) ; Wert ausmaskieren or.w D1,(A2)+ and.w D5,(A2) ; Wert ausmaskieren or.w D2,(A2)+ and.w D5,(A2) ; Wert ausmaskieren or.w D3,(A2)+ and.w D5,(A2) ; Wert ausmaskieren or.w D4,(A2)+ lea 152(A2),A2 ; eine Zeile tiefer dbra D0,dwgrf bsr vsync movem.l (A7)+,D0-A0 bra makeweg preferences: ; Diese Routine setzt Bildschirm und Palette. ; erstellt auch Font move.l #screenbase,D0 and.l #-256,D0 ; wegen fehlenden 8 Bit add.l #256,D0 move.l D0,screen1 add.l #200*160,D0 move.l D0,screen2 add.l #200*160,D0 move.l D0,screen3 add.l #200*160,D0 move.l D0,screen4 clr.w screennumm ; auf Bildschirm 0 (=1) move.w #-1,timestop ; Zeit anhalten movem.l $f8240.w,D0-D7 ; Farben retten movem.l D0-D7,oldpal movea.l screen1(PC),A0 bsr cls ; alle Screens lschen movea.l screen2(PC),A0 bsr cls ; alle Screens lschen movea.l screen3(PC),A0 bsr cls ; alle Screens lschen movea.l screen4(PC),A0 bsr cls ; alle Screens lschen bsr vsync bset #1,$f820a.w ; 50Hz move.b #0,$f8260.w ; Lowres move.l #palette1,palpointer1 ; Palettenpointer setzen move.l #palette2,palpointer2 ; Palettenpointer setzen move.l #blinkcolors,blinkpos move.w #0,blinkanaus ; Blinken aus clr.w blinkdelay move.l screen1(PC),D0 ; Screen 1 setzen lsr.l #8,D0 move.b D0,$f8203.w lsr.w #8,D0 move.b D0,$f8201.w move.l #keybuffer,keypointer clr.w keycounter clr.l keybuffer clr.l keybuffer+4 bsr makefont moveq #1,D0 jsr music moveq #$08,D0 bsr sendkeyboard ; Maus anschalten bsr hbl_on ; Interrupts anschalten rts makefont: ; erstellt Tabelle fr Font und schreibt Zeichen mit Maske in Buffer lea fonttabelle,A0 move.w #(fonttabellelaenge/2)-1,D0 multab: moveq #0,D1 move.w (A0),D1 ; Werte multiplizieren mulu #150,D1 move.w D1,(A0)+ dbra D0,multab lea font,A0 lea fontbuff,A1 ; dort kommen die Zeichen hin moveq #0,D0 ; 40 Zeichen makefontloop: movea.l A0,A2 moveq #14,D1 ; 15 Scanlines makefontloop2: moveq #0,D2 movem.w (A2),D3-D6 ; 4 Worte holen move.w D3,D2 or.w D4,D2 or.w D5,D2 or.w D6,D2 ; Maske erstellen not.w D2 movem.w D2-D6,(A1) lea 10(A1),A1 lea 160(A2),A2 ; eine Scanline tiefer dbra D1,makefontloop2 lea 8(A0),A0 ; ein Zeichen weiter addq.w #1,D0 cmp.w #20,D0 bne.s nixnextline1 lea 14*160(A0),A0 ; eine Zeichenzeile tiefer bra.s makefontloop nixnextline1: cmp.w #40,D0 bne.s nixnextline lea 14*160(A0),A0 bra.s makefontloop nixnextline: cmp.w #47,D0 ; schon 47 Zeichen? bne.s makefontloop rts initgame: ; Inititalisiert alle Spielparameter move.l #vblgame2,$70.w movem.l leerfeld,D0-D7 movem.l D0-D7,hilfspalette1 bsr vsync movea.l screen1(PC),A0 bsr cls clr.l rettbuff ; Maus nicht restaurieren move.w #1,timestop ; Zeit anhalten move.w #8*16,mousex move.w #ystartline+80,mousey clr.w mousek clr.w helpverbraucht ; noch kein Help verbraucht! move.w #-1,kasten1aktiv ; Kasten 1 aus clr.w endeflag ; noch spielen! clr.b tile1selektpos ; noch kein Tile selekt. move.w #48,paaranzahl ; Anzahl der Paare bsr make_buff ; erstellt Spielbuffer bsr draw_screen ; zeichnet Spielscreen bsr switch clr.w kasten1aktiv ; Kasten an move.w #200,time ; Zeit clr.w vblcount clr.w blumjzverz ; Verz. von BlumeJz=0 clr.w blumjzverz2 welchpalette: bsr random ; Welche Plattenfarben? and.w #7,D0 ; Werte von 0-7 cmp.w #5,D0 bgt.s welchpalette ; nur Werte von 0-5 lea plattenfarben(PC),A0 lsl.w #5,D0 ; d0*32 adda.w D0,A0 movem.l (A0),D0-D7 movem.l D0-D7,palette2 move.w #1,blinkanaus ; Blinken an move.l #vblgame,$70.w bsr initpalpointers movem.l leerfeld,D0-D7 movem.l D0-D7,hilfspalette1 movem.l D0-D7,hilfspalette2 bsr fadeup bsr exitpalpointers clr.w timestop ; Time starten rts pause: ; geht in Pausemodus und entfernt Platte vom Screen move.l #vblpause,$70.w ; neuer VBL bsr initpalpointers clr.l rettbuff bsr vsync suchpauserout: bsr random and.w #3,D0 ; Routine 1,2 oder 3 cmp.w #2,D0 bgt.s suchpauserout ; Zufallsmige Routine lsl.w #2,D0 ; d0 * 4 lea pauseroutinen(PC),A0 ; welche Routine? movea.l 0(A0,D0.w),A0 jsr (A0) move.l #vblgame,$70.w exitpalpointers:move.l savepalpoint1,palpointer1 move.l savepalpoint2,palpointer2 rts initpalpointers:movea.l palpointer1,A0 move.l A0,savepalpoint1 ; retten movem.l (A0),D0-D7 movem.l D0-D7,hilfspalette1 ; Palette whrend Pause move.l #hilfspalette1,palpointer1 movea.l palpointer2,A0 move.l A0,savepalpoint2 ; retten movem.l (A0),D0-D7 movem.l D0-D7,hilfspalette2 ; Palette whrend Pause move.l #hilfspalette2,palpointer2 Q rts pausedraw: ; zeichnet Pausezeichen aus Wegelementen bsr fadeup2 ; Farben auf Wei movea.l screen1(PC),A0 bsr cls ; Bildschirm lschen bsr fadedown lea pausegraf(PC),A0 ; Elemente movea.l screen1(PC),A1 lea 50*160(A1),A1 ; auf Zeile 50 moveq #4,D0 ; 5 Zeilen makepause: moveq #19,D1 ; 20 Blcke movea.l A1,A2 makepause1: moveq #0,D3 move.b (A0)+,D3 ; Wert holen beq.s notdrawpause ; Leerfeld subq.w #1,D3 mulu #160,D3 ; mal Gre eines Felds lea weggrafik(PC),A3 adda.w D3,A3 movea.l A2,A4 moveq #19,D3 ; 20 Zeilen makepause2: move.l (A3)+,(A4)+ move.l (A3)+,(A4)+ lea 152(A4),A4 dbra D3,makepause2 notdrawpause: lea 8(A2),A2 dbra D1,makepause1 lea 20*160(A1),A1 dbra D0,makepause bsr fadeup bsr.s waitforpauseend rts pausescroll: ; scrollt Screen raus bsr.s scrollraus bra.s pausedraw waitforpauseend: cmpi.b #$39,keybuffer beq.s endepause move.b mousek,D0 btst #1,D0 bne.s endepause bra.s waitforpauseend endepause: bsr fadedown bsr draw_screen bsr switch tst.b tile1selektpos ; ein Tile selektiert? beq.s nottilepause move.w tile1selektx,D0 move.w tile1selekty,D1 bsr draw_kasten nottilepause: bsr fadeup clr.w mousek rts scrollraus: movea.l screen1(PC),A0 ; auf alle Screens kopieren movea.l screen2(PC),A1 movea.l screen3(PC),A2 movea.l screen4(PC),A3 move.w #(264*40)-1,D0 copyonallscreens: move.l (A0),(A1)+ move.l (A0),(A2)+ move.l (A0)+,(A3)+ dbra D0,copyonallscreens movea.l screen1(PC),A0 ; Screen 2 shiften movea.l screen2(PC),A1 bsr preshift movea.l screen2(PC),A0 ; Screen 3 shiften movea.l screen3(PC),A1 bsr preshift movea.l screen3(PC),A0 ; Screen 4 shiften movea.l screen4(PC),A1 bsr preshift clr.w screennumm clr.w readycount ; counter1 init. scrolloutloop: bsr scroll bsr switchall ; zwischen 4 Screens cmpi.w #100,readycount bne.s scrolloutloop rts eingabe: lea namebuff,A0 moveq #9,D0 ; 10 Zeichen clrnamebuff: clr.b (A0)+ dbra D0,clrnamebuff lea namebuff,A6 lea cursortext(PC),A0 moveq #1,D0 moveq #5,D1 move.w #170,D2 movea.l screen1(PC),A1 bsr textaus2 moveq #0,D5 ; Anz. der schon eing. Zeichen=0 eingabeloop0: clr.b keybuffer bsr vsync move.b keybuffer,D0 tst.b D0 beq.s eingabeloop0 cmp.b #$0e,D0 ; Backspace? beq backspace cmp.b #$1c,D0 ; Return? beq endeingabe cmp.w #10,D5 ; Zeichen schon maximal bge eingabeloop0 bsr scantoascii tst.b D0 beq eingabeloop0 move.b D0,(A6)+ addq.w #1,D5 ; Zeichen +1 lea -1(A6),A0 moveq #1,D0 move.w D5,D1 addq.w #4,D1 move.w #170,D2 movea.l screen1(PC),A1 bsr textaus2 addq.w #1,D1 ; X-Pos +1 cmp.w #20,D1 beq eingabeloop0 lea cursortext(PC),A0 moveq #1,D0 move.w #170,D2 movea.l screen1(PC),A1 bsr textaus2 ; gibt Cursor aus bra eingabeloop0 endeingabe: move.b #0,(A6)+ rts backspace: tst.w D5 beq eingabeloop0 ; noch kein Zeichen eingegeben lea -1(A6),A6 clr.b (A6) subq.w #1,D5 ; Zeichen -1 cmp.w #20,D1 beq notspaceit lea cursortext+1(PC),A0 moveq #1,D0 move.w #170,D2 movea.l screen1(PC),A1 bsr textaus2 notspaceit: subq.w #1,D1 < cmp.w #20,D1 beq eingabeloop0 lea cursortext(PC),A0 moveq #1,D0 move.w #170,D2 movea.l screen1(PC),A1 bsr textaus2 bra eingabeloop0 scantoascii: moveq #0,D7 move.b D0,D7 lea asciitab(PC),A0 moveq #0,D0 move.b 0(A0,D7.w),D0 rts cursortext: DC.B "? " asciitab: DC.B 0,0 ; 0 und ESC DC.B "1234567890" ; 2 bis $b DC.B 0,0,0,0 ; $c-$f DC.B "QWERTZUIOP" ; $E-$19 DC.B 0,0,0,0 ; $1a-$1d DC.B "ASDFGHJKL" ; $1e-$26 DC.B 0,0,0,0,0 ; $27-$2b DC.B "YXCVBNM" ; $2c-$32 DC.B 0,0,0,0,0,0," ",0 ; $33-$3a DS.B 256-$38 EVEN preshift: ; shiftet Bild um 4 Pixel nach links ; in a0=Pointer auf Bild (source) ; a1=Dest. lea 152(A0),A0 ; Pointer um an Ende Scanline lea 152(A1),A1 ; Pointer um an Ende Scanline lea 17*160(A0),A0 ; ab Zeile 17 lea 17*160(A1),A1 move.w #180,D0 ; 181 Zeilen sh8screen1: moveq #19,D1 ; 20 Bitblocks moveq #0,D4 moveq #0,D5 moveq #0,D6 moveq #0,D7 sh8screen2: moveq #0,D2 move.w (A0),D2 lsl.l #4,D2 or.w D4,D2 move.w D2,(A1) swap D2 move.w D2,D4 moveq #0,D2 move.w 2(A0),D2 lsl.l #4,D2 or.w D5,D2 move.w D2,2(A1) swap D2 move.w D2,D5 moveq #0,D2 move.w 4(A0),D2 lsl.l #4,D2 or.w D6,D2 move.w D2,4(A1) swap D2 move.w D2,D6 moveq #0,D2 move.w 6(A0),D2 lsl.l #4,D2 or.w D7,D2 move.w D2,6(A1) swap D2 move.w D2,D7 lea -8(A0),A0 lea -8(A1),A1 dbra D1,sh8screen2 lea 320(A0),A0 lea 320(A1),A1 dbra D0,sh8screen1 rts scroll: ; schiebt die Screens dann raus cmpi.w #3,readycount ble.s notscrollout move.w screennumm,D0 lea screen1(PC),A0 lsl.w #2,D0 movea.l 0(A0,D0.w),A0 lea 17*160(A0),A0 ; Zeile 16 movea.l A0,A1 move.l A1,-(A7) lea 8(A0),A0 move.w #180,D0 ; 181 Zeilen sl0: movem.l (A0)+,D1-D7/A1-A6 movem.l D1-D7/A1-A6,-60(A0) movem.l (A0)+,D1-D7/A1-A6 movem.l D1-D7/A1-A6,-60(A0) movem.l (A0)+,D1-D7/A1-A5 movem.l D1-D7/A1-A5,-56(A0) lea 8(A0),A0 dbra D0,sl0 movea.l (A7)+,A1 lea 152(A1),A1 moveq #0,D1 move.w #180,D0 ; 180 Zeilen clrhinten: move.l D1,(A1)+ move.l D1,(A1)+ lea 152(A1),A1 dbra D0,clrhinten notscrollout: addq.w #1,readycount ; Zhler +1 rts switchall: ; Diese Routine stellt nchsten der 4 Bildschirme dar. bsr vsync ; auf VBL warten move.w screennumm,D0 ; aktueller Screen addq.w #1,D0 ; nchster Screen and.w #3,D0 ; nur Werte von 0-3 move.w D0,screennumm ; wieder zurck lsl.w #2,D0 ; d0*4 -> Longs lea screen1(PC),A0 ; Basisadresse move.l 0(A0,D0.w),D0 ; Adresse holen lsr.l #8,D0 ; Screen setzen move.b D0,$f8203.w lsr.w #8,D0 move.b D0,$f8201.w rts zerkriesel: ; zerkrieselt die Platte bsr random ; Opcode (ROR Dx,D0) and.w #3,D0 cmp.w #3,D0 beq.s zerkriesel ; nur Werte von 0-2 add.w D0,D0 ; *2 wegen Opcode lea krieslopcodes(PC),A0 move.w 0(A0,D0.w),krieslopcode bsr random and.w #7,D0 move.w D0,D3 ; Wert 1 fr Krieseln lea kriesldat(PC),A6 movea.l screen1(PC),A5 lea 17*160(A5),A5 moveq #19,D7 krieslloop: cmpi.w #-1,(A6) bne.s nixendkriesl lea kriesldat(PC),A6 nixendkriesl: movea.l A5,A1 movea.l A6,A0 move.w #19,D2 kloop0: move.w #180,D1 movea.l A1,A3 move.w (A0)+,D0 + cmp.w #-1,D0 bne.s nixendkries2 lea kriesldat(PC),A0 move.w (A0)+,D0 nixendkries2: and.w D0,(A3)+ and.w D0,(A3)+ and.w D0,(A3)+ and.w D0,(A3)+ krieslopcode: ror.w D2,D0 lea 152(A3),A3 dbra D1,nixendkries2 lea 8(A1),A1 dbra D2,kloop0 lea 2(A6),A6 bsr vsync dbra D7,krieslloop bra pausedraw fadedown: ; blendet Farbpaletten runter lea hilfspalette1,A6 ; whrend VBL dort Pal1 bsr.s fadedwn bsr vsync lea hilfspalette2,A6 ; whrend VBL dort Pal3 bsr.s fadedwn moveq #31,D7 ; 3 Pal. sind hintereinand. lea hilfspalette1,A0 ; im Speicher -> eine Rout. count0col: move.w (A0)+,D0 and.w #$0777,D0 bne.s fadedown dbra D7,count0col rts fadedwn: moveq #15,D7 fdl0: move.w (A6),D0 and.w #%111,D0 beq.s col2 subq.w #1,D0 move.w (A6),D1 and.w #%1 000,D1 or.w D0,D1 move.w D1,(A6) bra.s colok col2: move.w (A6),D0 and.w #%1110,D0 beq.s col3 sub.w #$10,D0 move.w (A6),D1 and.w #%1 0001,D1 or.w D0,D1 move.w D1,(A6) bra.s colok col3: move.w (A6),D0 and.w #%1110,D0 beq.s colok sub.w #$0100,D0 move.w (A6),D1 and.w #%10001,D1 or.w D0,D1 move.w D1,(A6) colok: lea 2(A6),A6 dbra D7,fdl0 rts fadeup2: ; blendet Farbpalette hoch (auf Wei) lea hilfspalette1,A6 bsr fade_up2 bsr vsync bsr vsync lea hilfspalette2,A6 bsr fade_up2 moveq #31,D7 lea hilfspalette1,A0 compcol2: move.w (A0)+,D0 and.w #$0777,D0 cmp.w #$0777,D0 bne.s fadeup2 dbra D7,compcol2 rts fadedown2: ; blendet Farbpalette von wei runter auf Palette lea hilfspalette1,A6 lea palette1(PC),A5 bsr fade_down2 bsr vsync bsr vsync bsr vsync moveq #15,D7 lea hilfspalette1,A0 lea palette1(PC),A1 compcol3: move.w (A0)+,D0 and.w #$0777,D0 move.w (A1)+,D1 and.w #$0777,D1 cmp.w D0,D1 bne.s fadedown2 dbra D7,compcol3 rts fadeup: ; blendet Farbpalette hoch lea hilfspalette1,A6 lea palette1(PC),A5 bsr fade_up lea hilfspalette2,A6 lea palette2(PC),A5 bsr fade_up bsr vsync bsr vsync moveq #31,D7 lea palette1(PC),A1 lea hilfspalette1,A0 compcol: move.w (A1)+,D0 and.w #$0777,D0 move.w (A0)+,D1 and.w #$0777,D1 cmp.w D0,D1 bne.s fadeup dbra D7,compcol rts fadeup3: ; blendet Farbpalette hoch lea hilfspalette1,A6 lea palette1(PC),A5 bsr fade_up bsr vsync bsr vsync moveq #15,D7 lea palette1(PC),A1 lea hilfspalette1,A0 compcol6: move.w (A1)+,D0 and.w #$0777,D0 move.w (A0)+,D1 and.w #$0777,D1 cmp.w D0,D1 bne.s fadeup3 dbra D7,compcol6 rts fadedown3: ; blendet Farbpalette runter lea hilfspalette1,A6 bsr fadedwn bsr vsync bsr vsync moveq #15,D7 lea hilfspalette1,A0 compcol5: move.w (A0)+,D0 and.w #$0777,D0 bne.s fadedown3 dbra D7,compcol5 rts fadeup4: ; blendet Farbpalette hoch lea hilfspalette1,A6 lea instrpal(PC),A5 bsr fade_up bsr vsync bsr vsync moveq #15,D7 lea instrpal(PC),A1 lea hilfspalette1,A0 compcol7: move.w (A1)+,D0 and.w #$0777,D0 move.w (A0)+,D1 and.w #$0777,D1  cmp.w D0,D1 bne.s fadeup4 dbra D7,compcol7 rts fade_up2: $; blendet auf Weiss hoch moveq #15,D7 ful0: move.w (A6),D0 and.w #%111,D0 moveq #7,D1 cmp.w D0,D1 beq.s fcol2 addq.w #1,D0 move.w (A6),D1 and.w #%1 000,D1 or.w D0,D1 move.w D1,(A6) bra.s fcolok fcol2: move.w (A6),D0 and.w #%1110,D0 move.w #$70,D1 cmp.w D0,D1 beq.s fcol3 add.w #$10,D0 move.w (A6),D1 and.w #%1 0001,D1 or.w D0,D1 move.w D1,(A6) bra.s fcolok fcol3: move.w (A6),D0 and.w #%1110,D0 move.w #$0700,D1 cmp.w D0,D1 beq.s fcolok add.w #$0100,D0 move.w (A6),D1 and.w #%10001,D1 or.w D0,D1 move.w D1,(A6) fcolok: lea 2(A6),A6 lea 2(A5),A5 dbra D7,ful0 rts fade_up: moveq #15,D7 ful01: move.w (A6),D0 and.w #%111,D0 move.w (A5),D1 and.w #%111,D1 cmp.w D0,D1 beq.s fcol21 addq.w #1,D0 move.w (A6),D1 and.w #%1 000,D1 or.w D0,D1 move.w D1,(A6) bra.s fcolok1 fcol21: move.w (A6),D0 and.w #%1110,D0 move.w (A5),D1 and.w #%1110,D1 cmp.w D0,D1 beq.s fcol31 add.w #$10,D0 move.w (A6),D1 and.w #%1 0001,D1 or.w D0,D1 move.w D1,(A6) bra.s fcolok1 fcol31: move.w (A6),D0 and.w #%1110,D0 move.w (A5),D1 and.w #%1110,D1 cmp.w D0,D1 beq.s fcolok1 add.w #$0100,D0 move.w (A6),D1 and.w #%10001,D1 or.w D0,D1 move.w D1,(A6) fcolok1: lea 2(A6),A6 lea 2(A5),A5 dbra D7,ful01 rts fade_down2: moveq #15,D7 ful012: move.w (A6),D0 and.w #%111,D0 move.w (A5),D1 and.w #%111,D1 cmp.w D0,D1 beq.s fcol212 subq.w #1,D0 move.w (A6),D1 and.w #%1 000,D1 or.w D0,D1 move.w D1,(A6) bra.s fcolok12 fcol212: move.w (A6),D0 and.w #%1110,D0 move.w (A5),D1 and.w #%1110,D1 cmp.w D0,D1 beq.s fcol312 sub.w #$10,D0 move.w (A6),D1 and.w #%1 0001,D1 or.w D0,D1 move.w D1,(A6) bra.s fcolok12 fcol312: move.w (A6),D0 and.w #%1110,D0 move.w (A5),D1 and.w #%1110,D1 cmp.w D0,D1 beq.s fcolok12 sub.w #$0100,D0 move.w (A6),D1 and.w #%10001,D1 or.w D0,D1 move.w D1,(A6) fcolok12: lea 2(A6),A6 lea 2(A5),A5 dbra D7,ful012 rts draw_helps: ; a1=Screen lea 128(A1),A1 moveq #0,D0 move.w helpcount,D0 lsl.w #8,D0 ; *512 add.w D0,D0 lea helpplatten(PC),A0 adda.w D0,A0 moveq #15,D0 ; 16 Zeilen copyhelps: movem.l (A0)+,D1-D7/A2 ; 8 Longs movem.l D1-D7/A2,(A1) lea 160(A1),A1 dbra D0,copyhelps rts ;-! System - switch: ; Diese Routine tauscht die Bildschirme 1 + 2 bsr.s vsync ; auf VBL warten move.l screen2(PC),D0 move.l screen1(PC),screen2 ; Screen 1+2 tauschen move.l D0,screen1 setscreen: lsr.l #8,D0 ; Screen setzen move.b D0,$f8203.w lsr.w #8,D0 move.b D0,$f8201.w rts vsync: ; Diese Routine wartet auf das Vertical Blank Signal move.l $0466.w,D0 waitstrahl: cmp.l $0466.w,D0 beq.s waitstrahl rts cls: ; Lscht Bildschirm ; Parameter: a0=Screenadresse moveq #0,D1 ; alle Register lschen move.l D1,D2  move.l D1,D3 move.l D1,D4 move.l D1,D5 move.l D1,D6 move.l D1,D7 movea.l D1,A1 movea.l D1,A2 movea.l D1,A3 adda.l #200*160,A0 ; auf unteren Rand gehen move.w #199,D0 ; 200 Scanlines lschen clsloop: movem.l D1-D7/A1-A3,-(A0) movem.l D1-D7/A1-A3,-(A0) movem.l D1-D7/A1-A3,-(A0) movem.l D1-D7/A1-A3,-(A0) dbra D0,clsloop rts hbl_on: move SR,-(A7) ori #$0700,SR lea hbl_buff,A0 move.b $fa09.w,(A0)+ ; Werte retten move.b $fa07.w,(A0)+ move.b $fa13.w,(A0)+ move.b $fa1b.w,(A0)+ move.b $fa11.w,(A0)+ move.b $fa21.w,(A0)+ move.b $fa17.w,(A0)+ lea 1(A0),A0 move.l $0118.w,(A0)+ move.l $0120.w,(A0)+ move.l $70.w,(A0)+ move.l $70.w,old_vbl andi.b #$df,$fa09.w ; Timer C aus andi.b #$fe,$fa07.w ; Timer B aus move.l #newkey,$0118.w move.l #vblstart,$70.w move.l #hbl1,$0120.w ori.b #1,$fa07.w ; Timer B an ori.b #1,$fa13.w bclr #3,$fa17.w ; automatic EOI move (A7)+,SR rts hbl_off: move SR,-(A7) ori #$0700,SR lea hbl_buff,A0 ; Werte zurck! move.b (A0)+,$fa09.w move.b (A0)+,$fa07.w move.b (A0)+,$fa13.w move.b (A0)+,$fa1b.w move.b (A0)+,$fa11.w move.b (A0)+,$fa21.w move.b (A0)+,$fa17.w lea 1(A0),A0 move.l (A0)+,$0118.w move.l (A0)+,$0120.w move.l (A0)+,$70.w move (A7)+,SR rts vblgame: movem.l D0-A6,-(A7) lea $fa21.w,A0 ; Timer B DATA clr.b -6(A0) ; Timer B Stop move.b #15,(A0) ; 15 Zeilen zhlen move.b #8,-6(A0) ; Timer B Start move.l #hbl1,$0120.w movea.l palpointer1,A0 movem.l (A0),D0-D7 movem.l D0-D7,$f8240.w tst.w blinkanaus beq.s nixblinken eori.w #1,blinkdelay beq.s nixblinken addq.l #2,blinkpos movea.l blinkpos,A0 cmpi.w #-1,(A0) bne.s nixendblinkpos lea blinkcolors(PC),A0 nixendblinkpos: move.w (A0),palette2+2 move.l A0,blinkpos nixblinken: bsr controlmouse ; jeweilige Routine cmpi.l #$136d7c22,cheatmode ; Cheat aktiviert? beq.s timenotende tst.w timestop ; Zeit aus? bne.s timenotdraw addq.w #1,vblcount move.w timeverzoegerung,D0 ; Wartezeit cmp.w vblcount,D0 ; Wartezeit erreicht? bne.s timenotende clr.w vblcount tst.w blumjzverz ; Verz. an? beq.s noverzoegerung subq.w #1,blumjzverz bra.s timenotende ; Zeit anhalten! noverzoegerung: subi.w #1,time ; Zeit -1 bne.s timenotende move.w #-1,endeflag ; Spiel zu Ende clr.w time timenotende: bsr draw_time timenotdraw: jsr music+8 addq.l #1,$0466.w ; System VBL ganz abgeklemmt movem.l (A7)+,D0-A6 rte vblpause: ; VBL whrend der Pausefunktion movem.l D0-A6,-(A7) lea $fa21.w,A0 ; Timer B DATA clr.b -6(A0) ; Timer B Stop move.b #15,(A0) ; 15 Zeilen zhlen move.b #8,-6(A0) ; Timer B Start move.l #hbl1,$0120.w movea.l palpointer1,A0 ; Palette setzen movem.l (A0),D0-D7 movem.l D0-D7,$f8240.w jsr music+8 addq.l #1,$0466.w ; VSYNC movem.l (A7)+,D0-A6 rte vblgame2: movem.l D0-A6,-(A7) clr.b $fa1b.w movem.l hilfspalette1,D0-D7 movem.l D0-D7,$f8240.w jsr music+8 addq.l #1,$0466.w ; VSYNC movem.l (A7)+,D0-A6 rte vblmenu: movem.l D0-A6,-(A7) clr.b $fa1b.w movem.l hilfspalette1,D0-D7 movem.l D0-D7,$f8240.w tst.w scrollready bne.s nixdoscroller bsr restmouse bsr putmouse bsr scroller nixdoscroller:  jsr music+8 addq.l #1,$0466.w ; VSYNC movem.l (A7)+,D0-A6 rte controlmouse: tst.w kasten1aktiv bne.s notdrawmouse bsr restmouse bsr putmouse notdrawmouse: rts vblquit: movem.l D0-D7,-(A7) clr.b $fa1b.w movem.l hilfspalette1,D0-D7 movem.l D0-D7,$f8240.w movem.l (A7)+,D0-D7 addq.l #1,$0466.w rte vblstart: addq.l #1,$466.w rte ;- Keyvector -( newkey: ; neuer Keyinterrupt move #$2500,SR movem.l D0/A0-A1,-(A7) moveq #0,D0 lea $fc00.w,A0 ; ACIA-Statusregister abhol_loop: move.b (A0),D0 ; Wert holen btst #7,D0 ; Interrupt-Request? beq.s nixmehrkey ; nix mehr Interrupt move.b 2(A0),D0 ; Wert abholen tst.b keycounter ; gehrt das zum Paket? bne.s warpaketbyte cmp.w #$f7,D0 ; ist da ein Paket? blt.s istkeinpaket move.l #keybuffer+1,keypointer move.b D0,keybuffer sub.w #$f7,D0 lea paket_tabelle,A1 ; dort sind Lngen der Pakete move.b 0(A1,D0.w),D0 ; Lnge holen subq.w #1,D0 ; -1 weil das erste Byte schon da move.b D0,keycounter bra.s keytest istkeinpaket: move.b D0,keybuffer ; einfach ablegen bra.s keytest warpaketbyte: subq.b #1,keycounter movea.l keypointer,A1 move.b D0,(A1)+ move.l A1,keypointer tst.w keycounter bne.s keytest bsr new_mouse ; Mausroutine keytest: move.b (A0),D0 ; Status holen btst #0,D0 ; noch was zum abholen da? bne abhol_loop nixmehrkey: movem.l (A7)+,D0/A0-A1 bclr #6,$fa11.w ; Interrupt in Service lschen rte hbl1: ; setzt in Zeile 16 die Eispalette movem.l D0-A2,-(A7) lea $fa21.w,A0 clr.b -6(A0) move.b #4,(A0) move.b #8,-6(A0) movea.l palpointer2,A2 ; Palette 2 movem.l (A2),D1-D7/A1 ; Palette holen move.b (A0),D0 ; Zeile holen waitrand2: cmp.b (A0),D0 ; noch gleiche Zeile? beq.s waitrand2 movem.l D1-D7/A1,$f8240.w ; Palette setzen clr.b -6(A0) ; Timer B stop movem.l (A7)+,D0-A2 rte hbl2: ; setzt in Zeile 32 die Eispalette movem.l D0-A1,-(A7) lea $fa21.w,A0 clr.b -6(A0) move.b #4,(A0) move.b #8,-6(A0) movem.l hilfspalette2,D1-D7/A1 ; Palette holen move.b (A0),D0 ; Zeile holen waitrand3: cmp.b (A0),D0 ; noch gleiche Zeile? beq.s waitrand3 movem.l D1-D7/A1,$f8240.w ; Palette setzen clr.b -6(A0) ; Timer B stop movem.l (A7)+,D0-A1 rte DATA screen1: DS.L 1 ; Screen 1-4 screen2: DS.L 1 screen3: DS.L 1 screen4: DS.L 1 keyroutinen: DC.L endgame DC.L helpfunktion DC.L pause DC.L cheatlevel DC.L gameovererzeug DC.L addscore DC.L musiconoff keytab: DC.B 1 ; Escape DC.B $62 ; HELP DC.B $19 ; P DC.B $44 ; f10 DC.B 2 ; 1 DC.B 3 ; 2 DC.B $32 ; M DC.B -1 EVEN pauseroutinen: DC.L pausedraw ; Farben faden DC.L pausescroll ; Platte rausscrollen DC.L zerkriesel ; Platte nach Zufall krieseln blinkcolors: DC.W $10,$20,$30,$40,$50,$60 DCB.W 10,$70 DC.W $60,$50,$40,$30,$20,$10 DC.W $0100,$0200,$0300,$0400,$0500,$0600 DCB.W 10,$0700 DC.W $0600,$0500,$0400,$0300,$0200,$0100 DC.W $01,$02,$03,$04,$05,$06 DCB.W 10,$07 DC.W $06,$05,$04,$03,$02,$01 DC.W -1 instrpal: DC.W $00,$0777 palette1: $; Palette fr Zahlen DC.W $20,$0761,$0640,$0430,$0764,$0555,$0333,$00 DC.W $12,$23,$34,$45,$56,$0201,$0403,$0705 palette2: $; Palette fr Eisplatte DC.W $20,$70,$0300,$0533,$0333,$00,$0124,$0225 DC.W $0235,$0335,$0346,$0457,$0557,$0567,$0677,$0777 cheatpalette: ; Plattenfarben (oben) im Cheatmodus DC.W $0102,$0304,$0507 plattenfarben:  ; Paletten fr Eisplatte DC.W $20,$70,$0300,$0533,$0333,$00,$0124,$0225 DC.W $0235,$0335,$0346,$0457,$0557,$0567,$0677,$0777 DC.W $20,$70,$0300,$0533,$0333,$00,$0323,$0333 DC.W $0434,$0444,$0545,$0555,$0656,$0666,$0767,$0777 DC.W $20,$70,$0300,$0533,$0333,$00,$0100,$0200 DC.W $0310,$0420,$0531,$0642,$0753,$0764,$0775,$0776 DC.W $20,$70,$0300,$0533,$0333,$00,$01,$02 DC.W $13,$24,$0135,$0246,$0357,$0467,$0577,$0677 DC.W $20,$70,$0300,$0533,$0333,$00,$0232,$0333 DC.W $0343,$0444,$0454,$0555,$0565,$0666,$0676,$0777 DC.W $20,$70,$0300,$0533,$0333,$00,$0322,$0332 DC.W $0433,$0443,$0544,$0554,$0655,$0665,$0766,$0777 pausegraf: ; Nummern der Wegelemente fr Pause aus Wegstcken DC.B 6,1,5,0,6,1,5,0,2,0,2,0,6,1,1,0,6,1,1,0 DC.B 2,0,2,0,2,0,2,0,2,0,2,0,2,0,0,0,2,0,0,0 DC.B 2,1,4,0,2,1,2,0,2,0,2,0,3,1,5,0,2,1,1,0 DC.B 2,0,0,0,2,0,2,0,2,0,2,0,0,0,2,0,2,0,0,0 DC.B 2,0,0,0,2,0,2,0,3,1,4,0,1,1,4,0,3,1,1,0 schatten: ;$16 DC.W $00,$00,$00,$00,$00,$00,$00,$00 DC.W $00,$00,$00,$00,$c000,$00,$c000,$00 DC.W $00,$00,$00,$00,$c000,$00,$c000,$00 DC.W $00,$00,$00,$00,$c000,$00,$c000,$00 DC.W $00,$00,$00,$00,$c000,$00,$c000,$00 DC.W $00,$00,$00,$00,$c000,$00,$c000,$00 DC.W $00,$00,$00,$00,$c000,$00,$c000,$00 DC.W $00,$00,$00,$00,$c000,$00,$c000,$00 DC.W $00,$00,$00,$00,$c000,$00,$c000,$00 DC.W $00,$00,$00,$00,$c000,$00,$c000,$00 DC.W $00,$00,$00,$00,$c000,$00,$c000,$00 DC.W $00,$00,$00,$00,$c000,$00,$c000,$00 DC.W $00,$00,$00,$00,$c000,$00,$c000,$00 DC.W $00,$00,$00,$00,$c000,$00,$c000,$00 DC.W $00,$00,$00,$00,$c000,$00,$c000,$00 DC.W $00,$00,$00,$00,$c000,$00,$c000,$00 DC.W $00,$00,$00,$00,$c000,$00,$c000,$00 DC.W $00,$00,$00,$00,$c000,$00,$c000,$00 DC.W $00,$00,$00,$00,$c000,$00,$c000,$00 DC.W $00,$00,$00,$00,$c000,$00,$c000,$00 DC.W $3fff,$00,$3fff,$00,$c000,$00,$c000,$00 DC.W $3fff,$00,$3fff,$00,$c000,$00,$c000,$00 schattenmaske: DC.W $00,$00,$00,$c000,$00,$c000,$00,$c000 DC.W $00,$c000,$00,$c000,$00,$c000,$00,$c000 DC.W $00,$c000,$00,$c000,$00,$c000,$00,$c000 DC.W $00,$c000,$00,$c000,$00,$c000,$00,$c000 DC.W $00,$c000,$00,$c000,$00,$c000,$00,$c000 DC.W $3fff,$c000,$3fff,$c000 mauszeiger: DC.W $00,$0f00,$00,$00,$0680,$0f00,$80,$00 DC.W $0680,$0f00,$80,$00,$0680,$0f00,$80,$00 DC.W $00,$fff0,$00,$00,$76e8,$fff0,$08,$00 DC.W $76e8,$fff0,$08,$00,$08,$fff0,$08,$00 DC.W $76f8,$0f00,$70f8,$00,$0680,$0f00,$80,$00 DC.W $0680,$0f00,$80,$00,$80,$0f00,$80,$00 DC.W $0780,$00,$0780,$00 mauszeiger2: ; fr Menue DC.W $00,$80,$ff00,$00,$7e00,$0100,$8000,$00 DC.W $7c00,$0200,$8000,$00,$7e00,$0100,$8000,$00 DC.W $7f00,$80,$8000,$00,$7f80,$40,$8000,$00 DC.W $7fc0,$00,$8000,$00,$4fc0,$3000,$8000,$00 DC.W $07c0,$4800,$8000,$00,$03c0,$8400,$00,$00 DC.W $01c0,$0200,$00,$00,$c0,$0100,$00,$00 DC.W $40,$80,$00,$00 chars8: DC.W $fe18,$3c18,$183c,$ffe7,$7e,$1818,$f000,$05a0 DC.W $7c06,$7c7c,$c67c,$7c7c,$7c7c,$78,$07f0,$1104 DC.W $fe3c,$241c,$3899,$ffc3,$c3,$3c1c,$c000,$05a0 DC.W $c606,$0606,$c6c0,$c006,$c6c6,$60,$0ff8,$0b28 DC.W $fe66,$24f6,$6fc3,$fe99,$d3,$3c16,$fe00,$05a0 DC.W $c606,$0606,$c6c0,$c006,$c6c6,$3c78,$1fec,$0dd8 DC.W $fec3,$e783,$c1e7,$fc3c,$d3,$3c10,$d800,$0db0 DC.W $00,$7c7c,$7c7c,$7c00,$7c7c,$0660,$1804,$0628 DC.W $fee7,$c383,$c1c3,$f999,$db,$7e10,$de00,$0db0 DC.W $c606,$c006,$0606,$c606,$c606,$7e7e,$1804,$07d0 DC.W $fe24,$66f6,$6f99,$f3c3,$c3,$1070,$1800,$1998 DC.W $c606,$c006,$0606,$c606,$c606,$6618,$1004,$2e10 DC.W $fe24,$3c1c,$383c,$e7e7,$c3,$38f0,$1800,$799e DC.W $7c06,$7c7c,$067c,$7c06,$7c7c,$3c1e,$1e3c,$39e0 DC.W $fe3c,$1818,$1800,$00,$7e,$1060,$00,$718e DC.W $00,$00,$00,$00,$00,$00,$1754,$3800 DC.W $30,$cc00,$1800,$3818,$0e70,$00,$00,$02 DC.W $7c18,$fcfc,$c0fe,$7efe,$7c7c,$00,$0600,$603c DC.W $30,$cc6c,$3e66,$6c18,$1c38,$6618,$00,$06 DC.W $c638,$0606,$c0c0,$c006,$c6c6,$1818,$0c00,$3066 DC.W $30,$ccfe,$606c,$3818,$1818,$3c18,$00,$0c DC.W $e678,$0606,$d8c0,$c00c,$c6c6,$1818,$187e,$1806 DC.W $30,$6c,$3c18,$7000,$1818,$ff7e,$7e,$18 DC.W $d618,$7c3e,$fefc,$fc18,$7c7e,$00,$3000,$0c0c DC.W $30,$6c,$0630,$de00,$1818,$3c18,$00,$30 DC.W $ce18,$c006,$1806,$c630,$c606,$1818,$1800,$1818 DC.W $00,$fe,$7c66,$cc00,$1c38,$6618,$3000,$1860 DC.W $c618,$c006,$1806,$c66F0,$c606,$1818,$0c7e,$3000 DC.W $30,$6c,$1846,$7600,$0e70,$00,$3000,$1840 DC.W $7cfe,$fefc,$18fc,$7cc0,$7c7c,$30,$0600,$6018 DC.W $00,$00,$00,$00,$00,$00,$6000,$00 DC.W $00,$00,$00,$00,$00,$00,$00,$00 DC.W $787c,$fc7c,$fc7e,$7e7e,$c6fe,$fec6,$c082,$867c DC.W $fc7c,$fc7e,$fec6,$c6c6,$c6c6,$fe3c,$80f0,$2000 DC.W $ccc6,$c6c6,$c6c0,$c0c0,$c638,$06cc,$c0c6,$c6c6 DC.W $c2c6,$c6c0,$38c6,$c6c6,$6c6c,$0e30,$c030,$7000 DC.W $dcc6,$c6c0,$c6c0,$c0c0,$c638,$06d8,$c0ee,$e6c6 DC.W $c2c6,$c6c0,$38c6,$c6c6,$3838,$1c30,$6030,$d800 DC.W $d4fe,$fec0,$c6f8,$f8de,$fe38,$06f0,$c0d6,$d6c6 DC.W $fcd6,$fc7c,$38c6,$c6d6,$1038,$3830,$3031,$8c00 DC.W $dcc6,$c6c0,$c6c0,$c0c6,$c638,$06d8,$c0c6,$cec6 DC.W $c0ca,$d806,$38c6,$6cee,$3838,$7030,$1830,$00 DC.W $c0c6,$c6c6,$c6c0,$c0c6,$c638,$06cc,$c0c6,$c6c6 DC.W $c0c4,$cc06,$38c6,$38c6,$6c38,$e030,$0c30,$00 DC.W $7cc6,$fc7c,$fc7e,$c07c,$c6fe,$fcc6,$7ec6,$c67c DC.W $c07a,$c6fc,$387c,$1082,$c638,$fe3c,$04f0,$01fc DC.W $00,$00,$00,$00,$00,$00,$00,$00 DC.W $00,$00,$00,$00,$00,$00,$00,$00 DC.W $c000,$c000,$0600,$1e00,$c038,$18c0,$3800,$00 DC.W $00,$00,$3000,$00,$00,$0e,$1870,$1000 DC.W $6000,$c000,$0600,$3000,$c000,$cc,$1800,$00 DC.W $00,$00,$3000,$00,$00,$18,$1818,$3860 DC.W $307c,$fc7c,$7e7c,$307c,$fc38,$18d8,$18c6,$fc7c DC.W $fc7e,$f87e,$78c6,$c6c6,$c6c6,$7e18,$1818,$6cf2 DC.W $06,$c6c6,$c6c6,$fcc6,$c638,$18f0,$18ee,$c6c6 DC.W $c6c6,$ccc0,$30c6,$c6c6,$6cc6,$0c30,$180c,$c69e DC.W $7e,$c6c0,$c6fc,$30c6,$c638,$18d8,$18d6,$c6c6 DC.W $c6c6,$c07c,$30c6,$6cd6,$38c6,$1818,$1818,$0c DC.W $c6,$c6c6,$c6c0,$307e,$c638,$18cc,$18c6,$c6c6 DC.W $fc7e,$c006,$30c6,$38ee,$6c7e,$3018,$1818,$00 DC.W $7e,$fc7c,$7e7e,$3006,$c638,$18c6,$3cc6,$c67c DC.W $c006,$c0fc,$1c7c,$10c6,$c606,$7e0e,$1870,$00 DC.W $00,$00,$00,$30fc,$00,$f000,$00,$00 DC.W $c006,$00,$00,$00,$fc,$00,$1800,$00 kasten: DC.W $f,$00,$00,$00,$8001,$00,$00,$00 DC.W $8001,$00,$00,$00,$8001,$00,$00,$00 DC.W $8001,$00,$00,$00,$8001,$00,$00,$00 DC.W $8001,$00,$00,$00,$8001,$00,$00,$00 DC.W $8001,$00,$00,$00,$8001,$00,$00,$00 DC.W $8001,$00,$00,$00,$8001,$00,$00,$00 DC.W $8001,$00,$00,$00,$8001,$00,$00,$00 DC.W $8001,$00,$00,$00,$8001,$00,$00,$00 DC.W $8001,$00,$00,$00,$8001,$00,$00,$00 DC.W $8001,$00,$00,$00,$f,$00,$00,$00 kriesldat: DC.W $fffd,$fff7,$fdff,$fffb,$bfff,$feff,$fffe,$ffdf DC.W $dfff,$7fff,$ffef,$ffbf,$efff,$f7ff,$fbff,$ff7f DC.W -1 krieslopcodes: DC.W $e278,$e478,$e678 removeani1: INCBIN 'REMOVEAN.IMG' obenplatte: INCBIN 'OBENPLAT.IMG' tilesgrafik: INCBIN 'TILES.IMG' weggrafik EQU tilesgrafik+(43*160) helpplatten: INCBIN 'HELPPLAT.IMG' font: INCBIN 'FONT2.IMG' eisplatte: INCBIN 'EISPLA2.IMG' buffers: INCBIN 'GAMEAREA.IMG' menuplatte: INCBIN 'MENUPLAT.IMG' music: INCBIN 'MATCHIT.MUS' paket_tabelle: ; hier steht die Lnge der Tastaturpakete in Bytes DC.B 6 ; $f7 (absolute Mausposition) DC.B 3 ; $f8 - $fb (relative Mausposition) DC.B 3 ; $f9 DC.B 3 ; $fa DC.B 3 ; $fb DC.B 7 ; $fc (Uhrzeit abfragen) DC.B 1 ; $fd (?) DC.B 2 ; $fe-$ff (Joystick) DC.B 2 ; $ff EVEN fonttabelle: ; in der Tabelle liegen die Positionen der Zeichen im Font, gleich mit ; Gre multipliziert (14*10)=140 daher auch Words DCB.W 33,46 ; 0-Space DC.W 26 ; ! DC.W 41,46,46,46,46,40,43,44,46,46,42,45,39,46 ; "-/ DC.W 27,28,29,30,31,32,33,34,35,36 ; 0-9 DC.W 37,46,46,46,46,38,46 ; : bis @ DC.W 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 DC.W 16,17,18,19,20,21,22,23,24,25 ; A-Z fonttabelleende: fonttabellelaenge EQU fonttabelleende-fonttabelle welldonetext: DC.B "WELL DONE!",0 clearedstagetext:DC.B "YOU CLEARED STAGE ",0 scoretext: DC.B "SCORE :",0 timebonustext: DC.B "TIME BONUS:",0 helpbonustext: DC.B "HELP BONUS:",0 pressbuttontext:DC.B "HIT BUTTON TO GO ON!",0 gameovermess: DC.B "GAME OVER",0 checkmatedmess: DC.B "CHECKMATED!",0 timeoutmess: DC.B "TIME OUT!",0 gamesolvedmess: DC.B "GAME SOLVED!",0 madehighscoretext:DC.B "NEW HIGHSCORE!",0 onplacetext: DC.B "YOU ARE ON PLACE",0 enternametext: DC.B "NOW ENTER YOUR NAME:",0 defaultname: DC.B "MR RETURN ",0 stage64text: DC.B "YOU SOLVED THE GAME!",0 bonus64text: DC.B "SOLUTION BONUS: 5000",0 instrtext1: DC.B "*",0 DC.B "* INSTRUCTIONS *",0 DC.B "*",0 DC.B "MATCH-IT! is a game very similiar to",0 DC.B "'Shanghai'. Your target is to remove",0 DC.B "all tiles from a gameboard.",0 DC.B "This sounds easy, but there's a time-",0 DC.B "limit that makes the game very hard.",0 DC.B "You can select tiles by clicking on",0 DC.B "them with the left mousebutton.",0 DC.B "Deselect them with right mousebutton.",0 DC.B "You just can remove two similiar tiles",0 DC.B "and the connection line just can have",0 DC.B "two corners and must be on free area.",0 DC.B "There are some special tiles:",0 DC.B "FLOWERS AND SEASONS",0 DC.B "You can remove every flower with every",0 DC.B "flower (the same with seasons).",0 DC.B "Flowers and Seasons stop the timer for",0 DC.B "some seconds.",0 DC.B " ",0 DC.B "PRESS MOUSE-BUTTON TO GO TO NEXT PAGE!",0 DC.B -1 instrtext2: DC.B "To make the game easier, there is a",0 DC.B "HELP-option. At the beginning of the",0 DC.B "game you have two helps. If you need",0 DC.B "help, just press on the HELP-KEY.",0 DC.B "If you completed a level without",0 DC.B "using the helpfunction, you get",0 DC.B "one help for free. All helps left",0 DC.B "will be added to your score at the",0 DC.B "end of each stage, so think when",0 DC.B "using them.",0 DC.B " ",0 DC.B "Possible keys during game:",0 DC.B "-P- Pause game (try this) ",0 DC.B "-HELP- Get help from computer",0 DC.B "-ESC- Abort game ",0 DC.B "-M- Toggle Music on/off ",0 DC.B " ",0 DC.B "PRESS MOUSE-BUTTON TO GO TO MENU!",0 DC.B -1 scrolltext: DC.B " WELCOME TO MATCH-IT! THIS GAME IS" DC.B " BUDGIE LICENCEWARE! IT WAS WRITTEN BY" DC.B " NEW MODE (CODING), SLIME (GRAPHICS) AND BIG ALEC" DC.B " (MUSIC). HIGHSCORES WILL BE SAVED ON DISK!" DC.B " SO NOW HAVE FUN WITH THIS GAME! BYE!" DC.B " ",0 EVEN menutext1: DC.B "START GAME",0 menutext2: DC.B "SEE HIGHSCORES",0 menutext3: DC.B "INSTRUCTIONS",0 menutext4: DC.B "QUIT",0 menutext0: DC.B "MATCH-IT !",0 savemess: DC.B "SAVING HIGHSCORES!",0 wpmess: DC.B " ",0 DC.B " ",0 DC.B "CAN'T SAVE SCORES",0 DC.B " ",0 DC.B "YOUR DISK IS",0 DC.B "WRITEPROTECTED.",0 DC.B " ",0 DC.B "SPACE TO TRY AGAIN",0 DC.B "OR -ESC- TO CANCEL",0,-1 EVEN filename: DC.B "HIGHSCOR.ES",0 EVEN highscores2: DC.W 1000 DC.B 'NEW MODE ' DC.W 900 DC.B 'SLIME ' DC.W 800 DC.B 'BIG ALEC ' DC.W 700 DC.B 'BUDGIE UK ' DC.W 600 DC.B 'DELTAFORCE' DC.W 500 DC.B 'FRONT 242 ' DC.W 400 DC.B 'KRAFTWERK ' DC.W 300 DC.B 'NITZER EBB' DC.W 200 DC.B 'THE SHAMEN' DC.W 100 DC.B 'THE CURE ' DS.B 512-120 EVEN budgie_pal: dc.w $0,$0200,$0300,$0410,$0520,$0631,$0742,$0753 dc.w $0764,$0775,$0776,$0777,$0,$0,$0,$0777 budgie_pic: INCBIN 'BUDGIE.IMG' BSS ; - System - ssp: DS.L 1 ; alter Supervisor Stack hbl_buff: DS.L 5 ; alte Interruptwerte oldpal: DS.L 8 ; alte Palette (16 Werte) oldstack: DS.L 1 leerfeld: DS.L 8 oldscreen: DS.L 1 oldres: DS.W 1 old_vbl: DS.L 1 ; - Variable - leveltab: DS.B 64 ; dort sind die Levelnummern zufallsm. verteilt highscoremade: DS.W 1 ; ist Highscore gemacht worden? keycounter: DS.W 1 keybuffer: DS.B 8 ; dort werden die Pakete abgelegt keypointer: DS.L 1 ; jeweils ein Pointer auf die Daten palpointer1: DS.L 1 ; Palettenpointer fr Raster palpointer2: DS.L 1 savepalpoint1: DS.L 1 ; dort wird Pointer gerettet savepalpoint2: DS.L 1 ; dort wird Pointer gerettet blinkpos: DS.L 1 ; Pointer fr blinkenden Kasten blinkanaus: DS.W 1 ; 0=Blinken aus, 1=Blinken an blinkdelay: DS.W 1 ; Verzgerer fr Blinken screennumm: DS.W 1 ; dort steht aktuelle ScreenNr. weg: DS.B 18*8 ; Dort wird der Weg gespeichert matchitbuff2: DS.B 20*10 matchitbuff: DS.B 18*8 ; Dort sind die Tiles abgelegt workbuff: DS.B 18*8 ; Dort drin wird gearbeitet posbuff: DS.B 16*6 ; Die Positionen der Tiles anzahl: DS.W 1 ; Schleifenzhler mousek: DS.W 1 ; Maustaste mousex: DS.W 1 ; Mauskoordinaten mousey: DS.W 1 hilfspalette1: DS.L 8 ; Palette 1 whrend Pause hilfspalette2: DS.L 8 ; Palette 2 whrend Pause musicflag: DS.W 1 ; 0 oder 1 rettbuff: DS.B 212  ; Rettbuffer fr Maus counter1: DS.W 1 ; Zwischenvariable zum Zhlen counter2: DS.W 1 ; daselbe fr Port 0 textpos: DS.L 1 ; Position im Scrolltext mempos: DS.L 1 ; Position im Fontbuffer mousepointer: DS.L 1 ; Zeiger auf Grafik fr Mauszeiger zeichen: DS.W 1 ; soviel schon gescrollt endeflag: DS.W 1 ; dort wird Ende angezeigt regs1: DS.L 3 ; Register fr Lschroutine regs2: DS.L 3 ; Register fr Lschroutine xpos1: DS.W 1 ; Koord. im Feld ypos1: DS.W 1 level: DS.W 1 ; aktueller Level paaranzahl: DS.W 1 ; Anzahl der Paare auf dem Feld helpcount: DS.W 1 ; Anzahl der Helps blumjzverz: DS.W 1 ; Verzgerung durch Blume, etc. blumjzverz2: DS.W 1 ; Hilfs-Verzgerung fr Blume kasten1aktiv: DS.W 1 ; Kasten 1 an/aus Flag time: DS.W 1 ; Zeit Spieler1 timeverzoegerung: DS.W 1 ; Werte von 70-20 highscoreplatz: DS.W 1 namebuff: DS.B 22 score: DS.W 1 ; Punkte! stage: DS.W 1 scrollready: DS.W 1 scrollsavebuff: DS.B 15*160 helpverbraucht: DS.W 1 ; 0= Keins verbraucht,1=verbraucht helpbonus: DS.W 1 ; Restliche Helps * 100 timestop: DS.W 1 ; Zeit anhalten=1 sonst 0 readycount: DS.W 1 ; Zhler fr Scrolling vblcount: DS.W 1 ; Zhlvariable tile1selektx: DS.W 1 ; X-Koord. des 1. Tiles tile1selekty: DS.W 1 ; Y-Koord. des 1. Tiles tile2selektx: DS.W 1 ; X-Koord. des 2. Tiles tile2selekty: DS.W 1 ; Y-Koord. des 2. Tiles tile1selektpos: DS.B 1 ; Pos. des 1. Tiles tile2selektpos: DS.B 1 ; Pos. des 2. Tiles cheatmode: DS.L 1 ; Pos. fr Cheatmode cheatpoint: DS.L 1 ; dort Cheatmode hexdezbuff: DS.B 6 ; 6 Zahlen hexdezbuff2: DS.B 6 ; fr Retten fontbuff: DS.B 47*15*10 ; 47 Zeichen*15 Scanlines*10 Bytes wege: DS.B 20*10*200 highscores: DS.B 512 DS.B 512 screenbase: DS.B 32000*4 ; Platz fr 4 Screen DS.B 20 ; 20 Kilo Stack gengt! stack: END m0  `U2&? 8@PV0=" RX80L x |R>- X8Rl- H$P- pRp0l d `Z<0;j# 0 T0t<T80pX`]4>/`  -a*&Wgz 0t |\T< jo\`x n?p 0D| ~V6h`X 9^87?"@m2  `0{@Æ?x `̼spck 𓨈x$0H 0 D T Dk`%<<& W.r9 80 @Kxx&-b&f,0 @ 8 Drb$\?<qgxn@ˆHL!6]Ϥ?<0D < @@, p=_"`ۆ@Cǁ8o` @>'Xy"QP\ -(<0D < @ l V8]|"@ABE8m~ x TN({pD8cp0D0D< @@0$;@.dyDA8`.? `H0D8Ap`T`p0 \$@ x  Y@t~=D@8/"1v]0px,00 |@ *p ЫlxA:> d{p@H$00 b0x s]AA3<8!`7W3p80 Ph ᐈo A@0>! eD/0<0 ">D G81@86!p ??p,0$6  }`D8"#!pc 8$0  4; D@8AA'7 `(i4p$0  @f4`P#  }~w,hp@@8 &0. ʃ86H0#@ +ч<qEl G`8 p"0O,d0,.w@aցIa8G8PW`1?1+-Y}SrsDFہ@xF5  >\?Y[<܄ ˥8+"}3S AMP %:Mk= .k|?+*?pUas Ud1<3Jt(:+<0u?'gx>N>0<`#6`66|@ ~? 78#c @M@ 0&*nO#P`F8`jR=00 p |UMOo  u7`}h^dǜ8Ygap5,#`#xPxp P@0:|   t@  X@P0xh Zdp0f^` & 0f x"P@"0`t4H"0`@|&@@@$0@, 1ACEߌ x }aPX  f 9```urt32}@@g''D tI  O@? ?,48V  ?AA@@zX8  Pl`h0@@ ?> `L083~ =AÀ`X gAl  `%f0Y ^aXI/9  @xz#/wX !.?`p  <>#?wX  j\ ?`+% h-a >>#%gH0 !Ho0"0OU1c*W&gz P n =! !gH0%@0a  6Uǁ8lp?p  Hp x0 1P0!gH0,`K"5p `r{;c{< 7' ̼sp ! p!gH0YqF8RWN33>Xgck x$ ' 2 #&8-b& 9)Pp!gH0_A(pzׁ~RLV f,ʷpN5)8PL!6] (5@0!gH0i VQpxq?@q=Ϛ?<x?d0py"QP\ -$)`!gH02?H?/ F6-(<bkk R{D8cp=(-p!gH0r+78 Pt? `0D?\D8Ap94%0p!gH0dB?dX080i`T`p?;`hv]0p=<%@0!gH0͂>b<0xxpx, 0'p^4d{p-8! !gH0҂=r,1MH|?@H $0'D017W3=8!0agH0׀1DA3O|?p 8@0eD/<`!'p3i`3)9x0 <.@ ! ??<0!'p3!"p70p ,~@1p !pc>agp7K06  8$]]bc`4؈p?>!q`6@G84?^ AA$@8`w,Xp@@?!``4Z%7^H?#" 0 @8&0HG8 !Q@ 7#7,A>6 Oop"T?@(@xG8PW`1> 0m q~f'3H|0nC܇?1MS`~ Z>\?Y[<~@k\ O0 vf ypP opÊ Ӈ8Z'@ =.k|  >f <г<<@0P ֿX`~?vN34Jt 6X 8 f^l%@ _?Ƞo pɁ(:d ^ 0 T:< >@ x׀1@xCG~ <``#6 W97F(0 |78 | @@@$ta ~!!t#c sO0@)!6`Mn? w@B~ @1Yx@ Op@ ί0lB 8 @\b M-.'At 辧߃|L0+w(|@`'g[6`, Hz?<&NN\BgNA?<NNT#H`L#$OByےa 6a A(pBQA0<WBQL(HޜAm` < aTA <q aDaa!+pa3B#3#18߾B3dޘ3dޚ3L(Hޜ!+zp z+a(TA6"z+C E G I 0<"$&(QA[@"z+p(rtaRA["z+p(r4<&aA["z+~p(r4<KaA[."z+hp(r4<paA[;"z+Rp(r4<aa'A"z+8Cs0<W"QBya%lJyfa @ByޖB9ۖ 9ۖg 9ޖgp09ޚ@%%H@|nH@J@faDa%Nab`|fa.a%8ap`|faa%"a`t|g .`3a&C z*vAs0<W"QNuBy 3 33F#0߾a&a"JyjaNu yg yf3t!+pa*a#Aޜp0wQ!+Tpa&Ha z)a&HAT"z)p(rtaAT"z)p(rt(a09 aApa"z)rt(ap09d3r ygJypfRyATp(rtF"z)LaATp(r4<Z"z)6aATp(r4<n"z) avaaLaxa"~a%rQ>9SGka%`SyRy aaHQ~a%BQ~>9rdSGk&r a%(Qydryd aa:QRy yA fJ3AUTp(r4<"z(pa AUip(r4<"z(Za y aa`Zaa" z(6a$By ygUy`NuS"Hrtvxz>GAGBGCGDGAGBGCGDGAGBGCGDGAGBGCGDQ2222QNuaTA]"z'0<?"Q~ABp0Qa#a#G|f~ a#Qa~a#QaNuA@ta.a#a#A@p2AwfQNu"z'20<?BQNu0@gS@2A@0`.0@pg@2A@0`0@g@2A@0AQNuA]CBp24BAAgSB624BpApAgBB24BAAgBB2Qa"a"a"a"CBA]p2AwXfQNu m|"f3NuATpr4<"z&2aByޖ9ޖgNu!+paa aaNuMb~|0a BApr4"z$aAp r4"z#a0a Apa Hr4"z#aM FRG| fNu"z#C,(a09 a Apa "z#r tFaPNu"z#C8aZ09a Apa "z#tr 4<ZaNu"z#dCE(a(09ra tApa r 4<n"z#Hyb/<??<?NAO f??<>NAXpNuA[Cb0<Q3ےNuBgHy[?<Hyb/<??<@NAO f??<>NAXpNupNu z!a:tJk^v NJgRC`*HrCI N"z!p(aPB,M` z!atJk(v NJgRC`*Hr(CI N"z!lpPahB ,M`NuUyjJ3 y߶Jf#Z(߶ y߶p@MS06MM#ߺR߶~(yߺ&z Gs$L K89zp0h@r2@0HA0Ar2@0HA0Ar2@0HA0Ar2@0HA0Ar2@0HA0Ar2@0HA0Ar2@0HA0Ar2@0HA0Ar2@0HA0Ar2@0HA0Ar2@0HA0Ar2@0HA0Ar2@0HA0Ar2@0HA0Ar2@0HA0Ar2@0HA0Ar2@0HA0Ar2@0HA0Ar2@0HA0Ar2@0HA0AA@E QGIQlNua3L(Hޜ!+papN@aTLH@ 9Hata~L`.y$aNuNuAg@Nu m|"f3Nu yp09N@B9ۖNu m|"fyd "za~Nu09ޘ\@HS@r29ޚ\AA33NuJ9f^t09294@AJ0 g:3Haa BL3z3|a ByNuJ9gz0929:@AJ0Pgİyzf y|g3~3x90@0PaJGf4609z29|H3aa B09~29a LByޖa J@f:~ aQRy a TSyf 3NuByB9aNu09~29 za(By`J9gf y鈱g&# m|"fLH-3a <`n fh><`b<f><RA f><@`J fD><`><f><SA f>< `& f ><`S@~ f>< ` f><@@f@Af<09z29|49~69 zaa4a 6Jyg 3NuH$zHP@ A@C?rpLz:BCDFERZRZRZRZEQa L` <b#,}#,}#,}#,Byۺ3tL@H z"a za za za ~a n `#-ۢ#-ۦ#-$۲3۶By۸ : H#ۖ۞By۔BۖBۚapN@paa 4NuAS0<Zr20QAm`Cp$HrtLx4DEFFBH|C EQAR@|fA`ʰ|(fA`|/fNu!+TpL(Hޜa f z a jB3t3ޘ3hޚByޖByp3ByB930aBaaBy3ByxByBya`@|nA ~HLH-3۶!*FpaxL(HޜH޼a4aBBytNu!+paDBaxa@|nHA , pN!*Fp#۪ۢ#ۮۦNu yۢ#۪LHޜ#ޜۢ yۦ#ۮLH޼#޼ۦNua z aaA J"z vC@pr$IvgSCG<(Jv((IQEQC QaACQA@C@QNu yvo^09ۺAH pA "H/ A0<L~H~L~H~L>H>AQ"_Cr0<""CQRyvNua09ۺR@@3ۺHA~ 0HNuaL@|g@A3%a0@6M*z>K ~ VfM"M N4<2<&I0|fAp0[[[[xGQCQMa\Q`\Mޜa"aHM޼a~Aޜ0@wfQNu~0@gS@2A@<`.0@pg@2A@<`0@g@2A@0@p2Ap@g@2A@<`0@2A@g@2A@0@p2Ap@g@2A@<`0@2A@g@2A@fl8f8 0f0`l8< x ~0l<p~~|>|~0 0l0<00|f8f0`` ~00lFvp0@||||0` `x||~~~||~< 88ll00p88880`08|88800188l88p00888l80 0||~|~|z8|8< 880p`008`0||~|0|8|~~x~l80l 0 ƞ~08|0l8 0~8~08l~0~|~~08<||~p0xxx????????????????????????????????????????????????????????????????????????   4Dv+K%5(ñ~i{Fv</h՗X"H_p܏E?w2EZ|Ցo_WKO}4MoiVFb 2~ V|Eet].knNS O>}-7av_9Ft./_t30Df>?_!aa3~&_ߠÞ?jjoĐ;$$wߘ? M\~ ~Օ?ii$$ '|s749+d|?%~̡2ayyɛ6|'/ ;sC}yy0$$GztW >~Nk`s?/3_֠/ߒay8$[\?>tGyy8!!C=[  Ǐ?I~T`ÿ<`G/l'7?GJx_Cx|xyy8!!<>?y{^y' `ߓ: o$qy''xz^?~Ii(;$$_I}|W}?`}x}>% Ay8=o>d`faa{_A=+Cr`ǘx|^Wz^}~ $'#OQ /#/=}Î30\O/>^T6˙~rL?ʝ7b>s?XɆ?tۋ7axz I]S\^5\ˣx&+t}O>U?kΕ%t_O<zr/W1_ANZzB^\ǣ~~t ת+C =]zZ gW^С?^|{u ?9ko/'O^uByzy͇,C%_09[dZ F4}k ^|7wb>+ֶ/Izig<Ï~zv|spln`bG~GQÆ~Fj⎬n`sp\~|~_v7*p^\]>rp?q}ds~~?c>{x>p?q]~s~қq}f?~>7n$+WgGy>|~ʦ?~>]{>zy>??|~~;ea?m?wɒcԩIk]ɓիɒwɓw~l թɓVݺɓիɒIlHcǃ??+T;֓G;~2y>?]~{~?ڳy?>&|~~ƫT֓+.q?*V;֓G=+W;֓Gnlƫֻ֓7q?GG*T;VDGG=FGzy}V{Vګy|GFoyGFVVaFG6qLFG*W;VGGONu[_NdOIqZDFGnUU;W*DFG)XgLJ?LFG*W;VGGFGUUWDGF5DFGnUU;W*DFG#XgLJ?tv~q~l~6~~@GFdGFUr8~KvdT~|[g~ͮmo8|~dI'd䎯M4\?Z??.bXa'[p刱:N\EŀbeL?>2YȟȞ>s~f~? @cbQD2`GFugs†‡|kg||MG‡?~r[Zp>?c\ooVIib$b⟗4HNO-GF~2FGLFzfK`xx~.0ݺ@n~ժ~+uի*:vիժUUn}Uժթի~*u@^U~+ݹ@jE%~=#`../TVjN@DF`PGjODGjGF*!R,7Oh||:J8y}<3yo={x8yW}??[ri+h}l?B}9ys|2==5[[=CC=<#hCC4[5B™=4=[SC=f2gLC݃Fj;ɨWV+9~~E~~V};jɫk:kC,#Gݺݻ(cɒɓ:k׷n]ݻAlݺݻ9\+k~]ݺA&ݻݺTɒɓ8ׯoݺݻ;LGÇ?ٛٛYfgYfg|Yٛ@|?>~M}~m~~GS}}|?>@tYٛfgfgٛٛ6Clٚٛ٘fgYfg6ٛٛٛ@mpMvnofyFconigٛٚfgfgmYٛ@i"l~ٚٛfgfggnٛٛٛ@ !o5Nrs1srj! ٛٛٚYfgfgYٛ@i"~6<sysKv~U'~@7HDH ‚ƒ"#FWa~<>?g1FsÜv~U'~@wHNH ‚ƒ"#F.6Wat>?Nr>?l1rp~L~@w U‚ƒ2"#GT~??GGGggΗFGGnb~U?~@GHH ‚ƒ"#%FM44D*p~r@NOzAAlfq~qU~`ZjO ‚ƒH3"#Fc{??O>NONz6ÎÏS~~`G` ‚ƒ2"#%GレiO{O[<>?<g~U3~ ZK` ‚ƒ2"#%GレiO^&]6~ßx>?|g2 U*~7zN``@‚ƒ3"#FヲSCЃ/j5pR`??x|>?OyUf:c|d~=~wKH ‚ƒ3"#%Fj1=~>?>dS⟈?z{Á爦#"dw#VWtDFGwu7nj;~n\wwWg lnoi> `6 onmnwvWV"FGEFGuVW5UWj;]C~X7NO` @'ΛGFonoEnoUno-moj-mÇx>?JB‡Y5DFGc@#"#"# b5GFO‡†s?>c7ꏝxbb5rvgBBg晘 {ބ 1 h~ |?Ţ~ Q4$ɑԫͱ,~F{9MD||s۳~{>?A>?k@Lgtf#k?>v>?~o>MD||cg`unRoxy54' 2?ھGU;6MD||i>/tyB)a>?>E7d?> ?>oi?4^i3rSo;kC?6Nv/~~~m~~~~~?~?~?~~~}?~W?~?~~k~~U~?<cv9~~~e>~?~َ~>om~#=?~H?~~:?;9oڞ~6i32m9o?~~+~~~~~><ci>"j|]?__~~~y~Ͼ~}~7|cp܏E?wV|Eet/_t30D>>?~Օ?ɛ6|'/ ;sC[\?>tGJx_Cx|x'xz^?~o>OQ /#/tۋ7axzkΕ%t_O<ת+C uByzֶ/Izig<p܏E?wV|Eet/_t30D ?? ' ;sC>tG@ Cx|x?z?~> /#/@ 7axz%_O<ת+C uByzֶ/Izig<p܏E?wV|Eet/_t30D op?`? {sCG@ {W|x?~|>|#/@ gxz?<ת+C uByzֶ/Izig<p܏E?wV|Eet/_t30D `pp`p? ppp@ pP?ppppp@ `pp8ת+C uByzֶ/Izig<p܏E?wV|Eet/_t32+ op3`;? {}oW@ zV|,?np>?}{{}ҳ@ g{w?.>-ת+CDGuByֶ/Izig<p܏E?wV|Eet/_390D ++?}? ";sC3#~tG@ GHs|x?J?~21>3#-#/@ vxz$y<ת+K3 uBzֶ/Izig<P40B0PP!DEbD2!"#2A20$DUDV #1010A0`!0A00!BWA!4#W2D!DD'EUc"!"pA"0p1'p!32A'ps3A#pDEf"'pTEUegp20#p1fpVws#ec""!DQ7w2#$7ws0DDA#p!!A""0A7202A"" Ws""'UVgs2"#p""!7p7s""wws!'pVWp3weVVgw#7pW!Wpgp20Wwws"0$""31Vww"0w"3!!#7w3p!7E0Wwwq"7ew"'Wwws3Ww37eegs27p7w3"#p1"7wr""wpr'Ug#7pegwb 5gWWFw7W2#Awws"0Vp27p#wp1"#uwpw%WW#wFwp37W"0W7eVgs7w2#p"7"p7p!'Vw7wVweW"26WV"dWVp#V"#pp2#Up3w20wp#7Fppp4cW37pUpwF3Ffw27p7p#w#e7UDV2'Eq'wfpeg20wVfp2 egefp"pEp"7p$#pF`7p" 7tWp1'pVUV7wdVppFp#pFA V!#p!'wfUUUDEVp"7eUWp"7F37Vp1Vg7pVpVp"VgUVppEp2wA'#pUg'ww2!0wEg1"A'pgwvefefpUpB#pVw"'fw27p'0p#weeUep2'eUg7Vs! fppEg#'pUpfp2UgUfp4pE`wpA'#pEV'w2#tUg!DA#DwWwV`UVpVp3pVp7BpVp7""0DV#pfVVp2#UVgwVp2!0VppFg#'VpeV`3&gVVp!#pEWwp'e@#pEfw2TF`"6peVgT"7wEpffUfpVpep#7pV`wpfp3#Ugp#p'fp#vVeegpfp"fpA"pUg7Upefg&gff`A#pEfp!'TV'pUVpeUw3fpUefepVwwE`eV`fpfV`UWpdV`1B#weVg#pVp2!#Vg'p'p7dVpVV#pWp""gsA"#pVg7VpVVgffVe`B#pEVp2#fVc7Uf`!VpeVpeVf`VpefpEgefeTAefpeUEDUgeff"#7pdeg'pgp3""#eg7'eUDUgpeef3pg""3c"""7pfgwfgEfgeefpefU7pUfp"0efwVfg2e`eUgpUfeUgpUVpUfVVfVVfgpfVUVVwUVf37wUVc"#7g3"7vw77UVVVfwfVf7pg23wp1&7ww37VfpVgFVgUVgpff"3wEVf`2#&VpUff2!VfUfwVwUepEefpUfgwfffgpEef7weff"#37gs3wp77wwwfgpvffwg3wpvw7ffppfgUefUgwvfcwpUwww3"3vfVwwp3"vefwpefwpwpwwpwwwwwwww wppwwwpppwwppwwwwpwwwppwwwpwpwpwwwwpwwpe`UDA UU`!04#!1#2010DA#"`D02D#DA"0"0! !0 !AUg1VpAwF#pfw"7p"wp2"7$"A#p$#ec""wDw20"#6wp"6g""#wDw!0"33fw1#wf`"3! $"# DApUVV7pUfp'pWp3pU`#w2 3wA#"3fgpA#0VVw2"02p7p'"7vgp!7dw#w37p$7p2##7wvgp"7pV"32#0Dwq#0 Awefp"7fffp!'f#pV7p"wpB#wvWw4"3wEfp"'27p4w'7wVw#vEp'pwA#wwp7wVwwVp'ws3cA#p#p#7 !#pUVp7Vgp1'Vp#pU`w3 'pwpew$#7pdVgp2#2"7A3pA7wgp7uVp7pA#vefwgp2fp76Vp"#ps!"3w 1#pEep7fg'euP#pa'p2"w'pVpA7wdfw"3p"#w3pwpVfV`#7dVp#3"#6UVUPpVw!"gpwefp37p!#3wp #pEVp!7eVw'VvU'pg7pwFgpA#wUVp"3pw3#pwr7pwefA#wUVpwws"06gwffpfpUc"#3pVVpw#7wp pEep'egpVpeR'&fgefw7pUfp#p1#p#wV`3vEf"6f#7wVpeVpVwws"0"03Efp#wq"0 pEVp'VwfpfR7A7U` gVgpe#wUVpB#p'p7pPeg""6EV3pef`#7fpUfpegp1#3#36Ffp! #0#w "pefp'Vp"7pb7$weUgEfgUp7pef`A#pB7A#wPFVgwwuUfwpVUVg"7eVpVV`VV#p37uUgpD2"3wp! 10eVp'gp272w7pVPVVVwTVpwVg47p1B77peGf`TfgdVfpgpUfw"3Ugpeefee`13pwdVgA#pwwpD'%fp7Uw'#pA#weffpeefUDUfp!ef7$7A#eDUgVfUFfwUefpfeVgp23!VweVgwpVe"7pE`Ufw"#pA#p#&VpWp'#pA#pfVpEV`UVffVVfp0fVf!#w"36UVVgfeefgpEVgpeUfw32#gpUwwfc""3wVgeVgp37p!3"#p2""7fpw73p#pffpUefUefgp#wefc7p1#30#eeffwffgwegwvVwps33wWpc33wpefgww7p37pwwwpppwpwpwwwpwpwwwpwwwwpwwpwwpwww wwDA A 20"'p"w"p ec'"3w#7q#7p VVw2"0~#7p3w3w Efp"'~7w#wq#wp dVgp2#0!r'wwpwp dfw"3pAA#prwppUVp"3p!!"#7w3pUfp#p1"3wwpA UVpB#p3wpp"wef`A#pwp#7pVg47pp3wef7#wpfV`!#wwpegc7pp wwww˼ܼ̻̼̼ܼ˻˼˼ܻܼ˻̼˼̼˻pܻ̻ܻ˼ܻܻ̻˻̼˼ܻ˼˻̼̼˻̻̼̻˼˻ܼ؀ ܼ˻ܻܻܻ˻̻˻̻̼˻ܻ˻̼̻˻˼˼˼ܻ̻ܻ˼͘ ܼ˻ܻܻܻ˻̻˻˻̼˻ܻ˻̼̻˼˼˼˼ܻ˻ܻ˼͈p wgwxwvfxwfgfwxfxvfgwfvfvfwwwwwggfwxvfvwfwvfggwgwfwvgvgwvgvvgfgvfgfxvvwvgvxxwxwvw` gfwwxvgggfvgfvvvwwvgwgffgvvgwgwfvwwggvfvvfwfwggfgfvfwggvfwwwgfwvgvvfvvgwfvfvwfwwwvl݈p ffwxwf xwf gvffgvwxwvffgxwwf+ggxxv݈ w˼xܺwvfxx̻xvgfwfvgfgwffvggffgvgwgvx˪ܺ˺݈p f˪ܻwx˪˩wvgxvfwwxfvgwfgwxxx˻˼ޘ v˺˺ܼ˻˪xwwvwxwfwffgxx̺˼ܼܼUUU ˶g˺˺w̻̻ܺxxvvgxwvfgvwx˫UUU fܼܺ˺x˻ܼܻwwwwgvgfwx˺̺UUU fx˺ܻ˫ww˪ܺwgxxgwfgw̺˩UUU vxܼ˺˻˺xvwݚܼ˩xwgxwwx˫˼ܺUUU ww˺˼ܺwfxxxw˼˻wfxwgwg̻˫ܺUUU vgܺ˩fxxw˼˪xxvggvffx˫ܻUUU ffw̺˪xvgxwxܺxwxwvfgfww̺̼̼UUU vvx̻ܻxvxwxwx˻ܼ˩wgwwvvgx˺̺UUU f˼˻̺xxg˪˼˺wwgg˻UUU fxx̺˩gxxܺ˻ܻܺvvx˺UUU ˶fwx˪˩wvxxxܻܺxxvfx˫UUU fܻܻxvwxw̺˼̻wwwww˺UUU fܼܼ̺x˼˩wfg˪ܻ˻wffxx̼˻UUU fx˼˫wg˩vxwܼ̻ffvx˼UUU vxx̻̺wvgx̻˺˺w˼ܼ˺fwgwxܼUUU vgxfvwܻܼܻ˺̻˺x˫˩wfxww˩ܼUUU vgww̺̼̺ܺ˩wܼ˺vxx˩̺̼UUU fgx̼˼˻˩xwwxܻ˼˻vxgw̺˼˼UUU vw̺xx˫˺wxwgܼUUU fܻxwx̺̺ܺwwfx̼˫UUU fxw̺̻̺vxw̺ܺ˫vxvx̺ܻ˫UUU fxwxܻ˩wx̻˩w˺˼˫˻UUU vgg̻ܻܺxwx̼˪̺xܻ˪̼ܻܻ˺˪UUU vggx̻˼˺̺vxܼ˻ܻxxܻ̻˻̻̼ܻܺUUU fvxwx̼˼˻vgxxܺ˩x̻˻˪̻˺UUU fgwx˼̻vvg˺̻̻̼ܺ˫˼˫˩UUU fxwwܼ̻̻˼˻gfx˺ܺ˺w˫ܻUUU vwxx˼ܼ˪xvg̻˪˻wx̼˪̺UUU fg˼˺wxvx˫̺˪x̻ܺ˩퉅UUU fx̼̻wfxxx˺xܻ˼˻˩˫݈UUU v˻˼˩vgxx˩wܼܺ˺wuUUU f˼˪fxwwܼ˩xvx˪̻veUUU w̺̼˻vg˻ܺw˺̻˺˩̻feUUU LJ̺̻̻ܻ˼˺vxܺܺxw˫˺wfuUUU w˫ܻ˺̻x˪˺xwxgܼ˩wweUUU Ljܼ˪˫˫̻ܼ˪wwvxܼ̺wwx̻fuUUU ؈˩˪̻̺w˪˼ܻx̻x˫˩xfwgxfeUUU ؘ̻̺˺˻ܻܺwx̻ܼ˫˪̺xxvwfwxweUUUؙ̼ܻ˩˫˪xwxwܼ˫ܼwݙ˻gxvgxwwvvgfeUUU̺˼˪vgw˫˫̺x̼˼˪vxxvxwfwwgfeUUU˻˺˫ܺwxx˪ܼ̺˻̻ܻܺwgwvxvxvgxvuUUU؉˻˩˫˪x̼ܺ˺̻˺˺̻̻wxvfxvgfwfxweUUU˻ܺ˺ܼܺ˻wܼ̻̼ܺ˪̺̻xvgwfwgfvwwuUUU˩˺˼̺x˼̺̼˻xx̺˼˻̼˪wwfvwgvwfx͇UUUܺ˼̻˩x˻̻̻fwvfgvfg݈uUUU̼ܺ˼ܺx˫˫̻̻gvwwgw݈UUU˺ܺ˺x˫̻̺˼̼̺xvxxg݈UUU˼˪̺ܺ˺w˼˩xgxxUUU̼̻̻˪˪xwܻ̺wx˻ܻ˻˩wwUUU˻̼̺xx˼˻˺˫̼̻̺wwwUUU˻˺xwwwwx˼ܼ˻˼ܼ˻˺x݈UUU˩xvwwwwwfxw̺̻̻ܺxUUUܼܺwxwwwwvgwwx˺ܻ̻˪˻UUU̼̻˩wwxwwܼ˻˩˼˩˩UUU̼˩vxvwxwx˫˼ܼܻ˫˺˼UUUܺgfgw˫ܼ̺ܺ˼ܼ˪˫˫̼UUUܺwwwfxܻ˪˪˼ܼ˫ܻ˫UUU˫˩wxvfxx̺˫˺˺˪˻˻ܺUUUܼܻ˩xgwx̻ܻ˻̻˩̻˼˪UUU ˪˺xw̺̺˺˩̺̼ܼ̼˩UUUܼܼ̼˫ܺxw˫ܻܻ˪˻˺˼ܼ˺UUU ̼˻˼̻ܻxܻ˻˪ܻ˺˪̼ܺ˪UUUؙ˻̻ܼ˪wxwܼ˺̺˪ܻ˪ܼܺﺥUUU ̺˫̻ܼ˪̻̻ܻ˫ܻ̺UUU ؇ܻܼ˼˻˼ܼ̻˫̻ܼ˻˺UUU v˼˼̼˺̺wx˫˻˻̻˼˫UUU g˫̼ܻ˫ܼ˩˼˻˻xܼ˻̻̼̼ܼ˫ܼUUU x˪ܻ̺˼˼˩̺vw˼˼ܼ˫ܻUUU ؇̻ܺ˩˻˫ܼ˩wfgxܼܼ̻̻˼˼UUU vܼ̻̺ܺ˪ܻ˺xvgx˼ܻ̻˻˼UUU w˼˪˺ܻ̺xxxxܻ˼̼˻ܼܼ̻̻UUU ؈ܺ˫˩˼˺˪˩x̺w˫˼ܻUUU x̺˼˻˩˺ܺܺwgww˻̻ܼ̻ܻܼUUU w̻˼˪̺̺ܻܺvxx̺wwxܻ̻˼ܻ˼˻˼݈UUU wܺ˩˪x˩˩˪gxvx̼ܼܻܼ˼ܼ˼툅UUU g˺̺x˻˩̺̻vvxgx̼ܼܻ̼̻̼UUU f˩xw˩˪̺fgx˻̻ܻ̻˻˼ܼܻUUU vܺ˻˻̺˪vgx˻˼̻˼ܼ̻UUU ˶f̺ܺ˩vx˺˼̼ܻܻ˻ܺUUU f˪̺w˺̻˼˼ܻܻ̻˼˼UUU v˪wxxxxx̺̻ܼ̻˼˼˼ܼܼUUU v̻gwwxxx˺̻˼˼̼˼ܼ̼UUU vwx̺ffxvgxxxg̻˪ܼܺ˼̼̻˻˼UUU vxgxggvgxxwx˪˩̼˺˫ܼܼ˻̼˼̼˺UUU fgvxgvxxfxwxxw˫̺ܼܼܻܺ˻ܻ̻˼ܻ˻UUU ˶fxxxwfvwvxwgwfxxxw̺˼˺˼˼ܻܻ̼ܻUUU vffvgggvvfgxxx˺ܺ˼ܼܼ˼̺݈uUUU vvfggfwggvxgx˪̻ܺ˻˼˼˻ܻܼ̻˼툅UUU vxxxvgvwwgwgwvg̻̼˫̼ܼ˼˻̻̼˼ܻ˻UUU vwwwxxvwxvwfwfggxx˩˩ܻ˻̻˻˼ܼ̼̼˼˼̻UUU vxwxxxxvxxwgvgxvvgxxw˪̺̼̻˻ܼ̻̻̼˼˻ܻUUU ˶fxwxxxxgxvfxvwvwxwwgx˺˼˻ܼܻܻ˼ܼ̼̼˼ܼUUU vxxwvgwwgvvxxwwgx̼ܺܺ˻ܼܼ̻ܼܼUUU ˶fxxxxwfyfvggw˪̼ܼ˻̼̼̼̼˻UUU vxwvwvxw̺̻˼˼ܻ̼ܼ˼ܻ݈uUUU vwx˪vvgܻ̻˺̻ܼ̻ܻܼ˼̻˼ܻ̼ܼܺweUUU v˩w̻gw˼ܻ̼̻̻ܼ˻˼ܻ˼˼ܻ˩weUUU v˺wg˼˻˻ܻ̻˼˼ܼ̻ܻ˼˪wuUUU v˫ܺfg˩˫˼˼˼˫̻˪˻˻̻ܼ̻̼˼ܻ݇UUU g˪˪˩gxܺ˼ܼܼܻܼܻ˼˻̻˻̼̼˫˩݈uUUU w˪˺x˪ܻܼ˫ܻ̼ܻ˼ܼ̻˺wuUUU w˼˻˪˪˫˪ܻ̼̼ܼ̼̼ܺ݇uUUU LJ˪̻˪˪˫̺˫˼˩ܻ˻˼̻ܻ˼˼݈UUU ؈˺̼˫˼ܺ˫˺˪˪ܼ˺˻̼̻̻̼̻UUUؙ˼ܼܼܼܻ˼˪ܺ˻ܻ̼ܻ̻ܻ˼ܼ̻˻݈UUUܼܻܻ̼ܼ˪˻˼ܼܻ˼ܼ̼ܻ˻ܻUUUܼ˼ܼܻܻ˼̼ܼ˼˼˼̼˻uUUU˼˼̻˻̼̼ܼ̻ܼܻ˻݇eUUUܼ̼̺ܻܼ̻˼˼˼wuUUUܼ˼̻̻̺˻̼݈UUUܼܼ˼̼̻˼ܻ̻˼UUUܼܺ˪˺ܼܻ˼UUUܼܼ̻̼̼ܼ̼ܺܺUUU˼ܼ˪̼ܼܻ̻ܼ̻ﻥUUU̻˻ܼ˼˻̻̼˼˼UUU̺˻̼˼˩ܼ˻ܻܻܻܻUUU ٙ˺ܻ̺̻̼˼˼˼˼ܼ̼UUUى̺˻w̼̻ܻ̻˻̼ܻܼUUU˺˪x̻ܻ˻˼ܼUUU˩̼˩wܻ̼˻UUU̼˩˪̻ܺvxܻ̼UUU̻ܼܼ˺wvx˺̼ܻ˻UUU˻˼̺̻˺xvgxxx˫˻˫݇uUUU̼˼̺ܼܻܺfwxxwxܻ˻ܻ툅UUU˪ܼ˪˻ܼ˪vvwwwܻ̼ܻUUU˫̻˩̻̻ܻ˪wwwfg̻̼ܻ̻UUU˺˻ܻܼwwgwgwܻ̼˼˼UUU ̺̻vwx˫˪vvwx˫˻̻ܼUUU x˩̺ggx˪vwxܻ˼ܻܼUUUwܻܺ˩vfxܺwܼܻ˼ܻUUU w̺˺˩wxvfxܺvx̼UUU v˩wgfg˪w˪˼ܼUUU wܺvgfw̻x̼˼̼ܼܼUUU LJ˪wwg˺̻̻歹UUU ؈˩ܺfx˻˻ܻ˼˻UUU و˺˻wx̻̺̻˼ܼ˪̼̼˫UUU x̼˪x˪ܻ˼˺̼ܻܻ˪݈UUU wxܻ˼̺˩ܼܻ˫̺̺˺̼˼ܻUUU wxx̼ܼ˻˩ܼ˫̼˫ܺ˻ܼܻܺ˼̺UUU vwg˻ܼܺ˻˫ܻ̼ܼܻ̼˩UUU fwfgw˫˩˼ܼ˫ܼ˪ܼ̺˼ܺUUU fwfxܼ̻˼ܼ˼ܼܼ˻ܻ̻ܻܼUUU wgܼ˪ܻܼ̻̻˼̼˼˫UUU و˩w˻ܼܼ̻˼ܼܺܺUUU w˻˼ܼܼ˻̺ܻܼUUU LJ˫̼ܼ˫ܼ˼ܼUUU ؈˺˫ܼ̻˼ܼ˺UUU٘˺̼˼ܻܻUUU ܼܺ˼̺̼˺UUUܺ˼ܼܼ˼˼˼ܻܼܻUUU̻ܻ̼ܺܺ˻̻ܼ̻˫ܻUUU˪˼̼̻˼˼ܻ˫̻ܺUUU˫˼ܼ̻ܻ˫̺ܺ˼ܻ˻݈UUU ܼܻ̻ܻܻ̺˪ܻܼܼܺ˫˪݇UUU ܼܼܼ̼ٚ˻̼̺̺˫˩̼ܻ˫˫̻wuUUU ڙܻ̻ܼܼ̻ܻܻ˩ܺܺwUUU˫˼˪˫˫ܻܻ̺˺˼ܺ˪˺˩͈UUU ܼ݉UUU ܼ̻UUU ̼UUU ˼UUU ݇xwxvggwwxwUUU wxxxxwgvgfvxxwwxgUUU xwxwgxgfxxgfvfxxfxvxwgfxuUUU U U U U U U U '##' !%+* + "*& %) &" ) ($ ( )! $!!*xfK1+Pwz)r,eFoU[L!XsQ;?&\8(`-MuR *=E{bdgC^|ny2i4j.09amt@Tp_I'SB]cVhvAWND%qO"  $$(&(  "!* '%"& )'+! )!#+  % ** )# !7m;pfy&FBhcg8{O/C._K4(N=T\j)b%2I-qS uz,3"?esvPRnt|X9L`x!EiM*UD'+]woraWQA>[d:0^/InBwf.AD4L)K:d|;F[JW"?h`uvX(@O2&Erx=b\9,c70g3 " &' &!"+) $ !+#*))*!$%' * # ! % ( ( EoFIz:j _2mdqh0N{b,*x;OnJ+iM4.'=K` $#$  !)!&")+!&"' )!  ( (' %**#  %* +`dc49oNTV!g:|%WOEh" te_-Ln<+.P@w{[f8/'=rzav02pxqsmJRD(*A1biX,?BUQS)F\^;u3j7&K]MI>yC + # +)  '#!!$  ( *&"!'(%*!)&$ * ) "%  rbqU?Dp&(9yh .KE/!`0mP-*CA8wRBSg;>OcveMsuji|14Jt,7^xTI]N+Q@%\WF"ofn{a=':[LB]e&qX`R!!% % "# "# ' ! )*'! +  $+ &$ (&*) )(*eT(u[7v-1cyL%0AN"fW=JVS3a|*BPD) $)%$"#)  ' *& ( ('"!! %&  +!+ # * ! *n=A-v&_xhUFm{c@+"7%9\Qw(N,i'V!DW:MJLozdf/C2jE4IRe^O[bSB;s8t.*3K0*!' '!! ) !+# )* # +)* % (% & &"$(" $ 8>.ie%(/EOx0y\o?QWg93_b2S1[n)N:=Rj`|LwI]fU "Th+-q{&!svMPb:A43_' %%$#**$ (+ (& ) "+ *! !"! )#& '  )'!SgO\u^X:/j'Qp>Jdwq@xh1a[J"%*!() #+!$% *'&$+" '  )&   *( # !  )! )_JU9gFSmwx0`Tbf{L+d|qE;W=,vhD4u/B*c?23"paNy:i\AszQeKMRV'X.1! +'((! *&   !%%*+))! $#&)* "$#'"     01>,mncu{zho|4xs"BXj%p3WriD2T+=CF.-!gf[*)O qQ]IyEUavbwJK(/7\d_ML^:9N'`@?V&-ATtx!RehF8_L=rgdycS\N'1IV)?W+B^, !() !'" '%( #*$ $# %* " &)  ! *! +&+)ByT4d3\D-XP|cI0>Apf[V!M^]r (N7=:g+1;@[^OQAUj]hqVocL=fWpu%\&)bdst{^RE8!%LrdhqQm'&ynx"BV)1]:pcPg\9v{JutzO?[7oAUD2WSj.e,0`CXK+ !&)!$!#" % &)% )  "('*   # *+*+$('!rtBzAD;&1]{9EReKyMx*O(d%q<-3QvsPFThmo8n4?/pj' CWLa=,c|!gV7\^>I_[+@fJbw2`uX"Ni:U)S.0   !"  ! !  %'("!  &*$)'*& $()#%)*+#+"|upr!qoMLVDE24`a+b_m]vj.(XFBC;:%0-*3TdeSU7W@&tRwx/',A ?zhOc8i\J=Qf>PnsNy{g[9K)I<^1'*( ( #* )!! ! $* )'  )! "+ "% & $%+ &#V7TJ<^Q)"8hW=?u0_O]+`d{!q4segzKIX&9at(v|c/m.2%*nyDj@C,brwSipfLN3F 'x:M;R>E\PoBA[-1U+%     )%* "'  (!!&"# )*! *+)( # $!'&$ruw^*gDnsq|J7>TE9MNdfz1Ky=t_BQ/R4[]W!X%':jF`c<(") mvox,AOhaP-@e&VU3p2b.IS8\;?LC+{0i)$ (+*& +%!*  $%# "  !'&! (!*")#'  )z'3nC@T\:0^uIMNc>i8o.%/UpPamyh")t4-veF(V2_xW|?d1RBJ9;=s!<+ ]qrw[SO{KQg7E*,LA&DjbX`f' *)  "$" * +') ! )& %#! $%# &(!+*  ! (`=sA0F-BCo?w "_T[!\PKb/e{I'.h2jm;&)LqgVQ@fztcN*9(1puvyEXax%8Mr+,i>d3|^DW4:U7JOR]Sn< * * !'$#!!  *%)'""& &+ )) #  (%$! +(%I]\hzo{4XF"p^,[tbOa'EjgfUC9|yu) VeiS7P`_qc&TR/KNvnJQ?@D*=;xdML2Bw:1-.08+s!$) ' * !  "*+&#$) (&#*  !+'! )% "%  (LAc,P|rgdn2O?@qiI<`{FBhS3]:se(tz[&0X1V-_4pyM=7KxUj"CW)+;b^a8'f muvDo*9/NQwE\!>R%TJ. * )!! # *+ %!) )$# *($'&" &+"!%   ( ' d;F|<`iK(JUm9\c{XTy>R.1hI,Wt-nSj"]=qe* V^vMB3[8osxz%2ENapwQ/:ObLr+gfC)@?D'!&u_0PA74!+* '" &#( %$*    #)&!$ '  %*)"( +!)! 3{`='?Qm%C-R^*O"V&qwfa/tJoc]:2Fvxr|AL(UE)<79PszyX>1SB Wj!;N[n@TK_0hpb8i+gM4,d\uI.eDK"+ &    !#  $%' #  *! +'!% ( "$!))&)*(*|MD]*dK+bRC) $ "   #)!(    !"* +!)+  #* $' %%*'&(!&m9z">W_psv{au'y [tJQO?*iTVowM<8@,h/X\U3CF&+A1)];NjnqdxK^-R`|c0(LSf%IP2!.gre:4=DbE7B) '+&  ( &"#  !%% *  #'$)*$"( !!*+!)m>b/Q1aX@B-!U*f[vI^qotd9nLxp`uyzXm%UD=PrvSBJ]2E9CAjbi^OT3\q/h$ #) *&(  ' +)" *&! )  !$'* ! !#" (%+%qaz|K(b2+y< Jc;{X"?h,A0o^:MC3sd9*&`RSV.!nxeT7]N>pv%mIjFuw/1Pg=QDW8L\rfE'4)-_B[UOit@)% )$&#"    (&" ! #* *! * + '!$+!)'%  (ep7"n^z4mKATgQR;V]xNdaiDq=y|ICW&0\:2Fr?(vP.*9ocsuM`bjw{ 3+>[tf,/J!OX)BEL_-1SUSVfN+K0wC+  $)!'% ! +(%! #'  &* &!#"* * $)( )" [TK+9i(haV3odJ"Lfte)>N {r=!<pyMFBP0nuW-7&cR\^?.sxwXU1vjCEI*'O4|@SA2mz8;bQ]/q`_D%g:,' &' *)!)%*!" #%) $&#!* ( + $ + "!(  at&,[!pc?2`]4'sdBSgi<@FMfyDhE8mKovJjw|^)uxOR* 0V\z9;%IC"_{-+>.A1L(eWNQqb3X7r:UnP=/T*)' *) !" &#$)($*!  +!" '#+  %% & !   (8u7;PC)"Mw@/!J^RTsc2pz-[tvxn_h3myK(iEq|',dSOb&f reQ+aI.N1:4UW\0L )*" '#+  ( *"!$ *$ #& !'%!+ %! )( &)  `vI8)WLFCV9'MJD[TNs&Sd0#!*$ #& ')' "!"! !)( %+&   % )$  (+ **yOw/zMTV>{]U7-bgLc9*@hau)=X4m\`jqR W^v.I(2Eo|J'AdSBDnt%[0C3,pr"KfQx:<8;!i_N&P+1sF?e! '&+% !* ' "!!**# ")$# &+($)(  ) % (auAmvnt?8pC=d{*!%og: -R;,Isx3F^>.B`h0V\_]9eTLNW4qyJ)[bQ"z|rUS2@/KJC1j)/df! !#  " *&!* ( "+& (%+* $')#)  ' $%  !) Nw.")i;{b|Bj<@8:>AF=[,2Qg tTL_KR^yp`%rzC!afcSmx'uen]h3qd*sv7\VE/OIW9X(1JU-4oM&+?0PD !  "  ! +)+& %#"! & )! *$**'%($() '#  g=FDK-uJowPyO*,`1@MAr{(;3Ej_|a SfsxqV%:dhT['".0tzLp\v?RIB!&987nbQ]4>2iX^c+CNW)/eUm<' *   ))& $'(! +) *$%%  +!(! "&#" * !#sW{4(@7=:-KOVSiJF;h8,>e]p\%Q1Mv'DTN"[tugqzryBUmX20!^R`P* adofn|.ACE+j/b3&<?9_)wLcIx# # !"$**! " &$ !)% !)(&+'* '( % +  )   J?D{g;SEm`rbqh[]d-f\:sx"9(&>P4I8a@*,1LFow=!cjM<+)2uy.W/Unvp| '7eBQ3^V_NKtTiAXR0Cz%O(&) (# !'    +* )*)& *'!% !!  +%  "#$$"[nC2W"y\g<ma/wJo:3S!q`]7_tFVX+b%9f& 'LO>@Bi{j,cR^s-Qdx*1(Nr|uvzPhIM)AE=D;eKp0?48.UT%+ %"'"+*! '!  *$( !( )$!)    )#&*& #[j49aSf=WIKVci1hTLNMe^.o!qg\A*"s@%;?bwp`nd8BC3m{+-(/rzP,&u|DXvy2QF_U)>'tx E:t*s%`T0hcaz-eV8&SgCUf9_Qby   !( %)! # $$"#+ !('* *'& )*!"  +%)  &FX ps['PQ)J\9ji0!-]mIaD2W|"*@.8^4C;=+oV{UNM(_,TRnEq`vrfxdb/#$$)  ( )*)'  #( +' * &%  !+!% *!  !""&^hbQu SpO?!.Xr-E(/'yIBUznw\o%qNJ=P"M,+&7]8L[{@eV4mstx:TgR|D3;*02FjaC19ivW`cK_df)<>A) %)  $ #!&! !'$ (+ '! **%&# ( )+*""    zv"!xhruDC'VW|sjw(X`-?032f&/cTyg 1B{94U.KFNe8EPbSRt7,: &'%$+$& !#)+% "!* )  !#)* '"*  (  ! (:>r{`SznpOFq.KvItAx!C /h\N+[y%(cw]a1Wm8,BP-sjU2@e3X);*do|^4fE&9L_?RJQuDTV=gM"0i'b7<"(!#$*) !)&'"    )#+ *$!  %&'+ %(!* @A[7'"WiLMNI];Ozg+/sxhU:e3?=*raB,S 2!DR%boc0f1p).t(jFCQX^VuT-q '# !%!"  !*' *! &+ *+)() ($ # "  %)$&01|"fejpzy%[;<2 4ngVU`rq^&mDbP\s3Cc>MN,-=v*uh]I)d_oB!7'i/aXx(tE{9SWQwK?FOT8RLJ:A+.@)*  !+" & '  #& *(%*!+ ! (%' !"$#) $ )70[u_yJ EQT'/2-.3i!m&r=ovdS1De4aPt{OUX"%I\;*,^V8jKpxc+RA:BNC`g"" )*)  & '$$  # &! %%+!#' *!((+!)  *vzCB qu"|<;,-Tf>=0Aoj+.tpn{iy1Sxg_W^\UVD(PJr?hw78&XmI]dQ@34KME/2Rab)!s[cNe'L9*:%`OF ) (* !%  $   $') !"+*( %*! !+&'&#")#X4@.()nwed"xf,+>-;M:N_'Oosihut=zpF!a&8RQ/cr*K9A]7ILv123^PSy|q?0[%gmDjV{\UbTJC4&o|bgDX9(K_*C[nV32fB"qv J^!ry]cMa:E\OT+AN-,h%dQ1eW*  )*!" "$)+!+ '($*)!  '& # #% &! %( |x-fei{.? %sp"Q&/!jnz0>['2,BcwW14Fh8RdSP7gV\aOJEtA@y<*+3bmK9ouq]CUIv(:L);=MX_T^D`rN#! (*)*+ # %""&$)'! ()& ' *$!  !+ %%m7iWUTsp-.ed\n'()[I?@rxaw0,X"h{+/ovt`gj94fCc|;8JQSKLRybF=>1B_Bjn3)4foqV_2@bd;&i\RSwEt7I?[AMW-e]'T*$#& # +* $)" & )% ")* %'! !(+(   '!!01"jiDCEU!{tI[)(uq<*8Jsp|r&+`v3/ANb -WoF2XVg%4.xn;mO,]cadS@7>Q^K'_wehP?:\9fTLMR=ByzDv+K%5(ñ~i{Fv</h՗X"H_p܏E?w2EZ|Ցo_WKO}4MoiVFb 2~ V|Eet].knNS O>}-7av_9Ft./_t30Df>?SW3~&_ߠÞ?jjoĐ;s? M\~s ~Օ?G_7'|s749+dx&%~̡2a?cɛ6|'/ ;sC\ztW  >~Njs~?/3_֠/s_՟.`[\?>tG<zK=[  Ǐ?I~T`>>RG/l'7"` Jx_Cx|x?B<>?y{^y' _: o$~<'xz^?~{#A_I}O|W}?/_}x}>% U}% o>~_{_RA=+Cr G=|^Wz^}/OQ /#/= Aؾ\O/>9^T6˙~+<ʝ7b>s?Xtۋ7axz I]S\^5\ˣx&+t}O>U?kΕ%t_O<zr/W1_ANZzB^\ǣ~~t ת+C =]zZ  gW^С?^|{u ?9ko/'O^uByzy͇,C%_09[dZ F4}k ^|7wb>+ֶ/Izig<``NqNq`VA CrA2јQA n2јQA 2јQA 2јQA 42јQAL2јQNuJ@gaA NqNqANi zAH01PA80pAhC$I" C vB BB BBBB B$B((B*B0B4B8B(<$Yg&?BRg D4Y,Y6Y7I8!I`^g@B(#|$` @Y#(!I((f$h h"!hh+*!h,0!h(Nu...Greetz to Galtan 6, TCB, OVR, NPG, ACF & Winnie the Puh (WTP)...(4fD()WpapS(fh"$hR f !h`$h(#( jpCЀ0r((g\(%('fg*f(&d(r`(&e(A' dAdAdA(:Ch8 (;g (;g`h8`h8h(rJ($f8S( fh "h )gR`"h(<m`BNua:"h>()WS(5f h=5 gR>Jg`r0(6NuS(*fh+*$h0R0 f !h,0`$h0()g` ANu ,.. M / gaw GGp0S#}Y8{eQ>, ~wpjd^YTOKGC?;852/,*'%#!   Btz 6      ! *7Cn);C.A                    D           ^cw         g )UH*M5400 457457754054-- 54540540-)5400 457457754054-- 54540540-)5405405457540+-- 02454+5405405457<7545400 <:95+0 +0 + -))+0 +02475455 <€<€ <€ <€<€ <€<€ <€ <€<€ ZZ Z ZZ ZZ Z ZZ$+0$+2$+4$+2$+0+$+0$+2$+4$+2$+0+$)0$)2$)4$)2$)0)$)0$)2$)4$)2$)0)$+0$+2$+4$+2$+0+$+0$+2$+7$+5$+40$)0$).$)-$).$)-)$)0$)5$):$)9$)500044004044004400404400550050550055005055<_Z_$0+$4+$0$0+$4+$0$0)$4)$0$0)$4)$0$0+$4+$0$0+$4+$0$0)$4)$0$0)$4)$0+$2+$2+++$2+$2++)$2)$2)))$2)$2))+$2+$2+++$2+$2++)$2)$2)))$2)$2))$$$$$+$$$$$+$$$$$)$$$$$)$$$$$+$$$$$+$$$$$)$$$$$)++++++++++))))))))))++++++++++))))))))))0242002420024200242002420024200242002420A_.................................)....(+,..*-'. !"#$%....&. WELL DONE!YOU CLEARED STAGE SCORE :TIME BONUS:HELP BONUS:HIT BUTTON TO GO ON!GAME OVERCHECKMATED!TIME OUT!GAME SOLVED!NEW HIGHSCORE!YOU ARE ON PLACENOW ENTER YOUR NAME:MR RETURN YOU SOLVED THE GAME!SOLUTION BONUS: 5000** INSTRUCTIONS **MATCH-IT! is a game very similiar to'Shanghai'. Your target is to removeall tiles from a gameboard.This sounds easy, but there's a time-limit that makes the game very hard.You can select tiles by clicking onthem with the left mousebutton.Deselect them with right mousebutton.You just can remove two similiar tilesand the connection line just can havetwo corners and must be on free area.There are some special tiles:FLOWERS AND SEASONSYou can remove every flower with everyflower (the same with seasons).Flowers and Seasons stop the timer forsome bseconds. PRESS MOUSE-BUTTON TO GO TO NEXT PAGE!To make the game easier, there is aHELP-option. At the beginning of thegame you have two helps. If you needhelp, just press on the HELP-KEY.If you completed a level withoutusing the helpfunction, you getone help for free. All helps leftwill be added to your score at theend of each stage, so think whenusing them. Possible keys during game:-P- Pause game (try this) -HELP- Get help from computer-ESC- Abort game -M- Toggle Music on/off PRESS MOUSE-BUTTON TO GO TO MENU! WELCOME TO MATCH-IT! THIS GAME IS BUDGIE LICENCEWARE! IT WAS WRITTEN BY NEW MODE (CODING), SLIME (GRAPHICS) AND BIG ALEC (MUSIC). HIGHSCORES WILL BE SAVED ON DISK! SO NOW HAVE FUN WITH THIS GAME! BYE! START GAMESEE HIGHSCORESINSTRUCTIONSQUITMATCH-IT !SAVING HIGHSCORES! CAN'T SAVE SCORES YOUR DISK ISWRITEPROTECTED. SPACE TO TRY AGAINOR -ESC- TO CANCELHIGHSCOR.ESNEW MODE SLIME  BIG ALEC BUDGIE UK XDELTAFORCEFRONT 242 KRAFTWERK ,NITZER EBBTHE SHAMENdTHE CURE  1BSduvww 0  `U2&? 8@PV0=" RX80L x |R>- X8Rl- H$P- pRp0l d `Z<0;j# 0 T0t<T80pX`]4>/`  -a*&Wgz 0t |\T< jo\`x n?p 0D| ~V6h`X 9^87?"@m2  `0{@Æ?x `̼spck 𓨈x$0H 0 D T Dk`%<<& W.r9 80 @Kxx&-b&f,0 @ 8 Drb$\?<qgxn@ˆHL!6]Ϥ?<0D < @@, p=_"`ۆ@Cǁ8o` @>'Xy"QP\ -(<0D < @ l V8]|"@ABE8m~ x TN({pD8cp0D0D< @@0$;@.dyDA8`.? `H0D8Ap`T`p0 \$@ x  Y@t~=D@8/"1v]0px,00 |@ *p ЫlxA:> d{p@H$00 b0x s]AA3<8!`7W3p80 h ᐈo A@0>! eD/0<0 ">D G81@86!p ??p,0$6  }`D8"#!pc 8$0  4; D@8AA'7 `(i4p$0  @f4`P#  }~w,hp@@8 &0. ʃ86H0#@ +ч<qEl G`8 p"0O,d0,.w@aցIa8G8PW`1?1+-Y}SrsDFہ@xF5  >\?Y[<܄ ˥8+"}3S AMP %:Mk= .k|?+*?pUas Ud1<3Jt(:<+<0u?'gx>N>0<`#6`66|@ ~? 78#c @M@ 0&*nO#P`F8`jR=00 p |UMOo  u7`}h^dǜ8Ygap5,#`#xPxp P@0:|   t@  X@P0xh Zdp0f^` & 0f x"P@"AA0`t4H"0`@|&@@@$0@, 1ACEߌ x }aPX  f 9```urt32}@@g''D   O@? ?,48V  ?AA@@zX8  Pl`h0@@ ?> `L083~ =AÀ`X gAl  `%f0Y ^aXI/9  @xz#/wX !.?`p  <>#?wX  j\ ?`+% h-a >>#%gH0 !Ho0"0OU1c*W&gz P n =! !gH0%@0a   6Uǁ8lp?p  Hp x0 1P0!gH0,`K"5p `r{;c{< 7' ̼sp ! p!gH0YqF8RWN33>Xgck x$ ' 2 #&8-b& 9)Pp!gH0_A(pzׁ~RLV f,ʷpN5)8PL!6] (5@0!gH0i VQpxq?@q=Ϛ?<x?d0py"QP\ -$)`!gH02?H?/ F6-(<bkk R{D8cp=(-p!gH0r+78 Pt? `0D?\D8Ap94%0p!gH0dB?dX080i`T`p?;`hv]0p=<%@0!gH0͂>b<0xxpx, 0'p^4d{p-8! !gH0҂=r,1MH|?@H $0'D017W3=8!0agH0׀1DA3O|?p 8@0eD/<`!'p3i`3)9x0 <.@ ! ??<0!'p3!"p70p ,~@1p !pc>agp7K06  8$]]bc`4؈p?>!q`6@G84?^ AA$@8`w,Xp@@?!``4Z%7^H?#" 0 @8&0HG8 !Q@ 7#7,A>6 Oop"T?@(@xG8PW`1> 0m q~f'3H|0nC܇?1MS`~ Z>\?Y[<~@k\ O0 vf ypP opÊ Ӈ8Z'@ =.k|  >f <г<<@0P ֿX`~?vN34Jt 6X 8 f^l%@ _?Ƞo pɁ(:d ^ 0 T:< >@ x׀1@xCG~ <``#6 W97F(0 |78 | @@@$ta ~!!t#c sO0@)!6`Mn? w@B~ @x@ Op@ ί0lB 8 @\b M-.'At 辧߃|L0+w(|@`'g^*  d    0 "tf  "(  " (,,6 & ( B$.     "             6    6&0 R4&b:  $ "&    0HXR"  &b 6 R " $  jJ  L^ 4n d  `,Z4$L   &  6 88*