[
  {
    "path": ".gitattributes",
    "content": "* binary\n*.S crlf diff\nLICENSE crlf diff\nREADME.mkd crlf diff\n"
  },
  {
    "path": "01 POP Source/Images/IMG.BGTAB1.PAL",
    "content": "\u0001a3aa\u0003bAbsbbcyddde\u001bfAf_fwff\u000bg)gOgAhOh]hkhyhhyii\u001fj3jejjjj$k<kkk\u001elTlll\\mmmmmmm\u0018n8nXnxnnnnnn\u000eo\u001co'o/o4o7o:o=o@ofooo:pXp\u000bqqrrrstt$uuuu\u0001v\u0012v$v\u0016wpww4xxxx\u0007yIyLy^yyyy<zz0{{$|'|a}{}}}k~t~}~~~~~~~~~~\u0019+9\u0004\fĈĠĈĀĈĀĀĀ\u0004'ĀĈժժȡժժ\u0004\f\u0004\u000f\u0004\fĈĠĈĀĀĀĀ\u0003\fĀĈ\u0004;ĈĠĿѿĀĀĀĀĀ\u0004<ĀÈժժ\u0002\u0003\u0004\u001dĈꈑĈꀑĈꀐꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀ\u0004<ĀҀІІІІІІІІІІІІІІІІІІІІЮІІ΀ІІЮІІІІІІІІІІІІІІІІІІІІІ\u0004\fІІІІІІІІІІІІ\u0004\t\u0004\u0007ĈĿѿ\u0002\u000bՀր؀\u0004\u001dĈ߀݀Հ̀݀݀݀݀瀀瀀瀀瀀瀀瀀\u0004\u0007𿀀\u0004\u0007ĈĈĈ\u0004\tĠĀ\u0004<Ĉ֐֊ĖĖՐ؊⪖րւ֊֪\u0004\u0003ݻݻ\u0004\u0003\u0004\u0003ꀀꀀ\u0004\u0003ݻĈ\u0004\u0003ݻ\u0004<πժǂȺǂժ\u0003\fĀĈ\u0002?\u0003\u0006\u0004\fĢĈĠĈĀĈĀĀĀ\u0004\fѻĈĀĈĀĀĀĀ\u0004\r׻נĢĈĠĀр݀\u0003\rĠĀ\u0004\u000bȑĈĠĉрТĀĀĀ\u0002\u000bĈĈ\u0004\u0013ȑȑиĠĠ\u0002\u0012˓ŊÊ\u0004\u001bȑ๺ุ̰Ȱذ\u0002\u001a˓Ëǋ\u0004\u001aȑฺุ̰Ȱذ\u0002\u0019˓Ëǋ\u0004\u001aȑฺุͰ̰Ȱ\u0002\u0018˓Ëǋ\u0004\u0003ݻ\u0004\u0003\u0004\u0003ݻݛ\u0003\nӀӀӀр׀܀Ѐ\u0003\nߐӀӀӀӀрԀЀ\u0003\n׀߀ÀӀӀӀӀЀЀ\u0003\nр׀߀ÀӀӀӀЀЀ\u0003\nӀр׀߀ÀӀӀЀЀ\u0003\nӀӀр׀߀ÀӀЀЀ\u0003\ñӀӀӀр׀߀ÀЀЀ\u0003\nӀӀӀр׀߀ЀЀ\u0003\b̃ӌӌӌэׇߜ\u0003\u0007̃ӌӌӌэׇ\u0003\u0006̃ӌӌӌэ\u0003\u0005̃ӌӌӌ\u0003\u0004̃ӌӌ\u0003\u0003̃ӌ\u0003\u0002̃\u0003\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\fЀЄЄЄЄЌЌЌэчќ\u0003\n\u0002:\u0001<\u0004\u0007ժժȡժժ\u0003;ઝઝ\u0003?ઝ\u0003<ĀĈ\u0004\rݻĈĠĈĀĈĀĀĀ\u0004\u0003ݻ\u0004<ĈĢĈĢĈĢĈĢĈĢĈǈֆֆֆֆֆֆֆֆֆֆֆ\u0004<ĀĈؚ蝀ȘȘȘ蝀ؚؚ蝀ȘȘȘ蝀ؚؚ蝀ȘȘȘ蝀ؚؚ蝀ȘȘȘ蝀ؚؚ蝀ȘȘȘ蝀ؚؚ\u0004\u000fݻ֪ժݒĈĈĈ֪ժݻ\u0004\u000fȘȘȘߚݻժ՚ĘĘĘժ՚ݻ\u0004*ĀĈպժȡպժ\u0001\u000fԔ\u0001\u000fԜЀ\u0001\u000f\u0001\u000fАՕ\u0001\u0010ؘА\u0004<ĈĈψܹ޵\u0004\u0016𐀀\u0004\"ĈĈψ󿀀㿀ỀṀ\u0004\u000e𐀀\u0004\u0019ĈĈψτ󿀀㿀ỀṀ\u0003\u0007\u0004\u0012ĈĈ̓ĄψĄ牑ƧĀĀ㓀ˀṀ\u0002\u0005\u0004\u0010ĈĄňĄǈƢĀ£Āǀᑀ\u0001\u0001\u0001\u0010АԐА\u0002\u0010ȀĀԀЀ\u0002\u000fЀрՀԀ\u0002\u0010рЀЀԀ\u0002<Ĝ\u0002<Ĝƀ\u0002<Ĝƀ\u0002<Ĝ̓τƀ\u0002<ČǄǀƀ\u0001\u0001\u00064ǈĈڇ膠ĈʆȆˇݻʆ녀ݻݻݻĈچ膀ʆȇʆꅀݛچ놀ȆʇȆꅀۆꆀˆʇʆ؅؇膀ȆȆȇ膀؅؇膀ȆȆȇ\u0006\u0004ݻ̙ժժ̙\u0006\u0004ݻ̙ժժ̙\u0006\u0004ݻݻժժݻ\u0003>ĀĈĈĈĈĈĈĈňЈĀĈĈĈĈĈ\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0006\u0007𙘀\n\u0011ԪժժժժԪժժժժ\u000e\u001bԪժժժժժժƼ憀憀澀憀憀ǧ́ၳ͍͍́Ԫժժժժժժ\u0010\u0011Ԫժժժժժժժ烿ᶶƱƱッƱᶶƱ烃Ԫժժժժժժժ\u000e\u000fժժժժժժժ猼栁漆̍憞澶栁짌猼ժժժժժժժ\b\u0007ヰ𰰰ヰダժժժժժժժ栁짌猼ժժժժժժժ"
  },
  {
    "path": "01 POP Source/Images/IMG.BGTAB2.PAL",
    "content": "2g`iaabcccccccc\u0004d\u0007ddeefg\u001bhihhhhhhiiiijjjkk5ll1m\u0003n}nnoYpkppoqqqqqq\u0004@쀀ȍفϑ󙲃̷؞계̪۪Ϫ֪͇݅Ӫ̪تȪɪ̪۪Ϫ֪͇݅Ӫ̪تȪɪ̪۪Ϫ֪͇݅Ӫ̪تȪɪ̪۪Ϫ֪͇݅Ӫ̪تȪɪ̪۪Ϊ݅Ӫ͇̪ȩϑ\u0004\rϑ΅⁀즄𳄀턀؅\u0004<ݻݻݻݻݻݻݻ݆ݻĈрݺݺݺݺݺݺݺݺݸĀݻǻݻݻݻݻݻݻݻݻݻԀ\u0004>ĀĈĈĈĈĈĈĈňЈȈĀĈĈĈĈĈ\u0003\tĈňЈ\u0004\u0003ݻݻ\u0002\u000b\u0001\u0004\u0002\u0004\u0003\u0004ԀԀ\u0004\u0004ԨԨ\u0001\u0004\u0001\u0001\u0004<ĈĈψ꿬꿴֢آܹ޵\u0004\"ĈĈψ꿌꿄꿄꿀꿀¢¢\u0004\u0019ĈĈψČ꓌τ꿄꿀꿀¢¢\u0004<ĈĢĈĢĈĢĈĢĈĢĈޞڞڌڌތ܌ތ݌݌݌ތ܌ތڞڌڌތܿ݀݀ހ܀ހڀڀڀހ܀ހ݀݀݀ހ܀ހڀڀڀސ܀ހ݀\u0004<ĈĢĈĢĈĢĈĢĈĢĈĢڰڰڰްܰްݰݰݰްܰڰڰڰ݀݀݀ހ܀ހڀڀڀހ܀ހ݀݀݀ހ܀ހڀڀڀހ܀ހ\u0004\u0013݀݀ހ܀ހڀڀځށ܁ރ݃݇ݏ޿ժ\u0004\u0013݀݀ހ܀ހڀڀڀހ܀ހ݀݀݀ހժ\u0002\u000fԊ\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0004@쁀ȝ󀀎ك瑻℘ϣ󹄎턛ۅ℘ϣ󹄎턛ۅ℘ϣ󹄎ۅ℘ϣ󹄎턛ۅ℘ϣ󹄎턛ۅ윲ͣ󦄎ٹ瑛\u0004\f瑛𜲇℀Σไ\u0001\u0001\u0001\u0001\u0004=󀀀ك恠✠ϣ̣ħǆͦ󆜲ۧ⼆ϣ̇ćǦ͆✠ǜسׯϟʗޜ񀀀\u0001\u0001\u0001\u0001\u0004:ꀀꀀꀀժꑢĈꑢĈꑢĈꑢĈꑢĈꐢĈꐢꐢꁢꇈ꜠ٳׯϟ˗Ꝼꀀꀀꀀꀀꀀ\u0004\fĀĈ\u0004\u0013ժժȡժժ\u0004)ĀĈՊЪȡՊЪ\u0004\u0015ՊЪȡՊЪ\u00044ĄĄĄĄĄĄĄĄĄĄÂĀāǂ܀\u0004\u001eĈĠĿѿĀĀĀĀĀ\u0002;\u0004:ۀπۀπ۠π۠ρۡߛߛۂφۄۙ۳ۿޝޛ\u0004\u001eժժĈĈĈĈĈĈĈĈĈĈĈĈĈĈĈ✠Ĝٳׯϟ˗ޝ\u0004\u0004ψۀ\u0004 ժժĈĈĈĈĈĈĈĈĈĈĈĈĈĈĈĈĈ‑ĈǇ˗\u0004 ժժĈĈĈĈĈĈĈĈĈĈĈĈĈĈĈĈĈ③ĸĈڑĈĈΑ߄ޏ񀀀\u0004\u0016\u0001\b\u0001\b\u0001\b\u0001\b"
  },
  {
    "path": "01 POP Source/Images/IMG.CHTAB1",
    "content": "A``VaaGbb{c\u0019ddeKffgyhhDiiiajjekkil7mQn3oo[pp\u001eqqqkrr}s\u0013ttu<v\u0015w6x(yyzG{{{a||R}}7~~~'1\u0004o΁3q'\u0002)࿀ЏЏЏЎԎЀԀԁԃ\u0003)Ѐ࿀࿀迀聀ꀀꁀ\u0003(Џ䟀ׁׁ׀ീീ\u0003'ğϟ𝀸聀ꀀꁀ\u0004&ǿǟϟߟߟ돀돀끀뀀뀀຀ԃԁԃ\u0004&߂׀Հ\u0004'𫀀ߊ߂߀🀀🀀\u0005(࿀񏀀߁׀׀߀߀πǀ׀Հ࿀࿀\u0005(Ѐ؀ߞооؾ߂ׂ׀\u0004'🀀Ճׂ߂߀׀Հ\u0004&ρϿϟǿ￀￀Շ׃׃׃Ձീ臀\u0005(࿀՞Ԇކކދ׋ׁ׀🀀🀀\u0005(🀀ꃀꃀુ઀઀ЇԀԁԃ\u0003'〰ԇ߇߃߃߀߀׀Հ聀ꀀꁀ\u0002)\u0002)ППԀԀԃ\u0002(𕰅ꁪ\u0003'߂ՀՀꁀꀀ\u0004!ԿԮתߊ\u0004\u001fժժ\u0004\u001f🀀ꏀꁀ\u0004!Ԇԁ\u0006\"އ𿀀𿀀МІЎ\b#🀀𿀀\b\u001cƁ࿀𿀀௝ժЊ\u0006\u001b㿀󿀀􏀀􇀀􇀀􃀀􁀀Ⱥ\u0005\u001a㏜󟞀ꁀտ࿀࿀\u0003\u0019ǂÀрӀꏀ\u0004\u001d􃀀Џп\u0003\"蟀\u0003$\u0003'ꇀꇀ臀臀胀胀胀ꀀꁀ\u0002(п࿀\u0005&🀀🀀激ԿпПЎ؆ނ߀߀׀ꇀꀀꁀ\u0004%ǁÃ׊ׂꏀꀀꁀ\u0005&Ͽ࿀࿀🀀ժՊꁀ\u0006'က𿀀࿠🠀🨀ǂ׀臀ꃀ\u0003)ֿ֞ގߎ߂ׁ׀Ԁԁԃ\u0005+🀀࿀࿀а🀀\u0007)࿀Ꝁ\b\u001eꟀ֮ޮ޾\u0006\u001b࿦𿾀߂׀Հޮޮ\u0006#׊ՂՀ\u0005!🀀߂ׂՀо\u0002'܆܆܆܆܆܆܆؆\u0002'ܾоԿԟ࿀\u0003(؀׀߀߀\u0003(ÇÇÇ࿁Ŀ࿀࿀\u0003'ߊނ􀀕\u0003%ППОЃԀԁԃ\u0003&և׃׃փփցցց\u0002'꿨\u0002'\u0002'\u0003&࿀࿈Ђ\u0004%𿀀🀀🀀🀀必俁Կп\u0003#\u0003\"߂߀߀߀߀߀߀\u0003#ÏÏÏÏ߀߀߀߀\u0003\u001fπς߀׀藀߀߀܀܀\u0003!࿁\u0002\u001e\u0002\u0018\u0001\u0018\u0004\u001aЂЊԫիԫԫՋԀՊŊ\u00030"
  },
  {
    "path": "01 POP Source/Images/IMG.CHTAB2",
    "content": "F`^aab[ccdfeefDggh&i|i jrjj\u001aklkk8llPmm2nn\u0011oo8pp\u0018qzqq\u001crnrqr\fssNtt2uuFvvwxPy\u001azz{'||O}}\u0016~]~~~\u001a|\\ր\\ǁ;\u0005)ßϟ𕀀𗀀𗀀׀߀߀߀߀߀߀🀀🀀\u0003'เเ࿠􀀕\u0006'࿀߂߂߀𝀀🀀🀀\u0004&🀀ԀԀ🅀𿅀𿁀𿁀ເ࿀࿀\u0004&Հ׀߀߀߀߀߀🀀🀀\u0005%ϟԂՊ𿁀𿁀𻀀࿀࿀\u0005$ՀՀ߂߇ނІЎ\u0004!ގ܂ъ\u0005!ъՃ\u0005#Ͽߟ߃߂߂\u0005$ßÿЀЯ\u0004%ǟ߿߿߂ކ܎ЎПீ\u0004%珀矀Ͽ߀߀πǀǀÀ׀תը🀀🀀\u0007\fը׀𕀎\u0006\u001b葠𗠿ЯЬЬЮ\u0005\u0010Հӂ򃊠㏀Ï\u0002)쏬\u0002)쏬\u0002(؎؎ЎЏЀЁԃԇ\u0002(\u0003(߂߀׀聀耀ꁀꃀ\u0003(߂ߨߨ׊ׂՀ샀耀ꁀꃀ\u0004'𿀀𿀀𿀀🀀܇Ǫժ耀ꁀꃀ\u0003&ժՂ耀ꁀꃀ\u0003$࿀࿀ނ߆߆߃ׁׁ耀ꁀꃀ\u0003#ԟԏԇ􀀔\u0003&샀惀⁀􀠵\u0003/࿀܇ꏀꏀꃀ\u00032࿀菀\u00028ނ؂ЎООܞܞІЀЀ\u00026\u00020އ܇܇ЃԀԁԃЃփփЀ\u0002)ЂІЎ\u0002&ꇪ\u0002(ԿпОЂІЎ\u0001\u0001\u00033࿀࿀\u00035࿀\u00035ׁׁցԀЁԃԃЃЁЀ\u00027\u00029ЎООО\u00027ގ؎؆ЀЃЇЇЇЇЃЀ\u00036Çχ臀聀耀\u00036聀聀聀샀聀耀\u00043က぀ǃ燀Ǉ𿀀𿀀聀聀聀聀耀\u00043胀臀臀胀샀\u00042矀𿀀𿀀𿀀𿀀փփԁ􀀀􁀀􁀀􁀀􁀀\u00042࿀𿀀𿀀؇؃ЃЃЁЃ􃀀􁀀􀀀\u00042࿀𿀀\u0005#㿀󟀀񏀀񇀀ЪԪ臀臀\u0004$վԺЏԁ􃀀\u0004#𿀀🀀𿀀࿀࿀Ꟁ\u0004&࿀՞Ն\u0003$пď\u0003\u001dпІЎ\u0003\u0017По\u0003\u0013Ǐ臀\u0003\u0014\u0003\u0016\u0004\u0018燀񟁀񿀀񟀀῀\u0004\u001a\u0004\u001dχ㏀㇀　蟀Կ\u0004\u001eៀ𾀀\u0004!ُ𛀀𻀀ֿן臀\u0003#܆؎܏֏ꇀ\u0003&ꀀເເԃԁ\u0002'Џ؏؏؏؎􀕀\u0003\u0004𿀰\u0003\u0004ܟ\u0002\n\u00030࿀净Շꁀꇀ\u00030࿀ꁀꇀ"
  },
  {
    "path": "01 POP Source/Images/IMG.CHTAB3",
    "content": "N``Aaa\bbbbccd,eeeIff\u000fgiggh\u0016iii^jj2kk\u0006ll\u000emvmmmmmmmmm\u000bn=nunnnnnn\u0001o\u000bo\u0019o)o1oo\u001fpp\u0010qqqrrrs\u001att%uu\rv!vGvovvvvvvvv\u000ew.wEwOwaw\u0002(菨\u0002'ԏЏЏЎЂЂЇ\u0002'ԟԟЎЊЀԀ\u0003'ßρ࿁ԇЎЂЏ\u0004&灀߁臀臀\u0005&Ǐ🇀𿀀𿀀࿀࿀ЪЪ𿀀𿀀࿀\u0004&𿀀臀\u0004%ЀǏχ𿎀🀀🀀🀀\u0004&ρ𿁀ԂԂԀԁԃ\u0003'࿀ՂԂԀԁԃ\u0002(׀׀߀ހހހ\u0002)࿠\u00025耈\u0002,🨟胊\u0002,ՎԞ\u0003-聀ꀀ\u0004'ʿꟀꏀ菀ꏀ뇀냀\u0004!Ь֮֮\u0004\u001c\u0005\u0016şŏ埀ퟀנퟀר߮\u0005\u0014߁Տܺ叀ߏ\u0005\u0018󀀈ď񀀀ר蟀\u0004\u0016ſ\u0004\u0018꿀\u0004\u001c蟀\u0004\u001f\u0004\"\u00023🠟胈\u0001\t\u0002\u0002\u0003\u0003\u0003\u0004\u0003\u0007\u0001\u0007\u0003\u0005\u0002\f\u0003\n\u0003\u0010\u0003\u0012\u0003\u0006က\u0003\f\u0004\u0004\u0004\u0003\u0003\b\u0002\u000b\u0002\u0004\u0003\u0004\u0002\u0007\u0003\u0002\u0003'ߟߟ֪ՠ\u0003'ǟǟ܆ՆՂЎОО\u0003(ϟϟϏԪ\u0003'ϟϟԎՎ܊݇ІЎЎ\u0003'ЪԿվ聀ꀀꁀ\u0003'ǟϟ߃׃ׂԀԁԁ\u0003&ǿϟԇՁ\u0003&ÏррЯկ\u0004&㿈㿈ῈῊ߂׀׀Ԫܪ\u0004&ςςπ׀腀֪ꁀ\u0004&؀ǟǏ珀珀ހ݀🀀🀀\u0003%ßßЀ׿ӾО\u0003&࿐࿔ППԯЯЮЎ܆\u0003&ໄໄຄ྅опппЯЯЎ؎\u0001\u0012࠰\u0002\u0012ЀЀ\u0002\u0013\u0002\u000fՀ\u0004\bЂު\u0004\u0003\u0003\u0006Հ\u0002\u000b\u0002\u0007\u0001\u0001\u0002\u0007\u0003\n\u0003\u0007\u0002\u0004\u0002\b"
  },
  {
    "path": "01 POP Source/Images/IMG.CHTAB4.GD",
    "content": " C``abc|dFeefZg\u001ahhiUj;k'llmfn\u0004ooXppqq'rrrVsss]tt\u0005$񯅀񯁀῁῀ៀ՟՟՟՟ԟП菀𿀀ꃀ\u0006%߀翀վվտԿԿ🀀🀀ПЏ叀叀\u0006$࿀𿀀􇀨ꟀꏀՀ🁀𿁀ꁀ\u0007!🀿՘࿀ԘԪԪԪЪЪ🀀О܂ӔՅ׀\u0006%߿߿߿տԾԀԂԪЪЪ뾅ꚅʄǀ\u0005(՟ԊԂՂ׀𗀀⏀ꏀꏀ폀׏\u0004(Дԧԯ\u0004'ԔДоꀀꃀ\u0006#🀀ԿԾԾԾЪЪЪʀʀπ߀߀Ѐ\u0005&􏀀􇀀Ԥжܞꁀꃀ\u0005%ꁪ\u0005%è߫߯د࿀ៀ埀埀􏀀􏀀ٿ՟՟ԏ\u0005'ꁀ\u0006&԰ԂԪԪԪت\u0006'🀀࿵ԀԀ԰ԼԼ԰ԊԪЪ럀ʀڀЇԀԁԇ\u0004*諂ЎО\u0006$🀀ԀЊЪЪꁀӞ\u0005%ЀЊª߂߀߀ԁԇ\u0004'񏴠ԔДоꀀꃀ\u0004'ԔДоꀀꃀ\u0005$߆򿀀򟀀忀🀀菀\u0004%՞ՆՀꀀ࿀꿀􏀀ԃ\u0004$聀ЪЪԪԊԂԂԊКкк؀ş\u0001\u0001\u0006\u001b𿪅ʯԪЪЪžѾѾѾѾ՞՞ޞ\b\u000eԪЊꫥꏠꏠêժǪՊՂ⪕⫅߂׃և\u0002(ккԺԞԞԞОооооԞԞԏԇ\u0003#ԊԊʀؾоОԞԝԅԅԏꀀꃀ\u0003 ЪЪЪ퇐폀ҀԀހ\u0003\u0016ԪԮЮ뀨므Ń큠ʏ\u0005\u0013ժ꿾ʇȯԀՀЅЀЀ\u0006\u000bժՔӟՔӿ׿ժԪԀՀЅЀЀ\u0006\nժǏՔӟՔӿ׿ժԪϏ􇀀က𿀀࿠🠀🨀ǂ׀臀ꃀ\u0003)ֿ֞ގߎ߂ׁ׀Ԁԁԃ\u0005+🀀࿀࿀а🀀\u0007)࿀Ꝁ\b\u001eꟀ֮ޮ޾\u0006\u001b࿦𿾀߂׀Հޮޮ\u0006#׊ՂՀ\u0005!🀀߂ׂՀо\u0002'܆܆܆܆܆܆܆؆\u0002'ܾоԿԟ࿀\u0003(؀׀߀߀\u0003(ÇÇÇ࿁Ŀ࿀࿀\u0003'ߊނ􀀕\u0003%ППОЃԀԁԃ\u0003&և׃׃փփցցց\u0002'꿨\u0002'\u0002'\u0003&࿀࿈Ђ\u0004%𿀀🀀🀀🀀必俁Կп\u0003#\u0003\"߂߀߀߀߀߀߀\u0003#ÏÏÏÏ߀߀߀߀\u0003\u001fπς߀׀藀߀߀܀܀\u0003!࿁\u0002\u001e\u0002\u0018\u0001\u0018\u0004\u001aЂЊԫիԫԫՋԀՊŊ"
  },
  {
    "path": "01 POP Source/Images/IMG.CHTAB4.SKEL",
    "content": " C``abYc'ddxe\nff}g)hhidj>kkl@mmdn\u0015oo9p<pp@qCqFqIqLqOqq\u0005\"ǘ뇀\u0006\"𿂀࿀࿀臀\u0006!΁Ã߀퀀瀀\u0007\u001eǀ࿀ 󂟀\u0006\"㠀Àρ݁ɀฎ⁀رÁ􃀀\u0005%　섀΃끀܀ЁρЏ🀀\u0004%̇぀΃܁̀࿀\u0004$ೀ࿀솀\u0006 🀀ව󀀀โ󀀀\u0005#ࠀ老ކ܇㇀􁀀\u0005\"܇؋߁\u0005#ޙ🀀×𸇀ೆ샀\u0005$΃ȁ\u0006#🃀ǁ܀􀀀࿀\u0006$灀඀΁\u0004#ȃ􃀀\u0006!🀀șƍ臀\u0005\"ЃÀÁÁೀࣞߙ\u0004$ೀ࿀솀\u0004$ೀ࿀솀\u0005#臀\u0004$Áダダ쀀Ì𾀀Џ🀀\u0004$𹀀぀Ã𸀀Ƒρ񀀐ㅛ􃀀\u0001\u0001\u0005\u0018ǁ񀀇Λ䁀\u0004\"うÁ獃ী怀胀\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0006\nժǏՔӟՔӿ׿ժԪϏ􇀘ী怀胀\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0006\nժǏՔӟՔӿ׿ժԪϏ􇀪ЊꫥꏠꏠêժǪՊՂ⪕⫅߂׃և"
  },
  {
    "path": "01 POP Source/Images/IMG.CHTAB4.VIZ",
    "content": " C``abcvd;eesfAg\u0001hhri2j\u0012kkl^m\u0019nnMoop!q$qq:rrrnss\u0013tbt\u0005$񯅀񯁀េៀៀ՟՟՟՟ԟПППпп俀🀀\u0006%Ç柀翀վԿԿԟ֟֟ППՏ叀叀샀蟀\u0006$࿀𿀀􇀨Ꟁꏀ࿁𿀀\u0007!🀿՘࿀ԘԪԪԪЪЪ🀀ח쇀蟀\u0006$ϟ߿߿߿տԾԀԂԪЪЪￅ瀀샀蟀࿀\u0005'՟ԊԂՂ׀𗀀⏀ꏀꏀ鏀ޏꃀ𿀀\u0004'ԟ՟ןԿտտտՏ\u0004&񃼠ԾԾԟԏ󃀀\u0006\"🀀ԿԾԾԾЪЪЪЪߪϪЀ뿀􏀀\u0005&ԟԟПߞמվԾԾԞԞԏև󃀀\u0005$ꃨ꿪ԟԟԟԟԿԿԿԟ՟՟蟀\u0005%ϧϿ࿀῀埀埀՟՟՟՟՟ԟԟԟԾԾ־ӾӾѾўЎЎՎ՞՞՟ԏ\u0005&􏀀叀寀寀忀埀􏀀\u0006%԰ԂԪԪԪت􇀀\u0006&🀀԰ԾԾԾԾ԰ԊԪЪ諽燀􏀀\u0003.꿀꿀꿀꿀꿀꿀忀忀꿀꿀꿀꿀꿀迀迀⏀ԃԏ\u0006$🀀ЊЪЪ꿀؇п\u0005%Њ􏀀\u0004&߰ﯠԾԿԟ\u0004&ԾԿԟ󃀀\u0005\"ώ򿀀򟀀忀샀菀\u0004$՞ՆՀ􏀀\u0004%תߪЪԊԂԊԚкк\u0001\u0001\u0006\u001b𿪅ʯԪЪЪžѾѾѾѾ՞՞ޞ\b\u000eԪЊꫥꏠꏠêժǪՊՂ⪕⫅߂׃և\u0002&ккԺԞԞԞОооооԞԞԟԏ\u0003\"ԊԊʀоԾԟԟԟԏ쁀菀\u0004\u001fꀀЪЪЪ퇀폀🀀샀蟀\u0003\u0016ԪԮЮ뿀ʟ\u0005\u0013ժժժ򁀀ԂԀ\u0007\u000bԪՊտտʟ\u0005\u0013ժ꿾ʇȯԀՀЅЀЀ\u0006\u000bϏߟӿ׿ԯχӿ׿ժԪϏ"
  },
  {
    "path": "01 POP Source/Images/IMG.CHTAB5",
    "content": "-]``a{bVc$ddue\u0007ffng\bhh\\i6j\u0010k\u0013kkol\u0005mWmm+nn\u001boo\u0012plppOqqUrrUsssOtt]u\u000bvYvvv=www\u0004\"ß🀀🀀𕀀׀׀ꕀꅀꁀ\u0005&ÿծծՀ׀ꃀ\u0006#㟀ժݟ׏ՏՂՂ\u0007\u001f🀀뀀🀀պЪ݂ݪݪ\u0006\"뀾🀀׊ׂ׀\u0005%ៀ󏀀߆݆߂߂߀߀🀀🀀\u0004%ǟ⁀࿀࿀\u0004$ׁׁ׀߀߀߂߂׀Հ땀ꅀʇ࿀࿀\u0005\"࿀ի\u0005%߿߿࿀ീ򵀀׀׀蕀ꇀꀀ\u0004&Ճׂׂ߂굀ЂԀ\u0004'𿀀𿀀𿀀Ձ׀׀߀Հ\u0005$຅຅к򁀀Ў\u0006$࿀Ъી寀𫀀Ћԏԁԃ\u0006$܇𿀀ீீ𯁀߿߯֫֫Ջ\u0001\u0001\u0006\"ǟժݿןՏՂՂ\u0004#߆߂݂݂݊\u0004%ՁՁպ׀պ׀׀߀\u0004\u0014ǁիկ\u0004\u0018ダ뿀ի돾Ͽ\u0004\u001c࿀࿀🀀ԏ׏ׇ\u0004 𿀀🀀𿀀냸냰끠\u0003$Ппؚݎ݆݂\u0003(຀ເીீீીીՊՏՁ\u0003)؎؞ЏԆՆՎ׏ׇ\u0002,࿀ߟ\u0002,Пк\u0003-ӀÀÀ׀׀׀🀠􁠰\u0003-࿀׀ǀÀǂǂ߂׀׀׀ՇՃу\u0003)࿀ӀÀÀÀǂςς߀׀׀ՇՇԁ\u0003+࿀Àǀǀǂ߂߂߂݀ԏԞԞԞԚЀ\u0003)ррÂÂǂς߂׀׀׀ׁՏՏԎԆЀ\u0003*ς߂߀׀׀ׇߟ֞ԞԚԂЀ\u0001\u0001\u0003'߀߂\u0003&࿀࿀࿀ુઁоվ຀ЂІЎ\u0004&ǟǏ珀㇀пտŋЀޚ࿀࿀\u0004+࿀࿀࿀࿀𿀀𿀠𺕊кІЎ㇀\u0002&\u0002!\u0003\u001e菀\u0003\u0016՟׾׾ԿԿ臀\u0005\u0011ગ׀׀πÂ\u0006\u0010ՀՂ͊ʏꏠꏠ"
  },
  {
    "path": "01 POP Source/Images/IMG.CHTAB6.A",
    "content": "g````\ra\u001ca+a:aIaXaa[bb:ccc!dndd\beUeeeeeFffLggLhhi'jjj2kk8llm\u0017n\u001an\u001dn n#n&n)n,n/n2n5n8n;n>nAnDnGnJnMnPnSnVnYn\\n_nbnenhnknnnqntnwnzn\toopq_r\u001dssAtteuuvKw\txxyz{|P}\u0012~~6)ӂ\u0001\r\u0001\rЀ\u0001\rԔ\u0001\rԔ\u0001\r\u0001\rДЀ\u0001\r\u0001\r\u0001\rДĀ\u0003+ԪԪԪЪЪЪʏꏀևևԃЃЃЁЁЁЁЁЁЃ҇чус\u0003*ԪԪԪЪЪЪʏꏀԇևևԃЃЃЁЁЁЁЁЃЇ҇уср\u00030\u0003\u0019߇̆Ύ͖Ơ̆̏ƵՌՍՎՎՎՎ\u0003\u0019߇̆Ύ͖Ơ̆̏ƵՌՍՎՎՎՎ\u0003\u0019ߧ՜̆Ύ͖Ơ̆̏ƵՌՍՎՎՎ\u0003\u0019߯՜̆Ύ͖Ơ̆̏ƵՌՍՎՎ\u0003\u0019ߧ՜̦ՌΎ͖Ơ̆̏ƵՌՍՎ\u0003\u0019ߧ՜̦ՌΎ͖Ơ̆̏ƵՌ\u0003\u0019ߧ՜̦ՌΎ͖Ơ̆̏ƵՌ\u0003\u0019߯՞ήՎήՎ͖Ơ̆̏Ơ\u0003\u0019߇̆Ύ͖Ơ̆̏ƵՌՍՎՎՎՎ\u0001\tĤ\u0001\tĠ\u0001\t\u0003+ՊՊՂՂՂՂՀՀ׀׀Ԃ䒀ࢀАА\u0003+ժժՊՊՊՊՂׂτ࿃ԎծЮ΀\u0003+ժժժՊՊՊՊׂ߂࿀࿀Ԃ\u0003*࿀฀ఀՀժժժժժՊՊ׌׆׃ժՠ\u0003*ՊժԪԪԪЪЪЪЪ\u0004*ԊժժԪԪՀԪԪԪԪժӊךΌՀĀ\u0004+ՀՊՊՂՂՂՀՀՁΟǎφ\u0003+ժՊՊՊՂՂՀՂ僫瀀\u0003+ժժՊ՚՚ՌՆŇ脀聀胀胀聀耀\u0003\u0001\u0003+ՊՊՊՊՂՂՂՀՎՇ\u0003+ժԪԪԪЪЪЪԃЃЃЇ֏ҏ҇փ\u0003+ՊՊՂՂՂՀՀՁԿԿппо耠\u0004+ժժժժժժժʃտ𿀀胀胀胀胀胀臀\u0004+ՊժժժժժժժՒ՟񏀀ꀀ耀耀聀胀郀遀退\u0003+ԪԪԪЪЪЪʏꏀևևԃЃЃЁЁЁЁЁЁЃ҇чусƂ\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003/՟՟Տ࿀࿀࿀؏Ўо\u0004/տտտ՟՟؏Ўо\u0005/׏ЪЪ꿀꿀꿀\u0005/ߏྀ࿀\u0004/ЂЂЊЪ꿀꿀꿀꿀꿀\u0004/տտྀ࿀\u00030؏Ўо\u00030珀忀؏Ўо\u00030؏Ўо\u00030؏Ўо\u00030؏Ўо\u00030ྀ࿀\u00040\u0004/\u00050̟\u0005/Ꟁ🀀\u00050𡕨ժժժժժתת׊ߊ𿊀𿀀𿀀𿀀߁߀߀𿀀\u00050оЂЂЂԂԂԀԀԀՀՀՀՀՀ𿕀࿕׀׀߀߀߀߀߀߀࿀\u00050🀀ըԪԪԪЪЪê𿪅𿁀࿁࿁𛀀🀀\u00030蟀蟀蟀蟀蟀蟈菨\u00040蟀蟀蟀ꟀꟀ\u00030\u00030菀菀菀菀菈菊菨臸Ŀ쟀࿀\u00030кккккккоԾԾԾԞԟԟԟԏԏҏҏ׏ՏՇ؏Ўо\u00041𝀀ЎԎԇԇՇՇՇ؏Ўо\u00051ЂЂ ⁀򁀀վ՟՟՟ՏՏՏՇЂЀ؀ꁀڀꃀ\u00036տ\u00038ԀԂԂՏ՟տԀЀД\u0003:\u00026ꃨ"
  },
  {
    "path": "01 POP Source/Images/IMG.CHTAB6.B",
    "content": "I````````\ra\u001caajbbLccc3ddd\u001aegeeeeeXff^gg^h\bii9jj?kkEllvm$nnAoDoGogoo\tpppq rrhsttu>vvZwwIxx\u001cyzyy[zzM{{|\u0019}}M~~t\u0001\r\u0001\rЀ\u0001\rԔ\u0001\rԔ\u0001\r\u0001\rДЀ\u0001\r\u0001\r\u0001\rДĀ\u00040ԄԈԜռռռ՞՞՞՞՞՞՞ՎՎՏՏ遀ß\u0003.ԄԈԜռռռ՞՞՞՞՞՞՞ՎՎՏՏԔԏՇՇՃ\u00031\u0003\u0019߇̆Ύ͖Ơ̆̏ƵՌՍՎՎՎՎ\u0003\u0019߇̆Ύ͖Ơ̆̏ƵՌՍՎՎՎՎ\u0003\u0019ߧ՜̆Ύ͖Ơ̆̏ƵՌՍՎՎՎ\u0003\u0019߯՜̆Ύ͖Ơ̆̏ƵՌՍՎՎ\u0003\u0019ߧ՜̦ՌΎ͖Ơ̆̏ƵՌՍՎ\u0003\u0019ߧ՜̦ՌΎ͖Ơ̆̏ƵՌ\u0003\u0019ߧ՜̦ՌΎ͖Ơ̆̏ƵՌ\u0003\u0019߯՞ήՎήՎ͖Ơ̆̏Ơ\u0003\u0019߇̆Ύ͖Ơ̆̏ƵՌՍՎՎՎՎ\u0001\tĤ\u0001\tĠ\u0001\t\u0003+ՊՊՂՂՂՂՀՀ׀׀Ԃ䒀ࢀАА\u0003+ժժՊՊՊՊՂׂτ࿃ԎծЮ΀\u0003+ժժժՊՊՊՊׂ߂࿀࿀Ԃ\u0003*࿀฀ఀՀժժժժժՊՊ׌׆׃ժՠ\u0003*ՊժԪԪԪЪЪЪЪ\u0004*ԊժժԪԪՀԪԪԪԪժӊךΌՀĀ\u0004+ՀՊՊՂՂՂՀՀՁΟǎφ\u0003+ժՊՊՊՂՂՀՂ僫瀀\u0003+ժժՊ՚՚ՌՆŇ脀聀胀胀聀耀\u0003+ЪժՊՊՊՊՂՌՏ\u0003+ՊՊՊՊՂՂՂՀՎՇ\u0003+ժԪԪԪЪЪЪԃЃЃЇ֏ҏ҇փ\u0003+ՊՊՂՂՂՀՀՁԿԿппо耠\u0004+ժժժժժժժʃտ𿀀胀胀胀胀胀臀\u0004+ՊժժժժժժժՒ՟񏀀ꀀ耀耀聀胀郀遀退\u0003+ԪԪԪЪЪЪʏꏀևևԃЃЃЁЁЁЁЁЁЃ҇чусƂ\b\u0013ՊՂՂՀՀ\u0001\u0001\u0001\u0001\u0002\u000f\u0002'ԈԨԪԪԪԪ̪̊܊򀪀\u0002(ŉժժԪܪ臨ؗ\u0003'𜀰ՀՀՂՂՂ߂߀࿀࿀࿀ЊпплЪ਀਀\u0003&ЪЪԪЪЪЪ؀ԀՂԂЀ\u0004%၀၀Ԫժժժժժի胀菀菀\u0004%ՠբժժժժ߃߀߀׀ր􀀀􀀀􁀀􁀀􃀀􃀀ЁЀ\u0004$ЊԪԂԪժժժժԪժЪժՊ\u0005$ЪЪժԪժԪЪǀπ׀\u0007(؀ЀԪԪԪЪՀՀՂՂ࿀࿀𿀀𿀀Ђ𿀀𿀀🀀ԪԪ՟Տԏԁԁ\u0006(ԎԪԪժԪժЪ꿀ЪꟀꏀꇀ࿀࿀\u0005(珀ÃÃЪşԪşԪşԪЪЪЪ￀ՃރЪЂ񟀀\u0004(揀އ܇쏀쏀ꏀꏀꟀꟀꟀꟀꟀꟀоо࿿ꇀܯտƾܾ迀࿀\u0003(΃߿߿߿ҺҺҟ⏀\u0003(惌܃܏̟ʟߟ߿߿߿߿Һҿ⇀\u0005\u0017ԪԪՀՊժժՊ׊ׂ߂ך֪ԯЀدЦ\u0005\u0017ԪԪՀՊժժՊ׊ׂ߂ךЂ֪ԯدЦ\u0004\u0017ԪԪՀՊժժՊ׊ׂ߂ڐ֪ԯدЦ\u0004\u0017ԪԪՀՊժժՊ׊ׂ߂ڄ֪ԏ؏І\u0005\u0019ովժժժՀՂՂՂՂ\u0004\u0018ՂժԪުՀ߀Հр΁\u0005\u001aЪԪՀЪՊժժժת𿥀કꁀ냀뇀ࠀ\u0004\u001bꇀꁀԪՊԪՊЪՊЪժժժ׈ܪ؎Ў𞀀\u0005\u001eЪժժժժժת߂ЀЀ\u0005 ՇժժՀժՂժՂժՂժՀժՀԪ🊀Ђ҂Ă𐀀\u0004$ՃՁՊժժժժժժժ埁ǂÀӀЀЀȁ\u0004%ժժժժժժժժժժǂ׀ЀЀÁ\u0004'ժժժժժժժժժժ􀀠ЀрÁ\u0004*ЪՀԪՂԪՂԪՂԪՀЪՀЪЪЪꟀࠀÀ\u0003)ժժԪԪԪԪԪЪУЧчуср"
  },
  {
    "path": "01 POP Source/Images/IMG.CHTAB7",
    "content": "\b\u0013`y`\u000baa/bbAccd\u00022ккккккккккоооооОППԏԇԿԿԿԟ䀊\u00030ꏀꏀꏀꏀꏀꏀꇀꇀ\u00030迀迀迀迀⏀ԃԏ\u00030迀迀迀迀迀迀迂迚꿀꿀蟀⏀ԃԏ\u00020ԃԏ\u0003:Ԁԃԇ՟՟ՏՏ\u0003:ԀԃԇՇ\u00030臀臀臀臀ꇀ"
  },
  {
    "path": "01 POP Source/Source/AUTO.S",
    "content": "* auto\nDemoDisk = 0\norg = $5400\n tr on\n lst off\n*-------------------------------\n*\n*  PRINCE OF PERSIA\n*  Copyright 1989 Jordan Mechner\n*\n*-------------------------------\n org org\n\n jmp AUTOCTRL\n jmp CHECKSTRIKE\n jmp CHECKSTAB\n jmp AUTOPLAYBACK\n jmp CUTCHECK\n\n jmp CUTGUARD\n jmp ADDGUARD\n jmp CUT\n\n*-------------------------------\n lst\n put eq\n lst\n put gameeq\n lst\n put seqdata\n lst\n put soundnames\n lst\n put movedata\n lst off\n\n dum $f0\nztemp ds 1\nprob ds 1\n]cutdir ds 1\nProgStart ds 2\n dend\n\nplus1 db -1,1\nminus1 db 1,-1\n\n* Thresholds for cut to new screen\n\nTopCutEdgePl = ScrnTop+10\nTopCutEdgeMi = ScrnTop-16\nBotCutEdge = ScrnBottom+24\n\nLeftCutEdge = ScrnLeft-4\nRightCutEdge = ScrnRight+4\n\n*-------------------------------\n* Locations of special objects\n\nflaskscrn = 24\nflaskx = 3\nflasky = 0\n\nmirscrn = 4\nmirx = 4\nmiry = 0\n\nswordscrn = 15\nswordx = 1\nswordy = 0\n\nmousetimer = 150 ;from topctrl\n\n*-------------------------------\n* Strike/block ranges\n\nstrikerange1 = 12\nstrikerange2 = 29\nblockrange1 = 0\nblockrange2 = 29 ;from TestStrike\n\n*-------------------------------\n* Other constants:\n\nswordthres = 90\nengardethres = 60\nstrikethres1 = strikerange1\nstrikethres2 = strikerange2\nblockthres1 = 10\nblockthres2 = blockrange2\ntooclose = strikethres1\ntoofar = strikethres2+6 ;min dist at which you can advance safely\noffguardthres = 8\njumpthres = 50\nrunthres = 40\nblocktime = 4\n\n*-------------------------------\n*\n* Fighter params (indexed by guardprog #)\n*\n* strikeprob = probability x255 of striking from ready posn\n* restrikeprob = prob x 255 of restriking after blocking\n* blockprob  = prob x255 of blocking opponent's strike\n* advprob = of advancing to within striking range\n* refractimer = length of refractory period after being hit\n*\n*               0   1   2   3   4   5   6   7   8   9   10  11\n\nstrikeprob\n db 075,100,075,075,075,050,100,220,000,060,040,060\nrestrikeprob\n db 000,000,000,005,005,175,020,010,000,255,255,150\nblockprob\n db 000,150,150,200,200,255,200,250,000,255,255,255\nimpblockprob\n db 000,075,075,100,100,145,100,250,000,145,255,175\nadvprob\n db 255,200,200,200,255,255,200,000,000,255,100,100\nrefractimer\n db 020,020,020,020,010,010,010,010,000,010,000,000\nspecialcolor\n db 000,000,000,001,000,001,001,000,000,000,000,001\nextrastrength\n db 000,000,000,000,001,000,000,000,000,000,000,000\n\nnumprogs = 12\n\n*-------------------------------\n* Basic guard strength & uniform color (indexed by level #)\n\nbasicstrength\n db 4,3,3,3,3,4,5 ;levels 0-6\n db 4,4,5,5,5,4,6 ;levels 7-13\n\nbasiccolor\n db 1,0,0,0,1,1,1 ;0 = blue, 1 = red\n db 0,0,0,1,1,0,0\n\nshadstrength = 4\n\n*-------------------------------\n*\n* 10: kid (demo)\n* 11: enemy (demo)\n*\n*-------------------------------\n*\n*  Automatic enemy control routine\n*\n*  In: Char vars reflect position in PRECEDING frame;\n*      Op vars reflect position in UPCOMING frame\n*      guardprog = program #\n*\n*  (Exception: When used by kid fighting in demo, both\n*  Char & Op vars reflect preceding frame.)\n*\n*-------------------------------\n]rts rts\n\nAUTOCTRL\n jsr DoRelease\n\n lda CharID\n beq :5 ;control kid in demo\n\n lda justblocked\n beq :jb0\n dec justblocked\n\n:jb0 lda gdtimer\n beq :gt0\n dec gdtimer\n:gt0\n lda refract ;refractory period after being hit\n beq :2\n dec refract\n:2\n lda CharID\n cmp #24 ;mouse?\n beq :6\n cmp #4 ;skel?\n beq :3\n cmp #2 ;guard?\n bcc :1\n lda level\n cmp #13 ;vizier?\n beq :4\n jmp GuardProg\n:1 jmp ShadowProg\n:3 jmp SkelProg\n:4 jmp VizierProg\n:5 jmp KidProg\n:6 jmp MouseProg\n\n*-------------------------------\n*  M O U S E\n*-------------------------------\nMouseProg\n lda CharFace\n cmp #86\n beq ]rts\n lda CharAction\n beq :1 ;already stopped\n lda CharX\n cmp #166\n bcs ]rts\n lda #Mleave\n jsr jumpseq\n jmp animchar ;sets CharAction = 0\n\n:1 lda CharX\n cmp #200\n bcc ]rts\n jmp VanishChar\n\n*-------------------------------\n*  S H A D O W M A N\n*-------------------------------\n do DemoDisk\nShadowProg\nSkelProg\nVizierProg\n brk\n\n else\nShadowProg\n lda level\n cmp #4\n bne :0\n jmp ShadLevel4\n\n:0 cmp #5\n bne :1\n jmp ShadLevel5\n\n:1 cmp #6\n bne :2\n jmp ShadLevel6\n\n:2 cmp #12\n bne :3\n jmp FinalShad\n:3\n]rts rts\n\n*-------------------------------\n* Level-specific code for:\n* Level 6 (plunge)\n*-------------------------------\nShadLevel6\n lda CharScrn\n cmp #1\n beq Shad6a\n rts\n\n* Level 6, screen 1\n* When kid jumps chasm, step on plate\n\nShad6a\n lda KidPosn\n cmp #43\n bne ]rts\n lda KidX\n cmp #$80\n bcs ]rts\n jsr DoPress\n jmp DoFwd ;step fwd\n\n*-------------------------------\n* Level 5 (THIEF)\n*-------------------------------\nShadLevel5\n lda CharScrn\n cmp #flaskscrn\n beq Shad5\n]rts rts\n\n* Level 5, screen 24\n* When gate opens, steal potion\n\nShad5\n lda PlayCount\n bne :1 ;continue playback\n\n lda #flaskscrn\n ldx #1 ;x\n ldy #0 ;y\n jsr rdblock ;gate\n lda (BlueSpec),y\n cmp #20\n bcc ]rts\n;begin playback\n lda #0\n sta PreRecPtr\n\n:1 lda #ShadProg5\n ldx #>ShadProg5\n jsr AutoPlayback\n\n lda CharX\n cmp #15\n bcs ]rts\n jmp VanishChar\n\n*-------------------------------\n* Level 4 (mirror)\n*-------------------------------\nShadLevel4\n lda CharScrn\n cmp #4\n bne ]rts\n lda CharX\n cmp #80\n bcc :gone\n jmp DoFwd ;run o.s.\n:gone jmp VanishChar\n\n*-------------------------------\n* Level 12 (final battle)\n*-------------------------------\nFinalShad\n\n* Screen 15: Jump on top of kid\n\n lda CharScrn\n cmp #swordscrn\n bne :cont\n lda shadowaction\n bne :cont ;already did it\n lda OpX\n cmp #150\n bcs :hold ;hold shad at top until kid arrives\n\n lda #1\n sta shadowaction\n bne :cont\n\n:hold lda #shadpos12\n ldx #>shadpos12\n jmp csps\n]rts rts\n\n* Continue\n\n:cont lda CharSword\n cmp #2\n bcs :fight\n lda OpSword\n cmp #2\n bcs :hostile\n lda offguard\n bne :face\n:hostile\n lda EnemyAlert\n cmp #2\n bcc :2\n jsr getopdist\n cmp #swordthres\n bcs :2 ;wait until kid gets close\n\n lda CharPosn\n cmp #15\n bne ]rts\n jmp DoEngarde ;draw on kid\n\n* turn to face kid\n\n:2 jsr getopdist\n bpl ]rts\n jmp DoBack\n\n* Normal fighting\n\n:fight\n lda offguard\n beq :1 ;has kid put up sword?\n lda refract\n bne :1 ;yes--wait a moment--\n jmp DoDown ;--then lower your guard\n\n:1 jmp EnGarde ;normal fighting\n\n* Face to face--swords down\n\n:face jsr getopdist\n bmi :merge ;whammo!\n\n lda EnemyAlert\n cmp #2\n bne :wait\n lda OpPosn\n cmp #3\n bcc :wait\n cmp #15\n bcc :go\n cmp #127\n bcc :wait\n cmp #133\n bcs :wait\n\n* If kid starts moving towards you, reciprocate\n* (Accept startrun & stepfwd)\n\n:go jmp DoFwd\n\n* Kid & shadow reunite\n\n:merge\n lda #$ff ;white\n sta lightcolor\n lda #10\n sta lightning\n\n jsr boostmeter\n\n lda #s_Rejoin\n ldx #85\n jsr cuesong\n\n lda #42\n sta mergetimer\n\n lda #0\n sta CharID\n jsr SaveKid ;shadow turns into kid\n jmp VanishChar\n:wait\n]rts rts\n\n*-------------------------------\n* S K E L E T O N\n*-------------------------------\nSkelProg\n lda #2\n sta CharSword\n jmp GuardProg\n\n*-------------------------------\n* V I Z I E R\n*-------------------------------\nVizierProg\n jmp GuardProg\n\n fin ;DemoDisk\n\n*-------------------------------\n* K I D (in demo)\n*-------------------------------\nKidProg\n jmp GuardProg\n\n*-------------------------------\n* G U A R D\n*-------------------------------\nGuardProg\n lda CharSword\n cmp #2 ;Are you already en garde?\n bcc Alert ;no\n jmp EnGarde ;yes\n]rts rts\n\n*-------------------------------\n*\n* Alert (not en garde)\n*\n*-------------------------------\nAlert\n lda KidLife\n bpl ]rts ;kid's dead--relax\n\n* If kid is behind you, turn to face him\n\n jsr getopdist\n ldx OpBlockY\n cpx CharBlockY\n bne :difflevel\n cmp #-8 ;if kid is right on top of you, go en garde!\n bcs :eng\n:difflevel\n ldx alertguard\n beq :ok ;otherwise wait for a sound to alert you\n ldx #0\n stx alertguard\n:alert\n cmp #128\n bcc :eng\n cmp #-4\n bcs :ok ;overlapping--stand still\n jmp DoTurn ;turn around\n\n* If you can see kid, go en garde\n\n:ok cmp #128\n bcs ]rts ;kid is behind you\n\n:eng lda EnemyAlert\n beq ]rts\n\n lda level\n cmp #13\n bne :1 ;Vizier only: wait for music to finish\n lda SongCue\n bne ]rts\n\n:1 jmp DoEngarde\n]rts rts\n\n*-------------------------------\n*\n* En garde\n*\n*-------------------------------\nEnGarde\n lda CharPosn\n cmp #166\n beq ]rts\n cmp #150\n bcc ]rts ;wait till you're ready\n\n lda EnemyAlert\n cmp #2\n bcs :ea2\n cmp #1 ;EnemyAlert = 1: Kid is in sight, but a\n beq ]rts ;gap or barrier separates you--stay put\n\n* Kid is out of sight (EnemyAlert = 0)\n* If kid has \"dropped out\" of fight, follow him down\n\n lda droppedout ;flag set by CHECKFLOOR\n beq :1\n jmp FollowKid\n\n* else return to alert position\n\n:1 lda CharID\n cmp #4\n beq ]rts ;(except skeleton)\n jmp DoDropguard\n\n* EnemyAlert = 2: Clear stretch of floor to player\n\n* If kid is stunned, let him recover...\n\n:ea2 jsr getopdist\n bmi :norec\n cmp #12\n bcc :norec ;unless he's right on top of you\n lda OpPosn\n cmp #102\n bcc :norec\n cmp #118\n bcs :norec\n lda OpAction\n cmp #5\n beq ]rts\n:norec\n\n* Advance to closest safe distance\n\n jsr getopdist\n cmp #toofar\n bcs :outofrange\n\n ldx CharSword\n cpx #2\n bcc :offg\n\n cmp #tooclose\n bcc :tooclose\n jmp InRange\n\n:offg cmp #offguardthres\n bcc :tooclose\n jmp InRange\n]rts rts\n\n* Out of range\n\n:outofrange\n lda refract\n bne ]rts\n\n lda CharFace\n cmp OpFace\n beq :nojump ;chase him\n\n lda OpPosn\n cmp #7\n bcc :norun\n cmp #15\n bcc :runwait\n:norun\n cmp #34\n bcc :nojump\n cmp #44\n bcc :jumpwait ;If kid is running towards you, stay put\n:nojump\n jsr getinfront\n jsr cmpspace ;Don't advance unless solid floor\n beq :gap\n jsr get2infront\n jsr cmpspace\n bne :solid\n\n:gap jmp DoRetreat\n:solid jmp DoAdvance\n\n* Kid is trying to get past you--cut him down!\n\n:jumpwait\n jsr getopdist\n cmp #jumpthres\n bcs ]rts ;wait\n jmp DoStrike\n\n:runwait\n jsr getopdist\n cmp #runthres\n bcs ]rts\n:strike jmp DoStrike\n\n* Too close to hit him\n\n:tooclose\n lda CharFace\n cmp OpFace\n beq :ret\n jmp DoAdvance\n:ret jmp DoRetreat\n\n*-------------------------------\n*\n*  Kid has \"dropped out\" of fight\n*  Advance until you run out of floor--\n*  then decide whether to jump down after him\n*\n*-------------------------------\nFollowKid\n lda OpAction\n cmp #2\n beq :hanging\n cmp #6\n beq :hanging ;wait--kid is hanging on ledge\n\n jsr getinfront\n sta ztemp\n jsr cmpbarr\n bne :stopped\n lda ztemp\n jsr cmpspace\n beq :atedge\n jmp DoAdvance\n\n* At edge of floor.  Follow kid down ONLY if:\n* (1) it's a 1-story drop to solid floor\n* (2) kid is still down there\n\n:atedge\n jsr getinfront\n inc tempblocky\n jsr rdblock1\n sta ztemp ;is it safe?\n cmp #spikes\n beq :stopped\n cmp #loose\n beq :stopped\n jsr cmpbarr\n bne :stopped\n lda ztemp\n jsr cmpspace\n beq :stopped\n\n lda CharBlockY\n clc\n adc #1\n cmp OpBlockY\n bne :stopped ;kid's not down there\n\n* It looks safe--follow him down\n\n jmp DoAdvance\n\n:stopped lda #0\n sta droppedout\n jmp DoRetreat ;so you can kill him if he climbs up\n:hanging\n]rts rts\n\n*-------------------------------\n*\n*  In range\n*\n*-------------------------------\nInRange\n lda OpSword ;is opponent armed & en garde?\n cmp #2\n beq :fight ;yes\n\n* Opponent is unarmed or off guard--maul him!\n\n lda refract\n bne ]rts\n\n jsr getopdist\n cmp #strikethres2\n bcc :1\n jmp DoAdvance ;advance until within range...\n:1 jmp DoStrike ;then strike\n\n* Opponent is en garde--use strategy\n\n:fight\n jmp GenFight\n\n*-------------------------------\n*\n* General Fighting Routine\n*\n* (Fighters are en garde, face to face, and too close to\n* advance safely)\n*\n*-------------------------------\nGenFight\n jsr getopdist\n cmp #blockthres1\n bcc :outofrange\n cmp #blockthres2\n bcs :outofrange\n\n jsr MaybeBlock ;block opponent's strike?\n\n lda refract\n bne ]rts\n\n jsr getopdist\n cmp #strikethres1\n bcc :outofrange\n cmp #strikethres2\n bcs :outofrange\n\n jmp MaybeStrike ;strike?\n\n:outofrange\n jmp MaybeAdvance ;advance to within strike range?\n]rts rts\n\n*-------------------------------\n*\n* Advance to within strike range?\n* (Only consider it if gdtimer = 0)\n*\n*-------------------------------\nMaybeAdvance\n lda guardprog\n beq :dumb ;Guard #0 is too dumb to care\n lda gdtimer\n bne ]rts\n\n:dumb jsr rndp\n cmp advprob,x\n bcs ]rts\n\n jmp DoAdvance\n\n*-------------------------------\n*\n* Block opponent's strike?\n*\n*-------------------------------\nMaybeBlock\n lda OpPosn\n cmp #152 ;guy4\n beq :99\n cmp #153 ;guy5\n beq :99\n cmp #162 ;guy22 (block to strike)\n bne ]rts\n\n:99 lda justblocked\n bne :impaired\n jsr rndp\n cmp blockprob,x\n bcc :block\n]rts rts\n\n:impaired\n jsr rndp\n cmp impblockprob,x\n bcs ]rts\n:block jmp DoBlock\n\n*-------------------------------\n*\n* Strike?\n*\n*-------------------------------\nMaybeStrike\n ldx OpPosn\n cpx #169\n beq ]rts\n cpx #151 ;opponent starting to strike?\n beq ]rts ;yes--don't strike\n\n ldx CharPosn\n cpx #161 ;have I just blocked?\n beq :restrike\n cpx #150\n beq :restrike ;yes--restrike?\n\n jsr rndp\n cmp strikeprob,x\n bcs ]rts\n jmp DoStrike\n\n:restrike\n jsr rndp\n cmp restrikeprob,x\n bcs ]rts\n jmp DoStrike\n\n*-------------------------------\nDoRelease\n lda #0\n sta clrF\n sta clrB\n sta clrU\n sta clrD\n sta clrbtn\n sta JSTKX\n sta JSTKY\n sta btn\n rts\n\nDoAdvance\nDoFwd\n lda #-1\n sta clrF\n sta JSTKX\n rts\n\nDoRetreat\nDoBack\n lda #-1\n sta clrB\n lda #1\n sta JSTKX\n rts\n\nDoBlock\nDoUp lda #-1\n sta clrU\n sta JSTKY\n rts\n\nDoTurn\nDoDown lda #-1\n sta clrD\n lda #1\n sta JSTKY\n rts\n\nDoStandup\n lda #-1\n sta clrU\n jmp DoBack\n\nDoDropguard\nDoRunaway\n lda #-1\n sta clrD\n jmp DoBack\n\nDoEngarde\n lda #-1\n sta clrD\n jmp DoFwd\n\nDoStrike\nDoPress\n lda #-1\n sta clrbtn\n sta btn\n rts\n\nDoRelBtn\n lda #0\n sta btn\n]rts rts\n\n*-------------------------------\n*\n*  R N D P\n*\n*  Return X = guardprog, A = rnd #\n*\n*-------------------------------\nrndp\n ldx guardprog\n jmp rnd\n\n*-------------------------------\n*\n*  C H E C K   S T R I K E\n*\n*  Check for sword contact\n*\n*  Going in: Kid & Shad vars represent position in\n*   UPCOMING frame\n*\n*  Out: Kid & Shad vars\n*  (Return Action = 99 if stabbed)\n*\n*-------------------------------\nCHECKSTRIKE\n lda KidPosn\n beq ]rts\n cmp #219\n bcc :noclimb\n cmp #229\n bcc ]rts ;on staircase\n:noclimb\n jsr LoadShadwOp\n jsr TestStrike\n jsr SaveShadwOp\n\n jsr LoadKidwOp\n jsr TestStrike\n jsr SaveKidwOp\n\n]rts rts\n\n*-------------------------------\nTestStrike\n\n lda CharSword\n cmp #2 ;in fighting mode?\n bne ]rts ;no\n\n lda CharBlockY\n cmp OpBlockY\n bne ]rts\n\n* Am I on a test (strike) frame?\n\n lda CharPosn\n cmp #153 ;guy5 (frame before full ext.)\n beq :test\n cmp #154 ;guy6 (full ext.)\n bne ]rts\n\n* I'm striking--is opponent blocking?\n\n:test\n jsr getopdist\n cmp #blockrange1\n bcc :nobloc\n\n cmp #blockrange2\n bcs :nobloc\n\n lda OpPosn\n cmp #161\n beq :11\n cmp #150 ;blocking?\n bne  :nobloc ;no\n\n* Yes -- opponent blocks my strike\n\n:1 lda #161\n sta OpPosn ;change opp to \"successful block\"\n\n:11 lda CharID\n beq :12 ;am I a guard?\n lda #blocktime ;yes--impair my blocking ability for a while\n sta justblocked\n\n:12 lda #blockedstrike\n jsr jumpseq\n jmp animchar\n\n* Skewer opponent?\n\n:nobloc\n lda CharPosn\n cmp #154 ;full ext\n bne ]rts\n\n jsr getopdist\n\n ldx OpSword\n cpx #2\n bcs :ong\n cmp #offguardthres\n bcs :cont1\n rts\n:ong cmp #strikerange1\n bcc ]rts\n\n:cont1 cmp #strikerange2\n bcs ]rts\n\n lda #99 \"stabbed\"\n sta OpAction\n]rts rts\n\n*-------------------------------\n*  C H E C K   S T A B\n*-------------------------------\nCHECKSTAB\n lda ShadAction\n cmp #99\n bne :1\n\n lda KidAction\n cmp #99\n beq :doublestab\n:2\n jsr LoadShad\n jsr StabChar\n jsr SaveShad\n\n jsr rndp\n lda refractimer,x\n sta refract\n\n:1 lda KidAction\n cmp #99\n bne ]rts\n\n jsr LoadKid\n jsr StabChar\n jmp SaveKid\n\n* Both chars finish lunge simultaneously\n\n:doublestab\n lda #1\n sta KidAction\n bne :2 ;player wins a tie\n]rts rts\n\n*-------------------------------\n* Change shadowman posn\n* In: A-X = shadpos L-H\n* Out: Char data\n*-------------------------------\nchgshadposn\n sta ztemp\n stx ztemp+1\n ldy #6\n:loop lda (ztemp),y\n sta Char,y\n dey\n bpl :loop\n\n ldy #7\n lda (ztemp),y\n jsr jumpseq\n\n lda #1\n sta CharID\n\n lda #0\n sta PlayCount ;zero playback counter\n rts\n\n* ... & save\n\ncsps jsr chgshadposn\n\n lda #3\n sta guardprog\n\n lda #shadstrength\n sta MaxOppStr\n sta OppStrength\n\n jmp SaveShad\n\n*-------------------------------\n* (Posn, X, Y, Face, BlockX, BlockY, Action)\n*               0  1  2  3  4  5  6\n\nshadpos6a hex 0f,51,76,00,00,01,00\n db stand\n\nshadpos5 hex 0f,37,37,00,ff,00,00\n db stand ;just o.s. to L\n\nshadpos12 hex 0f,51,f0,00,00,00,00\n db stepfall\n\n*-------------------------------\nEndProg = -2\nEndDemo = -1\nCtr = 0\nFwd = 1\nBack = 2\nUp = 3\nDown = 4\nUpfwd = 5\nPress = 6\nRelease = 7\n\n* Commands:\n*\n* -2 - end of programmed sequence\n* -1 - end of demo\n*  0 - center jstk & release btn\n*  1 - jstk fwd\n*  2 - jstk back\n*  3 - jstk up\n*  4 - jstk down\n*  5 - jstk up & fwd\n*  6 - press & hold btn\n*  7 - release btn\n\n*-------------------------------\n*\n* Prerecorded sequence format:\n*\n*  1.  Frame # (1 byte)\n*  2.  Command (1 byte)\n*\n* 255 frames = approx. 25-30 seconds\n*\n*-------------------------------\n* Level 5 (THIEF): Steal potion\n\nShadProg5\n db 0,Ctr\n db 1,Fwd\n db 14,Ctr\n db 18,Press\n db 29,Release\n db 45,Back\n db 49,Fwd\n db 255,EndProg\n\n*-------------------------------\n*\n*  Play back prerecorded movement sequence\n*\n*  In: A-X = program start addr\n*      PlayCount = frame #\n*      PreRecPtr = pointer to next command\n*\n*-------------------------------\nAUTOPLAYBACK\n sta ProgStart\n stx ProgStart+1\n\n* Inc frame counter\n\n lda PlayCount\n cmp #254\n bcs :rts\n inc PlayCount\n\n* Look up time of next command\n\n ldy PreRecPtr\n\n lda PlayCount\n cmp (ProgStart),y\n bcs :next\n\n* Not there yet--repeat last command\n\n dey\n lda (ProgStart),y\n jmp :ex\n\n* We're there--\n\n:next iny\n lda (ProgStart),y ;command\n iny\n sty PreRecPtr\n\n* Execute command\n\n:ex cmp #-1\n beq :enddemo\n cmp #0\n beq :ctr\n cmp #1\n beq :fwd\n cmp #2\n beq :back\n cmp #3\n beq :up\n cmp #4\n beq :down\n cmp #5\n beq :upfwd\n cmp #6\n beq :press\n cmp #7\n beq :release\n:rts\n]rts rts\n\n* Commands\n\n:ctr jmp DoRelease\n:fwd jmp DoFwd\n:back jmp DoBack\n:up jmp DoUp\n:down jmp DoDown\n:upfwd jsr DoUp\n jmp DoFwd\n:press jmp DoPress\n:release jmp DoRelBtn\n\n:enddemo ; lda autopilot\n; bne :endpb\n jmp attractmode ;Game: end demo\n:endpb ; lda #0 ;Editor: end playback\n; sta autopilot\n; rts\n\n*-------------------------------\n*\n*  C U T   C H E C K\n*\n*  Cut with kid\n*\n*-------------------------------\nCUTCHECK\n lda CUTTIMER\n beq :ok\n\n dec CUTTIMER\n]rts rts\n\n:ok\n jsr LoadKid\n jsr setupchar\n jsr getedges\n jsr cutchar ;cut with character\n bmi ]rts ;no cut\n sta ]cutdir\n\n jsr SaveKid\n\n lda CharScrn\n sta cutscrn\n\n lda ShadFace\n cmp #86 ;is there a guard on old screen?\n beq ]rts ;no\n\n* What to do with guard?  Two choices:\n*\n*  (1) UPDATE -- leave guard behind on old screen (& update\n*      his coords so he'll still be there when we come back)\n*  (2) TRANSFER -- transfer guard to new screen (& delete his\n*      coords from old screen)\n\n lda ShadLife\n bpl :update ;dead guard on old screen--leave him behind\n\n lda ShadSword\n cmp #2\n bne :update\n\n* Is there a live guard on new screen?\n\n ldx KidScrn\n lda GdStartBlock-1,x\n cmp #30\n bcs :nonew ;no\n\n lda GdStartSeqH-1,x\n beq :update ;yes\n\n* If guard is too far o.s., leave him behind\n\n:nonew\n lda ]cutdir\n beq :left\n cmp #1\n beq :right\n cmp #2\n beq :up\n\n:down lda ShadBlockY\n cmp #3\n bcs :transfer\n bcc :update\n\n:up lda ShadBlockY\n bmi :transfer\n bpl :update\n\n:right lda ShadX\n cmp #ScrnWidth+25 ;25 is safety factor\n bcc :update\n bcs :transfer\n\n:left lda ShadX\n cmp #256-ScrnWidth-25\n bcs :update\n\n* Take him with us\n\n:transfer jmp transferguard\n\n* Leave him behind\n\n:update jmp updateguard\n\n*-------------------------------\n*\n* Transfer guard from old screen to new screen\n* (Also remove any dead guards from new scrn)\n*\n*-------------------------------\ntransferguard\n lda #-1\n ldx KidScrn ;new scrn\n sta GdStartBlock-1,x\n ldx ShadScrn ;old scrn\n sta GdStartBlock-1,x\n\n jsr LoadShad\n\n lda ]cutdir\n jsr cut\n\n jmp SaveShad\n\n]rts rts\n\n*-------------------------------\n*\n* Leaving guard behind on old screen--\n* update guard coords\n*\n*-------------------------------\n\nupdateguard\n lda ShadFace\n cmp #86\n beq ]rts ;no guard\n lda ShadID\n cmp #1\n beq ]rts ;not for shadman\n cmp #24\n beq ]rts ;or mouse\n:gd\n lda #0 ;arbitrary--ADDGUARD will reconstruct\n sta tempblockx ;CharBlockX from CharX\n lda ShadBlockY\n sta tempblocky\n jsr indexblock\n tya\n ldx ShadScrn\n sta GdStartBlock-1,x\n\n lda ShadX\n sta GdStartX-1,x\n\n lda ShadFace\n sta GdStartFace-1,x\n\n lda guardprog\n sta GdStartProg-1,x\n\n lda ShadLife\n bpl :ok\n lda #0\n sta GdStartSeqH-1,x\n beq :cont\n\n:ok lda ShadSeq\n sta GdStartSeqL-1,x\n lda ShadSeq+1\n sta GdStartSeqH-1,x\n\n* and deactivate enemy char\n\n:cont lda #86\n sta ShadFace\n\n lda #0\n sta OppStrength\n]rts rts\n\n*-------------------------------\n*\n* If enemy has fallen to screen below, catch him before\n* he wraps around to top of VisScrn\n*\n*-------------------------------\nCUTGUARD\n lda ShadFace\n cmp #86\n beq ]rts\n\n lda ShadY\n cmp #BotCutEdge\n bcc ]rts\n\n* If guard, remove him altogether\n\n lda ShadID\n cmp #4\n beq :skel\n cmp #1\n beq :shad\n\n]RemoveGd\n jsr deadenemy ;music, etc.\n\n ldx VisScrn\n lda #-1\n sta GdStartBlock-1,x\n lda #86\n sta ShadFace\n lda #0\n sta OppStrength\n lda #-1\n sta ChgOppStr\n]rts rts\n\n* If shad, vanish him\n\n:shad lda ShadAction\n cmp #4\n bne ]rts\n jsr LoadShad\n jsr VanishChar\n jmp SaveShad\n\n* If skel, change scrn\n\n:skel lda ShadScrn\n jsr getdown\n sta ShadScrn\n cmp #3\n bne ]RemoveGd\n\n* Skel lands on scrn 3\n\n lda #Splat\n jsr addsound\n lda #$85\n sta ShadX\n lda #1\n sta ShadBlockY\n lda #0\n sta ShadFace\n lda #-1\n sta ShadLife\n jmp updateguard\n\n*-------------------------------\n*\n*  C U T   C H A R\n*\n*  Is character passing o.s.?  If so, cut with him to next scrn\n*\n*  Change CharX,Y,BlockY,Scrn to reflect posn on new scrn\n*\n*  Return A = direction of cut, -1 if no cut\n*\n*-------------------------------\ncutchar\n lda CharY\n\n ldx CharAction\n cpx #5\n beq :notup\n cpx #4\n beq :notup ;In freefall--cut only down\n cpx #3\n beq :notup\n\n*  Cut up/down?\n\n cmp #TopCutEdgePl\n bcc :CUTUP\n\n cmp #TopCutEdgeMi\n bcs :CUTUP\n:notup\n cmp #BotCutEdge\n bcs :CUTDOWN\n\n*  Cut left/right?\n\n ldx CharPosn\n cpx #135\n bcc :nocu\n cpx #150\n bcc :nocut ;don't cut L/R on climbup\n:nocu cpx #110\n bcc :nosu\n cpx #120\n bcc :nocut ;or on standup\n:nosu cpx #150\n bcc :nost\n cpx #163\n bcc :nocut\n cpx #166\n bcc :nost\n cpx #169\n bcc :nocut ;or on strike/block\n:nost lda CharAction\n cmp #7\n beq :nocut ;or on turning\n\n ldx CharFace ;-1=left, 0=right\n beq :faceR\n;facing left\n lda leftej\n cmp #LeftCutEdge\n bcc :CUTLEFT\n beq :CUTLEFT\n\n cmp #ScrnRight+1\n bcs :CUTRIGHT\n bcc :nocut\n\n:faceR\n lda CharScrn\n ldx #9\n ldy CharBlockY\n jsr rdblock\n\n cmp #panelwif\n beq :nocutr\n cmp #panelwof\n beq :nocutr ;don't cut R if a panel blocks view\n\n lda rightej\n cmp #RightCutEdge\n bcs :CUTRIGHT\n\n:nocutr lda rightej\n cmp #ScrnLeft-1\n bcc :CUTLEFT\n beq :CUTLEFT\n\n:nocut lda #-1\n rts\n\n:CUTLEFT jsr mirrmusic\n jsr milestone3\n lda #0\n bpl :cut\n\n:CUTRIGHT jsr stealsword\n jsr jaffmusic\n lda #1\n bpl :cut\n\n:CUTUP lda #2\n bpl :cut\n\n* Level 6 (\"Plunge\"): Kid falls off screen 1 into next level\n\n:CUTDOWN\n jsr infinity\n\n lda level\n cmp #6\n bne :no6\n lda CharScrn\n cmp #1\n beq :nocut\n:no6\n lda #3\n:cut pha\n jsr cut\n pla\n]rts rts\n\n*-------------------------------\n* Level 12--fall off into infinity\n*-------------------------------\ninfinity rts\n\n*-------------------------------\n* Passed Level 3 milestone?\n*-------------------------------\nmilestone3\n lda level\n cmp #3\n bne ]rts\n lda #7 ;scrn to R of gate\n]mcheck cmp CharScrn\n bne ]rts\n lda #1\n sta milestone\n lda MaxKidStr\n sta origstrength\n rts\n\n*-------------------------------\n* Level 12: Shadow steals sword\n*-------------------------------\nstealsword\n lda level\n cmp #12\n bne ]rts\n lda CharScrn\n cmp #18 ;scrn below swordscrn\n bne ]rts\n lda #swordscrn\n ldx #swordx\n ldy #swordy\n jsr rdblock\n lda #floor\n sta (BlueType),y\n rts\n\n*-------------------------------\n* Level 13: Play Jaffar's Theme\n*-------------------------------\njaffmusic\n lda level\n cmp #13\n bne ]rts\n lda exitopen\n bne ]rts\n lda CharScrn\n cmp #3\n bne ]rts\n lda #s_Jaffar\n ldx #25\n jmp cuesong\n\n*-------------------------------\n* Level 4 (\"Mirror\"): Play danger theme for mirror\n*-------------------------------\nmirrmusic\n lda exitopen\n beq :no4\n cmp #77\n beq :no4\n lda level\n cmp #4\n bne :no4\n lda CharBlockY\n cmp #miry\n bne :no4\n lda CharScrn\n cmp #11 ;scrn to R of mirscrn\n bne :no4\n lda #s_Danger\n ldx #50\n jsr cuesong\n lda #77\n sta exitopen ;so we don't repeat theme\n:no4\n]rts rts\n\n*-------------------------------\n*\n*  C U T\n*\n*  Move char from CharScrn to adjacent screen\n*\n*  In: A = cut dir: 0 = left, 1 = right, 2 = up, 3 = down\n*\n*-------------------------------\nCUT\n cmp #3\n beq Cdown\n cmp #1\n beq Cright\n cmp #2\n beq Cup\n\nCleft\n lda CharScrn\n jsr getleft ;get new screen #\n sta CharScrn\n\n lda #140\n clc\n adc CharX\n sta CharX\n\n ldx #1 ;new FromDir\n rts\n\nCright\n lda CharScrn\n jsr getright\n sta CharScrn\n\n lda CharX\n sec\n sbc #140\n sta CharX\n\n ldx #0\n rts\n\nCup\n lda CharScrn\n jsr getup\n sta CharScrn\n\n lda CharBlockY\n clc\n adc #3\n sta CharBlockY\n\n lda CharY\n clc\n adc #189\n sta CharY\n\n ldx #3\n rts\n\nCdown\n lda CharScrn\n jsr getdown\n sta CharScrn\n\n lda CharBlockY\n sec\n sbc #3\n sta CharBlockY\n\n lda CharY\n sec\n sbc #189\n sta CharY\n\n ldx #2\n]rts rts\n\n*-------------------------------\n*\n* A D D  G U A R D\n*\n* On cut to new screen--if guard is there, bring him to life\n* Also handles hard-wired shadowman appearances\n*\n* In: VisScrn\n*\n*-------------------------------\nADDGUARD\n lda #0\n sta offguard\n\n* Level 12\n\n lda level\n cmp #12\n bne :not12\n lda exitopen ;set when shadow drops\n bne ]rts\n lda mergetimer\n bne :1 ;shadow has been reabsorbed\n lda VisScrn\n cmp #swordscrn\n:1 bne ]rts\n sta CharScrn\n\n ldx #swordx\n ldy #swordy\n jsr rdblock\n cmp #sword\n beq ]rts ;sword is still there\n lda #0\n sta shadowaction\n lda #1\n sta exitopen\n lda #shadpos12\n ldx #>shadpos12\n jmp csps\n\n* Level 6 (Plunge)\n\n:not12\n lda level\n cmp #6 ;plunge\n bne :not6\n\n lda VisScrn\n sta CharScrn\n cmp #1\n bne AddNormalGd\n\n lda exitopen\n cmp #77\n beq :norepeat\n lda #s_Danger\n ldx #50\n jsr cuesong\n lda #77\n sta exitopen\n:norepeat\n lda #shadpos6a\n ldx #>shadpos6a\n jmp csps\n\n* Level 5 (Thief)\n\n:not6 lda level\n cmp #5 ;thief\n bne :not5\n\n lda VisScrn\n sta CharScrn\n cmp #flaskscrn\n bne AddNormalGd\n\n ldx #flaskx\n ldy #flasky\n jsr rdblock\n cmp #flask\n bne ]rts ;potion is gone\n\n lda #shadpos5\n ldx #>shadpos5\n jmp csps\n]rts rts\n:not5\n\n*-------------------------------\nAddNormalGd\n ldx VisScrn\n lda GdStartBlock-1,x\n cmp #30\n bcs ]rts ;no guard on this scrn\n\n* Bring guard to life (or death)\n\n stx CharScrn\n\n jsr unindex ;return A = blockx, X = blocky\n stx CharBlockY\n\n lda FloorY+1,x\n sta CharY\n\n ldx VisScrn\n lda GdStartX-1,x\n sta CharX\n jsr getblockxp\n sta CharBlockX\n\n ldx VisScrn\n lda GdStartFace-1,x\n sta CharFace\n\n lda level\n cmp #3\n bne :3\n\n lda #4 ;skel\n bne :4\n:3 lda #2 ;guard\n:4 sta CharID\n\n lda GdStartSeqH-1,x\n bne :1 ;0 is code for fresh start\n\n lda CharID\n cmp #4\n bne :5\n lda #2\n sta CharSword\n lda #landengarde ;skel (ready)\n bne :6\n:5 lda #0\n sta CharSword\n lda #alertstand ;guard\n:6 jsr jumpseq\n jmp :2\n\n:1 sta CharSeq+1\n lda GdStartSeqL-1,x\n sta CharSeq\n\n:2 jsr animchar\n\n lda CharPosn\n cmp #185 ;killed\n beq :dead\n cmp #177 ;impaled\n beq :dead\n cmp #178 ;halved\n beq :dead\n\n* Live guard\n\n lda #-1\n sta CharLife\n\n lda #0\n sta alertguard\n sta refract\n sta justblocked\n\n jsr getgdstrength\n jmp :cont\n\n* Dead guard\n\n:dead lda #1\n sta CharLife\n lda #0\n sta OppStrength\n\n* Continue\n\n:cont lda #0\n sta CharXVel\n sta CharYVel\n lda #1\n sta CharAction\n\n ldx VisScrn\n lda GdStartProg-1,x\n cmp #numprogs\n bcc :ok\n lda #3 ;default\n:ok sta guardprog\n\n ldx level\n lda basiccolor,x\n ldx guardprog\n eor specialcolor,x ;0 = normal, 1 = special\n sta GuardColor  ;0 = blue, 1 = red\n\n jmp SaveShad ;save ShadVars\n\n*-------------------------------\n* Get guard fighting strength\n*-------------------------------\ngetgdstrength\n ldx level\n lda basicstrength,x\n ldx guardprog\n clc\n adc extrastrength,x\n sta MaxOppStr\n sta OppStrength\n]rts rts\n\n*-------------------------------\n lst\n ds 1\n usr $a9,17,$800,*-org\n lst off\n"
  },
  {
    "path": "01 POP Source/Source/BGDATA.S",
    "content": "* bgdata\n tr on\n*-------------------------------\n* Indexed by PIECE ID#:\n\nspace = 0\nfloor = 1\nspikes = 2\nposts = 3\ngate = 4\ndpressplate = 5 ;down\npressplate = 6 ;up\npanelwif = 7 ;w/floor\npillarbottom = 8\npillartop = 9\nflask = 10\nloose = 11\npanelwof = 12 ;w/o floor\nmirror = 13\nrubble = 14\nupressplate = 15\nexit = 16\nexit2 = 17\nslicer = 18\ntorch = 19\nblock = 20\nbones = 21\nsword = 22\nwindow = 23\nwindow2 = 24\narchbot = 25\narchtop1 = 26\narchtop2 = 27\narchtop3 = 28\narchtop4 = 29\n\n*-------------------------------\n* A & B sections have l.l. of (X = BlockLeft, Y = BlockBot-3)\n* C & D sections have l.l. of (X = BlockLeft, Y = BlockBot)\n* All x & y offsets are relative to these values\n* (Front pieces are relative to A)\n\n*-------------------------------\n*               0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15\n*              16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31\n\nmaska hex 00,03,03,03,03,03,03,03,03,00,03,03,00,03,03,03\n hex 03,00,00,03,00,03,00,03,00,03,00,00,00,00\n\npiecea hex 00,01,05,07,0a,01,01,0a,10,00,01,00,00,14,20,4b\n hex 01,00,00,01,00,97,00,01,00,a7,a9,aa,ac,ad\n\npieceay hex 00,00,00,00,00,01,00,00,00,00,00,00,00,00,00,00\n dfb 00,00,00,00,00,00,00,00,00,00,00,-4,-4,-4\n\nmaskb hex 00,04,04,04,04,04,04,00,04,00,04,00,00,04,04,04\n hex 00,04,04,04,04,04,04,00,04,04,00,00,00,00\n\npieceb hex 00,02,06,08,0b,1b,02,9e,1a,1c,02,00,9e,4a,21,1b\n hex 4d,4e,02,51,84,98,02,91,92,02,00,00,00,00\n\npieceby dfb 00,00,00,00,00,01,00,03,00,03,00,00,03,00,00,-1\n dfb 00,00,00,-1,02,00,00,00,00,00,00,00,00,00\n\nbstripe hex 00,47,47,00,00,47,47,00,00,00,47,47,00,00,47,47\n hex 00,00,47,00,00,00,47,00,00,47,00,00,00,00\n\n*               0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15\n*              16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31\n\npiecec hex 00,00,00,09,0c,00,00,9f,00,1d,00,00,9f,00,00,00\n hex 4f,50,00,00,85,00,00,93,94,00,00,00,00,00\n\npieced hex 00,15,15,15,15,18,19,16,15,00,15,00,17,15,2e,4c\n hex 15,15,15,15,86,15,15,15,15,15,ab,00,00,00\n\nfronti hex 00,00,00,45,46,00,00,46,48,49,87,00,46,0f,13,00\n hex 00,00,00,00,83,00,00,00,00,a8,00,ae,ae,ae\n\nfronty dfb 00,00,00,-1,00,00,00,00,-1,03,-3,00,00,-1,00,00\n dfb 00,00,00,00,00,00,00,00,00,-1,0,-36,-36,-36\n\nfrontx hex 00,00,00,01,03,00,00,03,01,01,02,00,03,01,00,00\n hex 00,00,00,00,00,00,00,00,00,01,00,00,00,00\n\n*-------------------------------\n* special pieces\n\ngatebotSTA = $43\ngatebotORA = $44\ngateB1 = $37\ngatecmask = $0d\n\ngate8c hex 2f,30,31,32,33,34,35,36\ngate8b hex 3e,3d,3c,3b,3a,39,38,37\n\n*-------------------------------\n* Climbup masking\n\nCUmask = $11\nCUpiece = $12\nCUpost = $0e\n\n*-------------------------------\n* Exit\n\nstairs = $6b\ndoor = $6c\ndoormask = $6d\ntoprepair = $6e\n\narchtop3sp = $a1\n\n*-------------------------------\n* Spike animation frames\n*               0  1  2  3  4  5  6  7  8  9 10 11\n\nspikea hex 00,22,24,26,28,2a,28,24,22,00\nspikeb hex 00,23,25,27,29,2b,29,25,23,00\n\nspikeExt = 5 ;\nspikeRet = 9 ;must match MOVEDATA\n\n*-------------------------------\n* Slicer animation frames\n*               0  1  2  3  4  5  6  7  8  9 10 11\n\nslicerseq dfb 04,03,01,02,05,04,04\n\nslicerExt = 2\nslicerRet = 6 ;must match MOVEDATA\n\nslicertop hex 00,58,5a,5c,5e\nslicerbot hex 57,59,5b,5d,5f\nslicerbot2 hex 8e,8f,90,5d,5f ;smeared\nslicergap dfb 00,38,46,53,55\nslicerfrnt hex 65,66,67,68,69\n\n*-------------------------------\n* Loose floor\n*               0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15\n\nlooseb = $1b\n\nloosea hex 01,1e,01,1f,1f,01,01,01,1f,1f,1f\nlooseby dfb 00,01,00,-1,-1,00,00,00,-1,-1,-1\nloosed hex 15,2c,15,2d,2d,15,15,15,2d,2d,2d\n\nFfalling = 10 ;1st \"falling\" frame\n;must match MOVEDATA\n\n*-------------------------------\nspecialflask = $95\n\nswordgleam1 = $b3\nswordgleam0 = $99\n\n*-------------------------------\n* panels\n\npanelb0 = $9e\npanelc0 = $9f\nnumpans = 3\n\npanelb hex 9e,9a,81\npanelc hex 9f,9b,82\n\narchpanel = $a1\n\n*-------------------------------\n* back wall panels for space & floor\n\nnumbpans = 3\n\nspaceb hex 00,a3,a5,a6\nspaceby dfb 0,-20,-20,0\n\nfloorb hex 02,a2,a4,a4\nfloorby dfb 00,00,00,00\n\n*-------------------------------\n* solid blocks\n\nnumblox = 2\n\nblockb hex 84,6f\nblockc hex 85,85\nblockd hex 86,86\nblockfr hex 83,83\n\n*-------------------------------\n* moveparams\n\ngmaxval = 47*4\ngminval = 0\n\n*-------------------------------\neof\n"
  },
  {
    "path": "01 POP Source/Source/BOOT.S",
    "content": "*  boot\norg = $800\n lst off\n*-------------------------------\n* $800 TS (0,0) boot sector\n\nSLOT = $2b\nsector = $50\n\ntext = $fb2f\nhome = $fc58\nvtab = $FB5B\ncout = $FDF0\nnormal = $fe84\npr0 = $fe93\nin0 = $fe89\n\n*-------------------------------\n org org\n\n hex 01\n\nentry lda #$60\n sta entry\n\n lda #$ff\n sta $4fb\n sta $3f3\n sta $3f4\n sta $c000 ;80store off\n sta $c002 ;RAMRD main\n sta $c004 ;RAMWRT main\n sta $c00c ;80col off\n sta $c00e ;Altcharset off\n sta $c081 ;write RAM, read ROM (2nd 4k bank)\n jsr text\n jsr home\n jsr normal\n jsr pr0\n jsr in0\n\n ldx SLOT\n txa\n lsr\n lsr\n lsr\n lsr\n ora #$c0\n sta :rdsect+2\n lda #$0f\n sta sector\n\n:0 ldy sector\n lda skewtbl,y\n sta $3d\n lda sectaddr,y\n beq :1\n sta $27\n:rdsect jsr $005c\n:1 dec sector\n bne :0\n\n lda SLOT\n jmp $900\n\nskewtbl hex 00,0d,0b,09,07,05,03,01\n hex 0e,0c,0a,08,06,04,02,0f\n\nsectaddr hex 00,09,00,00,00,00,00,00\n hex 30,31,32,33,34,00,00,00\n\n*===============================\n*  boot stage 2\n\nrw18 = $d000\n\nslot = $fd\ntrack = $fe\nlastrack = $ff\n\n dum $00\n\ndest ds 2\nsource ds 2\nendsourc ds 2\n\n dend\n*-------------------------------\n ds $900-*\n\nstage2 stx slot\n\n jsr check128k ;check for 128K memory\n\n jsr moverw18 ;& move RW18 to D000\n\n lda #0\n sta lastrack\n sta $3f3\n sta $3f4 ;zero reset vector\n\n jsr rw18\n hex 07,a9 ;Bbund ID byte\n\n jsr rw18\n hex 00,01,00 ;drive 1 on\n\n jsr rw18 ;seek track 1\n hex 02,00,01\n\n* load & run stage 3 boot\n* from drive 1\n\n jsr rw18\n hex c3,ee\n\n jmp $ee00\n\n*-------------------------------------------------\n* Check for AUX memory routine\n\nCHECKER lda #$EE\n sta $C005\n sta $C003\n sta $0800\n lda $0C00\n cmp #$EE\n bne :0\n asl $0C00\n lda $0800\n cmp $0C00\n beq :1\n:0 clc\n:1 sta $C004\n sta $C002\n rts\n\nCHECKEND = *-CHECKER\n\n*-------------------------------------------------\n*\n* Check to make sure //c or //e\n* with 128k\n*\n*-------------------------------\ncheck128k\n sta $c081\n\n lda $FBB3 ;Apple // family ID byte\n cmp #6\n bne NOT128K ;Must be e/c/GS\n\n bit $C017\n bmi NOT128K\n\n ldx #CHECKEND\n:0 lda CHECKER,X\n sta $180,X\n dex\n bpl :0\n\n jsr $180\n bcs NOT128K\n\n rts\n\n*-------------------------------\n* Turn off drive and display message\n\nNOT128K ldx SLOT\n lda $C088,X\n\n jsr text\n jsr home\n lda #8\n jsr vtab\n\n ldy #0\n:0 lda MEMTEXT,Y\n beq *\n jsr cout\n cmp #$8D\n bne :1\n lda #4\n sta $24\n:1 iny\n bne :0\n\nMEMTEXT hex 8D\n asc \"REQUIRES A //C OR //E WITH 128K\"\n hex 00\n\n*-------------------------------\n* Move RW18\n* d0 < 30.40\n*-------------------------------\nmoverw18\n bit $c08b\n bit $c08b ;rd/wrt RAM, 1st 4k bank\n\n lda #$d0\n ldx #$30\n ldy #$40\n\n* a < x.y\n* 20 < 40.60 means 2000 < 4000.5fffm\n* WARNING: If x >= y, routine will wipe out 64k\n\nmovemem sta dest+1\n stx source+1\n sty endsourc+1\n\n ldy #0\n sty dest\n sty source\n sty endsourc\n\n:loop lda (source),y\n sta (dest),y\n\n iny\n bne :loop\n\n inc source+1\n inc dest+1\n\n lda source+1\n cmp endsourc+1\n bne :loop\n\n rts\n\n*-------------------------------\n sav boot\n"
  },
  {
    "path": "01 POP Source/Source/COLL.S",
    "content": "* coll\norg = $4500\n tr on\n lst off\n*-------------------------------\n*\n*  PRINCE OF PERSIA\n*  Copyright 1989 Jordan Mechner\n*\n*-------------------------------\n org org\n\n jmp CHECKBARR\n jmp COLLISIONS\n jmp GETFWDDIST\n jmp CHECKCOLL\n jmp ANIMCHAR\n\n jmp CHECKSLICE\n jmp CHECKSLICE2\n jmp markmeters ;temp\n jmp CHECKGATE\n jmp firstguard ;temp\n\n jmp ENEMYCOLL\n\n*-------------------------------\n lst\n put eq\n lst\n put gameeq\n lst\n put seqdata\n lst\n put soundnames\n lst\n put movedata\n lst off\n\n dum $f0\nztemp ds 1\nCollFace ds 1\ntempobjid ds 1\ntempstate ds 1\n dend\n\n*-------------------------------\n*  Distance in pixels from either edge of block to barrier\n*  BarL + BarR + BarWidth == 14\n*\n*  Indexed by barrier code:\n*  0 = clear, 1 = panel/gate, 2 = flask, 3 = mirror/slicer\n*  4 = block\n\nBarL db 0,12,2,0,0\nBarR db 0,0,9,11,0\n\n*-------------------------------\nDeathVelocity = 33\nOofVelocity = 22\n\ngatemargin = 6 ;higher = more generous\n\n]rts rts\n*-------------------------------\n*\n*  C H E C K  B A R R I E R\n*\n*  Check for collisions with vertical barriers\n*\n*-------------------------------\nCHECKBARR\n lda #-1 ;\"no-collision\" flag\n sta collideL\n sta collideR\n\n* Check for situations where character is temporarily\n* \"collision-proof\"\n\n lda CharAction\n cmp #7 ;turning?\n beq ]rts\n\n* Initialize CD/SN buffers\n* (Copy \"lastframe\" data from \"thisframe\", \"above\", or \"below\";\n* init \"thisframe\" with FF)\n\n lda CharBlockY\n sta BlockYthis\n\n jsr initCDbufs\n\n lda BlockYthis\n sta BlockYlast\n\n* Get beginning & end of range\n\n lda CDRightEj\n jsr getblockxp\n clc\n adc #2\n cmp #11\n bcc :ok\n lda #11\n  ;Last (rightmost) block in range +1\n:ok sta endrange\n\n lda CDLeftEj\n jsr getblockxp\n tax\n dex ;First (leftmost) block in range\n stx begrange\n\n* Get CD & SN data for every block in range [begrange..endrange]\n* on this level (BlockYthis) and on levels below & above\n\n* This level...\n\n lda BlockYthis\n sta blocky\n\n lda #SNthisframe\n ldx #CDthisframe\n jsr getCData\n\n* Level below...\n\n lda BlockYthis\n clc\n adc #1\n sta blocky\n\n lda #SNbelow\n ldx #CDbelow\n jsr getCData\n\n* ...and level above\n\n lda BlockYthis\n sec\n sbc #1\n sta blocky\n\n lda #SNabove\n ldx #CDabove\n jsr getCData\n\n* Got new data... now compare thisframe with lastframe\n* If a nybble has changed from 0 to 1, we have a collision.\n\n ldx #9\n:loop2\n lda SNthisframe,x\n bmi :no ;ff = no data for this frame\n cmp SNlastframe,x\n bne :no ;no corresponding data for last frame\n\n lda CDlastframe,x\n and #$0f ;low nybble first (L edge of barr)\n bne :noL\n\n lda CDthisframe,x\n and #$0f\n beq :noL\n\n stx collideL ;We have collision w/ L edge\n;x = block # (0-9)\n\n:noL lda CDlastframe,x\n and #$f0 ;hi nybble (R edge of barr)\n bne :noR\n\n lda CDthisframe,x\n and #$f0\n beq :noR\n\n stx collideR ;collision w/ R edge\n:noR\n:no dex\n bpl :loop2\n\n ldx collideL\n ldy collideR\n\n]rts rts\n\n*-------------------------------\n*\n*  G E T  C D A T A\n*\n*  Get \"thisframe\" data for specified blocky\n*\n*-------------------------------\ngetCData\n sta :smodSN+1\n stx :smodCD+1\n\n lda begrange\n jsr getblockej ;left edge of block\n clc\n adc #angle ;perspective\n sta blockedge\n\n ldx begrange\n:loop stx bufindex\n\n* First compare L edge of barr with R edge of char\n\n lda CharScrn\n ldx bufindex\n ldy blocky\n jsr getleftbar ;Get left edge of barrier\n\n cmp CDRightEj\n bcc :RofL\n ;= means L of L\n:LofL lda #0\n beq :cont1\n\n:RofL lda #$f\n:cont1 sta ztemp\n\n* Now compare R edge of barr with L edge of char\n\n lda CharScrn\n ldx bufindex\n ldy blocky\n jsr getrightbar ;Get right edge of barrier\n\n cmp CDLeftEj\n bcc :RofR\n beq :RofR ;= means R of R\n\n:LofR lda #$f0\n bne :cont2\n\n:RofR lda #0\n:cont2 ora ztemp\n\n ldx tempblockx ;guaranteed 0-9 by rdblock\n:smodCD sta CDthisframe,x\n\n lda tempscrn\n:smodSN sta SNthisframe,x ;screen #\n\n lda blockedge\n clc\n adc #14\n sta blockedge\n\n ldx bufindex\n inx\n cpx endrange\n bne :loop\n\n]rts rts\n\n*-------------------------------\n*\n*  I N I T   C D B U F S\n*\n*  Initialize SN and CD buffers\n*  (Take \"lastframe\" data from \"thisframe\", \"above\", or \"below\";\n*  init \"thisframe\" with FF)\n*\n*-------------------------------\ninitCDbufs\n lda BlockYthis\n cmp BlockYlast ;same BlockY as last frame?\n beq :usethis ;yes--copy data from \"thisframe\"\n\n clc\n adc #3\n cmp BlockYlast\n beq :usethis\n\n sec\n sbc #6\n cmp BlockYlast\n beq :usethis\n\n* BlockY has changed--copy data from \"above\" or \"below\"\n\n lda BlockYthis\n clc\n adc #1\n cmp BlockYlast\n beq :useabove\n sec\n sbc #3\n cmp BlockYlast\n beq :useabove\n\n:usebelow\n lda #SNbelow\n ldx #CDbelow\n jmp :cont\n\n:useabove lda #SNabove\n ldx #CDabove\n jmp :cont\n\n:usethis lda #SNthisframe\n ldx #CDthisframe\n\n:cont sta :smodSN+1\n stx :smodCD+1\n\n* Copy contents of appropriate SN & CD buffers (thisframe,\n* below, or above) into lastframe buffers...\n* and initialize SN buffers with $ff\n\n ldx #9\n:zloop\n:smodSN lda SNbelow,x\n sta SNlastframe,x\n\n:smodCD lda CDbelow,x\n sta CDlastframe,x\n\n lda #$ff\n sta SNthisframe,x\n sta SNabove,x\n sta SNbelow,x\n\n dex\n bpl :zloop\n\n]rts rts\n\n*-------------------------------\n*\n*  G E T   L E F T   B A R\n*\n*  Get X-coord of left edge of barrier\n*\n*  In:  X/Y/A = blockx/blocky/scrn\n*       blockedge\n*\n*  Out: A = screen X-coord (140)\n*       Return A = 255 if this block is no barrier\n*\n*-------------------------------\ngetleftbar\n jsr rdblock ;get block ID\n\n jsr cmpbarr ;return A = barrier code #\n beq :clear ;or -1 if clear\n tay\n\n lda blockedge\n clc\n adc BarL,y ;barr dist from L edge of block\n sec\n rts\n\n:clear lda #255\n clc\n rts\n\n*-------------------------------\n*\n*  G E T   R I G H T   B A R\n*\n*  Get right edge of barrier, 0 if clear\n*\n*-------------------------------\ngetrightbar\n jsr rdblock\n\n jsr cmpbarr\n beq :clear\n tay\n\n lda blockedge\n clc\n adc #13\n sec\n sbc BarR,y ;barr dist from R edge of block\n sec\n rts\n\n:clear lda #0\n clc\n]rts rts\n\n*-------------------------------\n*\n*  C O L L I S I O N S\n*\n*  If a collision was detected, act on it\n*\n*  In: collideL/R: - if no coll, 0-9 refers to block in\n*      which collision occurred\n*\n*  (CollideL is collision with LEFT EDGE of barrier\n*  CollideR is collision with RIGHT EDGE of barrier)\n*\n*-------------------------------\nCOLLISIONS\n lda AMtimer ;antimatter timer\n beq :cont\n lda $c030\n dec AMtimer\n rts\n:cont\n\n* Check for situations where we let character\n* pass thru barrier (e.g., climbing up onto ledge)\n\n lda CharAction\n cmp #2 ;hanging?\n beq ]rts\n cmp #6 ;hanging?\n beq ]rts\n lda CharPosn\n cmp #135\n bcc :cont2\n cmp #149\n bcc ]rts ;climbing?\n\n:cont2\n ldx collideL\n bmi :noL\n stx collX\n jmp leftcoll\n\n:noL ldx collideR\n bmi :noR\n stx collX\n jmp rightcoll\n:noR\n]rts rts\n\n*-------------------------------\n*\n*  R I G H T   C O L L I S I O N\n*\n*-------------------------------\nrightcoll\n lda CharSword\n cmp #2 ;if in fighting mode,\n beq :1 ;waive front-facing requirement\n\n lda CharFace\n bpl ]rts\n:1\n jsr checkcoll1\n bcc ]rts\n\n lda tempscrn\n ldx tempblockx\n ldy tempblocky\n\n jsr getrightbar ;edge of barr\n sec\n sbc CDLeftEj ;dist to char\n\n ldx #0 ;right\n jmp collide\n\n*-------------------------------\n*\n*  L E F T   C O L L I S I O N\n*\n*-------------------------------\nleftcoll\n lda CharSword\n cmp #2\n beq :1\n\n lda CharFace\n bne ]rts\n:1\n jsr checkcoll1\n bcc ]rts\n\n lda tempscrn\n ldx tempblockx\n ldy tempblocky\n jsr getleftbar\n sec\n sbc CDRightEj ;- dist to char\n\n ldx #-1 ;left\n jmp collide\n\n*-------------------------------\n*\n* Call CHECKCOLL for block #X\n*\n* In: CD data; X = blockx\n*\n*-------------------------------\ncheckcoll1\n stx tempblockx\n\n lda CharBlockY\n bpl :2\n clc\n adc #3\n bne :1\n\n:2 cmp #3\n bcc :1\n sec\n sbc #3\n:1 sta tempblocky\n\n lda SNthisframe,x\n sta tempscrn\n\n jsr rdblock1\n\n jmp CHECKCOLL\n\n*-------------------------------\n*\n*  C H E C K   C O L L\n*\n*  In: RDBLOCK results (A = objid)\n*\n*  Out: tempblockx,tempblocky,tempscrn\n*       cs if collision, cc if not\n*\n*-------------------------------\nCHECKCOLL\n cmp #flask\n beq :no ;flask is not really a barrier\n\n cmp #gate\n beq :gate\n\n cmp #slicer\n beq :slicer\n\n cmp #mirror\n beq :mirror\n bne :c1\n\n* You can pass thru mirror from R only if you take a\n* running jump\n\n:mirror\n lda CharID\n bne :c1 ;must be kid\n lda CharPosn\n cmp #39\n bcc :c1\n cmp #44\n bcs :c1\n lda CharFace\n bpl :c1\n\n jsr smashmirror\n lda #$ff\n sta createshad ;set flag\n\n clc\n rts\n\n* Is slicer closed?\n\n:slicer lda (BlueSpec),y\n cmp #slicerExt\n bne :no ;no--pass thru\n beq :c1\n\n* Is gate low enough to bar you?\n\n:gate jsr gatebarr? ;return cc if gate bars you\n bcc :c1\n\n* no collision--pass thru barrier\n\n:no clc\n rts\n\n* Yes, collision--get blockedge & return cs\n\n:c1\n lda tempblockx\n jsr getblockej\n jsr AdjustScrn\n clc\n adc #angle\n sta blockedge\n:yes sec\n]rts rts\n\n*-------------------------------\n*\n* AdjustScrn\n*\n* In:  tempscrn, VisScrn\n*      scrnLeft/Right/BelowL/BelowR\n*      A = X-coord on tempscrn\n*\n* Out: A = X=coord on VisScrn\n*\n*-------------------------------\nAdjustScrn\n ldx tempscrn\n cpx VisScrn\n beq ]rts\n cpx scrnLeft\n beq :osL\n cpx scrnBelowL\n beq :osL\n cpx scrnRight\n beq :osR\n cpx scrnBelowR\n beq :osR\n rts\n:osR clc\n adc #ScrnWidth\n rts\n:osL sec\n sbc #ScrnWidth\n]rts rts\n\n*-------------------------------\n*\n*  C O L L I D E\n*\n*  In: A = distance from barrier to character\n*      X = coll direction (-1 = left, 0 = right)\n*      tempblockx,y,scrn set for collision block\n*\n*-------------------------------\ncollide\n stx CollFace ;temp var\n\n ldx CharLife ;dead?\n bpl ]rts ;yes--let him finish falling (or whatever)\n\n ldx CharPosn\n cpx #177 ;impaled?\n beq ]rts ;yes--ignore collision\n\n clc\n adc CharX\n sta CharX\n\n* In midair or on the ground?\n\n jsr rdblock1\n\n ldx CollFace\n bpl :faceL\n\n cmp #block ;If this block has no floor,\n beq :2 ;use the one in front of it\n bne :1\n\n:2 dec tempblockx\n jmp :3\n\n:faceL cmp #panelwof ;Panelwof is only a problem\n beq :4 ;when facing L\n cmp #panelwif\n beq :4\n cmp #block\n bne :1\n\n:4 inc tempblockx\n lda tempscrn\n bne :3\n lda tempblockx\n cmp #10\n bne :3\n lda CharScrn\n sta tempscrn\n lda #0\n sta tempblockx ;screen 0 block 10 = CharScrn block 0\n\n:3 jsr rdblock1\n\n:1 jsr cmpspace\n bne GroundBump\n\n*-------------------------------\n* Bump into barrier w/o floor\n\nAirBump\n lda #-4\n jsr addcharx\n sta CharX\n\n lda CharAction\n cmp #4 ;already falling?\n bne :3\n;yes--just rebound off wall\n lda #0\n sta CharXVel\n beq :smackwall\n\n:3 lda #bumpfall\n jsr jumpseq\n jsr animchar\n\n:smackwall\n\nBumpSound\n lda #1\n sta alertguard\n lda #SmackWall\n jmp addsound\n\n*-------------------------------\n* Bump into barrier w/floor\n\nGroundBump\n ldx CharBlockY\n\n lda CharSword\n cmp #2\n beq :skipair ;no airbump if en garde\n\n lda FloorY+1,x\n sec\n sbc CharY\n cmp #15 ;constant\n bcs AirBump\n:skipair\n lda FloorY+1,x\n sta CharY\n\n lda CharYVel\n cmp #OofVelocity\n bcc :okvel\n lda #-5\n jsr addcharx\n sta CharX\n rts ;let checkfloor take care of it\n\n:okvel lda #0\n sta CharYVel\n\n lda CharLife\n beq :deadbump\n\n* Is he en garde?\n\n lda CharSword\n cmp #2\n beq :CollideEng ;yes--collide en garde\n\n* Should it be a hard or a soft bump?\n\n:normal\n ldx CharPosn ;last frame\n\n cpx #24\n beq :hard\n cpx #25\n beq :hard ;standjump-->hard\n\n cpx #40\n bcc :1\n cpx #43\n bcc :hard ;runjump-->hard\n\n:1 cpx #102\n bcc :2\n cpx #107\n bcc :hard ;freefall-->hard\n\n:2\n\n:soft lda #bump\n jsr jumpseq\n jsr BumpSound ;soft bump sound?\n jmp animchar\n\n:hard lda #hardbump\n:doit jsr jumpseq\n jsr animchar\n\n jmp BumpSound\n\n* dead when he hits the wall\n\n:deadbump\n]rts rts\n\n*-------------------------------\n* Collide en garde\n\n:CollideEng\n lda CollFace\n cmp CharFace\n beq :collback\n\n lda #bumpengfwd\n bne :doit\n\n* Char is en garde & trying to back into barrier\n\n:collback\n lda #bumpengback\n jsr jumpseq\n jsr animchar ;get new frame\n\n lda #1\n jsr addcharx\n sta CharX\n rts\n\n*-------------------------------\n*\n*  G E T   F W D   D I S T\n*\n*  In: Char data\n*\n*  Out: A = size of \"careful step\" forward (0-14 pixels)\n*       X = what you're stepping up to\n*           (0 = edge, 1 = barrier, 2 = clear)\n*       RDBLOCK results for that block\n*\n*-------------------------------\nGETFWDDIST\n\n* Get edges\n\n jsr GetBaseBlock\n jsr setupchar\n jsr getedges\n\n* If this block contains barrier, get distance\n\n jsr getunderft ;read block underfoot\n sta tempobjid\n\n jsr cmpbarr\n beq :nextb ;This block is clear\n\n lda CharBlockX\n sta tempblockx\n jsr DBarr ;returns A = dist to barrier\n tax\n bpl :tobarr\n\n* If next block contains barrier, get distance\n\n:nextb\n jsr getinfront\n sta tempobjid\n cmp #panelwof\n bne :99 ;Panelwof is special case\n ldx CharFace ;if you're facing R\n bpl :toEOB\n\n:99 jsr cmpbarr\n beq :nobarr\n\n lda infrontx\n sta tempblockx\n jsr DBarr\n tax\n bpl :tobarr\n\n* If next block is dangerous (e.g., empty space)\n* or sword or potion, step to end of this block\n\n:nobarr\n jsr getinfront ;read block in front\n sta tempobjid\n\n  cmp #loose\n beq :toEOB ;step to end of block\n\n cmp #pressplate\n beq :toEOB1\n\n cmp #sword\n beq :toEOB1\n cmp #flask\n beq :toEOB1\n\n jsr cmpspace\n beq :toEOB\n\n* All clear--take a full step forward\n\n:fullstep lda #11 ;natural step size\n\n ldx #2 ;clear\n bne :done\n\n* Step to end of block (no \"testfoot\")\n\n:toEOB1 jsr getdist\n beq :fullstep\n ldx #0\n beq :done\n\n* Step to end of block\n\n:toEOB jsr getdist ;returns # pixels to end of block (0-13)\n\n ldx #0 ;edge\n\n:done ldy tempobjid\n]rts rts\n\n* Step up to barrier\n\n:tobarr\n cmp #14\n bcs :fullstep\n\n ldx #1 ;barrier\n bne :done\n\n*-------------------------------\n*\n* Get distance to barrier\n*\n* In: rdblock results; tempobjid\n*     Must have called setupchar/getedges\n* Out: A = distance to barrier (- if barr is behind char)\n*\n*-------------------------------\nDBarr\n lda tempobjid\n cmp #gate\n bne :ok\n;treat gate as barrier only if down\n jsr gatebarr? ;returns cs if open\n bcs :clr\n\n:ok lda tempblockx\n jsr getblockej\n clc\n adc #angle\n sta blockedge ;L edge of this block\n\n lda CharFace\n bmi :checkL\n\n* Char facing R -- get distance to barrier\n\n:checkR\n lda tempobjid ;block ID\n\n jsr cmpbarr ;return A = barrier code #\n beq :clr\n tay\n\n lda blockedge\n clc\n adc BarL,y\n sta ztemp ;left edge of barr\n\n sec\n sbc CDRightEj\n rts ;If -, barr is behind char\n\n:clr lda #-1\n rts\n\n* Char facing L -- get distance to barr\n\n:checkL\n lda tempobjid\n\n jsr cmpbarr\n beq :clr\n tay\n\n lda blockedge\n clc\n adc #13\n sec\n sbc BarR,y\n sta ztemp ;R edge of barr\n\n lda CDLeftEj\n sec\n sbc ztemp\n\n]rts rts\n\n*-------------------------------\n*\n*  A N I M   C H A R\n*\n*  Get next frame from sequence table;\n*  update char data accordingly.\n*  We're now ready to draw this frame.\n*\n*-------------------------------\nANIMCHAR\n\n:next jsr getseq ;get next byte from seqtab\n ;& increment CharSeq\n\n cmp #chx ;\"change x\" instruction?\n bne :no1\n\n jsr getseq ;next byte is delta-x\n\n jsr addcharx\n sta CharX\n\n jmp :next\n\n*-------------------------------\n:no1 cmp #chy\n bne :no2\n\n jsr getseq\n\n clc\n adc CharY\n sta CharY\n\n jmp :next\n\n*-------------------------------\n:no2 cmp #aboutface\n bne :no3\n\n lda CharFace\n eor #$ff\n sta CharFace\n\n jmp :next\n\n*-------------------------------\n:no3 cmp #goto\n bne :no4\n\n:goto jsr getseq ;low byte of address\n pha\n\n jsr getseq ;high byte\n\n sta CharSeq+1\n pla\n sta CharSeq\n\n jmp :next\n\n*-------------------------------\n:no4 cmp #up\n bne :no5\n\n dec CharBlockY\n\n jsr addslicers\n\n jmp :next\n\n*-------------------------------\n:no5 cmp #down\n bne :no6\n\n inc CharBlockY\n\n jsr addslicers\n\n jmp :next\n\n*-------------------------------\n:no6 cmp #act\n bne :no7\n\n jsr getseq\n sta CharAction\n\n jmp :next\n\n:no7 cmp #setfall\n bne :no8\n\n jsr getseq\n sta CharXVel\n\n jsr getseq\n sta CharYVel\n\n jmp :next\n\n:no8 cmp #ifwtless\n bne :no9\n\n lda weightless ;weightless?\n bne :goto ;yes--branch\n\n jsr getseq\n jsr getseq ;skip 2 bytes\n jmp :next ;& continue\n\n:no9 cmp #die\n bne :no10\n jmp :next\n\n:no10 cmp #jaru\n bne :no11\n\n lda #1\n sta jarabove ;jar floorboards above\n jmp :next\n\n:no11 cmp #jard\n bne :no12\n\n lda #-1\n sta jarabove ;jar floorboards below\n jmp :next\n\n*-------------------------------\n:no12 cmp #tap\n bne :no13\n\n jsr getseq ;sound #\n cmp #0 ;0: alert guard\n beq :0\n\n cmp #1 ;1: footstep\n bne :1\n lda #Footstep\n:tap jsr addsound\n:0 lda #1\n sta alertguard\n jmp :next\n\n:1 cmp #2 ;2: smack wall\n bne :2\n lda #SmackWall\n bne :tap\n:2 jmp :next\n\n:no13 cmp #nextlevel\n bne :no14\n\n jsr GoneUpstairs\n jmp :next\n\n:no14 cmp #effect\n bne :no15\n\n jsr getseq ;effect #\n cmp #1\n bne :fx0\n\n jsr potioneffect\n:fx0 jmp :next\n\n:no15\n*-------------------------------\n sta CharPosn ;frame #\n\n]rts rts\n\n*-------------------------------\n* Char has gone upstairs\n* What do we do?\n*-------------------------------\nGoneUpstairs\n lda level\n cmp #13\n beq :ok ;no music for level 13\n cmp #4\n bne :1 ;mirror level is special\n:3 lda #s_Shadow\n bne :2\n\n:1 lda #s_Upstairs\n:2 ldx #25\n jsr cuesong\n\n:ok inc NextLevel\n rts\n\n*-------------------------------\n*\n*  Sliced by slicer? (Does CD buf show char overlapping\n*  with a closed slicer?)\n*\n*  In: Char data, CD data\n*\n*-------------------------------\nCHECKSLICE\n lda CharBlockY\n sta tempblocky\n\n ldx #9\n\n:loop stx tempblockx\n\n lda CDthisframe,x\n cmp #$ff ;char overlapping barr?\n bne :ok ;no\n\n* Yes--is it a slicer?\n\n lda SNthisframe,x\n sta tempscrn\n\n jsr rdblock1\n cmp #slicer\n bne :ok\n\n lda (BlueSpec),y\n and #$7f\n cmp #slicerExt ;slicer closed?\n beq :slice ;yes--slice!\n\n* No--keep checking\n\n:ok ldx tempblockx\n dex\n bpl :loop\n]rts rts\n\n* Slice!\n* In: rdblock results for slicer block\n\n:slice\n]slice\n lda (BlueSpec),y\n ora #$80\n sta (BlueSpec),y ;set hibit (smear)\n\n:cont lda CharPosn\n cmp #178 ;if already cut in half (e.g. by another slicer),\n beq ]rts ;leave him alone\n\n lda tempblockx\n jsr getblockej ;edge of slicer block\n clc\n adc #7\n sta CharX\n\n lda #8\n jsr addcharx\n sta CharX ;align char w/slicer\n\n ldx CharBlockY\n inx\n lda FloorY,x\n sta CharY ;align char w/floor\n\n lda #100\n jsr decstr\n\n lda #Splat\n jsr addsound\n\n lda #halve\n jsr jumpseq\n jmp animchar\n\n*-------------------------------\n*\n*  Sliced by slicer?\n*\n*  (Use this routine for enemy, who has no CD data)\n*\n*  In: Char data; GETEDGES results\n*\n*-------------------------------\nCHECKSLICE2\n jsr getunderft\n jsr :slice? ;return cs if sliced\n bcs ]rts\n\n inc tempblockx\n jsr rdblock1\n\n:slice?\n cmp #slicer\n bne :safe\n lda (BlueSpec),y\n and #$7f\n cmp #slicerExt\n bne :safe ;slicer open\n\n lda tempblockx\n jsr getblockej\n clc\n adc #angle\n sta blockedge\n\n lda tempscrn\n ldx tempblockx\n ldy tempblocky\n jsr getleftbar\n cmp CDRightEj\n bcs :safe\n\n lda tempscrn\n ldx tempblockx\n ldy tempblocky\n jsr getrightbar\n cmp CDLeftEj\n bcc :safe\n beq :safe\n\n jsr rdblock1\n jsr ]slice\n sec\n rts\n\n:safe clc\n]rts rts\n\n*-------------------------------\n*\n* Special situation: If char is standing directly under closing\n* gate, it knocks him aside when it shuts.\n*\n* In: Char data, CD data\n*\n*-------------------------------\nCHECKGATE\n lda CharAction\n cmp #7 ;turning\n beq :1\n lda CharPosn\n cmp #15 ;standing?\n beq :1\n cmp #108\n bcc ]rts\n cmp #111 ;crouching?\n bcs ]rts\n:1\n jsr getunderft\n cmp #gate\n beq :check\n\n dec tempblockx\n jsr rdblock1\n cmp #gate\n bne ]rts\n:check\n ldx tempblockx\n lda CDthisframe,x\n and CDlastframe,x\n cmp #$ff\n bne ]rts\n\n jsr gatebarr?\n bcs ]rts\n\n jsr BumpSound\n\n* bump him left or right?\n\n lda tempblockx\n sta collX\n jsr getunderft\n lda tempblockx\n cmp collX\n beq :left\n bcs :right\n\n:left lda #-5\n bne :10\n:right lda #5\n:10 clc\n adc CharX\n sta CharX\n]rts rts\n\n*-------------------------------\n*\n* Return cc if gate bars you, cs if clear\n*\n*-------------------------------\ngatebarr?\n lda (BlueSpec),y\n lsr\n lsr\n clc\n adc #gatemargin\n cmp imheight\n]rts rts\n\n*-------------------------------\n*\n* Limited collision detection for enemies\n* (backing into wall or gate while fighting)\n*\n*-------------------------------\nENEMYCOLL\n lda AMtimer ;antimatter timer\n bne ]rts\n\n lda CharAction\n cmp #1\n bne ]rts ;must be on ground\n lda CharLife\n bpl ]rts ;& alive\n lda CharSword\n cmp #2\n bcc ]rts ;& en garde\n\n jsr getunderft\n cmp #block\n beq :collide\n cmp #panelwif\n beq :collide\n cmp #gate\n bne :1\n jsr gatebarr?\n bcc :collide\n\n* If facing R, check block behind too\n\n:1 lda CharFace\n bmi ]rts\n dec tempblockx\n jsr rdblock1\n cmp #panelwif\n beq :collide\n cmp #gate\n bne ]rts\n jsr gatebarr?\n bcc :collide\n]rts rts\n\n* Char is en garde & trying to back into barrier\n* Put him right at edge\n\n:collide\n jsr setupchar\n jsr getedges ;get edges\n\n lda tempscrn\n ldx tempblockx\n ldy tempblocky\n jsr rdblock\n sta tempobjid\n jsr checkcoll\n bcc ]rts\n\n jsr DBarr2 ;get A = dist to barrier\n tax\n bpl ]rts\n eor #$ff\n clc\n adc #1\n jsr addcharx\n sta CharX\n\n lda #bumpengback\n jsr jumpseq\n jsr animchar ;get new frame\n jmp rereadblocks\n\n*-------------------------------\n*\n* Special version of DBarr for enemy collisions\n*\n* In: checkcoll results; tempobjid\n*     Must have called setupchar/getedges\n* Out: A = distance to barrier (- if barr is behind char)\n*\n*-------------------------------\nDBarr2\n lda CharFace\n bpl :checkL ;Note: reversed from DBarr\n\n* Char's back facing R -- get distance to barrier\n\n:checkR\n lda tempobjid ;block ID\n\n jsr cmpbarr ;return A = barrier code #\n beq :clr\n tay\n\n lda blockedge\n clc\n adc BarL,y\n sta ztemp ;left edge of barr\n\n sec\n sbc CDRightEj\n rts ;If -, barr is behind char\n\n:clr lda #-1\n rts\n\n* Char facing L -- get distance to barr\n\n:checkL\n lda tempobjid\n\n jsr cmpbarr\n beq :clr\n tay\n\n lda blockedge\n clc\n adc #13\n sec\n sbc BarR,y\n sta ztemp ;R edge of barr\n\n lda CDLeftEj\n sec\n sbc ztemp\n\n]rts rts\n\n*-------------------------------\n lst\n ds 1\n usr $a9,16,$b00,*-org\n lst off\n"
  },
  {
    "path": "01 POP Source/Source/CTRL.S",
    "content": "* ctrl\norg = $3a00\n tr on\n lst off\n*-------------------------------\n org org\n\n jmp PLAYERCTRL\n jmp CHECKFLOOR\n jmp SHADCTRL\n jmp REREADBLOCKS\n jmp CHECKPRESS\n\n jmp DOIMPALE\n jmp GENCTRL\n jmp CHECKIMPALE\n\n*-------------------------------\n lst\n put eq\n lst\n put gameeq\n lst\n put seqdata\n lst\n put soundnames\n lst\n put movedata\n lst off\n\n dum $f0\nztemp ds 1\njxtemp ds 1\njytemp ds 1\njbtemp ds 1\natemp ds 1\n dend\n\n*-------------------------------\n*  Misc. changeable parameters\n\nDeathVelocity = 33\nOofVelocity = 22\n\ngrabreach = -8\ngrabspeed = 32 ;max Y-vel to grab ledge\ngrablead = 25 ;increase to grab ledge earlier\nstuntime = 12\n\njumpupreach = 0\njumpupangle = -6\n\nJumpBackThres = 6\nStepOffFwd = 3\nStepOffBack = 8\n\nswordthres = 90 ;to go en garde (facing fwd)\nswordthresN = -10 ;\" \" (behind you)\nblockthres = 32\ngraceperiod = 9\ngdpatience = 15\n\ngclimbthres = 6\n\nstairthres = 30\n\nplus1 db -1,1\nminus1 db 1,-1\n\n*-------------------------------\n*\n*  If he's passed thru floor plane, change CharBlockY\n*  If floor is solid, stop him\n*\n*-------------------------------\nfalling\n lda CharY\n\n ldx CharBlockY\n inx\n cmp FloorY,x\n bcs :1\n\n jmp fallon ;Hasn't reached floor yet\n\n* Character is passing thru floor plane\n\n:1 jsr getunderft ;Check if there's\n ;solid floor underfoot\n cmp #block\n bne :2 ;Solid block is special case--\n jsr InsideBlock ;reset him to either side of block\n\n:2 jsr cmpspace\n bne hitflr\n\n inc CharBlockY ;Fall thru floor plane\n\n]rts rts\n*-------------------------------\n*\n*  C H E C K  F L O O R\n*\n*-------------------------------\n\nCHECKFLOOR\n lda CharAction\n cmp #6 ;hanging?\n beq ]rts\n\n cmp #5 ;bumped?\n bne :2\n lda CharPosn\n cmp #109 ;crouched (e.g. on loose floor)\n beq :ong\n cmp #185 ;dead\n bne ]rts\n:ong jmp onground\n\n:2 cmp #4 ;freefall\n beq falling\n cmp #3\n bne :1\n lda CharPosn\n cmp #102\n bcc ]rts\n cmp #106\n bcs ]rts\n jmp fallon\n\n:1 cmp #2 ;hanging\n beq ]rts\n jmp onground ;7, 0, or 1: on the ground\n\n*-------------------------------\n*\n*  Floor stops him -- Choose appropriate landing\n*\n*-------------------------------\nhitflr\n ldx CharBlockY\n inx\n lda FloorY,x\n sta CharY ;align char w/floor\n\n jsr getunderft\n cmp #spikes\n beq :hitspikes\n\n* Has he landed too close to edge?\n\n jsr getinfront\n jsr cmpspace\n bne :cont ;no\n\n jsr getdist ;# pixels to edge\n cmp #4 ;was 2\n bcs :cont\n;Yes--move him back a little\n lda #-3\n jsr addcharx\n sta CharX\n\n:cont jsr addslicers ;trigger slicers on this level\n\n lda CharLife\n bpl :hardland ;dead before he hits the ground\n\n jsr getdist\n cmp #12\n bcc :nc\n jsr getbehind\n cmp #spikes\n beq :hitspikes ;check block behind if dist>=12\n\n:nc jsr getunderft ;what has he landed on?\n cmp #spikes\n bne :notspikes\n\n:hitspikes\n jsr getspikes ;are spikes lethal?\n bne :impale ;yes\n\n:notspikes\n lda CharYVel\n cmp #OofVelocity\n bcc :softland\n\n cmp #DeathVelocity\n bcc :medland\n\n:hardland\n lda #100\n jsr decstr\n:hdland1\n lda #Splat\n jsr addsound\n\n lda #hardland\n bne :doland\n\n:medland\n lda CharID\n cmp #1\n beq :softland ;shad lands easy\n cmp #2\n bcs :hardland ;guards can't survive 2 stories\n\n lda #1\n jsr decstr\n beq :hdland1\n\n lda #Splat\n jsr addsound\n\n lda #medland\n bne :doland\n\n:softland\n lda CharID\n cmp #2\n bcs :gd ;guard always lands en garde\n lda CharSword\n cmp #2\n bne :1\n:gd lda #2\n sta CharSword\n lda #landengarde\n bne :doland\n\n:1 lda #softland\n bne :doland\n\n:impale jmp DoImpale\n\n:doland jsr jumpseq\n jsr animchar\n\n lda #0\n sta CharYVel\n]rts rts\n\n*-------------------------------\n*\n*  Hasn't hit floor yet -- can he grab edge above?\n*\n*-------------------------------\nfallon\n lda btn ;is button down?\n and CharLife ;& is he alive?\n bpl ]rts\n ;yes--can he grab edge?\n lda CharYVel\n cmp #grabspeed\n bcs ]rts ;no--falling too fast\n\n lda CharY\n clc\n adc #grablead\n ldx CharBlockY\n inx\n cmp FloorY,x\n bcc ]rts  ;not within grabbing range yet\n\n*  Char is within vertical range, and button is down\n*  Is there a ledge within reach?\n\n lda CharX\n sta savekidx\n lda #grabreach\n jsr addcharx\n sta CharX\n jsr rereadblocks\n\n jsr :test ;can you grab ledge?\n bne :ok ;yes--do it\n lda savekidx\n sta CharX\n jmp rereadblocks\n:ok ;do it!\n\n* Align char with block\n\n jsr getdist\n\n jsr addcharx\n sta CharX\n\n ldx CharBlockY\n inx\n lda FloorY,x\n sta CharY\n\n lda #0\n sta CharYVel\n\n lda #fallhang\n jsr jumpseq\n jsr animchar\n\n lda #stuntime\n sta stunned\n]rts rts\n\n:test jsr getabove\n sta blockid\n jsr getaboveinf\n jmp checkledge\n\n*-------------------------------\n*  Is there floor underfoot?  If not, start to fall\n\nonground\n lda Fcheck\n and #fcheckmark\n beq ]rts ;0--no need to check\n\n jsr getunderft\n cmp #block\n bne :1\n jsr InsideBlock ;If \"inside\" block, bump him outside\n:1\n jsr cmpspace\n bne ]rts\n\n* Level 12: Phantom bridge\n\n lda level\n cmp #12\n bne :no\n lda mergetimer\n bpl :no\n lda CharBlockY\n bne :no\n lda CharScrn\n cmp #2\n beq :yes\n cmp #13\n bne :no\n lda tempblockx\n cmp #6\n bcc :no\n;Create floorboards on the fly\n:yes lda #floor\n sta (BlueType),y\n jsr indexblock\n lda #2\n jsr :sub\n iny\n:sub jsr markwipe\n jmp markred\n:no\n*-------------------------------\n*  No floor underfoot--commence falling\n\nstartfall\n lda #0\n sta rjumpflag\n sta CharSword ;so you can grab on\n\n inc CharBlockY ;# of floor just below your feet\n jsr addslicers\n\n lda CharPosn ;upcoming frame\n;(the one we're about to replace\n;with first frame of falling seq)\n sta rjumpflag\n\n cmp #9 ;run-12\n beq :stepfall\n cmp #13 ;run-16\n beq :stepfall2\n cmp #26 ;standjump-19\n beq :jumpfall\n cmp #44 ;runjump-11\n beq :rjumpfall\n cmp #81\n bcc :2\n cmp #86\n bcc :hdropfall\n:2 cmp #150\n bcc :1\n cmp #180\n bcc :fightfall ;from fighting stance\n:1\n\n:stepfall lda #stepfall\n bne :doit\n\n:stepfall2 lda #stepfall2\n bne :doit\n\n:jumpfall lda #jumpfall\n bne :doit\n\n:rjumpfall lda #rjumpfall\n bne :doit\n\n:hdropfall\n lda #5\n jsr addcharx\n sta CharX\n jsr rereadblocks\n jmp :stepfall2\n]rts rts\n\n:fightfall lda CharID\n cmp #2\n bcc :player\n lda CharXVel\n bmi :fb ;did gd step off fwd or bkwd?\n lda #0\n sta droppedout\n lda #efightfallfwd\n bne :doit\n:fb lda #efightfall\n bne :doit\n:player lda #1\n sta droppedout ;for guard's benefit\n lda #fightfall\n bne :doit\n\n*-------------------------------\n:doit jsr jumpseq\n jsr animchar ;advance 1 frame into fall\n\n jsr rereadblocks\n jsr getunderft\n jsr cmpwall\n beq :bump\n jsr getinfront\n jsr cmpwall\n bne ]rts\n jmp CDpatch\n\n:bump jmp InsideBlock ;If \"inside\" block, bump him outside\n\nCDpatch\n lda rjumpflag\n cmp #44 ;running jump?\n bne :patchX\n\n jsr getdist\n cmp #6\n bcs :patchX ;dist >= 6...we're OK\n\n lda #patchfall\n jsr jumpseq\n jsr animchar\n jmp rereadblocks\n\n:patchX lda #-1\n:1 jsr addcharx\n sta CharX\n jmp rereadblocks\n\n*-------------------------------\n*\n* Char is \"inside\" a block--bump him outside\n* (hopefully the same side from which he entered)\n*\n* Change Char X & return rdblock results\n*\n*-------------------------------\nInsideBlock\n jsr getdist ;to EOB\n cmp #8\n bcs :bumpback\n\n:bumpfwd\n jsr getinfront\n cmp #block\n beq :bumpback\n\n jsr getdist ;to EOB\n clc\n adc #4\n:reland\n jsr addcharx\n sta CharX\n jsr rereadblocks ;reposition char\n jmp getunderft\n\n:bumpback\n jsr getbehind\n cmp #block\n bne :1\n  ;we're screwed\n;bump 2 back (what the hell)\n jsr getdist\n clc\n adc #14\n eor #$ff\n clc\n adc #8\n jmp :reland\n:1\n jsr getdist\n eor #$ff\n clc\n adc #8\n jmp :reland\n\n*-------------------------------\n*\n*  S H A D O W   C O N T R O L\n*\n*-------------------------------\nSHADCTRL\n lda CharID\n cmp #24 ;mouse?\n bne :1\n jmp AutoCtrl\n\n:1 lda CharLife\n bpl :dead\n;Has char's life run out?\n lda OppStrength\n bne :cont\n lda #0\n sta CharLife\n jsr deadenemy\n\n:dead lda CharID\n cmp #1 ;shadow man?\n bne :cont\n jmp VanishChar\n\n:cont lda ManCtrl\n bne :manualctrl\n\n jsr AutoCtrl\n\n jmp GenCtrl\n\n* Manual ctrl: enemy controlled by deselected device\n\n:manualctrl\n jsr LoadDesel\n\n jsr getdesel\n\n jsr clrjstk\n\n jsr UserCtrl\n\n jmp SaveDesel\n\n*-------------------------------\n*\n*  P L A Y E R   C O N T R O L\n*\n*-------------------------------\nPLAYERCTRL\n lda CharLife\n bpl :cont1 ;dead\n lda KidStrength\n bne :cont1\n lda #0\n sta CharLife\n:cont1\n lda stunned\n beq :cont\n dec stunned\n\n:cont lda level\n bne :game\n:demo jsr DemoCtrl\n jmp GenCtrl\n\n* Character controlled by selected device\n\n:game jsr LoadSelect ;load jstk-push flags for selected device\n\n jsr getselect ;get current input from selected device\n\n jsr clrjstk ;clear appropriate jstk-push flags\n\n lda #2\n jsr UserCtrl\n\n jmp SaveSelect ;save updated jstk-push flags\n\n*-------------------------------\n* Player ctrl in demo\n\nDemoCtrl\n lda milestone\n bne :finish\n lda CharSword\n beq :preprog\n\n lda #10\n sta guardprog\n jsr AutoCtrl\n lda #11\n sta guardprog\n rts\n\n:preprog jmp demo\n\n:finish jsr clrall\n sta clrbtn\n lda #-1\n sta clrF\n sta JSTKX ;run o.s.\n]rts rts\n\n*-------------------------------\nUserCtrl\n lda CharFace\n bpl :faceL\n\n jmp GenCtrl\n\n* If char is facing right, reverse JSTK & clrF/clrB\n\n:faceL jsr facejstk\n\n jsr GenCtrl\n\n jmp facejstk\n\n*-------------------------------\nclrall\n lda #0\n sta clrB\n sta clrF\n sta clrU\n sta clrD\n lda #1\n]rts rts\n\n*-------------------------------\n*\n*  G E N E R A L   C O N T R O L\n*\n*  In: Raw input\n*        JSTKX (- fwd, + back, 0 center)\n*        JSTKY (- up, + down, 0 center)\n*        btn (- down, + up)\n*      Smart input\n*        clrF-B-U-D-btn (- = fresh press)\n*\n*  Set clr = 1 after using a press\n*\n*-------------------------------\nGENCTRL\n lda CharLife\n bmi :alive\n\n* Dead character (If he's standing, collapse)\n\n:dead lda CharPosn\n cmp #15\n beq :drop\n cmp #166\n beq :drop\n cmp #158\n beq :drop\n cmp #171\n bne ]rts\n:drop lda #dropdead\n jmp jumpseq\n\n* Live character\n\n:alive lda CharAction\n cmp #5 ;is char in mid-bump?\n beq :clr\n cmp #4 ;or falling?\n beq :clr\n bne :underctrl\n:clr\n]clr jmp clrall\n\n:underctrl\n lda CharSword\n cmp #2 ;in fighting mode?\n beq FightCtrl ;yes\n\n lda CharID\n cmp #2 ;kid or shadowman?\n bcc :cont\n jmp GuardCtrl ;no\n\n* First question: what is char doing now?\n\n:cont ldx CharPosn ;previous frame #\n\n cpx #15\n beq :standing\n\n cpx #48\n beq :turning\n\n cpx #50\n bcc :0\n cpx #53\n bcc :standing ;turn7-8-9/crouch\n:0\n cpx #4\n bcc :starting ;run4-5-6\n\n cpx #67\n bcc :4\n cpx #70\n bcc :stjumpup ;starting to jump up\n\n:4 cpx #15\n bcs :2\n jmp :running ;run8-17\n\n:2 cpx #87\n bcc :1\n cpx #100\n bcs :1\n jmp :hanging ;jumphang22-34\n\n:1 cpx #109 ;crouching?\n beq :crouching\n:3\n]rts rts\n\n:standing jmp standing\n:starting jmp starting\n:stjumpup jmp stjumpup\n:running jmp arunning\n:hanging jmp hanging\n:turning jmp turning\n:crouching jmp crouching\n\n*-------------------------------\n* Similar routine for guard\n\nGuardCtrl\n ldx CharPosn\n cpx #166 ;standing?\n beq :alert\n]rts rts\n\n:alert\n lda clrD\n bpl ]rts\n lda clrF\n bmi :engarde\n bpl :turn\n\n:engarde jmp DoEngarde\n\n:turn lda #1\n sta clrD\n lda #alertturn\n jmp jumpseq\n\n*-------------------------------\n* Char is en garde (CharSword = 2)\n\nFightCtrl\n lda CharAction\n cmp #2\n bcs ]rts ;Must be on level ground (Action = 1)\n\n* If Enemy Alert is over, put away your sword\n\n jsr getunderft\n cmp #loose\n beq :skip ;unless you're standing on loose floor\n\n lda EnemyAlert\n cmp #2\n bcc :dropgd\n\n* If opponent is behind you, turn to face him\n\n:skip jsr getopdist ;fwd distance to opponent\n cmp #swordthres\n bcc :onalert\n cmp #128\n bcc :dropgd\n cmp #-4\n bcs :onalert ;overlapping\n jmp DoTurnEng\n\n* Enemy out of range--drop your guard\n* (kid & shadman only)\n\n:dropgd lda CharID\n bne :1\n sta heroic\n beq :2\n:1 cmp #2\n bcs :onalert ;guard: remain en garde\n:2\n ldx CharPosn\n cpx #171 ;wait for ready posn\n bne ]rts\n\n lda #0\n sta CharSword\n\n lda #resheathe\n jmp jumpseq\n]rts rts\n\n*-------------------------------\n* Remain en garde\n\n:onalert\n ldx CharPosn ;prev frame #\n cpx #161 ;successful block?\n bne :nobloc\n lda clrbtn ;yes--restrike or retreat?\n bmi :bts\n lda #retreat\n jmp jumpseq\n\n* Fresh button press to strike\n\n:nobloc lda clrbtn\n bpl :10\n:bts\n lda CharID\n bne :11\n lda #gdpatience\n sta gdtimer\n\n:11 jsr DoStrike\n\n lda clrbtn\n cmp #1\n beq ]rts ;struck\n:10 ;else didn't strike\n\n* Down to lower your sword\n\n lda clrD\n bpl :nodrop\n\n ldx CharPosn\n cpx #158 ;ready\n beq :ready1\n cpx #170\n beq :ready1\n cpx #171\n bne ]rts\n:ready1\n lda #1\n sta clrD\n\n lda #0\n sta CharSword\n\n lda CharID\n beq :drop ;for kid\n cmp #1\n beq :sstand ;for shadman\n\n:alert lda #goalertstand\n jmp jumpseq ;for guard\n\n:drop lda #1\n sta offguard\n lda #graceperiod\n sta refract\n lda #0\n sta heroic\n lda #fastsheathe\n jmp jumpseq\n\n:sstand lda #resheathe\n jmp jumpseq\n\n* Fwd to advance, up to block, back to retreat\n\n:nodrop\n lda clrU\n bmi :up\n lda clrF\n bmi :fwd\n lda clrB\n bmi :back\n\n]rts rts\n\n:fwd jmp DoAdvance\n:up jmp DoBlock\n:back jmp DoRetreat\n\n*-------------------------------\nDoTurnEng\n lda #turnengarde\n jmp jumpseq\n\n*-------------------------------\nDoBlock\n ldx CharPosn\n cpx #158 ;ready\n beq :2\n cpx #170\n beq :2\n cpx #171\n beq :2\n cpx #168 ;guy-2\n beq :2\n\n cpx #165 ;adv\n beq :2\n cpx #167 ;blocked strike\n beq :3\n\n]rts rts\n\n* From ready position: Block if appropriate\n\n:2 jsr getopdist\n cmp #blockthres\n bcs :blockmiss ;too far\n\n lda #readyblock\n ldx CharID\n beq :kid\n ldx OpPosn ;enemy sees kid 1 frame ahead\n cpx #152 ;guy4\n beq :doit\n]rts rts\n\n:kid ldx OpPosn\n cpx #168 ;1 frame too early?\n beq ]rts  ;yes--wait 1 frame\n\n cpx #151 ;guy3\n beq :doit\n cpx #152 ;guy4\n beq :doit\n cpx #162 ;guy22\n beq :doit\n\n cpx #153 ;1 frame too late?\n bne :blockmiss\n  ;yes--skip 1 frame\n jsr :doit\n jmp animchar\n\n* Strike-to-block\n\n:3 lda #strikeblock\n:doit ldx #1\n stx clrU\n jmp jumpseq\n:blockmiss\n lda CharID\n bne DoRetreat ;enemy doesn't waste blocks\n lda #readyblock\n bne :doit\n\n*-------------------------------\nDoStrike\n cpx #157\n beq :1\n cpx #158\n beq :1\n cpx #170\n beq :1\n cpx #171\n beq :1 ;strike from ready posn\n cpx #165\n beq :1 ;from advance\n cpx #150\n beq :2 ;from missed block\n cpx #161\n beq :2 ;from successful block\n\n]rts rts\n\n:1 lda CharID\n bne :slo ;kid is fast, others slow\n\n lda #faststrike\n bne :dostr\n\n:slo lda #strike\n:dostr ldx #1\n stx clrbtn\n jmp jumpseq\n\n:2 lda #blocktostrike\n bne :dostr\n\n*-------------------------------\nDoRetreat\n ldx CharPosn\n cpx #158\n beq :1 ;strike from ready posn\n cpx #170\n beq :1\n cpx #171\n beq :1\n]rts rts\n\n:1 lda #retreat\n ldx #1\n stx clrB\n jmp jumpseq\n\n*-------------------------------\nDoAdvance\n ldx CharPosn\n cpx #158\n beq :1\n cpx #170\n beq :1\n cpx #171\n beq :1\n]rts rts\n\n:1 lda CharID\n bne :slo ;kid is faster\n lda #fastadvance\n bne :doit\n:slo lda #advance\n:doit ldx #1\n stx clrF\n jmp jumpseq\n\n*-------------------------------\n*\n*  S T A N D I N G\n*\n*-------------------------------\nstanding\n\n* Fresh button click: pick up object?\n\n lda clrbtn\n bpl :noclick\n lda btn\n bpl :noclick\n jsr TryPickup\n bne ]rts ;yes\n:noclick\n\n* Shadman only: down & fwd to go en garde\n\n lda CharID\n beq :kid\n lda clrD\n bpl :1\n lda clrF\n bpl :1\n jmp DoEngarde\n\n* If opponent is within range, go en garde\n* (For kid only)\n\n:kid lda gotsword\n beq :1 ;no sword\n\n lda offguard\n beq :notoffg\n lda btn ;off guard--push btn to draw sword\n bpl :btnup\n:notoffg\n lda EnemyAlert\n cmp #2\n bcc :safe\n jsr getopdist ;fwd distance to opponent\n cmp #swordthresN\n bcs :danger\n cmp #swordthres\n bcs :safe\n\n:danger ldx #1\n stx heroic\n cmp #-6\n bcs :behindyou\n\n lda OpID\n cmp #1\n bne :engarde\n lda OpAction\n cmp #3\n beq :safe\n lda OpPosn\n cmp #107\n bcc :engarde\n cmp #118\n bcc :safe ;let shadow land\n:engarde jmp DoEngarde\n\n:behindyou jmp DoTurn\n\n:safe lda #0\n sta offguard\n\n:1 lda btn\n bpl :btnup\n\n*-------------------------------\n* Standing, button down\n\n:2 lda clrB\n bmi :backB\n\n lda clrU\n bmi :up\n\n lda clrD\n bmi :down\n\n lda JSTKX\n bpl :rts\n\n lda clrF\n bmi :fwdB\n:rts\n]rts rts\n\n*-------------------------------\n* Standing, button up\n\n:btnup\n lda clrF\n bmi :fwd\n lda clrB\n bmi :back\n lda clrU\n bmi :up\n lda clrD\n bmi :down\n\n lda JSTKX\n bmi :fwd\n\n]rts rts\n\n:fwd jmp DoStartrun\n:fwdB jmp DoStepfwd\n\n:back jmp DoTurn\n:backB jmp DoTurn\n\n:fwdup jmp DoStandjump\n\n*-------------------------------\n* Standing, joystick up\n\n:up\n\n* In front of open stairs?\n\n jsr getunderft\n cmp #exit\n beq :stairs\n jsr getbehind\n cmp #exit\n beq :stairs\n jsr getinfront\n cmp #exit\n bne :nostairs\n\n:stairs lda (BlueSpec),y\n lsr\n lsr\n cmp #stairthres\n bcc :nostairs\n\n jmp Stairs\n\n* No -- normal control\n\n:nostairs\n lda JSTKX\n bmi :fwdup\n\n* Straight up...jump up & grab ledge if you can\n\n jmp DoJumpup\n\n*-------------------------------\n* Standing, joystick down\n\n:down\n lda #1\n sta clrD\n\n* If you're standing w/back to edge, down\n* means \"climb down & hang from ledge\"\n\n* If facing edge, \"down\" means \"step off\"\n\n jsr getinfront\n jsr cmpspace\n bne :notfwd ;no cliff in front of you\n\n jsr getdist\n cmp #StepOffFwd\n bcs :notfwd ;not close enough to edge\n lda #5\n jsr addcharx\n sta CharX\n jmp rereadblocks ;move fwd\n\n:notfwd jsr getbehind\n jsr cmpspace\n bne :no ;no cliff behind you\n\n jsr getdist\n cmp #StepOffBack\n bcc :no ;not close enough to edge\n\n* Climb down & hang from ledge\n\n jsr getbehind\n sta blockid\n jsr getunderft\n jsr checkledge\n beq :no\n\n ldx CharFace\n bpl :succeed\n jsr getunderft\n cmp #gate\n bne :succeed\n\n lda (BlueSpec),y\n lsr\n lsr\n cmp #gclimbthres\n bcc :no\n\n:succeed jsr getdist\n sec\n sbc #9\n\n jsr addcharx\n sta CharX\n\n lda #climbdown\n jmp jumpseq\n\n* Otherwise \"down\" means \"crouch\"\n\n:no jmp DoCrouch\n\n*-------------------------------\n* Climb stairs\n\nStairs\n lda tempblockx ;stairs block\n jsr getblockej\n clc\n adc #10\n sta CharX\n lda #-1\n sta CharFace\n\n lda #climbstairs\n jmp jumpseq\n\n]rts rts\n\n*-------------------------------\n*\n*  C R O U C H I N G\n*\n*-------------------------------\ncrouching\n\n* Fresh button click?\n\n lda clrbtn\n bpl :noclick\n\n jsr TryPickup\n bne ]rts\n\n* Still crouching?\n\n:noclick\n lda JSTKY\n cmp #1\n beq :1\n lda #standup\n jmp jumpseq\n\n:1 lda clrF\n bpl ]rts\n lda #1\n sta clrF\n lda #crawl\n jmp jumpseq\n\n*-------------------------------\n*\n*  S T A R T I N G\n*\n*  First few frames of \"startrun\"\n*\n*-------------------------------\nstarting\n lda JSTKY\n bmi :jump\n]rts rts\n\n:jump\n lda JSTKX\n bpl ]rts\n\n jmp DoStandjump\n\n*-------------------------------\n* First few frames of \"jumpup\"\n\nstjumpup\n lda JSTKX\n bmi :fwd\n lda clrF\n bmi :fwd\n]rts rts\n:fwd jmp DoStandjump\n\n*-------------------------------\n*\n* T U R N I N G\n*\n*-------------------------------\nturning\n lda btn\n bmi ]rts\n\n lda JSTKX\n bpl ]rts\n\n lda JSTKY\n bmi ]rts\n\n* Jstk still fwd--convert turn to turnrun\n\n lda #turnrun\n jmp jumpseq\n\n*-------------------------------\n*\n*  R U N N I N G\n*\n*-------------------------------\narunning\n lda JSTKX\n beq :runstop ;jstk centered...stop running\n bpl :runturn ;jstk back...turn around\n\n* Jstk is forward... keep running\n* & wait for signal to runjump or diveroll\n\n lda JSTKY\n bmi :runjump ;jstk up... take a running jump\n\n lda clrD\n bmi :diveroll ;jstk down... running dive & roll\n\n]rts rts\n\n*  Running dive & roll\n\n:diveroll lda #1\n sta clrD\n\n lda #rdiveroll\n jmp jumpseq\n\n*  Running jump\n\n:runjump\n lda clrU\n bpl ]rts\n\n jmp DoRunjump\n\n*  Stop running\n\n:runstop lda CharPosn\n cmp #7 ;run-10\n beq :rs\n cmp #11 ;run-14\n bne ]rts\n\n:rs jsr ]clr\n sta clrF\n\n lda #runstop\n jmp jumpseq\n\n*  Turn around & run the other way\n\n:runturn\n jsr ]clr\n sta clrB\n\n lda #runturn\n jmp jumpseq\n\n*-------------------------------\n*\n*  H A N G I N G\n*\n*-------------------------------\nhanging\n lda stunned\n bne :9 ;can't climb up\n\n lda JSTKY\n bmi :climbup ;jstk up-->climb up\n:9\n lda btn\n bpl :drop\n\n* If hanging on right-hand side of a panel\n* or either side of block,\n* switch to \"hangstraight\"\n\n lda CharAction\n cmp #6\n beq :cont ;already hanging straight\n\n jsr getunderft\n cmp #block\n beq :hangstrt\n\n ldx CharFace\n cpx #-1 ;left\n bne :cont\n\n cmp #panelwif\n beq :hangstrt\n cmp #panelwof\n beq :hangstrt\n\n* If ledge crumbles away, fall with it\n\n:cont\n jsr getabove\n\n jsr cmpspace ;still there?\n beq :drop ;no\n\n* just keep swinging\n\n:rts\n]rts rts\n\n:hangstrt lda #hangstraight\n jmp jumpseq\n\n*-------------------------------\n* climb up (if you can)\n\n:climbup\n jsr ]clr\n sta clrU\n sta clrbtn\n\n jsr getabove\n\n cmp #mirror\n beq :10\n cmp #slicer\n bne :1\n\n:10 ldx CharFace\n beq :fail\n bne :succeed ;can only mount mirror facing L\n\n:1 cmp #gate\n bne :2\n\n ldx CharFace\n beq :succeed\n;can only mount closed gate facing R\n lda (BlueSpec),y\n lsr\n lsr\n cmp #gclimbthres\n bcc :fail\n bcs :succeed\n\n:2\n:succeed lda #climbup\n jmp jumpseq\n\n:fail lda #climbfail\n jmp jumpseq\n\n\n*-------------------------------\n:drop\n jsr ]clr\n sta clrD ;clrD = 1, all others = 0\n\n jsr getbehind\n jsr cmpspace\n bne :hangdrop\n\n jsr getunderft\n jsr cmpspace\n beq :hangfall\n\n:hangdrop\n jsr getunderft\n cmp #block\n beq :sheer\n\n ldx CharFace\n bpl :clear\n cmp #panelwof\n beq :sheer\n cmp #panelwif\n bne :clear\n\n:sheer lda #-7\n jsr addcharx\n sta CharX\n\n:clear lda #hangdrop\n jmp jumpseq\n\n:hangfall\n lda #hangfall\n jmp jumpseq\n]rts rts\n\n*-------------------------------\n*\n*  D o  S t a r t r u n\n*\n*-------------------------------\nDoStartrun\n\n* If very close to a barrier, do a Stepfwd instead\n* (Exceptions: slicer & open gate)\n\n jsr getfwddist\n cpx #1 ;barrier?\n bne :startrun ;no\n\n cpy #slicer\n beq :startrun\n\n:solidbarr\n jsr getfwddist\n cmp #8\n bcs :startrun\n\n lda clrF\n bpl ]rts\n\n jmp DoStepfwd\n\n:startrun\n lda #startrun\n jmp jumpseq ;...start running\n\nDoTurn jsr ]clr\n sta clrB\n;if enemy is behind you, draw as you turn\n lda gotsword\n beq :1\n lda EnemyAlert\n cmp #2\n bcc :1\n jsr getopdist\n bpl :1\n jsr getdist ;to EOB\n cmp #2\n bcc :1\n\n lda #2\n sta CharSword ;en garde\n lda #0\n sta offguard\n lda #turndraw\n bne :2\n:1 lda #turn\n:2 jmp jumpseq ;...turn around\n\nDoStandjump lda #1\n sta clrU\n sta clrF\n\n lda #standjump\n jmp jumpseq ;...standing jump\n\nDoSdiveroll lda #1\n sta clrD\n\n lda #sdiveroll\n jmp jumpseq ;...standing dive & roll\n\nDoCrouch\n lda #stoop\n jsr jumpseq\n\n jsr ]clr\n sta clrD\n rts\n\nDoEngarde\n jsr ]clr\n sta clrF\n sta clrbtn\n\n lda #2\n sta CharSword ;en garde\n\n lda CharID\n beq :1\n cmp #1\n beq :3 ;shad\n lda #guardengarde\n bne :2\n:1 lda #0\n sta offguard\n:3 lda #engarde\n:2 jmp jumpseq\n\n*-------------------------------\n*\n*  D o  J u m p u p\n*\n*  & grab ledge if you can\n*\n*-------------------------------\nDoJumpup\n jsr ]clr\n sta clrU\n\n jsr getabove\n sta blockid\n\n jsr getaboveinf\n\n jsr checkledge ;Can you jump up & grab ledge?\n ;Returns 1 if you can, 0 if you can't\n bne  DoJumphang ;yes--do it\n\n jsr getabovebeh\n sta blockid\n\n jsr getabove\n\n jsr checkledge ;could you do it if you were 1 space back?\n bne :jumpback ;yes--move back & do it\n\n:jumphi jmp DoJumphigh\n\n*-------------------------------\n* Jump up & back to grab block directly overhead\n\n:jumpback\n jsr getdist ;dist to front of block\n cmp #JumpBackThres\n bcc :jumphi ;too far to fudge\n\n jsr getbehind\n jsr cmpspace ;floor behind you?\n beq DoJumpedge ;no\n\n* \"Jump back\" to block behind you & then proceed as usual\n\n jsr getdist\n sec\n sbc #14\n jsr addcharx\n sta CharX\n\n jsr rereadblocks\n\n jmp DoJumphang\n\n*-------------------------------\n* Your back is to ledge -- so do a \"jumpbackhang\"\n\nDoJumpedge\n jsr getabove\n\n* Get all the way back on this block\n\n jsr getdist\n sec\n sbc #10\n\n jsr addcharx\n sta CharX\n\n* now jump\n\n lda #jumpbackhang\n jmp jumpseq\n\n*-------------------------------\nDoJumphang\n jsr getaboveinf\n\n*  Choose the jumphang sequence (Long/Med) that\n*  will bring us closest to edge, then fudge the X-coord\n*  to make it come out exactly\n\n jsr getdist ;get distance to front of block\n sta atemp ;# pixels (0-13) returned in A\n\n cmp #4\n bcc :Med\n\n:Long lda atemp\n sec ;\"Long\" will add 4 to CharX\n sbc #4\n jsr addcharx\n sta CharX\n\n lda #jumphangLong\n jmp jumpseq\n:Med\n jsr getfwddist\n cmp #4\n bcs :okMed\n\n cpx #1 ;close to wall?\n beq :Long ;yes--step back & do Long\n\n:okMed lda atemp\n jsr addcharx\n sta CharX\n\n lda #jumphangMed\n jmp jumpseq\n\n]rts rts\n\n*-------------------------------\n*\n*  D o  R u n  J u m p\n*\n*  Calibrate jump so that foot will push off at edge.\n*\n*-------------------------------\nRJChange = 4 ;projected change in CharX\nRJLookahead = 1 ;# blocks you can look ahead\nRJLeadDist = 14 ;required leading distance in pixels\nRJMaxFujBak = 8 ;# pixels we're willing to fudge back\nRJMaxFujFwd = 2 ;and forward\n\nDoRunjump\n lda CharPosn\n cmp #7\n bcc ]rts ;must be in full run\n\n* Count # of blocks to edge\n* (Use actual CharX)\n\n lda #0\n sta bufindex ;block counter\n\n lda #RJChange\n jsr addcharx\n sta ztemp ;projected CharX\n\n jsr getblockxp\n sta blockx\n\n:loop lda blockx\n ldx CharFace\n inx\n clc\n adc plus1,x\n sta blockx\n\n tax\n ldy CharBlockY\n lda CharScrn\n jsr rdblock\n\n cmp #spikes\n beq :done\n\n jsr cmpspace\n beq :done\n\n inc bufindex\n\n lda bufindex\n cmp #RJLookahead+1\n bcc :loop\n bcs :noedge ;no edge in sight--jump anyway\n:done\n\n* Calculate # of pixels to end of floor\n\n lda ztemp\n jsr getdist1 ;# pixels to end of block\n\n ldx bufindex ;# of blocks to end of floor\n clc\n adc Mult7,x\n clc\n adc Mult7,x ;# of pixels to end of floor\n\n sec\n sbc #RJLeadDist\n;A = difference between actual dist to edge\n;and distance covered by RunJump\n cmp #-RJMaxFujBak\n bcs :ok ;move back a little & jump\n\n cmp #RJMaxFujFwd\n bcc  :ok ;move fwd a little & jump\n\n cmp #$80\n bcc ]rts ;still too far away--wait till next frame\n\n lda #-3 ;He jumped too late; he'll miss edge\n;But let's make it look good anyway\n:ok clc\n adc #RJChange\n\n jsr addcharx\n sta CharX\n\n* No edge in sight -- just do any old long jump\n\n:noedge\n jsr ]clr\n sta clrU\n\n lda #runjump\n jmp jumpseq\n\n]rts rts\n\n*-------------------------------\n*\n*  D o  S t e p  F o r w a r d\n*\n*-------------------------------\n\nDoStepfwd\n lda #1\n sta clrF\n sta clrbtn\n\n jsr getfwddist ;returns A = distance to step (0-13)\n\n cmp #0\n beq :1\n\n:2 sta CharRepeat ;non-0 value\n\n clc\n adc #stepfwd1-1\n jmp jumpseq\n\n:1 cpx #1\n beq :thru ;If barrier, step thru\n\n cmp CharRepeat\n bne :3 ;First time, test w/foot\n\n:thru lda #11\n bne :2 ;Second time, step off edge\n\n:3 sta CharRepeat ;0\n\n lda #testfoot\n jmp jumpseq\n\n*-------------------------------\n*\n*  D o  J u m p  H i g h\n*\n*-------------------------------\nDoJumphigh\n jsr ]clr\n sta clrU\n\n jsr getfwddist\n cmp #4\n bcs :ok\n cpx #1 ;barrier?\n bne :ok ;no\n\n sec\n sbc #3\n jsr addcharx\n sta CharX\n:ok\n lda #jumpupreach\n jsr facedx\n sta ztemp\n\n jsr getbasex ;assume char standing still\n clc\n adc #jumpupangle\n clc\n adc ztemp ;get X-coord at which hand touches ceiling\n\n jsr getblockx\n tax\n\n ldy CharBlockY\n dey\n\n lda CharScrn\n jsr rdblock ;read this block\n\n cmp #block\n beq :jumpup\n jsr cmpspace\n bne :jumpup\n\n lda #highjump\n jmp jumpseq ;no ceiling above\n\n:jumpup lda #jumpup\n jsr jumpseq ;touch ceiling\n]rts rts ;& don't forget to crop top\n\n*-------------------------------\n*  reread blocks\n*-------------------------------\nREREADBLOCKS\n jsr GetFrameInfo\n jmp GetBaseBlock\n\n*-------------------------------\n*\n*  Is character stepping on a pressure plate?\n*  or on loose floor?\n*\n*-------------------------------\nCHECKPRESS\n lda CharPosn\n cmp #87\n bcc :1\n cmp #100\n bcc :hanging ;87-99: jumphang22-34\n cmp #135\n bcc :1\n cmp #141\n bcc :hanging ;135-140: climb up/down\n:1\n lda CharAction\n cmp #7\n beq :ground ;turning\n cmp #5\n beq :ground ;bumped\n cmp #2\n bcs ]rts\n\n* Action code 7, 0 or 1: on the ground\n\n:ground\n lda CharPosn\n cmp #79 ;jumpup/touch ceiling\n beq :touchceil\n\n lda Fcheck\n and #fcheckmark\n beq ]rts ;foot isn't touching floor\n\n*  Standing on a pressplate?\n\n jsr getunderft\n:checkit\n cmp #upressplate\n beq :PP\n cmp #pressplate\n bne :notPP\n\n:PP lda CharLife\n bmi :push\n jmp jampp ;dead weight\n:push jmp pushpp\n\n:notPP cmp #loose\n bne ]rts\n\n lda #1\n sta alertguard\n jmp breakloose\n\n*  Hanging on a pressplate?\n\n:hanging\n jsr getabove\n jmp :checkit\n]rts rts\n\n* Jumping up to touch ceiling?\n\n:touchceil\n jsr getabove\n\n cmp #loose\n bne ]rts\n\n jmp breakloose\n\n*-------------------------------\n*\n*  C H E C K   I M P A L E\n*\n*  Impalement by running or jumping onto spikes\n*  (Impalement by landing on spikes is covered by\n*  CHECKFLOOR:falling)\n*\n*-------------------------------\nCHECKIMPALE\n ldx CharBlockX\n ldy CharBlockY\n lda CharScrn\n jsr rdblock\n cmp #spikes\n bne ]rts ;not spikes\n\n ldx CharPosn\n\n cpx #7\n bcc ]rts\n\n cpx #15\n bcs :2\n jmp :running\n\n:2 cpx #43 ;runjump-10\n beq :jumpland\n\n cpx #26 ;standjump-19\n beq :jumpland\n\n]rts rts\n\n:running\n jsr getspikes\n cmp #2\n bcc ]rts ;must be springing\n bcs :impale\n\n:jumpland\n jsr getspikes ;are spikes lethal?\n beq ]rts ;no\n\n:impale jmp DoImpale\n\n*-------------------------------\n* Impale char on spikes\n*\n* In: rdblock results\n*-------------------------------\nDOIMPALE\n jsr jamspikes\n\n ldx CharBlockY\n inx\n lda FloorY,x\n sta CharY ;align char w/floor\n\n lda tempblockx\n jsr getblockej ;edge of spikes\n clc\n adc #10\n sta CharX\n lda #8\n jsr addcharx\n sta CharX ;center char on spikes\n\n lda #0\n sta CharYVel\n\n lda #Impaled\n jsr addsound\n\n lda #100\n jsr decstr\n\n lda #impale\n jsr jumpseq\n jmp animchar\n\n*-------------------------------\n*\n*  Pick up object\n*  Return 0 if no result\n*\n*-------------------------------\nTryPickup\n jsr getunderft\n cmp #flask\n beq :2\n cmp #sword\n bne :1\n:2 jsr getbehind\n jsr cmpspace\n beq :no\n lda CharX\n lda #-14\n jsr addcharx\n sta CharX ;move char 1 block back\n jsr rereadblocks\n:1 jsr getinfront\n cmp #flask\n beq :pickup\n cmp #sword\n beq :pickup\n:no lda #0\n rts\n\n:pickup jsr PickItUp\n lda #1\n rts\n\n*-------------------------------\n*\n* Pick something up\n*\n* In: rdblock results for object block (\"infront\")\n*\n*-------------------------------\nPickItUp\n ldx CharPosn\n cpx #109 ;crouch first, then pick up obj\n beq :ok\n jsr getfwddist\n cpx #2\n beq :0 ;right at edge\n jsr addcharx\n sta CharX\n:0 lda CharFace\n bmi :1\n lda #-2\n jsr addcharx\n sta CharX ;put char within reach of obj\n:1 jmp DoCrouch\n\n:ok cmp #sword\n beq :PickupSword\n\n lda (BlueSpec),y\n lsr\n lsr\n lsr\n lsr\n lsr ;potion # (0-7)\n jsr RemoveObj\n\n lda #drinkpotion ;pick up & drink potion\n jmp jumpseq\n\n:PickupSword\n lda #-1 ;sword\n jsr RemoveObj\n\n lda #pickupsword\n jmp jumpseq ;pick up, brandish & sheathe sword\n\n*-------------------------------\n lst\n ds 1\n usr $a9,16,$00,*-org\n lst off\n"
  },
  {
    "path": "01 POP Source/Source/CTRLSUBS.S",
    "content": "* ctrlsubs\norg = $d000\n tr on\n lst off\n*-------------------------------\n*\n*  PRINCE OF PERSIA\n*  Copyright 1989 Jordan Mechner\n*\n*-------------------------------\n*\n*   Misc. subroutines relating to character control & movement\n*\n*-------------------------------\n org org\n\n jmp GETFRAME\n jmp GETSEQ\n jmp GETBASEX\n jmp GETBLOCKX\n jmp GETBLOCKXP\n\n jmp GETBLOCKY\n jmp GETBLOCKEJ\n jmp ADDCHARX\n jmp GETDIST\n jmp GETDIST1\n\n jmp GETABOVEBEH\n jmp RDBLOCK\n jmp RDBLOCK1\n jmp SETUPSWORD\n jmp GETSCRNS\n\n jmp ADDGUARDOBJ\n jmp OPJUMPSEQ\n jmp GETEDGES\n jmp INDEXCHAR\n jmp QUICKFG\n\n jmp CROPCHAR\n jmp GETLEFT\n jmp GETRIGHT\n jmp GETUP\n jmp GETDOWN\n\n jmp CMPSPACE\n jmp CMPBARR\n jmp ADDKIDOBJ\n jmp ADDSHADOBJ\n jmp ADDREFLOBJ\n\n jmp LOADKID\n jmp LOADSHAD\n jmp SAVEKID\n jmp SAVESHAD\n jmp SETUPCHAR\n\n jmp GETFRAMEINFO\n jmp INDEXBLOCK\n jmp MARKRED\n jmp MARKFRED\n jmp MARKWIPE\n\n jmp MARKMOVE\n jmp MARKFLOOR\n jmp UNINDEX\n jmp QUICKFLOOR\n jmp UNEVENFLOOR\n\n jmp MARKHALF\n jmp ADDSWORDOBJ\n jmp GETBLOCKYP\n jmp CHECKLEDGE\n jmp GET2INFRONT\n\n jmp CHECKSPIKES\n jmp RECHARGEMETER\n jmp ADDFCHARX\n jmp FACEDX\n jmp JUMPSEQ\n\n jmp GETBASEBLOCK\n jmp LOADKIDWOP\n jmp SAVEKIDWOP\n jmp GETOPDIST\n jmp LOADSHADWOP\n\n jmp SAVESHADWOP\n jmp BOOSTMETER\n jmp GETUNDERFT\n jmp GETINFRONT\n jmp GETBEHIND\n\n jmp GETABOVE\n jmp GETABOVEINF\n jmp CMPWALL\n\n*-------------------------------\n lst\n put eq\n lst\n put gameeq\n lst\n put movedata\n lst\n put seqdata\n lst\n put soundnames\n lst off\n\n*-------------------------------\n dum locals\n\ntempright ds 1\nztemp ds 2\ntempstate ds 1\n]cutdir ds 1\n\n dend\n\n*-------------------------------\n*  Misc. data\n\nplus1 db -1,1\nminus1 db 1,-1\n\nmaxmaxstr = 10 ;strength meter maximum\n\nthinner = 3\n\n*-------------------------------\n*\n*  R E A D   B L O C K\n*\n*  In:  A = screen #\n*       X = block x (0-9 onscreen)\n*       Y = block y (0-2 onscreen)\n*\n*  Out: A,X = objid\n*       Y = block # (0-29)\n*       BlueType, BlueSpec set\n*       tempscrn,tempblockx,tempblocky = onscreen block coords\n*\n*  - Offscreen block values are traced to their home screen\n*  - Screen 0 is treated as a solid mass\n*\n*-------------------------------\nRDBLOCK\n sta tempscrn\n stx tempblockx\n sty tempblocky\n\nRDBLOCK1\n jsr handler ;handle offscreen references\n\n lda tempscrn\n beq :nullscrn ;screen 0\n jsr calcblue ;returns BlueType/Spec\n\n ldy tempblocky\n lda Mult10,y\n clc\n adc tempblockx\n tay\n lda (BlueType),y\n and #idmask\n tax ;return result in X & A\n rts\n\n:nullscrn lda #block\n tax\n rts\n\n*-------------------------------\n*  Handle offscreen block references (recursive)\n\nhandler lda tempblockx\n bpl :1\n jsr offleft\n jmp handler\n\n:1 cmp #10\n bcc :2\n jsr offrt\n jmp handler\n\n:2 lda tempblocky\n bpl :3\n jsr offtop\n jmp handler\n\n:3 cmp #3\n bcc :rts\n jsr offbot\n jmp handler\n\n:rts rts\n\nofftop clc\n adc #3\n sta tempblocky\n\n lda tempscrn\n jsr GETUP\n sta tempscrn\n rts\n\noffbot sec\n sbc #3\n sta tempblocky\n\n lda tempscrn\n jsr GETDOWN\n sta tempscrn\n rts\n\noffleft clc\n adc #10\n sta tempblockx\n\n lda tempscrn\n jsr GETLEFT\n sta tempscrn\n rts\n\noffrt sec\n sbc #10\n sta tempblockx\n\n lda tempscrn\n jsr GETRIGHT\n sta tempscrn\n]rts rts\n\n*-------------------------------\n*\n*  Get adjacent screen numbers\n*\n*  In:  A = original screen #\n*  Out: A = adjacent screen #\n*\n*-------------------------------\nGETLEFT\n beq ]rts\n asl\n asl\n tax\n lda MAP-4,x\n]rts rts\n\nGETRIGHT\n beq ]rts\n asl\n asl\n tax\n lda MAP-3,x\n rts\n\nGETUP\n beq ]rts\n asl\n asl\n tax\n lda MAP-2,x\n rts\n\nGETDOWN\n beq ]rts\n asl\n asl\n tax\n lda MAP-1,x\n rts\n\n*-------------------------------\n*\n*  G E T   S C R E E N S\n*\n*  Get VisScrn's 8 surrounding screens from map\n*  (Store in scrnAbove, scrnBelow, etc.)\n*\n*-------------------------------\nGETSCRNS\n lda VisScrn\n jsr GETLEFT\n sta scrnLeft\n\n lda VisScrn\n jsr GETRIGHT\n sta scrnRight\n\n lda VisScrn\n jsr GETUP\n sta scrnAbove\n\n lda VisScrn\n jsr GETDOWN\n sta scrnBelow\n\n* and diagonals\n\n lda scrnBelow\n jsr GETLEFT\n sta scrnBelowL\n\n lda scrnBelow\n jsr GETRIGHT\n sta scrnBelowR\n\n lda scrnAbove\n jsr GETLEFT\n sta scrnAboveL\n\n lda scrnAbove\n jsr GETRIGHT\n sta scrnAboveR\n]rts rts\n\n*-------------------------------\n*\n*  G E T   B A S E   X\n*\n*  In: Char data; frame data\n*\n*  Out: A = character's base X-coord\n*\n*-------------------------------\nGETBASEX\n lda Fcheck\n and #Ffootmark\n  ;# pixels to count in from left edge of image\n eor #$ff\n clc\n adc #1 ;- Fcheck\n\n clc\n adc Fdx ;Fdx (+ = fwd, - = bkwd)\n\n jmp ADDCHARX ;Add to CharX in direction char is facing\n\n*-------------------------------\n*\n*  Add A to CharX in direction char is facing\n*\n*  In: A = # pixels to add (+ = fwd, - = bkwd)\n*      CharX = original char X-coord\n*      CharFace = direction char is facing\n*\n*  Out: A = new char X-coord\n*\n*-------------------------------\nADDCHARX\n bit CharFace ;-1 = left (normal)\n bpl :right ;0 = right (mirrored)\n\n eor #$ff\n clc\n adc #1 ;A := -A\n\n:right clc\n adc CharX\n rts\n\n*-------------------------------\n*\n* Add A to FCharX\n* (A range: -127 to 127)\n*\n* In: A; FChar data\n* Out: FCharX\n*\n*-------------------------------\nADDFCHARX\n sta ztemp\n bpl :1 ;hibit clr\n\n lda #0\n sec\n sbc ztemp\n sta ztemp ;make it posititve\n\n lda #$ff ;hibit set\n:1 eor FCharFace\n bmi :left\n\n lda ztemp\n clc\n adc FCharX\n sta FCharX\n\n lda FCharX+1\n adc #0\n sta FCharX+1\n rts\n\n:left lda FCharX\n sec\n sbc ztemp\n sta FCharX\n\n lda FCharX+1\n sbc #0\n sta FCharX+1\n rts\n\n*-------------------------------\n*\n* In: CharFace,CharBlockX,CharBlockY,CharScrn\n*\n* Out: Results of RDBLOCK for block underfoot/in front/etc.\n*\n*-------------------------------\nGETUNDERFT\n ldx CharBlockX\n ldy CharBlockY\n lda CharScrn\n jmp RDBLOCK\n\nGETINFRONT\n ldx CharFace\n inx\n lda CharBlockX\n clc\n adc plus1,x\n sta infrontx\n tax\n\n ldy CharBlockY\n lda CharScrn\n jmp RDBLOCK\n\nGET2INFRONT\n ldx CharFace\n inx\n lda CharBlockX\n clc\n adc plus1,x\n clc\n adc plus1,x\n tax\n\n ldy CharBlockY\n lda CharScrn\n jmp RDBLOCK\n\nGETBEHIND\n ldx CharFace\n inx\n lda CharBlockX\n clc\n adc minus1,x\n sta behindx\n tax\n\n ldy CharBlockY\n lda CharScrn\n jmp RDBLOCK\n\nGETABOVE\n ldy CharBlockY\n dey\n sty abovey\n\n ldx CharBlockX\n lda CharScrn\n jmp RDBLOCK\n\nGETABOVEINF\n ldx CharFace\n inx\n lda CharBlockX\n clc\n adc plus1,x\n sta infrontx\n tax\n\n ldy CharBlockY\n dey\n sty abovey\n\n lda CharScrn\n jmp RDBLOCK\n\nGETABOVEBEH\n ldx CharFace\n inx\n lda CharBlockX\n clc\n adc minus1,x\n sta behindx\n tax\n\n ldy CharBlockY\n dey\n sty abovey\n\n lda CharScrn\n jmp RDBLOCK\n\n*-------------------------------\n*\n*  G E T   D I S T A N C E\n*\n*  In: Char data\n*\n*  Out: A = # of pixels (0-13) to add to CharX to move\n*       char base X-coord to end of current block\n*\n*-------------------------------\nGETDIST\n jsr GETBASEX ;returns A = base X-coord\n\nGETDIST1\n jsr GETBLOCKXP ;returns A = block #, OFFSET = pixel #\n\n lda CharFace ;0=right, -1=left\n beq :facingright\n\n:facingleft\n lda OFFSET\n rts\n\n:facingright\n lda #13\n sec\n sbc OFFSET\n rts\n\n*-------------------------------\n*\n*  G E T   B L O C K   E D G E\n*\n*  In:  A = block # (-5 to 14)\n*  Out: A = screen X-coord of left edge\n*\n*-------------------------------\nGETBLOCKEJ\n clc\n adc #5\n tax\n lda BlockEdge,x\n rts\n\n*-------------------------------\n*\n*  G E T   B L O C K   X\n*\n*  In:  A = X-coord\n*\n*  Out: A = # of the 14-pixel-wide block within which\n*           this pixel falls (0-9 onscreen)\n*\n*       OFFSET = pixel within this block\n*\n*  - Use GETBLOCKXP for objects on center plane\n*  - Use GETBLOCKX for absolute X-coords & foreground plane\n*\n*-------------------------------\nGETBLOCKXP\n sec\n sbc #angle\n\nGETBLOCKX\n tay\n\n lda PixelTable,y\n sta OFFSET\n\n lda BlockTable,y\n rts\n\n*-------------------------------\n*\n*  G E T   B L O C K   Y\n*\n*  In: A = screen Y-coord (0-255)\n*\n*  Out: A = block y (3 = o.s.)\n*\n*  - Use GETBLOCKYP for objects on center plane\n*  - Use GETBLOCKY for absolute Y-coords & foreground plane\n*\n*-------------------------------\nGETBLOCKY\n ldx #3\n:loop cmp BlockTop+1,x\n bcs :gotY\n dex\n bpl :loop\n:gotY txa\n rts\n\n\nGETBLOCKYP\n ldx #3\n:loop cmp FloorY+1,x\n bcs :gotY\n dex\n bpl :loop\n:gotY txa\n]rts rts\n\n*-------------------------------\n*\n*  I N D E X   B L O C K\n*\n*  Index (tempblockx,tempblocky)\n*\n*  Return y = block # (0-29) and cc if block is onscreen\n*         y = 0 to 9 and cs if block is on screen above\n*         y = 30 and cs if block is o.s.\n*\n*-------------------------------\nINDEXBLOCK\n ldy tempblocky\n bmi :above\n cpy #3\n bcs :os\n\n lda tempblockx\n cmp #10\n bcs :os ;0 <= tempblockx <= 9\n\n clc\n adc Mult10,y\n\n tay ;return y = block #\n clc ;and carry clr\n rts\n\n:os ldy #30\n sec ;and carry set\n rts\n\n:above ldy tempblockx\n sec\n]rts rts\n\n*-------------------------------\n*\n*  U N I N D E X\n*\n*  In: A = block index (0-29)\n*  Out: A = blockx, X = blocky\n*\n*-------------------------------\nUNINDEX\n ldx #0\n:loop cmp #10\n bcc ]rts\n sec\n sbc #10\n inx\n bne :loop\n]rts rts\n\n*-------------------------------\n*\n*  G E T   B A S E   B L O C K\n*\n*  In: Char data\n*  Out: CharBlockX\n*\n*-------------------------------\nGETBASEBLOCK\n jsr getbasex\n jsr getblockxp\n sta CharBlockX\n]rts rts\n\n*-------------------------------\n*\n*  F A C E   D X\n*\n*  In: CharFace; A = DX\n*\n*  Out: DX if char is facing right, -DX if facing left\n*\n*-------------------------------\nFACEDX\n bit CharFace\n bmi ]rts\n\n eor #$ff\n clc\n adc #1 ;negate\n\n]rts rts\n\n*-------------------------------\n*\n*  J U M P S E Q\n*\n*  Jump to some other point in sequence table\n*\n*  In: A = sequence # (1-127)\n*\n*-------------------------------\nJUMPSEQ\n sec\n sbc #1\n asl\n tax ;x = 2(a-1)\n\n lda seqtab,x\n sta CharSeq\n\n lda seqtab+1,x\n sta CharSeq+1\n]rts rts\n\n*-------------------------------\n*\n*  Similar routine for Opponent\n*\n*-------------------------------\nOPJUMPSEQ\n sec\n sbc #1\n asl\n tax ;x = 2(a-1)\n\n lda seqtab,x\n sta OpSeq\n\n lda seqtab+1,x\n sta OpSeq+1\n]rts rts\n\n*-------------------------------\n*\n*  I N D E X   C H A R\n*\n*  In: Char data; GETEDGES results\n*\n*  Out: FCharIndex = character block index\n*\n*-------------------------------\nINDEXCHAR\n lda CharAction\n cmp #1\n bne :4\n;If CharAction = 1 (on solid ground)\n;use leftblock/bottomblock\n lda bottomblock\n sta tempblocky\n\n lda leftblock\n:1 sta tempblockx\n\n lda CharPosn\n cmp #135\n bcc :2\n cmp #149\n bcc :climbup\n\n:2 cmp #2\n beq :fall\n cmp #3\n beq :fall\n cmp #4\n beq :fall\n cmp #6\n bne :3\n:fall\n:climbup dec tempblockx  ;if falling or climbing up\n\n:3 jsr indexblock\n sty FCharIndex\n rts\n\n* else use CharBlockX/Y\n\n:4 lda CharBlockY\n sta tempblocky\n\n lda CharBlockX\n jmp :1\n\n*-------------------------------\n*\n*  S E T   U P   C H A R\n*\n*  Set up character for FRAMEADV\n*\n*  In: Char data\n*  Out: FChar data\n*\n*  Translate char data into the form \"addchar\" expects\n*  (Decode image #; get actual 280 x 192 screen coords)\n*\n*-------------------------------\nSETUPCHAR\n jsr zerocrop ;(can call cropchar later)\n\n jsr GETFRAMEINFO\n\n lda CharFace\n sta FCharFace\n\n jsr decodeim ;get FCharImage & Table from\n ;encoded Fimage & Fsword data\n lda #0\n sta FCharX+1\n\n lda Fdx\n jsr addcharx ;A := CharX + Fdx\n sec\n sbc #ScrnLeft ;different coord system\n sta FCharX\n\n asl FCharX\n rol FCharX+1\n beq :pos\n\n lda FCharX\n cmp #$f0\n bcc :pos\n lda #$ff\n sta FCharX+1\n:pos  ;X := 2X\n lda Fdy\n clc\n adc CharY\n sec\n sbc #ScrnTop\n sta FCharY\n\n lda Fcheck\n eor FCharFace ;Look only at the hibits\n bmi :ok ;They don't match-->even X-coord\n;They match-->odd X-coord\n lda FCharX\n clc\n adc #1\n sta FCharX\n bcc :ok\n inc FCharX+1\n:ok\n]rts rts\n\n*-------------------------------\n*\n*  S E T   U P   S W O R D\n*\n*  In: Char & FChar data\n*\n*  If character's sword is visible, add it to obj table\n*\n*-------------------------------\nSETUPSWORD\n lda CharID\n cmp #2\n bne :3\n lda CharLife\n bmi :2 ;live guard's sword is always visible\n\n:3 lda CharPosn\n cmp #229\n bcc :1\n cmp #238\n bcc :2 ;sheathing\n:1 lda CharSword\n beq ]rts\n:2\n lda Fsword\n and #$3f ;frame #\n beq ]rts ;no sword for this frame\n\n jsr getswordframe\n\n ldy #0\n lda (framepoint),y\n beq ]rts\n\n jsr decodeswim ;get FCharImage & Table\n\n iny\n lda (framepoint),y\n sta Fdx\n\n iny\n lda (framepoint),y\n sta Fdy\n\n lda Fdx\n jsr ADDFCHARX ;A := FCharX + Fdx\n\n lda Fdy\n clc\n adc FCharY\n sta FCharY\n\n jmp ADDSWORDOBJ\n\n*-------------------------------\n*\n*  G E T   F R A M E\n*\n*  In: A = frame # (1-192)\n*  Out: framepoint = 2-byte pointer to frame def table\n*\n*-------------------------------\nGETFRAME ;Kid uses main char set\n jsr getfindex\n lda framepoint\n clc\n adc #Fdef\n sta framepoint\n lda framepoint+1\n adc #>Fdef\n sta framepoint+1\n rts\n\n*-------------------------------\ngetaltframe1 ;Enemy uses alt set 1\n jsr getfindex\n lda framepoint\n clc\n adc #altset1\n sta framepoint\n lda framepoint+1\n adc #>altset1\n sta framepoint+1\n rts\n\n*-------------------------------\ngetaltframe2 ;Princess & Vizier use alt set 2\n jsr getfindex\n lda framepoint\n clc\n adc #altset2\n sta framepoint\n lda framepoint+1\n adc #>altset2\n sta framepoint+1\n rts\n\n*-------------------------------\ngetfindex\n sec\n sbc #1\n sta ztemp\n sta framepoint\n\n lda #0\n sta ztemp+1\n sta framepoint+1\n\n asl framepoint\n rol framepoint+1\n asl framepoint\n rol framepoint+1 ;2-byte multiply by 4\n\n lda framepoint\n clc\n adc ztemp\n sta framepoint\n\n lda framepoint+1\n adc ztemp+1\n sta framepoint+1 ;make it x5\n rts\n\n*-------------------------------\n*\n* getswordframe\n*\n* In: A = frame #\n* Out: framepoint\n*\n*-------------------------------\ngetswordframe\n sec\n sbc #1\n sta ztemp\n sta framepoint\n\n lda #0\n sta ztemp+1\n sta framepoint+1\n\n asl framepoint\n rol framepoint+1 ;x2\n\n lda framepoint\n clc\n adc ztemp\n sta framepoint\n\n lda framepoint+1\n adc ztemp+1\n sta framepoint+1 ;+1 is 3\n\n lda framepoint\n clc\n adc #swordtab\n sta framepoint\n\n lda framepoint+1\n adc #>swordtab\n sta framepoint+1\n\n rts\n\n*-------------------------------\n*\n* Decode char image\n*\n* In:  Fimage, Fsword (encoded)\n*\n* Out: FCharImage (image #, 0-127)\n*      FCharTable (table #, 0-7)\n*\n*-------------------------------\ndecodeim\n lda Fimage\n and #%10000000 ;bit 2 of table #\n sta ztemp\n\n lda Fsword\n and #%11000000 ;bits 0-1 of table #\n\n lsr\n adc ztemp\n lsr\n lsr\n lsr\n lsr\n lsr\n sta FCharTable\n\n lda Fimage\n and #$7f\n ora timebomb ;must be 0!\n sta FCharImage\n\n rts\n\n*-------------------------------\n*\n* Decode sword image\n*\n* In: A = image #\n*\n* Out: FCharImage, FCharTable\n*\n*-------------------------------\ndecodeswim\n sta FCharImage ;image #\n\n lda #2 ;chtable3\n sta FCharTable\n rts\n\n*-------------------------------\n*\n*  G E T   E D G E S\n*\n*  Get edges of character image\n*\n*  In: FChar data as set by \"setframe\"\n*\n*  Out: leftej/rightej/topej = boundaries of image (140-res)\n*       leftblock, rightblock, topblock, bottomblock\n*       CDLeftEj, CDRightEj (for coll detection)\n*       imheight, imwidth\n*\n*-------------------------------\nGETEDGES\n lda FCharImage\n ldx FCharTable\n jsr dimchar ;return A = image width, x = height\n stx imheight\n\n tax ;image width in bytes\n lda Mult7,x ;in 1/2 pixels\n clc\n adc #1 ;add 1/2 pixel\n lsr ;and divide by 2\n sta imwidth ;to get width in pixels\n\n lda FCharX+1\n lsr\n lda FCharX\n ror\n clc\n adc #ScrnLeft ;convert back to 140-res\n\n* (If facing LEFT, X-coord is leftmost pixel of LEFTMOST byte\n* of image; if facing RIGHT, leftmost pixel of RIGHTMOST byte.)\n\n ldx CharFace\n bmi :ok ;facing L\n;facing R\n sec\n sbc imwidth\n\n:ok sta leftej\n clc\n adc imwidth\n sta rightej\n\n lda FCharY\n sec\n sbc imheight\n clc\n adc #1\n\n cmp #192\n bcc :ok2\n lda #0\n\n:ok2 sta topej\n\n jsr getblocky\n\n cmp #3\n bne :1\n lda #-1 ;if o.s., call it -1\n\n:1 sta topblock\n\n lda FCharY\n jsr getblocky ;if o.s., call it 3\n sta bottomblock\n\n lda leftej\n jsr getblockx ;leftmost affected block\n sta leftblock\n\n lda rightej\n jsr getblockx ;rightmost affected block\n sta rightblock\n\n* get leading edge (for collision detection)\n\n lda #0\n sta ztemp\n\n lda Fcheck\n and #Fthinmark\n beq :nothin\n\n lda #thinner ;make character 3 bits thinner\n sta ztemp ;on both sides\n\n:nothin lda leftej\n clc\n adc ztemp\n sta CDLeftEj\n\n lda rightej\n sec\n sbc ztemp\n sta CDRightEj\n\n]rts rts\n\n*===============================\n*\n*  Q U I C K   F L O O R\n*\n*  Mark for redraw whatever floorpieces character might be\n*  impinging on\n*\n*  In: CharData; GETEDGES results\n*\n*-------------------------------\nQUICKFLOOR\n lda CharPosn\n cmp #135\n bcc :2\n cmp #149\n bcc :climbup\n\n:2 lda CharAction\n cmp #1\n bne :1\n\n lda CharPosn\n cmp #78\n bcc ]rts\n cmp #80\n bcc :fall\n]rts rts\n\n:1 cmp #2\n beq :fall\n cmp #3\n beq :fall\n cmp #4\n beq :fall\n cmp #6\n bne ]rts\n\n:fall lda #markfloor\n ldx #>markfloor\n bne :cont1\n\n:climbup\n lda #markhalf\n ldx #>markhalf\n\n* Mark floorbuf/halfbuf for up to 6 affected blocks\n* Start with rightblock, work left to leftblock\n\n:cont1\n sta marksm1+1\n sta marksm2+1\n stx marksm1+2\n stx marksm2+2\n\n lda rightblock\n:loop sta tempblockx\n\n jsr markul\n\n lda tempblockx\n cmp leftblock\n beq ]rts\n sec\n sbc #1\n bpl :loop\n\n]rts rts\n\n* mark upper & lower blocks for this blockx\n\nmarkul\n lda bottomblock\n sta tempblocky\n\n jsr indexblock ;lower block\n lda #2\nmarksm1 jsr markhalf\n\n lda topblock\n cmp bottomblock\n beq ]rts\n sta tempblocky\n\n jsr indexblock ;upper block\n lda #2\nmarksm2 jmp markhalf\n\n*-------------------------------\n*\n*  Q U I C K  F G\n*\n*  Mark for redraw any f.g. elements char (or his sword)\n*  might be impinging on\n*\n*  In: Char data; left/right/top/bottomblock\n*\n*-------------------------------\nQUICKFG\n\n* Quick fix to cover sword\n\n lda CharSword\n cmp #2\n bcc :cont\n\n lda CharFace\n bpl :faceR\n dec leftblock\n jmp :cont\n\n:faceR inc rightblock\n\n* Continue\n\n:cont lda bottomblock\n:outloop\n sta tempblocky\n\n lda rightblock\n:loop sta tempblockx\n\n jsr indexblock\n lda #3\n jsr MARKFRED\n\n lda tempblockx\n cmp leftblock\n beq :end\n sec\n sbc #1\n bpl :loop\n:end\n lda tempblocky\n cmp topblock\n beq ]rts\n sec\n sbc #1\n bpl :outloop\n rts\n\n]bug jmp showpage\n\n*-------------------------------\n*\n*  C R O P   C H A R A C T E R\n*\n*  In: FChar data as set by \"setframe\"\n*      leftej,rightej, etc. as set by \"getedges\"\n*\n*  Out: FCharCL/CR/CU/CD\n*\n*-------------------------------\nCROPCHAR\n\n* If char is climbing stairs, mask door\n\n lda CharPosn\n cmp #224\n bcc :nost\n cmp #229\n bcs :nost\n lda doortop ;set by drawexitb\n clc\n adc #2\n cmp FCharY\n bcs :bug ;temp!\n sta FCharCU\n]rts rts\n:bug ldy #$F0\n jsr showpage\n:nost\n\n* If char is under solid (a&b) floor, crop top\n\n ldx leftblock\n ldy topblock\n lda CharScrn\n jsr rdblock\n cmp #block\n beq :1\n jsr cmpspace\n beq :not\n\n* Special case (more lenient): if char is jumping\n* up to touch ceiling\n\n:1 lda CharAction\n bne :10\n lda CharPosn\n cmp #79\n beq :2\n cmp #81\n bne :10\n beq :2\n\n* Otherwise, both left & right topblocks must be solid\n\n:10 ldx rightblock\n ldy topblock\n lda CharScrn\n jsr rdblock\n cmp #block\n beq :2\n jsr cmpspace\n beq  :not\n\n:2 ldx CharBlockY\n inx\n cpx #1\n beq :ok\n\n lda BlockTop,x\n cmp FCharY\n bcs :not\n\n sec\n sbc #floorheight\n cmp topej\n bcs :not\n\n:ok lda BlockTop,x\n sta FCharCU\n sta topej\n:not\n\n* If char is standing left of a panel, crop R\n* Char is considered \"left\" if CDLeftEj falls within\n* panel block\n\n lda CDLeftEj\n jsr getblockx\n sta blockx\n\n tax\n ldy CharBlockY\n lda CharScrn\n jsr rdblock\n\n cmp #panelwof\n beq :r\n cmp #panelwif\n bne :nor\n\n* Char's foot is within panel block\n* Special case: If character is hanging R, we don't\n* need to check his head\n\n:r lda CharFace\n bmi :cont\n\n lda CharAction\n cmp #2\n beq :r2 ;yes--hanging R\n\n* Check block to right of char's head\n\n:cont\n ldx blockx\n ldy topblock\n lda CharScrn\n jsr rdblock\n\n cmp #block\n beq :r2\n cmp #panelwof\n beq :r2\n cmp #panelwif\n bne :nor\n\n* Also a panel -- make a wall\n\n:r2 lda tempblockx\n asl\n asl\n clc\n adc #4\n sta FCharCR\n rts\n\n* Is char standing to L of solid block?\n* (i.e. does CDRightEj fall within block?)\n\n:nor\n lda CDRightEj\n jsr getblockx\n sta blockx\n\n tax\n ldy CharBlockY\n lda CharScrn\n jsr rdblock\n\n cmp #block\n bne :nob\n\n* Foot is under block--what about head?\n\n ldx blockx\n ldy topblock\n lda CharScrn\n jsr rdblock\n\n cmp #block\n bne :nob\n\n* Also a panel -- make a wall\n\n:yescrop\n lda tempscrn\n cmp CharScrn\n bne :nob\n\n lda tempblockx\n asl\n asl\n sta FCharCR\n:nob\n rts\n\n*-------------------------------\n*\n*  Z E R O   C R O P\n*\n*-------------------------------\nzerocrop\n lda #0\n sta FCharCU\n sta FCharCL\n lda #40\n sta FCharCR\n lda #192\n sta FCharCD\n rts\n\n*===============================\n*\n*  C O M P A R E   S P A C E\n*\n*  Is it a space (can you pass thru)?\n*  NOTE: Solid block is considered a space (it has no floor)\n*\n*  In: A = objid\n*  Out: 0 = space, 1 = floor\n*\n*-------------------------------\nCMPSPACE\n cmp #space\n beq :space\n cmp #pillartop\n beq :space\n cmp #panelwof\n beq :space\n cmp #block\n beq :space\n cmp #archtop1\n bcs :space\n\n lda #1\n rts\n\n:space lda #0\n rts\n\n*-------------------------------\n*\n*  C O M P A R E   B A R R I E R\n*\n*  Is it a barrier?\n*\n*  Return A = 0 if clear, else A = barrier code #\n*\n*-------------------------------\nCMPBARR\n cmp #panelwif\n beq :b1\n cmp #panelwof\n beq :b1\n cmp #gate\n bne :2\n\n:b1 lda #1 ;panel/gate\n rts\n\n:2 cmp #mirror\n beq :yes3\n\n cmp #slicer\n bne :3\n\n:yes3 lda #3 ;mirror/slicer\n rts\n\n:3 cmp #block\n bne :4\n\n lda #4 ;block\n rts\n:4\n:clear lda #0\n:rts rts\n\n:barr lda #1\n]rts rts\n\n*-------------------------------\n*\n* Is it a wall? Return 0 if yes, 1 if no\n* (Solid block, or panel if you're facing L)\n*\n*-------------------------------\nCMPWALL\n cmp #block\n beq :yes\n ldx CharFace\n bpl :no\n cmp #panelwif\n beq :yes\n cmp #panelwof\n beq :yes\n:no lda #1\n rts\n:yes lda #0\n rts\n\n*-------------------------------\n*\n*  Add kid/reflection/shadowman/guard to object table\n*\n*  In: FChar data\n*\n*-------------------------------\nADDKIDOBJ\n lda #TypeKid\n jmp addcharobj\n\n*-------------------------------\nADDREFLOBJ\n lda #TypeReflect\n jmp addcharobj\n\n*-------------------------------\nADDSHADOBJ\n lda #TypeShad\n jmp addcharobj\n\n*-------------------------------\nADDGUARDOBJ\n lda #TypeGd\n jmp addcharobj\n\n*-------------------------------\n*\n* Add sword to object table\n* In: FChar data for character holding sword\n*\n*-------------------------------\nADDSWORDOBJ\n lda #TypeSword\n jmp addcharobj\n\n*-------------------------------\n*\n*  G E T   S E Q\n*\n*  Get next byte from seqtable & advance CharSeq\n*  (2-byte pointer to sequence table)\n*\n*-------------------------------\nGETSEQ\n ldy #0\n lda (CharSeq),y\n pha\n\n inc CharSeq\n bne :done\n inc CharSeq+1\n\n:done pla\n rts\n\n*-------------------------------\n*\n*  G E T   F R A M E   I N F O\n*\n*  Get frame info for char (based on CharPosn)\n*\n*-------------------------------\nGETFRAMEINFO\n lda CharPosn\n jsr GETFRAME ;set framepoint\n\n jsr usealtsets ;if appropriate\n\n ldy #0\n lda (framepoint),y\n sta Fimage\n\n iny\n lda (framepoint),y\n sta Fsword\n\n iny\n lda (framepoint),y\n sta Fdx\n\n iny\n lda (framepoint),y\n sta Fdy\n\n iny\n lda (framepoint),y\n sta Fcheck\n\n]rts rts\n\n*-------------------------------\n*\n* Use alternate character image sets\n* (if appropriate)\n*\n* In: Char data; framepoint\n* Out: framepoint\n*\n*-------------------------------\nusealtsets\n ldx CharID\n beq ]rts ;kid uses main set, enemy uses alt set 1\n cpx #24\n beq ]rts ;mouse uses main set\n cpx #5\n bcs :usealt2 ;princess & vizier use alt set 2\n\n lda CharPosn\n cpx #2\n bcc :1\n cmp #102\n bcc ]rts\n cmp #107\n bcs :1\n ;frames 102-106 (falling): substitute 172-176 altset\n clc\n adc #70\n\n:1 cmp #150\n bcc ]rts\n cmp #190\n bcs ]rts\n;frames 150-189: use altset\n sec\n sbc #149\n jmp getaltframe1\n\n:usealt2\n lda CharPosn\n jmp getaltframe2\n\n*===============================\n*\n*  M A R K\n*\n*  In: A = mark value (usually 2)\n*      Results of INDEXBLOCK:\n*      Y = block #; carry set or clear\n*\n*  Out: Preserve A, Y, carry\n*\n*-------------------------------\n]os cpy #10 ;top line from scrn above?\n bcs ]rts ;no\n sta topbuf,y\n sec ;preserve cs\n]rts rts\n\nMARKRED\n bcs ]os\n sta redbuf,y\n rts\n\nMARKFRED\n bcs ]rts\n sta fredbuf,y\n rts\n\nMARKWIPE\n bcs ]rts\n pha\n lda wipebuf,y\n beq :2\n lda height\n cmp whitebuf,y ;if wipebuf is already marked,\n bcc :1 ;use larger of 2 whitebuf values\n:2 lda height\n sta whitebuf,y\n:1 pla\n sta wipebuf,y\n clc ;return with cc\n rts\n\nMARKMOVE\n bcs ]os\n sta movebuf,y\n rts\n\nMARKFLOOR\n bcs ]os\n sta floorbuf,y\n rts\n\nMARKHALF\n bcs ]os\n sta halfbuf,y\n rts\n\n*-------------------------------\n*\n*  Z E R O   R E D\n*\n*  zero redraw buffers\n*\n*-------------------------------\nZERORED\n lda #0\n\n ldy #29\n\n:loop sta redbuf,y\n sta fredbuf,y\n sta floorbuf,y\n sta wipebuf,y\n sta movebuf,y\n sta objbuf,y\n sta halfbuf,y\n\n dey\n bpl :loop\n\n ldy #9\n:dloop sta topbuf,y\n dey\n bpl :dloop\n\n rts\n\n*-------------------------------\n*\n*  C H E C K L E D G E\n*\n*  In: blockid = block that must be clear;\n*      A = RDBLOCK results for block that must be ledge\n*\n*  Out: A = 1 if grabbable, 0 if not\n*\n*-------------------------------\nCHECKLEDGE\n sta ztemp\n\n lda (BlueSpec),y\n sta tempstate\n\n lda blockid ;must be clear\n\n cmp #block\n beq :no\n\n cmp #panelwof ;CMPSPACE considers panel w/o floor\n  bne :cont ;to be clear--\n\n bit CharFace ;but it isn't if char wants to grab\n bpl :no ;floorpiece to right\n:cont\n jsr cmpspace\n bne :no\n\n* Clear above -- is there a ledge in front?\n\n lda ztemp ;must be a solid floorpiece\n;with exposed ledge\n cmp #loose\n bne :notloose\n\n bit tempstate\n bne :no ;floor is already loose\n\n:notloose\n cmp #panelwif\n bne :cont2 ;panel w/floor can be grabbed\n;only if facing right\n bit CharFace\n bmi :no\n\n:cont2 jsr cmpspace\n beq :no\n\n:yes lda #1\n rts\n\n:no lda #0\n]rts rts\n\n*-------------------------------\n*\n*  C H E C K   S P I K E S\n*\n*  Spikes spring out when char passes over them (at any\n*  height).\n*\n*-------------------------------\nCHECKSPIKES\n lda rightej\n jsr getblockxp\n bmi ]rts\n sta tempright\n\n* for blockx = leftblock to rightblock\n\n lda leftej\n jsr getblockxp\n:loop sta blockx\n\n jsr sub\n\n lda blockx\n cmp tempright\n beq ]rts\n clc\n adc #1\n jmp :loop\n\nsub sta tempblockx\n lda CharBlockY\n sta tempblocky\n lda CharScrn\n sta tempscrn\n:loop jsr rdblock1\n\n cmp #spikes\n bne :again\n jmp trigspikes\n\n:again jsr cmpspace\n bne ]rts\n\n lda tempscrn\n beq ]rts ;null scrn\n cmp CharScrn\n bne ]rts ;wait till he's on same screen\n\n inc tempblocky\n jmp :loop ;check 1 level below\n\n*===============================\n*\n*  Load/save kid/shad vars\n*\n*-------------------------------\nnumvars = 16\n\nLOADKID\n ldx #numvars-1\n\n:loop lda Kid,x\n sta Char,x\n\n dex\n bpl :loop\n]rts rts\n\nSAVEKID\n ldx #numvars-1\n\n:loop lda Char,x\n sta Kid,x\n\n dex\n bpl :loop\n]rts rts\n\nLOADSHAD\n ldx #numvars-1\n\n:loop lda Shad,x\n sta Char,x\n\n dex\n bpl :loop\n]rts rts\n\n\nSAVESHAD\n ldx #numvars-1\n\n:loop lda Char,x\n sta Shad,x\n\n dex\n bpl :loop\n rts\n\n*  Load kid w/ opponent\n\nLOADKIDWOP\n ldx #numvars-1\n\n:loop lda Kid,x\n sta Char,x\n\n lda Shad,x\n sta Op,x\n\n dex\n bpl :loop\n rts\n\nSAVEKIDWOP\n ldx #numvars-1\n\n:loop lda Char,x\n sta Kid,x\n\n lda Op,x\n sta Shad,x\n\n dex\n bpl :loop\n rts\n\n* Load shadowman w/ opponent\n\nLOADSHADWOP\n ldx #numvars-1\n\n:loop lda Shad,x\n sta Char,x\n\n lda Kid,x\n sta Op,x\n\n dex\n bpl :loop\n rts\n\nSAVESHADWOP\n ldx #numvars-1\n\n:loop lda Char,x\n sta Shad,x\n\n lda Op,x\n sta Kid,x\n\n dex\n bpl :loop\n rts\n\n*-------------------------------\n*\n* Recharge strength meter to max\n*\n*-------------------------------\nRECHARGEMETER\n lda MaxKidStr\n sec\n sbc KidStrength\n sta ChgKidStr\n]rts rts\n\n*-------------------------------\n*\n* Boost strength meter max by 1 and recharge\n*\n*-------------------------------\nBOOSTMETER\n lda MaxKidStr\n cmp #maxmaxstr\n bcs :1\n\n clc\n adc #1\n sta MaxKidStr\n\n:1 jmp RECHARGEMETER\n\n*-------------------------------\n*\n* Get distance between char & opponent\n* (# pixels char must move fwd to reach opponent)\n* If dist is greater than 127, return 127 (+ or -)\n*\n*-------------------------------\nestwidth = 13 ;rough est of char width\n\nGETOPDIST\n lda CharScrn\n cmp OpScrn\n bne :safe\n\n* First, get A = OpX-CharX (abs. value <= 127)\n\n lda OpX\n cmp CharX\n bcc :neg\n sec\n sbc CharX\n bpl :got\n lda #127\n bpl :got\n\n:neg lda CharX\n sec\n sbc OpX\n bpl :1\n lda #127\n:1 eor #$ff\n clc\n adc #1 ;negate\n\n* If CharFace = left, negate\n\n:got ldx CharFace\n bpl :cont\n eor #$ff\n clc\n adc #1\n\n* If chars are facing in opposite directions,\n* adjust by estimate of width of figure\n\n:cont tax\n lda CharFace\n eor OpFace\n bpl :done\n txa\n cmp #127-estwidth\n bcs :done2\n clc\n adc #estwidth\n:done2 tax\n rts\n\n:safe ldx #127 ;arbitrary large dist.\n:done txa ;return value in A\n]rts rts\n\n*-------------------------------\n*\n*  Adjust CharY for uneven floor\n*\n*-------------------------------\nUNEVENFLOOR\n jsr getunderft\n cmp #dpressplate\n bne ]rts\n inc CharY\n]rts rts\n\n*-------------------------------\n lst\n ds 1\n usr $a9,19,$200,*-org\n lst off\n"
  },
  {
    "path": "01 POP Source/Source/EQ.S",
    "content": " tr on\n lst off\n* eq\n*-------------------------------\n*\n*  Equates\n*\n*-------------------------------\n*  Main l.c.\n\nrw18 = $d000\npeelbuf1 = $d000\npeelbuf2 = $d800\nhrtables = $e000\nunpack = $ea00 ;game only\nhires = $ee00\nmaster = $f880\n\n*  Auxmem\n\ngrafix = $400\ntables = $e00\nframeadv = $1290\nredbufs = $5e00\nmenudata = $960f ;ed only\nimlists = $ac00\nendimspace = $b600\nblueprnt = $b700\n\n*  Aux l.c.\n\nbluecopy = $d000 ;bank 1\n\n*-------------------------------\n*\n*  Jump tables\n*\n*-------------------------------\n dum master\n\n_firstboot ds 3\n_loadlevel ds 3\n_reload ds 3\n_loadstage2 ds 3\n ds 3\n\n_attractmode ds 3\n_cutprincess ds 3\n_savegame ds 3\n_loadgame ds 3\n_dostartgame ds 3\n\n_epilog ds 3\n_loadaltset ds 3\n ds 3 ;_screendump\n\n dum master ;ed\n\n ds 15\n\n_edreboot ds 3\n_gobuild ds 3\n_gogame ds 3\n_writedir ds 3\n_readdir ds 3\n\n_savelevel ds 3\n_savelevelg ds 3\n_screendump ds 3\n\n dum hrtables\n\nYLO ds $c0\nYHI ds $c0\n\n dum hires\n\n_boot3 ds 3\n_cls ds 3\n_lay ds 3\n_fastlay ds 3\n_layrsave ds 3\n\n_lrcls ds 3\n_fastmask ds 3\n_fastblack ds 3\n_peel ds 3\n_getwidth ds 3\n\n_copy2000 ds 3\n_copy2000aux ds 3\n_setfastaux ds 3\n_setfastmain ds 3\n_copy2000ma ds 3\n\n_copy2000am ds 3\n\n\n dum unpack\n\nSngExpand ds 3\nDblExpand ds 3\nDeltaExpPop ds 3\n_inverty ds 3\nDeltaExpWipe ds 3\n\npurple ds 3\nprompt ds 3\nblackout ds 3\nclr ds 3\ntext ds 3\n\nsetdhires ds 3\nfadein ds 3\nloadsuper ds 3\nfadeout ds 3\n\n dum grafix\n\ngr ds 3\ndrawall ds 3\ncontroller ds 3\n ds 3\nsaveblue ds 3\n\nreloadblue ds 3\nmovemem ds 3\nbuttons ds 3\ngtone ds 3\nsetcenter ds 3\n\ndimchar ds 3\ncvtx ds 3\nzeropeel ds 3\nzeropeels ds 3\npread ds 3\n\naddpeel ds 3\ncopyscrn ds 3\nsngpeel ds 3\nrnd ds 3\ncls ds 3\n\nlay ds 3\nfastlay ds 3\nlayrsave ds 3\nlrcls ds 3\nfastmask ds 3\n\nfastblack ds 3\npeel ds 3\ngetwidth ds 3\ncopy2000 ds 3\ncopy2000ma ds 3\n\nsetfastaux ds 3\nsetfastmain ds 3\nloadlevel ds 3\nattractmode ds 3\nxminit ds 3\n\nxmplay ds 3\ncutprincess ds 3\nxtitle ds 3\ncopy2000am ds 3\nreload ds 3\n\nloadstage2 ds 3\n ds 3\ngetselect ds 3\ngetdesel ds 3\nedreboot ds 3 ;ed\n\ngobuild ds 3 ;ed\ngogame ds 3 ;ed\nwritedir ds 3 ;ed\nreaddir ds 3 ;ed\nsavelevel ds 3 ;ed\n\nsavelevelg ds 3 ;ed\naddback ds 3\naddfore ds 3\naddmid ds 3\naddmidez ds 3\n\naddwipe ds 3\naddmsg ds 3\nsavegame ds 3\nloadgame ds 3\nzerolsts ds 3\n\nscreendump ds 3\nminit ds 3\nmplay ds 3\nsavebinfo ds 3\nreloadbinfo ds 3\n\ninverty ds 3\nnormspeed ds 3\naddmidezo ds 3\ncalcblue ds 3\nzerored ds 3\n\nxplaycut ds 3\ncheckIIGS ds 3\nfastspeed ds 3\nmusickeys ds 3\ndostartgame ds 3\n\nepilog ds 3\nloadaltset ds 3\nxmovemusic ds 3\nwhoop ds 3\nvblank ds 3\n\nvbli ds 3\n\n dum redbufs\n\n ds 60 ;unused\nhalfbuf ds 30\nredbuf ds 30\nfredbuf ds 30\nfloorbuf ds 30\nwipebuf ds 30\nmovebuf ds 30\nobjbuf ds 30\nwhitebuf ds 30\ntopbuf ds 10\n\n dum menudata ;ed only\n\nmenutype ds 30\nmenuspec ds 30\nmenubspec ds 30\n\n dum frameadv\n\nsure ds 3\nfast ds 3\ngetinitobj ds 3\n\n dum tables\n\nByteTable ds $100\nOffsetTable ds $100\nBlockTable ds $100\nPixelTable ds $100\nMult10 ds $10\nMult7 ds $10\nMult30 ds $40\nBlockEdge ds 20\nBlockTop ds 5\nBlockBot ds 5\nFloorY ds 5\nBlockAy ds 5\n\n dum blueprnt\n\nBLUETYPE ds 24*30\nBLUESPEC ds 24*30\nLINKLOC ds 256\nLINKMAP ds 256\nMAP ds 24*4\nINFO ds 256\n\n*-------------------------------\n*\n*  Blueprint info\n*\n*-------------------------------\n dum INFO\n\n ds 64\nKidStartScrn ds 1\nKidStartBlock ds 1\nKidStartFace ds 1\n ds 1\nSwStartScrn ds 1\nSwStartBlock ds 1\n ds 1\nGdStartBlock ds 24\nGdStartFace ds 24\nGdStartX ds 24\nGdStartSeqL ds 24\nGdStartProg ds 24\nGdStartSeqH ds 24\n\n*-------------------------------\n*\n*  Image lists\n*\n*-------------------------------\nmaxback = 200 ;x4\nmaxfore = 100 ;x4\nmaxwipe = 20 ;x5\nmaxpeel = 46 ;x4\nmaxmid = 46 ;x11\nmaxobj = 20 ;x12\nmaxmsg = 32 ;x5\n\n dum imlists\n\ngenCLS ds 1\n\nbgX ds maxback\nbgY ds maxback\nbgIMG ds maxback\nbgOP ds maxback\n\nfgX ds maxfore\nfgY ds maxfore\nfgIMG ds maxfore\nfgOP ds maxfore\n\nwipeX ds maxwipe\nwipeY ds maxwipe\nwipeH ds maxwipe\nwipeW ds maxwipe\nwipeCOL ds maxwipe\n\npeelX ds maxpeel*2\npeelY ds maxpeel*2\npeelIMGL ds maxpeel*2\npeelIMGH ds maxpeel*2\n\nmidX ds maxmid\nmidOFF ds maxmid\nmidY ds maxmid\nmidIMG ds maxmid\nmidOP ds maxmid\nmidTYP ds maxmid\nmidCU ds maxmid\nmidCD ds maxmid\nmidCL ds maxmid\nmidCR ds maxmid\nmidTAB ds maxmid\n\nobjINDX ds maxobj\nobjX ds maxobj\nobjOFF ds maxobj\nobjY ds maxobj\nobjIMG ds maxobj\nobjFACE ds maxobj\nobjTYP ds maxobj\nobjCU ds maxobj\nobjCD ds maxobj\nobjCL ds maxobj\nobjCR ds maxobj\nobjTAB ds maxobj\n\nmsgX ds maxmsg\nmsgOFF ds maxmsg\nmsgY ds maxmsg\nmsgIMG ds maxmsg\nmsgOP ds maxmsg\n\n*-------------------------------\n*\n*  Zero page\n*\n*-------------------------------\n*  $00-17: Hires parameters\n*-------------------------------\n dum $00\n\nPAGE ds 1\nXCO ds 1\nYCO ds 1\nOFFSET ds 1\nIMAGE ds 2\nOPACITY ds 1\nTABLE ds 2\nPEELBUF ds 2\nPEELIMG ds 2\nPEELXCO ds 1\nPEELYCO ds 1\nTOPCUT ds 1\nLEFTCUT ds 1\nRIGHTCUT ds 1\nBANK ds 1\nBOTCUT ds 1\n\nheight = IMAGE\nwidth = IMAGE+1\n\n*-------------------------------\n*  $18-3f: Global vars\n*-------------------------------\n dum $18\n\nJSTKX ds 1\nJSTKY ds 1\nBTN0 ds 1\nBTN1 ds 1\nBUTT0 ds 1\nBUTT1 ds 1\nJSTKUP ds 1\nb0down ds 1\nb1down ds 1\nSINGSTEP ds 1\nblackflag ds 1\nSCRNUM ds 1\nBlueType ds 2\nBlueSpec ds 2\nCUTTIMER ds 1\nPRECED ds 1\nspreced ds 1\nPREV ds 3\nsprev ds 3\nscrnLeft ds 1\nscrnRight ds 1\nscrnAbove ds 1\nscrnBelow ds 1\nscrnBelowL ds 1\nscrnAboveL ds 1\nscrnAboveR ds 1\nscrnBelowR ds 1\nkbdX ds 1\nkbdY ds 1\njoyX ds 1\njoyY ds 1\nbtn ds 1\nbutt ds 1\n\n*-------------------------------\n*\n*  Pages 2-3\n*\n*-------------------------------\n dum $200\n\ninmenu ds 1\ninbuilder ds 1\nineditor ds 1\nsoundon ds 1\njctr ds 2\njthres1x ds 1\njthres1y ds 1\njthres2x ds 1\njthres2y ds 1\njvert ds 1\njhoriz ds 1\njbtns ds 1\njoyon ds 1\ndevelment ds 1\nkeypress ds 1\nkeydown ds 1\nIIGS ds 1\n\n dum $3c0\n\nsortX ds $10\nBELOW ds $10\nSBELOW ds $10\n\n dum $3f0\n\nbluepTRK ds 1\nbluepREG ds 1\nbinfoTRK ds 1\nbinfoREG ds 1\nlevel ds 1\nBBundID ds 1\nredherring2 ds 1\npausetemp ds 1\nrecheck0 ds 1\n\n dend\n\n*-------------------------------\n*\n*  Misc. constants\n*\n*-------------------------------\nScrnWidth = 140\nScrnHeight = 192\n\nScrnLeft = 58\nScrnRight = ScrnLeft+ScrnWidth-1\nScrnTop = 0\nScrnBottom = ScrnTop+ScrnHeight-1\n\nsecmask = %11000000\nreqmask = %00100000\nidmask = %00011111\n\nand = 0\nora = 1\nsta = 2\neor = 3\nmask = 4\n\n lst off\n"
  },
  {
    "path": "01 POP Source/Source/FRAMEADV.S",
    "content": "* frameadv\nEditorDisk = 0 ;1 = dunj, 2 = palace\norg = $1290\n lst off\n tr on\n*-------------------------------\n org org\n\n jmp SURE\n jmp FAST\n jmp GETINITOBJ\n\n*-------------------------------\n lst\n put eq\n lst\n put gameeq\n lst off\n put bgdata\n lst off\n\ninitsettings\n db gmaxval,gminval\n\n dum locals\nindex ds 1\nrowno ds 1\ncolno ds 1\nyindex ds 1\nobjid ds 1\nstate ds 1\nAy ds 1\nDy ds 1\ngateposn ds 1\ngatebot ds 1\nxsave ds 1\nblockxco ds 1\nswitches ds 1\nobj1 ds 1\nobj2 ds 1\nblockthr ds 1\n dend\n\n*-------------------------------\n*\n*  Draw entire 10 x 3 screen from scratch\n*\n*-------------------------------\nSURE\n lda #1\n sta genCLS ;clear screen\n\n jsr setback ;draw on bg plane\n\n jsr getprev ;get 3 rightmost blocks of screen to left\n\n lda SCRNUM\n jsr calcblue ;get blueprint base addr\n\n*  Draw 3 rows of 10 blocks (L-R, T-B)\n\n ldy #2\n:row sty rowno ;0 = top row, 2 = bottom row\n\n lda BlockBot+1,y\n sta Dy ;get Y-coord for bottom of D-section\n sec\n sbc #3\n sta Ay ;& A-section\n\n lda Mult10,y\n sta yindex ;block # (0-29)\n\n lda PREV,y\n sta PRECED\n lda sprev,y\n sta spreced ;get objid & state of preceding block\n\n jsr getbelow ;get 10 topmost blocks of screen below\n\n lda #0\n sta colno ;0 = leftmost column, 9 = rightmost\n:loop asl\n asl\n sta XCO\n sta blockxco ;get X-coord for A-section\n\n ldy yindex\n jsr getobjid\n sta objid ;get object id# of current block\n\n jsr RedBlockSure ;Redraw entire block\n\n lda objid\n sta PRECED\n lda state\n sta spreced ;Move on to next block\n\n inc yindex\n inc colno\n\n lda colno\n cmp #10\n bcc :loop ;...until we've done 10 blocks\n\n:nextln ldy rowno\n beq :done\n dey\n jmp :row ;...and 3 rows\n\n* Now draw bottom row of screen above (D-sections only)\n\n:done ldy #2 ;bottom row of scrn above\n sty rowno\n\n lda #2\n sta Dy\n lda #-1\n sta Ay ;get screen Y-coords\n\n lda Mult10,y\n sta yindex\n\n lda #0\n sta PRECED\n\n lda scrnBelow\n pha\n lda scrnBelowL\n pha ;save current values on stack\n\n lda SCRNUM\n sta scrnBelow\n lda scrnLeft\n sta scrnBelowL ;& pretend we're on screen above\n\n* Draw 10 blocks, L-R\n\n jsr getbelow\n\n lda scrnAbove\n jsr calcblue\n\n lda #0\n sta colno\n:dloop\n asl\n asl\n sta XCO\n sta blockxco\n\n lda scrnAbove\n bne :1\n lda #floor ;If screen above is null screen,\n bne :2 ;draw a row of solid floorpieces\n\n:1 ldy yindex\n jsr getobjid1\n:2 sta objid\n\n jsr RedDSure ;Draw D-section\n\n lda objid\n sta PRECED\n lda state\n sta spreced\n\n inc yindex\n inc colno\n\n lda colno\n cmp #10\n bcc :dloop\n\n pla ;Restore original screen values\n sta scrnBelowL\n pla\n sta scrnBelow\n]rts rts\n\n*-------------------------------\n*\n*  Fast screen redraw\n*\n*  Same general structure as SURE, but redraws only those\n*  blocks specified by redraw buffers.\n*\n*-------------------------------\nFAST\n jsr getprev\n\n lda SCRNUM\n jsr calcblue\n\n lda #0\n ldy #20\n jsr metbufs3 ;If strength meter is in danger of\n sta redkidmeter ;being overwritten, mark it for redraw\n\n lda #0\n ldy #28\n jsr metbufs2\n sta redoppmeter ;opponent meter too\n\n lda #30\n sta yindex\n jsr drawobjs ;Draw o.s. characters first\n\n*  Draw 3 rows of 10 blocks (L-R, T-B)\n\n ldy #2\n:row sty rowno\n\n lda BlockBot+1,y\n sta Dy\n sec\n sbc #3\n sta Ay\n\n lda Mult10,y\n sta yindex\n\n lda PREV,y\n sta PRECED\n lda sprev,y\n sta spreced\n\n jsr getbelow\n\n lda #0\n sta colno\n\n:loop asl\n asl\n sta XCO\n sta blockxco\n\n ldy yindex\n jsr getobjid\n sta objid\n\n jsr RedBlockFast\n\n lda objid\n sta PRECED\n lda state\n sta spreced\n\n inc yindex\n inc colno\n\n lda colno\n cmp #10\n bcs :nextln\n jmp :loop\n\n:nextln ldy rowno\n beq :cont\n dey\n jmp :row\n\n* Now draw bottom row of screen above (D-sections only)\n\n:cont jsr setback\n\n ldy #2\n sty rowno\n\n lda #2\n sta Dy\n lda #-1\n sta Ay\n\n lda Mult10,y\n sta yindex\n\n lda #0\n sta PRECED\n\n lda scrnBelow\n pha\n lda scrnBelowL\n pha\n\n lda SCRNUM\n sta scrnBelow\n lda scrnLeft\n sta scrnBelowL\n\n jsr getbelow\n\n lda scrnAbove\n beq :done\n jsr calcblue\n\n lda #0\n sta colno\n:dloop\n asl\n asl\n sta blockxco\n sta XCO\n\n ldy yindex\n jsr getobjid1\n sta objid\n\n jsr RedDFast\n\n lda objid\n sta PRECED\n lda state\n sta spreced\n\n inc yindex\n inc colno\n\n lda colno\n cmp #10\n bcc :dloop\n\n:done\n pla\n sta scrnBelowL\n pla\n sta scrnBelow\n\n* Now draw comix (impact stars) & strength meters\n\n lda #$ff\n sta yindex\n jsr drawobjs ;draw comix (index = -1)\n\n do EditorDisk\n lda inbuilder\n bne ]rts\n fin\n\n jmp updatemeters\n\n*-------------------------------\n*\n*  Redraw entire block\n*\n*-------------------------------\nRedBlockSure\n jsr drawc ;C-section of piece below & to left\n jsr drawmc\n\n jsr drawb ;B-section of piece to left\n jsr drawmb\n\n jsr drawd ;D-section\n jsr drawmd\n\n jsr drawa ;A-section\n jsr drawma\n\n jmp drawfrnt ;A-section frontpiece\n;(Note: This is necessary in case we do a\n;layersave before we get to f.g. plane)\n\n*-------------------------------\n*\n* Redraw entire D-section\n*\n*-------------------------------\nRedDSure\n jsr drawc\n jsr drawmc\n jsr drawb\n jsr drawd\n jsr drawmd\n jmp drawfrnt\n\n*-------------------------------\n*\n*  Partial block redraw (as specified by redraw buffers)\n*\n*-------------------------------\nRedBlockFast\n lda wipebuf,y ;is wipebuf marked?\n beq :skipwipe ;no--skip it\n sec\n sbc #1\n sta wipebuf,y ;decrement wipebuf\n\n jsr wipesq ;& wipe this block!\n\n ldy yindex\n\n:skipwipe\n lda redbuf,y\n beq :skipred\n sec\n sbc #1\n sta redbuf,y\n\n jsr setback\n jsr RedBlockSure\n\n ldy yindex\n bpl :skipmove\n\n:skipred\n lda movebuf,y\n beq :skipmove\n sec\n sbc #1\n sta movebuf,y\n\n jsr setback\n jsr drawmc\n jsr drawmb\n jsr drawma\n\n ldy yindex\n\n:skipmove\n lda floorbuf,y\n beq :skipfloor\n sec\n sbc #1\n sta floorbuf,y\n\n jsr setmid\n jsr drawfloor\n\n ldy yindex\n bpl :skiphalf\n\n:skipfloor\n lda halfbuf,y\n beq :skiphalf\n sec\n sbc #1\n sta halfbuf,y\n\n jsr setmid\n jsr drawhalf\n\n ldy yindex\n\n:skiphalf\n lda objbuf,y\n beq :skipobj\n\n lda #0\n sta objbuf,y\n\n jsr drawobjs ;draw all objects in this block\n\n lda blockxco\n sta XCO\n\n ldy yindex\n\n:skipobj\n lda fredbuf,y\n beq :skipfred\n sec\n sbc #1\n sta fredbuf,y\n\n jsr drawfrnt\n\n ldy yindex\n\n:skipfred\n]rts rts\n\n*-------------------------------\n*\n*  Partial D-section redraw\n*\n*-------------------------------\nRedDFast\n ldy colno\n lda topbuf,y ;is topbuf marked?\n beq :skip ;no--skip it\n sec\n sbc #1\n sta topbuf,y\n\n jsr wiped\n jsr drawc\n jsr drawmc\n jsr drawb\n jsr redrawd ;(both bg and fg)\n jsr drawmd\n jsr drawfrnt\n:skip\n]rts rts\n\n*-------------------------------\n*\n*  Draw objects\n*\n*  Draw object/s with index # = yindex\n*  (Add appropriate images to mid list)\n*\n*-------------------------------\ndrawobjs\n\n* Go through obj list looking for objINDX = yindex\n\n lda objX\n beq :rts\n\n ldy #0 ;y = sort list index\n ldx #1 ;x = object list index\n\n:loop lda objINDX,x\n cmp yindex\n bne :next\n;Found a match--add object to sort list\n txa\n iny\n sta sortX,y\n\n:next inx\n cpx objX\n bcc :loop\n beq :loop\n\n cpy #0\n beq :rts\n sty sortX ;# of objects in sort list\n\n* Sort them into back-to-front order\n\n jsr sortlist\n\n* Transfer sorted objects from obj list to mid list\n\n ldx #1\n:loop2\n stx xsave\n\n lda sortX,x\n tax ;obj list index\n\n jsr drawobjx ;draw object #x\n\n ldx xsave\n inx\n cpx sortX\n bcc :loop2\n beq :loop2\n;Done\n:rts rts\n\n*-------------------------------\n*\n*  Get objids & states of 3 rightmost blocks\n*  of left-neighboring screen\n*\n*  Out: PREV/sprev [0-2]\n*\n*-------------------------------\ngetprev lda SCRNUM\n beq :null\n\n lda scrnLeft\n beq :blackscrn\n\n:cont jsr calcblue ;screen to left\n\n ldy #9\n jsr getobjid1\n sta PREV\n lda state\n sta sprev\n\n ldy #19\n jsr getobjid1\n sta PREV+1\n lda state\n sta sprev+1\n\n ldy #29\n jsr getobjid1\n sta PREV+2\n lda state\n sta sprev+2\n\n rts\n\n:null ;this scrn is null screen\n lda scrnLeft\n bne :cont\n\n:blackscrn ;screen to left is null scrn\n lda #block\n sta PREV\n sta PREV+1\n sta PREV+2\n lda #0\n sta sprev\n sta sprev+1\n sta sprev+2\n rts\n\n*-------------------------------\n*\n*  Get objids & states of 10 blocks in row below,\n*  1 block to left\n*\n*  In:  rowno\n*  Out: BELOW/SBELOW [0-9]\n*\n*  Use getbelow1 to look at screens other than scrnBelow\n*  (In: A = scrn #)\n*\n*-------------------------------\ngetbelow\n ldx rowno\n cpx #2\n bcc :onscr\n\n* Looking below bottom row\n\n lda scrnBelow\n beq :belowblack ;screen below is black\n jsr calcblue\n\n ldy #8 ;skip rmost\n:loop\n jsr getobjid\n\n sta BELOW+1,y\n lda state\n sta SBELOW+1,y\n dey\n bpl :loop\n:cont1\n lda scrnBelowL\n beq :llblack ;screen to l.l. is black\n jsr calcblue\n\n ldy #9 ;u.r. block\n jsr getobjid\n sta BELOW\n lda state\n sta SBELOW\n:done\n lda SCRNUM\n jsr calcblue ;restore SCRNUM\n rts\n\n* \"ONSCREEN\": Looking below top or middle row\n\n:onscr lda PREV+1,x\n sta BELOW\n lda sprev+1,x\n sta SBELOW\n\n lda yindex\n clc\n adc #10\n tay\n\n ldx #1\n\n:loop1 stx xsave\n jsr getobjid\n ldx xsave\n\n sta BELOW,x\n\n lda state\n sta SBELOW,x\n\n iny\n inx\n cpx #10\n bcc :loop1\n\n rts\n\n* Look below null screen\n\n:belowblack\n lda #1\n tax\n:loop2 sta BELOW,x\n inx\n cpx #10\n bcc :loop2\n bcs :cont1\n\n:llblack\n lda level\n cmp #12\n beq :2 ;sorry Lance!\n lda #block\n:1 sta BELOW\n bpl :done\n:2 lda #space\n bpl :1\n\n*-------------------------------\n*\n*  L O A D   O B J E C T\n*\n*  Load vars with object data\n*\n*  In:  x = object table index\n*       X, OFF, Y, IMG, FACE, TYP, CU, CD, CL, CR, TAB\n*\n*  Out: XCO, OFFSET, YCO, IMAGE, TABLE\n*       FCharFace, FCharCU-CD-CL-CR\n*       A = objTYP\n*\n*-------------------------------\nloadobj\n lda objX,x\n sta FCharX\n sta XCO\n\n lda objOFF,x\n sta OFFSET\n\n lda objY,x\n sta FCharY\n sta YCO\n\n lda objIMG,x\n sta IMAGE\n\n lda objTAB,x\n sta TABLE\n\n lda objFACE,x\n sta FCharFace\n\n lda objCU,x\n sta FCharCU\n lda objCD,x\n sta FCharCD\n lda objCL,x\n sta FCharCL\n lda objCR,x\n sta FCharCR\n\n lda objTYP,x\n]rts rts\n\n*-------------------------------\n*\n*  D R A W   F R O N T\n*\n*-------------------------------\ndrawfrnt\n ldx PRECED\n cpx #gate\n bne :a\n jsr DrawGateBF? ;special case\n\n:a ldx objid\n cpx #slicer\n bne :11\n jmp drawslicerf\n:11 cpx #flask\n bne :1\n lda state\n and #%11100000\n cmp #%10100000 ;5\n beq :1\n cmp #%01000000 ;2\n bcc :1\n lda #specialflask\n bne :12\n\n:1 ldx objid\n lda fronti,x\n beq ]rts\n:12 sta IMAGE\n\n lda Ay\n clc\n adc fronty,x\n sta YCO\n\n lda blockxco\n clc\n adc frontx,x\n sta XCO\n\n cpx #archtop2\n bcs :sta\n\n do EditorDisk\n lda #EditorDisk\n cmp #2\n beq :ndunj\n fin\n\n lda BGset1\n cmp #1 ;pal\n beq :ndunj\n\n cpx #posts\n beq :sta ;for dungeon bg set\n:ndunj cpx #block\n beq :block\n\n jmp maddfore\n\n* Special handling for block\n\n:block ldy state\n cpy #numblox\n bcc :2\n ldy #0\n:2 lda blockfr,y\n sta IMAGE\n\n* Pieces that go to byte boundaries can be STA'd w/o masking\n\n:sta ldx #sta\n stx OPACITY\n jmp addfore\n\n*-------------------------------\n* Draw Gate B Front?\n* (only if kid is to the left of bars)\n*-------------------------------\nDrawGateBF?\n lda rowno\n cmp KidBlockY\n bne ]rts\n\n ldx colno\n dex\n cpx KidBlockX ;is kid in gate block?\n bne ]rts\n lda scrnRight\n cmp KidScrn\n beq ]rts\n\n jmp drawgatebf ;draw gate bars over char\n\n*-------------------------------\n*\n*  D R A W   M O V A B L E   ' B '\n*\n*-------------------------------\ndrawmb\n lda PRECED\n\n cmp #gate ;check for special cases\n bne :1\n jmp drawgateb ;draw B-section of moving gate\n\n:1 cmp #spikes\n bne :2\n jmp drawspikeb\n\n:2 cmp #loose\n bne :3\n jmp drawlooseb\n\n:3 cmp #torch\n bne :4\n jmp drawtorchb\n:4\n:5 cmp #exit\n bne :6\n jmp drawexitb\n\n:6\n]rts rts\n\n*-------------------------------\n*\n*  D R A W  M O V A B L E  ' C '\n*\n*-------------------------------\ndrawmc\n lda objid ;is there a piece here?\n cmp #space\n beq :ok\n cmp #panelwof\n beq :ok\n cmp #pillartop\n beq :ok\n\n bne ]rts ;if yes, its A-section will cover up\n;the C-section of the piece below\n:ok\n ldx colno\n lda BELOW,x ;objid of piece below & to left\n\n cmp #gate\n bne ]rts\n\n ;That piece is a gate--\n jmp drawgatec ;special case (movable c)\n\n*-------------------------------\n*\n*  Draw C-section (if visible)\n*\n*-------------------------------\ndrawc\n jsr checkc\n bcc ]rts\n jsr dodrawc ;OR C-section of piece below & to left\n jmp domaskb ;Mask B-section of piece to left\n\n*-------------------------------\n*\n*  Return cs if C-section is visible, cc if hidden\n*\n*-------------------------------\ncheckc\n lda objid ;Does this space contain solid floorpiece?\n beq :vis\n cmp #pillartop\n beq :vis\n cmp #panelwof\n beq :vis\n cmp #archtop1\n bcs :vis\n bcc ]rts ;C-section is hidden\n:vis sec ;C-section is visible\n]rts rts\n\n*-------------------------------\n*\n*  Draw C-section of piece below & to left\n*\n*-------------------------------\ndodrawc\n ldx colno\n lda BELOW,x ;objid of piece below & to left\n tax\n cpx #block\n beq :block\n lda piecec,x\n beq ]rts ;piece has no c-section\n cmp #panelc0\n beq :panel ;special panel handling\n:cont sta IMAGE\n lda blockxco\n sta XCO\n lda Dy\n sta YCO\n lda #ora\n sta OPACITY\n jmp add\n\n* Special panel handling\n\n:panel ldx colno\n lda SBELOW,x\n tay\n cpy #numpans ;# of different panels\n bcs ]rts\n lda panelc,y\n bne :cont\n rts\n\n:block ldx colno\n lda SBELOW,x\n tay\n cpy #numblox\n bcc :1\n ldy #0\n:1 lda blockc,y\n bne :cont\n]rts rts\n\n*-------------------------------\n*\n*  Mask B-section of piece to left\n*\n*-------------------------------\ndomaskb\n ldx PRECED\n lda maskb,x\n beq ]rts\n sta IMAGE\n\n lda Dy\n sta YCO\n lda #and\n sta OPACITY\n jmp add\n\n*-------------------------------\n*\n*  Draw B-section of piece to left\n*\n*-------------------------------\ndrawb\n lda objid\n cmp #block\n beq ]rts ;B-section hidden by solid block\n\n ldx PRECED\n cpx #space\n beq :space\n cpx #floor\n beq :floor\n cpx #block\n beq :block\n lda pieceb,x\n beq :stripe\n cmp #panelb0\n beq :panel ;special panel handling\n\n* draw regular B-section\n\n jsr :cont1\n\n* Add stripe (palace bg set only)\n\n:stripe do EditorDisk\n lda #EditorDisk\n cmp #2\n beq :stripe\n fin\n\n lda BGset1\n cmp #1 ;pal\n bne ]rts\n\n:str1 ldx PRECED\n lda bstripe,x\n beq ]rts\n sta IMAGE\n lda Ay\n sec\n sbc #32\n jmp :cont2\n\n* Special panel handling\n\n:panel ldy spreced\n cpy #numpans\n bcs ]rts\n lda panelb,y\n bne :cont1\n]rts rts\n\n:block ldy spreced\n cpy #numblox\n bcc :1\n ldy #0\n:1 lda blockb,y\n bne :cont1\n\n:floor ldy spreced\n cpy #numbpans+1\n bcc :3\n ldy #0\n:3 lda floorb,y\n beq ]rts\n sta IMAGE\n lda floorby,y\n jmp :cont\n\n:space ldy spreced\n cpy #numbpans+1\n bcs ]rts\n lda spaceb,y\n beq ]rts\n sta IMAGE\n lda spaceby,y\n jmp :cont\n\n* Draw regular B-section\n\n:cont1 sta IMAGE\n lda pieceby,x\n:cont clc\n adc Ay\n:cont2 sta YCO\n lda blockxco\n sta XCO\n lda #ora\n sta OPACITY\n jmp add\n\n*-------------------------------\n*\n*  Draw D-section\n*\n*-------------------------------\nredrawd jsr drawd\n beq ]rts\n jmp addfore\n\ndrawd lda #sta\n sta OPACITY\n ldx objid\n cpx #block\n beq :block\n cpx #panelwof ;Do we need to mask this D-section?\n bne :cont ;no\n:mask lda #ora\n sta OPACITY\n:cont lda pieced,x\n beq ]rts\n:cont1 sta IMAGE\n lda blockxco\n sta XCO\n lda Dy\n sta YCO\n jsr add\n lda #$ff\n]rts rts\n\n* Block handling\n\n:block ldy state\n cpy #numblox\n bcc :1\n ldy #0\n:1 lda blockd,y\n bne :cont1\n\n*-------------------------------\n*\n*  D R A W   ' A '\n*\n*  (1) If piece to left has intrusive B-section (e.g., panel):\n*      MASK A-section\n*  (2) OR A-section\n*\n*-------------------------------\ndrawa\n lda PRECED\n cmp #archtop1\n beq :special\n cmp #panelwif\n beq :needmask\n cmp #panelwof\n beq :needmask\n cmp #pillartop\n beq :needmask\n cmp #block\n bne :nomask\n\n:needmask jsr addamask\n\n:nomask jmp adda\n\n:special ldx objid\n cpx #panelwof\n bne :nomask\n lda #archpanel ;arch ends to L of panel\n jmp adda1\n\n*-------------------------------\naddmidezfast\n lda #UseFastlay\n jmp addmidez\nadd\n]add jmp addback ;self-mod\n\nsetback lda #addback\n sta ]add+1\n lda #>addback\n sta ]add+2\n rts\n\nsetmid lda #addmidezfast\n sta ]add+1\n lda #>addmidezfast\n sta ]add+2\n]rts rts\n\nmaddfore ldx #mask\n stx OPACITY\n jsr addfore\n ldx #ora\n stx OPACITY\n jmp addfore\n\naddamask ldx objid\n lda maska,x\n beq ]rts\n sta IMAGE\n lda blockxco\n sta XCO\n lda Ay\n sta YCO\n lda #and\n sta OPACITY\n jmp add\n\nadda ldx objid\n jsr getpiecea\n beq ]rts ;nothing here\nadda1 sta IMAGE\n lda blockxco\n sta XCO\n lda Ay\n clc\n adc pieceay,x\n sta YCO\n lda #ora\n sta OPACITY\n jmp add\n\n*-------------------------------\n*\n*  D R A W   M O V A B L E   ' A '\n*\n*-------------------------------\ndrawma\n lda objid\n cmp #spikes\n bne :2\n jmp drawspikea\n\n:2 cmp #slicer\n bne :3\n jmp drawslicera\n\n:3 cmp #flask\n bne :4\n jmp drawflaska\n\n:4 cmp #sword\n bne :5\n jmp drawsworda\n:5\n]rts rts\n\n*-------------------------------\n*\n* D R A W   M O V A B L E  ' D '\n*\n*-------------------------------\ndrawmd\n lda objid\n cmp #loose\n bne :1\n jmp drawloosed\n\n:1\n]rts rts\n*-------------------------------\n*\n*  D R A W   F L O O R\n*\n*-------------------------------\ndrawfloor\n lda PRECED ;empty space to left?\n bne ]rts\n]drawflr\n jsr addamask\n jsr adda\n jsr drawma\n jmp drawd\n\n*-------------------------------\n*\n*  D R A W   H A L F\n*\n*  Special version of \"drawfloor\" for climbup\n*\n*-------------------------------\ndrawhalf\n lda PRECED\n bne ]rts\n\n* empty space to left -- mask & draw \"A\" section\n\n ldx objid\n cpx #floor\n beq :flr\n cpx #torch\n beq :flr\n cpx #dpressplate\n beq :flr\n cpx #exit\n beq :flr\n\n lda BGset1\n cmp #1 ;pal?\n bne ]drawflr ;if there's no halfpiece for this objid,\n;redraw full floorpiece\n cpx #posts\n beq :post\n cpx #archbot\n bne ]drawflr\n\n:post jsr :sub\n lda #CUpost\n bne :cont\n\n:flr jsr :sub\n lda #CUpiece\n:cont sta IMAGE\n lda #ora\n sta OPACITY\n jsr add\n jmp drawd\n\n:sub lda #CUmask\n sta IMAGE\n lda blockxco\n sta XCO\n lda Ay\n sta YCO\n ldx objid\n cpx #dpressplate\n bne :1\n inc YCO ;quick trick for dpressplate\n:1 lda #and\n sta OPACITY\n jmp add\n\n*-------------------------------\n*\n*  S H O R T   W I P E\n*\n*  In: Y = buffer index\n*\n*-------------------------------\nwipesq\n lda whitebuf,y\n]wipe sta height\n\n lda #4\n sta width\n\n lda blockxco\n sta XCO\n\n lda Dy\n sta YCO\n\n lda #$80\n jmp addwipe\n]rts rts\n\n*-------------------------------\n*\n* Wipe D-section\n*\n*-------------------------------\nwiped\n lda objid\n cmp #pillartop\n beq ]rts\n cmp #panelwif\n beq ]rts\n cmp #panelwof\n beq ]rts\n cmp #block\n beq ]rts\n\n lda #3\n jmp ]wipe\n\n*-------------------------------\n*  D R A W  L O O S E  F L O O R  \" D \"\n*-------------------------------\ndrawloosed\n lda state\n jsr getloosey\n\n lda loosed,y\n beq :rts\n sta IMAGE\n\n lda blockxco\n sta XCO\n lda Dy\n sta YCO\n\n lda #sta\n sta OPACITY\n\n jmp add\n]rts\n:rts rts\n\n*-------------------------------\n*  D R A W  L O O S E  F L O O R  \" B \"\n*-------------------------------\ndrawlooseb\n lda spreced\n jsr getloosey\n\n lda #looseb\n sta IMAGE\n\n lda Ay\n clc\n adc looseby,y\n sta YCO\n\n lda #ora\n sta OPACITY\n\n jmp add\n\n*-------------------------------\n*\n* Get piece \"A\"\n*\n* In: state; X = objid\n* Out: A = A-section image #\n*\n*-------------------------------\ngetpiecea\n cpx #loose\n beq :loose\n\n lda piecea,x\n]rts rts\n\n:loose lda state\n jsr getloosey\n lda loosea,y\n rts\n\n*-------------------------------\n*\n* Get loose floor index\n*\n* In: A = state\n* Out: Y = index\n*\n*-------------------------------\ngetloosey\n do EditorDisk\n ldy inbuilder\n beq :1\n ldy #1\n rts\n fin\n\n:1 tay ;state\n bpl ]rts\n and #$7f\n cmp #Ffalling+1\n bcc :ok\n lda #1\n:ok tay\n]rts rts\n\n*-------------------------------\n*  Draw spikes A\n*-------------------------------\ndrawspikea\n ldx state\n bpl :1 ;hibit clear --> frame #\n ldx #spikeExt ;hibit set --> spikes extended\n:1 lda spikea,x\n beq ]rts\n sta IMAGE\n lda blockxco\n sta XCO\n lda Ay\n sec\n sbc #1\n sta YCO\n lda #ora\n sta OPACITY\n jmp add\n\n*-------------------------------\n*  Draw spikes B\n*-------------------------------\ndrawspikeb\n ldx spreced\n bpl :1 ;hibit clear --> frame #\n ldx #spikeExt ;hibit set --> spikes extended\n:1 lda spikeb,x\n beq ]rts\n sta IMAGE\n lda blockxco\n sta XCO\n lda Ay\n sec\n sbc #1\n sta YCO\n lda #ora\n sta OPACITY\n jmp add\n\n*-------------------------------\n*  Draw torch B (flame)\n*-------------------------------\ndrawtorchb\n do EditorDisk\n lda inbuilder\n bne ]rts\n fin\n\n lda blockxco\n beq ]rts ;no flame on leftmost torch\n sta XCO\n lda Ay\n sta YCO\n ldx spreced\n jsr setupflame ;in gamebg\n jmp addback\n]rts rts\n\n*-------------------------------\n*  Draw flask A (bubbles)\n*-------------------------------\ndrawflaska\n do EditorDisk\n lda inbuilder\n bne ]rts\n fin\n\n lda blockxco\n sta XCO\n lda Ay\n sta YCO\n ldx state\n jsr setupflask\n lda #UseLay\n jmp addmidezo\n\n*-------------------------------\n*  Draw sword A\n*-------------------------------\ndrawsworda\n lda #swordgleam0\n ldx state\n cpx #1\n bne :0\n lda #swordgleam1\n:0 sta IMAGE\n lda blockxco\n sta XCO\n lda Ay\n sta YCO\n lda #sta\n sta OPACITY\n jmp add\n\n*-------------------------------\n*  Draw slicer A\n*-------------------------------\ndrawslicera\n lda state\n and #$7f\n tax\n cpx #slicerRet\n bcc :1\n ldx #slicerRet ;fully retracted\n:1 lda slicerseq,x\n tax\n dex\n stx xsave\n\n lda blockxco\n sta XCO\n lda Ay\n sta YCO\n lda state ;hibit set = smeared\n bpl :clean\n lda slicerbot2,x\n bne :3\n:clean lda slicerbot,x\n beq :2\n:3 sta IMAGE\n lda #ora\n sta OPACITY\n jsr add\n ldx xsave\n\n:2 lda slicertop,x\n beq ]rts\n sta IMAGE\n lda Ay\n sec\n sbc slicergap,x\n sta YCO\n lda #ora\n sta OPACITY\n jmp add\n\n*-------------------------------\n* Draw slicer front\n*-------------------------------\ndrawslicerf\n lda state\n and #$7f\n tax\n cpx #slicerRet\n bcc :1\n ldx #slicerRet ;fully retracted\n:1 lda slicerseq,x\n tax\n dex\n stx xsave\n\n lda blockxco\n sta XCO\n lda Ay\n sta YCO\n lda slicerfrnt,x\n beq :2\n sta IMAGE\n jmp maddfore\n:2\n]rts rts\n\n*-------------------------------\n* Draw exit \"b\" (stairs)\n*-------------------------------\ndrawexitb\n lda #stairs\n sta IMAGE\n\n lda Ay\n sec\n sbc #12\n sta YCO\n\n lda blockxco\n cmp #36\n bcs ]rts ;can't protrude off R\n clc\n adc #1\n sta XCO\n\n lda #sta\n sta OPACITY\n\n lda SCRNUM\n cmp KidStartScrn\n beq :nostairs ;assume it's an entrance\n jsr add\n:nostairs\n\n* draw door, bottom to top\n\n lda Dy\n sec\n sbc #67\n cmp #192\n bcs ]rts\n sta blockthr ;topmost usable line\n\n lda spreced\n lsr\n lsr\n sta gateposn ;gateposn := spreced/4\n\n lda Ay\n sec\n sbc #14\n sbc gateposn\n sta doortop ;for CROPCHAR\n:loop sta YCO\n\n lda #doormask\n sta IMAGE\n lda #and\n sta OPACITY\n jsr add\n\n lda #door\n sta IMAGE\n lda #ora\n sta OPACITY\n jsr add\n\n lda YCO\n sec\n sbc #4\n cmp blockthr\n bcs :loop\n\n* repair top\n\n lda Ay\n sec\n sbc #64 ;Technically part of C-section\n cmp #192 ;but who cares\n bcs ]rts\n\n sta YCO\n\n lda #toprepair\n sta IMAGE\n lda #sta\n sta OPACITY\n jmp add\n\n]rts rts\n\n*-------------------------------\n*  D R A W   G A T E   \" C \"\n*-------------------------------\ndrawgatec\n lda Dy\n sta YCO\n lda #gatecmask\n sta IMAGE\n lda #and\n sta OPACITY\n jsr add ;mask out triangular area\n\n ldx colno\n lda SBELOW,x ;gate state\n cmp #gmaxval\n bcc :1\n lda #gmaxval\n:1 lsr\n lsr\n sta gateposn\n and #$f8\n eor #$ff\n clc\n adc #1\n clc\n adc gateposn\n tay ;Y:= (state/4) mod 8\n lda gate8c,y\n sta IMAGE\n\n lda #ora\n sta OPACITY\n jmp add\n\n*-------------------------------\n*\n*  D R A W   G A T E   \" B \"\n*\n*  Lay down (STA) the gate in sections, bottom\n*  to top.  The bottom piece has two blank lines that\n*  erase its trail as the gate rises.\n*  Topmost section has 8 separate shapes, 1-8 pixels high.\n*\n*-------------------------------\nsetupdgb\n lda Dy\n sec\n sbc #62\n sta blockthr ;topmost line of B-section\n\n lda spreced\n cmp #gmaxval\n bcc :1\n lda #gmaxval\n:1 lsr\n lsr\n clc\n adc #1\n sta gateposn ;gateposn:= state/4 + 1\n;(gatebottom height off floor)\n lda Ay\n sec\n sbc gateposn\n sta gatebot ;gatebottom YCO\n]rts rts\n\n*-------------------------------\ndrawgatebf\n jsr setupdgb\n\n* Gate bottom\n\n lda #ora\n sta OPACITY\n\n lda gatebot\n sec\n sbc #2\n sta YCO ;no 2 blank lines at bottom\n\n lda #gatebotORA\n sta IMAGE\n\n jsr addfore\n\n* Middle pieces\n\n:cont\n lda #gateB1\n sta IMAGE\n\n lda gatebot\n sec\n sbc #12\n\n:loop sta YCO\n cmp #192\n bcs ]rts\n\n sec\n sbc #7 ;grill mid piece is 8 lines high--\n bcc :done ;will it stick up out of block area?\n cmp blockthr\n bcc :done\n;no, we're still safe--keep going\n jsr addfore\n\n lda YCO\n sec\n sbc #8\n bne :loop\n:done\n ;Skip top piece to save a little time\n]rts rts\n\n*-------------------------------\ndrawgateb\n jsr setupdgb\n\n*  First, draw bottom piece\n\n clc\n adc #12\n cmp Ay ;over floor/wall boundary?\n bcc :storit\n\n* Bottom piece is partly below floor line -- STA won't work.\n* We need to redraw b.g., then OR gate bottom on top.\n\n:orit\n jsr restorebot\n\n lda gatebot\n sec\n sbc #2\n sta YCO ;no 2 blank lines at bottom\n\n lda #gatebotORA\n sta IMAGE\n\n lda #ora\n sta OPACITY\n\n jsr addback\n\n jmp :cont\n\n*  Gate is above floor line -- STA it\n\n:storit lda gatebot\n sta YCO\n\n lda #gatebotSTA\n sta IMAGE\n\n lda #sta\n sta OPACITY\n\n jsr addback\n\n*  Next, draw as many middle pieces as we need to make\n*  up rest of grill\n\n:cont\n lda #sta\n sta OPACITY\n\n lda #gateB1\n sta IMAGE\n\n lda gatebot\n sec\n sbc #12\n\n:loop sta YCO\n cmp #192\n bcs :rts\n\n sec\n sbc #7 ;grill mid piece is 8 lines high--\n bcc :done ;will it stick up out of block area?\n cmp blockthr\n bcc :done\n;no, we're still safe--keep going\n jsr addback\n\n lda YCO\n sec\n sbc #8\n bne :loop\n\n* now add final piece at top\n\n:done lda YCO\n sec\n sbc blockthr\n clc\n adc #1 ;desired height (0-8 pixels)\n\n beq :rts\n cmp #9\n bcs :rts\n\n tay\n lda gate8b-1,y\n sta IMAGE\n\n jsr addback\n\n:rts rts\n\n*-------------------------------\nrestorebot\n ldx #gate\n lda pieceb,x\n sta IMAGE\n lda pieceby,x\n clc\n adc Ay\n sta YCO\n lda blockxco\n sta XCO\n lda #sta\n sta OPACITY\n jsr add\n\n jsr checkc\n bcc :1\n jsr dodrawc\n:1 jmp drawa\n\n*-------------------------------\n*\n*  Draw object #x\n*  (Add appropriate images to mid table)\n*\n*  In: x = object table index\n*\n*-------------------------------\ndrawobjx\n jsr loadobj ;Load vars with object data\n;A = object type\n cmp #TypeKid\n beq :kid\n cmp #TypeReflect\n bne :1\n:kid jmp DrawKid\n\n:1 cmp #TypeShad\n bne :2\n jmp DrawShad\n\n:2 cmp #TypeFF\n bne :3\n jmp DrawFF\n\n:3 cmp #TypeSword\n beq :5\n cmp #TypeComix\n bne :4\n:5 jmp DrawSword\n\n:4 cmp #TypeGd\n bne :6\n jmp DrawGuard\n:6\n]rts rts\n\n*-------------------------------\n* Draw Falling Floor\n*-------------------------------\nDrawFF\n lda #-1 ;normal\n sta FCharFace\n\n lda IMAGE ;mobframe #\n sta FCharImage ;use as temp store\n\n* A-section\n\n lda FCharY\n sec\n sbc #3\n sta YCO\n ldx #floor\n lda maska,x\n sta IMAGE\n lda #and\n sta OPACITY\n lda #UseLayrsave\n jsr addmid\n\n ldx FCharImage\n lda loosea,x\n sta IMAGE\n lda #ora\n sta OPACITY\n lda #UseLay\n jsr addmid\n\n* D-section\n\n ldx FCharImage\n lda loosed,x\n sta IMAGE\n lda FCharY\n sta YCO\n lda #sta\n sta OPACITY\n lda #UseLayrsave\n jsr addmid\n\n* B-section\n\n lda FCharX\n clc\n adc #4\n sta XCO\n\n lda FCharY\n sec\n sbc #4\n sta YCO\n\n lda #looseb\n sta IMAGE\n lda #ora\n sta OPACITY\n lda #UseLayrsave\n jmp addmid\n\n*-------------------------------\n*\n*  Get objid & state\n*\n*  In: BlueType/Spec,Y\n*\n*  Out: A = objid\n*       state = state\n*\n*  Preserves X & Y\n*\n*-------------------------------\ngetobjid\n lda SCRNUM\n beq GOnull ;null scrn has no blueprint\n\n* Use getobjid1 for screen #s other than SCRNUM\n\ngetobjid1\n do EditorDisk\n lda inbuilder\n bne getobjbldr\n fin\n\n lda (BlueSpec),y\n sta state\n\n lda (BlueType),y\n and #idmask\n\n cmp #pressplate\n beq :plate\n\n cmp #upressplate\n beq :upp\n\n rts\n\n* Handle depressed pressplate\n\n:plate lda state ;LINKLOC index\n tax\n lda LINKMAP,x\n\n and #%00011111 ;bits 0-4\n cmp #2\n bcc :up\n\n lda #dpressplate ;plate depressed\n rts\n\n:up lda #pressplate ;plate up\n rts\n\n* Handle depressed upressplate\n\n:upp lda state\n tax\n lda LINKMAP,x\n and #%00011111\n cmp #2\n bcc :up1\n\n lda #0\n sta state\n lda #floor ;depressed upp looks just like floor\n rts\n\n:up1 lda #upressplate\n rts\n\n* Null screen is black\n\nGOnull\n do EditorDisk\n lda inmenu\n bne getobjbldr\n fin\n\n lda #space\n rts\n\n*-------------------------------\n*\n* In builder: BlueSpec contains initial gadget settings\n*\n*-------------------------------\n do EditorDisk\ngetobjbldr\n lda (BlueType),y\n and #idmask\n pha\n jsr getinitobj1\n bcs :ok\n lda (BlueSpec),y\n:ok sta state\n pla\n rts\n fin\n\n*-------------------------------\n*\n*  Sort objects in sort list into back-to-front order\n*  (Foremost object should be at bottom of list)\n*\n*-------------------------------\nsortlist\n\n:newpass\n lda #0\n sta switches ;no switches yet this pass\n\n ldx sortX ;start at bottom of list\n\n:loop cpx #1 ;at top of list?\n beq :attop ;yes--pass complated\n\n stx xsave\n\n jsr compare ;Is obj[X] in front of obj[X-1]?\n\n ldx xsave\n\n bcc :ok ;Yes--continue\n;No--switch objects\n lda sortX,x\n pha\n lda sortX-1,x\n sta sortX,x\n pla\n sta sortX-1,x ;switch [X] with [X-1]\n\n:ok dex\n bne :loop ;move up in list\n\n* At top of list--pass completed\n\n:attop\n lda switches ;Any switches this pass?\n bne :newpass ;Yes--do it again\n\n* No switches made--objects are in order\n\n:rts rts\n\n*-------------------------------\n*\n*  Compare object [xsave] with object [xsave-1]\n*\n*  If X is IN FRONT OF X-1, or if it doesn't matter, return cc;\n*  If X is BEHIND X-1, return cs (switch 'em).\n*\n*-------------------------------\ncompare\n lda sortX,x\n sta obj1 ;obj index [X]\n lda sortX-1,x\n sta obj2 ;obj index [X-1]\n\n ldx obj1\n ldy obj2\n\n lda objTYP,x\n cmp #TypeShad\n beq :xinfront ;enemy is always in front\n\n lda objY,x\n cmp objY,y\n beq :same\n bcc :xinfront\n bcs :yinfront\n\n:same\n:xinfront clc\n rts\n\n:yinfront sec\n rts\n\n*-------------------------------\n*\n*  Get initial state of object\n*\n*  In: BlueType, BlueSpec, Y\n*\n*  Return cs if it matters, else cc\n*\n*-------------------------------\nGETINITOBJ\n lda (BlueType),y\n and #idmask ;get objid\n\ngetinitobj1\n cmp #gate\n beq :okgate\n cmp #loose\n beq :okloose\n cmp #flask\n beq :okflask\n bne :skip ;if it isn't a gadget, leave it alone\n\n:okgate lda (BlueSpec),y ;1=gate up, 2=gate down, etc.\n tax\n lda initsettings-1,x\n sec\n rts\n\n:okloose lda #0 ;loose floor\n rts\n\n:okflask lda (BlueSpec),y\n asl\n asl\n asl\n asl\n asl ;5x\n sec\n rts\n\n:skip clc\n]rts rts\n\n*-------------------------------\nmetbufs3 jsr mbsub\n iny\nmetbufs2 jsr mbsub\n iny\nmbsub ora redbuf,y\n ora floorbuf,y\n ora halfbuf,y\n ora fredbuf,y\n ora wipebuf,y\n rts\n\n*-------------------------------\n lst\n ds 1\n usr $a9,3,$490,*-org\n lst off\n"
  },
  {
    "path": "01 POP Source/Source/FRAMEDEF.S",
    "content": "* framedef\nbof = $2800\n tr on ;TABS 15,20,40\n lst off\n lstdo off\n\n*-------------------------------\n dum bof\n\norg ds 1200\naltset1 ds 200\naltset2 ds 450\nswordtab ds 192\n\n dend\n\n*-------------------------------\n org org\nFdef\n\n*  Fimage, Fsword, Fdx, Fdy, Fcheck\n\n:1 db $01,0,1,0,$c0+4 ;run-4\n:2 db $02,0,1,0,$40+4 ;run-5\n:3 db $03,0,3,0,$40+7 ;run-6\n:4 db $04,0,4,0,$40+8 ;run-7\n:5 db $05,0,0,0,$c0+$20+6 ;run-8\n:6 db $06,0,0,0,$40+9 ;run-9\n:7 db $07,0,0,0,$40+10 ;run-10\n:8 db $08,0,0,0,$c0+5 ;run-11\n:9 db $09,0,0,0,$40+4 ;run-12\n:10 db $0a,0,0,0,$40+7 ;run-13\n:11 db $0b,0,0,0,$40+11 ;run-14\n:12 db $0c,0,0,0,$40+3 ;run-15\n:13 db $0d,0,0,0,$c0+3 ;run-16\n:14 db $0e,0,0,0,$40+7 ;run-17\n:15 db $0f,9,0,0,$40+3 ;stand\n:16 db $10,0,0,0,$c0+3 ;standjump-9\n:17 db $11,0,0,0,$40+4 ;standjump-10\n:18 db $12,0,0,0,$40+6 ;standjump-11\n:19 db $13,0,0,0,$40+8 ;standjump-12\n:20 db $14,0,0,0,$80+9 ;standjump-13\n:21 db $15,0,0,0,$00+11 ;standjump-14\n:22 db $16,0,0,0,$80+11 ;standjump-15\n:23 db $17,0,0,0,$00+17 ;standjump-16\n:24 db $18,0,0,0,$00+7 ;standjump-17\n:25 db $19,0,0,0,$00+5 ;standjump-18\n:26 db $1a,0,0,0,$c0+1 ;standjump-19\n:27 db $1b,0,0,0,$c0+6 ;standjump-20\n:28 db $1c,0,0,0,$40+3 ;standjump-21\n:29 db $1d,0,0,0,$40+8 ;standjump-22\n:30 db $1e,0,0,0,$40+2 ;standjump-23\n:31 db $1f,0,0,0,$40+2 ;standjump-24\n:32 db $20,0,0,0,$c0+2 ;standjump-25\n:33 db $21,0,0,0,$c0+2 ;standjump-26\n:34 db $22,0,0,0,$40+3 ;runjump-1\n:35 db $23,0,0,0,$40+8 ;runjump-2\n:36 db $24,0,0,0,$c0+14 ;runjump-3\n:37 db $25,0,0,0,$c0+1 ;runjump-4\n:38 db $26,0,0,0,$40+5 ;runjump-5\n:39 db $27,0,0,0,$80+14 ;runjump-6\n:40 db $28,0,0,0,$00+11 ;runjump-7\n:41 db $29,0,0,0,$80+11 ;runjump-8\n:42 db $2a,0,0,0,$80+10 ;runjump-9\n:43 db $2b,0,0,0,$00+1 ;runjump-10\n:44 db $2c,0,0,0,$c0+4 ;runjump-11\n:45 db $2d,0,0,0,$c0+3 ;turn-2\n:46 db $2e,0,0,0,$c0+3 ;turn-3\n:47 db $2f,0,0,0,$80+$20+5 ;turn-4\n:48 db $30,0,0,0,$80+$20+4 ;turn-5\n:49 db $31,0,0,0,$40+$20+6 ;turn-6\n:50 db $32,0,4,0,$40+$20+7 ;turn-7\n:51 db $33,0,3,0,$40+$20+6 ;turn-8\n:52 db $34,0,1,0,$40+4 ;turn-10\n:53 db $01,$40,0,0,$c0+2 ;runturn-8\n:54 db $02,$40,0,0,$40+1 ;runturn-9\n:55 db $03,$40,0,0,$40+2 ;runturn-10\n:56 db $04,$40,0,0,$00 ;runturn-11\n:57 db $05,$40,0,0,$00 ;runturn-12\n:58 db $06,$40,0,0,$80 ;runturn-13\n:59 db $07,$40,0,0,$00 ;runturn-14\n:60 db $08,$40,0,0,$80 ;runturn-15\n:61 db $09,$40,0,0,$00 ;runturn-16\n:62 db $0a,$40,0,0,$80 ;runturn-17\n:63 db $0b,$40,0,0,$00 ;runturn-18\n:64 db $0c,$40,0,0,$00 ;runturn-19\n:65 db $0d,$40,0,0,$80 ;runturn-20\n:66 db 0,0,0,0,0\n:67 db $11,$40,-2,0,$40+1 ;jumphang-2\n:68 db $12,$40,-2,0,$40+1 ;jumphang-3\n:69 db $13,$40,-1,0,$c0+2 ;jumphang-4\n:70 db $14,$40,-2,0,$40+2 ;jumphang-5\n:71 db $15,$40,-2,0,$40+1 ;jumphang-6\n:72 db $16,$40,-2,0,$40+1 ;jumphang-7\n:73 db $17,$40,-2,0,$40+1 ;jumphang-8\n:74 db $18,$40,-1,0,$00+7 ;jumphang-9\n:75 db $19,$40,-1,0,$00+5 ;jumphang-10\n:76 db $1a,$40,2,0,$00+7 ;jumphang-11\n:77 db $1b,$40,2,0,$00+7 ;jumphang-12\n:78 db $1c,$40,2,-3,$00 ;jumphang-13\n:79 db $1d,$40,2,-10,$00 ;jumphang-14\n:80 db $1e,$40,2,-11,$80 ;jumphang-15\n:81 db $1f,$40,3,-2,$40+3 ;hangdrop-4\n:82 db $20,$40,3,0,$c0+3 ;hangdrop-5\n:83 db $21,$40,3,0,$c0+3 ;hangdrop-6\n:84 db $22,$40,3,0,$40+$20+3 ;hangdrop-7\n:85 db $23,$40,4,0,$c0+$20+3 ;hangdrop-8\n:86 db $1d,0,0,0,$00  ;test w/foot\n:87 db $25,$40,7,-14,$80 ;jumphang-22\n:88 db $26,$40,7,-12,$80 ;jumphang-23\n:89 db $27,$40,4,-12,$00 ;jumphang-24\n:90 db $28,$40,3,-10,$80 ;jumphang-25\n:91 db $29,$40,2,-10,$80 ;jumphang-26\n:92 db $2a,$40,1,-10,$80 ;jumphang-27\n:93 db $2b,$40,0,-11,$00 ;jumphang-28\n:94 db $2c,$40,-1,-12,$00 ;jumphang-29\n:95 db $2d,$40,-1,-14,$00 ;jumphang-30\n:96 db $2e,$40,-1,-14,$00 ;jumphang-31\n:97 db $2f,$40,-1,-15,$80 ;jumphang-32\n:98 db $30,$40,-1,-15,$80 ;jumphang-33\n:99 db $31,$40,0,-15,$00 ;jumphang-34\n:100 db 0,0,0,0,0\n:101 db 0,0,0,0,0\n:102 db $32,$40,0,0,$c0+6 ;jumpfall-2\n:103 db $33,$40,0,0,$40+6 ;jumpfall-3\n:104 db $34,$40,0,0,$c0+5 ;jumpfall-4\n:105 db $35,$40,0,0,$40+5 ;jumpfall-5\n:106 db $36,$40,0,0,$c0+2 ;jumpfall-6\n:107 db $37,$40,0,0,$c0+4 ;jumpfall-7\n:108 db $38,$40,0,0,$c0+5 ;jumpfall-8\n:109 db $39,$40,0,0,$40+6 ;jumpfall-9\n:110 db $3a,$40,0,0,$40+7 ;jumpfall-10\n:111 db $3b,$40,0,0,$40+7 ;jumpfall-11\n:112 db $3c,$40,0,0,$40+9 ;jumpfall-12\n:113 db $3d,$40,0,0,$c0+8 ;jumpfall-13\n:114 db $3e,$40,0,0,$c0+9 ;jumpfall-14\n:115 db $3f,$40,0,0,$40+9 ;jumpfall-15\n:116 db $40,$40,0,0,$40+5 ;jumpfall-16\n:117 db $41,$40,2,0,$40+5 ;jumpfall-17\n:118 db $42,$40,2,0,$c0+5 ;jumpfall-18\n:119 db $43,$40,0,0,$c0+3 ;jumpfall-19\n:120 db 0,0,0,0,0\n:121 db $01,$80,0,0,$40+3 ;stepfwd-1\n:122 db $02,$80,0,0,$c0+4 ;stepfwd-2\n:123 db $03,$80,0,0,$c0+5 ;stepfwd-3\n:124 db $04,$80,0,0,$40+8 ;stepfwd-4\n:125 db $05,$80,0,0,$40+$20+12 ;stepfwd-5\n:126 db $06,$80,0,0,$c0+$20+15 ;stepfwd-6\n:127 db $07,$80,0,0,$40+$20+3 ;stepfwd-7\n:128 db $08,$80,0,0,$c0+3 ;stepfwd-8\n:129 db $09,$80,0,0,$40+3 ;stepfwd-9\n:130 db $0a,$80,0,0,$40+3 ;stepfwd-10\n:131 db $0b,$80,0,0,$40+4 ;stepfwd-11\n:132 db $0c,$80,0,0,$40+4 ;stepfwd-12\n:133 db $3e,$80,00,1,$c0+1 ;sheathe34\n:134 db $3f,$80,00,1,$c0+7 ;sheathe37\n:135 db $0d,$80,-5+5,51-63,$00+1 ;climbup-int1\n:136 db $0e,$80,-5+5,42-63,$00 ;climbup-int2\n:137 db $0f,$80,-4+5,37-63,$80 ;climbup-8\n:138 db $10,$80,-1+5,31-63,$80 ;climbup-10\n:139 db $11,$80,1+5,27-63,$80+1 ;climbup-14\n:140 db $12,$80,2+5,22-63,$80+2 ;climbup-16\n:141 db $13,$80,2,17,$40+2 ;climbup-22\n:142 db $14,$80,4,9,$c0+4 ;climbup-28\n:143 db $15,$80,4,5,$c0+9 ;climbup-30\n:144 db $16,$80,4,4,$c0+8 ;climbup-32\n:145 db $17,$80,5,0,$40+$20+9 ;climbup-34\n:146 db $18,$80,5,0,$c0+$20+9 ;climbup-35\n:147 db $19,$80,5,0,$c0+$20+8 ;climbup-36\n:148 db $1a,$80,5,0,$40+$20+9 ;climbup-37\n:149 db $1b,$80,5,0,$40+$20+9 ;climbup-38\n:150 db $8b,16,0,2,$80 ;missed block\n:151 db $81,26,0,2,$80\n:152 db $82,18,3,2,$00 ;guy4/rob20\n:153 db $83,22,7,2,$c0+4\n:154 db $84,21,10,2,$00 ;full ext.\n:155 db $85,23,7,2,$80 ;guy-7\n:156 db $86,25,4,2,$80 ;guy-8\n:157 db $87,24,0,2,$c0+14 ;guy-9\n:158 db $88,15,0,2,$c0+13 ;guy10/rob15 (ready)\n:159 db $89,20,3,2,$00 ;guy19/rob22\n:160 db $8a,31,3,2,$00 ;guy20/rob23\n:161 db $8b,16,0,2,$80 ;guy21/rob18 (blocking)\n:162 db $8c,17,0,2,$80 ;guy22/rob19 (block-to-strike)\n:163 db $8d,32,0,2,$00 ;guy-31 (advance)\n:164 db $8e,33,0,2,$80 ;guy-32\n:165 db $8f,34,2,2,$c0+3 ;guy-33\n:166 db $0f,0,0,0,$40+3 ;stand\n:167 db $91,19,7,2,$80 ;guy18/rob21 (blocked)\n:168 db $92,14,1,2,$80 ;pre-strike\n:169 db $93,27,0,2,$80 ;rob17 (begin block)\n:170 db $88,15,0,2,$c0+13 ;guy10/rob15 (ready)\n:171 db $88,15,0,2,$c0+13 ;guy10/rob15 (ready)\n:172 db $32,$40+43,0,0,$c0+6 ;jumpfall-2\n:173 db $33,$40+44,0,0,$40+6 ;jumpfall-3\n:174 db $34,$40+45,0,0,$c0+5 ;jumpfall-4\n:175 db $35,$40+46,0,0,$40+5 ;jumpfall-5\n:176 db $34,$40,0,0,$c0+5\n:177 db $0f,$40,0,3,$80+10 ;impaled\n:178 db $0e,$40,4,3,$80+7 ;halves\n:179 db $a8,0,0,1,$40+4 ;collapse15\n:180 db $a9,0,0,1,$40+4 ;collapse16\n:181 db $aa,0,0,1,$40+4 ;collapse17\n:182 db $ab,0,0,1,$40+7 ;collapse18\n:183 db $ac,0,0,7,$40+11 ;collapse19\n:184 db 0,0,0,0,0\n:185 db $10,$40,4,7,$40+9 ;dead\n:186 db $44,$40,0,0,$40+4 ;mouse-1\n:187 db $45,$40,0,0,$40+4 ;mouse-2\n:188 db $46,$40,0,2,$40+4 ;mouse crouch\n:189 db 0,0,0,0,0\n:190 db 0,0,0,0,0\n:191 db $94,0,0,0,$00 ;drink4\n:192 db $95,0,0,1,$00 ;drink5\n:193 db $96,0,0,0,$80 ;drink6\n:194 db $97,0,0,0,$00 ;drink7\n:195 db $98,0,-1,0,$00 ;drink8\n:196 db $99,0,-1,0,$00 ;drink9\n:197 db $9a,0,-1,0,$00 ;drink10\n:198 db $9b,0,-4,0,$00 ;drink11\n:199 db $9c,0,-4,0,$80 ;drink12\n:200 db $9d,0,-4,0,$00 ;drink13\n:201 db $9e,0,-4,0,$00 ;drink14\n:202 db $9f,0,-4,0,$00 ;drink15\n:203 db $a0,0,-4,0,$00 ;drink16\n:204 db $a1,0,-5,0,$00 ;drink17\n:205 db $a2,0,-5,0,$00 ;drink18\n:206 db $a3,0,0,0,0 ;unused\n:207 db $a4,0,0,1,$40+6 ;draw5\n:208 db $a5,0,0,1,$c0+6 ;draw6\n:209 db $a6,0,0,1,$c0+8 ;draw7\n:210 db $a7,0,0,1,$40+10 ;draw8\n:211 db 0,0,0,0,$00\n:212 db 0,0,0,0,$00\n:213 db 0,0,0,0,$00\n:214 db 0,0,0,0,$00\n:215 db 0,0,0,0,$00\n:216 db 0,0,0,0,$00\n:217 db $35,0,0,0,$80 ;climbst2\n:218 db $36,0,0,0,$00 ;climbst3\n:219 db $37,0,0,0,$00 ;climbst4\n:220 db $38,0,0,0,$00 ;climbst5\n:221 db $39,0,0,0,$80 ;climbst6\n:222 db $3a,0,0,0,$00 ;climbst7\n:223 db $3b,0,0,0,$00 ;climbst8\n:224 db $3c,0,0,0,$00 ;climbst9\n:225 db $3d,0,0,0,$80 ;climbst10\n:226 db $3e,0,0,0,$00 ;climbst11\n:227 db $3f,0,0,0,$80 ;climbst12\n:228 db $40,0,0,0,$00 ;climbst13\n:229 db $32,$80+35,1,1,$c0+3 ;sheathe22\n:230 db $33,$80+36,0,1,$40+9 ;sheathe23\n:231 db $34,$80+37,0,1,$c0+3 ;sheathe24\n:232 db $35,$80+38,0,1,$40+9 ;sheathe25\n:233 db $36,$80+39,0,1,$c0+3 ;sheathe26\n:234 db $37,$80+40,1,1,$40+9 ;sheathe27\n:235 db $38,$80+41,1,1,$40+3 ;sheathe28\n:236 db $39,$80+42,1,1,$c0+9 ;sheathe29\n:237 db $3a,$80,4,1,$c0+6 ;sheathe30\n:238 db $3b,$80,3,1,$c0+10 ;sheathe31\n:239 db $3c,$80,1,1,$40+3 ;sheathe32\n:240 db $3d,$80,1,1,$c0+8 ;sheathe33 (-->133)\n\n*-------------------------------\n*\n*  Alternate character set 1 (chtable4)\n*\n*  200 bytes allocated -- 40 frames (150-189)\n*\n*  Frame def list shows kid, sword in RIGHT hand\n*  Altset1 shows enemy, sword in LEFT hand (to be mirrored)\n*  (Image tables always show character facing LEFT)\n*\n*-------------------------------\n ds altset1-*\n\nALTSET1\n\n:150 db $0b,$c0+13,2,1,$00 ;missed block\n:151 db $01,$c0+1,3,1,$00 ;guy-3\n:152 db $02,$c0+2,4,1,$00 ;guy-4\n:153 db $03,$c0+3,7,1,$40+4 ;guy-5\n:154 db $04,$c0+4,10,1,$00 ;guy-6 (full ext)\n:155 db $05,$c0+5,7,1,$80 ;guy-7\n:156 db $06,$c0+6,4,1,$80 ;guy-8\n:157 db $07,$c0+7,0,1,$80 ;guy-9\n:158 db $08,$c0+8,0,1,$c0+13 ;guy-10 (ready)\n:159 db $09,$c0+11,7,1,$80 ;guy-19\n:160 db $0a,$c0+12,3,1,$00 ;guy-20\n:161 db $0b,$c0+13,2,1,$00 ;guy-21 (blocking)\n:162 db $0c,$c0,2,1,$00 ;guy-22\n:163 db $0d,$c0+28,0,1,$00 ;guy-31 (advance)\n:164 db $0e,$c0+29,0,1,$80 ;guy-32\n:165 db $0f,$c0+30,2,1,$c0+3 ;guy-33\n:166 db $10,$c0+9,-1,1,$40+8 ;alertstand\n:167 db $11,$c0+10,7,1,$80 ;guy-18 (blocked)\n:168 db $12,$c0+14,3,1,$80 ;guy-15\n:169 db $08,$c0+8,0,1,$80 ;?? (ready-->block)\n:170 db $13,$c0+8,0,1,$c0+13 ;guy-11/12 (ready)\n:171 db $14,$c0+8,0,1,$c0+13 ;guy-13/14 (ready)\n:172 db $15,$c0+47,0,0,$c0+6 ;jumpfall-2 (stabbed)\n:173 db $16,$c0+48,0,0,$40+6 ;jumpfall-3\n:174 db $17,$c0+49,0,0,$c0+5 ;jumpfall-4\n:175 db $17,$c0+49,0,0,$c0+5 ;for jumpfall-5\n:176 db $17,$c0+49,0,0,$c0+5 ;for jumpfall-6\n:177 db $19,$c0,0,3,$80+10 ;impaled\n:178 db $1a,$c0,4,4,$80+7 ;halves\n:179 db $1b,$c0,-2,1,$40+4 ;collapse15\n:180 db $1c,$c0,-2,1,$40+4 ;collapse16\n:181 db $1d,$c0,-2,1,$40+4 ;collapse17\n:182 db $1e,$c0,-2,2,$40+7 ;collapse18\n:183 db $1f,$c0,-2,2,$40+10 ;collapse19\n:184 db 0,0,0,0,0\n:185 db $20,$c0,3,4,$c0+9 ;dead\n:186 db 0,0,0,0,0\n:187 db 0,0,0,0,0\n:188 db 0,0,0,0,0\n:189 db 0,0,0,0,0\n\n*-------------------------------\n*\n*  Alternate character set 2 (chtable6)\n*\n*  (450 bytes allocated -- 90 frames)\n*\n*-------------------------------\n ds altset2-*\n\nALTSET2\n\n:1 db $8a,$40,0,0,$00 ;pslump-1\n:2 db $9a,$40,0,0,$80 ;pturn-4\n:3 db $9b,$40,0,0,$80 ;pturn-5\n:4 db $9c,$40,0,0,$80 ;pturn-6\n:5 db $9d,$40,-1,0,$00 ;pturn-7\n:6 db $9e,$40,2,0,$80 ;pturn-8\n:7 db $9f,$40,2,0,$00 ;pturn-9\n:8 db $a0,$40,0,0,$80 ;pturn-10\n:9 db $a1,$40,1,0,$80 ;pturn-11\n:10 db $a2,$40,2,0,$80 ;unused\n:11 db $99,$40,0,0,$80 ;pturn-15 (stand)\n:12 db $a3,$40,0,0,$80 ;pback-3\n:13 db $a4,$40,0,0,$00 ;pback-5\n:14 db $a5,$40,0,0,$80 ;pback-7\n:15 db $a6,$40,0,0,$80 ;pback-9\n:16 db $a7,$40,0,0,$80 ;pback-11\n:17 db $a8,$40,0,0,$00 ;pback-13 (stand)\n:18 db $8b,$40,0,0,$00 ;pslump-1\n:19 db $a9,$40,0,0,$00 ;plie\n:20 db $ad,$40,0,0,$00 ;embrace-1\n:21 db $ae,$40,0,0,$00 ;embrace-2\n:22 db $af,$40,0,0,$80 ;embrace-3\n:23 db $b0,$40,0,0,$00 ;embrace-4\n:24 db $b1,$40,0,0,$80 ;embrace-5\n:25 db $b2,$40,0,0,$80 ;embrace-6\n:26 db $b3,$40,0,0,$00 ;embrace-7\n:27 db $b4,$40,0,0,$00 ;embrace-8\n:28 db $b5,$40,0,0,$00 ;embrace-9\n:29 db $b6,$40,0,0,$00 ;embrace-10\n:30 db $b7,$40,0,0,$00 ;embrace-11\n:31 db $b8,$40,0,0,$00 ;embrace-12\n:32 db $b9,$40,0,0,$00 ;embrace-13\n:33 db $ba,$40,0,0,$00 ;embrace-14\n:34 db $bb,$40,0,0,$00 ;prise-1\n:35 db $bc,$40,0,0,$00 ;prise-2\n:36 db $bd,$40,0,0,$00 ;prise-3\n:37 db $be,$40,0,0,$00 ;prise-4\n:38 db $bf,$40,0,0,$80 ;prise-5\n:39 db $bf,$40,0,0,$80 ;prise-6\n:40 db $c1,$40,1,0,$00 ;prise-7\n:41 db $c2,$40,-1,0,$00 ;prise-8\n:42 db $c3,$40,2,0,$00 ;prise-9\n:43 db $c4,$40,1,0,$80 ;prise-10\n:44 db $c5,$40,0,0,$80 ;prise-11\n:45 db $c6,$40,0,0,$80 ;prise-12\n:46 db $c7,$40,0,0,$80 ;prise-13\n:47 db $c8,$40,-1,0,$00 ;prise-14\n:48 db $ca,$40,0,0,$80 ;vwalk-8\n:49 db $cb,$40,0,0,$80 ;vwalk-9\n:50 db $cc,$40,0,0,$80 ;vwalk-10\n:51 db $cd,$40,0,0,$00 ;vwalk-11\n:52 db $ce,$40,0,0,$00 ;vwalk-12\n:53 db $cf,$40,0,0,$80 ;vwalk-13\n:54 db $d0,$40,0,0,$80 ;vstand-3\n:55 db $d1,$40,0,0,$80 ;vstand-2\n:56 db $d2,$40,0,0,$80 ;vstand-1\n:57 db $d3,$40,0,0,$80 ;vturn-5\n:58 db $d4,$40,0,0,$80 ;vturn-6\n:59 db $d5,$40,0,0,$80 ;vturn-7\n:60 db $d6,$40,0,0,$80 ;vturn-8\n:61 db $d7,$40,0,0,$00 ;vturn-9\n:62 db $d8,$40,0,0,$80 ;vturn-10\n:63 db $d9,$40,0,0,$00 ;vturn-11\n:64 db $da,$40,0,0,$00 ;vturn-12\n:65 db $db,$40,0,0,$80 ;vturn-13\n:66 db $dc,$40,0,0,$00 ;vturn-14\n:67 db $dd,$40,3,0,$00 ;vcast-2\n:68 db $de,$40,3,0,$00 ;vcast-3\n:69 db $df,$40,3,0,$00 ;vcast-4\n:70 db $e0,$40,2,0,$00 ;vcast-5\n:71 db $e1,$40,3,0,$80 ;vcast-6\n:72 db $e2,$40,5,0,$00 ;vcast-7\n:73 db $e3,$40,5,0,$00 ;vcast-8\n:74 db $e4,$40,1,0,$80 ;vcast-9\n:75 db $e5,$40,2,0,$80 ;vcast-10\n:76 db $e6,$40,2,0,$80 ;vcast-11 (held)\n:77 db $e7,$40,1,0,$80 ;vcast-13\n:78 db $81,$80,1,0,$00 ;vcast-14\n:79 db $82,$80,2,0,$00 ;vcast-15\n:80 db $83,$80,3,0,$00 ;vcast-16\n:81 db $84,$80,3,0,$00 ;vcast-17\n:82 db $85,$80,0,0,$80 ;vcast-18\n:83 db $86,$80,2,0,$80 ;vcast-10a\n:84 db $87,$80,2,0,$80 ;vcast-10b\n:85 db $88,$80,1,0,$00 ;vcast-1\n\n\n*-------------------------------\n*\n*  S W O R D   T A B L E\n*\n*  (192 bytes allocated -- 64 swords)\n*\n*  Sword images are taken from chtable3\n*\n*-------------------------------\n ds swordtab-*\n\nSWORDTAB\n\n* (Image, DX, DY)\n\n:1 db $1d,0,-9\n:2 db $22,-9,-29\n:3 db $1e,7,-25\n:4 db $1f,17,-26\n:5 db $23,7,-14\n:6 db $24,0,-5\n:7 db $20,17,-16\n:8 db $21,16,-19\n:9 db $4b,12,-9 ;alertstand\n:10 db $26,13,-34\n:11 db $27,7,-25\n:12 db $28,10,-16\n:13 db $29,10,-11\n:14 db $2a,22,-21\n:15 db $2b,28,-23\n:16 db $2c,13,-35\n:17 db $2d,0,-38\n:18 db $2e,0,-29\n:19 db $2f,21,-19\n:20 db $30,14,-23\n:21 db $31,21,-22\n:22 db $31,22,-23\n:23 db $2f,7,-13\n:24 db $2f,15,-18 ;$20,17,-19 for flash\n:25 db $24,0,-8\n:26 db $1e,7,-27\n:27 db $48,14,-28\n:28 db $26,7,-27\n:29 db $21,6,-23\n:30 db $21,9,-21\n:31 db $28,11,-18\n:32 db $2b,24,-23\n:33 db $2b,19,-23\n:34 db $2b,21,-23\n;sheathing\n:35 db $40,7,-32\n:36 db $41,14,-32\n:37 db $42,14,-31\n:38 db $43,14,-29\n:39 db $44,28,-28\n:40 db $45,28,-28\n:41 db $46,21,-25\n:42 db $47,14,-22\n\n:43 db 0,14,-25 ;43-46: kid stabbed\n:44 db 0,21,-25\n:45 db $4a,0,-16\n:46 db $26,8,-37\n:47 db $4c,14,-24 ;47-50: enemy stabbed\n:48 db $4d,14,-24\n:49 db $4e,7,-14\n:50 db $26,8,-37\n\n*-------------------------------\n lst\n ds 1\n usr $a9,15,$00,*-org\n lst off\n"
  },
  {
    "path": "01 POP Source/Source/GAMEBG.S",
    "content": "* gamebg\nThreeFive = 1\nEditorDisk = 0\norg = $4c00\n tr on\n lst off\n lstdo off\n*-------------------------------\n*\n*  PRINCE OF PERSIA\n*  Copyright 1989 Jordan Mechner\n*\n*-------------------------------\n org org\n\n jmp UPDATEMETERS\n jmp DRAWKIDMETER\n jmp DRAWSWORD\n jmp DRAWKID\n jmp DRAWSHAD\n\n jmp SETUPFLAME\n jmp CONTINUEMSG\n jmp ADDCHAROBJ\n jmp SETOBJINDX\n jmp PRINTLEVEL\n\n jmp DRAWOPPMETER\n jmp FLIPDISKMSG\n jmp TIMELEFTMSG\n jmp DRAWGUARD\n jmp DRAWGUARD\n\n jmp SETUPFLASK\n jmp SETUPCOMIX\n jmp PSETUPFLAME\n jmp DRAWPOST\n jmp DRAWGLASS\n\n jmp INITLAY\n jmp TWINKLE\n jmp FLOW\n jmp PMASK\n jmp YELLOW\n\n jmp SETRECHECK0\n jmp RECHECKYEL\n ds 3\n ds 3\n ds 3\n\n*-------------------------------\n lst\n put eq\n lst\n put gameeq\n lst off\n\n*-------------------------------\n*\n* 2nd level copy protection\n* signature check routine\n*\n*-------------------------------\n do ThreeFive\nYELLOW lda #$80\n sta yellowflag\n rts\n\n else\n put ryellow1\n fin\n\n*-------------------------------\n lst\n put movedata\n lst off\n\n*-------------------------------\n dum locals\n\nxsave ds 1\naddr ds 2\ntemp ds 1\n\n dend\n\ntempsave ds $10\n\n*-------------------------------\n* Strength meters\n\nKidStrX db 00,01,02,03,04,05,06,08,09,10,11,12\nKidStrOFF db 00,01,02,03,04,05,06,00,01,02,03,04\n\nOppStrX db 39,38,37,36,35,34,32,31,30,29,28,27\nOppStrOFF db 05,04,03,02,01,00,06,05,04,03,02,01\n\nbullet = $88 ;in bgtable2\nblank = $8c\nbline hex 89,8a,8b\n\n*-------------------------------\n* Post in Princess's room\n\npostx = 31\nposty = 152\npostimg = $c ;chtable6\n\n*-------------------------------\n* Stars outside Princess's window\n\nstarx = 2\nstary hex 62,65,6d,72\nstari hex 2a,2b,2b,2a ;chtable6\n\n*-------------------------------\n* Hourglass\n\nglassx = 19\nglassy = 151\nglassimg hex 15,0d,0e,0f,10,11,12,13,14 ;chtable6\nsandht db 0,1,2,3,4,5,6,7\n\nflowx = glassx+1\nflowy = glassy-2\nflowimg hex 16,17,18 ;chtable6\n\n*-------------------------------\n* Masks for Princess's face & hair\n\npmaskdx hex 00,00\npmaskdy db -4,-33\npmaski hex 2c,22\n\n*-------------------------------\n* Comix\n\nstarimage = $41\nstartable = 0 ;chtable1\n\n*-------------------------------\n* Torch animation frames\n*               0  1  2  3  4  5  6  7  8  9 10 11\n*              12 13 14 15 16 17\n\ntorchflame hex 52,53,54,55,56,61,62,63,64,52,54,56\n hex 63,61,55,53,64,62\n\nptorchflame db 1,2,3,4,5,6,7,8,9,3,5,7,1,4,9,2,8,6\n\n*-------------------------------\n* Bubbling flask frames\n*               0  1  2  3  4  5  6  7  8  9 10 11\n\nbubble hex b2,af,b0,b1,b0,af,b1,b0,af\n\n*-------------------------------\n* Message data: YCO, XCO, OFFSET, IMAGE\n\nmy = 90\nlowmy = 153\nhiconty = 73\nlowconty = 168\n\ncontbox db hiconty,13,0,$7c ;Press button to continue\nmsgbox db my,15,0,$7b ;Empty message box\nlevelmsg db my-5,16,3,$7a ;\"Level\"\nflipbox db my-1,13,0,$7e ;Turn disk over\ntimeleft db my,11,0,$7d ;Minutes left\nseconds db my-5,14,0,$7f ;\"Seconds\"\n\n*-------------------------------\n* Numbers (0-12)\n\ndigit1 hex 00,00,00,00,00,00,00,00,00,00\n hex 71,71,71\n\ndigit2 hex 70,71,72,73,74,75,76,77,78,79\n hex 70,71,72\n\n*-------------------------------\n* Print \"XX Minutes Left\"\n*-------------------------------\n]rts rts\n\nTIMELEFTMSG\n lda #timeleft\n ldx #>timeleft\n jsr setupimage\n\n lda MinLeft\n cmp #2\n bcs :ok\n lda KidAction\n cmp #3\n beq :ok\n cmp #4\n beq :ok ;falling\n lda KidBlockY\n cmp #1\n bne :ok\n lda #lowmy\n sta YCO ;keep msg box out of kid's way\n:ok jsr superim1\n\n lda YCO\n sec\n sbc #5\n sta YCO\n\n lda XCO\n clc\n adc #1\n sta XCO\n lda #0\n sta OPACITY\n\n lda #ora\n sta OPACITY\n\n jsr getminleft\n\n lda MinLeft ;BCD byte (e.g., $55 = 55 minutes)\n cmp #2\n bcs :1\n lda SecLeft\n:1 sta temp\n lsr\n lsr\n lsr\n lsr\n beq :skip1st\n tax\n lda digit2,x ;1st digit\n sta IMAGE\n\n jsr addmsg\n\n:skip1st lda XCO\n clc\n adc #1\n sta XCO\n\n lda temp\n and #$f\n tax\n lda digit2,x ;2nd digit\n sta IMAGE\n\n jsr addmsg\n\n* Minutes or seconds?\n\n lda MinLeft\n cmp #2\n bcs ]rts\n\n lda YCO\n pha\n lda #seconds\n ldx #>seconds\n jsr setupimage\n pla\n sta YCO\n lda #sta\n sta OPACITY\n jmp addmsg ;replace \"minutes\" with \"seconds\"\n\n*-------------------------------\n* Print \"Level XX\"\n*-------------------------------\n]rts rts\n\nPRINTLEVEL\n lda #msgbox\n ldx #>msgbox\n jsr superimage\n\n lda #levelmsg\n ldx #>levelmsg\n jsr setupimage\n\n jsr getlevelno\n cpx #10\n bcc :1\n lda #0\n sta OFFSET\n:1\n lda #ora\n sta OPACITY\n jsr addmsg\n\n lda XCO\n clc\n adc #6\n sta XCO\n\n jsr getlevelno ;X = level # (0-12)\n lda digit1,x ;1st digit\n beq :skip1st\n sta IMAGE\n\n lda #ora\n sta OPACITY\n jsr addmsg\n\n lda XCO\n clc\n adc #1\n sta XCO\n\n jsr getlevelno\n:skip1st lda digit2,x ;2nd digit\n sta IMAGE\n\n lda #ora\n sta OPACITY\n jmp addmsg\n\n*-------------------------------\ngetlevelno\n ldx level\n cpx #13\n bcc :ok\n ldx #12\n:ok\n]rts rts\n\n*-------------------------------\n* Superimpose \"Press button to continue\" message\n*-------------------------------\nCONTINUEMSG\n lda #contbox\n ldx #>contbox\n jsr setupimage\n\n lda KidBlockX\n and #1\n bne :1\n lda #lowconty\n sta YCO\n:1 jmp superim1\n\n*-------------------------------\n* Superimpose \"Turn disk over\" message\n*-------------------------------\nFLIPDISKMSG\n lda #flipbox\n ldx #>flipbox\n jmp superimage\n\n*-------------------------------\n* Superimpose image (using layrsave)\n*-------------------------------\nsuperimage\n jsr setupimage\nsuperim1\n lda #sta.$40\n sta OPACITY\n jmp addmsg\n\n*-------------------------------\n* Set up image\n*\n* In: A-X = image data addr\n* Out: XCO, YCO, IMAGE\n*-------------------------------\nsetupimage\n sta addr\n stx addr+1\n\n ldy #0\n lda (addr),y\n sta YCO\n iny\n lda (addr),y\n sta XCO\n iny\n lda (addr),y\n sta OFFSET\n iny\n lda (addr),y\n sta IMAGE\n]rts\n:rts rts\n\n*-------------------------------\n* Draw Kid\n*-------------------------------\nDRAWKID\n lda backtolife\n beq :2\n lda PAGE\n beq ]rts ;flash when coming back to life\n\n:2 lda mergetimer\n bmi :1\n and #1\n beq :1\n jmp DrawEored ;flash between kid & shadowman\n\n:1 jmp DrawNormal\n\n*-------------------------------\n* Draw Sword\n*-------------------------------\nDRAWSWORD\n jmp DrawNormal\n\n*-------------------------------\n* Draw Shadowman\n*-------------------------------\nDRAWSHAD\n jmp DrawEored\n\n*-------------------------------\n* Draw Guard\n*-------------------------------\nDRAWGUARD\n do EditorDisk\n lda #EditorDisk\n cmp #2\n beq DrawNormal\n fin\n\n lda GuardColor ;set by \"ADDGUARD\" in AUTO\n beq DrawNormal\n bne DrawShifted\n\n*-------------------------------\nDrawNormal\n lda #mask\n sta OPACITY\n\n lda #UseLayrsave.$80\n jmp addmid\n\n]rts rts\n\n*-------------------------------\nDrawShifted\n lda #1\n jsr chgoffset\n\n lda #mask\n sta OPACITY\n\n lda #UseLayrsave.$80\n jmp addmid\n\n*-------------------------------\nDrawEored\n lda #eor\n sta OPACITY\n\n lda #UseLayrsave.$80\n jmp addmid\n\n*-------------------------------\nchgoffset\n clc\n adc OFFSET\n cmp #7\n bcc :1\n\n inc XCO\n sec\n sbc #7\n\n:1 sta OFFSET\n rts\n\n*-------------------------------\n*\n* Update strength meters\n*\n*-------------------------------\nUPDATEMETERS\n lda redkidmeter\n beq :1\n\n jsr DrawKidMeter\n\n:1 lda redoppmeter\n beq ]rts\n\n jmp DrawOppMeter\n]rts rts\n\n*-------------------------------\n*\n* Draw kid's strength meter at lower left\n*\n*-------------------------------\nDRAWKIDMETER\n lda inbuilder\n bne ]rts\n\n lda #191\n sta YCO\n lda #sta\n sta OPACITY\n\n ldx #0\n stx xsave ;# of bullets drawn so far\n\n:loop lda KidStrength\n sec\n sbc xsave ;# of bullets left to draw\n beq :darkpart\n cmp #4\n bcs :draw3\n cmp #3\n bcs :draw2\n cmp #2\n bcc :drawlast\n;Draw 1 bullet\n:draw1 ldy #1\n bne :drline\n ;Draw 2 bullets\n:draw2 ldy #2\n bne :drline\n;Draw 3 bullets\n:draw3 ldy #3\n bne :drline\n\n:drawlast lda KidStrength\n cmp #2\n bcs :steady\n lda PAGE\n beq :skip ;flashes when down to 1\n:steady lda #bullet\n ldy #1\n jsr :draw\n:skip jmp :darkpart\n\n* Draw line of 1-3 bullets\n\n:drline lda bline-1,y ;image #\n jsr :draw\n jmp :loop\n\n:draw sta IMAGE\n ldx xsave\n tya\n clc\n adc xsave\n sta xsave\n\n* In: IMAGE; x = unit # (0 = leftmost)\n\n:drawimg lda KidStrX,x\n sta XCO\n lda KidStrOFF,x\n sta OFFSET\n jmp addmsg\n\n* Draw blanks to limit of MaxKidStr\n\n:darkpart\n lda #and\n sta OPACITY\n lda #blank\n sta IMAGE\n:dloop ldx xsave\n cpx MaxKidStr\n bcs ]rts\n jsr :drawimg\n inc xsave\n bne :dloop\n]rts rts\n\n*-------------------------------\n*\n* Draw opp's strength meter at lower right\n*\n*-------------------------------\nDRAWOPPMETER\n lda inbuilder\n bne ]rts\n\n lda OppStrength\n beq ]rts\n\n lda ShadID\n cmp #24 ;mouse\n beq ]rts\n cmp #4 ;skel\n beq ]rts\n cmp #1 ;shadow\n bne :1\n lda level\n cmp #12\n bne ]rts ;shad strength shows only on level 12\n:1\n lda #191\n sta YCO\n lda #sta.$80 ;mirror\n sta OPACITY\n\n ldx #0\n stx xsave ;# of bullets drawn so far\n\n:loop lda OppStrength\n sec\n sbc xsave ;# of bullets left to draw\n beq :darkpart\n cmp #4\n bcs :draw3\n cmp #3\n bcs :draw2\n cmp #2\n bcc :drawlast\n;Draw 1 bullet\n:draw1 ldy #1\n bne :drline\n ;Draw 2 bullets\n:draw2 ldy #2\n bne :drline\n;Draw 3 bullets\n:draw3 ldy #3\n bne :drline\n\n:drawlast lda OppStrength\n cmp #2\n bcs :steady\n lda PAGE\n beq :darkpart ;flashes when down to 1\n:steady lda #bullet\n ldy #1\n jmp :draw\n\n* Draw line of 1-3 bullets\n\n:drline lda bline-1,y ;image #\n jsr :draw\n jmp :loop\n\n:draw sta IMAGE\n ldx xsave\n tya\n clc\n adc xsave\n sta xsave\n\n:drawimg lda OppStrX,x\n sta XCO\n lda OppStrOFF,x\n sta OFFSET\n jmp addmsg\n\n:darkpart\n lda #and.$80\n sta OPACITY\n lda #blank\n sta IMAGE\n ldx xsave\n jmp :drawimg\n\n*-------------------------------\n*\n* Set up to draw bubbling flask\n*\n* In/out: same as SETUPFLAME\n*\n*-------------------------------\nEmptyPot = 0\nRefreshPot = %00100000\nBoostPot = %01000000\nMystPot = %01100000\n\nboffset = 2\n\nSETUPFLASK\n lda #boffset\n sta OFFSET\n\n txa\n and #%11100000\n cmp #EmptyPot\n beq :0\n cmp #BoostPot\n beq :tall ;special flask (taller)\n bcc :cont\n\n inc OFFSET ;mystery potion (blue)\n\n:tall lda YCO\n sec\n sbc #4\n sta YCO\n\n:cont txa\n and #%00011111\n tax\n cpx #bubbLast+1\n bcc :ok\n ldx #0\n:ok lda bubble,x\n sta IMAGE\n\n inc XCO\n inc XCO\n\n lda YCO\n sec\n sbc #14\n sta YCO\n\n lda #sta\n sta OPACITY\n\n lda #bgtable2\n sta TABLE\n lda #>bgtable2\n sta TABLE+1\n\n]rts rts\n\n:0 ldx #0\n beq :ok\n\n*-------------------------------\n*\n* Setup to draw flame\n*\n* In: XCO = blockxco\n*     YCO = Ay\n*     X   = spreced\n*\n* Out: ready to call ADDBACK (or FASTLAY)\n*\n*-------------------------------\nSETUPFLAME\n cpx #torchLast+1\n bcs ]rts\n\n lda torchflame,x\n sta IMAGE\n\n inc XCO\n\n lda YCO\n sec\n sbc #43\n sta YCO\n\n lda #sta\n sta OPACITY\n\n lda #bgtable1\n sta TABLE\n lda #>bgtable1\n sta TABLE+1\n\n]rts rts\n\n*-------------------------------\n*\n* Setup to draw flame (Princess's room)\n*\n* In: XCO, YCO; X = frame #\n* Out: Ready to call ADDMID or LAY\n*\n*-------------------------------\nPSETUPFLAME\n cpx #torchLast+1\n bcs ]rts\n\n lda ptorchflame,x\n sta IMAGE\n\n lda #sta\n sta OPACITY\n\n jsr initlay\n\n]setch6 lda #chtable6\n sta TABLE\n lda #>chtable6\n sta TABLE+1\n\n]rts rts\n\n*-------------------------------\n*\n* Twinkle one of the stars outside Princess's window\n* (Update it directly on both screens)\n*\n* In: X = star # (0-3)\n*\n*-------------------------------\nTWINKLE\n lda #starx\n sta XCO\n lda stary,x\n sta YCO\n lda stari,x\n sta IMAGE\n lda #eor\n sta OPACITY\n jsr ]setch6\n jsr fastlay ;<--DIRECT HIRES CALL\n lda PAGE\n eor #$20\n sta PAGE ;& on other page\n jsr fastlay\n lda PAGE\n eor #$20\n sta PAGE\n rts\n\n*-------------------------------\n*\n* Draw big white post in Princess's room\n*\n*-------------------------------\nDRAWPOST\n lda #postx\n sta XCO\n lda #posty\n sta YCO\n lda #postimg\n sta IMAGE\n lda #ora\n sta OPACITY\n jsr ]setch6\n jmp addfore\n\n*-------------------------------\n*\n* Draw hourglass in Princess's room\n*\n* In: X = glass state (0-8, 0 = full)\n*\n*-------------------------------\nDRAWGLASS\n lda #glassx\n sta XCO\n lda #glassy\n sta YCO\n lda glassimg,x\n sta IMAGE\n lda #sta\n sta OPACITY\n jsr ]setch6\n jmp addback\n\n*-------------------------------\n*\n* Mask princess's face & hair for certain CharPosns\n*\n* (Called after ADDCHAROBJ)\n*\n*-------------------------------\nPMASK\n ldx CharPosn\n cpx #19 ;plie\n bne :1\n ldx #0\n bpl :mask\n:1 cpx #1 ;pslump-1\n beq :m1\n cpx #18 ;pslump-2\n bne :2\n:m1 ldx #1\n bpl :mask\n:2\n\n]rts rts\n\n:mask\n lda FCharY\n clc\n adc pmaskdy,x\n sta YCO\n\n lda XCO\n clc\n adc pmaskdx,x\n sta XCO\n\n lda pmaski,x\n sta IMAGE\n\n lda #5 ;chtable6\n sta TABLE\n\n lda #and\n sta OPACITY\n lda #UseLayrsave.$80\n jmp addmid\n\n*-------------------------------\n* If failed copy prot check due to disk not in drive, recheck\n* In: a = 0 (Call after setrecheck0)\n*-------------------------------\nRECHECKYEL\n sta tempblockx\n sta tempblocky\n jsr indexblock ;set y = 0\n lda (locals),y ;All of this just to hide \"lda recheck0\"!\n beq ]rts\n ldx #5\n jsr yellow\n lda #$ff\n rts\n\n*-------------------------------\n*\n* Draw sand flowing through hourglass\n*\n* In: X = frame # (0-3)\n*     Y = hourglass state (0-8)\n*\n*-------------------------------\nFLOW\n cpy #8\n bcs ]rts ;glass is empty\n jsr initlay\n lda #glassy\n sec\n sbc sandht,y\n sta BOTCUT\n lda flowimg,x\n sta IMAGE\n lda #flowx\n sta XCO\n lda #0\n sta OFFSET\n lda #flowy\n sta YCO\n lda #sta\n sta OPACITY\n jsr ]setch6\n jmp lay ;<---DIRECT HIRES CALL\n\n*-------------------------------\n* Save/restore FCharVars\n\nsaveFChar\n ldx #$f\n:loop lda FCharVars,x\n sta tempsave,x\n dex\n bpl :loop\n rts\n\nrestoreFChar\n ldx #$f\n:loop lda tempsave,x\n sta FCharVars,x\n dex\n bpl :loop\n]rts rts\n\n*-------------------------------\n*\n* Draw \"comix\" star\n*\n* In: Char data\n*\n*-------------------------------\nSETUPCOMIX\n jsr saveFChar\n jsr :sub\n jmp restoreFChar\n\n:sub lda #$ff\n sta FCharIndex\n\n* Get y-coord\n\n lda CharPosn\n cmp #185 ;dead\n beq :low\n cmp #177 ;impaled\n beq :imp\n cmp #106\n bcc :80\n cmp #111 ;crouching\n bcc :low\n:80 cmp #178 ;halved\n beq ]rts\n\n lda #-15\n ldx CharID\n beq :3\n lda #-11 ;kid strikes lower than opponent\n:3 clc\n adc FCharY\n sta FCharY\n jmp :8\n\n:low lda #4\n clc\n adc FCharY\n sta FCharY\n jmp :8\n\n* Get x-coord\n\n:imp lda #-5 impaled\n bne :9\n:8 lda #5\n:9 jsr addfcharx\n\n* Get color (kid red, opps blue)\n\n lda CharID\n beq :2 ;kid: 0\n lda #1 ;opponents: 1\n:2\n eor FCharX\n eor FCharFace\n and #1 ;look only at low bits\n bne :1\n inc FCharX\n bne :1\n inc FCharX+1\n:1\n lda #starimage\n sta FCharImage\n lda #startable\n sta FCharTable\n\n lda #0\n sta FCharCU\n sta FCharCL\n lda #40\n sta FCharCR\n lda #192\n sta FCharCD\n\n lda #TypeComix\n jmp addcharobj\n]rts rts\n\n*-------------------------------\n*\n*  A D D   C H A R   O B J\n*\n*  Add a character to object table\n*\n*  In: FCharVars\n*      A = object type\n*\n*-------------------------------\nADDCHAROBJ\n ldx objX ;# objects already in list\n inx\n cpx #maxobj\n bcs ]rts ;list full (shouldn't happen)\n stx objX\n\n sta objTYP,x\n\n lda FCharX\n sta XCO\n lda FCharX+1\n sta OFFSET\n\n txa\n pha\n jsr cvtx ;from 280-res to byte/offset\n pla\n tax\n\n lda XCO\n sta objX,x\n lda OFFSET\n sta objOFF,x\n\n lda FCharY\n sta objY,x\n\n lda FCharCU\n sta objCU,x\n lda FCharCL\n sta objCL,x\n lda FCharCR\n sta objCR,x\n lda FCharCD\n sta objCD,x\n\n lda FCharImage\n sta objIMG,x\n\n lda FCharTable\n sta objTAB,x\n\n lda FCharFace\n sta objFACE,x\n\n jmp SETOBJINDX\n\n*-------------------------------\n*\n*  S E T  O B J  I N D X\n*\n*  Set object index\n*\n*-------------------------------\nSETOBJINDX\n lda FCharIndex\n sta objINDX,x\n\n cmp #30\n bcs :os\n\n tax\n\n lda #1\n sta objbuf,x\n:os\n rts\n\n*-------------------------------\n*\n* Text routines\n*\n* NOTE: These routines bypass normal data structures\n* & write directly to hi-res page.\n*\n* Call at end of DRAWALL to make sure text goes on top\n* of everything else.\n*\n*-------------------------------\n*\n* Call once before using other text routines\n*\n*-------------------------------\npretext\n jsr initlay\n\n lda #bgtable2\n sta TABLE\n lda #>bgtable2\n sta TABLE+1\n rts\n\n*-------------------------------\n* Part of \"Yellow\" copy-protection\n\nSETRECHECK0\n lda #recheck0\n sta locals\n lda #>recheck0\n sta locals+1 ;fall thru (& return A = 0)\n\n*-------------------------------\nINITLAY\n lda #3 ;auxmem\n sta BANK\n\n lda #40\n sta RIGHTCUT\n lda #192\n sta BOTCUT ;use full screen\n lda #0\n sta LEFTCUT\n sta TOPCUT\n rts\n\n*-------------------------------\n*\n* Print character\n*\n* In: PAGE, XCO/OFFSET, YCO\n*     a = ASCII value of character\n* Out: XCO/OFFSET (modified)\n*\n*-------------------------------\nprchar\n sec\n sbc #\"/\" ;\"0\" = 1\n sta IMAGE\n\n lda #ora\n sta OPACITY\n\n jsr lay\n\n inc XCO\n rts\n\n*-------------------------------\n lst\n ds 1\n usr $a9,17,$00,*-org\n lst off\n"
  },
  {
    "path": "01 POP Source/Source/GAMEEQ.S",
    "content": " tr on\n lst off\n* gameeq\n*-------------------------------\n*\n*  Equates\n*\n*-------------------------------\nchtable1 = $6000\nchtable2 = $8400\nchtable3 = $0800\nchtable4 = $9600\nchtable5 = $a800\nchtable6 = $6000\nchtable7 = $9f00\n\nbgtable1 = $6000\nbgtable2 = $8400\n\ntopctrl = $2000\nseqtable = $2800\nseqtab = $3000\nctrl = $3a00\ncoll = $4500\ngamebg = $4c00\nauto = $5400\n\nmobtables = $b600\nsavedgame = $b6f0\n\nmsys = $d400\nctrlsubs = $d000\nspecialk = $d900\ntextline = $dfd8\nsubs = $e000\nsound = $ea00\nmover = $ee00\nmisc = $f900\ndebugs = $fc00\n\n*-------------------------------\n*\n*  Jump tables\n*\n*-------------------------------\n dum mobtables\n\ntrobspace = $20\nmobspace = $10\nmaxsfx = $20\n\ntrloc ds trobspace\ntrscrn ds trobspace\ntrdirec ds trobspace\n\nmobx ds mobspace\nmoby ds mobspace\nmobscrn ds mobspace\nmobvel ds mobspace\nmobtype ds mobspace\nmoblevel ds mobspace\n\nsoundtable ds maxsfx\n\ntrobcount ds 1\n\n dum savedgame\n\nSavLevel ds 1\nSavStrength ds 1\nSavMaxed ds 1\nSavTimer ds 2\n ds 1\nSavNextMsg ds 1\n\n dum topctrl\n\nstart ds 3\nrestart ds 3\nstartresume ds 3\ninitsystem ds 3\n ds 3\n\ndocrosscut ds 3\ngoattract ds 3\n\n dum ctrl\n\nPlayerCtrl ds 3\ncheckfloor ds 3\nShadCtrl ds 3\nrereadblocks ds 3\ncheckpress ds 3\n\nDoImpale ds 3\nGenCtrl ds 3\ncheckimpale ds 3\n\n dum auto\n\nAutoCtrl ds 3\ncheckstrike ds 3\ncheckstab ds 3\nAutoPlayback ds 3\ncutcheck ds 3\n\ncutguard ds 3\naddguard ds 3\ncut ds 3\n\n dum coll\n\ncheckbarr ds 3\ncollisions ds 3\ngetfwddist ds 3\ncheckcoll ds 3\nanimchar ds 3\n\ncheckslice ds 3\ncheckslice2 ds 3\n ds 3\ncheckgate ds 3\n ds 3\n\nenemycoll ds 3\n\n dum gamebg\n\nupdatemeters ds 3\nDrawKidMeter ds 3\nDrawSword ds 3\nDrawKid ds 3\nDrawShad ds 3\n\nsetupflame ds 3\ncontinuemsg ds 3\naddcharobj ds 3\nsetobjindx ds 3\nprintlevel ds 3\n\nDrawOppMeter ds 3\nflipdiskmsg ds 3\ntimeleftmsg ds 3\nDrawGuard ds 3\nDrawGuard2 ds 3\n\nsetupflask ds 3\nsetupcomix ds 3\npsetupflame ds 3\ndrawpost ds 3\ndrawglass ds 3\n\ninitlay ds 3\ntwinkle ds 3\nflow ds 3\npmask ds 3\nyellow ds 3\n\nsetrecheck0 ds 3\nrecheckyel ds 3\n\n dum specialk\n\nkeys ds 3\nclrjstk ds 3\nzerosound ds 3\naddsound ds 3\nfacejstk ds 3\n\nSaveSelect ds 3\nLoadSelect ds 3\nSaveDesel ds 3\nLoadDesel ds 3\ninitinput ds 3\n\ndemokeys ds 3\nlisttorches ds 3\nburn ds 3\ngetminleft ds 3\nkeeptime ds 3\n\nshortentime ds 3\ncuesong ds 3\n ds 3\n ds 3\n ds 3\n\ndloop ds 3\nstrobe ds 3\n\n dum mover\n\nanimtrans ds 3\ntrigspikes ds 3\npushpp ds 3\nbreakloose1 ds 3\nbreakloose ds 3\n\nanimmobs ds 3\naddmobs ds 3\ncloseexit ds 3\ngetspikes ds 3\nshakem ds 3\n\ntrigslicer ds 3\ntrigtorch ds 3\ngetflameframe ds 3\nsmashmirror ds 3\njamspikes ds 3\n\ntrigflask ds 3\ngetflaskframe ds 3\ntrigsword ds 3\njampp ds 3\n\n dum ctrlsubs\n\ngetframe ds 3\ngetseq ds 3\ngetbasex ds 3\ngetblockx ds 3\ngetblockxp ds 3\n\ngetblocky ds 3\ngetblockej ds 3\naddcharx ds 3\ngetdist ds 3\ngetdist1 ds 3\n\ngetabovebeh ds 3\nrdblock ds 3\nrdblock1 ds 3\nsetupsword ds 3\ngetscrns ds 3\n\naddguardobj ds 3\nopjumpseq ds 3\ngetedges ds 3\nindexchar ds 3\nquickfg ds 3\n\ncropchar ds 3\ngetleft ds 3\ngetright ds 3\ngetup ds 3\ngetdown ds 3\n\ncmpspace ds 3\ncmpbarr ds 3\naddkidobj ds 3\naddshadobj ds 3\naddreflobj ds 3\n\nLoadKid ds 3\nLoadShad ds 3\nSaveKid ds 3\nSaveShad ds 3\nsetupchar ds 3\n\nGetFrameInfo ds 3\nindexblock ds 3\nmarkred ds 3\nmarkfred ds 3\nmarkwipe ds 3\n\nmarkmove ds 3\nmarkfloor ds 3\nunindex ds 3\nquickfloor ds 3\nunevenfloor ds 3\n\nmarkhalf ds 3\naddswordobj ds 3\ngetblocky1 ds 3\ncheckledge ds 3\nget2infront ds 3\n\ncheckspikes ds 3\nrechargemeter ds 3\naddfcharx ds 3\nfacedx ds 3\njumpseq ds 3\n\nGetBaseBlock ds 3\nLoadKidwOp ds 3\nSaveKidwOp ds 3\ngetopdist ds 3\nLoadShadwOp ds 3\n\nSaveShadwOp ds 3\nboostmeter ds 3\ngetunderft ds 3\ngetinfront ds 3\ngetbehind ds 3\n\ngetabove ds 3\ngetaboveinf ds 3\ncmpwall ds 3\n\n dum subs\n\naddtorches ds 3\ndoflashon ds 3\nPageFlip ds 3\ndemo ds 3\nshowtime ds 3\n\ndoflashoff ds 3\nlrclse ds 3\n ds 3\n ds 3\n ds 3\n\naddslicers ds 3\npause ds 3\n ds 3\ndeadenemy ds 3\nplaycut ds 3\n\naddlowersound ds 3\nRemoveObj ds 3\naddfall ds 3\nsetinitials ds 3\nstartkid ds 3\n\nstartkid1 ds 3\ngravity ds 3\ninitialguards ds 3\nmirappear ds 3\ncrumble ds 3\n\n dum sound\n\nplayback ds 3\n\n dum msys\n\n_minit ds 3\n_mplay ds 3\n\n dum seqtable\n\nFdef ds 1200\naltset1 ds 200\naltset2 ds 450\nswordtab ds 192\n\n dum misc\n\nVanishChar ds 3\nmovemusic ds 3\nmoveauxlc ds 3\nfirstguard ds 3\nmarkmeters ds 3\n\npotioneffect ds 3\nmouserescue ds 3\nStabChar ds 3\nunholy ds 3\nreflection ds 3\n\nMarkKidMeter ds 3\nMarkOppMeter ds 3\nbonesrise ds 3\ndecstr ds 3\nDoSaveGame ds 3\n\nLoadLevelX ds 3\ncheckalert ds 3\ndispversion ds 3\n\n dum debugs\n\nshowpage ds 3\ndebugkeys ds 3\n ds 3\ntitlescreen ds 3\n\n*-------------------------------\n*\n*  Zero page\n*\n*-------------------------------\nlocals = $e8\n\n*-------------------------------\n*  $40-e7: Game globals\n*-------------------------------\n dum $40\n\nChar ds $10\nKid ds $10\nShad ds $10\nFCharVars ds 12\nyellowflag ds 1\ntimebomb ds 1\njustblocked ds 1\ngdtimer ds 1\nframepoint ds 2\nFimage ds 1\nFdx ds 1\nFdy ds 1\nFcheck ds 1\nexitopen ds 1\ncollX ds 1\nlightning ds 1\nlightcolor ds 1\noffguard ds 1\nblockid ds 1\nblockx ds 1\nblocky ds 1\ninfrontx ds 1\nbehindx ds 1\nabovey ds 1\ntempblockx ds 1\ntempblocky ds 1\ntempscrn ds 1\ntempid ds 1\nnumtrans ds 1\ntempnt ds 1\nredrawflg ds 1\nxdiff ds 2\nydiff ds 2\nxdir ds 1\nydir ds 1\nRNDseed ds 1\ninvert ds 1\nPlayCount ds 1\nrefract ds 1\nbacktolife ds 1\ncutplan ds 1\nlastcmd ds 1\ndistfallen ds 1\ncutscrn ds 1\nwaitingtojump ds 1\ntrigppabove ds 1\ndirecpp ds 1\nblockaddr ds 2\ndelay ds 1\nXCOORD ds 2\nsavekidx ds 1\nmirrx ds 1\ndmirr ds 1\nbarrdist ds 1\nbarrcode ds 1\nimwidth ds 1\nimheight ds 1\nleadedge ds 1\nleftej ds 1\nrightej ds 1\ntopej ds 1\nleftblock ds 1\nrightblock ds 1\ntopblock ds 1\nbottomblock ds 1\nCDLeftEj ds 1\nCDRightEj ds 1\nendrange ds 1\nbufindex ds 1\nblockedge ds 1\ncollideL ds 1\ncollideR ds 1\nweightless ds 1\ncutorder ds 1\nAMtimer ds 1\nbegrange ds 1\nscrn ds 1\nkeybufptr ds 1\nVisScrn ds 1\nOppStrength ds 1\njarabove ds 1\nKidStrength ds 1\nChgKidStr ds 1\nMaxKidStr ds 1\nEnemyAlert ds 1\nChgOppStr ds 1\nheroic ds 1\nclrF ds 1\nclrB ds 1\nclrU ds 1\nclrD ds 1\nclrbtn ds 1\nFsword ds 1\npurpleflag ds 1 ;$da\nmsgtimer ds 1\nMaxOppStr ds 1\nguardprog ds 1\nManCtrl ds 1\nmergetimer ds 1\nlastpotion ds 1\norigstrength ds 1\njmpaddr ds 2\nalertguard ds 1\ncreateshad ds 1\nstunned ds 1\ndroppedout ds 1\n\n*-------------------------------\n*\n*  Page 2-3\n*\n*-------------------------------\n dum $212\n\nmilestone ds 1\nGlassState ds 1\nredrawglass ds 1\ndoortop ds 1\nGuardColor ds 1\nshadowaction ds 1\nskipmessage ds 1\nsavezp ds 32\nMSset ds 1\nrjumpflag ds 1\nredherring ds 1\n\n dum $300\n\nMinLeft ds 1\nNextTimeMsg ds 1\nSecLeft ds 1\nBGset1 ds 1\nBGset2 ds 1\nCHset ds 1\nFrameCount ds 2\nSongCount ds 1\nPreRecPtr ds 1\ngotsword ds 1\nmessage ds 1\nSPEED ds 1\nnummob ds 1\nclrSEL ds 5\nclrDESEL ds 5\nvibes ds 1\nSongCue ds 1\nmusicon ds 1\nredkidmeter ds 1\nNextLevel ds 1\nscrncolor ds 1\nredoppmeter ds 1\ntimerequest ds 1\n\n dum $320\n\nCDthisframe ds $10\nCDlastframe ds $10\nCDbelow ds $10\nCDabove ds $10\nSNthisframe ds $10\nSNlastframe ds $10\nSNbelow ds $10\nSNabove ds 10\nBlockYthis ds 1\nBlockYlast ds 1\n\nOp ds $10\n\nkeybuflen = 10\nkeybuf ds keybuflen\n\n*-------------------------------\n*\n*  Character data\n*\n*-------------------------------\n dum Char\nCharPosn ds 1\nCharX ds 1\nCharY ds 1\nCharFace ds 1\nCharBlockX ds 1\nCharBlockY ds 1\nCharAction ds 1\nCharXVel ds 1\nCharYVel ds 1\nCharSeq ds 2\nCharScrn ds 1\nCharRepeat ds 1\nCharID ds 1\nCharSword ds 1\nCharLife ds 1\n\n dum Op\nOpPosn ds 1\nOpX ds 1\nOpY ds 1\nOpFace ds 1\nOpBlockX ds 1\nOpBlockY ds 1\nOpAction ds 1\nOpXVel ds 1\nOpYVel ds 1\nOpSeq ds 2\nOpScrn ds 1\nOpRepeat ds 1\nOpID ds 1\nOpSword ds 1\nOpLife ds 1\n\n dum Kid\nKidPosn ds 1\nKidX ds 1\nKidY ds 1\nKidFace ds 1\nKidBlockX ds 1\nKidBlockY ds 1\nKidAction ds 1\nKidXVel ds 1\nKidYVel ds 1\nKidSeq ds 2\nKidScrn ds 1\nKidRepeat ds 1\nKidID ds 1\nKidSword ds 1\nKidLife ds 1\n\n dum Shad\nShadPosn ds 1\nShadX ds 1\nShadY ds 1\nShadFace ds 1\nShadBlockX ds 1\nShadBlockY ds 1\nShadAction ds 1\nShadXVel ds 1\nShadYVel ds 1\nShadSeq ds 2\nShadScrn ds 1\nShadRepeat ds 1\nShadID ds 1\nShadSword ds 1\nShadLife ds 1\n\n dum FCharVars\nFCharImage ds 1\nFCharX ds 2\nFCharY ds 1\nFCharFace ds 1\nFCharIndex ds 1\nFCharCU ds 1\nFCharCD ds 1\nFCharCL ds 1\nFCharCR ds 1\nFCharTable ds 1\n\n dend\n\n*-------------------------------\n*\n*  Misc. data\n*\n*-------------------------------\nFcheckmark = %01000000\nFthinmark = %00100000\nFfootmark = %00011111\n\nfloorheight = 15\nangle = 7\nVertDist = 11\n\nUseFastlay = 0\nUseLay = 1\nUseLayrsave = 2\n\nTypeKid = 0\nTypeShad = 1\nTypeGd = 2\nTypeSword = 3\nTypeReflect = 4\nTypeComix = 5\nTypeFF = $80\n\n lst off\n"
  },
  {
    "path": "01 POP Source/Source/GRAFIX.S",
    "content": "* grafix\nCopyProtect = 1\nEditorDisk = 0\norg = $400\n tr on\n lst off\n lstdo off\n*-------------------------------\n*\n*  PRINCE OF PERSIA\n*  Copyright 1989 Jordan Mechner\n*\n*-------------------------------\n org org\n\n jmp GR\n jmp DRAWALL\n jmp CONTROLLER\n jmp dispversion\n jmp SAVEBLUE\n\n jmp RELOADBLUE\n jmp MOVEMEM\n jmp BUTTONS ;ed\n jmp GTONE\n jmp SETCENTER\n\n jmp DIMCHAR\n jmp CVTX\n jmp ZEROPEEL\n jmp ZEROPEELS\n jmp PREAD\n\n jmp ADDPEEL\n jmp COPYSCRN\n jmp SNGPEEL\n jmp RND\n jmp CLS\n\n jmp LAY\n jmp FASTLAY\n jmp LAYRSAVE\n jmp LRCLS\n jmp FASTMASK\n\n jmp FASTBLACK\n jmp PEEL\n jmp GETWIDTH\n jmp COPY2000\n jmp COPY2000MA\n\n jmp SETFASTAUX\n jmp SETFASTMAIN\n jmp LOADLEVEL\n jmp ATTRACTMODE\n jmp XMINIT\n\n jmp XMPLAY\n jmp CUTPRINCESS\n jmp XTITLE\n jmp COPY2000AM\n jmp RELOAD\n\n jmp LOADSTAGE2\n jmp RELOAD\n jmp GETSELECT\n jmp GETDESEL\n jmp EDREBOOT ;ed\n\n jmp GOBUILD ;ed\n jmp GOGAME ;ed\n jmp WRITEDIR ;ed\n jmp READDIR ;ed\n jmp SAVELEVEL ;ed\n\n jmp SAVELEVELG ;ed\n jmp ADDBACK\n jmp ADDFORE\n jmp ADDMID\n jmp ADDMIDEZ\n\n jmp ADDWIPE\n jmp ADDMSG\n jmp SAVEGAME\n jmp LOADGAME\n jmp ZEROLSTS\n\n jmp SCREENDUMP\n jmp MINIT\n jmp MPLAY\n jmp SAVEBINFO\n jmp RELOADBINFO\n\n jmp INVERTY\n jmp NORMSPEED\n jmp ADDMIDEZO\n jmp CALCBLUE\n jmp ZERORED\n\n jmp XPLAYCUT\n jmp CHECKIIGS\n jmp FASTSPEED\n jmp MUSICKEYS\n jmp DOSTARTGAME\n\n jmp EPILOG\n jmp LOADALTSET\n jmp XMOVEMUSIC\n jmp WHOOP\nVBLvect jmp VBLANK ;changed by InitVBLANK if IIc\n\n jmp VBLI ;VBL interrupt\n\n*-------------------------------\n lst\n put eq\n lst\n put gameeq\n lst\n put soundnames\n lst off\n*-------------------------------\n dum locals\n]temp\n]dest ds 2\n]source ds 2\n]endsourc ds 2\nindex ds 1\n\n dend\n\n*-------------------------------\n*  Apple soft switches\n\nIOUDISoff = $c07f\nIOUDISon = $c07e\nDHIRESoff = $c05f\nDHIRESon = $c05e\nHIRESon = $c057\nHIRESoff = $c056\nPAGE2on = $c055\nPAGE2off = $c054\nMIXEDon = $c053\nMIXEDoff = $c052\nTEXTon = $c051\nTEXToff = $c050\nALTCHARon = $c00f\nALTCHARoff = $c00e\nADCOLon = $c00d\nADCOLoff = $c00c\nALTZPon = $c009\nALTZPoff = $c008\nRAMWRTaux = $c005\nRAMWRTmain = $c004\nRAMRDaux = $c003\nRAMRDmain = $c002\nADSTOREon = $c001\nADSTOREoff = $c000\nRWBANK2 = $c083\nRWBANK1 = $c08b\nUSEROM = $c082\n\n*-------------------------------\n*  Key equates\n\nCTRL = $60\nESC = $9b\nDELETE = $7f\nSHIFT = $20\n\nksound = \"s\"-CTRL\nkmusic = \"n\"-CTRL\n\n*-------------------------------\n*  Joystick \"center\" width (increase for bigger center)\n\ncwidthx = 10 ;15\ncwidthy = 15 ;21\n\n*-------------------------------\n*  Addresses of character image tables\n*  (Bank: 2 = main, 3 = aux)\n\nchtabbank db 2,2,2,3,2,3,3\n\nchtablist db #>chtable1,#>chtable2,#>chtable3,#>chtable4\n db #>chtable5,#>chtable6,#>chtable7\n\ndummy db maxpeel,maxpeel\n\n*-------------------------------\n*\n*  A D D B A C K\n*\n*  Add an image to BACKGROUND image list\n*\n*  In: XCO, YCO, IMAGE (coded), OPACITY\n*\n*  IMAGE bit 7 specifies image table (0 = bgtable1,\n*  1 = bgtable2); low 6 bits = image # within table\n*\n*-------------------------------\nADDBACK ldx bgX ;# images already in list\n inx\n cpx #maxback\n bcs :rts ;list full (shouldn't happen)\n\n lda XCO\n sta bgX,x\n\n lda YCO\n cmp #192\n bcs :rts\n sta bgY,X\n\n lda IMAGE\n sta bgIMG,X\n\n lda OPACITY\n sta bgOP,X\n\n stx bgX\n:rts\n]rts rts\n\n*-------------------------------\n*\n*  A D D F O R E\n*\n*  Add an image to FOREGROUND image list\n*\n*  In: same as ADDBACK\n*\n*-------------------------------\nADDFORE ldx fgX\n inx\n cpx #maxfore\n bcs ]rts\n\n lda XCO\n sta fgX,X\n\n lda YCO\n cmp #192\n bcs ]rts\n sta fgY,X\n\n lda IMAGE\n sta fgIMG,X\n\n lda OPACITY\n sta fgOP,X\n\n stx fgX\n]rts rts\n\n*-------------------------------\n*\n*  A D D M S G\n*\n*  Add an image to MESSAGE image list (uses bg tables)\n*\n*  In:  XCO, OFFSET, YCO, IMAGE (coded), OPACITY (bit 6 coded)\n*\n*-------------------------------\nADDMSG ldx msgX\n inx\n cpx #maxmsg\n bcs ]rts\n\n lda XCO\n sta msgX,X\n lda OFFSET\n sta msgOFF,X\n\n lda YCO\n sta msgY,X\n\n lda IMAGE\n sta msgIMG,X\n\n lda OPACITY\n sta msgOP,X\n\n stx msgX\n]rts rts\n\n*-------------------------------\n*\n*  A D D  W I P E\n*\n*  Add image to wipe list\n*\n*  In: XCO, YCO, height, width; A = color\n*\n*-------------------------------\nADDWIPE ldx wipeX\n inx\n cpx #maxwipe\n bcs ]rts\n\n sta wipeCOL,x\n lda blackflag ;TEMP\n beq :1 ;\n lda #$ff ;\n sta wipeCOL,x ;\n:1\n lda XCO\n sta wipeX,x\n lda YCO\n sta wipeY,x\n\n lda height\n sta wipeH,x\n lda width\n sta wipeW,x\n\n stx wipeX\n]rts rts\n\n*-------------------------------\n*\n*  A D D   M I D\n*\n*  Add an image to mid table\n*\n*  In:  XCO, OFFSET, YCO, IMAGE, TABLE, OPACITY\n*       FCharFace, FCharCU-CD-CL-CR\n*       A = midTYP\n*\n*  midTYP bit 7: 1 = char tables, 0 = bg tables\n*  midTYP bits 0-6:\n*    0 = use fastlay (normal for floorpieces)\n*    1 = use lay alone\n*    2 = use lay with layrsave (normal for characters)\n*\n*  For char tables: IMAGE = image #, TABLE = table #\n*  For bg tables: IMAGE bits 0-6 = image #, bit 7 = table #\n*\n*-------------------------------\nADDMID ldx midX\n inx\n cpx #maxmid\n bcs ]rts\n\n sta midTYP,x\n\n lda XCO\n sta midX,x\n lda OFFSET\n sta midOFF,x\n\n lda YCO\n sta midY,x\n\n lda IMAGE\n sta midIMG,x\n\n lda TABLE\n sta midTAB,x\n\n lda FCharFace ;- left, + right\n eor #$ff ;+ normal, - mirror\n and #$80\n ora OPACITY\n sta midOP,x\n\n lda FCharCU\n sta midCU,x\n lda FCharCD\n sta midCD,x\n lda FCharCL\n sta midCL,x\n lda FCharCR\n sta midCR,x\n\n stx midX\n]rts rts\n\n*-------------------------------\n*\n*  ADDMID \"E-Z\" version\n*\n*  No offset, no mirroring, no cropping\n*\n*  In: XCO, YCO, IMAGE, TABLE, OPACITY\n*      A = midTYP\n*\n*-------------------------------\nADDMIDEZ lda #0\n sta OFFSET\nADDMIDEZO\n ldx midX\n inx\n cpx #maxmid\n bcs ]rts\n\n sta midTYP,x\n\n lda XCO\n sta midX,x\n lda OFFSET\n sta midOFF,x\n\n lda YCO\n sta midY,x\n\n lda IMAGE\n sta midIMG,x\n\n lda TABLE\n sta midTAB,x\n\n lda OPACITY\n sta midOP,x\n\n lda #0\n sta midCU,x\n sta midCL,x\n lda #40\n sta midCR,x\n lda #192\n sta midCD,x\n\n stx midX\n]rts rts\n\n*-------------------------------\n*\n*  A D D P E E L\n*\n*  (Call immediately after layrsave)\n*  Add newly generated image to peel list\n*\n*-------------------------------\nADDPEEL lda PEELIMG+1\n beq ]rts ;0 is layersave's signal to skip it\n\n lda PAGE\n beq :1\n\n do CopyProtect\n ldx purpleflag ;should be 1!\n lda dummy,x\n\n else\n lda #maxpeel\n fin\n\n:1 sta :sm+1 ;self-mod\n\n tax\n lda peelX,x ;# of images in peel list\n clc\n adc #1\n cmp #maxpeel\n bcs ]rts\n sta peelX,x\n clc\n:sm adc #0 ;0/maxpeel\n tax\n\n lda PEELXCO\n sta peelX,x\n lda PEELYCO\n sta peelY,x ;x & y coords of saved image\n\n lda PEELIMG\n sta peelIMGL,x\n lda PEELIMG+1\n sta peelIMGH,x ;2-byte image address (in peel buffer)\n\n]rts rts\n\n*-------------------------------\n*\n*  D R A W A L L\n*\n*  Draw everything in image lists\n*\n*  This is the only routine that calls HIRES routines.\n*\n*-------------------------------\nDRAWALL\n jsr DOGEN ;Do general stuff like cls\n\n lda blackflag ;TEMP\n bne :1 ;\n\n jsr SNGPEEL ;\"Peel off\" characters\n;(using the peel list we\n;set up 2 frames ago)\n\n:1 jsr ZEROPEEL ;Zero just-used peel list\n\n jsr DRAWWIPE ;Draw wipes\n\n jsr DRAWBACK ;Draw background plane images\n\n jsr DRAWMID ;Draw middle plane images\n;(& save underlayers to now-clear peel list)\n\n jsr DRAWFORE ;Draw foreground plane images\n\n jmp DRAWMSG ;Draw messages\n\n*-------------------------------\n*\n*  D O  G E N\n*\n*  Do general stuff like clear screen\n*\n*-------------------------------\nDOGEN\n lda genCLS\n beq :1\n jsr cls\n\n* purple copy-protection\n\n:1 ldx BGset1\n cpx #1\n bne ]rts\n lda #0\n sta dummy-1,x\n\n]rts rts\n\n*-------------------------------\n*\n*  D R A W W I P E\n*\n*  Draw wipe list (using \"fastblack\")\n*\n*-------------------------------\nDRAWWIPE\n lda wipeX ;# of images in list\n beq ]rts ;list is empty\n\n lda #1 ;start with image #1\n:loop pha\n tax\n\n lda wipeH,x\n sta IMAGE ;height\n lda wipeW,x\n sta IMAGE+1 ;width\n lda wipeX,X\n sta XCO ;x-coord\n lda wipeY,X\n sta YCO ;y-coord\n lda wipeCOL,X\n sta OPACITY ;color\n jsr fastblack\n\n pla\n clc\n adc #1\n cmp wipeX\n bcc :loop\n beq :loop\n]rts rts\n\n*-------------------------------\n*\n*  D R A W B A C K\n*\n*  Draw b.g. list (using fastlay)\n*\n*-------------------------------\nDRAWBACK lda bgX ;# of images in list\n beq ]rts\n\n ldx #1\n:loop stx index\n\n lda bgIMG,x\n sta IMAGE ;coded image #\n jsr setbgimg ;extract TABLE, BANK, IMAGE\n\n lda bgX,x\n sta XCO\n lda bgY,X\n sta YCO\n lda bgOP,x\n sta OPACITY\n jsr fastlay\n\n ldx index\n inx\n cpx bgX\n bcc :loop\n beq :loop\n]rts rts\n\n*-------------------------------\n*\n*  D R A W F O R E\n*\n*  Draw foreground list (using fastmask/fastlay)\n*\n*-------------------------------\nDRAWFORE lda fgX\n beq ]rts\n\n ldx #1\n:loop stx index\n\n lda fgIMG,x\n sta IMAGE\n jsr setbgimg\n\n lda fgX,x\n sta XCO\n lda fgY,x\n sta YCO\n\n lda fgOP,x ;opacity\n cmp #mask\n bne :1\n jsr fastmask\n jmp :cont\n\n:1 sta OPACITY ;fastlay for everything else\n jsr fastlay\n\n:cont ldx index\n inx\n cpx fgX\n bcc :loop\n beq :loop\n]rts rts\n\n*-------------------------------\n*\n*  S N G   P E E L\n*\n*  Draw peel list (in reverse order) using \"peel\" (fastlay)\n*\n*-------------------------------\nSNGPEEL\n ldx PAGE\n beq :1\n ldx #maxpeel\n:1 stx :sm+1\n lda peelX,x ;# of images in list\n beq ]rts\n\n:loop pha\n clc\n:sm adc #0 ;self-mod: 0 or maxpeel\n tax\n\n lda peelIMGL,x\n sta IMAGE\n lda peelIMGH,x\n sta IMAGE+1\n lda peelX,x\n sta XCO\n lda peelY,x\n sta YCO\n lda #sta\n sta OPACITY\n jsr peel\n\n pla\n sec\n sbc #1\n bne :loop\n]rts rts\n\n*-------------------------------\n*\n*  D R A W M I D\n*\n*  Draw middle list (floorpieces & characters)\n*\n*-------------------------------\nDRAWMID\n lda midX ;# of images in list\n beq ]rts\n\n ldx #1\n:loop stx index\n\n lda midIMG,x\n sta IMAGE\n lda midTAB,x\n sta TABLE\n lda midX,x\n sta XCO\n lda midY,x\n sta YCO\n lda midOP,x\n sta OPACITY\n\n lda midTYP,x ;+ use bg tables\n bmi :UseChar ;- use char tables\n jsr setbgimg ;protects A,X\n jmp :GotTable\n\n:UseChar jsr setcharimg ;protects A,X\n\n:GotTable ;A = midTYP,x\n and #$7f ;low 7 bits: 0 = fastlay, 1 = lay, 2 = layrsave\n beq :fastlay\n cmp #1\n beq :lay\n cmp #2\n beq :layrsave\n\n:Done ldx index\n inx\n cpx midX\n bcc :loop\n beq :loop\n]rts rts\n\n* midTYP values:\n*    0 = use fastlay (normal for floorpieces)\n*    1 = use lay alone\n*    2 = use lay with layrsave (normal for characters)\n\n:fastlay\n jsr fastlay\n jmp :Done\n\n:layrsave\n jsr :setaddl ;set additional params for lay\n\n jsr layrsave ;save underlayer in peel buffer\n jsr ADDPEEL ;& add to peel list\n\n jsr lay ;then lay down image\n\n jmp :Done\n\n:lay jsr :setaddl\n jsr lay\n jmp :Done\n\n:setaddl lda midOFF,x\n sta OFFSET\n lda midCL,x\n sta LEFTCUT\n lda midCR,x\n sta RIGHTCUT\n lda midCU,x\n sta TOPCUT\n lda midCD,x\n sta BOTCUT\n rts\n\n*-------------------------------\n*\n*  D R A W M S G\n*\n*  Draw message list (using bg tables & lay)\n*\n*  OPACITY bit 6: 1 = layrsave, 0 = no layrsave\n*\n*-------------------------------\nDRAWMSG\n lda msgX\n beq ]rts\n\n ldx #1\n:loop stx index\n\n lda msgIMG,x\n sta IMAGE\n jsr setbgimg\n\n lda msgX,x\n sta XCO\n lda msgOFF,x\n sta OFFSET\n lda msgY,x\n sta YCO\n\n lda #0\n sta LEFTCUT\n sta TOPCUT\n lda #40\n sta RIGHTCUT\n lda #192\n sta BOTCUT\n\n lda msgOP,x\n sta OPACITY\n and #%01000000\n beq :1\n lda OPACITY\n and #%10111111 ;bit 6 set: use layrsave\n sta OPACITY\n\n jsr layrsave\n jsr ADDPEEL\n\n:1 jsr lay\n\n ldx index\n inx\n cpx msgX\n bcc :loop\n beq :loop\n]rts rts\n\n*-------------------------------\n*\n*  S E T   B  G   I M A G E\n*\n*  In: IMAGE = coded image #\n*  Out: BANK, TABLE, IMAGE set for hires call\n*\n*  Protect A,X\n*\n*-------------------------------\nsetbgimg\n tay\n\n lda #3 ;auxmem\n sta BANK\n\n lda #0\n sta TABLE\n\n lda IMAGE ;Bit 7: 0 = bgtable1, 1 = bgtable2\n bpl :bg1\n\n and #$7f\n sta IMAGE\n\n lda #>bgtable2\n bne :ok\n\n:bg1 lda #>bgtable1\n:ok sta TABLE+1\n\n tya\n rts\n\n*-------------------------------\n*\n*  S E T   C H A R   I M A G E\n*\n*  In: TABLE = chtable # (0-7)\n*  Out: BANK, TABLE set for hires call\n*\n*  Protect A,X\n*\n*-------------------------------\nsetcharimg\n pha\n\n ldy TABLE\n lda chtabbank,y\n sta BANK\n\n lda #0\n sta TABLE\n lda chtablist,y\n sta TABLE+1\n\n pla\n rts\n\n*-------------------------------\n*\n*  D I M C H A R\n*\n*  Get dimensions of character\n*  (Misc. routine for use by CTRL)\n*\n*  In: A = image #, X = table #\n*  Out: A = width, X = height\n*\n*-------------------------------\nDIMCHAR\n sta IMAGE\n stx TABLE\n jsr setcharimg\n jmp getwidth\n\n*-------------------------------\n*\n*  C V T X\n*\n*  Convert X-coord to byte & offset\n*  Works for both single & double hires\n*\n*  In: XCO/OFFSET = X-coord (2 bytes)\n*  Out: XCO/OFFSET = byte/offset\n*\n*  Hires scrn: X-coord range 0-279, byte range 0-39\n*  Dbl hires scrn: X-coord range 0-559, byte range 0-79\n*\n*  Trashes Y-register\n*\n*  Returns accurate results for all input (-32767 to 32767)\n*  but wildly offscreen values will slow it down\n*\n*-------------------------------\n]XL = XCO\n]XH = OFFSET\n\nrange = 36*7 ;largest multiple of 7 under 256\n\nCVTX\n lda #0\n sta ]temp\n\n lda ]XH\n bmi :negative ;X < 0\n beq :ok ;0 <= X <= 255\n\n:loop lda ]temp\n clc\n adc #36\n sta ]temp\n\n lda ]XL\n sec\n sbc #range\n sta ]XL\n\n lda ]XH\n sbc #0\n sta ]XH\n\n bne :loop\n\n:ok ldy ]XL\n lda ByteTable,y\n clc\n adc ]temp\n sta XCO\n\n lda OffsetTable,y\n sta OFFSET\n rts\n\n:negative\n lda ]temp\n sec\n sbc #36\n sta ]temp\n\n lda ]XL\n clc\n adc #range\n sta ]XL\n\n lda ]XH\n adc #0\n sta ]XH\n bne :negative\n beq :ok\n]rts rts\n\n*-------------------------------\n*\n*  Z E R O L I S T S\n*\n*  Zero image lists (except peel lists)\n*\n*-------------------------------\nZEROLSTS lda #0\n sta genCLS\n sta wipeX\n sta bgX\n sta midX\n sta objX\n sta fgX\n sta msgX\n rts\n\n*-------------------------------\n*\n*  Zero both peel lists\n*\n*-------------------------------\nZEROPEELS\n lda #0\n sta peelX\n sta peelX+maxpeel\n]rts rts\n\n*-------------------------------\n*\n*  Z E R O P E E L\n*\n*  Zero peel list & buffer for whichever page we're on\n*\n*  (Point PEELBUF to beginning of appropriate peel buffer\n*  & set #-of-images byte to zero)\n*\n*-------------------------------\nZEROPEEL\n lda #0\n ldx PAGE\n beq :page1\n:page2 sta peelX+maxpeel\n lda #peelbuf2\n sta PEELBUF\n lda #>peelbuf2\n sta PEELBUF+1\n rts\n\n:page1 sta peelX\n lda #peelbuf1\n sta PEELBUF\n lda #>peelbuf1\n sta PEELBUF+1\n rts\n\n*-------------------------------\n*\n*  Joystick/keyboard routines\n*\n*-------------------------------\n*\n*  Get input from selected/deselected device\n*\n*  In: kbdX, kbdY, joyX, joyY, BTN0, BTN1, ManCtrl\n*\n*  Out: JSTKX, JSTKY, btn\n*\n*-------------------------------\nGETSELECT\n lda joyon ;joystick selected?\n bne getjoy ;yes--use jstk\n beq getkbd ;no--use kbd\n\nGETDESEL\n lda joyon\n bne getkbd\n beq getjoy\n\ngetjoy lda joyX\n sta JSTKX\n lda joyY\n sta JSTKY\n\n lda BTN1\n ldx ManCtrl ;When manual ctrl is on, btn 0 belongs\n bmi :1 ;to kbd and btn 1 to jstk.  With manual ctrl\n ora BTN0 ;off, btns can be used interchangeably.\n:1 sta btn\n rts\n\ngetkbd lda kbdX\n sta JSTKX\n lda kbdY\n sta JSTKY\n\n lda BTN0\n ldx ManCtrl\n bmi :1\n ora BTN1\n:1 sta btn\n]rts rts\n\n*-------------------------------\n*\n*  Read controller (jstk & buttons)\n*\n*  Out: joyX-Y, BTN0-1\n*\n*-------------------------------\nCONTROLLER\n jsr JREAD ;read jstk\n\n jmp BREAD ;& btns\n\n*-------------------------------\n*\n*  Read joystick\n*\n*  Out: joyX-Y\n*\n*  joyX: -1 = left, 0 = center, +1 = right\n*  joyY: -1 = up, 0 = center, +1 = down\n*\n*-------------------------------\nJREAD\n lda joyon\n beq ]rts\n jsr PREAD ;read game pots\n\n ldx #0\n jsr cvtpdl\n inx\n jsr cvtpdl\n\n* Reverse joyY?\n\n lda jvert\n beq :1\n\n lda #0\n sec\n sbc joyY\n sta joyY\n\n* Reverse joyX?\n\n:1 lda jhoriz\n beq ]rts\n\n lda #0\n sec\n sbc joyX\n sta joyX\n]rts rts\n\n*-------------------------------\n*\n*  Read buttons\n*\n*  Out: BTN0-1\n*\n*-------------------------------\nBREAD\n lda jbtns\n bne :1 ;buttons switched\n\n lda $c061\n ldx $c062\n:2 sta BTN0\n stx BTN1\n rts\n\n:1 ldx $c062\n lda $c061\n jmp :2\n\n*-------------------------------\n*\n*  (Temp routine--for builder only)\n*\n*-------------------------------\nBUTTONS\n do EditorDisk\n ldx BTN0 ;\"raw\"\n lda #0\n sta BUTT0\n lda b0down ;last button value\n stx b0down\n and #$80\n bne :rdbtn1\n stx BUTT0\n\n:rdbtn1 ldx BTN1\n lda #0\n sta BUTT1\n lda b1down\n stx b1down\n and #$80\n bne :rdjup\n stx BUTT1\n\n:rdjup lda joyY\n bmi ]rts\n lda #0\n sta JSTKUP ;jstk is not up--clear JSTKUP\n fin\n\n]rts rts\n\n*-------------------------------\n*\n*  Convert raw counter value (approx. 0-70) to -1/0/1\n*\n*  In: X = paddle # (0 = horiz, 1 = vert)\n*\n*-------------------------------\ncvtpdl\n lda joyX,x\n cmp jthres1x,x\n bcs :1\n lda #-1\n bne :3\n:1 cmp jthres2x,x\n bcs :2\n lda #0\n beq :3\n:2 lda #1\n:3 sta joyX,x\n]rts rts\n\n*-------------------------------\n*\n*  Read game pots\n*\n*  Out: Raw counter values (approx. 0-70) in joyX-Y\n*\n*-------------------------------\nPREAD\n lda #0\n sta joyX\n sta joyY\n\n lda $c070 ;Reset timers\n\n:loop ldx #1\n:1 lda $c064,x ;Check timer input\n bpl :beat\n inc joyX,x ;Still high; increment counter\n:nextpdl dex\n bpl :1\n\n lda $C064\n ora $C065\n bpl ]rts ;Both inputs low: we're done\n\n lda joyX\n ora joyY\n bpl :loop ;Do it again\n]rts rts\n\n:beat nop\n bpl :nextpdl ;Kill time\n\n*-------------------------------\n*\n*  Select jstk & define current joystick posn as center\n*\n*  Out: jthres1-2x, jthres1-2y\n*\n*-------------------------------\nSETCENTER\n jsr normspeed ;IIGS\n\n lda #$ff\n sta joyon ;Joystick on\n\n lda #0\n sta jvert\n sta jhoriz\n sta jbtns ;set normal params\n\n jsr PREAD ;get raw jstk values\n\n lda joyX\n ora joyY\n bmi :nojoy ;No joystick connected\n\n lda joyX\n sec\n sbc #cwidthx\n sta jthres1x\n lda joyX\n clc\n adc #cwidthx\n sta jthres2x\n\n lda joyY\n sec\n sbc #cwidthy\n sta jthres1y\n lda joyY\n clc\n adc #cwidthy\n sta jthres2y\n rts\n\n:nojoy lda #0\n sta joyon\n]rts rts\n\n*-------------------------------\n*\n*  Move a block of memory\n*\n*  In: A < X.Y\n*\n*  20 < 40.60 means 2000 < 4000.5fffm\n*  WARNING: If x >= y, routine will wipe out 64k\n*\n*-------------------------------\nMOVEMEM sta ]dest+1\n stx ]source+1\n sty ]endsourc+1\n\n ldy #0\n sty ]dest\n sty ]source\n sty ]endsourc\n\n:loop lda (]source),y\n sta (]dest),y\n iny\n bne :loop\n\n inc ]source+1\n inc ]dest+1\n lda ]source+1\n cmp ]endsourc+1\n bne :loop\n rts\n\n*-------------------------------\n*\n*  G  T  O  N  E\n*\n*  Call this routine to confirm special-key presses\n*  & any other time we want to bypass normal sound interface\n*\n*-------------------------------\nSK1Pitch = 15\nSK1Dur = 50\n\nGTONE ldy #SK1Pitch\n ldx #>SK1Pitch\n lda #SK1Dur\n jmp tone\n\n*-------------------------------\n*\n*  Whoop speaker (like RW18)\n*\n*-------------------------------\nWHOOP\n ldy #0\n:1 tya\n bit $c030\n:2 sec\n sbc #1\n bne :2\n dey\n bne :1\n]rts rts\n\n*-------------------------------\n*\n*  Produce tone\n*\n*  In: y-x = pitch lo-hi\n*      a = duration\n*\n*-------------------------------\ntone\n sty :pitch\n stx :pitch+1\n:outloop bit $c030\n ldx #0\n:midloop ldy #0\n:inloop iny\n cpy :pitch\n bcc :inloop\n inx\n cpx :pitch+1\n bcc :midloop\n sec\n sbc #1\n bne :outloop\n rts\n\n:pitch ds 2\n\n*-------------------------------\n*\n* Copy one hires page to the other\n*\n* In: PAGE = dest scrn (00/20)\n*\n*-------------------------------\nCOPYSCRN\n lda PAGE\n clc\n adc #$20\n sta IMAGE+1 ;dest addr\n eor #$60\n sta IMAGE ;org addr\n\n jmp copy2000\n\n*-------------------------------\n*\n*  Generate random number\n*\n*  RNDseed := (5 * RNDseed + 23) mod 256\n*\n*-------------------------------\nRND\n lda RNDseed\n asl\n asl\n clc\n adc RNDseed\n clc\n adc #23\n sta RNDseed\n]rts rts\n\n*-------------------------------\n*\n*  Calls to hires & master routines\n*\n*  Hires & master routines are in main lc & use main zp;\n*  rest of code uses aux lc, zp.\n*\n*-------------------------------\n*\n*  Master\n*\n*-------------------------------\nLOADLEVEL sta ALTZPoff ;main l.c.\n jsr _loadlevel\n sta ALTZPon ;aux l.c.\n rts\n\nATTRACTMODE sta ALTZPoff\n jsr _attractmode\n sta ALTZPon\n rts\n\nCUTPRINCESS sta ALTZPoff\n jsr _cutprincess\n sta ALTZPon\n rts\n\nRELOAD sta ALTZPoff\n jsr _reload\n sta ALTZPon\n rts\n\nLOADSTAGE2 sta ALTZPoff\n jsr _loadstage2\n sta ALTZPon\n rts\n\nSAVEGAME sta ALTZPoff\n jsr _savegame\n sta ALTZPon\n rts\n\nLOADGAME sta ALTZPoff\n jsr _loadgame\n sta ALTZPon\n rts\n\nDOSTARTGAME sta ALTZPoff\n jmp _dostartgame\n\nEPILOG sta ALTZPoff\n jmp _epilog\n\nLOADALTSET sta ALTZPoff\n jsr _loadaltset\n sta ALTZPon\n rts\n\nSCREENDUMP sta ALTZPoff\n jsr _screendump\n sta ALTZPon\n rts\n\n*-------------------------------\n*\n* Edmaster (editor disk only)\n*\n*-------------------------------\n do EditorDisk\n\nSAVELEVEL sta ALTZPoff\n jsr _savelevel\n sta ALTZPon\n rts\n\nSAVELEVELG sta ALTZPoff\n jsr _savelevelg\n sta ALTZPon\n rts\n\nREADDIR sta ALTZPoff\n jsr _readdir\n sta ALTZPon\n rts\n\nWRITEDIR sta ALTZPoff\n jsr _writedir\n sta ALTZPon\n rts\n\nGOBUILD sta ALTZPoff\n jsr _gobuild\n sta ALTZPon\n rts\n\nGOGAME sta ALTZPoff\n jsr _gogame\n sta ALTZPon\n rts\n\nEDREBOOT sta ALTZPoff\n jsr _edreboot\n sta ALTZPon\n rts\n\n else\nSAVELEVEL\nSAVELEVELG\nREADDIR\nWRITEDIR\nGOBUILD\nGOGAME\nEDREBOOT rts\n fin\n\n*-------------------------------\n*\n*  Hires\n*\n*-------------------------------\nCLS jsr prehr\n sta ALTZPoff\n jsr _cls\n sta ALTZPon\n rts\n\nLAY jsr prehr\n sta ALTZPoff\n jsr _lay\n sta ALTZPon\n rts\n\nFASTLAY jsr prehr\n sta ALTZPoff\n jsr _fastlay\n sta ALTZPon\n rts\n\nLAYRSAVE jsr prehr\n sta ALTZPoff\n jsr _layrsave\n sta ALTZPon\n jmp posthr\n\nLRCLS sta scrncolor ;In: A = screen color\n sta ALTZPoff\n jsr _lrcls\n sta ALTZPon\n rts\n\nFASTMASK jsr prehr\n sta ALTZPoff\n jsr _fastmask\n sta ALTZPon\n rts\n\nFASTBLACK jsr prehr\n sta ALTZPoff\n jsr _fastblack\n sta ALTZPon\n rts\n\nPEEL jsr prehr\n sta ALTZPoff\n jsr _peel\n sta ALTZPon\n rts\n\nGETWIDTH jsr prehr\n sta ALTZPoff\n jsr _getwidth\n sta ALTZPon\n rts\n\nCOPY2000 jsr prehr\n sta ALTZPoff\n jsr _copy2000\n sta ALTZPon\n rts\n\nCOPY2000AM jsr prehr\n sta ALTZPoff\n jsr _copy2000am\n sta ALTZPon\n rts\n\nCOPY2000MA jsr prehr\n sta ALTZPoff\n jsr _copy2000ma\n sta ALTZPon\n rts\n\nSETFASTAUX\n sta ALTZPoff\n jsr _setfastaux\n sta ALTZPon\n rts\n\nSETFASTMAIN\n sta ALTZPoff\n jsr _setfastmain\n sta ALTZPon\n rts\n\nINVERTY\n sta ALTZPoff\n jsr _inverty\n sta ALTZPon\n rts\n\n*-------------------------------\n*\n*  Call sound routines (in aux l.c. bank 1)\n*  Exit with bank 2 switched in\n*\n*-------------------------------\n]bank1in bit RWBANK1\n bit RWBANK1\n rts\n\nMINIT jsr ]bank1in\n jsr CALLMINIT\n]bank2in bit RWBANK2\n bit RWBANK2\n rts\n\nMPLAY jsr ]bank1in\n jsr CALLMPLAY\n jmp ]bank2in\n\n*-------------------------------\n*\n*  Call aux l.c. routines from MASTER (main l.c.)\n*\n*-------------------------------\nXMINIT sta ALTZPon\n jsr MINIT\n sta ALTZPoff\n rts\n\nXMPLAY sta ALTZPon\n jsr MPLAY\n sta ALTZPoff\n rts\n\nXTITLE sta ALTZPon\n jsr titlescreen\n sta ALTZPoff\n rts\n\nXPLAYCUT sta ALTZPon\n jsr playcut ;in subs\n sta ALTZPoff\n rts\n\nXMOVEMUSIC sta ALTZPon\n jsr movemusic ;in misc\n sta ALTZPoff\n rts\n\n*-------------------------------\n*\n* Copy hires params from aux to main z.p.\n*\n* (Enter & exit w/ ALTZP on)\n*\n*-------------------------------\nprehr\n ldx #$17\n:loop sta ALTZPon ;aux zp\n lda $00,x\n sta ALTZPoff ;main zp\n sta $00,x\n dex\n bpl :loop\n sta ALTZPon\n rts\n\n*-------------------------------\n*\n* Copy hires params from main to aux z.p.\n*\n* (Enter & exit w/ ALTZP on)\n*\n*-------------------------------\nposthr\n ldx #$17\n:loop sta ALTZPoff\n lda $00,x\n sta ALTZPon\n sta $00,x\n dex\n bpl :loop\n]rts rts\n\n*-------------------------------\n*\n*  Save master copy of blueprint in l.c. bank 1\n*\n*-------------------------------\nSAVEBLUE\n jsr ]bank1in\n lda #>$d700\n ldx #>$b700\n ldy #>$b700+$900\n jsr movemem\n jmp ]bank2in\n\nSAVEBINFO\n jsr ]bank1in\n lda #>$d000\n ldx #>$a600\n ldy #>$a600+$600\n jsr movemem\n jmp ]bank2in\n\n*-------------------------------\n*\n* Reload master copy of blueprint from l.c. bank 1\n*\n*-------------------------------\nRELOADBLUE\n jsr ]bank1in\n lda #>$b700\n ldx #>$d700\n ldy #>$d700+$900\n jsr movemem\n jmp ]bank2in\n\nRELOADBINFO\n jsr ]bank1in\n lda #>$a600\n ldx #>$d000\n ldy #>$d000+$600\n jsr movemem\n jmp ]bank2in\n\n*-------------------------------\n*\n*  Display lo-res page 1\n*\n*-------------------------------\nGR jmp gtone ;temp!\n\n*-------------------------------\n* The following routines properly belong to FRAMEADV\n* but have been moved here for lack of space\n*-------------------------------\n*\n*  C A L C   B L U E\n*\n*  Given:  screen #, 1-24 (in acc)\n*  Return: start of BLUETYPE table (in BlueType)\n*          start of BLUESPEC table (in BlueSpec)\n*\n*  If A = 0...\n*    In game: returns garbage\n*    In builder: returns menu data\n*\n*-------------------------------\nCALCBLUE\n cmp #0\n beq calcmenu\n\n sec\n sbc #1 ;reduce to 0-23\n asl\n tax ;x2\n\n lda Mult30,x\n clc\n adc #blueprnt\n sta BlueType\n\n lda Mult30+1,x\n adc #>blueprnt\n sta BlueType+1\n\n lda BlueType\n clc\n adc #24*30\n sta BlueSpec\n\n lda BlueType+1\n adc #>24*30\n sta BlueSpec+1\n\n]rts rts\n\ncalcmenu\n lda #menutype\n sta BlueType\n lda #>menutype\n sta BlueType+1\n\n lda #menuspec\n sta BlueSpec\n lda #>menuspec\n sta BlueSpec+1\n rts\n\n*-------------------------------\n*\n*  Z E R O   R E D\n*\n*  zero redraw buffers\n*\n*-------------------------------\nZERORED\n lda #0\n ldy #29\n:loop sta redbuf,y\n sta fredbuf,y\n sta floorbuf,y\n sta halfbuf,y\n sta wipebuf,y\n sta movebuf,y\n sta objbuf,y\n dey\n bpl :loop\n\n ldy #9\n:loop2 sta topbuf,y\n dey\n bpl :loop2\n\n rts\n\n*-------------------------------\n*\n*  Routines to interface with MSYS (Music System II)\n*\n*-------------------------------\n*\n* Switch zero page\n*\n*-------------------------------\nswitchzp\n ldx #31\n:loop ldy savezp,x\n lda $00,x\n sta savezp,x\n tya\n sta $00,x\n dex\n bpl :loop\n rts\n\n*-------------------------------\n*\n*  Call MINIT\n*\n*  In: A = song #\n*\n*-------------------------------\nCALLMINIT\n pha\n jsr switchzp\n pla\n jsr _minit\n jmp switchzp\n\n*-------------------------------\n*\n*  Call MPLAY\n*\n*  Out: A = song #\n*  (Most songs set song # = 0 when finished)\n*\n*-------------------------------\nCALLMPLAY\n lda soundon\n and musicon\n beq :silent\n\n jsr switchzp\n jsr _mplay ;returns INDEX\n pha\n jsr switchzp\n pla\n rts\n\n:silent lda #0\n]rts rts\n\n*-------------------------------\n*\n*  M U S I C   K E Y S\n*\n*  Call while music is playing\n*\n*  Esc to pause, Ctrl-S to turn sound off\n*  Return A = ASCII value (FF for button)\n*  Clear hibit if it's a key we've handled\n*\n*-------------------------------\nMUSICKEYS\n lda $c000\n sta keypress\n bpl :nokey\n sta $c010\n\n cmp #ESC\n bne :cont\n:froze lda $c000\n sta keypress\n bpl :froze\n sta $c010\n cmp #ESC\n bne :cont\n and #$7f\n rts\n\n:cont cmp #ksound\n bne :3\n lda soundon\n eor #1\n sta soundon\n:21 beq :2\n jsr gtone\n:2 lda #0\n rts\n\n:3 cmp #kmusic\n bne :1\n lda musicon\n eor #1\n sta musicon\n jmp :21\n\n:nobtn lda keypress\n rts\n:1\n:nokey lda $c061\n ora $c062\n bpl :nobtn\n lda #$ff\n]rts rts\n\n*===============================\nvblflag ds 1\n*-------------------------------\n*\n* Wait for vertical blank (IIe/IIGS)\n*\n*-------------------------------\nVBLANK\n:loop1 lda $c019\n bpl :loop1\n:loop lda $c019\n bmi :loop ;wait for beginning of VBL interval\n]rts rts\n\n*-------------------------------\n*\n* Wait for vertical blank (IIc)\n*\n*-------------------------------\nVBLANKIIc\n cli ;enable interrupts\n\n:loop1 bit vblflag\n bpl :loop1 ;wait for vblflag = 1\n lsr vblflag ;...& set vblflag = 0\n\n:loop2 bit vblflag\n bpl :loop2\n lsr vblflag\n\n sei\n rts\n\n* Interrupt jumps to ($FFFE) which points back to VBLI\n\nVBLI\n bit $c019\n sta $c079 ;enable IOU access\n sta $c05b ;enable VBL int\n sta $c078 ;disable IOU access\n sec\n ror vblflag ;set hibit\n:notvbl rti\n\n*-------------------------------\n*\n* Initialize VBLANK vector with correct routine\n* depending on whether or not machine is IIc\n*\n*-------------------------------\nInitVBLANK\n lda $FBC0\n bne ]rts ;not a IIc--use VBLANK\n\n sta RAMWRTaux\n\n lda #VBLANKIIc\n sta VBLvect+1\n lda #>VBLANKIIc\n sta VBLvect+2\n\n sei ;disable interrupts\n sta $c079 ;enable IOU access\n sta $c05b ;enable VBL int\n sta $c078 ;disable IOU access\n\n]rts rts\n\n*-------------------------------\n*\n*  Is this a IIGS?\n*\n*  Out: IIGS (0 = no, 1 = yes)\n*       If yes, set control panel to default settings\n*       Exit w/RAM bank 2 switched in\n*\n*  Also initializes VBLANK routine\n*\n*-------------------------------\nCHECKIIGS\n do EditorDisk\n else\n\n bit USEROM\n bit USEROM\n\n lda $FBB3\n cmp #6\n bne * ;II/II+/III--we shouldn't even be here\n sec\n jsr $FE1F\n bcs :notGS\n\n lda #1\n bne :set\n\n:notGS lda #0\n:set sta IIGS\n\n jsr InitVBLANK\n\n bit RWBANK2\n bit RWBANK2\n]rts rts\n\n*-------------------------------\n*\n*  Temporarily set fast speed (IIGS)\n*\n*-------------------------------\n xc\nFASTSPEED\n lda IIGS\n beq ]rts\n\n lda #$80\n tsb $C036 ;fast speed\n]rts rts\n\n*-------------------------------\n*\n* Restore speed to normal (& bg & border to black)\n*\n*-------------------------------\nNORMSPEED\n lda IIGS\n beq ]rts\n\n xc\n lda $c034\n and #$f0\n sta $c034 ;black border\n\n lda #$f0\n sta $c022 ;black bg, white text\n\n lda #$80\n trb $c036 ;normal speed\n xc off\n\n rts\n\n*-------------------------------\n*\n*  Read control panel parameter (IIGS)\n*\n*  In: Y = location\n*  Out: A = current setting\n*\n*-------------------------------\n xc\n xc\ngetparam\n lda IIGS\n beq ]rts\n\n clc\n xce\n rep $30\n pha\n phy\n ldx #$0C03\n hex 22,00,00,E1 ;jsl E10000\n pla\n sec\n xce\n tay\n rts\n\n*-------------------------------\n*\n* Set control panel parameter (IIGS only)\n*\n* In: A = desired value, Y = location\n*\n*-------------------------------\nsetparam\n clc\n xce\n rep $30\n and #$ff\n pha\n phy\n ldx #$B03\n hex 22,00,00,E1 ;jsl E10000\n sec\n xce\n rts\n\n xc off\n\n*-------------------------------\n lst\neof ds 1\n usr $a9,4,$0000,*-org\n lst off\n"
  },
  {
    "path": "01 POP Source/Source/HIRES.S",
    "content": "* hires\norg = $ee00\n tr on\n lst off\n*-------------------------------\n*\n*  PRINCE OF PERSIA\n*  Copyright 1989 Jordan Mechner\n*\n*-------------------------------\n org org\n\n jmp boot3\n jmp cls\n jmp lay\n jmp fastlay\n jmp layrsave\n\n jmp lrcls\n jmp fastmask\n jmp fastblack\n jmp peel\n jmp getwidth\n\n jmp copyscrnMM\n jmp copyscrnAA\n jmp SETFASTAUX\n jmp SETFASTMAIN\n jmp copyscrnMA\n\n jmp copyscrnAM\n jmp INVERTY\n\n*-------------------------------\n put hrparams\n\n*-------------------------------\nboot3 = $f880 ;stage 3 boot\n\npeelbuf1 = $d000\npeelbuf2 = $d600\n\n* Local vars\n\nlocals = $f0\nlocals2 = $18\n\n dum locals\n\nBASE ds 2\nIMSAVE ds 2\nXSAVE ds 1\nYSAVE ds 1\nWIDTH ds 1\nHEIGHT ds 1\nTOPEDGE ds 1\nOFFLEFT ds 1\nOFFRIGHT ds 1\nYREG ds 1\nCARRY ds 1\n\n dum locals2\nindex\nztemp\nAMASK ds 1\nBMASK ds 1\nVISWIDTH ds 1\nRMOST ds 1\ncarryim ds 1\nimbyte ds 1\n\n dend\n\n* OPACITY codes\n\nand = 0\nora = 1\nsta = 2\neor = 3 ;OR/shift/XOR\nmask = 4 ;mask/OR\n\n*-------------------------------\n*\n* Assume hires routines are called from auxmem\n* (Exit with RAMRD, RAMWRT, ALTZP on)\n*\n*-------------------------------\n\ncls jsr mainmem\n jsr CLS\n jmp auxmem\n\nlay jsr mainmem\n jsr LAY\n jmp auxmem\n\nfastlay\n jsr FASTLAY\n jmp auxmem\n\nlayrsave jsr mainmem\n jsr LAYRSAVE\n jmp auxmem\n\nlrcls jsr mainmem\n jsr LRCLS\n jmp auxmem\n\nfastmask\n  jsr FASTMASK\n jmp auxmem\n\nfastblack jsr mainmem\n jsr FASTBLACK\n jmp auxmem\n\npeel\n jsr PEEL\n jmp auxmem\n\ngetwidth jsr mainmem\n jsr GETWIDTH\n jmp auxmem\n\ncopyscrnMM\n jsr mainmem ;r/w main\n]copyscrn jsr COPYSCRN\n jmp auxmem\n\ncopyscrnAA\n jsr auxmem ;r/w aux\n jmp ]copyscrn\n\ncopyscrnMA\n sta $c002 ;read main\n sta $c005 ;write aux\n jmp ]copyscrn\n\ncopyscrnAM\n sta $c003 ;read aux\n sta $c004 ;write main\n jmp ]copyscrn\n\n*-------------------------------\nmainmem sta $c004 ;RAMWRT off\n sta $c002 ;RAMRD off\n rts\n\nauxmem sta $c005 ;RAMWRT on\n sta $c003 ;RAMRD on\n rts\n\n*-------------------------------\n*\n*  Parameters passed to hires routines:\n*\n*  PAGE        $00 = hires page 1, $20 = hires page 2\n*  XCO         Screen X-coord (0=left, 39=right)\n*  YCO         Screen Y-coord (0=top, 191=bottom)\n*  OFFSET      # of bits to shift image right (0-6)\n*  IMAGE       Image # in table (1-127)\n*  TABLE       Starting address of image table (2 bytes)\n*  BANK        Memory bank of table (2 = main, 3 = aux)\n*  OPACITY     Bits 0-6:\n*                0    AND\n*                1    OR\n*                2    STA\n*                3    special XOR (OR/shift/XOR)\n*                4    mask/OR\n*              Bit 7: 0 = normal, 1 = mirror\n*  LEFTCUT     Left edge of usable screen area\n*                (0 for full screen)\n*  RIGHTCUT    Right edge +1 of usable screen area\n*                (40 for full screen)\n*  TOPCUT      Top edge of usable screen area\n*                (0 for full screen)\n*  BOTCUT      Bottom edge +1 of usable screen area\n*                (192 for full screen)\n*\n*-------------------------------\n*\n*  Image table format:\n*\n*  Byte 0:    width (# of bytes)\n*  Byte 1:    height (# of lines)\n*  Byte 2-n:  image bytes (read left-right, top-bottom)\n*\n*-------------------------------\n*\n*  To preserve the background behind an animated character,\n*  call LAYERSAVE before LAYing down each character image.\n*  Afterwards, call PEEL to \"peel off\" the character &\n*  restore the original background.\n*\n*  Peel buffer stores background images sequentially, in\n*  normal image table format, & is cleared after every frame.\n*\n*-------------------------------\n*\n*  C L S\n*\n*  Clear hi-res screen to black2\n*\n*-------------------------------\n\nCLS lda PAGE ;00 = page 1; 20 = page 2\n clc\n adc #$20\n sta :loop+2\n adc #$10\n sta :smod+2\n\n lda #$80 ;black2\n\n ldx #$10\n\n ldy #0\n\n:loop sta $2000,y\n:smod sta $3000,y\n iny\n bne :loop\n\n inc :loop+2\n inc :smod+2\n\n dex\n bne :loop\n\n rts\n\n*-------------------------------\n*\n*  L O - R E S   C L S\n*\n*  Clear lo-res/text screen (page 1)\n*\n*  In: A = color\n*\n*-------------------------------\n\nLRCLS LDY #$F7\n:2 STA $400,Y\n STA $500,Y\n STA $600,Y\n STA $700,Y\n DEY\n CPY #$7F\n BNE :3\n LDY #$77\n:3 CPY #$FF\n BNE :2\n RTS\n\n*-------------------------------\n*\n*  S E T   I M A G E\n*\n*  In: TABLE (2 bytes), IMAGE (image #)\n*  Out: IMAGE = image start address (2 bytes)\n*\n*-------------------------------\n\nsetimage lda IMAGE\n asl\n sec\n sbc #1\n\n tay\n lda (TABLE),y\n sta IMAGE\n\n iny\n lda (TABLE),y\n sta IMAGE+1\n\n rts\n\n*-------------------------------\n*\n*  G E T   W I D T H\n*\n*  In: BANK, TABLE, IMAGE\n*  Out: A = width, X = height\n*\n*-------------------------------\nGETWIDTH\n lda BANK\n sta :RAMRD+1\n\n:RAMRD sta $c003\n\n jsr setimage\n\n ldy #1\n lda (IMAGE),y ;height\n tax\n\n dey\n lda (IMAGE),y ;width\n rts\n\n*-------------------------------\n*\n*  P R E P R E P\n*\n*  In: IMAGE, XCO, YCO\n*\n*-------------------------------\n\nPREPREP\n\n* Save IMAGE, XCO, YCO\n\n LDA IMAGE\n STA IMSAVE\n LDA XCO\n STA XSAVE\n LDA YCO\n STA YSAVE\n\n* Get image data start address\n\n lda BANK\n sta :RAMRD+1\n\n:RAMRD sta $c003\n\n jsr setimage\n\n* Read first two bytes (width, height) of image table\n\n LDY #0\n LDA (IMAGE),Y\n STA WIDTH\n\n INY\n LDA (IMAGE),Y\n STA HEIGHT\n\n LDA IMAGE\n CLC\n ADC #2\n STA IMAGE\n BCC :3\n INC IMAGE+1\n\n:3 sta $c002 ;RAMRD off (read mainmem)\n\n]rts rts\n\n*-------------------------------\n*\n*  C R O P\n*\n*  In:  Results of PREPREP (XCO, YCO, HEIGHT, WIDTH)\n*       Screen area cutoffs (LEFTCUT, RIGHTCUT, TOPCUT, BOTCUT)\n*\n*  Out:\n*\n*  TOPEDGE   Top line -1\n*  VISWIDTH  Width, in bytes, of visible (onscreen) portion\n*               of image\n*  XCO       X-coord of leftmost visible byte of image\n*               (must be 0-39)\n*  YCO       Y-coord of lowest visible line of image\n*               (must be 0-191)\n*  OFFLEFT   # of bytes off left edge\n*  OFFRIGHT  # of bytes off right edge (including carry byte)\n*  RMOST     # of bytes off right edge (excluding carry byte)\n*\n*  Return - if entire image is offscreen, else +\n*\n*-------------------------------\nCROP\n\n* (1) Crop top & bottom\n\n lda YCO\n cmp BOTCUT\n bcs :botoff ;Bottom o.s.\n\n* Bottom is onscreen--check top\n\n sec\n sbc HEIGHT ;top line -1\n cmp #191\n bcc :topok ;Top is onscreen\n\n lda TOPCUT ;Top is offscreen\n sec\n sbc #1\n sta TOPEDGE\n jmp :done\n\n:topok sta TOPEDGE ;Top line -1 (0-191)\n\n lda TOPCUT ;top line of image area (forced mask)\n beq :done ;no top cutoff\n\n sec\n sbc #1\n cmp TOPEDGE\n bcc :done\n\n sta TOPEDGE\n bcs :done\n\n* Bottom is o.s.--advance IMAGE pointer past o.s. portion\n\n:botoff ;A = YCO\n sec\n sbc HEIGHT\n clc\n adc #1 ;top line\n cmp BOTCUT\n bcs :cancel ;Entire shape is o.s.\n sec\n sbc #1\n sta TOPEDGE ;top line -1\n\n ldx YCO\n:loop\n lda IMAGE\n clc\n adc WIDTH\n sta IMAGE\n bcc :1\n inc IMAGE+1\n:1\n dex\n cpx BOTCUT\n bcs :loop\n\n stx YCO\n\n* (2) Crop sides\n\n:done\n lda XCO\n bmi :leftoff\n cmp LEFTCUT\n bcs :leftok ;XCO >= LEFTCUT\n\n* XCO < LEFTCUT: left edge is offscreen\n\n:leftoff\n lda LEFTCUT\n sec\n sbc XCO\n sta OFFLEFT ;Width of o.s. portion\n\n lda WIDTH\n sec\n sbc OFFLEFT\n bmi :cancel ;Entire image is o.s. -- skip it\n sta VISWIDTH ;Width of onscreen portion (can be 0)\n\n lda LEFTCUT\n sta XCO\n\n* Assume image is <=40 bytes wide --> right edge is onscreen\n\n lda #0\n sta OFFRIGHT\n sta RMOST\n rts\n\n* Left edge is onscreen; what about right edge?\n\n:leftok ;A = XCO\n cmp RIGHTCUT ;normally 40\n bcs :cancel ;Entire image is o.s. - skip it\n\n clc\n adc WIDTH ;rightmost byte +1\n cmp RIGHTCUT\n bcc :bothok ;Entire image is onscreen\n\n sec\n sbc RIGHTCUT\n sta RMOST ;Width of o.s. portion\n\n clc\n adc #1\n sta OFFRIGHT ;+1\n\n lda RIGHTCUT\n sec\n sbc XCO\n sta VISWIDTH ;Width of onscreen portion\n\n lda #0\n sta OFFLEFT\n rts\n\n:bothok lda WIDTH\n sta VISWIDTH\n\n lda #0\n sta OFFLEFT\n sta OFFRIGHT\n sta RMOST\n rts\n\n:cancel lda #-1 ;Entire image is o.s. - skip it\n]rts rts\n\n*-------------------------------\n*\n* Shift offset 1 bit right or left\n* (for special XOR)\n*\n* In/out: X = offset\n*\n*-------------------------------\nshiftoffset\n cpx #6\n bcs :left\n\n inx\n rts\n\n:left dex\n]rts rts\n\n*-------------------------------\n*\n*  L A Y E R S A V E\n*\n*  In:  Same as for LAY, plus PEELBUF (2 bytes)\n*  Out: PEELBUF (updated), PEELIMG (2 bytes), PEELXCO, PEELYCO\n*\n*  PEELIMG is 2-byte pointer to beginning of image table.\n*  (Hi byte = 0 means no image has been stored.)\n*\n*  PEELBUF is 2-byte pointer to first available byte in\n*  peel buffer.\n*\n*-------------------------------\n\nLAYRSAVE\n jsr PREPREP\n\n lda OPACITY\n bpl :normal\n\n LDA XCO\n SEC\n SBC WIDTH\n STA XCO\n\n:normal\n inc WIDTH ;extra byte to cover shift right\n\n jsr CROP\n bmi SKIPIT\n\n lda PEELBUF ;PEELBUF: 2-byte pointer to 1st\n sta PEELIMG ;available byte in peel buffer\n lda PEELBUF+1\n sta PEELIMG+1\n\n lda XCO\n sta PEELXCO\n sta :smXCO+1\n\n lda YCO\n sta PEELYCO\n\n lda PAGE ;spend 7 cycles now --\n sta :smPAGE+1 ;save 1 in loop\n\n ldy #0\n\n lda VISWIDTH\n beq SKIPIT\n sta (PEELBUF),y\n sta :smWIDTH+1\n\n sec\n sbc #1\n sta :smSTART+1\n\n* Continue\n\n:cont iny\n\n LDA YCO\n SEC\n SBC TOPEDGE\n STA (PEELBUF),y ;Height of onscreen portion (\"VISHEIGHT\")\n\n LDA PEELBUF\n CLC\n ADC #2\n STA PEELBUF\n BCC :ok\n INC PEELBUF+1\n:ok\n\n* Like FASTLAY in reverse\n\n ldx YCO\n\n:loop LDA YLO,X\n CLC\n:smXCO ADC #0 ;XCO\n STA :smBASE+1\n\n LDA YHI,X\n:smPAGE ADC #0 ;PAGE\n STA :smBASE+2\n\n:smSTART ldy #0 ;VISWIDTH-1\n\n:inloop\n:smBASE lda $2000,y\n STA (PEELBUF),Y\n\n dey\n bpl :inloop\n\n:smWIDTH LDA #0 ;VISWIDTH\n ADC PEELBUF ;assume cc\n STA PEELBUF\n BCC :2\n INC PEELBUF+1\n:2\n DEX\n CPX TOPEDGE\n BNE :loop\n\n JMP DONE\n\nSKIPIT lda #0\n sta PEELIMG+1 ;signal that peelbuf is empty\n\n JMP DONE\n\n*-------------------------------\n*\n*  L A Y\n*\n*  General routine to lay down an image on hi-res screen\n*  (Handles edge-clipping, bit-shifting, & mirroring)\n*\n*  Calls one of the following routines:\n*\n*    LayGen    General (OR, AND, STA)\n*    LayMask   Mask & OR\n*    LayXOR    Special XOR\n*\n*  Transfers control to MLAY if image is to be mirrored\n*\n*-------------------------------\n\nLAY\n lda OPACITY\n bpl :notmirr\n\n and #$7f\n sta OPACITY\n jmp MLAY\n\n:notmirr cmp #eor\n bne :1\n jmp LayXOR\n\n:1 cmp #mask\n bcc :2\n jmp LayMask\n\n:2 jmp LayGen\n\n*-------------------------------\n*\n*   General (AND/OR/STORE)\n*\n*-------------------------------\nLayGen\n jsr PREPREP\n\n jsr CROP\n bpl :cont\n jmp DONE\n:cont\n lda BANK\n sta :RAMRD1+1\n sta :RAMRD2+1\n\n LDX OFFSET\n\n LDA SHIFTL,X\n STA :91+1\n LDA SHIFTH,X\n STA :91+2\n\n LDA CARRYL,X\n STA :90+1\n STA :92+1\n LDA CARRYH,X\n STA :90+2\n STA :92+2\n\n LDA AMASKS,X\n STA :AMASK+1\n LDA BMASKS,X\n STA :BMASK+1\n\n LDX OPACITY\n LDA OPCODE,X\n STA :80\n STA :81\n\n* Preparation completed -- Lay down shape\n\n LDY YCO\n\n:nextline\n LDA YLO,Y\n CLC\n ADC XCO\n STA BASE\n\n LDA YHI,Y\n ADC PAGE\n STA BASE+1\n\n LDY OFFLEFT\n BEQ :2\n\n* (a) Left edge of image is offscreen\n* Take initial carry byte from image table\n\n DEY\n\n:RAMRD1 sta $c003 ;aux/main\n lda (IMAGE),y\n sta $c002 ;main\n\n TAX\n:90 LDA $FFFF,X ;CARRYn\n STA CARRY\n\n LDA IMAGE\n CLC\n ADC OFFLEFT\n STA IMAGE\n BCC :1\n INC IMAGE+1\n:1\n LDY #0\n\n LDA VISWIDTH\n STA WIDTH\n BNE :3\n BEQ :4 ;Zero width\n\n* (b) Left edge of image is onscreen\n* Take initial carry byte from screen\n\n:2 LDA (BASE),Y\n:AMASK AND #0\n STA CARRY\n\n* Lay line down left-to-right fast as you can\n\n:3\n:RAMRD2 sta $c003 ;aux/main\n lda (IMAGE),y\n sta $c002 ;main\n\n TAX\n:91 LDA $FFFF,X ;SHIFTn\n ORA CARRY ;Combine with carryover from previous byte\n\n:80 STA (BASE),Y ;STA/ORA/AND/EOR depending on OPACITY\n STA (BASE),Y\n\n:92 LDA $FFFF,X ;CARRYn\n STA CARRY ;Carry over to next byte\n\n INY\n CPY VISWIDTH\n BCC :3\n\n*  Extra byte on right (carryover)\n\n LDA OFFRIGHT\n BNE :5 ;Rightmost byte is offscreen\n\n:4 LDA (BASE),Y\n\n:BMASK AND #0\n ORA CARRY\n:81 STA (BASE),Y\n STA (BASE),Y\n\n*  Next line up\n\n:5 LDA WIDTH\n CLC\n ADC IMAGE\n STA IMAGE\n BCC :6\n INC IMAGE+1\n\n:6 DEC YCO\n LDY YCO\n CPY TOPEDGE\n BNE :nextline\n\n*  Restore parameters\n\nDONE LDA IMSAVE\n STA IMAGE\n\n LDA XSAVE\n STA XCO\n LDA YSAVE\n STA YCO\n\n RTS\n\n*-------------------------------\n*\n*  Mask, then OR\n*\n*-------------------------------\n]done jmp DONE\n\nLayMask\n ldx OPACITY ;4 = mask, 5 = visible mask\n lda OPCODE,x ;4 = and, 5 = sta\n sta :masksm1\n sta :masksm2\n\n jsr PREPREP\n\n jsr CROP\n bmi ]done\n\n lda BANK\n sta :RAMRD1+1\n sta :RAMRD2+1\n\n LDX OFFSET\n\n LDA SHIFTL,X\n STA :91+1\n sta :93+1\n\n LDA SHIFTH,X\n STA :91+2\n sta :93+2\n\n LDA CARRYL,X\n STA :90+1\n STA :92+1\n sta :94+1\n sta :96+1\n\n LDA CARRYH,X\n STA :90+2\n STA :92+2\n sta :94+2\n sta :96+2\n\n LDA AMASKS,X\n STA :AMASK+1\n\n LDA BMASKS,X\n STA :BMASK+1\n\n LDY YCO\n\n:nextline\n LDA YLO,Y\n CLC\n ADC XCO\n STA BASE\n\n LDA YHI,Y\n ADC PAGE\n STA BASE+1\n\n LDY OFFLEFT\n BEQ :2\n\n* (a) Left edge of image is offscreen\n* Take initial carry byte from image table\n\n dey\n\n:RAMRD1 sta $c003\n lda (IMAGE),y\n; eor #$ff ;TEMP\n; ora #$80 ;TEMP\n sta $c002\n\n tax\n:96 lda $FFFF,x ;CARRYn\n sta carryim\n\n lda MASKTAB-$80,x\n tax\n:90 lda $FFFF,x ;CARRYn\n sta CARRY\n\n LDA IMAGE\n CLC\n ADC OFFLEFT\n STA IMAGE\n BCC :1\n INC IMAGE+1\n:1\n ldy #0\n\n LDA VISWIDTH\n STA WIDTH\n BNE :inloop\n BEQ :4 ;Zero width\n\n* (b) Left edge of image is onscreen\n* Take initial carry byte from screen\n\n:2\n:AMASK lda #0 ;AMASK\n sta CARRY\n\n and (BASE),y\n sta carryim\n\n* Lay line down left-to-right fast as you can\n\n:inloop\n\n:RAMRD2 sta $c003\n lda (IMAGE),y\n; eor #$ff ;TEMP\n; ora #$80 ;TEMP\n sta $c002\n\n tax\n\n:93 lda $FFFF,x ;SHIFTn\n ora carryim\n sta imbyte ;shifted image byte\n\n:94 lda $FFFF,x ;CARRYn\n sta carryim\n\n lda MASKTAB-$80,x\n tax\n\n:91 lda $FFFF,x ;SHIFTn\n ora CARRY\n:masksm1 and (BASE),y ;AND with mask byte\n ora imbyte ;OR with original image byte\n sta (BASE),y\n\n:92 lda $FFFF,x ;CARRYn\n sta CARRY ;Carry over to next byte\n\n iny\n cpy VISWIDTH\n bcc :inloop\n\n*  Extra byte on right (carryover)\n\n lda OFFRIGHT\n bne :5 ;Rightmost byte is offscreen\n\n:4\n:BMASK lda #0 ;BMASK\n ora CARRY\n:masksm2 and (BASE),y\n ora carryim\n sta (BASE),y\n\n*  Next line up\n\n:5 LDA WIDTH\n CLC\n ADC IMAGE\n STA IMAGE\n BCC :6\n INC IMAGE+1\n\n:6 DEC YCO\n LDY YCO\n CPY TOPEDGE\n beq :done\n\n jmp :nextline\n\n:done jmp DONE\n\n*-------------------------------\n*\n*  Special XOR\n*\n*  (OR, then shift 1 bit and XOR)\n*\n*-------------------------------\n\nLayXOR\n JSR PREPREP\n\n jsr CROP\n bpl :cont\n jmp DONE\n:cont\n lda BANK\n sta :RAMRD1+1\n sta :RAMRD2+1\n\n LDX OFFSET\n\n LDA SHIFTL,X\n STA :91+1\n LDA SHIFTH,X\n STA :91+2\n\n LDA CARRYL,X\n STA :90+1\n STA :92+1\n LDA CARRYH,X\n STA :90+2\n STA :92+2\n\n jsr shiftoffset ;shift 1 bit right\n\n lda SHIFTL,x\n sta :s1+1\n lda SHIFTH,x\n sta :s1+2\n\n lda CARRYL,x\n sta :c1+1\n sta :c2+1\n lda CARRYH,x\n sta :c1+2\n sta :c2+2\n\n LDA AMASKS,X\n STA :AMASK+1\n\n* Omit opcode setting\n\n LDY YCO\n\n:0 LDA YLO,Y\n CLC\n ADC XCO\n STA BASE\n\n LDA YHI,Y\n ADC PAGE\n STA BASE+1\n\n LDY OFFLEFT\n BEQ :2\n\n*  (a) Left edge offscreen\n*  Take CARRY from off left edge\n\n DEY\n\n:RAMRD1 sta $c003\n lda (IMAGE),y\n sta $c002\n\n TAX\n:c2 lda $FFFF,x ;CARRYn+1\n sta carryim\n\n:90 LDA $FFFF,X ;CARRYn\n STA CARRY\n\n LDA IMAGE\n CLC\n ADC OFFLEFT\n STA IMAGE\n BCC :1\n INC IMAGE+1\n\n:1 LDY #0\n\n LDA VISWIDTH\n STA WIDTH\n BNE :inloop\n BEQ :4 ;Zero width\n\n* (b) Left edge onscreen\n* Start a new line at left edge\n\n:2 lda (BASE),y\n:AMASK and #0 ;AMASK\n sta CARRY\n\n lda #0 ;0 XOR X == X\n sta carryim\n\n* Lay line down left-to-right fast as you can\n\n:inloop\n\n:RAMRD2 sta $c003\n lda (IMAGE),y\n sta $c002\n\n tax\n\n:s1 lda $FFFF,x ;SHIFTn+1\n ora carryim\n sta imbyte\n\n:c1 lda $FFFF,x ;CARRYn+1\n sta carryim\n\n:91 lda $FFFF,x ;SHIFTn\n ora CARRY ;Combine with carryover from previous byte\n\n ora (BASE),y\n eor imbyte\n\n ora #$80 ;set hibit\n sta (BASE),y\n\n:92 LDA $FFFF,X ;CARRYn\n STA CARRY ;Carry over to next byte\n\n INY\n CPY VISWIDTH\n BCC :inloop\n\n*  Extra byte on right (carryover)\n\n LDA OFFRIGHT\n BNE :5 ;Rightmost byte is offscreen\n\n:4 lda CARRY ;0's in unused part of byte\n\n ora (BASE),y\n eor carryim\n\n ora #$80\n sta (BASE),y\n\n*  Next line up\n\n:5 LDA WIDTH\n CLC\n ADC IMAGE\n STA IMAGE\n BCC :6\n INC IMAGE+1\n\n:6 DEC YCO\n LDY YCO\n CPY TOPEDGE\n beq :done\n\n jmp :0\n\n*  Restore parameters\n\n:done jmp DONE\n\n*-------------------------------\n*\n*  M I R R O R    L A Y\n*\n*  Called by LAY\n*\n*  Specified starting byte (XCO, YCO) is image's bottom\n*  right corner, not bottom left; bytes are read off image\n*  table R-L, T-B and mirrored before printing.\n*\n*  In:  A = OPACITY, sans bit 7\n*\n*-------------------------------\n\nMLAY ;A = OPACITY\n cmp #eor\n bne :1\n jmp MLayXOR\n\n:1 cmp #mask\n bcc :2\n jmp MLayMask\n\n:2 jmp MLayGen\n\n*-------------------------------\n*\n*  General (AND/OR/STORE)\n*\n*-------------------------------\nMLayGen\n JSR PREPREP\n\n LDA XCO\n SEC\n SBC WIDTH\n STA XCO\n\n jsr CROP\n bpl :cont\n jmp DONE\n:cont\n lda BANK\n sta :RAMRD1+1\n sta :RAMRD2+1\n\n LDX OFFSET\n\n LDA SHIFTL,X\n STA :91+1\n LDA SHIFTH,X\n STA :91+2\n\n LDA CARRYL,X\n STA :90+1\n STA :92+1\n LDA CARRYH,X\n STA :90+2\n STA :92+2\n\n LDA AMASKS,X\n STA AMASK\n LDA BMASKS,X\n STA BMASK\n\n LDX OPACITY\n LDA OPCODE,X\n STA :80\n STA :81\n\n* Lay on\n\n LDY YCO\n\n:0 LDA YLO,Y\n STA BASE\n\n LDA YHI,Y\n CLC\n ADC PAGE\n STA BASE+1\n\n LDY OFFLEFT\n BEQ :2\n\n* Take CARRY from off left edge\n\n LDY VISWIDTH\n\n:RAMRD1 sta $c003\n lda (IMAGE),y\n sta $c002\n\n TAX\n\n LDA MIRROR-$80,X\n TAX\n\n:90 LDA $FFFF,X ;CARRYn\n STA CARRY\n\n:1 DEY\n BPL :3\n BMI :4\n\n* Start a new line at left edge\n\n:2 LDY XCO\n LDA (BASE),Y\n AND AMASK\n STA CARRY\n\n LDY WIDTH\n DEY\n\n* Lay line down left-to-right fast as you can\n\n:3 STY YREG\n\n:RAMRD2 sta $c003\n lda (IMAGE),y\n sta $c002\n\n TAX\n\n LDA MIRROR-$80,X\n TAX\n\n:91 LDA $FFFF,X ;SHIFTn\n ORA CARRY ;Combine with carryover from previous byte\n\n LDY XCO\n:80 STA (BASE),Y ;STA/ORA/AND/EOR depending on OPACITY\n STA (BASE),Y\n\n:92 LDA $FFFF,X ;CARRYn\n STA CARRY ;Carry over to next byte\n\n INC BASE\n\n LDY YREG\n CPY RMOST\n BEQ :7\n\n DEY\n BPL :3\n\n*  Extra byte on right (carryover)\n\n:7 LDA OFFRIGHT\n BNE :5 ;Rightmost byte is offscreen\n\n:4 LDY XCO\n LDA (BASE),Y\n\n AND BMASK\n ORA CARRY\n:81 STA (BASE),Y\n STA (BASE),Y\n\n*  Next line up\n\n:5 LDA WIDTH\n CLC\n ADC IMAGE\n STA IMAGE\n BCC :6\n INC IMAGE+1\n\n:6 DEC YCO\n LDY YCO\n CPY TOPEDGE\n\n beq :done\n jmp :0\n\n:done JMP DONE\n\n*-------------------------------\n*\n*  Mask, then OR\n*\n*-------------------------------\n\nMLayMask\n ldx OPACITY ;4 = mask, 5 = visible mask\n lda OPCODE,x ;4 = and, 5 = sta\n sta :masksm1\n sta :masksm2\n\n JSR PREPREP\n\n LDA XCO\n SEC\n SBC WIDTH\n STA XCO\n\n jsr CROP\n bpl :cont\n jmp DONE\n:cont\n lda BANK\n sta :RAMRD1+1\n sta :RAMRD2+1\n\n LDX OFFSET\n\n LDA SHIFTL,X\n STA :91+1\n sta :93+1\n\n LDA SHIFTH,X\n STA :91+2\n sta :93+2\n\n LDA CARRYL,X\n STA :90+1\n STA :92+1\n sta :94+1\n sta :96+1\n\n LDA CARRYH,X\n STA :90+2\n STA :92+2\n sta :94+2\n sta :96+2\n\n LDA AMASKS,X\n STA :AMASK+1\n LDA BMASKS,X\n STA :BMASK+1\n\n* Lay on\n\n LDY YCO\n\n:0 LDA YLO,Y\n STA BASE\n\n LDA YHI,Y\n CLC\n ADC PAGE\n STA BASE+1\n\n LDY OFFLEFT\n BEQ :2\n\n* (a) Left edge offscreen\n* Take CARRY from off left edge\n\n LDY VISWIDTH\n\n:RAMRD1 sta $c003\n lda (IMAGE),y\n; eor #$ff ;TEMP\n; ora #$80 ;TEMP\n sta $c002\n\n TAX\n LDA MIRROR-$80,X\n TAX\n\n:96 lda $FFFF,x ;CARRYn\n sta carryim\n\n lda MASKTAB-$80,x\n tax\n:90 LDA $FFFF,X ;CARRYn\n STA CARRY\n\n:1 DEY\n BPL :3\n BMI :4\n\n* (b) Left edge onscreen\n* Start a new line at left edge\n\n:2 LDY XCO\n:AMASK lda #0 ;AMASK\n sta CARRY\n\n and (BASE),y\n sta carryim\n\n LDY WIDTH\n DEY\n\n* Lay line down left-to-right fast as you can\n\n:3 STY YREG\n\n:RAMRD2 sta $c003\n lda (IMAGE),y\n; eor #$ff ;TEMP\n; ora #$80 ;TEMP\n sta $c002\n\n TAX\n LDA MIRROR-$80,X\n TAX\n\n:93 lda $FFFF,x ;SHIFTn\n ora carryim\n sta imbyte\n\n:94 lda $FFFF,x ;CARRYn\n sta carryim\n\n lda MASKTAB-$80,x\n tax\n\n:91 LDA $FFFF,X ;SHIFTn\n ORA CARRY ;Combine with carryover from previous byte\n\n LDY XCO\n:masksm1 and (BASE),y\n ora imbyte\n STA (BASE),Y\n\n:92 LDA $FFFF,X ;CARRYn\n STA CARRY ;Carry over to next byte\n\n INC BASE\n\n LDY YREG\n CPY RMOST\n BEQ :7\n\n DEY\n BPL :3\n\n*  Extra byte on right (carryover)\n\n:7 LDA OFFRIGHT\n BNE :5 ;Rightmost byte is offscreen\n\n:4 LDY XCO\n LDA (BASE),Y\n\n:BMASK AND #0 ;BMASK\n ORA CARRY\n:masksm2 and (BASE),y\n ora carryim\n STA (BASE),Y\n\n*  Next line up\n\n:5 LDA WIDTH\n CLC\n ADC IMAGE\n STA IMAGE\n BCC :6\n INC IMAGE+1\n\n:6 DEC YCO\n LDY YCO\n CPY TOPEDGE\n beq :done\n\n jmp :0\n\n:done jmp DONE\n\n*-------------------------------\n*\n*  Special XOR\n*\n*-------------------------------\n\nMLayXOR\n JSR PREPREP\n\n LDA XCO\n SEC\n SBC WIDTH\n STA XCO\n\n jsr CROP\n bpl :cont\n jmp DONE\n:cont\n lda BANK\n sta :RAMRD1+1\n sta :RAMRD2+1\n\n LDX OFFSET\n\n LDA SHIFTL,X\n STA :91+1\n LDA SHIFTH,X\n STA :91+2\n\n LDA CARRYL,X\n STA :90+1\n STA :92+1\n LDA CARRYH,X\n STA :90+2\n STA :92+2\n\n jsr shiftoffset\n\n lda SHIFTL,x\n sta :s1+1\n lda SHIFTH,x\n sta :s1+2\n\n lda CARRYL,x\n sta :c1+1\n sta :c2+1\n lda CARRYH,x\n sta :c1+2\n sta :c2+2\n\n LDA AMASKS,X\n STA :AMASK+1\n\n* Lay on\n\n LDY YCO\n\n:0 LDA YLO,Y\n STA BASE\n\n LDA YHI,Y\n CLC\n ADC PAGE\n STA BASE+1\n\n LDY OFFLEFT\n BEQ :2\n\n* (a) Left edge offscreen\n* Take CARRY from off left edge\n\n LDY VISWIDTH\n\n:RAMRD1 sta $c003\n lda (IMAGE),y\n sta $c002\n\n TAX\n LDA MIRROR-$80,X\n TAX\n\n:c2 lda $FFFF,x ;CARRYn+1\n sta carryim\n\n:90 LDA $FFFF,X ;CARRYn\n STA CARRY\n\n:1 DEY\n BPL :3\n BMI :4\n\n* (b) Left edge onscreen\n* Start a new line at left edge\n\n:2 ldy XCO\n:AMASK lda #0 ;AMASK\n and (BASE),y\n sta CARRY\n\n lda #0\n sta carryim\n\n LDY WIDTH\n DEY\n\n* Lay line down left-to-right fast as you can\n\n:3 STY YREG\n\n:RAMRD2 sta $c003\n lda (IMAGE),y\n sta $c002\n\n TAX\n\n LDA MIRROR-$80,X\n TAX\n\n:s1 lda $FFFF,x ;SHIFTn\n ora carryim\n sta imbyte\n\n:c1 lda $FFFF,x ;CARRYn\n sta carryim\n\n:91 LDA $FFFF,X ;SHIFTn\n ORA CARRY ;Combine with carryover from previous byte\n\n LDY XCO\n\n ora (BASE),y\n eor imbyte\n\n ora #$80\n sta (BASE),Y\n\n:92 LDA $FFFF,X ;CARRYn\n STA CARRY ;Carry over to next byte\n\n INC BASE\n\n LDY YREG\n CPY RMOST\n BEQ :7\n\n DEY\n BPL :3\n\n*  Extra byte on right (carryover)\n\n:7 LDA OFFRIGHT\n BNE :5 ;Rightmost byte is offscreen\n\n:4 LDY XCO\n\n lda CARRY\n\n ora (BASE),Y\n eor carryim\n\n ora #$80\n STA (BASE),Y\n\n*  Next line up\n\n:5 LDA WIDTH\n CLC\n ADC IMAGE\n STA IMAGE\n BCC :6\n INC IMAGE+1\n\n:6 DEC YCO\n LDY YCO\n CPY TOPEDGE\n beq :done\n\n jmp :0\n\n:done JMP DONE\n\n*-------------------------------\n*\n* Peel\n*\n*-------------------------------\nPEEL\n sta $c004\n]ramrd1 sta $c003\n\n jmp fastlaySTA\n\n*-------------------------------\n*\n*  F A S T L A Y\n*\n*  Streamlined LAY routine\n*\n*  No offset - no clipping - no mirroring - no masking -\n*  no EOR - trashes IMAGE - may crash if overtaxed -\n*  but it's fast.\n*\n*  10/3/88: OK for images to protrude PARTLY off top\n*\n*-------------------------------\nFASTLAY\n sta $c004 ;RAMWRT main\n]ramrd2 sta $c003 ;RAMRD aux\n\n jsr setimage\n\n ldx OPACITY ;hi bit off!\n cpx #sta\n beq fastlaySTA\n\n lda OPCODE,x\n sta  :smod\n\n lda PAGE\n sta :smPAGE+1\n\n lda XCO\n sta  :smXCO+1\n\n ldy #0\n lda (IMAGE),y\n sta :smWIDTH+1\n\n sec\n sbc #1\n sta :smSTART+1\n\n lda YCO\n tax\n iny\n sbc (IMAGE),y\n bcs :ok\n lda #-1 ;limited Y-clipping\n:ok sta  :smTOP+1\n\n lda IMAGE\n clc\n adc #2\n sta IMAGE\n bcc :1\n inc IMAGE+1\n:1\n\n:outloop\n lda YLO,x\n clc\n:smXCO adc #0\n sta BASE\n\n lda YHI,x\n:smPAGE adc #$20\n sta BASE+1\n\n:smSTART ldy #3\n\n:inloop\n]ramrd3 sta $c003 ;RAMRD aux\n\n lda (IMAGE),y\n\n sta $c002 ;RAMRD main\n\n:smod ora (BASE),y\n sta (BASE),y\n\n dey\n bpl :inloop\n\n:smWIDTH lda #4\n adc IMAGE ;assume cc\n sta IMAGE\n bcc :2\n inc IMAGE+1\n:2\n dex\n:smTOP cpx #$ff\n bne :outloop\n\n rts\n\n*-------------------------------\n*\n*  Still more streamlined version of FASTLAY (STA only)\n*\n*-------------------------------\nfastlaySTA\n lda PAGE\n sta :smPAGE+1\n\n lda XCO\n sta  :smXCO+1\n\n ldy #0\n lda (IMAGE),y\n sta :smWIDTH+1\n\n sec\n sbc #1\n sta :smSTART+1\n\n lda YCO\n tax\n iny\n sbc (IMAGE),y\n bcs :ok\n lda #-1 ;limited Y-clipping\n:ok sta  :smTOP+1\n\n lda IMAGE\n clc\n adc #2\n sta IMAGE\n bcc :1\n inc IMAGE+1\n:1\n\n:outloop\n lda YLO,x\n clc\n:smXCO adc #0\n sta :smod+1\n\n lda YHI,x\n:smPAGE adc #$20\n sta :smod+2\n\n:smSTART ldy #3\n\n:inloop\n lda (IMAGE),y\n:smod sta $2000,y ;BASE\n\n dey\n bpl :inloop\n\n:smWIDTH lda #4\n adc IMAGE ;cc\n sta IMAGE\n bcc :2\n inc IMAGE+1\n:2\n dex\n:smTOP cpx #$ff\n bne :outloop\n\n rts\n\n*-------------------------------\n*\n*  F A S T M A S K\n*\n*-------------------------------\nFASTMASK\n sta $c004 ;RAMWRT main\n]ramrd4 sta $c003 ;RAMRD aux\n\n jsr setimage\n\n lda PAGE\n sta :smPAGE+1\n\n lda XCO\n sta  :smXCO+1\n\n ldy #0\n lda (IMAGE),y\n sta :smWIDTH+1\n\n sec\n sbc #1\n sta :smSTART+1\n\n lda YCO\n tax\n iny\n sbc (IMAGE),y\n bcs :ok\n lda #-1 ;limited Y-clipping\n:ok sta  :smTOP+1\n\n lda IMAGE\n clc\n adc #2\n sta IMAGE\n bcc :1\n inc IMAGE+1\n:1\n\n:outloop\n stx index\n\n lda YLO,x\n clc\n:smXCO adc #0\n sta BASE\n\n lda YHI,x\n:smPAGE adc #$20\n sta BASE+1\n\n:smSTART ldy #3\n\n:inloop\n]ramrd5 sta $c003 ;RAMRD aux\n\n lda (IMAGE),y\n\n sta $c002 ;RAMRD main\n\n tax\n lda MASKTAB-$80,X\n\n and (BASE),Y\n sta (BASE),y\n\n dey\n bpl :inloop\n\n:smWIDTH lda #4\n adc IMAGE ;cc\n sta IMAGE\n bcc :2\n inc IMAGE+1\n:2\n ldx index\n dex\n:smTOP cpx #$ff\n bne :outloop\n\n rts\n\n*-------------------------------\n*\n*  S E T F A S T   M A I N / A U X\n*\n*  Modify FASTLAY routines to expect image tables to\n*  be in main/auxmem.  SETFAST need be called only once\n*  (e.g., when switching between game & builder).\n*\n*-------------------------------\nSETFASTMAIN\n lda #$02 ;RAMRD main\n]setfast\n sta ]ramrd1+1\n sta ]ramrd2+1\n sta ]ramrd3+1\n sta ]ramrd4+1\n sta ]ramrd5+1\n rts\n\nSETFASTAUX\n lda #$03 ;RAMRD aux\n bne ]setfast\n\n*-------------------------------\n*\n*  F A S T B L A C K\n*\n*  Wipe a rectangular area to black2\n*\n*  Width/height passed in IMAGE/IMAGE+1\n*  (width in bytes, height in pixels)\n*\n*-------------------------------\n\nFASTBLACK\n lda color\n sta :smCOLOR+1\n\n lda PAGE\n sta :smPAGE+1\n\n lda XCO\n sta  :smXCO+1\n\n lda width\n sec\n sbc #1\n sta :smSTART+1\n\n lda YCO\n tax\n sbc height ;cs\n sta :smTOP+1\n\n:outloop\n lda YLO,x\n clc\n:smXCO adc #0\n sta :smod+1\n\n lda YHI,x\n:smPAGE adc #$20\n sta :smod+2\n\n:smCOLOR lda #$80\n\n:smSTART ldy #3\n\n:inloop\n:smod sta $2000,y ;BASE\n dey\n bpl :inloop\n\n dex\n:smTOP cpx #$ff\n bne :outloop\n\n rts\n\n*-------------------------------\n*\n*  C O P Y   S C R E E N\n*\n*  Copy $2000 bytes\n*\n*  In: IMAGE+1 = dest scrn, IMAGE = org scrn\n*      (use hi byte of actual memory address)\n*\n*-------------------------------\nCOPYSCRN\n lda IMAGE+1\n sta :dst1+2\n clc\n adc #$10\n sta :dst2+2\n\n lda IMAGE\n sta :org1+2\n adc #$10\n sta :org2+2\n\n ldx #$10\n\n ldy #0\n:loop\n:org1 lda $2000,y\n:dst1 sta $4000,y\n\n:org2 lda $3000,y\n:dst2 sta $5000,y\n\n iny\n bne :loop\n\n inc :org1+2\n inc :org2+2\n inc :dst1+2\n inc :dst2+2\n\n dex\n bne :loop\n\n rts\n\n*-------------------------------\n* Invert Y-tables\n*-------------------------------\nINVERTY\n ldx #191 ;low line\n ldy #0 ;high line\n\n* Switch low & high lines\n\n:loop lda YLO,x\n pha\n lda YLO,y\n sta YLO,x\n pla\n sta YLO,y\n\n lda YHI,x\n pha\n lda YHI,y\n sta YHI,x\n pla\n sta YHI,y\n\n* Move 1 line closer to ctr\n\n dex\n iny\n cpy #96\n bcc :loop\n]rts rts\n\n*-------------------------------\n lst\n ds 1\n usr $a9,1,$0000,*-org\n lst off\n"
  },
  {
    "path": "01 POP Source/Source/HRPARAMS.S",
    "content": " tr on\n* hrparams\n\nhrtables = $e000\nhrparams = $00\n*-------------------------------\n dum hrtables\n\nYLO ds $c0\nYHI ds $c0\n\nSHIFT0 ds $80\nSHIFT1 ds $80\nSHIFT2 ds $80\nSHIFT3 ds $80\nSHIFT4 ds $80\nSHIFT5 ds $80\nSHIFT6 ds $80\n\nCARRY0 ds $80\nCARRY1 ds $80\nCARRY2 ds $80\nCARRY3 ds $80\nCARRY4 ds $80\nCARRY5 ds $80\nCARRY6 ds $80\n\nMIRROR ds $80\nMASKTAB ds $80\n\nSHIFTL ds 7\nSHIFTH ds 7\nCARRYL ds 7\nCARRYH ds 7\nAMASKS ds 7\nBMASKS ds 7\n\nOPCODE ds 6\n\nendtabs dend\n\n*-------------------------------\n dum hrparams\n\nPAGE ds 1\nXCO ds 1\nYCO ds 1\nOFFSET ds 1\nIMAGE ds 2\nOPACITY ds 1\nTABLE ds 2\n\nPEELBUF ds 2\nPEELIMG ds 2\nPEELXCO ds 1\nPEELYCO ds 1\n\nTOPCUT ds 1\nLEFTCUT ds 1\nRIGHTCUT ds 1\nBANK ds 1\nBOTCUT ds 1\n\n dend\n\nheight = IMAGE\nwidth = IMAGE+1\ncolor = OPACITY\n\n lst off\n"
  },
  {
    "path": "01 POP Source/Source/HRTABLES.S",
    "content": "* hires tables\norg = $e000\n tr on\n lst off\n*-------------------------------\n org org\n*-------------------------------\n*\n* YLO/YHI\n*\n* Index: Screen Y-coord (0-191, 0 = top)\n* Returns base address on hires page 1 (add $2000 for page 2)\n*\n*-------------------------------\n\nYLO hex 00000000000000008080808080808080\n hex 00000000000000008080808080808080\n hex 00000000000000008080808080808080\n hex 00000000000000008080808080808080\n\n hex 2828282828282828A8A8A8A8A8A8A8A8\n hex 2828282828282828A8A8A8A8A8A8A8A8\n hex 2828282828282828A8A8A8A8A8A8A8A8\n hex 2828282828282828A8A8A8A8A8A8A8A8\n\n hex 5050505050505050D0D0D0D0D0D0D0D0\n hex 5050505050505050D0D0D0D0D0D0D0D0\n hex 5050505050505050D0D0D0D0D0D0D0D0\n hex 5050505050505050D0D0D0D0D0D0D0D0\n\nYHI hex 2024282C3034383C2024282C3034383C\n hex 2125292D3135393D2125292D3135393D\n hex 22262A2E32363A3E22262A2E32363A3E\n hex 23272B2F33373B3F23272B2F33373B3F\n\n hex 2024282C3034383C2024282C3034383C\n hex 2125292D3135393D2125292D3135393D\n hex 22262A2E32363A3E22262A2E32363A3E\n hex 23272B2F33373B3F23272B2F33373B3F\n\n hex 2024282C3034383C2024282C3034383C\n hex 2125292D3135393D2125292D3135393D\n hex 22262A2E32363A3E22262A2E32363A3E\n hex 23272B2F33373B3F23272B2F33373B3F\n\n*-------------------------------\n*\n* SHIFTn/CARRYn\n*\n* n = # of pixels to shift right (0-6)\n* Index: byte value w/hibit clr (0-127)\n*\n* SHIFT returns shifted byte w/hibit set\n* CARRY returns carryover to next byte w/hibit clr\n*\n*-------------------------------\n\nSHIFT0 hex 808182838485868788898A8B8C8D8E8F\n hex 909192939495969798999A9B9C9D9E9F\n hex A0A1A2A3A4A5A6A7A8A9AAABACADAEAF\n hex B0B1B2B3B4B5B6B7B8B9BABBBCBDBEBF\n\n hex C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF\n hex D0D1D2D3D4D5D6D7D8D9DADBDCDDDEDF\n hex E0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF\n hex F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF\n\nSHIFT1 hex 80828486888A8C8E90929496989A9C9E\n hex A0A2A4A6A8AAACAEB0B2B4B6B8BABCBE\n hex C0C2C4C6C8CACCCED0D2D4D6D8DADCDE\n hex E0E2E4E6E8EAECEEF0F2F4F6F8FAFCFE\n\n hex 80828486888A8C8E90929496989A9C9E\n hex A0A2A4A6A8AAACAEB0B2B4B6B8BABCBE\n hex C0C2C4C6C8CACCCED0D2D4D6D8DADCDE\n hex E0E2E4E6E8EAECEEF0F2F4F6F8FAFCFE\n\nSHIFT2 hex 8084888C9094989CA0A4A8ACB0B4B8BC\n hex C0C4C8CCD0D4D8DCE0E4E8ECF0F4F8FC\n hex 8084888C9094989CA0A4A8ACB0B4B8BC\n hex C0C4C8CCD0D4D8DCE0E4E8ECF0F4F8FC\n\n hex 8084888C9094989CA0A4A8ACB0B4B8BC\n hex C0C4C8CCD0D4D8DCE0E4E8ECF0F4F8FC\n hex 8084888C9094989CA0A4A8ACB0B4B8BC\n hex C0C4C8CCD0D4D8DCE0E4E8ECF0F4F8FC\n\nSHIFT3 hex 80889098A0A8B0B8C0C8D0D8E0E8F0F8\n hex 80889098A0A8B0B8C0C8D0D8E0E8F0F8\n hex 80889098A0A8B0B8C0C8D0D8E0E8F0F8\n hex 80889098A0A8B0B8C0C8D0D8E0E8F0F8\n\n hex 80889098A0A8B0B8C0C8D0D8E0E8F0F8\n hex 80889098A0A8B0B8C0C8D0D8E0E8F0F8\n hex 80889098A0A8B0B8C0C8D0D8E0E8F0F8\n hex 80889098A0A8B0B8C0C8D0D8E0E8F0F8\n\nSHIFT4 hex 8090A0B0C0D0E0F08090A0B0C0D0E0F0\n hex 8090A0B0C0D0E0F08090A0B0C0D0E0F0\n hex 8090A0B0C0D0E0F08090A0B0C0D0E0F0\n hex 8090A0B0C0D0E0F08090A0B0C0D0E0F0\n\n hex 8090A0B0C0D0E0F08090A0B0C0D0E0F0\n hex 8090A0B0C0D0E0F08090A0B0C0D0E0F0\n hex 8090A0B0C0D0E0F08090A0B0C0D0E0F0\n hex 8090A0B0C0D0E0F08090A0B0C0D0E0F0\n\nSHIFT5 hex 80A0C0E080A0C0E080A0C0E080A0C0E0\n hex 80A0C0E080A0C0E080A0C0E080A0C0E0\n hex 80A0C0E080A0C0E080A0C0E080A0C0E0\n hex 80A0C0E080A0C0E080A0C0E080A0C0E0\n\n hex 80A0C0E080A0C0E080A0C0E080A0C0E0\n hex 80A0C0E080A0C0E080A0C0E080A0C0E0\n hex 80A0C0E080A0C0E080A0C0E080A0C0E0\n hex 80A0C0E080A0C0E080A0C0E080A0C0E0\n\nSHIFT6 hex 80C080C080C080C080C080C080C080C0\n hex 80C080C080C080C080C080C080C080C0\n hex 80C080C080C080C080C080C080C080C0\n hex 80C080C080C080C080C080C080C080C0\n\n hex 80C080C080C080C080C080C080C080C0\n hex 80C080C080C080C080C080C080C080C0\n hex 80C080C080C080C080C080C080C080C0\n hex 80C080C080C080C080C080C080C080C0\n\nCARRY0 hex 00000000000000000000000000000000\n hex 00000000000000000000000000000000\n hex 00000000000000000000000000000000\n hex 00000000000000000000000000000000\n\n hex 00000000000000000000000000000000\n hex 00000000000000000000000000000000\n hex 00000000000000000000000000000000\n hex 00000000000000000000000000000000\n\nCARRY1 hex 00000000000000000000000000000000\n hex 00000000000000000000000000000000\n hex 00000000000000000000000000000000\n hex 00000000000000000000000000000000\n\n hex 01010101010101010101010101010101\n hex 01010101010101010101010101010101\n hex 01010101010101010101010101010101\n hex 01010101010101010101010101010101\n\nCARRY2 hex 00000000000000000000000000000000\n hex 00000000000000000000000000000000\n hex 01010101010101010101010101010101\n hex 01010101010101010101010101010101\n\n hex 02020202020202020202020202020202\n hex 02020202020202020202020202020202\n hex 03030303030303030303030303030303\n hex 03030303030303030303030303030303\n\nCARRY3 hex 00000000000000000000000000000000\n hex 01010101010101010101010101010101\n hex 02020202020202020202020202020202\n hex 03030303030303030303030303030303\n\n hex 04040404040404040404040404040404\n hex 05050505050505050505050505050505\n hex 06060606060606060606060606060606\n hex 07070707070707070707070707070707\n\nCARRY4 hex 00000000000000000101010101010101\n hex 02020202020202020303030303030303\n hex 04040404040404040505050505050505\n hex 06060606060606060707070707070707\n\n hex 08080808080808080909090909090909\n hex 0A0A0A0A0A0A0A0A0B0B0B0B0B0B0B0B\n hex 0C0C0C0C0C0C0C0C0D0D0D0D0D0D0D0D\n hex 0E0E0E0E0E0E0E0E0F0F0F0F0F0F0F0F\n\nCARRY5 hex 00000000010101010202020203030303\n hex 04040404050505050606060607070707\n hex 08080808090909090A0A0A0A0B0B0B0B\n hex 0C0C0C0C0D0D0D0D0E0E0E0E0F0F0F0F\n\n hex 10101010111111111212121213131313\n hex 14141414151515151616161617171717\n hex 18181818191919191A1A1A1A1B1B1B1B\n hex 1C1C1C1C1D1D1D1D1E1E1E1E1F1F1F1F\n\nCARRY6 hex 00000101020203030404050506060707\n hex 080809090A0A0B0B0C0C0D0D0E0E0F0F\n hex 10101111121213131414151516161717\n hex 181819191A1A1B1B1C1C1D1D1E1E1F1F\n\n hex 20202121222223232424252526262727\n hex 282829292A2A2B2B2C2C2D2D2E2E2F2F\n hex 30303131323233333434353536363737\n hex 383839393A3A3B3B3C3C3D3D3E3E3F3F\n\n*-------------------------------\n*\n* MIRROR\n*\n* Index: byte value w/hibit clr (0-127)\n* Returns mirrored byte w/hibit set\n*\n*-------------------------------\n\nMIRROR hex 80C0A0E090D0B0F088C8A8E898D8B8F8\n hex 84C4A4E494D4B4F48CCCACEC9CDCBCFC\n hex 82C2A2E292D2B2F28ACAAAEA9ADABAFA\n hex 86C6A6E696D6B6F68ECEAEEE9EDEBEFE\n\n hex 81C1A1E191D1B1F189C9A9E999D9B9F9\n hex 85C5A5E595D5B5F58DCDADED9DDDBDFD\n hex 83C3A3E393D3B3F38BCBABEB9BDBBBFB\n hex 87C7A7E797D7B7F78FCFAFEF9FDFBFFF\n\n*-------------------------------\n*\n* MASKTAB\n*\n* Index: byte value w/hibit clr (0-127)\n* Returns mask byte w/hibit set\n*\n*-------------------------------\n\nMASKTAB HEX FF,FC,F8,F8,F1,F0,F0,F0\n HEX E3,E0,E0,E0,E1,E0,E0,E0\n HEX C7,C4,C0,C0,C1,C0,C0,C0\n HEX C3,C0,C0,C0,C1,C0,C0,C0\n\n HEX 8F,8C,88,88,81,80,80,80\n HEX 83,80,80,80,81,80,80,80\n HEX 87,84,80,80,81,80,80,80\n HEX 83,80,80,80,81,80,80,80\n\n HEX 9F,9C,98,98,91,90,90,90\n HEX 83,80,80,80,81,80,80,80\n HEX 87,84,80,80,81,80,80,80\n HEX 83,80,80,80,81,80,80,80\n\n HEX 8F,8C,88,88,81,80,80,80\n HEX 83,80,80,80,81,80,80,80\n HEX 87,84,80,80,81,80,80,80\n HEX 83,80,80,80,81,80,80,80\n\n*-------------------------------\n*\n* SHIFTL-H/CARRYL-H\n*\n* Index: Bit offset (0-6)\n* Returns address of corresponding shift/carry table\n*\n*-------------------------------\n\nSHIFTL dfb #SHIFT0-$80\n dfb #SHIFT1-$80\n dfb #SHIFT2-$80\n dfb #SHIFT3-$80\n dfb #SHIFT4-$80\n dfb #SHIFT5-$80\n dfb #SHIFT6-$80\n\nSHIFTH dfb >SHIFT0-$80\n dfb >SHIFT1-$80\n dfb >SHIFT2-$80\n dfb >SHIFT3-$80\n dfb >SHIFT4-$80\n dfb >SHIFT5-$80\n dfb >SHIFT6-$80\n\nCARRYL dfb #CARRY0-$80\n dfb #CARRY1-$80\n dfb #CARRY2-$80\n dfb #CARRY3-$80\n dfb #CARRY4-$80\n dfb #CARRY5-$80\n dfb #CARRY6-$80\n\nCARRYH dfb >CARRY0-$80\n dfb >CARRY1-$80\n dfb >CARRY2-$80\n dfb >CARRY3-$80\n dfb >CARRY4-$80\n dfb >CARRY5-$80\n dfb >CARRY6-$80\n\n*-------------------------------\n*\n* AMASKS/BMASKS\n*\n* Index: Bit offset (0-6)\n* Returns appropriate mask bytes\n*\n*-------------------------------\n\nAMASKS dfb %10000000\n dfb %10000001\n dfb %10000011\n dfb %10000111\n dfb %10001111\n dfb %10011111\n dfb %10111111\n\nBMASKS dfb %11111111\n dfb %11111110\n dfb %11111100\n dfb %11111000\n dfb %11110000\n dfb %11100000\n dfb %11000000\n\n*-------------------------------\n*\n* OPCODE\n*\n* Index: OPACITY (0-5)\n* Returns opcode to put in self-mod code\n*\n*-------------------------------\n\nOPCODE dfb $31 ;and (oper),Y\n dfb $11 ;ora\n dfb $91 ;sta\n dfb $51 ;eor\n dfb $31 ;and\n dfb $91 ;sta\n\n*-------------------------------\n lst\n usr $a9,2,$0000,*-org\n lst off\n"
  },
  {
    "path": "01 POP Source/Source/MASTER.S",
    "content": "* master 3.5\nDemoDisk = 0\nFinalDisk = 1\n\norg = $f880\n lst off\n*-------------------------------\n*\n*  M  A  S  T  E  R\n*\n*  (3.5\" version)\n*\n*  Sits in main l.c.\n*\n*-------------------------------\n org org\n\n jmp FIRSTBOOT\n jmp LOADLEVEL\n jmp RELOAD\n jmp LoadStage2\n jmp RELOAD\n\n jmp ATTRACTMODE\n jmp CUTPRINCESS\n jmp SAVEGAME\n jmp LOADGAME\n jmp DOSTARTGAME\n\n jmp EPILOG\n jmp LOADALTSET\n\n*-------------------------------\n lst\n put eq\n lst\n put gameeq\n lst off\n\nTmoveauxlc = moveauxlc-$b000\n\n*-------------------------------\n* RW18 ID bytes\n\nPOPside1 = $a9\nPOPside2 = $ad\n\n* RW18 zero page vars\n\nslot = $fd\ntrack = $fe\nlastrack = $ff\n\n* RW18 commands\n\nDrvOn = $00\nDrvOff = $01\nSeek = $02\nRdSeqErr = $03\nRdGrpErr = $04\nWrtSeqErr = $05\nWrtGrpErr = $06\nModID = $07\nRdSeq = $83\nRdGrp = $84\nWrtSeq = $85\nWrtGrp = $86\nInc = $40 ;.Inc to inc track\n\n*-------------------------------\n* Local vars\n\n dum locals\n\n]dest ds 2\n]source ds 2\n]endsourc ds 2\n\nnewBGset1 ds 1\nnewBGset2 ds 1\nnewCHset ds 1\n\n dend\n\n*-------------------------------\n* Passed params\n\nparams = $3f0\n\n*-------------------------------\n* Coordinates of default load-in level\n\ndemolevel db 33,0\nfirstlevel db 33,1\n\n*-------------------------------\n* Hi bytes of crunch data\n* Double hi-res (stage 1)\n\npacSplash = $40\ndelPresents = $70\ndelByline = $72\ndelTitle = $74\npacProlog = $7c\npacSumup = $60 ;mainmem\npacEpilog = $76 ;side B\n\n* Single hires (stage 2)\n\npacProom = $84\n\n*-------------------------------\n* Music song #s\n* Set 1 (title)\n\ns_Presents = 1\ns_Byline = 2\ns_Title = 3\ns_Prolog = 4\ns_Sumup = 5\ns_Princess = 7\ns_Squeek = 8\ns_Vizier = 9\ns_Buildup = 10\ns_Magic = 11\n\n* Set 2 (epilog)\n\ns_Epilog = 1\ns_Curtain = 2\n\n*-------------------------------\n* Soft switches\n\nIOUDISoff = $c07f\nIOUDISon = $c07e\nDHIRESoff = $c05f\nDHIRESon = $c05e\nHIRESon = $c057\nHIRESoff = $c056\nPAGE2on = $c055\nPAGE2off = $c054\nMIXEDon = $c053\nMIXEDoff = $c052\nTEXTon = $c051\nTEXToff = $c050\nALTCHARon = $c00f\nALTCHARoff = $c00e\nADCOLon = $c00d\nADCOLoff = $c00c\nALTZPon = $c009\nALTZPoff = $c008\nRAMWRTaux = $c005\nRAMWRTmain = $c004\nRAMRDaux = $c003\nRAMRDmain = $c002\nADSTOREon = $c001\nADSTOREoff = $c000\n\nRWBANK2 = $c083\nRWBANK1 = $c08b\n\n*-------------------------------\nkprincess = \"p\"-$60 ;temp!\nkdemo = \"d\"-$60 ;temp!\nkrestart = \"r\"-$60\nkresume = \"l\"-$60\n\n*-------------------------------\n*\n* Notes:\n*\n* Game code sits in auxmem & aux l.c. and uses aux z.p.\n*\n* Routines in main l.c. (including MASTER and HIRES)\n* are called via intermediary routines in GRAFIX (in auxmem).\n*\n* RW18 sits in bank 1 of main language card;\n* driveon switches it in, driveoff switches it out.\n*\n*-------------------------------\n*\n*  F I R S T B O O T\n*\n*-------------------------------\nFIRSTBOOT\n lda MIXEDoff\n jsr setaux\n\n* Set BBund ID byte\n\n lda #POPside1\n sta BBundID\n\n* Load hires tables & add'l hires routines\n\n sta RAMWRTmain\n lda #2\n sta track\n jsr rw18\n db RdGrp.Inc\n hex e0,e1,e2,e3,e4,e5,e6,e7,e8\n hex e9,ea,eb,ec,ed,00,00,00,00\n\n* Load as much of Stage 3 as we can keep\n\n jsr loadperm\n\n* Turn off drive\n\n jsr driveoff\n\n* Check for IIGS\n\n jsr checkIIGS ;returns IIGS\n\n* Start attract loop\n\n jsr initsystem ;in topctrl\n\n lda #0\n sta invert ;rightside up Y tables\n\n lda #1\n sta soundon ;Sound on\n\n jmp AttractLoop\n\n*-------------------------------\n*\n*   Reload code & images\n*   (Temp routine for game development)\n*\n*-------------------------------\nRELOAD\n do 0\n jsr driveon\n\n jsr loadperm\n jsr LoadStage3\n\n jmp driveoff\n fin\n\n*-------------------------------\n*\n* Load music (1K)\n*\n* Load at $5000 mainmem & move to aux l.c.\n*\n*-------------------------------\n* Load music set 1 (title)\n\nloadmusic1\n jsr setmain\n lda #34\n sta track\n jsr rw18\n db RdSeq,$4e ;we only want $50-53\n]mm jsr setaux\n jmp xmovemusic\n\n*-------------------------------\n* Load music set 2 (game)\n\nloadmusic2\n jsr setmain\n lda #20\n sta track\n jsr rw18\n db RdGrp.Inc\n hex 50,51,52,53,00,00,00,00,00\n hex 00,00,00,00,00,00,00,00,00\n jmp ]mm\n\n*-------------------------------\n* Load music set 3 (epilog)\n\nloadmusic3\n jmp loadmusic1\n\n*-------------------------------\nsetaux sta RAMRDaux\n sta RAMWRTaux\n rts\n\nsetmain sta RAMRDmain\n sta RAMWRTmain\n rts\n\n*-------------------------------\n*\n*  D R I V E   O N\n*\n*  In: A = delay\n*      BBundID\n*\n*  Sets auxmem\n*\n*-------------------------------\ndriveon lda #0\ndriveon1 sta :delay\n\n jsr setaux ;set auxmem\n\n* switch in bank 1 (RW18)\n\n bit RWBANK1\n bit RWBANK1 ;1st 4k bank\n\n* set Bbund ID\n\n lda BBundID\n sta :IDbyte\n\n jsr rw18\n db ModID\n:IDbyte hex a9 ;Bbund ID byte\n\n* turn on drive 1\n\n jsr rw18\n db DrvOn\n:drive hex 01\n:delay hex 00\n rts\n\n*-------------------------------\n*\n*  D R I V E   O F F\n*\n*-------------------------------\ndriveoff jsr rw18\n db DrvOff\n\n* switch in bank 2\n\n bit RWBANK2\n bit RWBANK2 ;2nd 4k bank\n\n sta $c010 ;clr kbd\n\n jmp setaux ;& set auxmem\n\n*-------------------------------\n*\n*  Set first level/demo level\n*\n*-------------------------------\nset1stlevel\n lda firstlevel\n ldx firstlevel+1\nSetLevel sta params\n stx params+1\n]rts rts\n\nsetdemolevel\n lda demolevel\n ldx demolevel+1\n jmp SetLevel\n\n*-------------------------------\n*\n* Check track 22 to make sure it's the right disk\n*\n* (Scratch page 2 mainmem--return w/mainmem set)\n*\n*-------------------------------\ncheckdisk\n jsr setaux\n ldx #POPside2\n stx BBundID\n\n jsr driveon\n:loop jsr setmain\n lda #22\n sta track\n jsr rw18\n db RdGrpErr.Inc\n hex 02,00,00,00,00,00,00,00,00\n hex 00,00,00,00,00,00,00,00,00\n bcc ]rts\n jsr error\n jmp :loop\n\n*-------------------------------\n*\n* Save/load game\n*\n* Write/read 256 bytes of data: sector 0, track 23, side 2\n* We scorch an entire track, but on side 2 we can afford it\n*\n*-------------------------------\nSAVEGAME\n jsr checkdisk ;sets main\n\n sta RAMRDaux\n ldx #15\n:loop lda savedgame,x ;aux\n sta $200,x ;main\n dex\n bpl :loop\n sta RAMRDmain\n\n lda #23\n sta track\n jsr rw18\n db WrtGrpErr\n hex 02,00,00,00,00,00,00,00,00\n hex 00,00,00,00,00,00,00,00,00\n bcc :ok\n jsr whoop\n:ok jmp driveoff\n\n*-------------------------------\nLOADGAME\n jsr checkdisk ;sets main\n\n lda #23\n sta track\n jsr rw18\n db RdGrp\n hex 02,00,00,00,00,00,00,00,00\n hex 00,00,00,00,00,00,00,00,00\n\n sta RAMWRTaux\n ldx #15\n:loop lda $200,x ;main\n sta savedgame,x ;aux\n dex\n bpl :loop\n\n jmp driveoff\n\n*-------------------------------\n*\n* Load alt. character set (chtable4)\n*\n* In: Y = CHset4\n*\n*-------------------------------\nLOADALTSET\n sty newCHset\n\n jsr driveon\n\n jsr rdch4\n\n jmp driveoff\n\n*-------------------------------\n*\n* L O A D   L E V E L\n*\n* In: bluepTRK, bluepREG\n*       TRK = track # (1-33)\n*       REG = region on track (0-1)\n*     A = BGset1; X = BGset2; Y = CHset4\n*\n* Load level into \"working blueprint\" buffer in auxmem;\n* game code will make a \"backup copy\" into aux l.c.\n* (which we can't reach from here).\n*\n* If bg & char sets in memory aren't right, load them in\n*\n*-------------------------------\nLOADLEVEL\n sta newBGset1\n stx newBGset2\n sty newCHset\n\n jsr driveon\n\n jsr rdbluep ;blueprint\n jsr rdbg1 ;bg set 1\n jsr rdbg2 ;bg set 2\n jsr rdch4 ;char set 4\n\n jsr vidstuff\n\n jmp driveoff\n\n*-------------------------------\nsetbluep\n lda bluepTRK\n sta track\n lda bluepREG\n]rts rts\n\n*-------------------------------\nvidstuff\n lda BBundID\n cmp #POPside2\n bne ]rts\n lda $c000\n cmp #\"^\"\n bne ]rts\n\n jsr setmain\n lda #12\n sta track\n jsr rw18\n db RdGrp.Inc\n hex 00,00,00,00,00,00,00,00,00\n hex 00,00,00,0c,0d,0e,0f,10,11\n:loop jsr rw18\n db RdSeq.Inc\n:sm hex 12\n lda :sm\n clc\n adc #$12\n sta :sm\n cmp #$6c\n bcc :loop\n jsr driveoff\n jsr setmain\n jmp $c00\n\n*-------------------------------\n* Track data for alt bg/char sets\n*\n* Set #:        0  1  2  3  4  5  6\n\nbg1trk hex 05,00,07\nbg2trk hex 12,02,09\nch4trk hex 0d,03,04,05,0a,0b\nch4off hex 0c,00,06,0c,00,06\n\n*-------------------------------\nrdbg1 ldx newBGset1\n cpx BGset1 ;already in memory?\n beq :rts ;yes--no need to load\n stx BGset1\n lda bg1trk,x\n sta track\n jsr rw18\n db RdSeq.Inc,$60\n jsr rw18\n db RdSeq.Inc,$72\n]rts\n:rts rts\n\nrdbg2 ldx newBGset2\n cpx BGset2\n beq ]rts\n stx BGset2\n lda bg2trk,x\n sta track\n jsr rw18\n db RdSeq.Inc,$84\n rts\n\nrdch4 ldx newCHset\n cpx CHset\n beq ]rts\n stx CHset\n lda ch4trk,x\n sta track\n lda ch4off,x\n beq :off0\n cmp #6\n beq :off6\n cmp #12\n beq :off12\n rts\n\n:off12 jsr rw18\n db RdGrp.Inc\n hex 00,00,00,00,00,00,00,00,00\n hex 00,00,00,96,97,98,99,9a,9b\n jsr rw18\n db RdSeq.Inc,$9c\n rts\n\n:off6 jsr rw18\n db RdGrp.Inc\n hex 00,00,00,00,00,00,96,97,98\n hex 99,9a,9b,9c,9d,9e,9f,a0,a1\n jsr rw18\n db RdGrp.Inc\n hex a2,a3,a4,a5,a6,a7,a8,a9,aa\n hex ab,ac,ad,00,00,00,00,00,00\n rts\n\n:off0 jsr rw18\n db RdSeq.Inc,$96\n jsr rw18\n db RdGrp.Inc\n hex a8,a9,aa,ab,ac,ad,00,00,00\n hex 00,00,00,00,00,00,00,00,00\n]rts rts\n\n*-------------------------------\n*\n* read blueprint\n*\n*-------------------------------\nrdbluep\n jsr setbluep\n bne :reg1\n\n:reg0 jsr rw18\n db RdGrpErr\n hex b7,b8,b9,ba,bb,bc,bd,be,bf\n hex 00,00,00,00,00,00,00,00,00\n bcc ]rts\n jsr error\n jmp :reg0\n\n:reg1 jsr rw18\n db RdGrpErr\n hex 00,00,00,00,00,00,00,00,00\n hex b7,b8,b9,ba,bb,bc,bd,be,bf\n bcc ]rts\n jsr error\n jmp :reg1\n\n*-------------------------------\n*\n* Copy one DHires page to another\n*\n*-------------------------------\ncopy1to2\n lda #$40 ;dest\n ldx #$20 ;org\n bne copydhires\n\ncopy2to1\n lda #$20\n ldx #$40\n\ncopydhires\n sta IMAGE+1 ;dest\n stx IMAGE ;org\n\n jsr _copy2000aux\n jmp _copy2000 ;in hires\n\n*-------------------------------\n*\n*  Cut to princess screen\n*\n*-------------------------------\nCUTPRINCESS\n jsr blackout\n lda #1 ;seek track 0\ncutprincess1\n jsr LoadStage2 ;displaces bgtab1-2, chtab4\n\n lda #pacProom\n jsr SngExpand\n\n lda #$40\n sta IMAGE+1\n lda #$20\n sta IMAGE ;copy page 1 to page 2\n jmp _copy2000 ;in HIRES\n\n*-------------------------------\n*\n*  Epilog (You Win)\n*\n*-------------------------------\nEPILOG\n lda #1\n sta soundon\n sta musicon\n jsr blackout\n jsr LoadStage1B\n\n jsr Epilog\n\n lda #POPside1\n sta BBundID\n sta $c010\n:loop lda $c000\n bpl :loop ;fall thru\n\n*-------------------------------\n*\n*  A  T  T  R  A  C  T\n*\n*  Self-running \"attract mode\"\n*\n*-------------------------------\nATTRACTMODE\nAttractLoop\n lda #1\n sta musicon\n\n jsr SetupDHires\n\n jsr PubCredit\n\n jsr AuthorCredit\n\n jsr TitleScreen\n\n jsr Prolog1\n]princess\n jsr PrincessScene\n\n jsr SetupDHires\n\n jsr Prolog2\n\n jsr SilentTitle\n\n jmp Demo\n\n*-------------------------------\n*\n* Set up double hi-res\n*\n*-------------------------------\nSetupDHires\n\n* Show black lo-res scrn\n\n jsr blackout\n\n* Load in Stage 1 data\n\n jmp LoadStage1A\n\n*-------------------------------\n*\n* \"Broderbund Software Presents\"\n*\n*-------------------------------\nPubCredit\n\n* Unpack splash screen into DHires page 1\n\n jsr unpacksplash\n\n* Show DHires page 1\n\n jsr setdhires\n\n* Copy to DHires page 2\n\n jsr copy1to2\n\n lda #44\n jsr tpause\n\n* Unpack \"Broderbund Presents\" onto page 1\n\n lda #delPresents\n jsr DeltaExpPop\n\n ldx #80\n lda #s_Presents\n jsr PlaySongI\n\n jmp CleanScreen\n\n*-------------------------------\n*\n* Credit line disappears\n*\n*-------------------------------\nCleanScreen\n\n* Switch to DHires page 2\n* (credit line disappears)\n\n lda PAGE2on\n\n* Copy DHires page 2 back to hidden page 1\n\n jsr copy2to1\n\n* Display page 1\n\n lda PAGE2off\n]rts rts\n\n*-------------------------------\n*\n* \"A Game by Jordan Mechner\"\n*\n*-------------------------------\nAuthorCredit\n\n lda #42\n jsr tpause\n\n* Unpack byline onto page 1\n\n lda #delByline\n jsr DeltaExpPop\n\n ldx #80\n lda #s_Byline\n jsr PlaySongI\n\n* Credit line disappears\n\n jmp CleanScreen\n\n*-------------------------------\n*\n* \"Prince of Persia\"\n*\n*-------------------------------\nSilentTitle\n jsr unpacksplash\n\n jsr copy1to2\n\n lda #20\n jsr tpause\n\n lda #delTitle\n jsr DeltaExpPop\n\n lda #160\n jmp tpause\n\n*-------------------------------\nTitleScreen\n lda #38\n jsr tpause\n\n* Unpack title onto page 1\n\n lda #delTitle\n jsr DeltaExpPop\n\n ldx #140\n lda #s_Title\n jsr PlaySongI\n\n* Credit line disappears\n\n jmp CleanScreen\n\n*-------------------------------\n*\n*  Prologue, part 1\n*\n*-------------------------------\nProlog1\n lda #pacProlog\n sta RAMRDaux\n jsr DblExpand\n\n ldx #250\n lda #s_Prolog\n jmp PlaySongI\n\n*-------------------------------\n*\n*  Princess's room: Vizier starts hourglass\n*\n*-------------------------------\nPrincessScene\n jsr blackout\n\n jsr ReloadStuff ;wiped out by dhires titles\n\n lda #0 ;don't seek track 0\n jsr cutprincess1\n\n lda #0 ;cut #0 (intro)\n jmp xplaycut ;aux l.c. via grafix\n\n*-------------------------------\n*\n*  Prologue, part 2\n*\n*-------------------------------\nProlog2\n lda #pacSumup\n sta RAMRDmain\n jsr DblExpand\n\n jsr setdhires\n\n ldx #250\n lda #s_Sumup\n jmp PlaySongI\n\n*-------------------------------\n*\n* Epilog\n*\n*-------------------------------\nEpilog\n lda IIGS\n bne SuperEpilog ;super hi-res ending if IIGS\n\n lda #pacEpilog\n sta RAMRDaux\n jsr DblExpand\n\n jsr setdhires\n\n lda #s_Epilog\n jsr PlaySongNI\n lda #15\n jsr pauseNI\n jsr unpacksplash\n lda #75\n jsr pauseNI\n\n lda #s_Curtain\n jsr PlaySongNI\n lda #60\n jsr pauseNI\n\n jmp blackout\n\nunpacksplash\n lda #pacSplash\n sta RAMRDaux\n jmp DblExpand\n\n*-------------------------------\n*\n* Super hi-res epilog (IIGS only)\n*\n*-------------------------------\nSuperEpilog\n lda #1 ;aux\n jsr fadein ;fade in epilog screen\n jsr setaux\n\n lda #s_Epilog\n jsr PlaySongNI\n\n jsr fadeout\n lda #0 ;main\n jsr fadein ;fade to palace screen\n jsr setaux\n\n lda #80\n jsr pauseNI\n\n lda #s_Curtain\n jsr PlaySongNI\n\n lda #255\n jsr pauseNI\n\n jsr fadeout ;...and fade to black\n\n jmp * ;and hang (because it's too much\n;trouble to restart)\n\n*-------------------------------\n*\n*  Demo sequence\n*\n*-------------------------------\nDemo\n jsr blackout\n\n jsr LoadStage3\n\n jsr setdemolevel\n jsr rdbluep\n\n jsr driveoff\n\n* Go to TOPCTRL\n\n lda #0\n jmp start\n\n*-------------------------------\n* non-interruptible pause\n\npauseNI\n:loop sta pausetemp\n ldy #20\n:loop1 ldx #0\n:loop2 dex\n bne :loop2\n dey\n bne :loop1\n\n lda pausetemp\n sec\n sbc #1\n bne :loop\n]rts rts\n\n*-------------------------------\n*\n*  Start game? (if key or button pressed)\n*\n*-------------------------------\nStartGame?\n jsr musickeys\n cmp #$80 ;key or button press?\n bcc ]rts ;no\n\n do FinalDisk\n else\n cmp #kdemo ;temp!\n bne :1\n jmp Demo\n:1 cmp #kprincess ;temp!\n bne :2\n jmp ]princess\n fin\n\n:2 cmp #krestart\n bne :3\n jmp AttractLoop\n:3 ;fall thru to DOSTARTGAME\n*-------------------------------\n*\n*  Start a game\n*\n*-------------------------------\nDOSTARTGAME\n jsr blackout\n\n* Turn on drive & load Stage 3 routines\n\n:1 jsr LoadStage3\n\n* Load 1st level\n\n jsr set1stlevel\n\n jsr rdbluep\n\n* Turn off drive & set aux\n\n jsr driveoff\n\n* Go to TOPCTRL\n\n lda #1\n sta musicon\n\n do DemoDisk\n else\n\n lda keypress\n cmp #kresume\n bne :newgame\n\n* Resume old game\n\n lda #4 ;arbitrary\n jmp startresume\n\n fin\n\n* Start new game\n\n:newgame\n lda #1\n jmp start\n\n*-------------------------------\n*\n* Load permanent code & data\n* (only once)\n*\n*-------------------------------\nloadperm\n lda #3\n sta track\n\n jsr setaux\n\n jsr rw18\n db RdSeq.Inc,$0e\n\n jsr rw18\n db RdGrp.Inc\n hex 04,05,06,07,08,09,0a,0b,0c\n hex 0d,20,21,22,23,24,25,26,27\n\n jsr setmain\n lda #9\n sta track\n jsr rw18\n db RdSeq.Inc,$84\n jsr rw18\n db RdSeq.Inc,$96\n\n jsr rw18\n db RdSeq.Inc,$08\n\n jsr rw18\n db RdGrp.Inc\n hex 1a,1b,1c,1d,1e,1f,a8,a9,aa\n hex ab,ac,ad,ae,af,b0,b1,b2,b3\n\n jsr rw18\n db RdGrp.Inc\n hex b4,b5,b6,b7,b8,b9,ba,bb,bc\n hex bd,be,bf,00,00,00,00,00,00\n\n*-------------------------------\n*\n* Load aux l.c. stuff (tracks 19-21 & 34)\n* (includes music set 1)\n*\n* Load into main hires area & move to aux l.c.\n*\n*-------------------------------\n lda #19\n sta track\n\n jsr rw18\n db RdGrp.Inc\n hex 00,00,20,21,22,23,24,25,26\n hex 27,28,29,2a,2b,2c,2d,2e,2f\n\n jsr rw18\n db RdGrp.Inc\n hex 00,00,00,00,30,31,32,33,34\n hex 35,36,37,38,39,3a,3b,3c,3d\n jsr rw18\n db RdSeq.Inc,$3e\n\n lda #34\n sta track\n jsr rw18\n db RdGrp.Inc\n hex 00,00,50,51,52,53,54,55,56\n hex 57,58,59,5a,5b,5c,5d,5e,5f\n\n jsr setaux\n lda #1\n sta MSset\n\n jsr setmain\n jmp Tmoveauxlc\n\n*-------------------------------\n*\n*  Stage 1: static dbl hires screens -- no animation\n*  Stage 2: character animation only (bg is unpacked)\n*  Stage 3: full game animation\n*\n*-------------------------------\n*\n* Load Stage 1 data (sida A)\n*\n*-------------------------------\n]lsub sta track\n:test jsr rw18\n db RdSeqErr.Inc,$40\n bcc :ok\n jsr error\n jmp :test\n:ok\n jsr rw18\n db RdSeq.Inc,$52\n jsr rw18\n db RdSeq.Inc,$64\n jsr rw18\n db RdSeq.Inc,$76\n jsr rw18\n db RdSeq.Inc,$88\n rts\n\nLoadStage1A\n jsr driveon\n\n lda #22\n jsr ]lsub\n\n jsr setmain\n jsr rw18\n db RdSeq.Inc,$60\n jsr rw18\n db RdSeq.Inc,$72\n\n jsr loadmusic1\n\n jsr setaux\n lda #$ff\n sta BGset1\n sta BGset2\n sta CHset\n\n jmp driveoff\n\n*-------------------------------\n*\n*  Load stage 1 (side B)\n*\n*-------------------------------\nLoadStage1B\n jsr driveon\n\n jsr loadmusic3 ;epilog\n\n lda IIGS\n bne :shires ;Super hi-res ending only if IIGS\n\n lda #18\n jsr ]lsub\n jmp driveoff\n\n:shires jsr loadsuper ;in unpack\n jmp driveoff\n\n*-------------------------------\n*\n* Reload 2000-6000 auxmem\n* (wiped out by dhires titles)\n*\n*-------------------------------\nReloadStuff\n jsr driveon\n\n:test lda #4\n sta track\n jsr rw18\n db RdGrpErr\n hex 00,00,00,00,00,00,00,00,00\n hex 00,20,21,22,23,24,25,26,27\n bcc :ok\n jsr error\n jmp :test\n:ok\n lda #15\n sta track\n jsr rw18\n db RdSeq.Inc,$28\n jsr rw18\n db RdSeq.Inc,$3a\n jsr rw18\n db RdSeq.Inc,$4c\n\n jmp driveoff\n\n*-------------------------------\n*\n*  Load stage 2 data (6000-a800)\n*\n*-------------------------------\nLoadStage2\n ldx BBundID\n cpx #POPside2\n beq LoadStage2B\n\nLoadStage2A\n jsr driveon\n\n lda #0\n jsr loadch7 ;side A only\n\n lda #29\n]ls2 sta track\n\n:test jsr rw18\n db RdSeqErr.Inc,$60\n bcc :ok\n jsr error\n jmp :test\n:ok\n jsr rw18\n db RdSeq.Inc,$72\n jsr rw18\n db RdSeq.Inc,$84\n jsr rw18\n db RdGrp.Inc\n hex 96,97,98,99,9a,9b,9c,9d,9e\n hex 00,00,00,00,00,00,00,00,00\n\n lda #$ff\n sta BGset1\n sta BGset2\n sta CHset\n\n jmp driveoff\n\n* Load chtable7 (side A only)\n\nloadch7\n sta recheck0\n:test lda #28\n sta track\n jsr rw18\n db RdGrpErr.Inc\n hex 00,00,00,00,00,00,00,00,00\n hex 00,00,00,00,9f,a0,a1,a2,a3\n bcc :ok\n jsr error\n jmp :test\n:ok\n]rts rts\n\n*-------------------------------\n*\n*  Load stage 2 routines (side B)\n*\n*-------------------------------\nLoadStage2B\n jsr driveon\n\n lda #24\n bne ]ls2\n\n*-------------------------------\n*\n*  Load stage 3\n*  Full version (from stage 1)\n*\n*  Reload 2000-AC00 auxmem, 6000-7200 mainmem\n*\n*-------------------------------\nLoadStage3\n jsr driveon\n\n lda #4\n sta track\n\n:loop jsr rw18\n db RdGrpErr.Inc\n hex 00,00,00,00,00,00,00,00,00\n hex 00,20,21,22,23,24,25,26,27\n bcc :ok\n jsr error\n jmp :loop\n:ok\n jsr rw18\n db RdSeq.Inc,$60\n jsr rw18\n db RdSeq.Inc,$72 ;bgtable1\n\n jsr setmain\n jsr rw18\n db RdSeq.Inc,$60\n jsr rw18\n db RdSeq.Inc,$72\n\n jsr setaux\n\n lda #13\n sta track\n jsr rw18\n db RdGrp.Inc\n hex 00,00,00,00,00,00,00,00,00\n hex 00,00,00,96,97,98,99,9a,9b\n jsr rw18\n db RdSeq.Inc,$9c ;chtable4\n jsr rw18\n db RdSeq.Inc,$28\n jsr rw18\n db RdSeq.Inc,$3a\n jsr rw18\n db RdSeq.Inc,$4c\n jsr rw18\n db RdSeq.Inc,$84 ;bgtable2\n\n lda #0\n sta BGset1\n sta BGset2\n sta CHset\n\n jsr loadmusic2\n\n jmp setaux\n\n*-------------------------------\n*\n* Play song--interruptible & non-interruptible\n*\n* (Enter & exit w/ bank 2 switched in)\n*\n* In: A = song #\n*     X = length to pause if sound is turned off\n*\n*-------------------------------\nPlaySongNI ;non-interruptible\n;(& ignores sound/music toggles)\n jsr setaux\n jsr xminit\n:loop jsr xmplay\n cmp #0\n bne :loop\n]rts rts\n\n*-------------------------------\nPlaySongI ;interruptible\n jsr setaux\n beq ]rts\n\n tay\n lda musicon\n and soundon\n beq :pause\n\n tya\n jsr xminit\n:loop jsr StartGame?\n jsr xmplay\n cmp #0\n bne :loop\n]rts rts\n\n:pause txa ;falls thru to tpause\n*-------------------------------\n*\n*  In: A = delay (max = 255)\n*\n*-------------------------------\ntpause\n:loop sta pausetemp\n\n ldy #2\n:loop1 ldx #0\n:loop2 jsr StartGame?\n dex\n bne :loop2\n dey\n bne :loop1\n\n lda pausetemp\n sec\n sbc #1\n bne :loop\n]rts rts\n\n*-------------------------------\n*\n* Disk error\n*\n* Prompt user for correct disk side & wait for keypress\n*\n*-------------------------------\nerror\n jsr driveoff\n\n jsr prompt\n\n jmp driveon\n\n*-------------------------------\n lst\neof ds 1\n usr $a9,1,$a80,*-org\n lst off\n"
  },
  {
    "path": "01 POP Source/Source/MISC.S",
    "content": "* misc\norg = $f900\nDemoDisk = 0\n tr on\n lst off\n*-------------------------------\n org org\n\n jmp VANISHCHAR\n jmp MOVEMUSIC\n clc\n bcc MOVEAUXLC ;relocatable\n jmp FIRSTGUARD\n jmp MARKMETERS\n\n jmp POTIONEFFECT\n jmp MOUSERESCUE\n jmp STABCHAR\n jmp UNHOLY\n jmp REFLECTION\n\n jmp MARKKIDMETER\n jmp MARKOPPMETER\n jmp BONESRISE\n jmp DECSTR\n jmp DOSAVEGAME\n\n jmp LOADLEVELX\n jmp CHECKALERT\n jmp DISPVERSION\n\n*-------------------------------\n lst\n put eq\n lst\n put gameeq\n lst\n put seqdata\n lst\n put movedata\n lst\n put soundnames\n lst off\n\n dum $f0\n]Xcount ds 1\n]Xend ds 1\n dend\n\n*-------------------------------\nALTZPon = $c009\nALTZPoff = $c008\nRAMWRTaux = $c005\nRAMWRTmain = $c004\nRAMRDaux = $c003\nRAMRDmain = $c002\nADSTOREon = $c001\nADSTOREoff = $c000\nRWBANK2 = $c083\nRWBANK1 = $c08b\n\nPOPside1 = $a9\nPOPside2 = $ad\n\nFirstSideB = 3\n\n*-------------------------------\n*\n* Vanish character\n*\n*-------------------------------\nVANISHCHAR\n lda #86\n sta CharFace\n lda #0\n sta CharAction\n sta CharLife\n sec\n sbc OppStrength\n sta ChgOppStr\n]rts rts\n\n*-------------------------------\n*\n*  Move a block of memory\n*\n*  In: A < X.Y\n*\n*  20 < 40.60 means 2000 < 4000.5fffm\n*  WARNING: If x >= y, routine will wipe out 64k\n*\n*-------------------------------\n dum locals\n]dest ds 2\n]source ds 2\n]endsourc ds 2\n dend\n\nMOVEMEM sta ]dest+1\n stx ]source+1\n sty ]endsourc+1\n\n ldy #0\n sty ]dest\n sty ]source\n sty ]endsourc\n\n:loop lda (]source),y\n sta (]dest),y\n iny\n bne :loop\n\n inc ]source+1\n inc ]dest+1\n lda ]source+1\n cmp ]endsourc+1\n bne :loop\n rts\n\n*-------------------------------\n*\n* Move 1K of music data from $5000 mainmem to aux l.c.\n*\n*-------------------------------\nMOVEMUSIC\n bit RWBANK1\n bit RWBANK1\n sta RAMRDmain\n\n lda #$d0\n ldx #$50\n ldy #$54\n jsr MOVEMEM\n\n sta RAMRDaux\n]rts rts\n\n*-------------------------------\n*\n*  Move $2000.5FFF mainmem to auxiliary language card\n*  Also sets interrupt vector ($FFFE.FFFF) in both l.c.'s\n*\n*  NOTE: This code is loaded into mainmem by MASTER\n*  and called while still in mainmem.  Once in aux l.c.\n*  this routine is useless!\n*\n*  Returns control to main l.c. bank 1\n*\n*-------------------------------\nTmovemem = MOVEMEM-$b000\n\nMOVEAUXLC\n sta ALTZPon\n bit RWBANK2\n bit RWBANK2\n\n lda #$d0\n ldx #$20\n ldy #$50\n jsr Tmovemem\n\n bit RWBANK1\n bit RWBANK1\n\n lda #$d0\n ldx #$50\n ldy #$60\n jsr Tmovemem\n\n* & set VBL interrupts\n\n lda #vbli ;routine in GRAFIX\n sta $FFFE\n lda #>vbli\n sta $FFFF\n\n sta ALTZPoff\n\n lda #vbli\n sta $FFFE\n lda #>vbli\n sta $FFFF ;set in main l.c. too\n\n rts\n\n*-------------------------------\n*\n* Player can't run or jump past en-garde guard\n*\n*-------------------------------\nFIRSTGUARD\n lda EnemyAlert\n cmp #2\n bcc ]rts\n lda CharSword\n bne ]rts\n lda OpSword\n beq ]rts\n lda OpAction\n cmp #2\n bcs ]rts\n\n lda CharFace\n cmp OpFace\n beq ]rts\n\n jsr getopdist\n cmp #-15\n bcc ]rts\n\n* Bump off guard\n\n ldx CharBlockY\n lda FloorY+1,x\n sta CharY\n lda #bump\n jsr jumpseq\n jmp animchar\n\n*-------------------------------\n*\n* Mark strength meters\n*\n*-------------------------------\nMark3 jsr Mark1 ;mark 3 blocks\n iny\nMark2 jsr Mark1 ;mark 2 blocks\n iny\nMark1 lda #4\n sta height\n clc\n lda #2\n jsr markwipe\n jmp markred\n\nMARKMETERS\n jsr MARKKIDMETER\n jmp MARKOPPMETER\n\nMARKKIDMETER\n ldy #20\n bne Mark3\n\nMARKOPPMETER\n ldy #28\n bne Mark2\n]rts rts\n\n*-------------------------------\n*\n* Potion takes effect\n*\n*-------------------------------\nwtlesstimer = 200\nvibetimer = 3\n\nPOTIONEFFECT\n lda CharID\n bne ]rts\n\n ldx lastpotion\n beq ]rts\n bpl :notswd\n\n* Sword (-1)\n\n lda #1\n sta gotsword\n lda #s_Sword\n ldx #25\n jsr cuesong\n lda #$ff\n sta lightcolor\n lda #3\n sta lightning ;3 white flashes\n rts\n\n* Recharge meter (1)\n\n:notswd cpx #1\n bne :2\n\n lda KidStrength\n cmp MaxKidStr\n beq ]rts ;already at full strength\n\n lda #$99\n sta lightcolor\n lda #2\n sta lightning ;2 orange flashes\n lda #s_ShortPot\n ldx #25\n jsr cuesong\n lda #1\n sta ChgKidStr\n rts\n\n* Boost meter (2)\n\n:2 cpx #2\n bne :3\n lda #$99\n sta lightcolor\n lda #5\n sta lightning ;5 orange flashes\n lda #s_Potion\n ldx #25\n jsr cuesong\n jmp boostmeter\n\n* Weightless (3)\n\n:3 cpx #3\n bne :4\n lda #s_ShortPot\n ldx #25\n jsr cuesong\n lda #wtlesstimer\n sta weightless\n lda #vibetimer\n sta vibes\n rts\n\n* Upside down (4)\n\n:4 cpx #4\n bne :5\n lda invert\n eor #$ff\n sta invert\n lda #2\n sta redrawflg\n jmp inverty\n\n* Yecch (5)\n\n:5 cpx #5\n bne :6\n lda #Splat ;yecch\n jsr addsound\n lda #-1\n sta ChgKidStr\n rts\n:6\n]rts rts\n\n*-------------------------------\n*\n* Mouse rescues you\n*\n*-------------------------------\nMOUSERESCUE\n jsr LoadKid\n\n lda #24 ;mouse\n sta CharID\n lda #200\n sta CharX\n ldx #0\n stx CharBlockY\n lda FloorY+1,x\n sta CharY\n lda #-1\n sta CharFace\n sta CharLife\n lda #1\n sta OppStrength\n\n lda #Mscurry\n jsr jumpseq\n jsr animchar\n\n jmp SaveShad\n\n*-------------------------------\n*\n* Stab character\n*\n*-------------------------------\nSTABCHAR\n lda CharLife\n bpl ]rts ;already dead\n lda CharSword\n cmp #2\n bne :DL ;defenseless\n lda CharID\n cmp #4\n beq :wounded ;skel has no life points\n\n lda #1\n jsr decstr\n bne :wounded\n\n ldx CharID\n beq :killed\n\n ldx CharID\n cpx #4 ;skeleton\n bne :killed\n lda #0\n sta ChgOppStr ;skel is invincible\n]rts rts\n\n:killed jsr getbehind\n cmp #space\n bne :onground\n jsr getdist ;to EOB\n cmp #4\n bcc :onground\n;if char is killed at edge, knock him off\n sec\n sbc #14\n jsr addcharx\n sta CharX\n inc CharBlockY\n lda #fightfall\n jsr jumpseq\n jmp :3\n\n:onground lda #stabkill\n bne :2\n\n:wounded lda #stabbed\n:2 jsr jumpseq\n\n:1 ldx CharBlockY\n lda FloorY+1,x\n sta CharY\n lda #0\n sta CharYVel\n\n:3 lda #Splat\n jsr addsound\n\n jmp animchar\n\n* stabbed when defenseless\n\n:DL lda #100\n jsr decstr\n\n lda #stabkill ;dropdead?\n jmp :killed\n\n*-------------------------------\n*\n* If shadow dies, you die (& vice versa)\n*\n*-------------------------------\nUNHOLY\n lda level\n cmp #12\n bne ]rts\n\n lda OpID\n ora CharID\n cmp #1 ;kid & shadow?\n bne ]rts\n\n lda CharLife\n bpl ]rts\n lda OpLife\n bmi ]rts\n;live char, dead opponent\n lda #$ff\n sta lightcolor\n lda #5\n sta lightning\n lda #Splat\n jsr addsound\n lda #100\n jmp decstr\n]rts rts\n\n*-------------------------------\n*\n*  R E F L E C T I O N\n*\n*-------------------------------\n do DemoDisk\nREFLECTION\nBONESRISE\n brk\n else\n\nREFLECTION\n jsr LoadKid\n jsr GetFrameInfo\n\n lda createshad ;flag set?\n cmp #$ff\n beq CreateShad ;yes--reflection comes to life\n\n jsr getunderft\n cmp #mirror ;is kid standing before mirror?\n  bne ]rts ;no\n\n jsr getreflect ;get char data for reflection\n\n lda dmirr ;if kid is on wrong side of mirror,\n bmi ]rts ;don't draw reflection\n\n*  Draw kid's reflection (as a pseudo-character)\n\n jsr setupchar\n\n*  Crop edges\n\n ldx CharBlockY\n inx\n lda BlockTop,x\n cmp FCharY\n bcs ]rts\n sta FCharCU\n\n lda CharBlockX ;of mirror\n asl\n asl ;x 4\n clc\n adc #1\n sta FCharCL\n\n jmp addreflobj ;normal reflection\n\n*-------------------------------\n* Get char data for kid's reflection\n\ngetreflect\n lda CharBlockX\n jsr getblockej\n clc\n adc #angle+3 ;fudge factor\n sta mirrx ;mirror x-coord (0-139)\n\n jsr getdist\n\n ldx CharFace\n bmi :left\n\n eor #$ff ;facing right--\n clc\n adc #14 ;get dist to back of block\n\n:left sec\n sbc #2 ;another fudge factor\n sta dmirr ;distance from mirror\n\n lda mirrx\n asl\n sec\n sbc CharX\n sta CharX ;reflection x-coord\n\n lda CharFace\n eor #$ff\n sta CharFace\n\n]rts rts\n\n*-------------------------------\n* Bring reflection to life as shadowman\n\nCreateShad\n jsr getreflect ;get char data for reflection\n\n lda #0\n sta createshad\n\n lda #1 ;shadman\n sta CharID\n\n lda #MirrorCrack\n jsr addsound\n\n jsr SaveShad\n\n lda MaxKidStr\n sta MaxOppStr\n sta OppStrength\n lda #1\n sta KidStrength\n jmp markmeters\n\n*-------------------------------\n*\n* Bones rise\n*\n*-------------------------------\nskelscrn = 1\nskelx = 5\nskely = 1\nskeltrig = 2\nskelprog = 2\n\nBONESRISE\n lda level\n cmp #3\n bne ]rts\n\n lda ShadFace\n cmp #86\n bne ]rts\n lda VisScrn\n cmp #skelscrn\n bne ]rts\n lda exitopen\n beq ]rts\n lda KidBlockX\n cmp #skeltrig\n beq :trig\n cmp #skeltrig+1\n bne ]rts\n\n* Remove dead skeleton\n\n:trig lda VisScrn\n ldx #skelx\n ldy #skely\n jsr rdblock\n pha\n lda #floor\n sta (BlueType),y\n lda #24\n sta height\n lda #2\n jsr markred\n jsr markwipe\n iny\n jsr markred\n jsr markwipe\n pla\n cmp #bones\n bne ]rts\n\n* Create live skeleton\n\n lda VisScrn\n sta CharScrn\n\n ldx #skely\n stx CharBlockY\n lda FloorY+1,x\n sta CharY\n\n lda #skelx\n sta CharBlockX\n jsr getblockej\n clc\n adc #angle+7\n sta CharX\n\n lda #-1 ;left\n sta CharFace\n\n lda #arise\n jsr jumpseq\n jsr animchar\n\n lda #skelprog\n sta guardprog\n\n lda #-1\n sta CharLife\n lda #3\n sta OppStrength\n\n lda #0\n sta alertguard\n sta refract\n sta CharXVel\n sta CharYVel\n\n lda #2\n sta CharSword\n\n lda #4 ;skeleton\n sta CharID\n\n jmp SaveShad ;save ShadVars\n\n fin\n\n*-------------------------------\n*\n* Decrease strength by A (non-0)\n*\n* Out: non-0 if char lives, 0 if he dies\n*      ChgStrength\n*\n*-------------------------------\nDECSTR\n ldx CharID\n bne :enemy\n\n cmp KidStrength\n bcs killkid\n\n eor #$ff\n clc\n adc #1 ;negate\n sta ChgKidStr\n rts\n\n:enemy\n cmp OppStrength\n bcs killopp\n\n eor #$ff\n clc\n adc #1\n sta ChgOppStr\n rts\n\n*-------------------------------\n* Kill character (or opponent)\n* Return A = 0\n*-------------------------------\nkillkid\n lda #0\n sec\n sbc KidStrength\n sta ChgKidStr\n\n lda #0\n]rts rts\n\n*-------------------------------\nkillopp\n lda #0\n sec\n sbc OppStrength\n sta ChgOppStr\n\n lda #0\n]rts rts\n\n\n*-------------------------------\n* Save current game to disk\n*\n* In: SavLevel = level ($ff to erase saved game)\n*-------------------------------\nDOSAVEGAME\n lda level\n cmp #FirstSideB\n bcs :doit ;must have reached side B\n lda #Splat\n jmp addsound\n:doit\n\n* Put data into save-game data area\n\n lda origstrength\n sta SavStrength\n\n lda FrameCount\n sta SavTimer\n lda FrameCount+1\n sta SavTimer+1\n\n lda NextTimeMsg\n sta SavNextMsg\n\n* Write to disk\n\n jmp savegame\n\n*-------------------------------\n* alt bg & char set list\n* Level #:      0  1  2  3  4  5  6  7  8  9 10 11 12 13 14\n\nbgset1 db 00,00,00,00,01,01,01,02,02,02,01,01,02,02,01\nbgset2 db 00,00,00,00,01,01,01,02,02,02,01,01,02,02,01\nchset db 00,00,00,01,02,02,03,02,02,02,02,02,04,05,05\n\n* blueprint track & region lists (indexed by level #)\n* NOTE--make sure these match lists in DIALOGER\n\nbluepTRKlst\n db 33,33,32         ;3 levels on side A\n db 33,33,32,32,31,31   ;12 levels on side B\n db 30,30,29,29,28,28\n\nbluepREGlst\n db 0,1,1\n db 0,1,0,1,0,1\n db 0,1,0,1,0,1\n\n*-------------------------------\n*\n* Load level from disk\n* In: X = level # (0-14)\n*\n*-------------------------------\nLOADLEVELX\n lda bluepTRKlst,x\n sta bluepTRK\n lda bluepREGlst,x\n sta bluepREG\n\n lda bgset1,x ;A\n pha\n lda bgset2,x ;X\n ldy chset,x ;Y\n tax\n pla\n\n jmp loadlevel ;in MASTER\n]rts rts\n\n*-------------------------------\n*\n* In: Kid & Shad data\n* Out: EnemyAlert\n*   2: kid & shad are on same stretch of floor\n*   1: slicer, gaps in floor, or other obstacles, but\n*      line of sight is clear\n*   0: can't see each other\n*\n*-------------------------------\ngfightthres = 28*4\n\n]safe lda #0\n sta EnemyAlert\n]rts rts\n\nCHECKALERT\n lda ShadID\n cmp #24 ;mouse?\n beq ]rts\n cmp #1 ;shadowman?\n bne :notshad\n lda level\n cmp #12\n bne ]safe ;fight shadow only on level 12\n\n:notshad\n lda KidPosn\n beq ]safe\n cmp #219\n bcc :noclimb\n cmp #229\n bcc ]safe ;on staircase\n:noclimb\n lda ShadFace\n cmp #86\n beq ]safe\n\n lda KidLife\n and ShadLife\n bpl ]safe ;one is dead\n\n lda KidScrn\n cmp ShadScrn\n bne ]safe\n\n lda KidBlockY\n cmp ShadBlockY\n bne ]safe\n\n lda #2 ;clear path\n sta EnemyAlert\n\n* Get range of blocks to scan (]Xcount --> ]Xend)\n\n lda KidBlockX\n jsr getblockej\n clc\n adc #7 ;middle of block\n sta ]Xcount\n\n lda ShadBlockX\n jsr getblockej\n clc\n adc #7\n sta ]Xend\n\n do 0\n lda ]Xcount\n jsr getblockxp\n ldx #1\n jsr showpage\n lda ]Xend\n jsr getblockxp\n ldx #2\n jsr showpage\n fin\n\n lda ]Xend\n cmp ]Xcount\n bcs :cont\n tax\n lda ]Xcount\n sta ]Xend\n stx ]Xcount\n:cont\n\n* If leftmost block is a slicer, skip it\n\n lda ]Xcount\n jsr :rdblock\n cmp #slicer\n bne :1\n lda #14\n clc\n adc ]Xcount\n sta ]Xcount\n\n* If rightmost block is a gate, skip it\n\n:1 lda ]Xend\n jsr :rdblock\n cmp #gate\n bne :20\n lda ]Xend\n sec\n sbc #14\n sta ]Xend\n\n:20 lda ]Xend\n cmp ]Xcount\n bcc :rts\n\n* Scan from ]Xcount to ]Xend (left to right)\n\n lda ]Xcount\n:loop cmp ]Xend\n beq :9\n bcs :rts\n\n:9 jsr :rdblock\n\n cmp #block\n beq :safe\n cmp #panelwif\n beq :safe\n cmp #panelwof\n beq :safe ;solid barrier blocks view\n\n cmp #loose\n beq :view\n cmp #gate\n bne :2\n lda (BlueSpec),y\n cmp #gfightthres\n bcs :clear\n bcc :view\n\n:2 cmp #slicer\n beq :view\n\n jsr cmpspace\n bne :clear ;closed gate, slicer, gap in floor, etc.\n;are obstacles but don't block view\n:view lda #1\n sta EnemyAlert\n\n:clear lda ]Xcount\n clc\n adc #14\n sta ]Xcount\n bne :loop\n:rts\n]rts rts\n\n:safe lda #0\n sta EnemyAlert\n]rts rts\n\n*-------------------------------\n* In: A = X-coord\n* Out: rdblock results\n*-------------------------------\n:rdblock jsr getblockxp\n tax\n ldy KidBlockY\n lda KidScrn\n jmp rdblock\n\n*-------------------------------\n*\n*  Display version # on text page 1 (& wait for keypress)\n*\n*-------------------------------\nDISPVERSION\n lda #\" \"\n jsr lrcls\n\n sta RAMWRTmain\n\n ldx #0\n:loop lda textline,x\n cmp #\"@\"\n beq :done\n sta $400,x ;top line of screen\n inx\n bpl :loop\n:done\n lda RAMWRTaux\n sta $c054 ;PAGE2 off\n sta $c051 ;TEXT on\n\n* Wait for keypress\n\n:wloop lda $c000\n bpl :wloop\n sta $c010\n\n lda $c057 ;HIRES on\n lda $c050 ;TEXT off\n lda PAGE\n bne :1\n lda $c055 ;PAGE2 on\n:1\n lda #\" \"\n jmp lrcls\n\n*-------------------------------\n lst\n ds 1\n usr $a9,21,$b00,*-org\n lst off\n"
  },
  {
    "path": "01 POP Source/Source/MOVEDATA.S",
    "content": " tr on\n lst off\n\n* movedata\n*-------------------------------\n* objnames\n\nspace = 0\nfloor = 1\nspikes = 2\nposts = 3\ngate = 4\ndpressplate = 5 ;down\npressplate = 6 ;up\npanelwif = 7 ;w/floor\npillarbottom = 8\npillartop = 9\nflask = 10\nloose = 11\npanelwof = 12 ;w/o floor\nmirror = 13\nrubble = 14\nupressplate = 15\nexit = 16\nexit2 = 17\nslicer = 18\ntorch = 19\nblock = 20\nbones = 21\nsword = 22\nwindow = 23\nwindow2 = 24\narchbot = 25\narchtop1 = 26\narchtop2 = 27\narchtop3 = 28\narchtop4 = 29\n\n*-------------------------------\n* misc. values from BGDATA\n\ntorchLast = 17\nbubbLast = 8\n\nspikeExt = 5\nspikeRet = 9\n\nslicerExt = 2\nslicerRet = 6\n\nFfalling = 10 ;1st \"falling\" frame\n\n*-------------------------------\n* moveparams\n\ngmaxval = 47*4\ngminval = 0\n\n lst off\n"
  },
  {
    "path": "01 POP Source/Source/MOVER.S",
    "content": "* mover\norg = $ee00\nPalaceEditor = 0\n tr on\n lst off\n*-------------------------------\n org org\n\n jmp ANIMTRANS\n jmp TRIGSPIKES\n jmp PUSHPP\n jmp BREAKLOOSE1\n jmp BREAKLOOSE\n\n jmp ANIMMOBS\n jmp ADDMOBS\n jmp CLOSEEXIT\n jmp GETSPIKES\n jmp SHAKEM\n\n jmp TRIGSLICER\n jmp TRIGTORCH\n jmp GETFLAMEFRAME\n jmp SMASHMIRROR\n jmp JAMSPIKES\n\n jmp TRIGFLASK\n jmp GETFLASKFRAME\n jmp TRIGSWORD\n jmp JAMPP\n\n*-------------------------------\n lst\n put eq\n lst\n put gameeq\n lst\n put seqdata\n lst\n put movedata\n lst\n put soundnames\n\n dum locals\nstate ds 1\ntemp1 ds 2\nlinkindex ds 1\npptype ds 1\nmobframe ds 1\nunderFF ds 1\n dend\n\n*-------------------------------\ngatevel db 0,0,0,20,40,60,80,100,120\n\nmaxgatevel = *-gatevel-1\n\n*-------------------------------\npptimer = 5 ;pressplate timer setting (min=3, max=30)\n;(# cycles till plate pops up)\n\nspiketimer = 15+128 ;spike timer setting (2-127) +128\n;(# cycles till spikes retract)\n\nslicetimer = 15 ;# cycles between slices\n\ngatetimer = gmaxval+50 ;# cycles gate stays open\n\nloosetimer = Ffalling ;# cycles till floor detaches\n\n* falling floor params\n\nwiggletime = 4 ;# wiggling frames\nFFaccel = 3\nFFtermvel = 29\ncrumbletime = 2 ;# crumbling frames\ncrumbletime2 = 10\ndisappeartime = 2\nFFheight = 17\nCrushDist = 30\n\n* wipe heights\n\nloosewipe = 31 ;[might erase spikes]\nspikewipe = 31\nslicerwipe = 63\nplatewipe = 16\n\ngateinc db -1,4,4 ;for trdirec = 0,1,2 (down,up,upjam)\n\nexitinc = 4\nemaxval = 43*4\n\nmaxtr = trobspace-1\nmaxmob = mobspace-1\n\n*-------------------------------\n*\n* Search trans list for object (trloc,trscrn)\n*\n* In: numtrans, trloc, trscrn\n* Out: X = index, 0 if not listed\n*\n*-------------------------------\nsearchtrob\n ldx numtrans\n beq :rts\n\n:loop lda trloc,x\n cmp trloc\n bne :next\n lda trscrn,x\n cmp trscrn\n beq :rts ;found it\n\n:next dex\n bne :loop\n\n:rts rts\n\n*-------------------------------\n*\n*  Add a new object to transition list\n*  If it's already listed, just change trdirec to new value\n*\n*  In: trdirec, trloc, trscrn\n*\n*-------------------------------\naddtrob\n jsr searchtrob ;Is object already listed?\n\n cpx #0\n bne :chdir ;Yes--just change direc\n\n* It's not on the list - add it\n\n ldx numtrans\n cpx #maxtr\n beq :rts ;too many objects--trigger fails\n\n inx\n stx numtrans\n\n lda trdirec\n sta trdirec,x\n lda trloc\n sta trloc,x\n lda trscrn\n sta trscrn,x\n rts\n\n*  Object already listed - change direction\n\n:chdir lda trdirec\n sta trdirec,x\n:rts rts\n\n*-------------------------------\n*\n*  Add a MOB to MOB list\n*\n*-------------------------------\naddamob\n ldx nummob\n cpx #maxmob\n beq :rts\n\n inx\n stx nummob\n\n jmp savemob\n\n:rts rts\n\n*-------------------------------\n*\n*  S A V E / L O A D   M O B\n*\n*-------------------------------\nsavemob\n lda mobx\n sta mobx,x\n lda moby\n sta moby,x\n lda mobscrn\n sta mobscrn,x\n lda mobvel\n sta mobvel,x\n lda mobtype\n sta mobtype,x\n lda moblevel\n sta moblevel,x\n rts\n\nloadmob\n lda mobx,x\n sta mobx\n lda moby,x\n sta moby\n lda mobscrn,x\n sta mobscrn\n lda mobvel,x\n sta mobvel\n lda mobtype,x\n sta mobtype\n lda moblevel,x\n sta moblevel\n]rts rts\n\n*-------------------------------\n*\n*  Trigger slicer\n*\n*  In: A = initial state\n*\n*-------------------------------\nTRIGSLICER\n sta state ;temp\n\n lda (BlueSpec),y\n beq :ok\n cmp #slicerRet\n bcc ]rts ;in mid-slice--don't interfere\n\n* Between slices--OK to trigger\n\n:ok sty trloc\n\n lda state\n sta (BlueSpec),y\n\n lda VisScrn\n sta trscrn\n\n lda #1\n sta trdirec\n\n jmp addtrob ;add slicer to trans list\n\n*-------------------------------\n*\n* Close exit\n* (Open it all the way & let it slam shut)\n*\n*-------------------------------\nCLOSEEXIT\n sty trloc\n sta trscrn\n\n lda #emaxval ;all the way open\n sta (BlueSpec),y\n\n lda #3 ;coming down fast\n sta trdirec\n\n jmp addtrob ;add to trans list\n\n*-------------------------------\nSMASHMIRROR\n lda #86\n sta (BlueSpec),y\n]rts rts\n\n*-------------------------------\n*\n* Trigger flask\n*\n*-------------------------------\nTRIGFLASK\n sty trloc\n sta trscrn\n\n lda #1\n sta trdirec\n\n* Get rnd starting frame\n\n jsr rnd\n and #7\n ora (BlueSpec),y\n sta (BlueSpec),y\n jmp addtrob\n\n*-------------------------------\n*\n* Trigger sword\n*\n*-------------------------------\nTRIGSWORD\n sty trloc\n sta trscrn\n lda #1\n sta trdirec\n jsr rnd\n and #$1f\n sta (BlueSpec),y\n jmp addtrob\n\n*-------------------------------\n*\n* Trigger torch\n*\n*-------------------------------\nTRIGTORCH\n sty trloc\n sta trscrn\n\n lda #1\n sta trdirec\n\n* Get rnd starting frame\n\n jsr rnd\n and #$f\n sta (BlueSpec),y\n jmp addtrob\n\n*-------------------------------\n*\n*  Trigger spikes\n*\n*-------------------------------\nTRIGSPIKES\n lda (BlueSpec),y\n beq :ready ;State = 0: spikes are fully retracted--\n;spring 'em\n bpl ]rts ;Nonzero, hibit clear: spikes are in motion\n cmp #$ff\n beq ]rts ;jammed\n lda #spiketimer ;Nonzero, hibit set: spikes are fully\n sta (BlueSpec),y ;extended--reset timer to max value\n]rts rts\n;Spring spikes\n:ready ldx #1\n]cont stx trdirec\n sty trloc\n\n lda tempscrn ;from rdblock\n sta trscrn\n\n jsr addtrob ;add spikes to trans list\n jsr redspikes\n\n lda #GateDown ;TEMP\n jmp addsound\n\n*-------------------------------\n*\n* Jam spikes (& remove from trans list)\n*\n* In: Same as TRIGSPIKES\n*\n*-------------------------------\nJAMSPIKES\n lda #$ff\n sta (BlueSpec),y\n ldx #-1 ;stop object\n bmi ]cont\n\n*-------------------------------\n*\n* Get spike status: 0 = safe, 1 = sprung, 2 = springing\n*\n*-------------------------------\nGETSPIKES\n lda (BlueSpec),y\n bmi :sprung\n beq :safe ;fully retracted\n\n cmp #spikeExt\n bcc :springing\n\n:safe lda #0 ;safe: retracted or retracting\n rts\n\n:sprung cmp #$ff ;jammed (body impaled on them)?\n beq :safe\n lda #1\n rts\n\n:springing lda #2\n]rts rts\n\n*-------------------------------\n*\n*  Break off section of loose floor\n*\n*-------------------------------\nBREAKLOOSE\n lda #1\n\nBREAKLOOSE1 ;in: A = initial state\n sta state\n\n lda (BlueType),y\n and #reqmask ;required floorpiece?\n bne ]rts ;yes--blocked below\n\n lda (BlueSpec),y\n bmi :ok ;wiggling\n bne ]rts ;already triggered\n\n:ok lda state\n sta (BlueSpec),y\n\n sty trloc\n\n lda tempscrn ;from rdblock\n sta trscrn\n\n lda #0 ;down\n sta trdirec\n\n jsr addtrob ;add floor to trans list\n jmp redloose\n\n*-------------------------------\n*\n*  Depress pressplate\n*\n*  In: results of RDBLOCK\n*     (tempblockx-y, tempscrn refer to pressplate)\n*\n*-------------------------------\nPUSHPP\n lda (BlueType),y\n and #idmask\n sta pptype ;pressplate/upressplate/rubble\npushpp1\n lda (BlueSpec),y ;LINKLOC index\n sta linkindex\n tax\n jsr gettimer\n\n cmp #31\n beq ]rts ;plate is permanently down\n\n cmp #2\n bcs :starttimer ;plate is temporarily down--\n;just restart timer\n\n*  Fresh plate has been stepped on--reset timer\n\n lda #pptimer ;put plate down for the count\n jsr chgtimer\n\n sty trloc\n\n lda tempscrn ;from rdblock1\n sta trscrn\n\n lda #1\n sta trdirec\n\n jsr addtrob ;add to trans list\n\n jsr redplate ;add plate to redraw list\n\n lda #1\n sta alertguard\n lda #PlateDown\n jsr addsound\n\n:trig jmp trigger ;trigger something?\n\n* plate is already down--just restart timer\n* (& retrigger gates)\n\n:starttimer lda #pptimer\n jsr chgtimer\n jmp :trig\n\n*-------------------------------\n*\n* Jam pressplate (dead weight)\n*\n* In: Same as PUSHPP\n*\n*-------------------------------\nJAMPP\n lda (BlueType),y\n and #idmask\n sta pptype\n cmp #pressplate\n beq :1\n\n lda #floor\n sta (BlueType),y\n lda #0\n sta (BlueSpec),y\n lda #rubble\n sta pptype\n bne pushpp1\n\n:1 lda #dpressplate\n sta (BlueType),y\n bne pushpp1\n\n*-------------------------------\n*\n*  We just pushed a pressplate -- did we trigger something?\n*\n*  In: linkindex, pptype\n*\n*-------------------------------\ntrigger\n:loop ldx linkindex\n\n lda LINKLOC,x\n cmp #$ff\n beq :rts ;linked to nothing\n\n jsr getloc\n sta trloc\n\n jsr getscrn ;get block # and screen # of\n sta trscrn ;gadget to trigger\n\n jsr calcblue\n ldy trloc\n lda (BlueType),y\n and #idmask ;get objid into A\n\n jsr trigobj ;call appropriate trigger routine\n\n lda trdirec\n bmi :skip ;trigger fails\n\n jsr addtrob ;add gadget to transition list\n\n:skip ldx linkindex\n inc linkindex\n\n jsr getlastflag\n beq :loop\n\n:rts rts\n\n*-------------------------------\n*\n*  Trigger object\n*\n*  Out: trdirec (-1 if trigger fails)\n*\n*-------------------------------\ntrigobj\n cmp #gate\n bne :1\n jmp triggate\n:1\n cmp #exit\n bne :2\n jmp openexit\n:2\n]rts rts\n\n*-------------------------------\n*\n* Open exit\n*\n*-------------------------------\nopenexit\n lda (BlueSpec),y\n bne :fail ;Exit can only open, not close\n\n lda #1\n bpl :1\n\n:fail lda #-1\n:1 sta trdirec\n rts\n\n*-------------------------------\n*\n*  Trigger gate\n*\n*  In: BlueSpec, Y, pptype\n*  Out: trdirec\n*\n*-------------------------------\ntriggate\n lda (BlueSpec),y ;current gate position\n\n ldx pptype\n cpx #upressplate\n beq :raise\n cpx #rubble\n beq :jam\n\n* Lower gate\n\n:lower cmp #gminval ;at bottom?\n bne :yeslower ;no--lower it\n;yes--trigger fails\n:fail jmp stopobj\n\n:yeslower\n lda #3 ;down fast\n sta trdirec\n rts\n\n:jam ldx #2 ;open & jam\n stx trdirec\n cmp #gmaxval\n bcc :1\n lda #$ff ;\"jammed open\" state\n bmi :3\n\n:raise ldx #1 ;open\n stx trdirec\n cmp #$ff\n beq :fail ;jammed\n cmp #gmaxval\n bcc :1\n lda #gatetimer\n:3 sta (BlueSpec),y ;reset timer\n bne :fail\n:1\n]rts rts\n\n*-------------------------------\n*\n*  Animate transitional objects\n*  (Advance each object to next frame in animation table)\n*\n*-------------------------------\n]cleanflag ds 1\n\nANIMTRANS\n lda #0\n sta trobcount\n\n ldx numtrans ;# objs in trans (0-maxtr)\n beq ]rts\n\n lda #0\n sta ]cleanflag\n\n:loop stx tempnt\n\n jsr animobj ;animate obj #x\n\n ldx tempnt\n\n lda trdirec ;has object stopped?\n bpl :1 ;no\n\n lda #-1 ;yes--mark it for deletion\n sta ]cleanflag ;& set cleanup flag\n\n:1 sta trdirec,x ;save direction change if any\n\n dex\n bne :loop\n\n lda ]cleanflag\n beq ]rts\n\n*  Delete all stopped objects (trdirec = ff)\n*  (i.e., copy entire list back onto\n*  itself, omitting stopped objects)\n\n ldx #1 ;source index (assume numtrans > 0)\n ldy #0 ;dest index\n\n:dloop lda trdirec,x\n cmp #$ff\n beq :next\n\n iny\n sta trdirec,y\n lda trloc,x\n sta trloc,y\n lda trscrn,x ;source\n sta trscrn,y ;dest\n\n:next inx\n\n cpx numtrans\n bcc :dloop\n beq :dloop\n\n sty numtrans\n rts\n\n*-------------------------------\n*\n*  Animate TROB #x\n*\n*-------------------------------\nanimobj lda trloc,x\n sta trloc\n lda trscrn,x\n sta trscrn\n lda trdirec,x\n sta trdirec\n\n* Find out what kind of object it is\n\n lda trscrn\n jsr calcblue\n\n ldy trloc\n lda (BlueSpec),y\n sta state ;original state\n\n lda (BlueType),y\n and #idmask ;objid\n\n* and branch to appropriate subroutine\n\n cmp #torch\n bne :1\n jsr animtorch\n jmp :done\n\n:1 cmp #upressplate\n beq :plate\n cmp #pressplate\n bne :2\n:plate jsr animplate\n jmp :done\n\n:2 cmp #spikes\n bne :3\n jsr animspikes\n jmp :done\n\n:3 cmp #loose\n bne :31\n jsr animfloor\n jmp :done\n\n:31 cmp #space ;(loose floor turns into space)\n bne :4\n jsr animspace\n jmp :done\n\n:4 cmp #slicer\n bne :5\n jsr animslicer\n jmp :done\n\n:5 cmp #gate\n bne :6\n jsr animgate\n jmp :done\n\n:6 cmp #exit\n bne :7\n jsr animexit\n jmp :done\n\n:7 cmp #flask\n bne :8\n jsr animflask\n jmp :done\n\n:8 cmp #sword\n bne :9\n jsr animsword\n jmp :done\n\n:9 jsr stopobj ;obj is none of these--purge it from trans list!\n\n:done lda state\n ldy trloc\n sta (BlueSpec),y\n\n:rts rts\n\n*-------------------------------\n*\n* Animate exit\n*\n*-------------------------------\nanimexit\n ldx trdirec\n bmi :cont\n cpx #3\n bcs :downfast ;>= 3: coming down fast\n\n lda #RaisingExit\n jsr addsound\n\n lda state\n clc\n adc #exitinc\n sta state\n\n cmp #emaxval\n bcs :stop\n\n:cont jmp redexit\n\n:stop jsr stopobj\n\n lda #GateDown\n jsr addsound\n lda #s_Stairs\n ldx #15\n jsr cuesong\n lda #1\n sta exitopen\n jsr mirappear\n jmp :cont\n\n* Exit coming down fast\n\n:downfast\n cpx #maxgatevel\n bcs :2\n inx\n stx trdirec\n:2 lda state\n sec\n sbc gatevel,x\n sta state\n beq :cont\n bcs :cont\n\n jsr stopobj\n\n lda #0\n sta state\n\n lda #GateSlam\n jsr addsound\n\n jmp :cont\n\n*-------------------------------\n*\n*  Animate gate\n*\n*-------------------------------\nanimgate\n ldx trdirec\n bmi :cont ;gate has stopped\n\n cpx #3 ;trdirec >= 3: coming down fast\n bcs :downfast\n\n lda state\n cmp #$ff\n beq :stop ;jammed open\n clc\n adc gateinc,x\n sta state\n\n cpx #0\n beq :goingdown\n\n cmp #gmaxval\n bcs :attop ;stop at top\n\n lda #RaisingGate\n jsr addsound\n\n jmp :cont\n\n:goingdown\n cmp #gminval\n beq :stop\n bcc :stop\n\n cmp #gmaxval\n bcs :cont ;at top\n jsr addlowersound\n\n:cont jmp redgate ;mark gate for redrawing\n\n:stop jsr stopobj\n\n lda #GateDown\n jsr addsound\n\n jmp :cont\n\n* Gate has reached top\n* trdirec = 1: pause, then start to close again\n* trdirec = 2: jam at top\n\n:attop\n cpx #2\n bcc :tr1\n lda #$ff ;jammed-open value\n sta state\n jmp :stop\n\n:tr1 lda #gatetimer\n sta state\n\n lda #0 ;down\n sta trdirec\n]rts rts\n\n* Down fast\n\n:downfast\n cpx #maxgatevel\n bcs :2\n\n inx\n stx trdirec ;trdirec is velocity index\n:2\n lda state\n sec\n sbc gatevel,x\n sta state\n beq :cont\n bcs :cont\n\n lda #0\n sta state\n jsr stopobj\n\n lda #GateSlam\n jsr addsound\n jmp :cont\n\n*-------------------------------\n*\n*  Animate pressplate\n*\n*-------------------------------\nanimplate\n ldx trdirec\n bmi ]rts\n\n lda state\n tax\n jsr gettimer\n sec\n sbc #1\n pha\n jsr chgtimer\n pla\n cmp #2\n bcs ]rts ;timer stops at t=1\n\n lda #PlateUp\n jsr addsound\n\n jsr stopobj\n\n jmp redplate ;add obj to redraw buffer\n]rts rts\n\n*-------------------------------\n*\n*  Animate slicer\n*\n*-------------------------------\nanimslicer\n ldx trdirec\n bmi :done\n\n lda state\n tax\n and #$80\n sta state ;preserve hibit\n txa\n and #$7f\n clc\n adc #1\n cmp #slicetimer+1\n bcc :1\n lda #1 ;wrap around\n:1 ora state\n sta state\n and #$7f ;next frame #\n cmp #slicerExt\n bne :2\n\n lda #JawsClash\n jsr addsound\n\n:2 lda trscrn\n cmp VisScrn ;is slicer on visible screen?\n bne :os ;no\n\n lda trloc\n jsr unindex\n cpx KidBlockY ;on same level as kid?\n bne :os ;no\n\n lda KidLife\n bmi :done\n ;If kid is dead, stop all unbloodied slicers\n lda state\n and #$80\n bne :done\n\n* As soon as slicer is retracted, purge it from trans list\n\n:os lda state\n and #$7f\n cmp #slicerRet\n bcc :done\n\n:purge jsr stopobj\n\n:done lda state\n and #$7f\n cmp #slicerRet ;retracted?\n bcs ]rts ;yes--don't bother to redraw\n\n jmp redslicer\n\n*-------------------------------\n*\n* Animate flask\n*\n*-------------------------------\nanimflask\n ldx trdirec\n bmi ]rts\n\n lda trscrn\n cmp VisScrn\n bne :purge\n\n lda state\n and #%11100000 ;potion #\n sta temp1\n lda state\n and #%00011111 ;frame #\n jsr GETFLASKFRAME\n ora temp1\n sta state\n\n jmp redflask\n]purge\n:purge jmp stopobj\n\n*-------------------------------\n*\n* Animate gleaming sword\n*\n*-------------------------------\nanimsword\n lda trscrn\n cmp VisScrn\n bne ]purge\n\n dec state\n bne :1\n jsr rnd\n and #$3f\n clc\n adc #40\n sta state\n\n:1 jmp redsword\n]rts rts\n\n*-------------------------------\n*\n* Animate torch\n*\n*-------------------------------\nanimtorch\n ldx trdirec\n bmi ]rts\n\n lda trscrn\n cmp VisScrn\n bne ]purge\n\n lda state\n jsr GETFLAMEFRAME\n sta state\n\n jmp redtorch\n\n*-------------------------------\n*\n* Get flame frame\n*\n* In/out: A = state\n*\n*-------------------------------\nGETFLAMEFRAME\n sta state\n\n jsr rnd\n\n cmp state\n beq :2\n cmp #torchLast+1\n bcc :1\n\n lda state\n:2 clc\n adc #1\n cmp #torchLast+1\n bcc :1\n\n lda #0 ;wrap around\n:1\n]rts rts\n\n*-------------------------------\n*\n* Get flask frame\n*\n* In/out: A = state (low 5 bits)\n*\n*-------------------------------\nGETFLASKFRAME\n clc\n adc #1\n cmp #bubbLast+1\n bcc ]rts\n lda #1\n]rts rts\n\n*-------------------------------\n*\n* Animate spikes\n*\n*-------------------------------\nanimspikes\n ldx trdirec\n bmi :done\n\n lda state\n bmi :timerloop ;Hibit set: remaining 7 bits\n ;represent timer value\n\n* Hibit clear: remaining 7 bits represent BGDATA frame #\n\n inc state\n\n cmp #spikeExt ;is extension complete?\n beq :starttimer ;yes--start timer\n\n cmp #spikeRet ;is retraction complete?\n bne :done ;not yet\n\n lda #0\n sta state ;yes--reset to \"ready\" state\n\n jsr stopobj\n\n:done jmp redspikes\n\n* Spike timer loop\n\n:starttimer\n lda #spiketimer\n sta state\n\n bne :done\n\n:timerloop\n dec state\n\n lda state\n and #$7f\n bne :rts\n;Time's up\n lda #spikeExt+1 ;First \"retracting\" frame\n sta state\n\n bne :done\n:rts\n]rts rts\n\n*-------------------------------\n*\n* Animate loose floor\n*\n*-------------------------------\nanimfloor\n ldx trdirec\n bmi :red\n\n* When timer reaches max value & loose floor detaches:\n*  (1)  Change objid from \"loose floor\" to \"empty space\"\n*  (2)  Create a MOB to take over where TROB stopped\n\n inc state\n\n lda state\n bmi :wiggle ;floor is only wiggling\n\n cmp #loosetimer\n bcc :red\n\n* Timer has reached max value--detach floor\n\n jsr makespace\n sta state\n\n jsr stopobj\n\n* and create new MOB\n\n lda trloc\n jsr unindex\n\n asl\n asl  ;x4\n sta mobx\n stx moblevel\n\n lda BlockBot+1,x\n sta moby\n\n lda trscrn\n sta mobscrn\n\n lda #0\n sta mobvel\n sta mobtype\n\n jsr addamob\n\n:red jmp redloose\n\n* Floor is only wiggling\n\n:wiggle ldx level\n cpx #13\n beq ]rts\n\n cmp #wiggletime+$80\n bcc :red\n\n lda #0\n sta state\n jsr stopobj ;stop wiggling\n\n jmp :red\n\nanimspace jsr stopobj\n jmp redloose\n\n*-------------------------------\n*\n*  Stop object (set trdirec = -1)\n*\n*-------------------------------\nstopobj lda #-1\n sta trdirec\n rts\n\n*-------------------------------\n* General redraw-object routine\n*-------------------------------\nredtrobj\n jsr check\n lda #2\n jsr markred\n jsr markwipe\n jsr checkright\n lda #2\n jsr markred\n jmp markwipe\n\n*-------------------------------\n* redraw torch/exit\n*-------------------------------\nredexit\nredtorch\n jsr checkright\n lda #2\n jmp markmove\n\n*-------------------------------\n* redraw flask/sword\n*-------------------------------\nredsword\nredflask\n jsr check\n lda #2\n jmp markmove\n\n*-------------------------------\n* redraw loose floor\n*-------------------------------\nredloose\n inc trobcount\n lda #loosewipe\n sta height\n jmp redtrobj\n\n*-------------------------------\n* redraw gate\n*-------------------------------\nredgate\n jsr checkright ;mark piece to right of gate\n lda #2\n jsr markmove\n jsr markfred\n jsr checkabover ;& piece to right of gate panel\n lda #2\n jmp markmove\n\n*-------------------------------\n* redraw spikes\n*-------------------------------\nredspikes\n inc trobcount\n lda #spikewipe\n sta height\n jmp redtrobj\n\n*-------------------------------\n* redraw slicer\n*-------------------------------\nredslicer\n inc trobcount\n lda #slicerwipe\n sta height\n jsr check\n lda #2\n jsr markred\n jmp markwipe\n\n*-------------------------------\n* redraw pressplate\n*-------------------------------\nredplate\n lda #platewipe\n sta height\n jmp redtrobj\n\n*-------------------------------\n*\n*  Before marking a piece in redraw buffer,\n*  check whether it's visible.\n*\n*  If piece is visible onscreen:\n*    return with carry clear, y = redbuf index\n*  If piece is not visible:\n*    return with carry set\n*\n*-------------------------------\n]no ldy #30\n sec\n]rts rts\n\n]above cmp scrnAbove\n bne ]rts\n\n lda trloc\n sec\n sbc #20 ;if on top row, return 0-9 and cs\n tay\n\n sec\n rts\n\n*-------------------------------\n*  Check (trscrn, trloc)\n*-------------------------------\ncheck\n lda trscrn\n cmp VisScrn\n bne ]above\n\n ldy trloc\n cpy #30 ;i.e., \"clc\"\n rts\n\n*-------------------------------\n*  Check piece to left of (trscrn,trloc)\n*-------------------------------\ncheckleft\n lda trscrn\n cmp VisScrn\n bne :notonscrn\n;piece is on this screen\n cpy #0\n beq ]no\n cpy #10\n beq ]no\n cpy #20\n beq ]no\n;yes--piece is visible\n dey\n clc\n rts\n\n:notonscrn\n cmp scrnRight\n bne ]above\n;piece is on screen to right\n ldy trloc\n cpy #0\n beq :yesr\n cpy #10\n beq :yesr\n cpy #20\n bne :yesr\n\n:yesr tya\n clc\n adc #9 ;mark corresponding right-edge piece\n tay ;on this screen\n\n clc\n rts\n\n*-------------------------------\n*  Check piece to right of (trscrn,trloc)\n*-------------------------------\ncheckright\n lda trscrn\n cmp VisScrn\n bne :notonscrn\n;piece is on this screen\n ldy trloc\n cpy #9\n beq ]no\n\n cpy #19\n beq ]no\n\n cpy #29\n beq ]no\n;yes\n iny\n clc\n rts\n\n:notonscrn\n cmp scrnLeft\n bne ]above\n;piece is on screen to left\n ldy trloc\n cpy #9\n beq :yesl\n\n cpy #19\n beq :yesl\n\n cpy #29\n bne ]no\n\n:yesl tya\n sec\n sbc #9 ;mark corresponding left-edge piece\n tay ;on this screen\n\n clc\n rts\n\n]no ldy #30\n sec\n]rts rts\n\n*-------------------------------\n*  Check piece above & to right of (trscrn,trloc)\n*-------------------------------\ncheckabover\n lda trscrn\n cmp VisScrn\n bne :notonscrn\n;piece is on this screen\n ldy trloc\n cpy #10\n bcc :above ;piece is on top row\n\n cpy #19\n beq ]no\n\n cpy #29\n beq ]no\n;yes\n tya\n sec\n sbc #9\n tay\n\n clc\n rts\n\n:above\n iny\n sec\n rts\n\n:notonscrn\n cmp scrnLeft\n bne :notonleft\n;piece is on screen to left\n ldy trloc\n cpy #9\n beq :yes0\n\n cpy #19\n beq :yesl\n\n cpy #29\n bne ]no\n\n:yesl tya\n sec\n sbc #19 ;mark corresponding left-edge piece\n tay ;on this screen\n\n clc\n rts\n\n:yes0 ldy #0\n sec\n rts\n\n:notonleft\n cmp scrnBelow\n bne :notbelow\n;piece is on screen below\n ldy trloc\n cpy #9\n bcs ]no\n;yes--piece is on top row\n tya\n clc\n adc #21\n tay\n\n clc\n rts\n\n:notbelow\n cmp scrnBelowL\n bne ]rts\n ;piece is on scrn below & to left\n ldy trloc\n cpy #9\n bne ]no\n;yes--piece is in u.r.\n ldy #20\n clc\n rts\n\n*-------------------------------\n*\n*  Extract information from LINKLOC/LINKMAP\n*\n*  In: X = linkindex\n*  Out: A = info\n*\n*-------------------------------\ngettimer\n lda LINKMAP,x\n and #%00011111 ;pressplate timer (0-31)\n rts\nchgtimer ;In: A = new timer setting\n and #%00011111\n sta temp1\n lda LINKMAP,x\n and #%11100000\n ora temp1\n sta LINKMAP,x\n rts\ngetloc\n lda LINKLOC,x\n and #%00011111 ;screen posn (0-29)\n rts\ngetlastflag\n lda LINKLOC,x\n and #%10000000 ;last-entry flag (0-1)\n rts\ngetscrn\n lda LINKLOC,x\n and #%01100000 ;low 2 bits\n lsr\n lsr\n sta temp1\n lda LINKMAP,x\n and #%11100000 ;high 3 bits\n adc temp1\n lsr\n lsr\n lsr ;Result: screen # (0-31)\n]rts rts\n\n*-------------------------------\n*\n*  Update all MOBs (falling floors)\n*\n*-------------------------------\nANIMMOBS\n ldx nummob ;# MOBs in motion (0-maxmob)\n beq ]rts\n\n:loop stx tempnt\n jsr loadmob\n\n jsr animmob ;animate MOB #x\n\n jsr checkcrush ;did we just crush a character?\n\n ldx tempnt\n jsr savemob\n\n dex\n bne :loop\n\n* Delete MOBs that have ceased to exist\n\n ldx #1 ;source index (assume nummob > 0)\n ldy #0 ;dest index\n\n:dloop lda mobvel,x\n cmp #$ff\n beq :next\n\n iny\n sta mobvel,y\n lda mobx,x ;source\n sta mobx,y ;dest\n lda moby,x\n sta moby,y\n lda mobscrn,x\n sta mobscrn,y\n lda mobtype,x\n sta mobtype,y\n lda moblevel,x\n sta moblevel,y\n\n:next inx\n\n cpx nummob\n bcc :dloop\n beq :dloop\n\n sty nummob\n\n]rts rts\n\n*-------------------------------\n*\n*   Animate MOB #x\n*\n*-------------------------------\nanimmob\n lda mobtype\n bne :done\n jsr mobfloor\n:done\n lda mobvel\n bpl ]rts ;is object stopping?\n inc mobvel ;yes\n]rts rts\n\n*-------------------------------\n*\n*  Animate falling floor\n*\n*-------------------------------\nmobfloor\n lda mobvel\n bmi ]rts\n:ok1\n cmp #FFtermvel\n bcs :tv\n clc\n adc #FFaccel\n sta mobvel\n\n:tv clc\n adc moby\n sta moby\n\n* check for collision w/floor\n\n ldx mobscrn ;on null screen?\n beq :null ;yes--fall on\n\n cmp #-30 ;negative?\n bcs :fallon ;yes--fall on\n\n ldx moblevel\n cmp BlockAy+1,x\n bcc :fallon\n\n* Passing thru floor plane--what to do?\n* First see what's there\n\n ldx moblevel\n stx tempblocky\n\n lda mobx\n lsr\n lsr\n sta tempblockx\n\n lda mobscrn\n sta tempscrn\n\n jsr rdblock1 ;A = objid\n sta underFF ;under falling floor\n\n cmp #space\n beq :passthru\n\n cmp #loose\n bne :crash\n\n* Lands on loose floor\n* Knock out loose floor & continue\n\n jsr knockloose\n\n jmp :passthru\n\n* Lands on solid floor\n\n:crash\n lda #LooseCrash\n jsr addsound\n\n lda mobscrn\n sta tempscrn\n lda moblevel\n sta tempblocky\n jsr SHAKEM1 ;shake loose floors\n\n ldx moblevel\n lda BlockAy+1,x\n sta moby\n\n lda #-crumbletime\n sta mobvel\n\n jmp makerubble\n\n* Passes thru floor plane\n\n:passthru\n jsr passthru\n:fallon\n]rts rts\n\n* Falling on null screen\n\n:null\n lda moby\n cmp #192+17\n bcc ]rts\n;MOB has fallen off null screen--delete it\n lda #-disappeartime\n sta mobvel\n\n]rts rts\n\n*-------------------------------\n* Knock out loose floor\n*-------------------------------\nknockloose\n jsr makespace\n sta (BlueSpec),y\n\n lda mobvel\n lsr\n sta mobvel\n\n ldx tempnt\n jsr savemob ;save this MOB\n\n* Create new MOB (add'l falling floor)\n\n lda moby\n clc\n adc #6\n sta moby\n\n jsr passthru\n\n jsr addamob\n\n* Retrieve old MOB\n\n ldx tempnt\n jsr loadmob\n\n jmp markmob\n\n*-------------------------------\n* Make space\n* Return A = BlueSpec\n*-------------------------------\nmakespace lda #space ;change objid to empty space\n sta (BlueType),y\n\n do PalaceEditor\n lda #1\n rts\n fin\n\n lda #0\n ldx BGset1\n cpx #1 ;pal?\n bne ]rts\n lda #1 ;stripe\n]rts rts\n\n*-------------------------------\n* Pass thru floor plane\n*-------------------------------\npassthru\n inc moblevel\n\n lda moblevel\n cmp #3\n bcc ]rts\n\n* ... and onto next screen\n* (NOTE: moby may be negative)\n\n lda moby\n sec\n sbc #192\n sta moby\n\n lda #0\n sta moblevel\n\n lda mobscrn\n jsr getdown\n sta mobscrn\n]rts rts\n\n*-------------------------------\n* Delete MOB & change objid of floorpiece it landed on\n* If pressplate, trigger before reducing it to rubble\n*-------------------------------\nmakerubble\n lda moblevel\n sta tempblocky\n\n lda mobx\n lsr\n lsr\n sta tempblockx\n\n lda mobscrn\n sta tempscrn\n\n jsr rdblock1\n\n cmp #pressplate\n beq :pp\n cmp #upressplate\n beq :jampp\n cmp #floor\n beq :notpp\n cmp #spikes\n beq :notpp\n cmp #flask\n beq :notpp\n cmp #torch\n beq :notpp\n bne ]rts ;can't transform this piece into rubble\n\n:jampp lda #rubble\n sta (BlueType),y\n\n:pp jsr PUSHPP ;block lands on pressplate--\n jsr rdblock1 ;crush pp & jam open all gates\n\n:notpp lda #rubble\n sta (BlueType),y\n jmp markmob\n\n*-------------------------------\n* Mark MOB\n*-------------------------------\nmarkmob\n lda mobscrn\n cmp VisScrn\n bne ]rts\n\n lda #loosewipe\n sta height\n\n jsr indexblock\n lda #2\n jsr markred\n jsr markwipe\n\n inc tempblockx\n\n jsr indexblock\n lda #2\n jsr markred\n jsr markfred\n jmp markwipe\n\n]rts rts\n\n*-------------------------------\n*\n*  Did falling floor crush anybody?\n*\n*-------------------------------\ncheckcrush\n jsr LoadKid\n jsr chcrush1 ;return cs if crush\n bcc ]rts\n jsr crushchar\n jmp SaveKid\n\nchcrush1\n lda mobscrn\n cmp CharScrn ;on same screen as char?\n bne :no\n\n lda mobx\n lsr\n lsr\n cmp CharBlockX ;same blockx?\n bne :no\n\n lda moby\n cmp CharY\n bcs :no ;mob is below char altogether\n\n lda CharY\n sec\n sbc #CrushDist\n cmp moby\n bcs :no\n sec ;crush!\n rts\n\n:no clc\n]rts rts\n\n*-------------------------------\n*\n*  Crush char with falling block\n*  (Ordered by ANIMMOB)\n*\n*-------------------------------\ncrushchar\n lda level\n cmp #13\n beq :1\n lda CharPosn\n cmp #5\n bcc :1\n cmp #15\n bcc ]rts ;running-->escape\n\n:1 lda CharAction\n cmp #2\n bcc :ground\n cmp #7\n bne ]rts\n\n* Action code 0,1,7 -- on ground\n\n:ground\n ldx CharBlockY\n inx\n lda FloorY,x\n sta CharY ;align w/floor\n\n lda #1\n jsr decstr\n beq :kill\n\n lda CharPosn\n cmp #109\n beq ]rts\n lda #crush\n jmp jumpseq\n\n:kill lda #hardland ;temp\n jmp jumpseq\n\n*-------------------------------\n*\n*  Add all visible MOBs to object table (to be drawn later)\n*\n*-------------------------------\nADDMOBS\n ldx nummob ;# objs in motion (0-maxmob)\n beq :rts\n\n:loop stx tempnt\n jsr loadmob\n\n lda mobtype\n bne :1\n jsr ATM ;Add this MOB\n:1\n ldx tempnt\n dex\n bne :loop\n:rts\n]rts rts\n\n*-------------------------------\n*\n*  Add this MOB to obj table (if visible)\n*\n*-------------------------------\nATM\n\n* Is floorpiece visible onscreen?\n\n lda mobscrn\n cmp VisScrn\n bne :ok2\n\n lda moby\n cmp #192+17 ;17 is generous estimate of image height\n bcc :ok\n rts\n:ok2\n cmp scrnBelow\n bne ]rts ;not on screen below\n\n lda moby\n cmp #-17\n bcs :ok1\n cmp #17\n bcs ]rts\n:ok1\n clc\n adc #192\n sta moby ;(this change won't be saved)\n:ok\n\n* Get block #; index char\n\n lda moby\n jsr getblocky ;return blocky (0-3)\n sta tempblocky\n\n lda mobx\n lsr\n lsr\n sta tempblockx\n\n jsr indexblock\n sty FCharIndex\n\n* Mark floorbuf & fredbuf of affected blocks to R\n\n:cont1\n inc tempblockx\n jsr indexblock  ;block to R\n\n lda #2\n jsr markfloor\n jsr markfred\n\n lda moby\n sec\n sbc #FFheight\n jsr getblocky ;highest affected blocky\n cmp tempblocky\n beq :same\n\n sta tempblocky\n jsr indexblock ;block to U.R.\n\n lda #2\n jsr markfloor\n jsr markfred\n:same\n\n* Get frame #\n\n lda #Ffalling\n sta mobframe\n\n jmp addmobobj ;add MOB to object table\n\n*-------------------------------\n*\n*  Add MOB to object table\n*\n*  In: mob data\n*\n*-------------------------------\naddmobobj\n inc objX\n ldx objX\n\n lda mobtype ;0 = falling floor\n ora #$80\n sta objTYP,x\n\n lda mobx\n sta objX,x\n lda #0\n sta objOFF,x\n\n lda moby\n sta objY,x\n\n lda mobframe\n sta objIMG,x\n\n lda #0\n sta objCU,x\n sta objCL,x\n lda #40\n sta objCR,x\n\n jmp setobjindx\n]rts rts\n*-------------------------------\n*\n* Shake floors\n*\n* In: A = CharBlockY\n*\n*-------------------------------\nSHAKEM\n ldx level\n cpx #13\n beq ]rts\n\n sta tempblocky\n\n lda VisScrn\n sta tempscrn\n\nSHAKEM1\n ldx #9\n:loop txa\n pha\n sta tempblockx\n\n jsr rdblock1\n cmp #loose\n bne :cont\n\n jsr shakeit\n\n:cont pla\n tax\n dex\n bpl :loop\n\n]rts rts\n\n*-------------------------------\n* Shake loose floor\n*-------------------------------\nshakeit\n lda (BlueSpec),y\n bmi ]rts ;already wiggling\n bne ]rts ;active\n\n lda #$80\n sta (BlueSpec),y\n\n sty trloc\n\n lda tempscrn ;from rdblock\n sta trscrn\n\n lda #1\n sta trdirec\n\n jmp addtrob ;add floor to trans list\n\n*-------------------------------\n lst\n ds 1\n usr $a9,21,$00,*-org\n lst off\n"
  },
  {
    "path": "01 POP Source/Source/SEQDATA.S",
    "content": " tr on\n lst off\n\n* seqdata\n\nfcheckmark = %01000000\nfcentermark = %00011111\n\n*  Sequence table entry points\n\nstartrun = 1\nstand = 2\nstandjump = 3\nrunjump = 4\nturn = 5\nrunturn = 6\nstepfall = 7\njumphangMed = 8\nhang = 9\nclimbup = 10\nhangdrop = 11\nfreefall = 12\nrunstop = 13\njumpup = 14\nfallhang = 15\njumpbackhang = 16\nsoftland = 17\njumpfall = 18\nstepfall2 = 19\nmedland = 20\nrjumpfall = 21\nhardland = 22\nhangfall = 23\njumphangLong = 24\nhangstraight = 25\nrdiveroll = 26\nsdiveroll = 27\nhighjump = 28\nstepfwd1 = 29\n;stepfwd 1 thru 14 = 29 thru 42\nturnrun = 43\ntestfoot = 44\nbumpfall = 45\nhardbump = 46\nbump = 47\nsuperhijump = 48\nstandup = 49\nstoop = 50\nimpale = 51\ncrush = 52\ndeadfall = 53\nhalve = 54\nengarde = 55\nadvance = 56\nretreat = 57\nstrike = 58\nflee = 59\nturnengarde = 60\nstrikeblock = 61\nreadyblock = 62\nlandengarde = 63\nbumpengfwd = 64\nbumpengback = 65\nblocktostrike = 66\nstrikeadv = 67\nclimbdown = 68\nblockedstrike = 69\nclimbstairs = 70\ndropdead = 71\nstepback = 72\nclimbfail = 73\nstabbed = 74\nfaststrike = 75\nstrikeret = 76\nalertstand = 77\ndrinkpotion = 78\ncrawl = 79\nalertturn = 80\nfightfall = 81\nefightfall = 82\nefightfallfwd = 83\nrunning = 84\nstabkill = 85\nfastadvance = 86\ngoalertstand = 87\narise = 88\nturndraw = 89\nguardengarde = 90\npickupsword = 91\nresheathe = 92\nfastsheathe = 93\nPstand = 94\nVstand = 95\nVapproach = 96\nVstop = 97\nPalert = 98\nPback = 99\nVexit = 100\nMclimb = 101\nVraise = 102\nPlie = 103\npatchfall = 104\nMscurry = 105\nMstop = 106\nMleave = 107\nPembrace = 108\nPwaiting = 109\nPstroke = 110\nPrise = 111\nPcrouch = 112\nPslump = 113\nMraise = 114\n\n* Sequence table instruction codes\n\ngoto = -1\naboutface = -2\nup = -3\ndown = -4\nchx = -5\nchy = -6\nact = -7\nsetfall = -8\nifwtless = -9\ndie = -10\njaru = -11\njard = -12\neffect = -13\ntap = -14\nnextlevel = -15\n\n lst off\n"
  },
  {
    "path": "01 POP Source/Source/SEQTABLE.S",
    "content": "* seqtable\norg = $3000\n tr on ;TABS 15,20,40\n lst off\n lstdo off\n\n*-------------------------------\n* Seq table instructions:\n\ngoto = -1\naboutface = -2\nup = -3\ndown = -4\nchx = -5\nchy = -6\nact = -7\nsetfall = -8\nifwtless = -9\ndie = -10\njaru = -11\njard = -12\neffect = -13\ntap = -14\nnextlevel = -15\n\n*-------------------------------\n*\n*  S E Q U E N C E   T A B L E\n*\n*-------------------------------\n org org\n\n:1 dw startrun\n:2 dw stand\n:3 dw standjump\n:4 dw runjump\n:5 dw turn\n:6 dw runturn\n:7 dw stepfall\n:8 dw jumphangMed\n:9 dw hang\n:10 dw climbup\n:11 dw hangdrop\n:12 dw freefall\n:13 dw runstop\n:14 dw jumpup\n:15 dw fallhang\n:16 dw jumpbackhang\n:17 dw softland\n:18 dw jumpfall\n:19 dw stepfall2\n:20 dw medland\n:21 dw rjumpfall\n:22 dw hardland\n:23 dw hangfall\n:24 dw jumphangLong\n:25 dw hangstraight\n:26 dw rdiveroll\n:27 dw sdiveroll\n:28 dw highjump\n:29 dw step1\n:30 dw step2\n:31 dw step3\n:32 dw step4\n:33 dw step5\n:34 dw step6\n:35 dw step7\n:36 dw step8\n:37 dw step9\n:38 dw step10\n:39 dw step11\n:40 dw step12\n:41 dw step13\n:42 dw fullstep\n:43 dw turnrun\n:44 dw testfoot\n:45 dw bumpfall\n:46 dw hardbump\n:47 dw bump\n:48 dw superhijump\n:49 dw standup\n:50 dw stoop\n:51 dw impale\n:52 dw crush\n:53 dw deadfall\n:54 dw halve\n:55 dw engarde\n:56 dw advance\n:57 dw retreat\n:58 dw strike\n:59 dw flee\n:60 dw turnengarde\n:61 dw strikeblock\n:62 dw readyblock\n:63 dw landengarde\n:64 dw bumpengfwd\n:65 dw bumpengback\n:66 dw blocktostrike\n:67 dw strikeadv\n:68 dw climbdown\n:69 dw blockedstrike\n:70 dw climbstairs\n:71 dw dropdead\n:72 dw stepback\n:73 dw climbfail\n:74 dw stabbed\n:75 dw faststrike\n:76 dw strikeret\n:77 dw alertstand\n:78 dw drinkpotion\n:79 dw crawl\n:80 dw alertturn\n:81 dw fightfall\n:82 dw efightfall\n:83 dw efightfallfwd\n:84 dw running\n:85 dw stabkill\n:86 dw fastadvance\n:87 dw goalertstand\n:88 dw arise\n:89 dw turndraw\n:90 dw guardengarde\n:91 dw pickupsword\n:92 dw resheathe\n:93 dw fastsheathe\n:94 dw Pstand\n:95 dw Vstand\n:96 dw Vwalk\n:97 dw Vstop\n:98 dw Palert\n:99 dw Pback\n:100 dw Vexit\n:101 dw Mclimb\n:102 dw Vraise\n:103 dw Plie\n:104 dw patchfall\n:105 dw Mscurry\n:106 dw Mstop\n:107 dw Mleave\n:108 dw Pembrace\n:109 dw Pwaiting\n:110 dw Pstroke\n:111 dw Prise\n:112 dw Pcrouch\n:113 dw Pslump\n:114 dw Mraise\n\n*-------------------------------\n* r u n n i n g\n*-------------------------------\nrunning\n db act,1\n db goto\n dw runcyc1\n\n*-------------------------------\n* s t a r t r u n\n*-------------------------------\nstartrun\n db act,1\nrunstt1 db 1\nrunstt2 db 2\nrunstt3 db 3\nrunstt4 db 4,chx,8\nrunstt5 db 5,chx,3\nrunstt6 db 6,chx,3\n\nruncyc1 db 7,chx,5\nruncyc2 db 8,chx,1\nruncyc3 db tap,1,9,chx,2\nruncyc4 db 10,chx,4\nruncyc5 db 11,chx,5\nruncyc6 db 12,chx,2\nruncyc7 db tap,1,13,chx,3\nruncyc8 db 14,chx,4\n db goto\n dw runcyc1\n\n*-------------------------------\n*  s t a n d\n*-------------------------------\nstand\n db act,0\n db 15\n db goto\n dw stand\n\n*-------------------------------\n* a l e r t   s t a n d\n*-------------------------------\ngoalertstand\n db act,1\nalertstand\n:loop db 166\n db goto\n dw :loop\n\n*-------------------------------\n* a r i s e (skeleton)\n*-------------------------------\narise\n db act,5\n db chx,10,177\n db 177\n db chx,-7,chy,-2,178\n db chx,5,chy,2,166\n db chx,-1\n db goto\n dw ready\n\n*-------------------------------\n* g u a r d e n g a r d e\n*-------------------------------\nguardengarde\n db goto\n dw ready\n\n*-------------------------------\n* e n  g a r d e\n*-------------------------------\nengarde\n db act,1\n db chx,2\n db 207\n db 208,chx,2\n db 209,chx,2\n db 210,chx,3\nready\n db act,1\n db tap,0\n db 158\n db 170\n:loop db 171\n\n db goto\n dw :loop\n\n*-------------------------------\n* s t a b b e d\n*-------------------------------\nstabbed\n db act,5\n db setfall,-1,0\n db 172,chx,-1,chy,1\n db 173,chx,-1\n db 174,chx,-1,chy,2\n; db 175\n db chx,-2,chy,1\n db chx,-5,chy,-4\n db goto\n dw guy8\n\n*-------------------------------\n* s t r i k e - a d v a n c e\n*-------------------------------\n;from guy6 (154)\nstrikeadv\n db act,1\n db setfall,1,0\n db 155\n db chx,2,165\n db chx,-2\n db goto\n dw ready\n\n*-------------------------------\n* s t r i k e - r e t r e a t\n*-------------------------------\n ;from guy6 (154)\nstrikeret\n db act,1\n db setfall,-1,0\n db 155,156,157\n db 158\n db goto\n dw retreat\n\n*-------------------------------\n* a d v a n c e\n*-------------------------------\nadvance\n db act,1\n db setfall,1,0\n db chx,2,163\n db chx,4,164\n db 165\n\n db goto\n dw ready\n\n*-------------------------------\n* f a s t   a d v a n c e\n*-------------------------------\nfastadvance\n db act,1\n db setfall,1,0\n db chx,6,164\n db 165\n\n db goto\n dw ready\n\n*-------------------------------\n* r e t r e a t\n*-------------------------------\nretreat\n db act,1\n db setfall,-1,0\n db chx,-3,160\n db chx,-2,157\n\n db goto\n dw ready\n\n*-------------------------------\n* s t r i k e\n*-------------------------------\nstrike\n db act,1\n db setfall,-1,0\n db 168\n\nfaststrike\n db act,1\nguy3 db 151\nguy4 db act,1\n db 152\n;-->blockedstrike\nguy5 db 153\nguy6 db 154\nguy7 db act,5 ;clr flags to avoid repeat strike\n db 155\nguy8 db act,1\n db 156\nguy9 db  157\n\n db goto\n dw ready\n\n*-------------------------------\n* b l o c k e d   s t r i k e\n*-------------------------------\nblockedstrike\n db act,1\n db 167\n;--> strikeblock\n db goto\n dw guy7\n\n*-------------------------------\n* b l o c k   t o   s t r i k e\n*-------------------------------\nblocktostrike\n db 162\n db goto\n dw guy4\n\n*-------------------------------\n* r e a d y   b l o c k\n*-------------------------------\nreadyblock\n db 169\nblocking\n db 150\n ;--> blocktostrike/retreat\n db goto\n dw ready\n\n*-------------------------------\n* s t r i k e   t o   b l o c k\n*-------------------------------\nstrikeblock\n db 159\n db 160\n db goto\n dw blocking\n\n*-------------------------------\n* l a n d   e n   g a r d e\n*-------------------------------\nlandengarde\n db act,1\n db jard\n\n db goto\n dw ready\n\n*-------------------------------\n* b u m p   e n   g a r d e   ( f o r w a r d )\n*-------------------------------\nbumpengfwd\n db act,5\n db chx,-8\n\n db goto\n dw ready\n\n*-------------------------------\n* b u m p   e n   g a r d e   ( b a c k )\n*-------------------------------\nbumpengback\n db act,5\n db 160\n db 157\n db goto\n dw ready\n\n*-------------------------------\n* f l e e\n*-------------------------------\nflee\n db act,7\n db chx,-8\n\n db goto\n dw turn\n\n*-------------------------------\n* t u r n   e n   g a r d e\n*-------------------------------\nturnengarde\n db act,5\n db aboutface,chx,5\n\n db goto\n dw retreat\n\n*-------------------------------\n*  a l e r t  t u r n (for enemies)\n*-------------------------------\nalertturn\n db act,5\n\n db aboutface,chx,18\n\n db goto\n dw goalertstand\n\n*-------------------------------\n*  s t a n d j u m p\n*-------------------------------\nstandjump\n db act,1\n db 16\n db 17,chx,2\n db 18,chx,2\n db 19,chx,2\n db 20,chx,2\n db 21,chx,2\n db 22,chx,7\n db 23,chx,9\n db 24,chx,5,chy,-6 ;chx 6?\nsjland db 25,chx,1,chy,6\n db 26,chx,4\n db jard\n db tap,1,27,chx,-3\n db 28,chx,5\n db 29\n db tap,1,30\n db 31\n db 32\n db 33,chx,1\n db goto\n dw stand\n\n*-------------------------------\n*  r u n j u m p\n*-------------------------------\nrunjump\n db act,1\n db tap,1,34,chx,5\n db 35,chx,6\n db 36,chx,3\n db 37,chx,5\n db tap,1,38,chx,7\n db 39,chx,12,chy,-3\n db 40,chx,8,chy,-9\n db 41,chx,8,chy,-2\n db 42,chx,4,chy,11\n db 43,chx,4,chy,3\nrjlandrun\n db 44,chx,5\n db jard,tap,1\n db goto\n dw runcyc1\n\n*-------------------------------\n*  r u n  d i v e  r o l l\n*-------------------------------\nrdiveroll\n db act,1\n\n db chx,1\n db 107,chx,2\n db chx,2\n db 108\n db chx,2\n db 109\n db chx,2\n db 109\n db chx,2\n:crouch db 109\n db goto\n dw :crouch\n\n*-------------------------------\n*  s t a n d  d i v e  r o l l\n*-------------------------------\nsdiveroll\n\n*-------------------------------\n*  c r a w l\n*-------------------------------\ncrawl\n db act,1\n db chx,1,110\n db 111,chx,2\n db 112\n\n db chx,2\n db 108\n db chx,2\n:crouch db 109\n db goto\n dw :crouch\n\n*-------------------------------\n*  t u r n  d r a w\n*-------------------------------\nturndraw\n db act,7\n db aboutface,chx,6\n db 45,chx,1\n db 46\n db goto\n dw engarde\n\n*-------------------------------\n*  t u r n\n*-------------------------------\nturn\n db act,7\n db aboutface,chx,6\n db 45,chx,1\n db 46,chx,2\n db 47,chx,-1\nfinishturn\n db 48,chx,1\n db 49,chx,-2\n db 50,51,52\n db goto\n dw stand\n\n*-------------------------------\n*  t u r n r u n\n*  (from frame 48)\n*-------------------------------\nturnrun\n db act,1\n db chx,-1\n db goto\n dw runstt1\n\n*-------------------------------\n*  r u n t u r n\n*-------------------------------\nrunturn\n db act,1\n db chx,1\n db  53,chx,1\n db tap,1,54,chx,8\n db 55\n db tap,1,56,chx,7\n db 57,chx,3\n db 58,chx,1\n db 59\n db 60,chx,2\n db 61,chx,-1\n db 62\n db 63\n db 64,chx,-1\n db 65,chx,-14\n db aboutface,goto\n dw runcyc7\n\n*-------------------------------\n*  f i g h t f a l l  (backward)\n*-------------------------------\nfightfall\n db act,3\n db chy,-1\n\n db 102,chx,-2,chy,6\n db 103,chx,-2,chy,9\n db 104,chx,-1,chy,12\n db 105,chx,-3\n\n db setfall,0,15\n db goto\n dw freefall\n\n*-------------------------------\n*  e n e m y  f i g h t  f a l l\n*-------------------------------\nefightfall\n db act,3\n db chy,-1,chx,-2\n\n db 102,chx,-3,chy,6\n db 103,chx,-3,chy,9\n db 104,chx,-2,chy,12\n db 105,chx,-3\n;for now--ultimately we want enemy\n;shapes in here\n db setfall,0,15\n db goto\n dw freefall\n\n*-------------------------------\n*  e n e m y  f i g h t  f a l l  f w d\n*-------------------------------\nefightfallfwd\n db act,3\n db chx,1,chy,-1\n\n db 102,chx,2,chy,6\n db 103,chx,-1,chy,9\n db 104,chy,12\n db 105,chx,-2\n;for now--ultimately we want enemy\n;shapes in here\n db setfall,1,15\n db goto\n dw freefall\n\n\n*-------------------------------\n*  s t e p f a l l\n*-------------------------------\nstepfall ;from #8 (run-11)\n db act,3\n db chx,1,chy,3\n\n db ifwtless\n dw stepfloat\nfall1\n db 102,chx,2,chy,6\n db 103,chx,-1,chy,9\n db 104,chy,12\n db 105,chx,-2\n\n db setfall,1,15\n db goto\n dw freefall\n\n*-------------------------------\n* p a t c h f a l l\n*-------------------------------\npatchfall\n db chx,-1,chy,-3\n db goto\n dw fall1\n\n*-------------------------------\n* s t e p f a l l 2\n*-------------------------------\nstepfall2 ;from #12 (run-15)\n db chx,1\n db goto\n dw stepfall\n\n*-------------------------------\n*  s t e p f l o a t\n*-------------------------------\nstepfloat\n db 102,chx,2,chy,3\n db 103,chx,-1,chy,4\n db 104,chy,5\n db 105,chx,-2\n\n db setfall,1,6\n db goto\n dw freefall\n\n*-------------------------------\n*  j u m p  f a l l\n*-------------------------------\njumpfall ;from standjump-18\n db act,3\n db chx,1,chy,3\n db 102,chx,2,chy,6\n db 103,chx,1,chy,9\n db 104,chx,2,chy,12\n db 105\n\n db setfall,2,15\n db goto\n dw freefall\n\n*-------------------------------\n*  r u n n i n g   j u m p   f a l l\n*-------------------------------\nrjumpfall ;from runjump-43\n db act,3\n db chx,1,chy,3\n db 102,chx,3,chy,6\n db 103,chx,2,chy,9\n db 104,chx,3,chy,12\n db 105\n\n db setfall,3,15\n db goto\n dw freefall\n\n*-------------------------------\n*  j u m p h a n g\n*-------------------------------\n;Med: DX = 0\njumphangMed\n db act,1\n db 67,68,69,70,71,72,73,74,75,76,77\n db act,2\n db 78,79,80\n db goto\n dw hang\n\n;Long: DX = +4\njumphangLong\n db act,1\n db 67,68,69,70,71,72,73,74,75,76,77\n db act,2\n db chx,1,78\n db chx,2,79\n db chx,1,80\n\n db goto\n dw hang\n\n*-------------------------------\n* j u m p b a c k h a n g\n*-------------------------------\njumpbackhang\n db act,1\n db 67,68,69,70,71,72,73,74,75,76\n db chx,-1,77\n db act,2\n db chx,-2,78\n db chx,-1,79\n db chx,-1,80\n\n db goto\n dw hang\n\n*-------------------------------\n*  h a n g\n*-------------------------------\nhang\n db act,2\n; db jaru\n db 91\nhang1\n db 90,89,88,87,87,87,88,89,90,91,92,93,94,95\n db 96,97,98,99,97,96,95,94,93,92\n db 91,90,89,88,87,88,89,90,91,92,93,94,95,96\n db 95,94,93,92\n db goto\n dw hangdrop\n\n*-------------------------------\n*  h a n g s t r a i g h t\n*-------------------------------\nhangstraight\n db act,6\n db tap,2\n db 92,93,93,92,92\n:loop db 91\n db goto\n dw :loop\n\n*-------------------------------\n*  c l i m b f a i l\n*-------------------------------\nclimbfail\n db 135\n db 136\n db 137,137\n db 138,138,138,138\n db 137,136,135\n db chx,-7\n\n db goto\n dw hangdrop\n\n*-------------------------------\n*  c l i m b d o w n\n*-------------------------------\nclimbdown\n db act,1\n\n db 148\n db 145,144,143,142,141\n\n db chx,-5\n db chy,63\n db down\n db act,3 ;to prevent a cut to scrn above\n\n db 140,138,136\n db 91\n db goto\n dw hang1\n\n*-------------------------------\n*  c l i m b u p\n*-------------------------------\nclimbup\n db act,1\n\n db 135\n db 136\n db 137\n db 138\n db 139\n db 140\n\n db chx,5\n db chy,-63\n db up\n\n db 141\n db 142\n db 143\n db 144\n db 145\n db 146\n db 147\n db  148\n db act,5 ;to clr flags\n db 149\n db act,1\n\n db 118,119\n db chx,1\n db goto\n dw stand\n\n*-------------------------------\n*  h a n g d r o p\n*-------------------------------\nhangdrop ;1/2 story\n\n db act,0 ;NOTE -- hangdrop is an action relating\n;to the ground, not to the ledge\n db 81,82\n db act,5 ;to zero clrflags\n db 83\n db act,1\n db jard,tap,0\n db 84,85\n db chx,3\n db goto\n dw stand\n\n*-------------------------------\n*  h a n g f a l l\n*-------------------------------\nhangfall ;1/2 story\n\n db act,3\n db 81,chy,6\n db 81,chy,9\n db 81,chy,12\n db chx,2\n\n db setfall,0,12\n db goto\n dw freefall\n\n*-------------------------------\n*  f r e e f a l l\n*-------------------------------\nfreefall\n db act,4\n:loop db 106\n db goto\n dw :loop\n\n*-------------------------------\n*  r u n s t o p\n*-------------------------------\nrunstop\n db act,1\n db 53,chx,2\n db tap,1,54,chx,7\n db 55\n db tap,1,56,chx,2\n db 49,chx,-2\n db 50,51,52\n db goto\n dw stand\n\n*-------------------------------\n*  j u m p  u p  (& touch ceiling)\n*-------------------------------\njumpup\n db act,1\n db 67,68,69,70,71,72,73,74,75,76,77,78\n db act,0 ;for cropchar\n db jaru,79\n\n db goto\n dw hangdrop\n\n*-------------------------------\n*  h i g h j u m p  (no ceiling above)\n*-------------------------------\nhighjump\n db act,1\n db 67,68,69,70,71,72,73,74,75,76,77,78\n db 79,chy,-4\n db 79,chy,-2\n db 79\n db 79,chy,2\n db 79,chy,4\n db goto\n dw hangdrop\n\n*-------------------------------\n*  s u p e r h i j u m p  (when weightless)\n*-------------------------------\nsuperhijump\n db 67,68,69,70,71,72,73,74,75,76\n db chy,-1,77\n db chy,-3,78\n db chy,-4,79\n db chy,-10,79\n db chy,-9,79\n db chy,-8,79\n db chy,-7,79\n db chy,-6,79\n db chy,-5,79\n db chy,-4,79\n db chy,-3,79\n db chy,-2,79\n db chy,-2,79\n db chy,-1,79\n db chy,-1,79\n db chy,-1,79\n db 79,79,79\n db chy,1,79\n db chy,1,79\n db chy,2,79\n db chy,2,79\n db chy,3,79\n db chy,4,79\n db chy,5,79\n db chy,6,79\n\n db setfall,0,6\n db goto\n dw freefall\n\n*-------------------------------\n*  f a l l  h a n g\n*-------------------------------\nfallhang\n db act,3\n db 80\n db tap,1\n db goto\n dw hang\n\n*-------------------------------\n*  b u m p\n*-------------------------------\nbump\n db act,5\n db chx,-4\n\n db 50,51,52\n db goto\n dw stand\n\n*-------------------------------\n*  b u m p f a l l\n*-------------------------------\nbumpfall\n db act,5\n db chx,1,chy,3\n\n db ifwtless\n dw bumpfloat\n\n db 102,chx,2,chy,6\n db 103,chx,-1,chy,9\n db 104,chy,12\n db 105,chx,-2\n\n db setfall,0,15\n db goto\n dw freefall\n\n*-------------------------------\n*  b u m p f l o a t\n*-------------------------------\nbumpfloat\n db 102,chx,2,chy,3\n db 103,chx,-1,chy,4\n db 104,chy,5\n db 105,chx,-2\n\n db setfall,0,6\n db goto\n dw freefall\n\n*-------------------------------\n* h a r d   b u m p\n*-------------------------------\nhardbump\n db act,5\n\n db chx,-1,chy,-4,102\n db chx,-1,chy,3 ;,104\n db chx,-3,chy,1\n\n db jard\n db chx,1\n db tap,1\n db 107,chx,2\n db 108\n db tap,1\n\n db 109\n db goto\n dw standup\n\n*-------------------------------\n*  t e s t   f o o t\n*-------------------------------\ntestfoot\n db 121,chx,1\n db 122\n db 123,chx,2\n db 124,chx,4\n db 125,chx,3\n db 126\n\n db chx,-4,86\n db tap,1,jard\n db chx,-4,116\n db chx,-2\n db 117,118,119\n db goto\n dw stand\n\n*-------------------------------\n*  s t e p   b a c k\n*-------------------------------\nstepback\n db chx,-5\n db goto\n dw stand\n\n*-------------------------------\n*  s t e p   f o r w a r d\n*\n*  (1 - 14 pixels)\n*-------------------------------\nfullstep\nstep14\n db act,1\n db 121,chx,1\n db 122,chx,1\n db 123,chx,3\n db 124,chx,4\n db 125,chx,3\n db 126,chx,-1\n\n db chx,3\n\n db 127,128,129,130,131,132\n db goto\n dw stand\n\nstep13\n db act,1\n db 121,chx,1\n db 122,chx,1\n db 123,chx,3\n db 124,chx,4\n db 125,chx,3\n db 126,chx,-1\n\n db chx,2\n\n db 127,128,129,130,131,132\n db goto\n dw stand\n\nstep12\n db act,1\n db 121,chx,1\n db 122,chx,1\n db 123,chx,3\n db 124,chx,4\n db 125,chx,3\n db 126,chx,-1\n\n db chx,1\n\n db 127,128,129,130,131,132\n db goto\n dw stand\n\nstep11 ;corresponds directly to filmed sequence\n db act,1\n db 121,chx,1\n db 122,chx,1\n db 123,chx,3\n db 124,chx,4\n db 125,chx,3\n db 126,chx,-1\n db 127,128,129,130,131,132\n db goto\n dw stand\n\nstep10\n db act,1\n db 121,chx,1\nstep10a db 122,chx,1\n db 123,chx,3\n db 124,chx,4\n db 125,chx,3\n db 126,chx,-2\n db 128,129,130,131,132\n db goto\n dw stand\n\nstep9\n db act,1\n db 121\n db goto\n dw step10a\n\nstep8\n db act,1\n db 121,chx,1\n db 122,chx,1\n db 123,chx,3\n db 124,chx,4\n db 125,chx,-1\n db 127,128,129,130,131,132\n db goto\n dw stand\n\nstep7\n db act,1\n db 121,chx,1\n db 122,chx,1\n db 123,chx,3\n db 124,chx,2\n\n db 129,130,131,132\n db goto\n dw stand\n\nstep6\n db act,1\n db 121,chx,1\n db 122,chx,1\n db 123,chx,2\n db 124,chx,2\n\n db 129,130,131,132\n db goto\n dw stand\n\nstep5\n db act,1\n db 121,chx,1\n db 122,chx,1\n db 123,chx,2\n db 124,chx,1\n\n db 129,130,131,132\n db goto\n dw stand\n\nstep4\n db act,1\n db 121,chx,1\n db 122,chx,1\n db 123,chx,2\n\n db 131,132\n db goto\n dw stand\n\nstep3\n db act,1\n db 121,chx,1\n db 122,chx,1\n db 123,chx,1\n\n db 131,132\n db goto\n dw stand\n\nstep2\n db act,1\n db 121,chx,1\n db 122,chx,1\n db 132\n db goto\n dw stand\n\nstep1\n db act,1\n db 121,chx,1\n db 132\n db goto\n dw stand\n\n*-------------------------------\n*  s t o o p\n*-------------------------------\nstoop\n db act,1\n\n db chx,1\n db 107,chx,2\n db 108\n\n:crouch db 109\n db goto\n dw :crouch\n\n*-------------------------------\n*  s t a n d u p\n*-------------------------------\nstandup\n db act,5\n db chx,1,110\n db 111,chx,2\n db 112\n db 113,chx,1\n db 114\n db 115\n db 116,chx,-4\n db 117,118,119\n\n db goto\n dw stand\n\n*-------------------------------\n*  p i c k  u p  s w o r d\n*-------------------------------\npickupsword\n db act,1\n db effect,1\n db 229,229,229,229,229,229\n db 230,231,232\n\n db goto\n dw resheathe\n\n*-------------------------------\n*  r e s h e a t h e\n*-------------------------------\nresheathe\n db act,1\n db chx,-5\n db 233,234,235\n db 236,237,238,239,240,133,133\n db 134,134,134\n db 48,chx,1\n db 49,chx,-2\n db act,5,50,act,1\n db 51,52\n db goto\n dw stand\n\n*-------------------------------\n*  f a s t   s h e a t h e\n*-------------------------------\nfastsheathe\n db act,1\n db chx,-5\n db 234,236,238,240,134\n db chx,-1\n db goto\n dw stand\n\n*-------------------------------\n*  d r i n k   p o t i o n\n*-------------------------------\ndrinkpotion\n db act,1\n db chx,4\n db 191,192,193,194,195,196,197,198,199,200\n db 201,202,203,204\n;if pressed for memory try\n;cutting frames 202/204 or 201/203\n db 205,205,205\n db effect,1\n db 205,205\n db 201,198\n\n db chx,-4\n db goto\n dw stand\n\n*-------------------------------\n*  s o f t   l a n d\n*-------------------------------\nsoftland ;1 story\n db act,5\n\n db jard\n db chx,1\n db tap,1,107,chx,2\n db 108\n db tap,1\n\n db act,1\n:crouch db 109\n db goto\n dw :crouch\n\n*-------------------------------\n*  l a n d   r u n\n*-------------------------------\nlandrun\n db act,1\n db chy,-2,chx,1\n db 107,chx,2\n db 108\n db 109,chx,1\n db 110\n db 111,chx,2\n db 112\n db 113,chx,1,chy,1\n db 114,chy,1\n db 115,chx,-2\n\n db goto\n dw runstt4\n\n*-------------------------------\n*  m e d i u m   l a n d\n*-------------------------------\nmedland ;1 1/2 - 2 stories\n db act,5\n db jard\n db chy,-2,chx,1\n; db 107\n db chx,2\n db 108\n db 109,109,109,109,109,109,109,109,109\n db 109,109,109,109,109,109,109,109,109\n db 109,109,109,109,109,109,109,109,109\n db 109,109,chx,1\n db 110,110,110\n db 111,chx,2\n db 112\n db 113,chx,1,chy,1\n db 114,chy,1\n db 115\n db 116,chx,-4\n db 117\n db 118\n db 119\n db goto\n dw stand\n\n*-------------------------------\n*  h a r d   l a n d   (Splat!)\n*-------------------------------\nhardland ;> 2 stories\n db act,5\n db jard\n db chy,-2,chx,3\n db 185\n db die\n\n:dead db 185\n db goto\n dw :dead\n\n*-------------------------------\n*  s t a b k i l l\n*-------------------------------\nstabkill\n db act,5\n db goto\n dw dropdead\n\n*-------------------------------\n*  d r o p d e a d\n*-------------------------------\ndropdead\n db act,1\n db die\n\n db 179\n db 180\n db 181\n db 182,chx,1\n db 183,chx,-4\n:dead db 185\n db goto\n dw :dead\n\n*-------------------------------\n*  i m p a l e\n*-------------------------------\nimpale\n db act,1\n db jard\n\n db chx,4\n db 177\n db die\n\n:dead db 177\n db goto\n dw :dead\n\n*-------------------------------\n*  h a l v e\n*-------------------------------\nhalve\n db act,1\n\n db 178\n db die\n\n:dead db 178\n db goto\n dw :dead\n\n*-------------------------------\n*  c r u s h\n*-------------------------------\ncrush\n db goto\n dw medland\n\n*-------------------------------\n*  d e a d f a l l\n*-------------------------------\ndeadfall\n db setfall,0,0\n db act,4\n:loop db 185\n db goto\n dw :loop\n\n*-------------------------------\n*  c l i m b   s t a i r s\n*-------------------------------\n;facing L\nclimbstairs\n db act,5\n db chx,-5,chy,-1\n db tap,1,217\n db 218\n db 219,chx,1\n db 220,chx,-4,chy,-3\n db tap,1,221,chx,-4,chy,-2\n db 222,222,chx,-2,chy,-3\n db 223,223,chx,-3,chy,-8\n db tap,1,224,224,chx,-1,chy,-1\n db 225,225,chx,-3,chy,-4\n db 226,226,chx,-1,chy,-5\n db tap,1,227,227,chx,-2,chy,-1\n db 228,228\n db 0,tap,1\n db 0,0,0,0,tap,1\n db 0,0,0,0,tap,1\n db 0,0,0,0,tap,1\n\n do 0\n db chx,10,chy,28\n db goto\n dw stand\n fin\n\n db nextlevel\n:loop db 0,goto\n dw :loop\n\n*-------------------------------\n* Vizier: stand\n*-------------------------------\nVstand\n db 54,goto\n dw Vstand\n\n*-------------------------------\n* Vizier: raise arms\n*-------------------------------\nVraise\n db 85,67,67,67,67,67,67\n db 68,69,70,71,72,73,74,75,83,84\n:loop db 76\n db goto\n dw :loop\n\n*-------------------------------\n* Vizier: walk\n*-------------------------------\nVwalk\n db chx,1\nVwalk1 db 48,chx,2\nVwalk2 db 49,chx,6\n db 50,chx,1\n db 51,chx,-1\n db 52,chx,1\n db 53,chx,1\n db goto\n dw Vwalk1\n\n*-------------------------------\n* Vizier: stop\n*-------------------------------\nVstop\n db chx,1\n db 55,56\n db goto\n dw Vstand\n\n*-------------------------------\n* Vizier: lower arms, turn & exit\n*-------------------------------\nVexit\n db 77,78,79,80,81,82\n db chx,1\n db 54,54,54,54,54,54 ;standing\n db 57\n db 58\n db 59\n db 60\n db 61,chx,2\n db 62,chx,-1\n db 63,chx,-3\n db 64\n db 65,chx,-1\n db 66\n db aboutface,chx,16\n db chx,3\n db goto\n dw Vwalk2\n\n*-------------------------------\n* Princess: stand\n*-------------------------------\nPstand\n db 11,goto\n dw Pstand\n\n*-------------------------------\n* Princess: alert\n*-------------------------------\nPalert\n db 2,3,4,5,6,7,8,9\n db aboutface,chx,9\n db 11,goto\n dw  Pstand\n\n*-------------------------------\n* Princess: step back\n*-------------------------------\nPback\n db aboutface,chx,11\n db 12\n db chx,1,13\n db chx,1,14\n db chx,3,15\n db chx,1,16\n:loop db 17\n db goto\n dw :loop\n\n*-------------------------------\n* Princess lying on cushions\n*-------------------------------\nPlie\n db 19\n db goto\n dw Plie\n\n*-------------------------------\n* Princess: waiting\n*-------------------------------\nPwaiting\n:loop db 20\n db goto\n dw :loop\n\n*-------------------------------\n* Princess: embrace\n*-------------------------------\nPembrace\n db 21\n db chx,1,22\n db 23\n db 24\n db chx,1,25\n db chx,-3,26\n db chx,-2,27\n db chx,-4,28\n db chx,-3,29\n db chx,-2,30\n db chx,-3,31\n db chx,-1,32\n:loop db 33\n db goto\n dw :loop\n\n*-------------------------------\n* Princess: stroke mouse\n*-------------------------------\nPstroke\n:loop db 37\n db goto\n dw :loop\n\n*-------------------------------\n* Princess: rise\n*-------------------------------\nPrise\n db 37,38,39,40,41,42,43,44,45,46,47\n db aboutface,chx,13\n:loop db 11,goto\n dw :loop\n\n*-------------------------------\n* Princess: crouch & stroke mouse\n*-------------------------------\nPcrouch\n db 11,11\n db aboutface,chx,13\n db 47,46,45,44,43,42,41,40,39,38,37\n db 36,36,36,35,35,35\n db 34,34,34,34,34,34,34\n db 35,35,36,36,36,35,35,35\n db 34,34,34,34,34,34,34\n db 35,35,36,36,36,35,35,35\n db 34,34,34,34,34,34,34,34,34\n db 35,35,35\n:loop db 36\n db goto\n dw :loop\n\n*-------------------------------\n* Princess: slump shoulders\n*-------------------------------\nPslump\n db 1\n:loop db 18\n db goto\n dw :loop\n\n*-------------------------------\n* Mouse: scurry\n*-------------------------------\nMscurry\n db act,1\nMscurry1\n:loop db 186,chx,5\n db 186,chx,3\n db 187,chx,4\n db goto\n dw :loop\n\n*-------------------------------\n* Mouse: stop\n*-------------------------------\nMstop\n:loop db 186\n db goto\n dw :loop\n\n*-------------------------------\n* Mouse: raise head\n*-------------------------------\nMraise\n:loop db 188\n db goto\n dw :loop\n\n*-------------------------------\n* Mouse: leave\n*-------------------------------\nMleave\n db act,0\n db 186,186,186\n db 188,188,188,188,188,188,188,188\n db aboutface,chx,8\n db goto\n dw Mscurry1\n\n*-------------------------------\n* Mouse: climb\n*-------------------------------\nMclimb\n db 186\n db goto\n dw Mclimb\n\n*-------------------------------\n lst\n ds 1\n usr $a9,15,$800,*-org\n lst off\n"
  },
  {
    "path": "01 POP Source/Source/SOUND.S",
    "content": "* sound\norg = $ea00\n lst off\n*-------------------------------\n*\n*   S  O  U  N  D\n*\n*-------------------------------\n org org\n\n jmp PLAYBACK\n\n*-------------------------------\nsavex ds 1\n\nspkr = $c030\n\n*-------------------------------\n put soundnames\n put gameeq\n put eq\n\n*-------------------------------\n*\n*  L O O K U P\n*\n*  Sound routine lookup table\n*\n*-------------------------------\nlookup\n\n:0 dw DoPlateDown\n:1 dw DoPlateUp\n:2 dw DoGateDown\n:3 dw DoSpecialKey1\n:4 dw DoSpecialKey2\n:5 dw DoSplat\n:6 dw DoMirrorCrack\n:7 dw DoLooseCrash\n:8 dw DoGotKey\n:9 dw DoFootstep\n:10 dw DoRaisingExit\n:11 dw DoRaisingGate\n:12 dw DoLowerGate\n:13 dw DoSmackWall\n:14 dw DoImpaled\n:15 dw DoGateSlam\n:16 dw DoFlashMsg\n:17 dw DoSwordClash1\n:18 dw DoSwordClash2\n:19 dw DoJawsClash\n\nendlook\n\nmaxaddr = endlook-lookup\n\n*-------------------------------\n*\n*  Z E R O S O U N D\n*\n*  Zero sound table\n*\n*-------------------------------\nZEROSOUND\n lda #0 ;# sounds in table\n sta soundtable\n rts\n\n*-------------------------------\n*\n*  A D D S O U N D\n*\n*  Add sound to sound table\n*  (preserve registers)\n*\n*  In: A = sound #\n*\n*-------------------------------\nADDSOUND\n stx savex\n\n ldx soundtable\n cpx #maxsfx\n bcs :rts ;sound table full\n\n inx\n sta soundtable,x\n stx soundtable ;# sounds in table\n\n:rts ldx savex\n rts\n\n*-------------------------------\n*\n*  P L A Y B A C K\n*\n*  Playback all sounds listed in sound table\n*\n*-------------------------------\nPLAYBACK\n lda soundon\n beq :rts ;sound switched off?\n\n ldx soundtable\n beq :rts ;sound table empty?\n\n:loop lda soundtable,x\n\n stx savex\n\n jsr makesound ;make sound #A\n;(may destroy registers)\n ldx savex\n\n dex\n bne :loop\n\n:rts rts\n\n*-------------------------------\n*\n*  M A K E S O U N D\n*\n*  In: A = sound # (0-127)\n*\n*-------------------------------\nmakesound\n asl\n cmp #maxaddr\n bcs :rts ;don't exceed lookup table\n\n tax\n lda lookup,x\n sta :sm+1\n lda lookup+1,x\n sta :sm+2\n\n:sm jmp $ffff ;self-modifying code\n\n:rts rts\n\n*-------------------------------\n*\n*  S O U N D   R O U T I N E S\n*\n*-------------------------------\n* Kid steps on pressplate\n\nDoPlateDown\n ldy #70\n ldx #0\n lda #4\n jmp tone\n\n*-------------------------------\n* Pressplate pops back up\n\nDoPlateUp\n ldy #90\n ldx #0\n lda #4\n jmp tone\n\n*-------------------------------\n* Gate hits stone floor with an ominous CLANG\n\nDoGateDown\n ldy #70\n ldx #0\n lda #4\n jmp tone\n\n*-------------------------------\n* Jaws clash\n\nDoJawsClash\n ldy #10\n ldx #0\n lda #50\n jmp tone\n\n*-------------------------------\n* Acknowledge special keypress\n\nSK1Pitch = 15\nSK1Dur = 50\n\nSK2Pitch = 40\nSK2Dur = 50\n\nDoSpecialKey1\nDoSwordClash1\nDoSwordClash2\n ldy #SK1Pitch\n ldx #>SK1Pitch\n lda #SK1Dur\n jmp tone\n\nDoSpecialKey2\n ldy #SK2Pitch\n ldx #>SK2Pitch\n lda #SK2Dur\n jmp tone\n\n*-------------------------------\n* Splat\n\nSplatPitch = 1000\nSplatDur = 3\n\nDoSplat\n ldy #SplatPitch\n ldx #>SplatPitch\n lda #SplatDur\n jmp tone\n\n*-------------------------------\n* Mirror Crack\n\nDoMirrorCrack\n jmp DoSplat\n rts\n\n*-------------------------------\n* Loose Floor Crash\n\nDoLooseCrash\n jmp DoSplat\n\n*-------------------------------\n* Flash message\n\n]HiPitch = 100\n]HiDur = 25\n]LoPitch = 500\n]LoDur = 15\n\nDoGotKey\nDoFlashMsg\n lda #2\n:loop pha\n\n ldy #]LoPitch\n ldx #>]LoPitch\n lda #]LoDur\n jsr tone\n\n ldy #]HiPitch\n ldx #>]HiPitch\n lda #]HiDur\n jsr tone\n\n pla\n sec\n sbc #1\n bne :loop\n\n rts\n\n*-------------------------------\n* Footstep\n\nDoFootstep\n ldy #35\n ldx #0\n lda #3\n jmp tone\n\n*-------------------------------\n* Raising Exit\n\nDoRaisingExit\n ldy #40\n ldx #0\n lda #6\n jmp tone\n\n*-------------------------------\n* Raising Gate\n\nDoRaisingGate\n ldy #20\n ldx #0\n lda #2\n jmp tone\n\n*-------------------------------\n* Lowering Gate\n\nDoLowerGate\n ldy #7\n ldx #0\n lda #8\n jmp tone\n\n*-------------------------------\n* Smack Wall\n\nSWPitch = 1000\nSWDur = 3\n\nDoSmackWall\n ldy #SWPitch\n ldx #>SWPitch\n lda #SWDur\n jmp tone\n\n]rts rts\n\n*-------------------------------\n* Impaled\n\nDoImpaled\n jmp DoSmackWall\n\n*-------------------------------\n* Gate Slam\n\nDoGateSlam\n jmp DoSmackWall\n\n\n*-------------------------------\n*\n*  T O N E\n*\n*  In: y-x = pitch lo-hi\n*      a = duration\n*\n*-------------------------------\ntone\n sty :pitch\n stx :pitch+1\n\n:outloop bit spkr\n\n ldx #0\n:midloop ldy #0\n\n:inloop iny\n cpy :pitch\n bcc :inloop\n\n inx\n cpx :pitch+1\n bcc :midloop\n\n sec\n sbc #1\n bne :outloop\n\n rts\n\n:pitch ds 2\n\n*-------------------------------\n lst\neof ds 1\n usr $a9,20,$e00,*-org\n lst off\n"
  },
  {
    "path": "01 POP Source/Source/SOUNDNAMES.S",
    "content": " tr on\n lst off\n\n* sound names\n\nPlateDown = 0\nPlateUp = 1\nGateDown = 2\nSpecialKey1 = 3\nSpecialKey2 = 4\nSplat = 5\nMirrorCrack = 6\nLooseCrash = 7\nGotKey = 8\nFootstep = 9\nRaisingExit = 10\nRaisingGate = 11\nLoweringGate = 12\nSmackWall = 13\nImpaled = 14\nGateSlam = 15\nFlashMsg = 16\nSwordClash1 = 17\nSwordClash2 = 18\nJawsClash = 19\n\n*-------------------------------\n* game music\n\ns_Accid = 1\ns_Heroic = 2\ns_Danger = 3\ns_Sword = 4\ns_Rejoin = 5\ns_Shadow = 6\ns_Vict = 7\ns_Stairs = 8\ns_Upstairs = 9\ns_Jaffar = 10\ns_Potion = 11\ns_ShortPot = 12\ns_Timer = 13\ns_Tragic = 14\ns_Embrace = 15\ns_Heartbeat = 16\n\n* title music\n\ns_Princess = 7\ns_Squeek = 8\ns_Vizier = 9\ns_Buildup = 10\ns_Magic = 11\ns_StTimer = 12\n\n lst off\n"
  },
  {
    "path": "01 POP Source/Source/SPECIALK.S",
    "content": "* specialk\nEditorDisk = 0\nFinalDisk = 0 ;removes all cheat keys\nDebugKeys = 0\n tr on\n lst off\norg = $d900\n*-------------------------------\n*\n*  PRINCE OF PERSIA\n*  Copyright 1989 Jordan Mechner\n*\n*-------------------------------\n org org\n\n jmp KEYS\n jmp CLRJSTK\n jmp ZEROSOUND\n jmp ADDSOUND\n jmp FACEJSTK\n\n jmp SAVESELECT\n jmp LOADSELECT\n jmp SAVEDESEL\n jmp LOADDESEL\n jmp INITINPUT\n\n jmp DEMOKEYS\n jmp LISTTORCHES\n jmp BURN\n jmp GETMINLEFT\n jmp KEEPTIME\n\n jmp SHORTENTIME\n jmp CUESONG\n jmp DoSaveGame\n jmp LoadLevelX\n jmp decstr\n\n jmp DLOOP\n jmp STROBE\n\n*-------------------------------\n lst\n put eq\n lst\n put gameeq\n lst\n put soundnames\n lst\n put movedata\n lst off\n\n*-------------------------------\ninitAMtimer = 10 ;antimatter cheat key timer\n\n dum locals\n]temp ds 1\n]count ds 2\n dend\n\nPOPside1 = $a9\nPOPside2 = $ad\n\nFirstSideB = 3\n\n*-------------------------------\nmin = 725 ;# frames per \"minute\"\n  ;(actual frame rate approx. 11 fps)\nsec = min/60\nt = 60 ;game time limit\n\n*-------------------------------\n*  Key equates\n\nCTRL = $60\nESC = $9b\nDELETE = $7f\nSHIFT = $20\n\n*  Player control keys\n\nkleft = \"j\"\nkdown = \"k\"\nkright = \"l\"\nkupleft = \"u\"\nkup = \"i\"\nkupright = \"o\"\n\n*  Special keys (legit)\n\nkfreeze = ESC\nkrestart = \"r\"-CTRL\nkabort = \"a\"-CTRL\nksound = \"s\"-CTRL\nkmusic = \"n\"-CTRL\nksetkbd = \"k\"-CTRL\nksetjstk = \"j\"-CTRL\nksavegame = \"g\"-CTRL\nkversion = \"v\"-CTRL\nkreturn = \"m\"-CTRL ;editor disk only\nkshowtime = \" \"\nkflipx = \"x\"-CTRL\nkflipy = \"y\"-CTRL\n\n*  Special keys (development)\n\nknextlevel = \")\"\nkclean = \"m\"-CTRL\nkscreendump = \"@\"\nkreload = \"c\"-CTRL\nkreboot = \"z\"-CTRL\nkforceredraw = \"f\"-CTRL\nkblackout = \"B\"\nkspeedup = \"]\"\nkslowdown = \"[\"\nkantimatter = \"q\"-CTRL\nkupone = \"e\"-CTRL\nkautoman = \"A\"\nkincstr = \"S\"\nkdecstr = \"D\"\nkincmax = \"F\"\nkzapgard = \"Z\"\nkplayback = \"p\"-CTRL\nkskip5 = \"+\"\nktimeback = \"<\"\nktimefwd = \">\"\nktimeup = \"M\"\nkerasegame = \"*\"\n\n*-------------------------------\n*\n*  K E Y S\n*\n*  Detect & respond to keypresses\n*\n*-------------------------------\nKEYS\n lda SINGSTEP\n beq KEYS1\n\nfreeze lda $C000\n bpl freeze\n\n cmp #kfreeze\n beq :fradv\n\n ldx #0\n stx SINGSTEP\n\n lda #0 ;ignore the keypress that breaks ESC\n beq KEYS2\n\n:fradv lda #1\n sta SINGSTEP\n sta $C010\n sta keypress\n]rts rts\n\nKEYS1 lda $C000 ;ASCII value of last keypress\n ;(Hibit is keyboard strobe)\nKEYS2 sta keypress\n\n lda $C010 ;Hibit is any-key-down flag\n ;(Clears keyboard strobe)\n sta keydown\n\n jsr KREAD ;Keyboard control\n\n lda keypress\n bpl ]rts\n\n do DebugKeys\n\n ldx develment\n beq :nogo ;GO codes work only in cheat mode\n cmp #\"0\"\n bcc :nogo\n cmp #\"9\"+1\n bcs :nogo\n\n* We have a keypress 0-9\n* Check if it follows a \"GO\" key sequence\n\n lda #C_go0\n ldx #>C_go0\n jsr checkcode\n bne :nogo0\n lda #0 ;1st digit\n:golevel clc\n adc keypress\n sec\n sbc #\"0\" ;2-key value\n\n cmp #4 ;only levels 4-12 accessible\n bcc ]rts\n cmp #13\n bcs ]rts\n sta NextLevel\n jsr shortentime\n]rts rts\n\n:nogo0 lda #C_go1\n ldx #>C_go1\n jsr checkcode\n bne :nogo\n lda #10\n bne :golevel\n\n fin\n\n* Normal key handling\n\n:nogo lda keypress\n jsr addkey ;Add key to kbd buffer\n\n do FinalDisk\n else\n\n* Set development flag?\n\n lda #C_devel\n ldx #>C_devel\n jsr checkcode\n bne :1\n lda #1\n sta develment\n jmp gtone\n:1\n fin\n\n* Skip to next level?\n\n lda #C_skip\n ldx #>C_skip\n jsr checkcode\n bne :2\n lda #3 ;up to level 4\n ldx develment\n beq :limit\n lda #11 ;or level 12 in cheat mode\n:limit cmp level\n bcc :2\n inc NextLevel\n\n jsr shortentime\n:2\n fin\n\n* Special keys\n\n jsr LegitKeys\n\n jsr DevelKeys\n\n jsr TempDevel\n\n]rts rts\n\n*-------------------------------\n*\n*  L E G I T   K E Y S\n*\n*-------------------------------\nLegitKeys\n lda keypress\n cmp #kfreeze\n bne :1\n jmp freeze\n\n:1 cmp #krestart\n bne :1a\n jmp goattract ;in topctrl\n\n:1a cmp #kabort\n bne :1b\n jmp restart\n\n:1b do EditorDisk\n cmp #kreturn\n bne :2\n jmp gobuild\n fin\n\n* Keyboard/joystick\n\n:2 cmp #ksetkbd\n bne :30\n lda #0\n sta joyon\n]sk1 jmp gtone\n\n:30 cmp #ksetjstk\n bne :31\n jsr setcenter\n jmp ]sk1\n\n:31 cmp #kflipx\n bne :32\n lda jhoriz\n eor #1\n sta jhoriz\n bpl ]sk1\n\n:32 cmp #kflipy\n bne :3\n lda jvert\n eor #1\n sta jvert\n bpl ]sk1\n\n* Sound on/off\n\n:3 cmp #ksound\n bne :16\n]togsound\n jsr zerosound\n lda soundon\n eor #1\n sta soundon\n bne ]sk1\n rts\n\n:16 cmp #kmusic\n bne :26\n lda musicon\n eor #1\n sta musicon\n bne ]sk1\n rts\n\n:26 cmp #kversion\n bne :17\n jmp dispversion ;display version #\n\n* Save/load game\n\n:17 cmp #ksavegame\n bne :18\n lda level\n sta SavLevel\n jmp DoSaveGame\n\n* Show time left\n\n:18 cmp #kshowtime\n bne :19\n lda #3\n sta timerequest\n rts\n\n:19\n]rts rts\n\n*-------------------------------\n*\n*  D E V E L O P M E N T - O N L Y   K E Y S\n*\n*-------------------------------\nDevelKeys\n lda develment ;development flag\n beq ]rts\n\n jsr checkcodes ;secret codes\n\n lda keypress\n cmp #kclean\n bne :1\n lda #0\n sta develment\n rts\n:1\n]rts rts\n\n*-------------------------------\n* Temp development keys\n* (remove for final version)\n*-------------------------------\nTempDevel\n do DebugKeys\n\n lda develment ;development flag\n beq ]rts\n\n lda keypress\n cmp #kforceredraw\n bne :10\n lda #2\n sta redrawflg\n lda #0\n sta blackflag\n rts\n\n:10 cmp #kblackout\n bne :9\n lda blackflag\n eor #$ff\n sta blackflag\n]rts rts\n\n:9 cmp #kantimatter\n bne :17\n lda #initAMtimer\n sta AMtimer\n rts\n\n:17 cmp #kincstr\n bne :20\n inc ChgKidStr\n inc ChgOppStr\n rts\n\n:20 cmp #kincmax\n bne :36\n jmp boostmeter\n\n:36 cmp #knextlevel\n bne :28\n inc NextLevel\n rts\n\n:28 cmp #kskip5\n bne :30\n lda level\n clc\n adc #5\n sta NextLevel\n rts\n:30\n\n* keys 0-9\n\n lda keypress\n cmp #\"0\"\n bcc :non\n cmp #\"9\"+1\n bcs :non\n sec\n sbc #\"0\"\n sta guardprog\n]sk1 jmp gtone\n\n* non-numeric keys\n\n:non cmp #kreload\n bne :8\n jsr preload\n lda #2\n sta redrawflg\n jsr reload\n jmp postload\n\n* speed up/slow down delay loop\n\n:8 cmp #kspeedup\n bne :13\n lda SPEED\n cmp #5\n bcc :12\n sec\n sbc #4\n sta SPEED\n jmp ]sk1\n:12 lda #1 ;fastest\n sta SPEED\n]rts rts\n\n:13 cmp #kslowdown\n bne :14\n jsr gtone\n lda SPEED\n clc\n adc #4\n sta SPEED\n rts\n\n* Screen dump\n\n:14 cmp #kscreendump\n bne :15\n lda PAGE\n jmp screendump\n\n:15 cmp #kupone\n bne :19\n lda KidY\n sec\n sbc #63 ;BlockHeight\n sta KidY\n dec KidBlockY\n rts\n\n:19 cmp #kdecstr\n bne :21\n dec ChgKidStr\n]rts rts\n\n:21 cmp #kautoman\n bne :23\n lda ManCtrl\n eor #$ff\n sta ManCtrl\n rts\n\n* Change levels\n\n:23\n cmp #kplayback\n bne :24\n lda #1\n sta level\n lda #2\n sta NextLevel\n rts\n\n:24 cmp #ktimeback\n bne :31\n lda #-2\n:chgtime clc\n adc FrameCount+1\n sta FrameCount+1\n rts\n\n:31 cmp #ktimefwd\n bne :32\n lda #2\n bne :chgtime\n\n:32 cmp #kerasegame\n bne :33\n lda #$ff\n sta SavLevel\n jmp DoSaveGame\n\n:33 cmp #ktimeup\n bne :34\n lda #$ff\n sta FrameCount+1\n rts\n\n:34\n fin\n]rts rts\n\n*-------------------------------\n* Temporarily change BBundID to reload code & data from side 1\n\npostload\n]sm lda #$a9\n sta BBundID\n rts\n\npreload\n lda BBundID\n sta ]sm+1\n lda #POPside1\n sta BBundID\n rts\n\n*-------------------------------\n*\n* A D D K E Y\n*\n* In: A = key value\n*\n*-------------------------------\naddkey\n ldx keybufptr ;index to last key entry\n inx\n cpx #keybuflen\n bcc :ok\n ldx #0 ;wrap around\n:ok stx keybufptr\n\n sta keybuf,x\n]rts rts\n\n*-------------------------------\n*\n*  C H E C K   C O D E S\n*\n*  Only work in devel mode\n*\n*-------------------------------\ncheckcodes\n do FinalDisk\n rts\n else\n\n lda #C_boost\n ldx #>C_boost\n jsr checkcode\n bne :1\n jsr boostmeter\n lda MaxKidStr\n sta origstrength\n rts\n\n:1 lda #C_restore\n ldx #>C_restore\n jsr checkcode\n bne :2\n jmp rechargemeter\n\n:2 lda #C_zap2\n ldx #>C_zap2\n jsr checkcode\n bne :3\n;zap guard down to 0\n lda #0\n sec\n sbc OppStrength\n sta ChgOppStr\n rts\n\n:3 lda #C_zap1\n ldx #>C_zap1\n jsr checkcode\n bne :4\n ;zap guard down to 1\n lda #1\n sec\n sbc OppStrength\n sta ChgOppStr\n rts\n\n:4 lda #C_tina\n ldx #>C_tina\n jsr checkcode\n bmi :5\n lda #14\n sta NextLevel\n jsr shortentime\n rts\n:5\n]rts rts\n fin\n\n*-------------------------------\n*\n* Compare keybuf sequence against code sequence\n*\n* In: A-X = code sequence address lo-hi\n* Return A = 0 if it matches, else ff\n*\n*-------------------------------\ncheckcode\n sta :smod+1\n stx :smod+2\n\n ldx keybufptr ;last key entry\n ldy #0 ;last char of code seq\n:loop\n:smod lda $ffff,y ;smod\n beq ]rts ;0 = code seq delimiter\n cmp keybuf,x\n beq :match\n cmp #\"A\" ;alpha?\n bcc :fail\n cmp #\"Z\"+1\n bcs :fail\n ora #$20 ;yes--try LC too\n cmp keybuf,x\n bne :fail\n\n:match iny\n dex\n bpl :loop\n ldx #keybuflen-1 ;wrap around\n bpl :loop\n\n:fail lda #$ff\n]rts rts\n\n*-------------------------------\n*\n* Key sequence codes\n*\n* Use all caps; LC will be accepted too\n*\n*-------------------------------\nC_skip rev \"SKIP\"\n db 0\n\n do FinalDisk\n else\n\nC_devel rev \"POP\"\n db 0\nC_go0 rev \"GO0\"\n db 0\nC_go1 rev \"GO1\"\n db 0\nC_zap2 rev \"ZAP\"\n db 0\nC_boost rev \"BOOST\"\n db 0\nC_restore rev \"R\"\n db 0\nC_zap1 rev \"Z\"\n db 0\nC_tina rev \"TINA\"\n db 0\n\n fin\n\n*-------------------------------\n*\n*  K R E A D\n*\n*  Keyboard player control\n*\n*  (Register a keypress for as long as key is held down)\n*\n*  Out: kbdX, kbdY\n*\n*-------------------------------\nKREAD\n lda #0\n sta kbdX\n sta kbdY\n\n lda keypress\n bmi :cont ;fresh press\n\n ldx keydown\n bpl ]rts ;No fresh press & no key down\n\n ora #$80 ;stale press, key still down\n:cont\n cmp #kleft\n beq :left\n cmp #kleft-SHIFT\n bne :1\n\n:left lda #-1\n:setx sta kbdX\n rts\n\n:1 cmp #kright\n beq :right\n cmp #kright-SHIFT\n bne :2\n\n:right lda #1\n bne :setx\n\n:2 cmp #kup\n beq :up\n cmp #kup-SHIFT\n bne :3\n\n:up lda #-1\n:sety sta kbdY\n rts\n\n:3 cmp #kdown\n beq :down\n cmp #kdown-SHIFT\n bne :4\n\n:down lda #1\n bne :sety\n\n:4 cmp #kupleft\n beq :ul\n cmp #kupleft-SHIFT\n bne :5\n\n:ul lda #-1\n sta kbdX\n bne :sety\n\n:5 cmp #kupright\n beq :ur\n cmp #kupright-SHIFT\n bne :6\n\n:ur lda #1\n sta kbdX\n lda #-1\n sta kbdY\n bne :sety\n:6\n\n]rts rts\n*-------------------------------\nFACEJSTK\n lda #0\n sec\n sbc JSTKX\n sta JSTKX ;reverse jstk x\n\n ldx clrF\n lda clrB\n sta clrF\n stx clrB ;& switch clrF/clrB\n\n]rts rts\n\n*-------------------------------\n*\n*  Note: Jstk-push flags are saved as if back = R, fwd = L\n*  (i.e., char is facing L)\n*\n*-------------------------------\nSAVESELECT\n ldx #4\n:loop lda clrF,x\n sta clrSEL,x\n dex\n bpl :loop\n rts\n\n*-------------------------------\nLOADSELECT\n ldx #4\n:loop lda clrSEL,x\n sta clrF,x\n dex\n bpl :loop\n rts\n\n*-------------------------------\nSAVEDESEL\n ldx #4\n:loop lda clrF,x\n sta clrDESEL,x\n dex\n bpl :loop\n rts\n\n*-------------------------------\nLOADDESEL\n ldx #4\n:loop lda clrDESEL,x\n sta clrF,x\n dex\n bpl :loop\n rts\n\n*-------------------------------\nINITINPUT\n lda #0\n\n ldx #4\n:loop sta clrDESEL,x\n sta clrSEL,x\n dex\n bpl :loop\n]rts rts\n\n*-------------------------------\n*\n*  C L E A R   J O Y S T I C K\n*\n*  In/out: JSTKX, JSTKY, btn\n*          clrF-B-U-D-btn\n*\n*  clr = 0: no press\n*  clr = 1: used press\n*  clr = -1: unused press\n*\n*  Assume char is facing L\n*\n*-------------------------------\n*\n*  Input consists of 5 \"buttons\": forward, back, up, down,\n*  and the real button.  Each button has its own \"clr\" flag:\n*  clrF,B,U,D & btn.\n*\n*  When ClrJstk sees a button down:\n*    If clr = 1 or -1... leave it alone\n*    If clr = 0... set clr = -1\n*\n*  When ClrJstk sees a button up:\n*    If clr = 0 or -1... leave it alone\n*    If clr = 1... set clr = 0\n*\n*  When GenCtrl acts on a button press, it sets clr = 1.\n*\n*-------------------------------\nCLRJSTK\n lda clrF\n bmi :1 ;leave it set at -1\n\n ldx JSTKX ;jstk fwd?\n bmi :yesF ;yes--if clr = 0, set clr = -1\n;no--set clr = 0\n lda #0\n beq :staF\n\n:yesF cmp #0\n bne :1\n\n lda #-1\n:staF sta clrF\n\n*-------------------------------\n:1 lda clrB\n bmi :2\n\n ldx JSTKX\n cpx #1\n beq :yesB\n\n lda #0\n beq :staB\n\n:yesB cmp #0\n bne :2\n\n lda #-1\n:staB sta clrB\n\n*-------------------------------\n:2 lda clrU\n bmi :3\n\n ldx JSTKY\n bmi :yesU\n\n lda #0\n beq :staU\n\n:yesU cmp #0\n bne :3\n\n lda #-1\n:staU sta clrU\n\n*-------------------------------\n:3 lda clrD\n bmi :4\n\n ldx JSTKY\n cpx #1\n beq :yesD\n\n lda #0\n beq :staD\n\n:yesD cmp #0\n bne :4\n\n lda #-1\n:staD sta clrD\n\n*-------------------------------\n:4 lda clrbtn\n bmi :5\n\n ldx btn\n bmi :yesbtn\n\n lda #0\n beq :stabtn\n\n:yesbtn cmp #0\n bne :5\n\n lda #-1\n:stabtn sta clrbtn\n\n:5\n]rts rts\n\n*-------------------------------\n*\n*  Z E R O S O U N D\n*\n*  Zero sound table\n*\n*-------------------------------\nZEROSOUND\n lda #0 ;# sounds in table\n sta soundtable\n rts\n\n*-------------------------------\n*\n*  A D D S O U N D\n*\n*  Add sound to sound table\n*  (preserve registers)\n*\n*  In: A = sound #\n*\n*-------------------------------\n]temp1 ds 1\n\nADDSOUND\n stx ]temp1\n\n ldx soundtable\n cpx #maxsfx\n bcs :rts ;sound table full\n\n inx\n sta soundtable,x\n stx soundtable ;# sounds in table\n\n:rts ldx ]temp1\n rts\n\n*-------------------------------\n*\n*  Demo keys (Call immediately after regular KEYS routine)\n*\n*  All keys interrupt demo except ESC and CTRL-S\n*\n*  Out: FF if interrupt, else 00\n*\n*-------------------------------\nDEMOKEYS\n lda level\n bne :cont ;not in demo\n\n lda $c061\n ora $c062 ;button?\n bmi :interrupt\n lda keypress\n bpl :cont\n cmp #ESC\n beq :cont\n cmp #ksound\n beq :cont\n:interrupt\n lda #$ff\n rts\n:cont lda #0\n rts\n\n*-------------------------------\n*\n* Special routine for use by BURN\n*\n* Make a list of visible torches--don't disturb trans list\n*\n*-------------------------------\nmaxtorches = 8\n\ntorchx ds maxtorches+1\ntorchy ds maxtorches+1\ntorchstate ds maxtorches+1\ntorchclip ds maxtorches+1\n\n]numtorches = locals\n\ntorchcount ds 1\n\nLISTTORCHES\n lda #0\n sta ]numtorches\n\n lda VisScrn\n jsr calcblue\n\n ldy #29\n\n:loop jsr :sub\n\n ldx ]numtorches\n cpx #maxtorches\n bcs :max\n\n dey\n bpl :loop\n\n ldx ]numtorches\n:max lda #$ff\n sta torchx,x\n sta torchcount ;start BURNing with torch #0\n]rts rts\n\n:sub lda (BlueType),y\n and #idmask\n cmp #torch\n bne ]rts\n lda fredbuf+1,y\n sta BOTCUT ;temp\n\n tya\n pha\n jsr unindex\n;Out: A = tempblockx, X = tempblocky\n pha\n txa\n ldx ]numtorches\n tay\n lda BlockBot+1,y\n sec\n sbc #3\n sta torchy,x\n lda BOTCUT ;0 or non0\n sta torchclip,x\n pla\n clc\n adc #1\n cmp #10\n bcs ]rts\n asl\n asl\n sta torchx,x\n\n pla\n tay\n lda (BlueSpec),y\n sta torchstate,x\n\n inc ]numtorches\n]rts rts\n\n*-------------------------------\n*\n* B U R N\n*\n* Animate torch flames (for use while music is playing)\n*\n* NOTE--this routine bypasses normal graphics system\n* and draws directly on the displayed page\n* Leaves trans list, redraw buffers, etc. undisturbed\n*\n*-------------------------------\nBURN\n lda torchx\n bmi ]rts ;no torches on this screen\n\n ldx torchcount ;last torch burned\n inx\n lda torchx,x\n bpl :ok ;torchx = $ff means \"end of torch list\"\n ldx #0 ;start again at beginning of list\n:ok stx torchcount\n lda torchx,x\n sta XCO\n lda torchy,x\n sta YCO\n lda torchclip,x\n sta BOTCUT\n lda torchstate,x\n jsr getflameframe\n sta torchstate,x\n tax\n jsr setupflame\n lda BOTCUT\n bne :partial\n:whole jmp fastlay  ;<---DIRECT HIRES CALL\n]rts rts\n\n* If bottom portion of flame would overlap with someone's\n* head, clip it (use LAY)\n\n:partial\n jsr initlay\n lda #0\n sta OFFSET\n lda YCO\n sec\n sbc #4\n sta BOTCUT\n jmp lay ;<---DIRECT HIRES CALL\n\n*-------------------------------\n*\n* Get # of minutes (or seconds) left\n*\n* In: FrameCount (0-65535)\n* Out: MinLeft (BCD byte: $00-99) = # of minutes left\n*      SecLeft = # of seconds left (during final minute)\n*\n*-------------------------------\nGETMINLEFT\n lda #0\n sta ]count\n sta ]count+1\n\n lda #min\n sta :sm1+1\n lda #>min\n sta :sm2+1\n jsr :sub ;get MinLeft\n sty MinLeft\n cpy #2\n bcs ]rts\n\n* Final minute only: count seconds\n\n lda #59*min\n sta ]count\n lda #>59*min\n sta ]count+1\n\n lda #sec\n sta :sm1+1\n lda #>sec\n sta :sm2+1\n jsr :sub ;get SecLeft\n sty SecLeft\n rts\n\n* Sub returns min/sec left\n\n:sub ldy #$61 ;counter\n\n:loop lda ]count+1\n cmp FrameCount+1\n bcc :1\n bne ]rts\n lda ]count\n cmp FrameCount\n bcs ]rts\n:1\n lda ]count\n clc\n:sm1 adc #min\n sta ]count\n lda ]count+1\n:sm2 adc #>min\n sta ]count+1\n\n sed\n tya\n sec\n sbc #1\n cld\n tay\n bpl :loop\n ldy #0\n]rts rts\n\n*-------------------------------\ntimetable\n:0 dw t-60*min\n dw t-55*min\n dw t-50*min\n dw t-45*min\n dw t-40*min\n dw t-35*min\n dw t-30*min\n dw t-25*min\n dw t-20*min\n dw t-15*min\n:20 dw t-10*min\n dw t-5*min\n dw t-4*min\n dw t-3*min\n dw t-2*min\n dw t-1*min+1\n dw t*min+5 ;5 frames after t=0: game over\n dw 65535\n\nnummsg = *-timetable\n\n*-------------------------------\n*\n* Keep track of time remaining\n*\n*-------------------------------\n]rts rts\nKEEPTIME\n; lda autopilot\n; bne ]rts\n lda level\n beq ]rts ;not in demo or during playback\n\n lda KidLife\n bpl ]rts ;clock stops when kid is dead\n\n* Inc frame counter\n\n inc FrameCount\n bne :1\n inc FrameCount+1\n:1 bne :2\n lda #$ff\n sta FrameCount\n sta FrameCount+1 ;don't wrap around\n\n* time for next message yet?\n\n:2 ldy NextTimeMsg ;0-2-4 for 1st, 2nd, 3rd msgs\n cpy #nummsg\n bcs ]rts ;no more msgs\n lda FrameCount+1\n cmp timetable+1,y\n bcc ]rts ;not yet\n lda FrameCount\n cmp timetable,y\n bcc ]rts\n\n* Yes--is this a convenient time to show msg?\n\n lda msgtimer\n bne ]rts ;wait till other msgs are gone\n\n* Yes--show msg (& inc NextTimeMsg)\n\n inc NextTimeMsg\n inc NextTimeMsg\n\n lda #2\n sta timerequest\n]rts rts\n\n*-------------------------------\n*\n* Shorten remaining time to 15 minutes\n* (e.g., 1st time player cheats by skipping a level)\n*\n*-------------------------------\nSHORTENTIME\n ldy NextTimeMsg\n cpy #20\n bcs ]rts ;time is already short enough\n ldy #18\n sty NextTimeMsg\n lda timetable,y\n sta FrameCount\n lda timetable+1,y\n sta FrameCount+1\n]rts rts\n\n*-------------------------------\n*\n* Cue song\n*\n* In: A = song #\n*     X = # of cycles within which song must be played\n*\n*-------------------------------\nCUESONG\n sta SongCue\n stx SongCount\n rts\n\n*-------------------------------\n*\n*  Strobe keyboard\n*\n*-------------------------------\nDLOOP\nSTROBE jsr keys ;Detect & respond to keypresses\n jsr controller\n]rts rts\n\n\n*-------------------------------\n lst\neof ds 1\n  usr $a9,19,$b00,*-org\n lst off\n"
  },
  {
    "path": "01 POP Source/Source/SUBS.S",
    "content": "* subs\nDemoDisk = 0\nEditorDisk = 0\nCheckTimer = 0\norg = $e000\n tr on\n lst off\n*-------------------------------\n*\n*   S  U  B  S\n*\n*-------------------------------\n org org\n\n jmp ADDTORCHES\n jmp DOFLASHON\n jmp PAGEFLIP\n jmp DEMO\n jmp SHOWTIME\n\n jmp DOFLASHOFF\n jmp LRCLSE\n jmp potioneffect\n jmp checkalert\n jmp reflection\n\n jmp ADDSLICERS\n jmp PAUSE\n jmp bonesrise\n jmp DEADENEMY\n jmp PLAYCUT\n\n jmp ADDLOWERSOUND\n jmp REMOVEOBJ\n jmp ADDFALL\n jmp SETINITIALS\n jmp STARTKID\n\n jmp STARTKID1\n jmp GRAVITY\n jmp INITIALGUARDS\n jmp MIRAPPEAR\n jmp CRUMBLE\n\n*-------------------------------\n lst\n put eq\n lst\n put gameeq\n lst\n put seqdata\n lst\n put movedata\n lst\n put soundnames\n lst off\n\n*-------------------------------\n dum $f0\n]Xcount ds 1\n]Xend ds 1\ntempstate ds 1\n dend\n\n\nPOPside1 = $a9\nPOPside2 = $ad\n\n* Message #s\n\nLevelMsg = 1\nContMsg = 2\nTimeMsg = 3\n\ntimemsgtimer = 20\n\nmirscrn = 4\nmirx = 4\nmiry = 0 ;also in topctrl, auto\n\n*-------------------------------\n do CheckTimer\nmin = 180\n else\nmin = 1090 ;# frames per \"minute\"\n fin ;actual frame rate approx. 11 fps)\n\nsec = min/60\nt = 60 ;game time limit\n\n*-------------------------------\nALTZPon = $c009\nALTZPoff = $c008\nRAMWRTaux = $c005\nRAMWRTmain = $c004\nRAMRDaux = $c003\nRAMRDmain = $c002\n\n*-------------------------------\nSceneCount ds 2\n\n*-------------------------------\n* Level 13 only:  When you enter, trigger loose floors on\n* screen above\n*-------------------------------\n]rts rts\n\nCRUMBLE\n lda level\n cmp #13\n bne ]rts\n lda VisScrn\n cmp #23\n beq :1\n cmp #16\n bne ]rts\n;Trigger blocks 2-7 on bottom row of scrn above\n:1 lda scrnAbove\n sta tempscrn\n lda #2\n sta tempblocky\n ldx #7\n:loop stx tempblockx\n jsr :trigloose\n ldx tempblockx\n dex\n cpx #2\n bcs :loop\n]rts rts\n\n:trigloose\n jsr rdblock1\n cmp #loose\n bne ]rts\n jsr rnd\n and #$0f\n eor #$ff\n clc\n adc #1\n jmp breakloose1\n\n*-------------------------------\n* Add all flasks & torches on VisScrn to trans list\n* & swords\n*-------------------------------\nADDTORCHES\n lda VisScrn\n jsr calcblue\n\n ldy #29\n:loop lda (BlueType),y\n and #idmask\n cmp #torch\n bne :c1\n tya\n pha\n lda VisScrn\n jsr trigtorch\n pla\n tay\n bpl :cont\n\n:c1 cmp #flask\n bne :c2\n tya\n pha\n lda VisScrn\n jsr trigflask\n pla\n tay\n bpl :cont\n\n:c2 cmp #sword\n bne :cont\n tya\n pha\n lda VisScrn\n jsr trigsword\n pla\n tay\n:cont dey\n bpl :loop\n\n]rts rts\n\n*-------------------------------\n*\n* In: A = length of pause (1-256)\n*\n*-------------------------------\nPAUSE\n:outer pha\n ldx #0\n:loop dex\n bne :loop\n pla\n sec\n sbc #1\n bne :outer\n]rts rts\n\n*-------------------------------\n*\n*  F L A S H\n*\n*  Has a traumatic incident occured this frame?\n*  If so, do lightning flash\n*\n*-------------------------------\nDOFLASHON\n jsr lrclse\n\n jsr vblank\n\n lda $c054\n lda $c056 ;show lores\n rts\n\n*-------------------------------\nDOFLASHOFF\n jsr vblank\n\n lda PAGE\n bne :1\n\n lda $c055\n:1 lda $c057 ;show hires\n\n rts\n\n*-------------------------------\n*\n* Clear lo-res screen only if we need to\n*\n* In: A = byte value\n*\n*------------------------------\nLRCLSE\n cmp scrncolor ;last scrncolor\n beq ]rts\n\n jmp lrcls\n\n*-------------------------------\n* Add all slicers on CharBlockY to trans list\n*-------------------------------\nslicetimer = 15 ;from mover\nslicersync = 3 ;# frames out of sync\n\nADDSLICERS\n lda #slicetimer\n sta tempstate\n\n lda CharScrn\n jsr calcblue\n\n ldy CharBlockY\n cpy #3\n bcs ]rts\n\n lda Mult10,y\n tay\n clc\n adc #10\n sta :sm+1\n:loop\n lda (BlueType),y\n and #idmask\n cmp #slicer\n bne :cont\n\n lda (BlueSpec),y\n tax\n and #$7f\n beq :ok\n cmp #slicerRet\n bcc :cont ;in mid-slice--leave it alone\n:ok txa\n and #$80 ;get hibit\n ora tempstate\n jsr trigslicer ;trigger slicer\n jsr getnextstate\n\n:cont iny\n:sm cpy #0\n bcc :loop\n\n]rts rts\n\ngetnextstate\n lda tempstate\n sec\n sbc #slicersync\n cmp #slicerRet\n bcs :ok\n clc\n adc #slicetimer+1-slicerRet\n:ok sta tempstate\n]rts rts\n\n*-------------------------------\n*\n*  Special animation lists for princess's room\n*\n*-------------------------------\nptorchx db 13,25,-1\nptorchoff db 0,6\nptorchy db 113,113\nptorchstate db 1,6\nptorchcount ds 1\npsandcount ds 1\npstarcount ds 4\n\n*-------------------------------\n*\n*  Burn torches (Princess's room)\n*\n*-------------------------------\npburn\n ldx ptorchcount ;last torch burned\n inx\n lda ptorchx,x\n bpl :ok\n ldx #0\n:ok stx ptorchcount\n lda ptorchx,x\n sta XCO\n lda ptorchoff,x\n sta OFFSET\n lda ptorchy,x\n sta YCO\n lda ptorchstate,x\n jsr getflameframe\n sta ptorchstate,x\n tax\n jsr psetupflame\n jmp lay  ;<---DIRECT HIRES CALL\n\n*-------------------------------\n*\n* Flow sand\n*\n*-------------------------------\npflow\n ldx psandcount\n bmi ]rts ;no hourglass yet\n inx\n cpx #3\n bcc :ok\n ldx #0\n:ok stx psandcount\n ldy GlassState\n jmp flow ;<---Contains direct hires call\n\n*-------------------------------\n*\n* Twinkle stars\n*\n*-------------------------------\npstars\n ldx #3\n:loop lda pstarcount,x\n beq :ok\n dec pstarcount,x\n bne :ok\n txa\n pha\n jsr twinkle ;turn it off\n pla\n tax\n:ok dex\n bpl :loop\n\n* New twinkle?\n\n jsr rnd\n cmp #10\n bcs ]rts\n jsr rnd\n and #3\n clc\n adc #5 ;A = rnd length of twinkle (5-8)\n pha\n jsr rnd\n jsr rnd\n and #3\n tax ;X = rnd star # (0-3)\n pla\n sta pstarcount,x\n jmp twinkle ;<---Contains direct hires call\n\n*-------------------------------\n*\n*  P A G E F L I P\n*\n*-------------------------------\nPAGEFLIP\n jsr normspeed ;IIGS\n lda PAGE\n bne :1\n\n lda #$20\n sta PAGE\n lda $C054 ;show page 1\n\n:3 lda $C057 ;hires on\n lda $C050 ;text off\n lda vibes\n beq :rts\n lda $c05e\n]rts rts\n:rts lda $c05f\n rts\n\n:1 lda #0\n sta PAGE\n lda $C055 ;show page 2\n jmp :3\n\n*-------------------------------\n*\n*  Play pre-recorded \"princess\" scenes\n*\n*  In: A = scene #\n*\n*-------------------------------\nAddrL db #PlayCut0,#PlayCut1,#PlayCut2,#PlayCut3\n db #PlayCut4,#PlayCut5,#PlayCut6,#PlayCut7\n db #PlayCut8\nAddrH db #>PlayCut0,#>PlayCut1,#>PlayCut2,#>PlayCut3\n db #>PlayCut4,#>PlayCut5,#>PlayCut6,#>PlayCut7\n db #>PlayCut8\n\nPLAYCUT\n pha\n jsr initit\n pla\n tax\n\n do 0 ;temp\n jmp PlayCut4\n fin\n\n lda AddrL,x\n sta :sm+1\n lda AddrH,x\n sta :sm+2\n:sm jsr $FFFF ;self-mod\n\n lda #1\n sta SPEED\n]rts rts\n\n*-------------------------------\n do DemoDisk\nPlayCut8\nPlayCut4\nPlayCut7\n brk\n else\n*-------------------------------\n* Cut #8: Princess sends out mouse\n*-------------------------------\nPlayCut8\n jsr getglass\n jsr addglass\n\n jsr startP8\n jsr SaveShad\n jsr startM8\n jsr SaveKid\n\n lda #20\n jsr play\n\n lda #Mleave\n jsr mjumpseq\n lda #20\n jsr play\n\n lda #Prise\n jsr pjumpseq\n\n lda #20\n jsr play\n\n lda #0\n sta KidPosn ;mouse disappears\n ldx #50\n lda #s_Heartbeat\n jmp PlaySongX\n\n*-------------------------------\n* Cut #4: Mouse returns to princess\n*-------------------------------\nPlayCut4\n jsr getglass\n jsr addglass\n\n jsr startP4\n jsr SaveShad\n jsr startM4\n jsr SaveKid\n lda #5\n jsr play\n\n lda #Pcrouch\n jsr pjumpseq\n lda #9\n jsr play\n\n lda #Mraise\n jsr mjumpseq\n\n lda #58\n jmp play\n\n*-------------------------------\n* Happy ending\n*-------------------------------\nPlayCut7\n lda #8\n sta SPEED\n\n lda #1\n sta soundon\n sta musicon ;they must listen!!\n\n jsr startP7\n jsr SaveShad\n lda #8\n jsr play\n\n jsr startK7\n jsr SaveKid\n lda #8\n jsr play\n\n lda #Pembrace\n jsr pjumpseq\n lda #5\n jsr play\n\n lda #runstop\n jsr vjumpseq\n lda #2\n jsr play\n\n lda #0\n sta KidPosn ;kid disappears on frame 8 of embrace\n\n lda #9\n jsr play\n\n lda  #s_Embrace\n jsr  PlaySong\n\n jsr startM7\n jsr SaveKid ;mouse runs in\n\n lda #12\n jsr play\n\n lda #Mclimb\n jsr mjumpseq\n\n lda #30\n jmp play\n\n fin\n\n*-------------------------------\n* Tragic ending\n*-------------------------------\nPlayCut6\n lda #22\n sta SPEED\n ldx #8 ;empty hourglass\n jsr addglass\n lda #2\n jsr play\n lda #s_Tragic\n jsr PlaySong\n lda #100\n jmp play\n\n*-------------------------------\n* Princess cut #5\n*-------------------------------\nPlayCut5\n jsr getglass\n cpx #7\n bcs Ominous ;sand is almost out--go for it\n jmp PlayCut1\n\nOminous\n jsr getglass\n jsr addglass\n\n jsr startP5\n jsr SaveShad\n\n lda #2\n jsr play\n\n ldx #50\n lda #s_Heartbeat\n jsr PlaySongX\n\n lda #Palert\n jsr pjumpseq ;princess hears something...\n lda #12\n jsr play\n\n ldx #20\n lda #s_Danger\n jmp PlaySongX\n\n*-------------------------------\n* Princess cut #2 (lying down)\n*-------------------------------\nPlayCut2\n jsr getglass\n jsr addglass\n\n jsr startP2\n jsr SaveShad\n\n lda #2\n jsr play\n\n ldx #50\n lda #s_Heartbeat\n jsr PlaySongX\n]rts rts\n\n*-------------------------------\n* Princess cut #1 (standing)\n*-------------------------------\nPlayCut1\nPlayCut3\n jsr getglass\n jsr addglass\n\n jsr startP1\n jsr SaveShad\n\n lda #2\n jsr play\n\n ldx #50\n lda #s_Timer\n jmp PlaySongX\n\n*-------------------------------\n* Opening titles scene\n*-------------------------------\nPlayCut0\n jsr startV0\n jsr SaveKid\n jsr startP0 ;put chars in starting posn\n jsr SaveShad\n\n lda #2\n jsr play ;animate 2 frames\n\n lda #s_Princess\n ldx #8\n jsr PlaySongI\n\n lda #5\n jsr play\n\n lda #Palert\n jsr pjumpseq ;princess hears something...\n lda #9\n jsr play\n lda #s_Squeek\n ldx #0\n jsr PlaySongI ;door squeaks...\n\n lda #7\n sta SPEED\n\n lda #5\n jsr play\n lda #Vapproach\n jsr vjumpseq\n lda #6\n jsr play\n lda #Vstop\n jsr vjumpseq\n lda #4\n jsr play ;vizier enters\n lda #s_Vizier\n ldx #12\n jsr PlaySongI\n lda #4\n jsr play\n\n lda #Vapproach\n jsr vjumpseq\n lda #30\n jsr play\n lda #Vstop\n jsr vjumpseq\n lda #4\n jsr play ;stops in front of princess\n lda #s_Buildup\n ldx #25\n jsr PlaySongI\n\n lda #Vraise ;raises arms\n jsr vjumpseq\n lda #1\n jsr play\n lda #Pback\n jsr pjumpseq\n lda #13\n jsr play\n ldx #0\n jsr addglass1 ;hourglass appears\n lda #5\n sta lightning\n lda #$ff\n sta lightcolor\n\n lda #12\n sta SPEED\n lda #5\n jsr play\n lda #0\n sta psandcount ;sand starts flowing\n lda #s_Magic\n ldx #8\n jsr PlaySongI\n\n lda #7\n sta SPEED\n lda #Vexit\n jsr vjumpseq\n lda #17\n jsr play\n ldx #1\n jsr addglass1 ;glass starts to fill\n lda #12\n jsr play\n lda #Pslump\n jsr pjumpseq\n lda #28\n jsr play\n\n lda #12\n sta SPEED\n lda #s_StTimer\n ldx #20\n jmp PlaySongI\n\n*-------------------------------\n* Add hourglass to scene\n* In: X = state\n*-------------------------------\naddglass\n lda #0\n sta psandcount ;start sand flowing\naddglass1\n stx GlassState\n lda #2\n sta redrawglass\n]rts rts\n\n*-------------------------------\n* In: A = song #\n*     X = # cycles to play if sound is off\n*-------------------------------\nPlaySongX\n tay\n lda soundon\n and musicon\n bne :1\n txa\n jmp play\n:1 tya ;falls thru to PlaySong\n\n*-------------------------------\n*\n* Play Song (Princess's room)\n*\n* Button press ends song\n*\n* In: A = song #\n*\n*-------------------------------\nPlaySong\n jsr minit\n jsr swpage\n:loop lda #1\n jsr strobe\n lda $c061\n ora $c062\n ora keypress\n bmi :interrupt\n jsr pburn\n jsr pstars\n jsr pflow\n jsr mplay\n cmp #0\n bne :loop\n:interrupt\n jmp swpage\n\n*-------------------------------\n*\n* Play Song (Princess's room--Interruptible)\n*\n* Key or button press starts a new game\n*\n* In: A = song #\n*     X = # cycles to play if sound is off\n*\n*-------------------------------\nPlaySongI\n tay\n lda soundon\n and musicon\n bne :1\n txa\n beq ]rts\n jmp play\n:1 tya\n\n jsr minit\n jsr swpage\n:loop jsr musickeys\n cmp #$80\n bcs :interrupt\n jsr pburn\n jsr pstars\n jsr pflow\n jsr mplay\n cmp #0\n bne :loop\n jmp swpage\n:interrupt\n jmp dostartgame\n\n*-------------------------------\n*  Switch hires pages for duration of song\n\nswpage\n lda PAGE\n eor #$20\n sta PAGE\n]rts rts\n\n*-------------------------------\nflashon\n lda lightning\n beq ]rts\n lda lightcolor\n jmp doflashon\n\nflashoff\n lda lightning\n beq ]rts\n dec lightning\n jmp doflashoff\n\n*-------------------------------\n*\n*  Playback loop (simplified version of main loop in TOPCTRL)\n*\n*  In: A = sequence length (# of frames)\n*\n*-------------------------------\nplay\n sta SceneCount\nplayloop\n jsr rnd\n\n lda SPEED\n jsr pause\n\n jsr strobe ;strobe kbd & jstk\n\n lda level\n bne :notdemo\n jsr demokeys\n bpl :cont\n lda #1\n jmp dostartgame ;interrupted--start a new game\n\n:notdemo lda $c061\n ora $c062\n ora keypress\n bmi ]rts ;key or button to end scene\n\n:cont jsr NextFrame ;Determine what next frame should look like\n\n jsr flashon\n\n jsr FrameAdv ;Update hidden page to reflect new reality\n;& show it\n jsr flashoff\n\n lda soundon\n beq :1\n jsr playback ;play back sound fx\n jsr zerosound\n:1\n; jsr songcues\n\n dec SceneCount\n bne playloop\n rts\n\n*-------------------------------\nNextFrame\n jsr DoKid ;kid/vizier/mouse\n\n jsr DoShad ;always princess\n\n]rts rts\n\n*-------------------------------\nFrameAdv\n jsr DoFast\n\n jsr vblank\n\n jmp PageFlip\n\n*-------------------------------\nDoKid\n jsr LoadKid\n lda CharPosn\n beq ]rts\n\n jsr ctrlkidchar\n\n jsr animchar ;Get next frame from sequence table\n\n jsr SaveKid ;Save all changes to char data\n\n]rts rts\n\n*-------------------------------\nDoShad\n jsr LoadShadwOp\n lda CharPosn\n beq ]rts\n\n jsr ctrlshadchar\n\n jsr animchar\n\n jmp SaveShad\n\n*-------------------------------\nctrlkidchar\n rts\n\nctrlshadchar\n rts\n\n*-------------------------------\nDoFast\n\n* Set up image lists\n\n jsr zerolsts\n\n lda redrawglass\n beq :3\n dec redrawglass\n ldx GlassState\n jsr drawglass ;hourglass\n:3\n jsr LoadKid ;can be kid or vizier\n lda CharPosn\n beq :1\n jsr setupchar\n lda #30\n sta FCharIndex\n jsr addkidobj\n:1\n jsr LoadShad ;always princess\n lda CharPosn\n beq :2\n jsr setupchar\n lda #30\n sta FCharIndex\n jsr addkidobj\n jsr pmask ;kludge to mask face & hair\n:2\n jsr fast ;get char/objs into mid table\n\n jsr drawpost ;big white post\n\n* Draw to screen\n\n jsr pburn\n jsr pburn ;first put down 2 torch flames\n jsr pstars ;& twinkle stars\n\n jsr drawall ;...then draw the rest\n\n jmp pflow ;& flow sand\n\n]rts rts\n\n*-------------------------------\n*\n* Jumpseq for princess & vizier\n*\n* In: A = sequence #\n*\n*-------------------------------\npjumpseq\n pha\n jsr LoadShad\n pla\n jsr jumpseq\n jmp SaveShad\n\nkjumpseq\nmjumpseq\nvjumpseq\n pha\n jsr LoadKid\n pla\n jsr jumpseq\n jmp SaveKid\n\n*-------------------------------\n*\n* Put characters in starting position for scene\n*\n*-------------------------------\nfloorY = 151\n\n* mouse runs to princess\n\nstartM8\n jsr startM4\n lda #144\n sta CharX\n lda #Mstop\n jsr jumpseq\n jmp animchar\n\nstartM4\n lda #24\n sta CharID\n lda #199\n sta CharX\n lda #floorY+1\n sta CharY\n lda #-1\n sta CharFace\n\n lda #Mscurry\n jsr jumpseq\n jmp animchar\n\n* princess w/mouse\n\nstartP8\n jsr startP0\n lda #130\n sta CharX\n lda #floorY+3\n sta CharY\n lda #Pstroke\n jsr jumpseq\n jmp animchar\n\nstartP4\n jsr startP1\n lda #142\n sta CharX\n lda #floorY+3\n sta CharY\n lda #Pstand\n jsr jumpseq\n jmp animchar\n\nstartP5\n jsr startP0\n lda #160\n sta CharX\n rts\n\nstartP2\n jsr startP0\n lda #89\n sta CharX\n lda #floorY\n sta CharY\n\n lda #Plie\n jsr jumpseq\n jmp animchar\n\nstartP1\n jsr startP0\n lda #0\n sta CharFace\n rts\n\nstartP7\n jsr startP0\n lda #136\n sta CharX\n lda #floorY-2\n sta CharY\n lda #Pwaiting\n ldx #1\n cpx purpleflag\n beq :ok\n lda #120 ;crash (copy protect)\n:ok jsr jumpseq\n jmp animchar\n\nstartM7\n jsr startM4\n lda #floorY-2\n sta CharY\n rts\n\nstartP0\n lda #5\n sta CharID\n\n lda #120\n sta CharX\n lda #floorY\n sta CharY\n\n lda #-1\n sta CharFace\n\n lda #Pstand\n jsr jumpseq\n jmp animchar\n\nstartV0\n lda #6\n sta CharID\n\n lda #197\n sta CharX\n lda #floorY\n sta CharY\n\n lda #-1\n sta CharFace\n\n lda #Vstand\n jsr jumpseq\n jmp animchar\n\nstartK7\n lda #0\n sta CharID\n\n lda #198\n sta CharX\n lda #floorY-2\n sta CharY\n\n lda #-1\n sta CharFace\n\n lda #startrun\n jsr jumpseq\n jmp animchar\n\n*-------------------------------\n* Demo commands\n*-------------------------------\nEndProg = -2\nEndDemo = -1\nCtr = 0\nFwd = 1\nBack = 2\nUp = 3\nDown = 4\nUpfwd = 5\nPress = 6\nRelease = 7\n\n*-------------------------------\nDemoProg1 ;up to fight w/1st guard\n db 0,Ctr\n db 1,Fwd\n db 13,Ctr\n db 30,Fwd ;start running...\n db 37,Upfwd ;jump 1st pit\n db 47,Ctr\n db 48,Fwd ;& keep running\nd1 = 65\n db d1,Ctr ;stop\n db d1+8,Back ;look back...\n db d1+10,Ctr\n db d1+34,Back\n db d1+35,Ctr\nd2 = 115\n db d2,Upfwd ;jump 2nd pit\n db d2+13,Press ;& grab ledge\n db d2+21,Up\n db d2+42,Release\n db d2+43,Ctr\n db d2+44,Fwd\n db d2+58,Down\n db d2+62,Ctr\n db d2+63,Fwd\n db d2+73,Ctr\nd3 = 193\n db d3,Fwd\n db d3+12,Ctr\n db d3+40,EndDemo\n\n*-------------------------------\n*\n*  D  E  M  O\n*\n*  Controls kid's movements during self-running demo\n*\n*  (Called from PLAYERCTRL)\n*\n*-------------------------------\nDEMO\n lda #DemoProg1\n ldx #>DemoProg1\n jmp AutoPlayback\n\n*-------------------------------\n*\n* Init princess cut\n*\n*-------------------------------\ninitit\n lda #\" \"\n sta scrncolor ;?\n lda #0\n sta vibes\n sta redrawglass\n sta KidPosn\n sta ShadPosn\n sta ptorchcount\n ldx #3\n:loop sta pstarcount,x\n dex\n bpl :loop\n\n lda #-1 ;no hourglass yet\n sta psandcount\n\n lda #12\n sta SPEED\n\n jsr zeropeels\n jsr zerored\n jsr zerosound\n]rts rts\n\n*-------------------------------\n*\n* Get hourglass state (based on time left)\n*\n* In: FrameCount\n* Out: X = glass state\n*\n*-------------------------------\ngetglass\n jsr getminleft\n ldx #7\n lda MinLeft\n cmp #6\n bcc :got\n dex\n cmp #$11\n bcc :got\n dex\n cmp #$21\n bcc :got\n dex\n cmp #$41\n bcc :got\n dex\n:got\n]rts rts\n\n*-------------------------------\n*\n* Show time if requested\n* (& constant time display during final minute)\n*\n* In: timerequest (0 = no, 1-2 = auto, 3 = from kbd,)\n*     4 = Vizier dead)\n*\n*-------------------------------\nSHOWTIME\n lda timerequest\n beq ]rts\n lda KidLife\n bpl ]rts\n\n jsr getminleft\n\n lda MinLeft\n cmp #2\n bcs :normal\n lda SecLeft\n beq :timeup\n\n* Countdown during final minute\n\n lda level\n cmp #14\n bcs :normal\n bcc :showsec ;stop countdown when clock stops\n\n:timeup\n lda timerequest\n cmp #3\n bcc ]rts ;Once t=0, show time only on kbd request\n\n:normal\n lda msgtimer\n bne ]rts ;wait till other msgs are gone\n\n lda #TimeMsg\n sta message\n lda #timemsgtimer\n ldx timerequest\n cpx #4\n bcc :norm\n:delay lda #timemsgtimer+5 ;delay 5 cycles\n:norm sta msgtimer\n\n lda #0\n sta timerequest\n]rts rts\n\n:showsec\n lda SecLeft\n cmp #2\n bcc :nomsg\n\n lda message\n cmp #TimeMsg\n beq :2\n lda msgtimer\n bne ]rts\n lda #TimeMsg\n sta message\n:2 lda #1\n sta timerequest\n lda #1\n sta msgtimer\n rts\n:nomsg lda #0\n sta timerequest\n sta msgtimer\n rts\n\n*-------------------------------\n* Add lowering-gate sound (only when gate is visible)\n* In: A = state\n*-------------------------------\nADDLOWERSOUND\n lsr\n bcc ]rts ;alt frames\n\n lda level\n cmp #3\n bne :n\n lda trscrn\n cmp #2 ;Exception: Level 3, screen 2\n beq :y\n:n lda trscrn\n cmp scrnLeft\n bne :1\n ldy trloc\n cpy #9\n beq :y\n cpy #19\n beq :y\n cpy #29\n beq :y ;visible to left\n]rts rts\n\n:1 cmp VisScrn\n bne ]rts\n ldy trloc\n cpy #9\n beq ]rts\n cpy #19\n beq ]rts\n cpy #29\n beq ]rts\n\n:y lda #LoweringGate\n jmp addsound\n\n*-------------------------------\n*\n* Remove object\n*\n* In: A = lastpotion\n*\n*-------------------------------\nREMOVEOBJ\n sta lastpotion\n\n ldx #1\n stx clrbtn\n\n lda #floor\n sta (BlueType),y ;remove object\n lda #0\n sta (BlueSpec),y\n\n lda #35 ;TEMP\n sta height\n\n lda #2\n clc\n jsr markwipe\n jmp markred\n\n*-------------------------------\n*\n*  S E T  I N I T I A L S\n*\n*  Set initial states of gadgets\n*\n*-------------------------------\nSETINITIALS\n lda INFO ;number of screens +1\n sec\n sbc #1\n sta SCRNUM\n\n:loop jsr DoScrn ;for every screen\n\n dec SCRNUM\n bne :loop\n rts\n\n*-------------------------------\nDoScrn\n lda SCRNUM\n jsr calcblue\n\n ldy #29\n\n:loop jsr getinitobj\n bcc :skip\n sta (BlueSpec),y\n\n:skip dey\n bpl :loop\n\n rts\n\n*-------------------------------\n*\n*  S T A R T   K I D\n*\n*  Put kid in his starting position for this level\n*\n*-------------------------------\nSTARTKID\n lda level\n cmp #3\n bne :nomile\n\n* Level 3 milestone?\n\n:special3\n lda milestone ;set to 1 when he gets past 1st gate\n beq :nomile\n lda #-1\n sta KidStartFace\n lda #2\n sta KidStartScrn\n lda #6\n sta KidStartBlock ;put him just inside 1st gate...\n\n lda #7\n ldx #4\n ldy #0\n jsr rdblock\n lda #space\n sta (BlueType),y ;remove loose floor...\n;& continue\n:nomile\n lda KidStartScrn ;in INFO\n sta CharScrn\n\n lda KidStartBlock\n jsr unindex ;return A = blockx, X = blocky\n\n sta CharBlockX\n stx CharBlockY\n\n lda CharBlockX\n jsr getblockej\n clc\n adc #angle+7\n sta CharX ;put kid on starting block\n\n lda KidStartFace\n eor #$ff\n sta CharFace\n\n lda origstrength\n ldx level\n bne :notdemo\n lda #4\n:notdemo sta MaxKidStr\n sta KidStrength\n\n do EditorDisk\n jmp :normal\n fin\n\n lda level\n cmp #1\n beq :special1\n cmp #13\n beq :special13\n bne :normal\n\n* Special start for Level 1\n\n:special1\n lda #5 ;scrn\n ldx #2 ;blockx\n ldy #0 ;blocky\n jsr rdblock\n jsr pushpp ;slam gate shut\n\n lda #stepfall\n jsr jumpseq\n jmp STARTKID1\n\n* & for level 13\n\n:special13\n lda #running\n jsr jumpseq\n jmp STARTKID1\n\n* Normal start\n\n:normal lda #turn\n jsr jumpseq ;start in standing posn\n\nSTARTKID1\n ldx CharBlockY\n lda FloorY+1,x\n sta CharY\n\n lda #-1\n sta CharLife ;ff = alive\n\n lda #0 ;kid\n sta CharID\n\n lda #0\n sta CharXVel\n sta CharYVel\n sta waitingtojump\n sta weightless\n sta invert\n sta jarabove\n sta droppedout\n sta CharSword\n sta offguard\n\n:done jsr animchar ;get next frame\n\n* WTLESS level only--kid falls into screen\n\n lda level\n cmp #7 ;WTLESS level\n bne :notsp\n\n lda yellowflag ;should be -\n bmi :yelok\n lda #$40\n sta timebomb ;2nd level copy protection\n:yelok\n lda CharScrn\n cmp #17\n bne :notsp\n lda #3 ;down\n jsr cut\n:notsp\n jmp SaveKid ;save KidVars\n\n]rts rts\n\n*-------------------------------\n*\n*  G R A V I T Y\n*\n*-------------------------------\nTermVelocity = 33\nAccelGravity = 3\nWtlessTermVel = 4\nWtlessGravity = 1\n\nGRAVITY\n lda CharAction\n cmp #4\n bne ]rts\n\n lda weightless\n bne :wtless\n\n lda CharYVel\n clc\n adc #AccelGravity\n\n cmp #TermVelocity\n bcc :ok\n lda #TermVelocity\n\n:ok sta CharYVel\n]rts rts\n\n:wtless lda CharYVel\n clc\n adc #WtlessGravity\n\n cmp #WtlessTermVel\n bcc :ok\n lda #WtlessTermVel\n bcs :ok\n\n*-------------------------------\n*\n*  Add falling velocity\n*\n*-------------------------------\nADDFALL\n lda CharYVel\n clc\n adc CharY\n sta CharY\n\n* X-vel\n\n lda CharAction\n cmp #4 ;freefall?\n bne ]rts\n\n lda CharXVel\n jsr addcharx\n sta CharX\n\n jmp rereadblocks\n\n*-------------------------------\n*\n* Set initial guard posns for entire level (call once)\n*\n*-------------------------------\nINITIALGUARDS\n ldy #24 ;screen #\n:loop\n lda GdStartBlock-1,y\n cmp #30\n bcs :nogd\n jsr unindex ;A = blockx\n jsr getblockej\n clc\n adc #angle+7\n sta GdStartX-1,y\n lda #0\n sta GdStartSeqH-1,y\n\n:nogd dey\n bne :loop\n]rts rts\n\n*-------------------------------\n*\n* Newly dead enemy--play music (or whatever)\n*\n* In: Char vars\n*\n*-------------------------------\nDEADENEMY\n lda level\n beq :demo\n cmp #13\n beq :wingame\n\n lda CharID\n cmp #1\n beq ]rts ;shadow\n lda #s_Vict\n ldx #25\n jsr cuesong\n]rts rts\n\n:demo lda #1\n sta milestone ;start demo, part 2\n lda #0\n sta PreRecPtr\n sta PlayCount\n rts\n\n:wingame lda #s_Upstairs\n ldx #25\n jsr cuesong\n\n lda #$ff ;white\n sta lightcolor\n lda #10\n sta lightning\n\n lda #1\n sta exitopen\n lda #4\n sta timerequest\n\n lda #24\n ldx #0\n ldy #0\n jsr rdblock\n jmp pushpp ;open exit\n\n*-------------------------------\n*  Mirror appears (called by MOVER when exit opened)\n*-------------------------------\nMIRAPPEAR\n do DemoDisk\n rts\n else\n\n lda level\n cmp #4\n bne ]rts\n\n lda #mirscrn\n ldx #mirx\n ldy #miry\n jsr rdblock\n lda #mirror\n sta (BlueType),y\n rts\n\n fin\n\n*-------------------------------\n lst\n ds 1\n usr $a9,20,$400,*-org\n lst off\n"
  },
  {
    "path": "01 POP Source/Source/TABLES.S",
    "content": "* tables\norg = $e00\n tr on\n lst off\n*-------------------------------\n*\n*  PRINCE OF PERSIA\n*  Copyright 1989 Jordan Mechner\n*\n*-------------------------------\n dum org\n\nByteTable ds $100\nOffsetTable ds $100\nBlockTable ds $100\nPixelTable ds $100\nMult10 ds $10\nMult7 ds $10\nMult30 ds $40\n\nBlockEdge ds 20\nBlockTop ds 5\nBlockBot ds 5\nFloorY ds 5\nBlockAy ds 5\n\n dend\n*-------------------------------\n org org\n*-------------------------------\nScrnLeft = 58\nScrnTop = 0\nScrnBot = 191\n\nVertDist = 10 ;from bottom of block to center plane\nBlockHeight = 63\nDHeight = 3 ;floorpiece thickness\n\nBlox1 = BlockHeight\nBlox2 = 2*BlockHeight\nBlox3 = 3*BlockHeight\nBlox4 = 4*BlockHeight\n\n*-------------------------------\n* ByteTable\n*\n* Index:  Real screen X-coord (0-255)\n* Yields: Byte # (0-36)\n*-------------------------------\n\n ds ByteTable-*\n\n]byte = 0\n lup 36\n db ]byte,]byte,]byte,]byte,]byte,]byte,]byte\n]byte = ]byte+1\n --^\n db 36,36,36,36\n\n*-------------------------------\n* OffsetTable\n*\n* Index:  Same as ByteTable\n* Yields: Offset (0-6)\n*-------------------------------\n ds OffsetTable-*\n\n lup 36\n db 0,1,2,3,4,5,6\n --^\n db 0,1,2,3\n\n*-------------------------------\n* BlockTable\n*\n* Index:  Screen X-coord (0 to 255)\n* Yields: Block # (-5 to 14)\n*-------------------------------\n ds BlockTable-*\n\n]byte = -5\n db ]byte,]byte\n\n lup 18\n]byte = ]byte+1\n db ]byte,]byte,]byte,]byte,]byte,]byte,]byte\n db ]byte,]byte,]byte,]byte,]byte,]byte,]byte\n --^\n\n]byte = ]byte+1\n db ]byte,]byte\n\n*-------------------------------\n* PixelTable\n*\n* Index:  Same as BlockTable\n* Yields: Pixel # within block (0 to 13)\n*-------------------------------\n ds PixelTable-*\n\n db 12,13\n\n lup 18\n db 0,1,2,3,4,5,6,7,8,9,10,11,12,13\n --^\n\n db 0,1\n\n*-------------------------------\n* Mult10\n*-------------------------------\n ds Mult10-*\n\n]byte = 0\n lup 16\n db ]byte\n]byte = ]byte+10\n --^\n\n*-------------------------------\n* Mult7\n*-------------------------------\n ds Mult7-*\n\n]byte = 0\n lup 16\n db ]byte\n]byte = ]byte+7\n --^\n\n*-------------------------------\n* Mult30\n*-------------------------------\n ds Mult30-*\n\n]word = 0\n lup 32\n dw ]word\n]word = ]word+30\n --^\n\n*-------------------------------\n* BlockEdge\n*\n* Index:  Block X (-5 to 14) + 5\n* Yields: Screen X-coord of left edge of block\n*-------------------------------\n ds BlockEdge-*\n\n]byte = -12\n lup 20\n db ]byte\n]byte = ]byte+14\n --^\n\n*-------------------------------\n* BlockTop, BlockBot, FloorY\n*\n* Index:  Block Y (-1 to 3) + 1\n\n ds BlockTop-*\n\n db ScrnBot+1-Blox4\n db ScrnBot+1-Blox3\n db ScrnBot+1-Blox2\n db ScrnBot+1-Blox1\n db ScrnBot+1\n\n*-------------------------------\n ds BlockBot-*\n\n db ScrnBot-Blox3\n db ScrnBot-Blox2\n db ScrnBot-Blox1\n db ScrnBot\n db ScrnBot+Blox1\n\n*-------------------------------\n ds FloorY-*\n\n db ScrnBot-Blox3-VertDist\n db ScrnBot-Blox2-VertDist\n db ScrnBot-Blox1-VertDist\n db ScrnBot-VertDist\n db ScrnBot+Blox1-VertDist\n\n*-------------------------------\n ds BlockAy-*\n\n db ScrnBot-Blox3-DHeight\n db ScrnBot-Blox2-DHeight\n db ScrnBot-Blox1-DHeight\n db ScrnBot-DHeight\n db ScrnBot+Blox1-DHeight\n\n*-------------------------------\n lst\neof ds 1\n usr $a9,3,$000,*-org\n lst off\n"
  },
  {
    "path": "01 POP Source/Source/TOPCTRL.S",
    "content": "* topctrl\norg = $2000\nEditorDisk = 0\nFinalDisk = 1\nDemoDisk = 0\nThreeFive = 1 ;3.5\" disk?\n tr on\n lst off\n*-------------------------------\n*\n*  PRINCE OF PERSIA\n*  Copyright 1989 Jordan Mechner\n*\n*-------------------------------\n org org\n\n jmp START\n jmp RESTART\n jmp STARTRESUME\n jmp INITSYSTEM\n jmp showpage\n\n jmp showpage\n jmp GOATTRACT\n\n*-------------------------------\n lst\n put eq\n lst\n put gameeq\n lst\n put seqdata\n lst\n put movedata\n lst\n put soundnames\n lst off\n\n*-------------------------------\n* 18-sector ID bytes\n\nPOPside1 = $a9\nPOPside2 = $ad\n\nFirstSideB = 3 ;1st level on Side B\nLastSideB = 14 ;& last\n\n*-------------------------------\n* Soft switches\n\nALTZPon = $c009\nALTZPoff = $c008\nRAMWRTaux = $c005\nRAMWRTmain = $c004\nRAMRDaux = $c003\nRAMRDmain = $c002\nTEXTon = $c051\nPAGE2off = $c054\n\nkresurrect = \"R\"\n\n*-------------------------------\n* Misc. changeable parameters\n\ninitmaxstr = 3\n\nBTLtimer = 20 ;back to life\nwtlflash = 15 ;weightless\n\nmousetimer = 150\n\n*-------------------------------\n* message #s\n\nLevelMsg = 1\nContMsg = 2\nTimeMsg = 3\n\nleveltimer = 20 ;level message timer\ncontflash = 95\ncontoff = 15\ndeadenough = 4\n\n*-------------------------------\n* Mirror location\n\nmirlevel = 4\nmirscrn = 4\nmirx = 4\nmiry = 0\n\n*-------------------------------\n*\n*  Start a new game\n*\n*  In: A = level # (0 for demo, 1 for game)\n*\n*-------------------------------\nSTART\n sta ALTZPon\n jsr StartGame\n jmp RESTART\n\n*-------------------------------\n*\n*  Resume saved game\n*\n*-------------------------------\nSTARTRESUME\n sta ALTZPon\n lda #4 ;arbitrary value >1\n jsr StartGame\n jmp ResumeGame\n\n*-------------------------------\n*\n*  Initialize system (Called from MASTER upon bootup)\n*\n*-------------------------------\nINITSYSTEM\n sta ALTZPon\n\n jsr setcenter ;Center joystick\n\n jsr setfastaux ;bgtable in auxmem\n\n lda #FinalDisk!1\n sta develment\n\n jsr initgame\n\n ldx #0\n txa\n:loop sta $0,x\n inx\n bne :loop\n\n sta ALTZPoff\n rts\n\n*-------------------------------\n*\n*  Start a game\n*\n*  In: A = level # (0 for demo, 1 for new game, >1 for\n*      resumed game)\n*\n*-------------------------------\nStartGame\n sta level\n sta NextLevel\n\n cmp #1\n bne :notfirst\n lda #s_Danger\n ldx #25\n jsr cuesong ;Cue \"Danger\" theme if level 1\n:notfirst\n\n lda #initmaxstr\n sta origstrength ;set initial strength\n\n jmp initgame\n\n*-------------------------------\n*\n*  Resume saved game\n*\n*-------------------------------\nResumeGame\n do DemoDisk\n rts\n else\n\n jsr flipdisk ;Ask player to flip disk\n lda #POPside2\n sta BBundID ;& expect side 2 from now on\n\n:cont jsr loadgame ;Load saved-game info from disk\n\n lda SavLevel ;Has a game been saved?\n bpl :ok ;Yes\n\n* No game saved--start new game instead\n\n jsr flipdisk\n lda #POPside1\n sta BBundID\n\n lda #1\n sta level\n sta NextLevel\n jmp RESTART\n\n* Restore strength & timer\n\n:ok lda SavStrength\n sta origstrength\n\n lda SavTimer+1\n sta FrameCount+1\n lda SavTimer\n sta FrameCount\n\n lda SavNextMsg\n sta NextTimeMsg\n\n* & resume from beginning of level\n\n lda #1\n sta timerequest ;show time remaining\n lda #$80\n sta yellowflag ;pass copy prot. test\n lda SavLevel\n sta level\n sta NextLevel\n jmp RESTART\n\n fin\n\n*-------------------------------\n*\n* Initialize vars before starting game\n*\n*-------------------------------\ninitgame\n lda #0\n sta blackflag\n sta redrawflg\n sta inmenu\n sta inbuilder\n sta recheck0\n sta SINGSTEP\n sta ManCtrl\n sta vibes\n sta invert\n sta milestone\n sta timerequest\n sta FrameCount\n sta FrameCount+1\n sta NextTimeMsg\n\n lda #$ff\n sta MinLeft\n sta SecLeft\n\n lda #1 ;no delay\n sta SPEED\n rts\n\n*-------------------------------\n*\n*  Restart current level\n*\n*-------------------------------\nRESTART\n sta ALTZPon\n sta $c010 ;clr kbd strobe\n\n do EditorDisk\n jsr reloadblue\n else\n\n lda #\" \"\n jsr lrcls\n jsr vblank\n lda PAGE2off\n lda TEXTon\n\n ldx level\n jsr LoadLevelX ;load blueprint & image sets from disk\n fin\n\n jsr setinitials ;Set initial states as specified in blueprint\n\n jsr initialguards ;& guards\n\n* Zero a lot of vars & tables\n\n lda #0\n sta SINGSTEP\n sta vibes\n sta AMtimer\n sta VisScrn\n sta exitopen\n sta lightning\n sta mergetimer\n sta numtrans\n sta nummob\n sta EnemyAlert\n sta createshad\n sta stunned\n sta heroic\n sta ChgKidStr\n sta OppStrength ;no opponent\n sta msgtimer\n sta PreRecPtr\n sta PlayCount\n\n ldx SongCue\n cpx #s_Danger\n beq :1st\n sta SongCue\n:1st\n\n jsr zerosound\n\n jsr zeropeels\n\n jsr initCDbuf ;initialize collision detection buffers\n\n jsr initinput\n\n lda #1\n sta gotsword\n\n lda #-1\n sta cutorder\n\n lda #2\n sta ShadID ;default opponent is guard\n lda #86\n sta ShadFace\n\n jsr startkid\n\n do EditorDisk\n else\n\n lda level\n cmp #1\n bne :gotswd\n lda #0\n sta gotsword ;Start Level 1 w/o sword\n:gotswd\n fin\n\n lda level\n beq :nomsg\n cmp #14\n beq :nomsg ;don't announce level 0 or 14\n cmp #13\n bne :1\n lda skipmessage\n beq :1\n lda #0\n sta skipmessage\n beq :nomsg ;skip level 13 message 1st time\n:1 lda #LevelMsg\n sta message\n lda #leveltimer\n sta msgtimer\n:nomsg\n\n jsr entrance ;entrance slams shut\n\n jsr FirstFrame ;Generate & display first frame\n\n jmp MainLoop\n\n*-------------------------------\n*\n*  Main loop\n*\n*-------------------------------\nMainLoop\n jsr rnd\n\n lda #0\n sta ChgKidStr\n sta ChgOppStr\n\n jsr strobe ;Strobe kbd & jstk\n\n jsr demokeys\n bpl :4\n lda #1\n jmp START ;During demo, press any key to play\n:4\n jsr misctimers\n\n jsr NextFrame ;Determine what next frame should look like\n\n jsr flashon\n\n jsr FrameAdv ;Draw next frame & show it\n\n jsr playback ;Play sounds\n jsr zerosound ;& zero sound table\n\n jsr flashoff\n\n jsr songcues ;Play music\n\n lda NextLevel\n cmp level\n beq MainLoop ;Continue until we change levels\n\n jsr yellowcheck ;copy protect!\n\n jmp LoadNextLevel\n\n*-------------------------------\n*\n* Load next level\n*\n* In: NextLevel = # of next level\n*     level = # of current level\n*\n* Out: level = NextLevel\n*\n*-------------------------------\nLoadNextLevel\n lda NextLevel\n cmp #14\n beq LoadNext1\n lda #1\n sta timerequest ;show time remaining\n\nLoadNext1\n lda MaxKidStr\n sta origstrength ;save new strength level\n lda #0\n sta milestone\n\n do EditorDisk\n lda level\n sta NextLevel\n jmp RESTART\n fin\n\n* NextLevel must be in range 1 - LastSideB\n\n lda NextLevel\n cmp #LastSideB+1\n bcs :illegal\n cmp #1\n bcs :2\n:illegal lda level ;Illegal value--restart current level\n sta NextLevel\n jmp RESTART\n\n* Load from correct side of disk\n\n:2 ldx #POPside2\n cmp #FirstSideB\n bcs :1\n ldx #POPside1\n:1 cpx BBundID ;do we need to flip disk?\n beq :ok ;no\n stx BBundID ;yes\n jsr flipdisk\n\n:ok lda NextLevel\n sta level ;set new level\n cmp #2\n beq :cut1\n cmp #4\n beq :cut2\n cmp #6\n beq :cut3\n cmp #8\n beq :cut8\n cmp #9\n beq :cut4\n cmp #12\n beq :cut5 ;Princess cuts before certain levels\n\n:cont jmp RESTART ;Start new level\n\n* Princess cuts before certain levels\n\n:cut1 lda #1\n]pcut pha\n:repeat jsr cutprincess ;cut to princess's room...\n jsr setrecheck0\n jsr recheckyel ;if wrong-disk error, recheck track 0\n bne :repeat ;& repeat\n pla\n jsr playcut ;& play cut #1\n jmp :cont\n\n:cut2 lda #2\n bne ]pcut\n:cut3 lda #3\n bne ]pcut\n:cut4 lda #4\n bne ]pcut\n:cut5 lda #5\n bne ]pcut\n:cut8 lda #8\n bne ]pcut\n\n*-------------------------------\n*\n*  N E X T   F R A M E\n*\n*  Determine what next frame should look like\n*\n*  In: All data reflects last (currently displayed) frame.\n*\n*-------------------------------\nNextFrame\n jsr animmobs ;Update mobile objects (MOBs)\n\n jsr animtrans ;Update transitional objects (TROBs)\n\n jsr bonesrise ;Bring skeleton to life?\n\n jsr checkalert ;Determine EnemyAlert value\n\n jsr DoKid ;Update kid\n\n jsr DoShad ;Update shadowman (or other opponent)\n\n jsr checkstrike\n jsr checkstab ;Check for sword strikes\n:1\n jsr addsfx ;Add additional sound fx\n\n jsr chgmeters ;Change strength meters\n\n jsr cutcheck ;Has kid moved offscreen?\n  jsr PrepCut ;If so, prepare to cut to new screen\n\n jsr cutguard ;If guard has fallen offscreen, vanish him\n\n do EditorDisk\n rts\n fin\n\n* Level 0 (Demo): When kid exits screen 24, end demo\n\n lda level\n bne :no0\n lda KidScrn\n cmp #24\n bne :cont\n jmp GOATTRACT\n\n* Level 6: When kid falls off screen 1, cut to next level\n\n:no0 do DemoDisk\n else\n\n lda level\n cmp #6\n bne :no6\n lda KidScrn\n cmp #1\n bne :cont\n lda KidY\n cmp #20\n bcs :cont\n lda #-1\n sta KidY\n inc NextLevel\n jmp :cont\n\n* Level 12: When kid exits screen 23, cut to next level\n\n:no6 cmp #12\n bne :cont\n lda KidScrn\n cmp #23\n bne :cont\n inc NextLevel\n lda #1\n sta skipmessage ;but don't announce level #\n jmp LoadNext1 ;or show time\n\n fin\n\n* Continue...\n\n:cont lda level\n cmp #14\n bcs :stopped\n cmp #13\n bcc :ticking\n lda exitopen\n bne :stopped ;Timer stops when you kill Vizier on level 13\n\n:ticking jsr keeptime\n\n:stopped jsr showtime ;if timerequest <> 0\n\n lda level\n cmp #13\n bcs :safe ;You have one chance to finish Level 13\n;after time runs out\n lda MinLeft\n ora SecLeft\n bne :safe\n jmp YouLose ;time's up--you lose\n:safe\n]rts rts\n\n*-------------------------------\n*\n*  F R A M E   A D V A N C E\n*\n*  Draw new frame (on hidden hi-res page) & show it\n*\n*-------------------------------\nFrameAdv\n lda cutplan ;set by PrepCut\n bne :cut\n\n jsr DoFast\n jmp PageFlip ;Update current screen...\n\n:cut jmp DoCleanCut ;or draw new screen from scratch\n\n*-------------------------------\n*\n*  F I R S T   F R A M E\n*\n*  Generate & display first frame\n*\n*-------------------------------\nFirstFrame\n lda KidScrn\n sta cutscrn\n\n jsr PrepCut\n\n jmp DoCleanCut\n\n*-------------------------------\n*\n*  D O   K I D\n*\n*  Update kid\n*\n*-------------------------------\nDoKid\n jsr LoadKidwOp ;Load kid as character (w/opponent)\n\n jsr rereadblocks\n\n jsr unholy ;If shadowman dies, kid dies\n\n jsr ctrlplayer ;Detect & act on commands from player\n\n lda invert\n beq :3\n lda CharLife\n bmi :3\n lda #2\n sta redrawflg\n lda #0\n sta invert\n jmp inverty ;Screen flips back rightside up when you're dead\n:3\n jsr wtlessflash\n\n lda CharScrn\n beq :skip ;Skip all this if kid is on null screen:\n\n jsr animchar ;Get next frame from sequence table\n\n jsr gravity ;Adjust Y-velocity\n jsr addfall ;Add falling velocity\n\n jsr setupchar\n jsr rereadblocks\n jsr getedges\n\n jsr firstguard ;Check for collision w/guard\n\n jsr checkbarr ;Check for collisions w/vertical barriers\n\n jsr collisions ;React to collisions detected above\n\n jsr checkgate ;Knocked to side by closing gate?\n\n jsr  checkfloor ;Is there floor underfoot?  If not, fall\n\n jsr  checkpress ;Is kid stepping on a pressure plate?\n;If so, add pressplate (& whatever it\n;triggers) to trans list.\n\n jsr checkspikes  ;Trigger spikes?\n\n jsr checkimpale ;impaled by spikes?\n jsr checkslice ;sliced by slicer?\n:1\n jsr shakeloose ;shake loose floors\n\n:skip jsr SaveKid ;Save all changes to char data\n]rts rts\n\n*-------------------------------\n*\n*  D O   S H A D\n*\n*  Update shadowman (or other opponent)\n*\n*-------------------------------\nDoShad\n lda ShadFace\n cmp #86\n beq ]rts ;\"no character\" code\n\n jsr LoadShadwOp\n jsr rereadblocks\n\n jsr unholy\n\n jsr ShadCtrl ;Opponent control module\n\n lda CharScrn\n cmp VisScrn\n bne :os\n\n jsr animchar\n\n lda CharX\n cmp #ScrnLeft-14\n bcc :os\n cmp #ScrnRight+14\n bcs :os ;Skip all this if char is offscreen\n\n jsr gravity\n jsr addfall\n\n jsr setupchar\n jsr rereadblocks\n jsr getedges\n\n jsr enemycoll\n\n jsr  checkfloor\n jsr  checkpress\n jsr checkspikes\n jsr checkimpale\n  jsr checkslice2\n\n:os jmp SaveShad\n\n*-------------------------------\n*\n*  Add all visible characters to object table\n*\n*-------------------------------\naddchars\n jsr :reflection\n jsr :shadowman\n jsr :kid\n\n jsr checkmeters\n\n]rts rts\n\n*-------------------------------\n* Draw kid's reflection in mirror\n\n:reflection\n jmp reflection\n\n*-------------------------------\n* Draw shadowman or other opponent\n\n:shadowman\n lda ShadFace\n cmp #86 ;Is there a shadowman?\n beq ]rts ;no\n lda ShadScrn\n cmp VisScrn ;Is he visible?\n bne ]rts ;no\n\n jsr setupshad ;Add shadowman to object table\n\n lda ChgOppStr\n bpl :s1\n jsr setupcomix ;Add impact star if he's been hurt\n:s1 jmp setupsword ;Add sword\n\n*-------------------------------\n* Draw kid\n\n:kid lda KidScrn\n beq ]rts\n cmp VisScrn\n bne ]rts\n\n jsr setupkid ;Add kid to obj table\n\n lda ChgKidStr\n bpl :s2\n jsr setupcomix ;Add impact star\n:s2 jmp setupsword ;Add sword\n\n*-------------------------------\n*\n*  S E T   U P   K I D\n*\n*  Add kid to object table\n*  Crop edges, index char, mark fredbuf/floorbuf\n*\n*-------------------------------\nsetupkid\n jsr LoadKid\n jsr rereadblocks\n\n lda CharPosn\n bne :cont ;Delay loop if CharPosn = 0\n lda #25\n jmp pause\n\n:cont jsr setupchar\n jsr unevenfloor\n\n jsr getedges\n jsr indexchar\n jsr quickfg\n jsr quickfloor\n jsr cropchar\n\n jmp addkidobj ;add kid to obj table\n\n*-------------------------------\n*\n*  S E T   U P   S H A D\n*\n*  Add shadowman to obj table\n*\n*-------------------------------\nsetupshad\n jsr LoadShad\n jsr rereadblocks\n\n jsr setupchar\n jsr unevenfloor\n\n jsr getedges\n jsr indexchar\n jsr quickfg\n jsr quickfloor\n jsr cropchar\n\n lda CharID\n cmp #1 ;Shadowman?\n bne :1 ;no\n lda level\n cmp #mirlevel\n bne :2\n lda CharScrn\n cmp #mirscrn\n bne :2\n lda #mirx ;Clip shadman at L as he jumps out of mirror\n asl\n asl\n clc\n adc #1\n sta FCharCL\n:2 jmp addshadobj\n\n:1 jmp addguardobj\n\n*-------------------------------\n*\n*  Cut to new screen\n*\n*  DoQuickCut: Show bg before adding characters\n*  DoCleanCut: Show frame only when complete\n*\n*-------------------------------\nUseQuick = 0\n\n do UseQuick\n\nDoQuickCut\n jsr fastspeed ;IIGS\n\n lda #0\n sta PAGE\n jsr drawbg ;draw bg on p1\n\n jsr PageFlip\n\n jsr copyscrn ;copy bg to p2\n jsr DoFast ;add chars\n\n jsr PageFlip ;show complete frame\n jmp normspeed\n\n else\n\nDoCleanCut\n jsr fastspeed ;IIGS\n\n lda #$20\n sta PAGE\n jsr drawbg ;draw bg on p2\n\n lda #0\n sta PAGE\n jsr copyscrn ;copy bg to p1\n\n jsr DoFast ;add chars\n\n;jsr vblank2\n jsr PageFlip\n jmp normspeed\n\n fin\n\n*-------------------------------\n*\n*  D R A W   B G\n*\n*  Clear screen & draw background (on hidden hi-res page)\n*  Show black lo-res screen to cover transition\n*\n*-------------------------------\ndrawbg\n lda #0\n sta cutplan\n\n lda #2\n sta CUTTIMER ;min # of frames between cuts\n\n lda #\" \"\n jsr lrclse\n jsr vblank\n lda PAGE2off\n lda TEXTon\n\n jsr DoSure ;draw b.g. w/o chars\n\n jmp markmeters ;mark strength meters\n\n*-------------------------------\n*\n*  D O   S U R E\n*\n*  Clear screen and redraw entire b.g. from scratch\n*\n*-------------------------------\nDoSure\n lda VisScrn\n sta SCRNUM\n\n jsr zerolsts ;zero image lists\n\n jsr sure ;Assemble image lists\n\n jsr zeropeels ;Zero peel buffers\n jsr zerored ;and redraw buffers\n;(for next DoFast call)\n\n jmp drawall ;Dump contents of image lists to screen\n\n*-------------------------------\n*\n*  D O  F A S T\n*\n*  Do a fast screen update\n*  (Redraw objects and as little of b.g. as possible)\n*\n*-------------------------------\nDoFast\n jsr zerolsts ;zero image lists\n\n lda VisScrn\n sta SCRNUM\n\n jsr develpatch\n\n jsr addmobs ;Add MOBS to object list\n\n jsr addchars ;Add characters to object list\n;(incl. strength meters)\n\n jsr fast ;Assemble image lists (including objects\n;from obj list and necessary portions of bg)\n\n jsr dispmsg ;Superimpose message (if any)\n:1\n jmp drawall ;Dump contents of image lists to screen\n]rts rts\n\n*-------------------------------\n*\n*  Lightning flashes\n*\n*-------------------------------\nflashon\n lda lightning\n beq :1\n lda lightcolor\n bne :2\n:1 lda ChgKidStr\n bpl ]rts\n lda #$11 ;Flash red if kid's been hurt\n:2 jmp doflashon\n\nflashoff\n lda lightning\n beq :1\n dec lightning\n bpl :2\n\n:1 lda ChgKidStr\n bpl ]rts\n:2 jmp doflashoff\n\n*-------------------------------\n*\n*  Initialize collision detection buffers\n*\n*-------------------------------\ninitCDbuf\n ldx #9\n lda #$ff\n:zloop sta SNlastframe,x\n sta SNthisframe,x\n sta SNbelow,x\n sta SNabove,x\n dex\n bpl :zloop\n\n sta BlockYlast\n]rts rts\n\n*-------------------------------\n*\n*  Prepare to cut?\n*\n*  In: VisScrn = current screen\n*      cutscrn = screen we want to be on\n*\n*  If cutscrn <> VisScrn, make necessary preparations\n*  & return cutplan = 1\n*\n*-------------------------------\nPrepCut\n lda cutscrn\n beq ]rts ;never cut to screen 0\n cmp VisScrn\n beq ]rts ;If cutscrn = VisScrn, we don't need to cut\n\n lda cutscrn\n sta VisScrn\n cmp #5\n bne :1\n lda level\n cmp #14\n bne :1\n jmp YouWin ;Level 14, screen 5 is princess's room--you win!\n\n:1 lda #1\n sta cutplan\n\n jsr getscrns ;Get neighboring screen #s\n\n jsr LoadKid\n jsr addslicers\n jsr addtorches\n jsr crumble ;Activate slicers, torches, etc.\n\n jmp addguard ;Add guard (if any)\n\n*-------------------------------\n*\n*  Time's up--you lose\n*\n*-------------------------------\nYouLose\n jsr cutprincess ;cut to princess's room...\n lda #6\n jsr playcut ;& play cut #6\n\n jmp GOATTRACT ;go to title sequence\n\n*-------------------------------\n*\n*  You win\n*\n*-------------------------------\nYouWin jsr cutprincess\n lda #7\n jsr playcut ;Play cut #7\n jmp epilog ;Play epilog (& hang)\n\n*-------------------------------\n*\n*  Control player\n*\n*  In/out: Char vars\n*\n*-------------------------------\nctrlplayer\n jsr kill0 ;If char is on screen 0, kill him off\n\n jsr PlayerCtrl ;Control player\n\n lda CharLife\n bmi ]rts ;If char is still alive, return\n\n* When player dies, CharLife is set to 0.\n* Inc CharLife until = #deadenough; then put up message\n\n:dead lda CharPosn\n jsr cold?\n bne ]rts ;wait till char has stopped moving\n\n lda CharLife\n bne :inc\n jsr deathsong ;cue death music\n\n:inc lda CharLife\n cmp #deadenough\n bcs :deadenough\n inc CharLife\n]rts rts\n\n:deadenough\n lda level\n beq :gameover ;Your death ends demo\n\n lda SongCue\n bne ]rts ;wait for song to finish before putting up msg\n\n lda MinLeft\n ora SecLeft\n bne :timeleft\n jmp YouLose ;if you die with time = 0, you lose\n\n* Otherwise: \"Press Button to Continue\"\n\n:timeleft\n lda message\n cmp #ContMsg\n bne :1\n lda msgtimer\n bne :ok\n\n:1 lda #ContMsg\n sta message\n lda #255\n sta msgtimer ;Put up continue message\n\n:ok cmp #1\n beq :gameover ;End game when msgtimer = 1\n\n do FinalDisk\n else\n\n lda develment\n beq :nodevel\n lda keypress\n cmp #kresurrect\n beq :raise ;TEMP!\n:nodevel\n fin\n\n lda BTN0\n ora BTN1\n bpl ]rts\n jmp RESTART ;Button press restarts level\n\n:gameover\n do EditorDisk\n jmp RESTART\n else\n jmp GOATTRACT\n fin\n\n* Raise kid from the dead (TEMP!)\n\n do FinalDisk\n else\n:raise\n lda #0\n sta msgtimer\n sta SongCue\n\n lda #BTLtimer\n sta backtolife\n\n jsr LoadKid\n\n lda MaxKidStr\n sta ChgKidStr\n\n lda #stand\n jsr jumpseq\n jmp startkid1\n\n fin\n\n*-------------------------------\n*\n* Play death song\n*\n*-------------------------------\ndeathsong\n lda ShadID\n cmp #1\n beq :shad ;if opponent was shadowman\n lda heroic ;was kid engaged in battle at time of death?\n bne :1 ;yes--\"heroic death\" music\n lda #s_Accid ;no--\"accidental death\" music\n bne :2\n:shad lda #s_Shadow\n bne :2\n:1 lda #s_Heroic\n:2 ldx #255\n jmp cuesong\n]rts rts\n\n*-------------------------------\n*\n* If char is on screen 0, kill him off\n*\n*-------------------------------\nkill0\n lda CharLife\n bpl ]rts\n lda CharScrn\n bne ]rts\n lda #Splat\n jsr addsound\n lda #100\n jsr decstr\n lda #0\n sta msgtimer\n sta CharLife\n lda #185\n sta CharPosn\n]rts rts\n\n*-------------------------------\n*\n* Go to attract mode\n*\n*-------------------------------\nGOATTRACT\n do DemoDisk\n else\n\n lda BBundID\n cmp #POPside1 ;does he need to flip disk?\n beq :ok ;no\n\n do ThreeFive\n else\n lda BGset1\n bpl :flip\n ldx #4\n jsr LoadLevelX ;get \"FLIP DISK\" msg into memory\n fin\n\n:flip jsr flipdisk ;ask him to flip disk\n\n fin\n\n lda #POPside1\n sta BBundID\n\n:ok jmp attractmode\n\n*-------------------------------\n*\n*  Shake loose floors when character jumps\n*\n*-------------------------------\nshakeloose\n lda jarabove\n bmi :jarbelow\n bne :jarabove\n]rts rts\n\n:jarbelow\n lda #0\n sta jarabove\n\n lda CharBlockY\n jmp shakem ;shake every loose floorboard on level\n\n:jarabove\n lda #0\n sta jarabove\n\n lda CharBlockY\n sec\n sbc #1\n jmp shakem\n\n*-------------------------------\n*\n* If strength meters have changed, mark affected\n* blocks for redraw\n*\n*-------------------------------\ncheckmeters\n lda ChgKidStr\n beq :1\n jsr MarkKidMeter\n\n:1 lda ChgOppStr\n beq ]rts\n jmp MarkOppMeter\n\n*-------------------------------\n*\n* Change strength meters as specified\n*\n*-------------------------------\nchgmeters\n lda level\n cmp #12\n bne :cont\n lda OpID\n ora CharID\n cmp #1 ;kid vs. shadowman?\n bne :cont\n ;yes\n lda ChgKidStr\n bpl :1\n sta ChgOppStr\n bne :cont\n\n:1 lda ChgOppStr\n bpl :cont\n sta ChgKidStr\n\n* Kid's meter\n\n:cont lda KidStrength\n clc\n adc ChgKidStr\n\n cmp MaxKidStr\n beq :ok1\n bcs :opp\n\n:ok1 sta KidStrength\n\n* Opponent's meter\n\n:opp lda OppStrength\n clc\n adc ChgOppStr\n\n cmp MaxOppStr\n beq :ok2\n bcs ]rts\n\n:ok2 sta OppStrength\n]rts rts\n\n*-------------------------------\n*\n* Slam player's entrance shut (add it to trans list)\n*\n*-------------------------------\nentrance\n lda KidScrn\n jsr calcblue\n\n ldy #29\n\n:loop lda (BlueType),y\n and #idmask\n cmp #exit\n bne :cont ;find player's entrance\n\n lda KidScrn\n jmp closeexit ;& return\n\n:cont dey\n bpl :loop\n\n]rts rts\n\n*-------------------------------\n*\n* Play song cues\n*\n* In: SongCue (0 = none, non0 = song #)\n*     SongCount\n*\n*-------------------------------\nsongcues\n do EditorDisk\n rts\n fin\n\n ldx SongCue\n beq ]rts\n lda level\n beq ]rts ;no music in demo\n\n lda SongCount\n bne :cont\n lda #0\n sta SongCue ;when SongCount reaches 0, forget it\n]rts rts\n:cont dec SongCount\n\n lda KidPosn\n bne :1\n lda NextLevel\n cmp level\n beq ]rts ;Play only one song once kid has reached stairs\n\n:1 lda KidPosn\n jsr static?\n bne ]rts\n\n lda ShadFace\n cmp #86\n beq :ok\n lda ShadScrn\n cmp VisScrn\n bne :ok\n lda ShadPosn\n jsr static?\n bne ]rts\n:ok\n lda trobcount ;(set by animtrans if there are any\n bne ]rts ;slicers or other fast-moving objects\n;that it wouldn't look good to freeze)\n lda nummob\n bne ]rts\n lda lightning\n bne ]rts ;wait for no MOBs and no lightning\n lda mergetimer\n bmi :ok2\n bne ]rts\n lda ChgKidStr\n ora ChgOppStr\n bne ]rts ;& no impact stars\n:ok2\n\n* Prepare for minimal animation\n\n lda PAGE\n eor #$20\n sta PAGE\n\n jsr listtorches\n\n* Play song\n\n lda SongCue\n jsr minit\n\n sta $c010 ;clr kbd\n\n:loop jsr burn\n jsr musickeys\n\n jsr mplay\n cmp #0\n bne :loop\n\n:done lda #0\n sta SongCue\n\n:rtn lda PAGE\n eor #$20\n sta PAGE\n\n jmp clearjoy\n\n*-------------------------------\n*\n* Add additional sound fx\n*\n*-------------------------------\naddsfx\n lda #167 ;blocked strike\n cmp KidPosn ;if char is striking...\n bne :1\n lda #SwordClash1\n bne :clash\n:1 cmp ShadPosn\n bne :2\n lda #SwordClash2\n:clash jmp addsound\n:2\n]rts rts\n\n*-------------------------------\n*\n* Display message (\"Press button to continue\" or \"Level #\"\n* or \"# minutes left\")\n*\n*-------------------------------\ndispmsg\n lda msgtimer\n beq ]rts\n dec msgtimer\n\n lda KidLife\n bmi :alive\n\n* Kid is dead -- message is \"Press button to continue\"\n\n lda msgtimer\n cmp #contoff\n bcc ]rts\n\n cmp #contflash\n bcs :steady\n\n and #7\n cmp #3\n bcs ]rts\n cmp #2\n bne :steady\n\n lda soundon\n bne :2\n jsr gtone ;if sound off\n:2 lda #FlashMsg\n jsr addsound\n\n:steady jmp continuemsg ;Kid is dead--superimpose continue msg\n\n* Kid is alive -- message is \"Level #\" or \"# Minutes\"\n\n:alive lda msgtimer\n cmp #leveltimer-2\n bcs ]rts\n\n lda message\n cmp #LevelMsg\n bne :1\n jmp printlevel\n\n:1 cmp #TimeMsg\n bne ]rts\n jmp timeleftmsg\n\n*-------------------------------\n*\n* Display \"Turn disk over\" and wait for button press\n*\n*-------------------------------\nflipdisk\n do ThreeFive\n lda #1\n sta purpleflag ;pass copy-protect!\n rts\n fin\n\n do DemoDisk\n jmp GOATTRACT\n else\n\n* 1st copy protection check\n\n lda redherring\n eor redherring2\n cmp #POPside1 ;passed 1st check?\n beq :1\n lda #POPside1\n sta BBundID\n  jmp attractmode\n\n* Passed copy protection--continue\n\n:1 lda #\" \"\n jsr lrcls\n\n jsr zerolsts\n jsr zeropeels\n lda #1\n sta genCLS\n\n jsr flipdiskmsg\n\n jsr drawall\n\n jsr vblank\n jsr PageFlip\n\n lda $c010 ;clr kbd strobe\n:loop\n lda $c061\n ora $c062\n ora $c000\n bpl :loop\n\n fin\n\n* Flip to clr text scrn\n\nshowtext jsr vblank\n lda PAGE2off\n lda TEXTon\n]rts rts\n\n*-------------------------------\n*\n* Is character moving?\n*\n* In: A = CharPosn\n* Out: 0 if static, 1 if moving\n*\n*-------------------------------\nstatic?\n cmp #0\n beq ]ok\n cmp #15 ;stand\n beq ]ok\n cmp #229 ;brandish sword\n beq ]ok\n cmp #109 ;crouching\n beq ]ok\n cmp #171 ;en garde\n beq ]ok\n cmp #166 ;alert stand (for gd.)\n beq ]ok\ncold?\n cmp #185 ;dead\n beq ]ok\n cmp #177 ;impaled\n beq ]ok\n cmp #178 ;halves\n beq ]ok\n lda #1\n rts\n]ok lda #0\n]rts rts\n\n*-------------------------------\n*\n* Clear all jstk flags\n*\n*-------------------------------\nclearjoy\n jsr LoadSelect\n lda #0\n sta clrF\n sta clrB\n sta clrU\n sta clrD\n jmp SaveSelect\n\n*-------------------------------\n*\n*  Misc. timers (Call every cycle)\n*\n*-------------------------------\nmisctimers\n lda mergetimer\n beq :3\n bmi :3\n dec mergetimer\n bne :3\n dec mergetimer ;goes from 1 to -1\n:3\n\n* Level 8: When you've spent a certain amount of time on\n* screen 16 once exit is open, mouse rescues you\n\n lda level\n cmp #8 ;mouse level\n bne :12\n lda CharScrn\n cmp #16\n bne :12\n lda exitopen\n beq :12\n cmp #mousetimer\n bcc :11\n bne :12\n:10 jsr mouserescue\n:11 inc exitopen\n:12\n]rts rts\n\n*-------------------------------\n*\n*  Screen flashes towards end of weightlessness period\n*\n*-------------------------------\nwtlessflash\n lda weightless\n beq ]rts\n ldx #0\n sec\n sbc #1\n sta weightless\n beq :3\n ldx #$ff\n cmp #wtlflash\n bcs :3\n lda vibes\n eor #$ff\n tax\n:3 stx vibes ;Screen flashes as weightlessness ends\n]rts rts\n\n*-------------------------------\n* yellow copy protection\n* (call right before 1st princess cut)\n* In: A = next level\n*-------------------------------\nyellowcheck\n cmp #2\n bne ]rts\n jsr showtext\n ldx #10\n jmp yellow ;in gamebg\n ;sets yellowflag ($7c) hibit\n\n*-------------------------------\n*\n*  Temp development patch for screen redraw\n*  (also used for invert Y)\n*\n*-------------------------------\ndevelpatch\n do 0\n lda blackflag ;blackout?\n beq :1\n lda #1\n sta genCLS\n fin\n\n:1 lda redrawflg ;forced redraw?\n beq ]rts\n dec redrawflg\n\n jsr markmeters\n jmp sure\n\n*-------------------------------\n lst\n ds 1\n usr $a9,4,$a00,*-org\n lst off\n"
  },
  {
    "path": "01 POP Source/Source/UNPACK.S",
    "content": "* unpack 3.5\nThreeFive = 1\norg = $ea00\n lst off\n*-------------------------------\n*\n*  Sits in main l.c. bank 2\n*\n*-------------------------------\n org org\n\n jmp SNGEXPAND\n jmp DBLEXPAND\n jmp DELTAEXPPOP\n jmp INVERTY\n jmp DELTAEXPWIPE\n\n jmp PURPLE\n jmp PROMPT\n jmp BLACKOUT\n jmp CLR\n jmp TEXT\n\n jmp SETDHIRES\n jmp FADEIN\n jmp LOADSUPER\n jmp FADEOUT\n\n*-------------------------------\n lst\n put gameeq\n lst\n put eq\n lst off\n\nIOUDISoff = $c07f\nIOUDISon = $c07e\nDHIRESoff = $c05f\nDHIRESon = $c05e\nHIRESon = $c057\nHIRESoff = $c056\nPAGE2on = $c055\nPAGE2off = $c054\nMIXEDon = $c053\nMIXEDoff = $c052\nTEXTon = $c051\nTEXToff = $c050\nALTCHARon = $c00f\nALTCHARoff = $c00e\nADCOLon = $c00d\nADCOLoff = $c00c\nALTZPon = $c009\nALTZPoff = $c008\nRAMWRTaux = $c005\nRAMWRTmain = $c004\nRAMRDaux = $c003\nRAMRDmain = $c002\nADSTOREon = $c001\nADSTOREoff = $c000\n\nRWBANK2 = $c083\nRWBANK1 = $c08b\n\n*-------------------------------\n* RW18 ID bytes\n\nPOPside1 = $a9\nPOPside2 = $ad\n\n* RW18 zero page vars\n\nslot = $fd\ntrack = $fe\nlastrack = $ff\n\n* RW18 commands\n\nDrvOn = $00\nDrvOff = $01\nSeek = $02\nRdSeqErr = $03\nRdGrpErr = $04\nWrtSeqErr = $05\nWrtGrpErr = $06\nModID = $07\nRdSeq = $83\nRdGrp = $84\nWrtSeq = $85\nWrtGrp = $86\nInc = $40 ;.Inc to inc track\n\n*-------------------------------\n*\n*  Unpack single hi-res screen into page 1\n*  (Sorry about the code--it's lifted directly from DRAZ)\n*\n*-------------------------------\n dum $00\n\nPAC ds 2\nPIC ds 2\nV2 ds 1\nV3 ds 1\nV4 ds 1\nV5 ds 1\nV8 ds 1\nV9 ds 1\nVA ds 1\nVB ds 1\nVC ds 1\n\n dend\n\n*-------------------------------\nSNGEXPAND\n sta RAMRDaux\n sta RAMWRTmain\n\n STA PAC+1 ;org addr\n\n LDA #$20\n STA PIC+1 ;dest addr\n\n LDA #0\n STA PAC\n STA PIC\n\n LDA #$FE\n STA V8\n LDA #0\n STA VA\n LDY #$27\n:4 LDA #$78\n STA V2\n LDA #$20\n STA V3\n:0 LDA V2\n SEC\n SBC #$28\n STA V2\n BCS :1\n DEC V3\n:1 LDA V2\n STA V4\n LDA V3\n CLC\n ADC #4\n STA V5\n:2 LDA V4\n SEC\n SBC #$80\n STA V4\n BCS :3\n DEC V5\n:3 LDA V4\n STA PIC\n LDA V5\n CLC\n ADC #$20\n STA PIC+1\n:5 LDA PIC+1\n SEC\n SBC #4\n STA PIC+1\n CLC\n BCC :6\n:13 LDA PIC+1\n CMP V5\n BNE :5\n LDA V4\n CMP V2\n BNE :2\n LDA V5\n CMP V3\n BNE :2\n LDA V2\n BNE :0\n DEY\n BPL :4\n RTS\n:6 BIT VA\n BMI :11\n LDX #0\n LDA (PAC,X)\n STA VB\n CMP V8\n BNE :10\n INC PAC\n BNE :7\n INC PAC+1\n:7 LDA (PAC,X)\n STA V9\n INC PAC\n BNE :8\n INC PAC+1\n:8 LDA (PAC,X)\n STA VB\n INC PAC\n BNE :9\n INC PAC+1\n:9 LDA #$80\n STA VA\n CLC\n BCC :11\n:10 LDA VB\n ORA #$80\n STA (PIC),Y\n INC PAC\n BNE :12\n INC PAC+1\n:12 CLC\n BCC :13\n:11 LDA VB\n ORA #$80\n STA (PIC),Y\n DEC V9\n BNE :13\n LDA #0\n STA VA\n BEQ :13\n\n*-------------------------------\n*\n*  Unpack crunched double hi-res screen\n*\n*  Robert A. Cook 3/89\n*\n*  In: A = hi byte of crunched data address\n*      RAMRD set to main/aux depending on where crunched\n*        data is stored\n*\n*-------------------------------\n\n dum $f0\n\nCrnDatPtr ds 2\nXClmPos ds 1\nYScrPos ds 1\nByteHld ds 1\nRepeatCdn ds 1\nScrBasPtr ds 2\n\n dend\n\n*-------------------------------\nDBLEXPAND\n sta CrnDatPtr+1\n\n lda #1\n sta CrnDatPtr\n;(CrnDatPtr),0 is crunch type (unused)\n jmp WipeRgtExp\n\n*-------------------------------\n*\n*  Wipe Right Expand\n*\n*-------------------------------\nWipeRgtExp\n lda #0\n sta XClmPos\n\n:Loop lda #0\n sta YScrPos\n jsr ExpandClm\n\n lda #1\n sta YScrPos\n jsr ExpandClm\n\n inc XClmPos\n\n lda XClmPos\n cmp #80\n bne :Loop\n\n]rts rts\n\n*-------------------------------\n*\n*  Delta Expand\n*\n*  In: A = hi byte of crunched data address (in auxmem)\n*\n*-------------------------------\nDeltaExp\n sta RAMRDaux\n\n sta CrnDatPtr+1\n\n lda #0\n sta CrnDatPtr\n\n sta XClmPos\n\n:Loop ldy #0\n lda (CrnDatPtr),y\n cmp #-1\n beq :Done\n\n sta ByteHld\n and #$80\n beq :ExpandOne\n\n lda ByteHld\n and #$7f\n beq :NewCoord\n\n tax\n\n ldy #1\n lda (CrnDatPtr),y\n jsr ExpClmSeq1\n\n clc\n lda CrnDatPtr\n adc #2\n sta CrnDatPtr\n bcc :a4\n inc CrnDatPtr+1\n:a4\n jmp :Next\n\n:NewCoord\n ldy #1\n lda (CrnDatPtr),y\n sta XClmPos\n\n ldy #2\n lda (CrnDatPtr),y\n sta YScrPos\n\n clc\n lda CrnDatPtr\n adc #3\n sta CrnDatPtr\n bcc :a7\n inc CrnDatPtr+1\n:a7\n jmp :Next\n\n:ExpandOne\n lda ByteHld\n ldx #1\n jsr ExpClmSeq1\n\n inc CrnDatPtr\n bne :sysi8\n inc CrnDatPtr+1\n:sysi8\n\n:Next lda XClmPos\n cmp #$80\n bne :Loop\n\n:Done sta RAMRDmain\n]rts rts\n\n*-------------------------------\n*\n*  Expand Column\n*\n*-------------------------------\nExpandClm\n\n:Loop ldy #0\n lda (CrnDatPtr),y\n sta ByteHld\n and #$80\n beq :ExpandOne\n\n ldy #1\n lda (CrnDatPtr),y\n tax\n lda ByteHld\n and #$7f\n jsr ExpClmSeq\n\n clc\n lda CrnDatPtr\n adc #2\n sta CrnDatPtr\n bcc :a4\n inc CrnDatPtr+1\n:a4\n jmp :Next\n\n:ExpandOne\n lda ByteHld\n ldx #1\n jsr ExpClmSeq\n\n inc CrnDatPtr\n bne :sysi5\n inc CrnDatPtr+1\n:sysi5\n\n:Next lda YScrPos\n cmp #192\n bcc :Loop\n\n rts\n\n*-------------------------------\n*\n*  Expand Column Sequence\n*\n*-------------------------------\n*\n*  In: XClmPos\n*      YScrPos\n*      A (byte pattern)\n*      X (repeat count)\n*\n*  Out: YScrPos (modified)\n*\n*-------------------------------\nExpClmSeq\n sta ByteHld\n stx RepeatCdn\n\n:Loop ldx XClmPos\n ldy YScrPos\n lda ByteHld\n jsr PutScrByte\n\n lda YScrPos\n clc\n adc #2\n sta YScrPos\n\n dec RepeatCdn\n bne :Loop\n\n rts\n\n*-------------------------------\n*\n* Expand Column Sequence 1\n*\n*-------------------------------\nExpClmSeq1\n sta ByteHld\n stx RepeatCdn\n\n:Loop ldx XClmPos\n ldy YScrPos\n lda ByteHld\n bmi :Next\n\n jsr PutScrByte\n\n:Next inc YScrPos\n\n lda YScrPos\n cmp #192\n bne :SkipXInc\n\n lda #0\n sta YScrPos\n\n inc XClmPos\n\n:SkipXInc\n dec RepeatCdn\n bne :Loop\n\n rts\n\n*-------------------------------\n*\n*  Put DHires Byte Value\n*\n*-------------------------------\n*\n*  In:  X (XClmPos)\n*       Y (YScrPos)\n*       A (Byte value)\n*\n*-------------------------------\nPutScrByte\n sta ByteHld\n ;YScrPos in Y\n lda YLO,y\n sta ScrBasPtr\n lda YHI,y\n ora #$20 ;DHires page 1\n sta ScrBasPtr+1\n\n txa ;XClmPos in X\n lsr\n tay\n bcs NoAuxSet\n\n sta RAMWRTaux\n\nNoAuxSet lda ByteHld\n sta (ScrBasPtr),y\n\n sta RAMWRTmain\n\n]rts rts\n\n*-------------------------------\n*\n* P U R P L E\n*\n*-------------------------------\n do ThreeFive\nPURPLE rts\n\n else\n put purple\n fin\n\n*-------------------------------\n*\n*  Delta Expand (Pop or Wipe)\n*\n*  In: A = hi byte of crunched data address (in auxmem)\n*\n*-------------------------------\nDELTAEXPPOP\n sta PAGE2on\n]DE jsr DeltaExp\n sta PAGE2off\n sta RAMRDaux\n sta RAMWRTaux\n]rts rts\n\nDELTAEXPWIPE\n sta PAGE2off\n jmp ]DE\n\n*-------------------------------\n*\n* Invert Y-tables\n*\n*-------------------------------\nINVERTY\n ldx #191 ;low line\n ldy #0 ;high line\n\n* Switch low & high lines\n\n:loop lda YLO,x\n pha\n lda YLO,y\n sta YLO,x\n pla\n sta YLO,y\n\n lda YHI,x\n pha\n lda YHI,y\n sta YHI,x\n pla\n sta YHI,y\n\n* Move 1 line closer to ctr\n\n dex\n iny\n cpy #96\n bcc :loop\n]rts rts\n\n*-------------------------------\n*\n* Prompt user to insert correct disk side\n*\n*-------------------------------\n do ThreeFive\nmsg1 asc \"    Insert Prince of Persia Disk@\"\n else\nmsg1 asc \"Insert Prince of Persia Disk, Side \"\n fin\n\nmsg2 asc \"C@\"\n\n*-------------------------------\nPROMPT\n lda #\"A\"\n ldx BBundID\n cpx #POPside1\n beq :1\n lda #\"B\"\n:1 sta msg2 ;side A or B?\n\n jsr blackout\n\n sta RAMWRTmain\n\n ldx #0\n:loop lda msg1,x\n cmp #\"@\"\n beq :done\n sta $528+2,x ;midscrn\n inx\n bpl :loop\n\n:done sta RAMWRTaux\n jsr whoop ;whoop spkr\n\n:wloop lda $c000\n ora $c061\n ora $c062\n bpl :wloop\n sta $c010\n\n jmp clr ;clear screen\n\n*-------------------------------\nCLR bit RWBANK2\n bit RWBANK2\n\n sta $c010\n\n lda #\" \"\n jmp _lrcls ;in hires\n\n*-------------------------------\n*\n* Show black screen (text page 1)\n*\n*-------------------------------\nBLACKOUT\n jsr CLR\n\nTEXT sta RAMRDaux\n jsr vblank\n sta TEXTon\n sta ADCOLoff\n sta PAGE2off\n]rts rts\n\n*-------------------------------\n* Set dbl hires\n*-------------------------------\nSETDHIRES\n sta RAMRDaux\n sta RAMWRTaux\n jsr vblank\n sta ADCOLon\n bit HIRESon\n\n bit DHIRESon\n bit DHIRESoff\n bit DHIRESon\n bit DHIRESoff\n bit DHIRESon ;for old Apple RGB card\n\n sta TEXToff\n rts\n\n**************************************************\n**************************************************\n**************************************************\n xc\n xc\n\nstlx mac bank;addr\n hex 9f\n da ]2\n db ]1\n <<<\nldlx mac bank;addr\n hex bf\n da ]2\n db ]1\n <<<\n\n*-------------------------------\n*\n* FADE IN\n*\n* In: s-hires data in $2000.9FFF\n*     A = 0 main, 1 aux\n*\n*-------------------------------\nFADEIN\n sta RAMRDmain\n sta :sm1+2\n sta :sm2+2\n\n clc\n xce\n\n sep $30 ;axy\n\n lda #%00011110\n sta $C035 ;shadow reg\n lda #$41\n sta $C029 ;SH reg\n\n rep $30 ;AXY\n\n* Clear scan line control byte table\n* and palette 0 to black\n\n lda #$0000\n ldx #$011E\n:scbclr dex\n dex\n stlx $E1;$9D00\n bne :scbclr\n\n* Now move data over\n\n ldx #$2000\n ldy #$2000\n lda #32000-1\n phb\n:sm1 mvn $E1,1 ;main/aux\n plb\n\n* Turn on Super Hires mode\n\n sep $20\n lda #$C1\n sta $C029\n rep $20\n\n* Move desired palette over to PalFade area\n\n ldx #$9D00 ;aux mem\n ldy #new_palette\n lda #32-1\n phb\n:sm2 mvn 0,1 ;aux to main/aux\n plb\n\n* Now fade in the picture\n\n bra PalFade ;switches back to e-mode\n\n*-------------------------------\n*\n* FADE OUT\n*\n*-------------------------------\nFADEOUT\n mx 3\n\n* Clear the \"destination\" palette back to zero\n\n ldx #31\n lda #$00\n:palclr sta new_palette,x\n dex\n bpl :palclr\n\n* Now fade out\n\n bra PalFade ;switches back to e-mode\n\n*------------------------------------------------- PalFade\n*\n* Given current palette at $E19E00.1F, fade to\n* new palette given in new_palette\n*\n\nnew_palette ds 32\n\nPalFade dum 0\n:green ds 1\n:blue ds 1\n dend\n\n sec\n xce\n\n bit $C019\n bmi *-3\n\n ldy #16\n\n:fadein ldx #3\n\n:fadein2 bit $C019\n bpl *-3\n\n bit $C019\n bmi *-3\n\n dex\n bne :fadein2\n\n ldx #30\n:palloop ldlx $E1;$9E01\n and #$0f\n cmp new_palette+1,x\n beq :red_ok\n inc\n blt :red_ok\n dec\n dec\n\n:red_ok stlx $E1;$9E01\n\n lda new_palette,x\n and #$F0\n sta :green\n\n ldlx $E1;$9E00\n and #$F0\n cmp :green\n beq :green_ok\n blt :grn_add\n sbc #$20\n:grn_add clc\n adc #$10\n\n:green_ok sta :green\n\n lda new_palette,x\n and #$0F\n sta :blue\n\n ldlx $E1;$9E00\n and #$0F\n cmp :blue\n beq :blue_ok\n inc\n blt :blue_ok\n dec\n dec\n\n:blue_ok ora :green\n stlx $E1;$9E00\n\n dex\n dex\n bpl :palloop\n\n dey\n bpl :fadein\n\n rts\n\n xc off\n mx 3\n\n*===============================\n*\n* Load super hi-res data\n*\n*-------------------------------\nLOADSUPER\n jsr rw18\n db ModID,$79 ;set \"side C\"\n\n lda #0\n sta track\n sta RAMWRTmain\n jsr loadscrn ;\"Tracks\" 0-6: palace (mainmem)\n\n sta RAMWRTaux\n jmp loadscrn ;\"Tracks\" 7-13: epilog (auxmem)\n\n*-------------------------------\n*\n* Load super hi-res screen into $2000.9FFF\n*\n*-------------------------------\nloadscrn\n lda #$20\n:loop sta :sm\n jsr rw18\n db RdSeq.Inc\n:sm db $20\n lda :sm\n clc\n adc #$12\n cmp #$9e\n bcc :loop ;load 7 tracks\n]rts rts\n\n*-------------------------------\n lst\neof ds 1\n usr $a9,2,$a00,*-org\n lst off\n"
  },
  {
    "path": "01 POP Source/Source/VERSION.S",
    "content": "* version\norg = $dfd8\n lst off\n\n org org\n\n*-------------------------------\n\nTextLine asc \"Prince of Persia 1.0  9/7/89\"\n lst\n asc \"@\"\n*-------------------------------\n usr $a9,19,$11d8,*-org\n lst off\n"
  },
  {
    "path": "02 POP Disk Routines/CP.525/CUBE.S",
    "content": " lst off\n\n*------------------------------------------------- rotcube\n\nmainYoffset = 46 ;(192-60)/2\nbotYoffset = 72\nmainXoffset = 68 ;(280-144)/2\n\ncolor = $E4\npage = $E6\n\n dum 0\nindex ds 1\nysave ds 1\nyadd ds 1\nyoffset ds 1\n dend\n\n*-------------------------------------------------\n\nrotcube jsr $f3e2 ;hgr\n jsr $f3d8 ;hgr2\n\n lda #1\n sta yadd\n\n sta yoffset\n\n* Draw on page not showing:\n\nmainloop lda page\n eor #$60\n sta page\n ldx #$7F\n jsr draw\n\n* If not a //c, then wait for vbl\n\n lda $FBC0\n beq :is2c\n lda $C019\n bpl *-3\n lda $C019\n bmi *-3\n:is2c\n\n* Now display that page\n\n bit $C054\n lda page\n cmp #$20\n beq *+5\n bit $C055\n\n* Now erase old image from last page\n\n eor #$60\n sta :smc0+2\n sta :smc1+2\n ldx #$20\n lda #0\n:loop tay\n:smc0 sta $2000,y\n:smc1 sta $2080,y\n iny\n bpl :smc0\n inc :smc0+2\n inc :smc1+2\n dex\n bne :loop\n\n inc index\n jmp mainloop\n\n*-------------------------------------------------\n\ndraw stx color\n\n ldy #12-1\n:drawloop lda drawlist,y\n sty ysave\n\n pha\n and #15\n jsr getpoint\n\n tax\n tya\n ldy #0\n jsr $f457 ;plot\n\n pla\n lsr\n lsr\n lsr\n lsr\n jsr getpoint\n ldx #0\n jsr $f53a ;lineto\n\n ldy ysave\n dey\n bpl :drawloop\n\n lda yoffset\n clc\n adc yadd\n bne :not0\n\n inc yadd ;make +1\n inc yadd\n\n:not0 cmp #191-48-botYoffset\n bcc :0\n\n dec yadd ;make -1\n dec yadd\n\n:0 sta yoffset\n rts\n\n*-------------------------------------------------\n*\n* given a = point number, return a = xcoor, y = ycoor\n*\n\ngetpoint tay\n\n* Get index into tables\n\n asl ;*16\n asl\n asl\n asl\n adc index\n and #$3F\n tax\n tya\n\n and #4 ;bottom?\n cmp #4\n\n* Compute ycoor\n\n lda ydata,x\n bcc :not_bot\n adc #botYoffset-1\n\n:not_bot adc yoffset\n tay\n\n* Compute xcoor\n\n lda xdata,x\n adc #mainXoffset\n rts\n\n*-------------------------------------------------\n\ndrawlist hex 01122330 ;draw top\n hex 45566774 ;draw bottom\n hex 04152637 ;draw connecting lines\n\nxdata hex 908F8E8C8A87837F7A757069635C564F\n hex 484039332C261F1A15100C0805030100\n hex 0000010305080C10151A1F262C333940\n hex 474F565C636970757A7F83878A8C8E8F\n\nydata hex 181A1C1E21232527282A2B2D2E2E2F2F\n hex 2F2F2F2E2E2D2B2A28272523211E1C1A\n hex 181513110E0C0A080705040201010000\n hex 000000010102040507080A0C0E111315\n\n*-------------------------------------------------\n"
  },
  {
    "path": "02 POP Disk Routines/CP.525/LOSHOW.S",
    "content": " lst off\n\n org $c00\n\n*-------------------------------------------------\n\n dum 0\ncurpage ds 1\nxsave ds 1\nysave ds 1\nasave ds 1\ntemp ds 1\ntmplo ds 1\ntmphi ds 1\nlevel ds 1\nisGS? ds 1\n dend\n\nframebase = $1000\n\n*------------------------------------------------- show\n*\n* put on the show!\n*\n\nshow bit $C010\n\n lda #0\n sta isGS?\n\n bit $C081\n sec\n jsr $fe1f ;GS?\n bcs :notGS\n\n inc isGS?\n\n* Use special show frame routine for //GS that\n* writes directly to bank $E0, since page two\n* text is not properly shadowed to that bank.\n\n ldx #$4C ;jmp\n ldy #GSshowframe\n lda #>GSshowframe\n stx showframe\n sty showframe+1\n sta showframe+2\n\n* Make our lookup tables up in ramcard area\n\n:notGS bit $C083\n bit $C083\n\n jsr MAKEfade_tbls\n\n jsr lgr\n\n:again\n\n ldx #0\n:fadein stx level\n lda #0\n jsr showframe\n ldx level\n inx\n cpx #15\n bcc :fadein\n\n* Here we go...\n\n lda #0\n:floop pha\n ldx #15\n jsr showframe\n pla\n clc\n adc #1\n cmp #23\n bcc :floop\n\n ldx #15\n:fadeout stx level\n lda #22\n jsr showframe\n ldx level\n dex\n bpl :fadeout\n\n bit $C000\n bpl *-3\n bit $C010\n\n jmp :again\n\n*------------------------------------------------- lgr\n*\n* Clear and display lo-resolution screen\n*\n\nlgr sta $C000 ;turn off 55.54 select\n sta $C00C ;40 columns\n bit $C052 ;full screen\n bit $C055 ;show page two\n bit $C056 ;lores\n bit $C050 ;graphics on\n\n lda #4 ;use page one next\n sta curpage\n\n ldy #0\n sty tmplo\n sta tmphi\n\n tya\n ldx #8\n\n:0 sta (tmplo),y\n iny\n bne :0\n\n inc tmphi\n dex\n bne :0\n\n rts\n\n*------------------------------------------------- loget\n*\n* Enter with a:frame number\n*            x:fade level\n*\n\nshowframe asl\n asl\n adc #>framebase\n sta :src+2 ;hi byte\n\n txa\n ora #>fade_table\n sta :fademod+2\n\n lda curpage\n sta :dst+2\n eor #4!8\n sta curpage\n\n lda #4\n sta temp\n\n ldx #0\n:loop\n:src ldy $1100,x\n:fademod lda fade_table+$F00,y\n:dst sta $0400,x\n inx\n bne :loop\n\n inc :src+2 ;hibyte\n inc :dst+2 ; \"  \"\n\n dec temp\n bne :loop\n\n]waitvbl jsr waitvbl\n\n bit $C055\n lda curpage\n cmp #4\n beq *+5\n bit $C054\n\n rts\n\nGSshowframe asl\n asl\n adc #>framebase\n sta :src+2 ;hi byte\n\n txa\n ora #>fade_table\n sta :fademod+2\n\n lda curpage\n sta :dst+2\n eor #4!8\n sta curpage\n\n lda #4\n sta temp\n\n ldx #0\n:loop\n:src ldy $1100,x\n:fademod lda fade_table+$F00,y\n:dst stal $E00400,x\n inx\n bne :loop\n\n inc :src+2 ;hibyte\n inc :dst+2 ; \"  \"\n\n dec temp\n bne :loop\n beq ]waitvbl\n\n*------------------------------------------------- waitvbl\n*\n* Wait for a few vbl's to go by!\n*\n\nwaitvbl ldx #6\n:0 bit $C019\n bpl :0\n:1 bit $C019\n bmi :1\n dex\n bne :0\n rts\n\n*------------------------------------------------- MAKEfade_tbls\n*\n* Make 16 lookup tables each containing 256 bytes\n* for the 16 levels of fade-in.\n*\n\nMAKEfade_tbls dum 0\n:curtmp ds 2 ;ptr into current tmp_scale table\n:curfade ds 2 ;ptr into current page of fade table\n:temp ds 1\n:ysave ds 1\n dend\n\n jsr MAKEtmp_scale\n\n ldy #tmp_scale\n lda #>tmp_scale\n sty :curtmp\n sta :curtmp+1\n\n ldy #fade_table\n lda #>fade_table\n sty :curfade\n sta :curfade+1\n\n* byte loop\n\n ldy #0\n\n:bloop tya\n and #$0F\n jsr :convert\n sta :temp\n\n tya\n lsr\n lsr\n lsr\n lsr\n jsr :convert\n asl\n asl\n asl\n asl\n ora :temp\n\n sta (:curfade),y\n\n iny\n bne :bloop\n\n* next fade table\n\n inc :curfade+1\n\n* next tmp table\n\n clc\n lda :curtmp\n adc #16\n sta :curtmp\n bcc :bloop\n\n rts\n\n* given a=0-15, in lores unsequential grey scale,\n* convert it back to sequential, lookup new value\n* in tmp_scale table and then convert back to\n* lores unsequential.\n\n:convert sty :ysave\n\n* Convert lores color back to sequential 00-0F\n\n tax\n lda :unlores,x\n\n* Scale it\n\n tay\n lda (:curtmp),y\n\n* Convert back to unsequential lores color\n\n tax\n lda isGS?\n beq :notGS\n lda :loresGS,x\n bra :isGS\n\n:notGS lda :lores2e,x\n\n:isGS ldy :ysave\n rts\n\n:unlores hex 000301070405020a\n hex 06080b0c090e0d0f\n\n:loresGS hex 0002060104050803\n hex 090c070a0b0e0d0f\n\n:lores2e hex 00000000\n hex 02020202\n hex 06060606\n hex 07070707\n\n*------------------------------------------------- MAKEtmp_scale\n*\n* Make lookup table that contains values\n* for 0-15 multiplied by 1/16...  16/16.\n*\n\nMAKEtmp_scale dum 0\n:color ds 1\n:scale ds 1\n dend\n\n lda #1 ;start with 1/16th\n sta :scale\n\n:sloop ldy #0\n:cloop sty :color\n lda #0\n ldx :scale\n:mloop clc\n adc :color\n dex\n bne :mloop\n lsr\n lsr\n lsr\n lsr\n:smc sta tmp_scale,y\n iny\n cpy #16\n bne :cloop\n inc :scale\n lda :smc+1\n clc\n adc #16\n sta :smc+1\n bcc :sloop\n rts\n\n*-------------------------------------------------\n\n dum $D000\nfade_table ds $1000\ntmp_scale ds $100\n dend\n\n*------------------------------------------------- EOF\n"
  },
  {
    "path": "02 POP Disk Routines/CP.525/POPBOOT0.S",
    "content": "* boot\norg = $800\n lst off\n xc off\n\nREDFLAG79 = $23B ; in aux mem!\n\n*-------------------------------\n* $800 TS (0,0) boot sector\n\nSLOT = $2b\nsector = $50\n\ntext = $fb2f\nhome = $fc58\nvtab = $FB5B\ncout = $FDF0\nnormal = $fe84\npr0 = $fe93\nin0 = $fe89\n\n*-------------------------------\n\nsmclo = $4E\nsmchi = $4F\n\nrw18 = $d000\n\nslot = $fd\ntrack = $fe\nlastrack = $ff\n\n dum $00\n\ndest ds 2\nsource ds 2\nendsourc ds 2\n\n dend\n\n*-------------------------------------------------\n\n org org\n\n hex 01\n\nentry lda #$60\n sta entry\n\n lda #MAKEBIT\n sta smclo\n\n ldx #$ff\n stx $4fb\n stx $3f3\n stx $3f4\n stx $7831\n stx $c000 ;80store off\n stx $c002 ;RAMRD main\n stx $9fd8\n stx $c004 ;RAMWRT main\n stx $c00c ;80col off\n stx $c00e ;Altcharset off\n stx $c081 ;write RAM, read ROM (2nd 4k bank)\n txs\n jsr text\n jsr home\n jsr normal\n jsr pr0\n sta $DF35\n jsr in0\n stx $8492\n\n ldx SLOT\n txa\n lsr\n lsr\n lsr\n lsr\n ora #$c0\n sta :rdsect+2\n lda #$0f\n sta sector\n\n:0 ldy sector\n lda skewtbl,y\n sta $3d\n lda sectaddr,y\n beq :1\n sta $27\n\n inc $9fd8\n\n:rdsect jsr $005c\n:1 dec sector\n bne :0\n\n beq decode\n\nskewtbl hex 00,0d,0b,09,07,05,03,01\n hex 0e,0c,0a,08,06,04,02,0f\n\nsectaddr hex 00,09,0a,0b,00,0c,0d,0e\n hex 30,31,32,33,34,10,11,2f\n\ndecode ldx #14\n:loop lda sectaddr,x\n beq :nope\n\n sta :smc0+2\n sta :smc1+2\n\n ldy #0\n:loop1\n:smc0 lda $FF00,y\n eor $2F00,y\n:smc1 sta $FF00,y\n eor $7831 ;bogus garbage\n sta $7831 ; \" \"   \"   \"\n sta $3C\n iny\n bne :loop1\n\n:nope dex\n bpl :loop\n\n ldx SLOT\n\nstage2 stx slot\n\n jsr check128k ;check for 128K memory\n\n jsr moverw18 ;& move RW18 to D000\n\n lda #0\n sta lastrack\n\n jsr rw18\n hex 07,a9 ;Bbund ID byte\n\n jsr rw18\n hex 00,01,00 ;drive 1 on\n\n jsr rw18 ;seek track 1\n hex 02,00,01\n\n* load & run stage 3 boot\n* from drive 1\n\n jsr rw18\n hex c3,ee\n\n jmp $ee00\n\n*-------------------------------------------------\n* Check for AUX memory routine\n\nCHECKER lda #$EE\n sta $C005\n lda #>MAKEBIT\n sta smchi\n sta $C003\n sta $0800\n lda $0C00\n cmp #$EE\n bne :0\n asl $0C00\n lda $0800\n cmp $0C00\n beq :1\n:0 clc\n:1 sta $C004\n sta $C002\n rts\n\nCHECKEND = *-CHECKER\n\n*-------------------------------------------------\n*\n* Check to make sure //c or //e\n* with 128k\n*\n*-------------------------------\n\n hex 34\n hex 55\n hex 99\n\ncheck128k\n sta $c081\n\n lda $FBB3 ;Apple // family ID byte\n cmp #6\n bne NOT128K ;Must be e/c/GS\n\n bit $C017\n bmi NOT128K\n\n ldx #CHECKEND\n:0 lda CHECKER,X\n sta $180,X\n dex\n bpl :0\n\n jsr $180\n bcs NOT128K\n\n rts\n\n*-------------------------------\n* Turn off drive and display message\n\nNOT128K ldx SLOT\n lda $C088,X\n\n jsr text\n jsr home\n lda #8\n jsr vtab\n\n ldy #0\n:0 lda MEMTEXT,Y\n beq *\n jsr cout\n cmp #$8D\n bne :1\n lda #4\n sta $24\n:1 iny\n bne :0\n\nMEMTEXT hex 8D\n asc \"REQUIRES A //C OR //E WITH 128K\"\n hex 00\n\n*-------------------------------\n* Move RW18\n* d0 < 30.40\n*-------------------------------\nmoverw18\n bit $c08b\n bit $c08b ;rd/wrt RAM, 1st 4k bank\n\n lda #$d0\n ldx #$30\n ldy #$40\n\n* a < x.y\n* 20 < 40.60 means 2000 < 4000.5fffm\n* WARNING: If x >= y, routine will wipe out 64k\n\nmovemem sta dest+1\n stx source+1\n sty endsourc+1\n\n ldy #0\n lda #$24\n sta (smclo),y\n sty dest\n sty source\n sty endsourc\n\n:loop lda (source),y\n sta (dest),y\n\n iny\n bne :loop\n\n inc source+1\n inc dest+1\n\n lda source+1\n cmp endsourc+1\n bne :loop\n\nMAKEBIT rts\n hex FF\n\n*-------------------------------------------------\n*\n* HLS APPLE COPY PROTECTION\n* COPYRIGHT (C) 1987 HLS DUPLICATION\n*\n* CONTACT ROBERT FREEDMAN 408-773-1300\n* IF THERE ARE QUESTIONS ABOUT USE OF\n* THIS CODE\n*\n* EXIT clc IF A O K\n* sec IF PIRATE\n*\n*-------------------------------------------------\n\nOBJSCT = $07 ;PHYSICAL SECTOR #\n\n* ZERO PAGE\n*  IF THIS CONFLICTS WITH YOUR CODE\n*  CHANGE THE FOLLOWING ZERO PAGE\n*  LOCATIONS, OR USE THE SAVE ZERO\n*  PAGE ROUTINE\n\nHDRC = $F0\nHDRS = HDRC+1\nHDRT = HDRC+2\nHDRV = HDRC+3 HEADER SECTOR\nLSRETRY = HDRC+4 ;NIB READ RETRIES\nPRETRY = HDRC+5 ;OBJSCT RETRIES\nNPTR = HDRC+6\nNPTRH = HDRC+7\nMEM1 = HDRC+8\nMEM2 = HDRC+9\n\n*-------------------------------------------------\n\nCheckCP\n lda #10\n sta LSRETRY\n lda #>REDFLAG79\n sta smchi\n ldx SLOT\n lda $C089,X\n lda $C08E,X\n lda #:NIBS ; !!!!! LOW BYTE\n sta NPTR\n lda #>:NIBS ; !!!!! HIGH BYTE\n sta NPTRH\n:AGAIN lda #$80\n sta PRETRY\n:M1 dec PRETRY\n beq :LSFAIL\n jsr RADR16\n bcs :LSFAIL\n lda HDRS\n cmp #OBJSCT\n bne :M1\n\n ldy #0\n:M2 lda $C08C,X\n bpl :M2\n dey\n beq :LSFAIL\n cmp #$D5\n bne :M2\n ldy #0\n\n:M3 lda $C08C,X\n bpl :M3\n dey\n beq :LSFAIL\n cmp #$E7\n bne :M3\n\n:M4 lda $C08C,X\n bpl :M4\n cmp #$E7\n bne :LSFAIL\n\n:M5 lda $C08C,X\n bpl :M5\n cmp #$E7\n bne :LSFAIL\n\n lda $C08D,X\n ldy #$10\n bit $6 ;3 US. ( FOR //C)\n:M6 lda $C08C,X\n bpl :M6\n dey\n beq :LSFAIL\n cmp #$EE\n bne :M6\n\n* NOW AT 1/2 NIBBLES\n*\n* INSTEAD OF COMPARING AGAINST A TABLE\n* THE DATA READ FROM THE DISK CAN BE\n* USED IN YOUR PROGRAM.  BE CAREFUL\n* WHEN MODIFYING THIS PART OF THE CODE.\n* KEEP THE CYCLE COUNTS CONSTANT.\n\n ldy #7\n:M7 lda $C08C,X ; READ DISK DATA\n bpl :M7\n cmp (NPTR),Y ; COMPARE AGAINST TABLE\n bne :LSFAIL1\n dey\n bpl :M7\n bmi :GOOD\n\n:LSFAIL jmp :LSFAIL1\n\n* A O K\n\n:GOOD eor #$79!$FC\n iny\n ldx #6\n dex\n sta $C000,x\n sta (smclo),y\n dex\n sta $C000,x\n eor #$ED\n sta $239\n eor #$23\n sta $4E\n\n jmp yippee\n\n* FAILED, try again\n\n:LSFAIL1 ldy #-1\n tya\n dec LSRETRY\n beq :GOOD\n jmp :AGAIN\n\n:NIBS db $FC,$EE,$EE,$FC\n db $E7,$EE,$FC,$E7\n\n*-------------------------------------------------\n*\n* Read address mark\n*\n\nRADR16 ldy #$FD ;READ ADR HDR\n sty MEM1\n tya\n eor #REDFLAG79!$FD\n sta smclo\n:RA1 iny\n bne :RA2\n inc MEM1\n beq :RAEXIT\n:RA2 lda $C08C,X\n bpl :RA2\n:RA3 cmp #$D5\n bne :RA1\n nop\n:RA4 lda $C08C,X\n bpl :RA4\n cmp #$AA\n bne :RA3\n ldy #3\n:RA5 lda $C08C,X\n bpl :RA5\n cmp #$96\n bne :RA3\n lda #0\n:RA6 sta MEM2\n:RA7 lda $C08C,X\n bpl :RA7\n rol\n sta MEM1\n:RA8 lda $C08C,X\n bpl :RA8\n and MEM1\n sta HDRC,Y\n eor MEM2\n dey\n bpl :RA6\n tay\n nop\n clc\n rts\n\n:RAEXIT sec\n]rts rts\n\noscsh sec\n jsr $FE1F\n bcs *\n\n jsr $1000\n\n jmp ($FFFC)\n\n*-------------------------------------------------\n\nyippee ldx SLOT\n lda $C061\n bpl ]rts\n lda $C062\n bpl ]rts\n lda $C000\n bpl ]rts\n bit $C010\n sta :cmp+1\n\n ldy #-3\n:loop iny\n iny\n iny\n lda :dispatch,y\n beq ]rts\n:cmp cmp #$11\n bne :loop\n\n lda :dispatch+1,y\n sta 0\n lda :dispatch+2,y\n sta 1\n\n bit $C081\n lda $C088,x\n\n jmp (0)\n\n:dispatch hex FF\n da oscsh\n\n asc \"!\"\n da rcmess\n\n hex 8D\n da confusion\n\n asc \"@\"\n da rotcube\n\n asc \"^\"\n da drive\n\n db 0\n\n*-------------------------------------------------\n*\n* motorcycle disk drive\n*\n\ndrive lda $C089,x ;drive back on!\n\n:loop lda $C087,x\n lda $C080,x\n jsr :delay\n lda $C085,x\n lda $C086,x\n jsr :delay\n lda $C083,x\n lda $C084,x\n jsr :delay\n lda $C081,x\n lda $C082,x\n jsr :delay\n jmp :loop\n\n:delay lda #6\n sta 0\n\n:del2 bit $C070\n nop\n nop\n bit $C064\n bmi *-3\n\n dec 0\n bne :del2\n rts\n\n*------------------------------------------------- rotcube\n\nmainYoffset = 46 ;(192-60)/2\nbotYoffset = 72\nmainXoffset = 68 ;(280-144)/2\n\ncolor = $E4\npage = $E6\n\n dum 0\nindex ds 1\nysave ds 1\nyadd ds 1\nyoffset ds 1\n dend\n\n*-------------------------------------------------\n\nrotcube jsr $f3e2 ;hgr\n jsr $f3d8 ;hgr2\n\n lda #1\n sta yadd\n\n sta yoffset\n\n* Draw on page not showing:\n\nmainloop lda page\n eor #$60\n sta page\n ldx #$7F\n jsr draw\n\n* If not a //c, then wait for vbl\n\n lda $FBC0\n beq :is2c\n lda $C019\n bpl *-3\n lda $C019\n bmi *-3\n:is2c\n\n* Now display that page\n\n bit $C054\n lda page\n cmp #$20\n beq *+5\n bit $C055\n\n* Now erase old image from last page\n\n eor #$60\n sta :smc0+2\n sta :smc1+2\n ldx #$20\n lda #0\n:loop tay\n:smc0 sta $2000,y\n:smc1 sta $2080,y\n iny\n bpl :smc0\n inc :smc0+2\n inc :smc1+2\n dex\n bne :loop\n\n inc index\n jmp mainloop\n\n*-------------------------------------------------\n\ndraw stx color\n\n ldy #12-1\n:drawloop lda drawlist,y\n sty ysave\n\n pha\n and #15\n jsr getpoint\n\n tax\n tya\n ldy #0\n jsr $f457 ;plot\n\n pla\n lsr\n lsr\n lsr\n lsr\n jsr getpoint\n ldx #0\n jsr $f53a ;lineto\n\n ldy ysave\n dey\n bpl :drawloop\n\n lda yoffset\n clc\n adc yadd\n bne :not0\n\n inc yadd ;make +1\n inc yadd\n\n:not0 cmp #191-48-botYoffset\n bcc :0\n\n dec yadd ;make -1\n dec yadd\n\n:0 sta yoffset\n rts\n\n*-------------------------------------------------\n*\n* given a = point number, return a = xcoor, y = ycoor\n*\n\ngetpoint tay\n\n* Get index into tables\n\n asl ;*16\n asl\n asl\n asl\n adc index\n and #$3F\n tax\n tya\n\n and #4 ;bottom?\n cmp #4\n\n* Compute ycoor\n\n lda ydata,x\n bcc :not_bot\n adc #botYoffset-1\n\n:not_bot adc yoffset\n tay\n\n* Compute xcoor\n\n lda xdata,x\n adc #mainXoffset\n rts\n\n*-------------------------------------------------\n\ndrawlist hex 01122330 ;draw top\n hex 45566774 ;draw bottom\n hex 04152637 ;draw connecting lines\n\nxdata hex 908F8E8C8A87837F7A757069635C564F\n hex 484039332C261F1A15100C0805030100\n hex 0000010305080C10151A1F262C333940\n hex 474F565C636970757A7F83878A8C8E8F\n\nydata hex 181A1C1E21232527282A2B2D2E2E2F2F\n hex 2F2F2F2E2E2D2B2A28272523211E1C1A\n hex 181513110E0C0A080705040201010000\n hex 000000010102040507080A0C0E111315\n\n*------------------------------------------------- confusion\n\n dum 0\nxr ds 1\nyr ds 1\nrandseed ds 1\ntemp ds 1\n dend\n\nhgr2 = $F3D8\nplot = $F457\nhcolor = $F6F0\n\n* Confusion triangle\n\nconfusion lda #$7F\n sta $E4 ;hcolor=3\n\n jsr hgr2\n\n* xr=xarray(0), yr=yarray(0)\n\n ldx xarray\n ldy yarray\n stx xr\n sty yr\n\n* Plot that dot\n\n:loop lda $C000\n bpl :nokey\n bit $C010\n cmp #$E0\n bcc *+4\n and #$DF\n cmp #\"C\"\n bne :nokey\n\n:randcol jsr getrandcol\n sta temp\n jsr $F3F4 ;clear to that color\n\n:randloop jsr getrandcol\n tax\n eor temp\n bmi :randloop ;different hi bits\n cpx temp ;same color\n beq :randloop\n\n:nokey ldy #0\n lda xr\n asl\n tax\n bcc :skip\n iny\n:skip lda yr\n jsr plot\n\n lda yr\n ldx $E0\n ldy $E1\n inx\n bne *+3\n iny\n jsr plot\n\n* Get a random number between 0-2\n\n jsr random\n sec\n:sub30 sbc #30\n bcs :sub30\n adc #30\n sec\n:sub3 sbc #3\n bcs :sub3\n adc #3\n tax\n\n*-----------\n* xr stuff:\n* determine which midpoint routine to use\n\n lda xarray,x\n cmp xr\n bge :xarr_xr\n\n* If xarray(rand) < xr then:\n* xr = xarray + ( xr - xarray) / 2\n\n lda xr\n sec\n sbc xarray,x\n lsr\n clc\n adc xarray,x\n jmp :sta_xr\n\n* If xarray(rand) >= xr then:\n* xr = xr + ( xarray - xr ) / 2\n\n:xarr_xr lda xarray,x\n sec\n sbc xr\n lsr\n clc\n adc xr\n:sta_xr sta xr\n\n*-----------\n* yr stuff:\n* determine which midpoint routine to use\n\n lda yarray,x\n cmp yr\n bge :yarr_yr\n\n* If yarray(rand) < yr then:\n* yr = yarray + ( yr - yarray) / 2\n\n lda yr\n sec\n sbc yarray,x\n lsr\n clc\n adc yarray,x\n jmp :sta_yr\n\n* If yarray(rand) >= yr then:\n* yr = yr + ( yarray - yr ) / 2\n\n:yarr_yr lda yarray,x\n sec\n sbc yr\n lsr\n clc\n adc yr\n:sta_yr sta yr\n\n jmp :loop\n\nxarray db 70,139,0\nyarray db 0,191,191\n\nrandom lda randseed\n adc #$23\n sta randseed\n eor $C020 ;a little randomness\n rts\n\ngetrandcol jsr random\n and #7\n tax\n jmp hcolor\n\n*------------------------------------------------- rcmess\n\nrcmess ldy #0\n:0 lda :text,y\n beq :lores\n jsr $FDF0\n iny\n bne :0\n\n:lores bit $c000\n bpl :lores\n\n sta $c00d ;80 col\n sta $c001 ;80 store\n bit $c056\n bit $c052\n bit $c050\n bit $c05e ;merez\n\n:loop lda #$FF\n jsr :random\n sta $30 ;color\n\n lda #80 ;max x\n jsr :random\n lsr\n tay\n bit $c054\n bcs *+5\n bit $c055\n\n lda #48 ;max y\n jsr :random\n\n jsr $F800 ;plot\n\n jmp :loop\n\n:random sta 1\n\n lda 0\n adc #$23\n sta 0\n eor $C020\n\n cmp 1\n bcc :ok\n:loop2 sbc 1\n bcs :loop2\n adc 1\n\n:ok rts\n\n:text hex 8d8d\n asc \"8/25/89\",8d8d8d\n asc \"Robert!\",8d8d8d\n asc \"Jordan and Roland wish you the very\",8d8d\n asc \"Brightest College Years.\",8d8d8d8d8d\n asc \"  meres !\",8d,8d\n asc \"    meres !\",8d,8d\n asc \"      meres !\"\n brk\n\n*------------------------------------------------- EOF\n\n lst on\n da *\n lst off\n"
  },
  {
    "path": "02 POP Disk Routines/CP.525/PURPLE.MAIN.S",
    "content": "* purple.main\n\n lst off\n\n* The job of this routine is to set $DA to $01\n*                                ( in aux-zpage!!! )\n\nslot = $FD\n\n*-------------------------------------------------\n*\n* HLS APPLE COPY PROTECTION\n* COPYRIGHT (C) 1987 HLS DUPLICATION\n*\n* HLS 408-773-1500\n*\n* Modified by Roland Gustafsson 8/25/89\n* for Prince of Persia copy protection.\n*\n*-------------------------------------------------\n\n* ZERO PAGE\n\nOBJSCT = $07 ;PHYSICAL SECTOR #\n\nHDRC = $40\nHDRS = HDRC+1\nHDRT = HDRC+2\nHDRV = HDRC+3 HEADER SECTOR\nLSRETRY = HDRC+4 ;NIB READ RETRIES\nPRETRY = HDRC+5 ;OBJSCT RETRIES\nNPTR = HDRC+6\nNPTRH = HDRC+7\nMEM1 = HDRC+8\nMEM2 = HDRC+9\n\nzpage = HDRC\nzpagelen = 13\n\n*-------------------------------------------------\n*\n* Here is the code that ends up at $6321.\n* Assemble it and run \"make.purple.hex\" which\n* reverses the code and puts it in a text file.\n*\n*-------------------------------------------------\n\n org $2000\n\n da len6321\n\n dum $6254\nzpagebuf ds zpagelen\n dend\n\n org $6321\n\nstrt6321 jsr swapzpage\n lda #10\n sta LSRETRY\n ldx slot\n lda $C089,X\n lda $C08E,X\n lda #:NIBS ; !!!!! LOW BYTE\n sta NPTR\n lda #>:NIBS ; !!!!! HIGH BYTE\n sta NPTRH\n:AGAIN lda #$80\n sta PRETRY\n:M1 dec PRETRY\n beq :LSFAIL\n jsr RADR16\n bcs :LSFAIL\n lda HDRS\n cmp #OBJSCT\n bne :M1\n\n ldy #0\n:M2 lda $C08C,X\n bpl :M2\n dey\n beq :LSFAIL\n cmp #$D5\n bne :M2\n ldy #0\n\n:M3 lda $C08C,X\n bpl :M3\n dey\n beq :LSFAIL\n cmp #$E7\n bne :M3\n\n:M4 lda $C08C,X\n bpl :M4\n cmp #$E7\n bne :LSFAIL\n\n:M5 lda $C08C,X\n bpl :M5\n cmp #$E7\n bne :LSFAIL\n\n lda $C08D,X\n ldy #$10\n bit $6 ;3 US. ( FOR //C)\n:M6 lda $C08C,X\n bpl :M6\n dey\n beq :LSFAIL\n cmp #$EE\n bne :M6\n\n* NOW AT 1/2 NIBBLES\n\n ldy #7\n:M7 lda $C08C,X * READ DISK DATA\n bpl :M7\n cmp (NPTR),Y * COMPARE AGAINST TABLE\n bne :LSFAIL\n dey\n bpl :M7\n bmi :GOOD\n:LSFAIL jmp :LSFAIL1\n\n* A O K\n\n:GOOD jsr swapzpage\n lda #0\n sta $C009-zpagelen,x\n rol\n sta $DA-zpagelen,x\n sta $C008-zpagelen,x\n clc\n rts\n\n* FAILED\n\n:LSFAIL1 dec LSRETRY\n beq :ERROR\n jmp :AGAIN\n\n:NIBS db $FC,$EE,$EE,$FC\n db $E7,$EE,$FC,$E7\n\n* Note that drive motor is still on\n\n:ERROR\nswapzpage ldx #0\n:0 ldy zpagebuf,x\n lda zpage,x\n sty zpage,x\n sta zpagebuf,x\n inx\n cpx #zpagelen\n bne :0\n rts\n\n*-------------------------------------------------\n*\n* Read address mark\n*\n\nRADR16 ldy #$FD ;READ ADR HDR\n sty MEM1\n:RA1 iny\n bne :RA2\n inc MEM1\n beq :RAEXIT\n:RA2 lda $C08C,X\n bpl :RA2\n:RA3 cmp #$D5\n bne :RA1\n nop\n:RA4 lda $C08C,X\n bpl :RA4\n cmp #$AA\n bne :RA3\n ldy #3\n:RA5 lda $C08C,X\n bpl :RA5\n cmp #$96\n bne :RA3\n lda #0\n:RA6 sta MEM2\n:RA7 lda $C08C,X\n bpl :RA7\n rol\n sta MEM1\n:RA8 lda $C08C,X\n bpl :RA8\n and MEM1\n sta HDRC,Y\n eor MEM2\n dey\n bpl :RA6\n tay\n nop\n clc\n rts\n\n:RAEXIT sec\n rts\n\nlen6321 = *-strt6321\n\n org\n\n*------------------------------------------------- EOF\n\n sav purple.main\n"
  },
  {
    "path": "02 POP Disk Routines/CP.525/PURPLE.S",
    "content": "* purple (put this file!!!)\n\n* This code sets $DA in aux mem to 1\n* if signature is found on track zero.\n\nPURPrun = $6321\n\nPURPLE\n ldy #PURPrun\n lda #>PURPrun\n\n jsr PURPsub\n jsr PURPjmp\n\n* Note: first byte of next junk must be $60 (rts)\n*-------------------------------------------------\n\nPURPcode\n hex 60386018EAA8E7108849450040994825\n hex FB10C08CBD48852AFB10C08CBD498500\n hex A9E7D096C9FB10C08CBD03A0F2D0AAC9\n hex FB10C08CBDEAF0D0D5C9FB10C08CBD3D\n hex F048E604D0C84884FDA060F1D00DE0E8\n hex 62549D409440B56254BC00A2E7FCEEE7\n hex FCEEEEFC63384C0BF044C66018BFFB9D\n hex CD952ABFFC9D00A963BE2063AF4C0330\n hex F4108805D046D1FB10C08CBD07A0F4D0\n hex EEC914F088FB10C08CBD062410A0C08D\n hex BD23D0E7C9FB10C08CBD2CD0E7C9FB10\n hex C08CBDF4D0E7C939F088FB10C08CBD00\n hex A0F4D0D5C947F088FB10C08CBD00A0F1\n hex D007C941A557B063D0205CF045C64585\n hex 80A9478563A94685B6A9C08EBDC089BD\n hex FDA644850AA963BE20\n\n*-------------------------------------------------\n\nPURPlen = *-PURPcode\n\n* Routine to decode code\n\n hex 20\n\nPURPsub\n sty 4\n sta 5\n\n ldy #0\n\n ldx #PURPlen\n:0 dex\n lda PURPcode,x\n sta (4),y\n iny\n bne :0\n\n rts\n\n hex 2c\n\nPURPjmp jmp (4)\n\n*------------------------------------------------- EOF\n"
  },
  {
    "path": "02 POP Disk Routines/CP.525/RYELLOW1.S",
    "content": "* Ryellow1 (put this file!!!)\n\n* This code sets the high bit of $7C in aux mem\n* if signature is found on track zero.\n\n* NOTE: make sure the x register has a number\n* greater than 4 when calling YELLOW.\n\nYELLrun = $AAAA\n\nYELLOW\n:0 sec\n rol\n clc\n rol\n dex\n bne :0\n sta 4\n\n jsr YELLsub\n jmp YELLnothing\n\n*-------------------------------------------------\n\nYELLcode\n hex 27A26A0C5717236A8AAD0603AA8A3401\n hex 03A02F9E0C5717246A03012F9D03E92F\n hex 9C032A2F9F6C9F5AF68AF8011AFD0F9B\n hex 63AD7A5B0AAA17266ABA51225AED637F\n hex 7A5E0AAA17266ABA51225A93634D7A5E\n hex 17266ABA51634D7A8617266ABA51634D\n hex 7A8917276A0ABA8EAC17266ABA51225A\n hex BE63447A5E0AAD17266ABA517B9C7AAF\n hex 22BA5E9AA9E696018AAD06374215DCF1\n hex B2CA6C9E5AA1E66100564444564D4456\n hex 4D8AAD06374215CA0A572E92627AAE4C\n hex 925A9717266ABA51637F7A5A4017266A\n hex BA5163007A580AA917266ABA51633C7A\n hex 4D03AA2F9317266ABA51802F9217266A\n hex BA518F92339AAAEF9322BA4D0240B2CA\n hex 92CA03AE27620E6F555AFC03AA27670E\n hex 0F55276F0E9247620E5A9F1AACE3554C\n hex 553AAEC3546C5567670E3AA907670E63\n hex A61AAB02928A440113B3068A5601076F\n hex 0EB28A5A01138F068A560144670E7A6A\n hex 8A5601B20F5583A980AF5700172A6A0C\n hex 57CA08B8607A579243AB7A5CCA08AA16\n hex 0E0E1F9A3E9A370E0E424A8B7A5BCAAB\n hex 9A828E8AB4B7B6B6B6B6B6DA868C88B5\n hex B4B7B6B6B6B6B655A9\n\n*-------------------------------------------------\n\nYELLlen = *-YELLcode\n\n* Routine to decode code\n\n hex 20 ;jsr\n\nYELLsub sta 5\n ldy #0\n:0 lda YELLcode,y\n eor 4\n sta (4),y\n inc 5\n lda YELLcode+256,y\n eor 4\n sta (4),y\n dec 5\n iny\n bne :0\n lda 4\n eor #$4C!$AA ;jmp instruction\n sta 3\n jmp 3\n\n*-------------------------------------------------\n\n hex a9 ;lda #imm\n\nYELLnothing ldy #0\n inc 5\n:0 tya\n:1 sta (4),y\n iny\n bne :1\n rts\n\n\n*------------------------------------------------- EOF\n"
  },
  {
    "path": "02 POP Disk Routines/CP.525/UPDATE.LS.S",
    "content": " lst off\n\n org $300\n\n*\n* loresshow:0C00.0FFF ($400)\n* framedata:1000.6BFF ($5C00)\n*\n* buffer18 :6C00.7DFF ($1200 one track)\n* rw18.d000:7E00.82FF ($500 moved to aux ramcard)\n*\n\nBbundID = $AD\n\nloresshow = $c00\nbuffer18 = $6c00\n\nrw18 = $d000\nrw18temp = $7e00\n\nslot = $FD\ntrack = $FE\nlastrack = $FF\n\nstartrack = 12 ;last 6 sectors here\n\n* 13,14,15,16,17 (5 full tracks here)\n\nerrcode = 0\n\nstart jsr $e74c ;get slot#\n txa\n asl\n asl\n asl\n asl\n\n sta $C009 ;aux zpage, ramcard\n sta slot\n\n bit $C083\n bit $C083\n\n* Move rw18 to its home\n\n ldx #>rw18temp\n ldy #>rw18\n lda #5\n jsr movedata\n\n* Now we can use rw18\n\n jsr rw18\n db 7,BbundID\n\n jsr rw18\n db 0,5,1 ;drive on\n\n jsr rw18 ;seek to startrack\n db 2,1,startrack\n\n* handle special track with\n\n jsr rw18\n db 3 ;read in original data\n db >buffer18\n lda #1\n bcs :error\n\n* update last 6 sectors\n\n ldx #>loresshow\n ldy #>buffer18+$C00\n lda #6\n jsr movedata\n\n* write it back out\n\n jsr rw18\n db 5 ;writesequ\n db >buffer18\n lda #2\n bcs :error\n\n* write out rest of data...\n\n lda #>loresshow+$600\n:wloop sta :buf\n\n inc track\n\n jsr rw18\n db 5 ;writesequ\n:buf db $11\n lda #2\n bcs :error\n\n lda :buf\n adc #$12\n cmp #>loresshow+$600+{5*$1200}\n bne :wloop\n\n lda #0\n\n:error pha\n jsr rw18\n db 1 ;drive off\n pla\n\n sta $C008\n bit $C081\n sta errcode\n rts\n\n*------------------------------------------------- movedata\n*\n* Move data: x:source, y:dest, a:length\n*\n\nmovedata stx :src+2\n sty :dst+2\n tax\n\n ldy #0\n:loop\n:src lda $1100,y\n:dst sta $1100,y\n iny\n bne :loop\n\n inc :src+2\n inc :dst+2\n\n dex\n bne :loop\n\n rts\n\n*------------------------------------------------- EOF\n"
  },
  {
    "path": "02 POP Disk Routines/CP.525/YELLOW.MAIN.S",
    "content": "* yellow.main\n lst off\n\n* The job of this routine is to\n* set the high-bit of $7C in aux zpage.\n* (It does it by rotating in a carry set)\n\nslot = $fd\nlastrack = $ff\n\n*-------------------------------------------------\n*\n* HLS APPLE COPY PROTECTION\n* COPYRIGHT (C) 1987 HLS DUPLICATION\n*\n* Modified by Roland Gustafsson 8/25/89\n* for Prince of Persia copy protection.\n*\n*-------------------------------------------------\n\nOBJSCT = $07 ;PHYSICAL SECTOR #\n\n* ZERO PAGE\n\nHDRC = $30\nHDRS = HDRC+1\nHDRT = HDRC+2\nHDRV = HDRC+3 HEADER SECTOR\nLSRETRY = HDRC+4 ;NIB READ RETRIES\nPRETRY = HDRC+5 ;OBJSCT RETRIES\nNPTR = HDRC+6\nNPTRH = HDRC+7\nMEM1 = HDRC+8\nMEM2 = HDRC+9\n\nzpage = HDRC\nzpagelen = 33 ;arbitrarily long (only needs 10)\n\n*-------------------------------------------------\n\n* Jordan says: use $A400-ABFF\n* Roland says: OK\n\norgCHECK = $AAAA ;must be highbyte=lowbyte\n\n org $2000\n\n da lenCHECK\n\n dum $A4A4\nzpagebuf ds zpagelen\nwas27 ds 3 ;should be 1 !!!\nwas2A ds 5 ; ditto\nwas26 ds 7 ; ditto again\n dend\n\n org orgCHECK\n\n*-------------------------------------------------\n\nstart sta $C008 ;switch to main zpage\n\n ldx slot\n lda $C089,x ;drive on\n\n jsr swapzpage\n\n* First seek track zero\n\n lda #0\n jsr SEEK\n\n* Now check signature\n\n lda #10\n sta LSRETRY\n ldx slot\n lda $C08E,X\n lda #>:NIBS\n sta NPTRH\n lda #:NIBS\n sta NPTR\n\n:AGAIN lda #$80\n sta PRETRY\n:M1 dec PRETRY\n beq :LSFAIL\n jsr RADR16\n bcs :LSFAIL\n lda HDRS\n cmp #OBJSCT\n bne :M1\n\n ldy #0\n:M2 lda $C08C,X\n bpl :M2\n dey\n beq :LSFAIL\n cmp #$D5\n bne :M2\n ldy #0\n\n:M3 lda $C08C,X\n bpl :M3\n dey\n beq :LSFAIL\n cmp #$E7\n bne :M3\n\n:M4 lda $C08C,X\n bpl :M4\n cmp #$E7\n bne :LSFAIL\n\n:M5 lda $C08C,X\n bpl :M5\n cmp #$E7\n bne :LSFAIL\n\n lda $C08D,X\n ldy #$10\n bit $6 ;3 US. ( FOR //C)\n:M6 lda $C08C,X\n bpl :M6\n dey\n beq :LSFAIL\n cmp #$EE\n bne :M6\n\n* NOW AT 1/2 NIBBLES\n\n ldy #7\n:M7 lda $C08C,X * READ DISK DATA\n bpl :M7\n cmp (NPTR),Y * COMPARE AGAINST TABLE\n bne :LSFAIL\n dey\n bpl :M7\n bmi :GOOD\n:LSFAIL jmp :LSFAIL1\n\n* A O K\n\n:GOOD jsr swapzpage\n sta $C009-zpagelen,x\n ror $7C-zpagelen,x\n clc\n rts\n\n* FAILED\n\n:LSFAIL1 dec LSRETRY\n beq :ERROR\n jmp :AGAIN\n\n:NIBS db $FC,$EE,$EE,$FC\n db $E7,$EE,$FC,$E7\n\n:ERROR jsr swapzpage\n sta $C009-zpagelen,x\n rts\n\n*-------------------------------------------------\n*\n* Read address mark\n*\n\nRADR16 ldy #$FD\n sty MEM1\n:RA1 iny\n bne :RA2\n inc MEM1\n beq :RAEXIT\n:RA2 lda $C08C,X\n bpl :RA2\n:RA3 cmp #$D5\n bne :RA1\n nop\n:RA4 lda $C08C,X\n bpl :RA4\n cmp #$AA\n bne :RA3\n ldy #3\n:RA5 lda $C08C,X\n bpl :RA5\n cmp #$96\n bne :RA3\n lda #0\n:RA6 sta MEM2\n:RA7 lda $C08C,X\n bpl :RA7\n rol\n sta MEM1\n:RA8 lda $C08C,X\n bpl :RA8\n and MEM1\n sta HDRC,Y\n eor MEM2\n dey\n bpl :RA6\n tay\n nop\n clc\n rts\n\n:RAEXIT sec\n rts\n\n*-------------------------------------------------\n*\n* SEEK, a - track\n*\n\nSEEK4 lda #4\nSEEK sta was2A\n cmp lastrack\n beq :RTS0\n lda #0\n sta was26\n:MOVEHEAD lda lastrack\n sta was27\n sec\n sbc was2A\n beq :ISTHERE\n bcs :T0\n eor #$FF\n inc lastrack\n bcc :T1\n:T0 adc #$FE\n dec lastrack\n:T1 cmp was26\n bcc :T2\n lda was26\n:T2 cmp #$C\n bcs :T3\n tay\n:T3 sec\n jsr :CHKPOS\n lda ONTBL,Y\n jsr :MSWAIT\n lda was27\n clc\n jsr :CHKPOS2\n lda OFFTBL,Y\n jsr :MSWAIT\n inc was26\n bne :MOVEHEAD\n:ISTHERE jsr :MSWAIT\n clc\n:CHKPOS lda lastrack\n:CHKPOS2 and #3\n rol\n ora slot\n tax\n lda $C080,X\n ldx slot\n:RTS0 rts\n\n:MSWAIT ldx #$12\n:T21 dex\n bne :T21\n sec\n sbc #1\n bne :MSWAIT\n rts\n\n*-------------------------------------------------\n\nswapzpage ldx #0\n:0 ldy zpagebuf,x\n lda zpage,x\n sty zpage,x\n sta zpagebuf,x\n inx\n cpx #zpagelen\n bne :0\n rts\n\n*-------------------------------------------------\n\nONTBL db $01,$30,$28,$24,$20,$1E,$1D,$1C,$1C,$1C,$1C,$1C\nOFFTBL db $70,$2C,$26,$22,$1F,$1E,$1D,$1C,$1C,$1C,$1C,$1C,$FF,$03\n\n*-------------------------------------------------\nlenCHECK = *-orgCHECK\n\n org\n\n*------------------------------------------------- EOF\n\n sav yellow.main\n"
  },
  {
    "path": "02 POP Disk Routines/RW1835/DEMOBOOT.S",
    "content": " lst off\n\norg = $1000\n org org\n\n*-------------------------------------------------\n*\n* 08/01/85\n* 07/02/87 mod for 3.5\n*\n* Demo using the 18 sector routines.\n*\n* Loads in a double hires picture\n* from tracks 2,3,4 and 5.\n*\n*  by Roland Gustafsson\n*\n\ntemp0 = $3A\ntemp1 = $3B\n\nRW18temp = $2100\nRW18 = $D000\n\nslot = $FD\ntrack = $FE\n\n*-------------------------------------------------\n*\n* Move to actual run address\n*\n\nstart ldy #0\n:0 lda $2000,y\n sta org,y\n iny\n bne :0\n jmp :1\n\n* Tell RW18 which slot to use\n\n:1 lda $43\n sta slot\n\n jsr check64k\n\n* Turn on the disk drive (It is\n* already on, but this call is\n* necessary to initialize the\n* RW18 routine)\n\nLOOP jsr RW18\n hex 000100\n\n* Clear hires page\n\n jsr hgr\n\n* Now seek to track two since that\n* is where the data starts.\n\n jsr RW18\n hex 020002\n\n* Display double hires page one\n\n sta $C050\n sta $C052\n sta $C054\n sta $C057\n sta $C00D\n sta $C05E\n sta $C001\n\n* Load in the picture\n\n bit $C055\n jsr LOADBANK\n bit $C054\n jsr LOADBANK\n sta $C000\n\n* Turn off the drive\n\n jsr RW18\n hex 01\n\n* Wait for keypress\n\nwaitkey lda $C000\n bpl waitkey\n sta $C010\n bmi LOOP\n\n*-------------------------------------------------\n*\n* Load in two tracks\n*\n* The C in C3 and C4 means\n* bit7:sound speaker on error\n* bit6:auto inc track\n*\n* Read sequence\n*\n\nLOADBANK jsr RW18\n hex C320\n\n* Read group\n\n jsr RW18\n hex 84\n hex 32333435363738393A\n hex 3B3C3D3E0000000000\n* ^^^^^^^^\n* Note that the last five sectors\n* are ignored.\n*\n* Read last page by itself to\n* test RW18.35.\n\n jsr RW18\n hex C4\n hex 000000000000000000\n hex 000000003F00000000\n\n rts\n\n*-------------------------------------------------\n*\n* Clear double hires page\n*\n\nhgr sta $C005\n jsr :0\n sta $C004\n\n:0 ldy #0\n ldx #$20\n sty temp0\n stx temp1\n tya\n:1 sta (temp0),y\n iny\n bne :1\n inc temp1\n dex\n bne :1\n rts\n\n*-------------------------------------------------\n*\n* Check for 64k and move RW18 to its home.\n*\n\ncheck64k bit $C08B\n bit $C08B\n ldy #0\n:0 sty $E000\n cpy $E000\n bne NOT64K\n iny\n bne :0\n\n* Move RW18 to $D000\n\n ldx #5\n:1 lda RW18temp,y\n:2 sta RW18,y\n iny\n bne :1\n inc :1+2\n inc :2+2\n dex\n bne :1\n rts\n\nNOT64K sta $C081\n ldy #0\n:0 lda :errtext,y\n beq *\n sta $628,y\n iny\n bne :0\n\n:errtext ASC \"REQUIRES 64K MEMORY\",00\n\n*------------------------------------------------- EOF\n\n sav demoboot\n"
  },
  {
    "path": "02 POP Disk Routines/RW1835/MOVE35.S",
    "content": " lst off\n\n org $E00\n\nerrcode = 0\nget8bit = $E74C\n\nbuffer = $1000 ;7 tracks long\nbufferend = buffer+$7E00\n\nrw18 = $D000 ;both versions!\n\nslot = $FD\ntrack = $FE\nlastrack = $FF\n\n*-------------------------------------------------\n*\n* CALL RT - moves rw18 routines to their homes in aux mem\n*\n* CALL RT+3,<5.25\" slot>,<BbundID>,<start track>,<end track>\n*          ,<3.5\" slot>,<block offset>\n*\n\n jmp move\n\n* Get DEST information:\n\nstart jsr get8bit\n stx slot525\n jsr get8bit\n stx BbundID\n jsr get8bit\n stx track\n jsr get8bit\n inx\n stx ENDtrack\n\n* SOURCE information\n\n jsr get8bit\n stx slot35\n jsr $DEBE ;get16bit\n jsr $DD67\n jsr $E752\n sty Boffset\n sta Boffset+1\n\n* From now on we are using aux zpage and $D000\n\n lda track\n sta $C009\n sta track\n\n jsr recal525\n\nloop lda track\n\n pha\n jsr read35\n bcs :plarts\n pla\n\n sta track\n jsr write525\n bcs :rts\n\n lda track\n eor ENDtrack\n bne loop\n\n pha\n\n:plarts pla\n:rts lda #0\n rol\n sta $C008 ;back to main mem\n sta errcode\n bit $C081\n rts\n\nENDtrack db $11\n\n*------------------------------------------------- write525\n*\n* Write up to 7 tracks from 5.25\" floppy.\n*\n\nwrite525 jsr prep525\n\n* Drive on, delay 1 second\n\n jsr rw18\n db 0,1,10\n\n* Write until buffer is empty or END track reached\n\n lda #>buffer\n\n:loop sta :writebuf\n\n jsr rw18\n db $45 ;auto-inc, writesequ\n:writebuf db $11\n bcs :error\n\n lda :writebuf\n jsr buffend?\n bcc :loop\n clc\n\n:error php\n jsr rw18\n db 1 ;drive off\n plp\n rts\n\n*------------------------------------------------- buffend?\n*\n* Have we reached the end of buffer, or ENDtrack?\n* Enter: a - last buffer address\n*\n* Exit: cs - no more buffer, or ENDtrack reached\n*       cc - keep going, a=new buffer address\n*\n\nbuffend? clc\n adc #$12\n cmp #>bufferend\n bcs :rts\n\n ldy track\n cpy ENDtrack\n\n:rts rts\n\n*------------------------------------------------- prep525\n*\n* Prepare to use 5.25\" RW18 routine\n*\n\n* Normal RW18 routine is in second bank of $D000\n\nprep525 bit $C08B\n bit $C08B\n\n* Set slot of 5.25\" drive\n\n lda #$11\nslot525 = *-1\n asl\n asl\n asl\n asl\n sta slot\n tax\n\n* Turn off all phases\n\n lda $C080,x\n lda $C082,x\n lda $C084,x\n lda $C086,x\n\n* Set Broderbund ID byte\n\n jsr rw18\n db 7\nBbundID db $11\n\n rts\n\n*------------------------------------------------- recal525\n*\n* Recalibrate 5.25\" floppy drive\n*\n\nrecal525 jsr prep525\n\n lda #$A0\n sta lastrack\n\n* Drive on\n\n jsr rw18\n db 0,1,3 ;.3 second delay\n\n* Seek to track zero\n\n lda track\n pha\n\n jsr rw18\n db 2,0,0\n\n pla\n sta track\n sta :track\n\n* Now seek first track\n\n jsr rw18\n db 2,0\n:track db $11\n\n jsr rw18\n db 1 ;drive off\n\n rts\n\n*------------------------------------------------- read35\n*\n* Read up to 7 tracks to 3.5\" disk.\n*\n\nread35 jsr prep35\n\n* Write until no more buffer, or ENDtrack is reached\n\n lda #>buffer\n\n:loop sta :readbuf\n\n jsr rw18\n db $43 ;auto-inc, writesequ\n:readbuf db $11\n bcs :error\n\n lda :readbuf\n jsr buffend?\n bcc :loop\n clc\n\n:error rts\n\n*------------------------------------------------- prep35\n*\n* Prepare to use 3.5\" RW18 routine\n*\n\n* 3.5\" RW18 routine is in first bank of $D000\n\nprep35 bit $C083\n bit $C083\n\n* Set slot of 3.5\" drive\n\n lda #$11\nslot35 = *-1\n asl\n asl\n asl\n asl\n sta slot\n tax\n\n* Set offset into 3.5\" disk\n\n jsr rw18\n db 8\nBoffset da $1111\n\n rts\n\n*------------------------------------------------- move\n*\n* Move the RW18 routines to their respective homes.\n*\n* $1000 - 3.5\" rw18 routine\n* $2000 - 5.25\" rw18 routine\n*\n\nmove ldx #$83\n lda #$10\n jsr :0\n ldx #$8B\n lda #$20\n\n:0 sta :source+2\n lda #$D0\n sta :dest+2\n\n lda $C000,x\n lda $C000,x\n\n sta $C009 ;aux $D000\n\n ldx #$10\n ldy #0\n:source lda $1000,y\n:dest sta $D000,y\n iny\n bne :source\n\n inc :source+2\n inc :dest+2\n\n dex\n bne :source\n\n sta $C008\n bit $C081\n\n rts\n\n*------------------------------------------------- EOF\n"
  },
  {
    "path": "02 POP Disk Routines/RW1835/MOVE53.S",
    "content": " lst off\n\n org $E00\n\nerrcode = 0\nget8bit = $E74C\n\nbuffer = $1000 ;7 tracks long\nbufferend = buffer+$7E00\n\nrw18 = $D000 ;both versions!\n\nslot = $FD\ntrack = $FE\nlastrack = $FF\n\n*-------------------------------------------------\n*\n* CALL RT - moves rw18 routines to their homes in aux mem\n*\n* CALL RT+3,<5.25\" slot>,<BbundID>,<start track>,<end track>\n*          ,<3.5\" slot>,<block offset>\n*\n\n jmp move\n\n* Get source information:\n\nstart jsr get8bit\n stx slot525\n jsr get8bit\n stx BbundID\n jsr get8bit\n stx track\n jsr get8bit\n inx\n stx ENDtrack\n\n* Destination information\n\n jsr get8bit\n stx slot35\n jsr $DEBE ;get16bit\n jsr $DD67\n jsr $E752\n sty Boffset\n sta Boffset+1\n\n* From now on we are using aux zpage and $D000\n\n lda track\n sta $C009\n sta track\n\n jsr recal525\n\nloop lda track\n\n pha\n jsr read525\n bcs :plarts\n pla\n\n sta track\n jsr write35\n bcs :rts\n\n lda track\n eor ENDtrack\n bne loop\n\n pha\n\n:plarts pla\n:rts lda #0\n rol\n sta $C008 ;back to main mem\n sta errcode\n bit $C081\n rts\n\nENDtrack db $11\n\n*------------------------------------------------- read525\n*\n* Read up to 7 tracks from 5.25\" floppy.\n*\n\nread525 jsr prep525\n\n* Drive on, delay .5 seconds\n\n jsr rw18\n db 0,1,5\n\n* Read until buffer is full\n\n lda #>buffer\n\n:loop sta :readbuf\n\n jsr rw18\n db $43 ;auto-inc, readsequ\n:readbuf db $11\n bcs :error\n\n lda :readbuf\n jsr buffend?\n bcc :loop\n clc\n\n:error php\n jsr rw18\n db 1 ;drive off\n plp\n rts\n\n*------------------------------------------------- buffend?\n*\n* Have we reached the end of buffer, or ENDtrack?\n* Enter: a - last buffer address\n*\n* Exit: cs - no more buffer, or ENDtrack reached\n*       cc - keep going, a=new buffer address\n*\n\nbuffend? clc\n adc #$12\n cmp #>bufferend\n bcs :rts\n\n ldy track\n cpy ENDtrack\n\n:rts rts\n\n*------------------------------------------------- prep525\n*\n* Prepare to use 5.25\" RW18 routine\n*\n\n* Normal RW18 routine is in second bank of $D000\n\nprep525 bit $C08B\n bit $C08B\n\n* Set slot of 5.25\" drive\n\n lda #$11\nslot525 = *-1\n asl\n asl\n asl\n asl\n sta slot\n tax\n\n* Turn off all phases\n\n lda $C080,x\n lda $C082,x\n lda $C084,x\n lda $C086,x\n\n* Set Broderbund ID byte\n\n jsr rw18\n db 7\nBbundID db $11\n\n rts\n\n*------------------------------------------------- recal525\n*\n* Recalibrate 5.25\" floppy drive\n*\n\nrecal525 jsr prep525\n\n lda #$A0\n sta lastrack\n\n* Drive on\n\n jsr rw18\n db 0,1,3 ;.3 second delay\n\n* Seek to track zero\n\n lda track\n pha\n\n jsr rw18\n db 2,0,0\n\n pla\n sta track\n sta :track\n\n* Now seek first track\n\n jsr rw18\n db 2,0\n:track db $11\n\n rts\n\n*------------------------------------------------- write35\n*\n* Write up to 7 tracks to 3.5\" disk.\n*\n\nwrite35 jsr prep35\n\n* Write until no more buffer, or ENDtrack is reached\n\n lda #>buffer\n\n:loop sta :writebuf\n\n jsr rw18\n db $45 ;auto-inc, writesequ\n:writebuf db $11\n bcs :error\n\n lda :writebuf\n jsr buffend?\n bcc :loop\n clc\n\n:error rts\n\n*------------------------------------------------- prep35\n*\n* Prepare to use 3.5\" RW18 routine\n*\n\n* 3.5\" RW18 routine is in first bank of $D000\n\nprep35 bit $C083\n bit $C083\n\n* Set slot of 3.5\" drive\n\n lda #$11\nslot35 = *-1\n asl\n asl\n asl\n asl\n sta slot\n tax\n\n* Set offset into 3.5\" disk\n\n jsr rw18\n db 8\nBoffset da $1111\n\n rts\n\n*------------------------------------------------- move\n*\n* Move the RW18 routines to their respective homes.\n*\n* $1000 - 3.5\" rw18 routine\n* $2000 - 5.25\" rw18 routine\n*\n\nmove ldx #$83\n lda #$10\n jsr :0\n ldx #$8B\n lda #$20\n\n:0 sta :source+2\n lda #$D0\n sta :dest+2\n\n lda $C000,x\n lda $C000,x\n\n sta $C009 ;aux $D000\n\n ldx #$10\n ldy #0\n:source lda $1000,y\n:dest sta $D000,y\n iny\n bne :source\n\n inc :source+2\n inc :dest+2\n\n dex\n bne :source\n\n sta $C008\n bit $C081\n\n rts\n\n*------------------------------------------------- EOF\n"
  },
  {
    "path": "02 POP Disk Routines/RW1835/POPBOOT35.S",
    "content": " lst off\n\n org $2000\n\n*-------------------------------------------------\n*\n* 06/28/89 Prince of Persia boot code\n* for rw18 3.5\" version\n*\n* Last mod: 09/05/89\n*\n\nrw18 = $D000\n\nslot = $FD\n\n*-------------------------------------------------\n*\n* Tell RW18 which slot to use\n*\n\nstart bit RW18temp\n\n ldx #$FF\n txs\n\n lda $43 ;ProDOS boot drive\n sta slot\n\n* Clear screen, etc...\n\n jsr init\n\n* Check system for 128k of RAM\n\n jsr check128k\n\n* Determine if we are running on a GS\n* and do GS specific stuff also...\n\n jsr setGSflag\n\n* Move rw18 to its home\n\n jsr moverw18\n\n* Start loading the game\n\n jsr rw18\n db 7,$A9 ;Bbund ID=$A9 for side one\n\n jsr rw18 ;\"seek\" track one\n db 2,0,1\n\n jsr rw18 ;read in $EE00-FFFF\n hex C3EE\n\n jmp $EE00\n\n*-------------------------------------------------\ntext = $fb2f\nhome = $fc58\nvtab = $FB5B\ncout = $FDF0\nnormal = $fe84\npr0 = $fe93\nin0 = $fe89\n\ninit ldx #$ff\n stx $4fb\n stx $3f3\n stx $3f4\n stx $c000 ;80store off\n stx $c002 ;RAMRD main\n stx $c004 ;RAMWRT main\n stx $c00c ;80col off\n stx $c00e ;Altcharset off\n stx $c081 ;write RAM, read ROM (2nd 4k bank)\n jsr text\n jsr home\n jsr normal\n jsr pr0\n jsr in0\n\n rts\n\n*-------------------------------------------------\n*\n* Check to make sure //c or //e\n* with 128k\n*\n\ncheck128k sta $C081\n\n lda $FBB3 ;Apple // family ID byte\n cmp #6\n bne NOT128K ;Must be e/c/GS\n\n bit $C017\n bmi NOT128K\n\n ldx #CHECKEND\n:0 lda CHECKER,X\n sta $180,X\n dex\n bpl :0\n\n jsr $180\n bcs NOT128K\n\n rts\n\nNOT128K jsr text\n jsr home\n lda #8\n jsr vtab\n\n ldy #0\n:0 lda MEMTEXT,Y\n beq *\n jsr cout\n cmp #$8D\n bne :1\n lda #4\n sta $24\n:1 iny\n bne :0\n\nMEMTEXT hex 8D\n asc \"REQUIRES A //C OR //E WITH 128K\"\n hex 00\n\n*-------------------------------------------------\n* Check for AUX memory routine\n\nCHECKER lda #$EE\n sta $C005\n sta $C003\n sta $0800\n lda $0C00\n cmp #$EE\n bne :0\n asl $0C00\n lda $0800\n cmp $0C00\n beq :1\n:0 clc\n:1 sta $C004\n sta $C002\n rts\n\nCHECKEND = *-CHECKER\n\n*------------------------------------------------- setGSflag\n*\n* Set the GS? flag in rw18\n*\n\nsetGSflag sta $C081\n sec\n jsr $FE1F\n lda #$FF\n adc #0\n sta GS?\n bpl :notGS\n\n* Set background color to black, text to white\n\n lda #$F0\n sta $C022\n\n* Set border color to black\n\n lda $C034\n and #$F0\n sta $C034\n\n:notGS rts\n\n*------------------------------------------------- moverw18\n*\n* Move RW18 to it's final home in $D000\n*\n\nmoverw18 bit $C08B\n bit $C08B\n\n ldy #0\n:0 lda RW18temp,y\n:1 sta $D000,y\n iny\n bne :0\n\n inc :0+2\n inc :1+2\n bne :0\n\n rts\n\n*-------------------------------------------------\n\n sav popboot35\n\n*------------------------------------------------- EOF\n dum *\nRW18temp ds 3\nGS? ds 1\n dend\n*-------------------------------------------------\n lst off\n"
  },
  {
    "path": "02 POP Disk Routines/RW1835/RW1835.POP.S",
    "content": " lst off\n tr on\n org $D000\n xc off\n\n*-------------------------------------------------\n*\n* 07/02/87\n*\n* Unidisk 3.5 interface for\n* 18 sector read/write routine\n*\n* 09/05/89 Version for //e\n*\n*  Copyright 1985, 1987\n*  by Roland Gustafsson\n*\n*-------------------------------------------------\n\nsigblock = 16+315\n\n*\n* Permanent vars\n*\n\nslot = $FD\ntrack = $FE\n;lastrack = $FF ;NOT USED\n\n* Zero page usage:\n\ntemp = $40\ncommand = $41\n\n*-------------------------------------------------\n jmp RW18\n*-------------------------------------------------\nGS? ds 1 ;bpl if not, bmi if GS\n\nOFFSET = 16 ;default offset\n\n*-------------------------------------------------\n*\n* READ/WRITE 18 sectors!\n*\n\nREAD lda #1\n hex 2C\nWRITE lda #2\n sta SPcommand\n\n* Calculate starting block\n* (OFFSET+track*9)\n\n lda track  ;0-34\n asl\n asl\n asl\n tax  ;x=lo\n\n lda #0\n rol\n tay  ;y=hi\n\n txa\n adc track\n tax\n\n tya\n adc #0\n tay\n\n txa\n adc #OFFSET\nBOFFLO = *-1\n sta BLOCKLO\n\n tya\n adc #>OFFSET\nBOFFHI = *-1\n sta BLOCKHI\n\n* Loop for 18 sectors, 2 at a time.\n\n ldy #0\n:0 tya\n pha\n\n* Do 2 sectors\n\n lda BUFTABLE,Y\n sta ]rbuf0\n sta ]wbuf0\n ldx BUFTABLE+1,Y\n stx ]rbuf1\n stx ]wbuf1\n dex\n cpx ]rbuf0\n jsr RWSECTS\n\n pla\n tay\n\n bcs :rts\n\n* Next 2 sectors\n\n inc BLOCKLO\n bne :1\n inc BLOCKHI\n\n:1 iny\n iny\n cpy #18\n bne :0\n\n clc\n:rts rts\n\n*-----------\n*\n* Read or write 2 sectors\n*\n* If the two sectors are sequential\n* then just go to the Device Driver.\n*\n\nRWSECTS bne :noncont\n\n* We are dealing with contiguous sectors...\n* if aux mem is set in any way, then we must\n* load them using the non-contiguous routine..\n\n bit ]RAMread?\n bmi :noncont\n bit ]RAMwrite?\n bpl JMPSP\n\n* Non-contiguous...\n\n:noncont ldy SPcommand\n dey\n bne WSECTS\n\n* Read two non-contiguous sectors\n\nRSECTS lda ]rbuf0\n ora ]rbuf1\n clc\n beq :rts\n\n jsr JMPSPBUF\n bcs :rts\n\n* Now move them to where they belong\n\n ldx #$2C  ; bit ABS\n ldy #$99  ; sta ABS,Y\n\n* If this sector is to be ignored,\n* then change sta $FF00,Y to bit.\n\n sty ]rmod0\n lda ]rbuf0\n bne *+5\n stx ]rmod0\n\n sty ]rmod1\n lda ]rbuf1\n bne *+5\n stx ]rmod1\n\n ldy #0\n:0 lda BLOCKBUF,Y\n]rmod0 sta $FF00,Y\n]rbuf0 = *-1\n lda BLOCKBUF+256,Y\n]rmod1 sta $FF00,Y\n]rbuf1 = *-1\n iny\n bne :0\n\n:rts rts\n\n*-----------\n*\n* Write two non-contiguous sectors\n*\n\nWSECTS ldy #0\n:0 lda $FF00,Y\n]wbuf0 = *-1\n sta BLOCKBUF,Y\n lda $FF00,Y\n]wbuf1 = *-1\n sta BLOCKBUF+256,Y\n iny\n bne :0\n\nJMPSPBUF lda #>BLOCKBUF\n\n*-------------------------------------------------\n*\n* Jump to Smart Port driver\n*\n* Enter: A - address of buffer\n*\n\nJMPSP sta SPbufhi\n\n* If ERROR? hi bit is set, then just return sec\n\n asl ERROR?\n bcs ]rtserr\n\n* Force main memory\n\n sta $C002\n sta $C004\n\n* Trick here, first time through, calculates\n* the entry point into the SmartPort, from\n* then on, direct access is available.\n\n]SPjsr jsr calcSPjsr\nSPcommand db $11\n da SPcmdlist\n\nrestAux sta $C002\n lda #$11\n]RAMread? = *-1\n bpl *+5\n sta $C003\n\n sta $C004\n lda #$11\n]RAMwrite? = *-1\n bpl *+5\n sta $C005\n\n]rtserr rts\n\ncalcSPjsr lda slot\n lsr\n lsr\n lsr\n lsr\n ora #$C0\n sta ]SPjsr+2\n sta :calcSPmod+2\n\n:calcSPmod lda $C5FF\n clc\n adc #3\n sta ]SPjsr+1\n jmp (]SPjsr+1)\n\nSPcmdlist db 3\nunit_num db 1 ;unit one\n db 0 ;SPbuflo=$00\nSPbufhi db $11\nBLOCKLO db $11 ;\"low\"\nBLOCKHI db $11 ;\"med\"\n db 0 ;\"high\" always zero!\n\n*------------------------------------------------- RW18\n*\n* Entry point into RW18\n*\n\nRW18 pla\n sta GOTBYTE+1\n pla\n sta GOTBYTE+2\n\n bit $CFFF\n\n* Remember aux memory settings\n\n lda $C013\n sta ]RAMread?\n lda $C014\n sta ]RAMwrite?\n\n* Save aux text page if running on a GS\n\n bit GS?\n bpl *+5\n jsr saveTaux\n\n* Save zpage\n\n ldx #0\n:zsave lda 0,x\n sta ZPAGEBUF,x\n inx\n bne :zsave\n\n* Get the command\n\n jsr GETBYTE\n sta command\n and #$0F\n asl\n tax\n\n lda cmdadr,X\n sta :1+1\n lda cmdadr+1,X\n sta :1+2\n\n:1 jsr $FFFF\n\n* Restore aux text page if running on a GS\n\n bit GS?\n bpl *+5\n jsr restTaux\n\n* Restore aux memory settings\n\n jsr restAux\n\n* Restore zpage\n\n ldy track\n ldx #0\n:zrest lda ZPAGEBUF,x\n sta 0,x\n inx\n bne :zrest\n sty track\n\n lda GOTBYTE+2\n pha\n lda GOTBYTE+1\n pha\n\nrts rts\n\ncmdadr da CMdriveon\n da rts  ; CMDRIVOFF\n da CMseek\n da CMreadseq\n da CMreadgroup\n da CMwriteseq\n da CMwritegroup\n da CMid\n da CMoffset\n\n*------------------------------------------------- CMseek\n*\n* SEEK\n* <check disk for lastrack?>,\n* <track>\n*\n\nCMseek jsr GETBYTE\n jsr GETBYTE\n sta track\n rts\n\n*------------------------------------------------- CMreadseq\n*------------------------------------------------- CMreadgroup\n*\n* Read sequence\n* <buf adr>\n*\n* Read group\n* <18 buf adr's>\n*\n\nCMreadseq ldx #1\n hex 2C\nCMreadgroup ldx #18\n jsr CMADINFO\n\nCMREAD2 jsr READ\n\n*-------------------------------------------------\n*\n* READ/WRITE exit.\n*\nINCTRAK? bit command\n bcs WHOOP?\n\n* If bit 6 set, then inc track\n\n bvc ]rts\n inc track\n]rts rts\n\n* If bit 7 set then whoop speaker\n* WARNING:use only with READ\n\nWHOOP? bpl ]rts\n ldy #0\n:1 tya\n bit $C030\n:2 sec\n sbc #1\n bne :2\n dey\n bne :1\n beq CMREAD2\n\n*------------------------------------------------- CMdriveon\n*\n* \"DriveOn\" is when we check for the POP disk\n*\n\nERROR? db 0\n\nCMdriveon ldy #sigblock\n lda #>sigblock\n sty BLOCKLO\n sta BLOCKHI\n\n lda #1 ;read\n sta SPcommand\n\n jsr JMPSPBUF ;read in sig block\n bcs :9\n\n ldy #-1\n:chksig iny\n lda :sig,y\n beq :9\n eor BLOCKBUF,y\n beq :chksig\n sec\n\n:9 lda #0\n ror\n sta ERROR?\n rts\n\n:sig asc 'Prince of Persia 3.5!',00\n\n*------------------------------------------------- CMwriteseq\n*------------------------------------------------- CMwritegroup\n*\n* Same as READ\n*\n\nCMwriteseq ldx #1\n hex 2C\nCMwritegroup ldx #18\n jsr CMADINFO\n jsr WRITE\n jmp INCTRAK?\n\n*------------------------------------------------- CMid\n*\n* Change offset based on ID\n*\n\nCMid jsr GETBYTE\n sta :IDmod+1\n\n ldy #-3\n:0 iny\n iny\n iny\n lda :IDlist,y\n beq :rts\n\n:IDmod cmp #$11\n bne :0\n\n lda :IDlist+1,y\n sta BOFFLO\n lda :IDlist+2,y\n sta BOFFHI\n\n:rts rts\n\n:IDlist db $A9\n dw 16 ;side one\n\n db $AD\n dw 16+315+1 ;side two\n\n db $79\n dw 16+315+1+315 ;side three!!!\n\n db 0 ;end of list\n\n*-------------------------------------------------\n*\n* Set new block offset\n*\n\nCMoffset jsr GETBYTE\n sta BOFFLO\n jsr GETBYTE\n sta BOFFHI\n rts\n\n*-------------------------------------------------\n*\n* Get buffer info.\n*\n\nCMADINFO stx temp\n ldx #0\n:0 jsr GETBYTE\n jsr auxTfix\n sta BUFTABLE,X\n inx\n cpx temp\n bcc :0\n tay\n\n* If sequence, then fill table\n\n:1 iny\n cpx #18\n beq :2\n tya\n jsr auxTfix\n sta BUFTABLE,X\n inx\n bne :1\n\n:2 rts\n\n*-------------------------------------------------\n*\n* Only if running on a GS:\n*\n* If loading into text page, then change to\n* load into internal buffer instead.\n*\n\nauxTfix bit GS?\n bpl :0\n\n cmp #4\n bcc :0\n cmp #8\n bcs :0\n adc #>auxTPAGEsave-$400\n\n:0 rts\n\n*-------------------------------------------------\n*\n* Only if running on a GS:\n*\n* Save the aux memory text page to internal buffer\n*\n\n xc\n xc\n\nsaveTaux clc\n xce\n rep $30\n ldx #$0400\n ldy #auxTPAGEsave\n lda #$400-1\n phb\n mvn $10400,0\n plb\n sec\n xce\n rts\n\n*-------------------------------------------------\n*\n* Only if running on a GS:\n*\n* Restore aux text page from internal buffer\n\nrestTaux clc\n xce\n rep $30\n ldx #auxTPAGEsave\n ldy #$0400\n lda #$400-1\n phb\n mvn 0,$10400\n plb\n sec\n xce\n rts\n\n xc off\n\n*-------------------------------------------------\n\nGETBYTE inc GOTBYTE+1\n bne GOTBYTE\n inc GOTBYTE+2\nGOTBYTE lda $FFFF\n rts\n\n*-------------------------------------------------\n\n sav rw1835.pop\n\n*-------------------------------------------------\n\n lst on\n\nZPAGEBUF ds $100\nBUFTABLE ds 18\n ds \\\nBLOCKBUF ds 512\n\nauxTPAGEsave ds 1024\n\n da *\n\n lst off\n\n*------------------------------------------------- EOF\n"
  },
  {
    "path": "02 POP Disk Routines/RW1835/RW1835.S",
    "content": " lst off\n tr on\n org $D000\n xc off\n\n*-------------------------------------------------\n*\n* 07/02/87\n*\n* Unidisk 3.5 interface for\n* 18 sector read/write routine\n*\n*  Copyright 1985, 1987\n*  by Roland Gustafsson\n*\n*-------------------------------------------------\n*\n* Permanent vars\n*\n\nslot = $FD\ntrack = $FE\n ;lastrack = $FF ;NOT USED\n\n* Zero page usage:\n\nzpage = $40\nzpagelen = 16\n\ntemp = $40\ncommand = $41\n\n* Device Driver Parameters:\n\nDDPcmd = $42\nDDPunit = $43\nDDPbuflo = $44\nDDPbufhi = $45\nDDPblklo = $46\nDDPblkhi = $47\n\nCARD = $4E\n\n*-------------------------------------------------\n jmp RW18\n*-------------------------------------------------\n\nOFFSET = 16 ;default offset\n\n*-------------------------------------------------\n*\n* READ/WRITE 18 sectors!\n*\n\nREAD lda #1\n hex 2C\nWRITE lda #2\n sta DDPcmd\n\n* Calculate starting block\n* (OFFSET+track*9)\n\n lda track  ;0-34\n asl\n asl\n asl\n tax  ;x=lo\n\n lda #0\n rol\n tay  ;y=hi\n\n txa\n adc track\n tax\n\n tya\n adc #0\n tay\n\n txa\n adc #OFFSET\nBOFFLO = *-1\n sta BLOCKLO\n\n tya\n adc #>OFFSET\nBOFFHI = *-1\n sta BLOCKHI\n\n* Loop for 18 sectors, 2 at a time.\n\n ldy #0\n:0 tya\n pha\n\n* Do 2 sectors\n\n lda BUFTABLE,Y\n sta ]rbuf0\n sta ]wbuf0\n ldx BUFTABLE+1,Y\n stx ]rbuf1\n stx ]wbuf1\n dex\n cpx ]rbuf0\n jsr RWSECTS\n\n pla\n tay\n\n bcs rts\n\n* Next 2 sectors\n\n inc BLOCKLO\n bne :1\n inc BLOCKHI\n\n:1 iny\n iny\n cpy #18\n bne :0\n\n clc\nrts rts\n\n*-----------\n*\n* Read or write 2 sectors\n*\n* If the two sectors are sequential\n* then just go to the Device Driver.\n*\nRWSECTS beq JMPDD\n\n ldy DDPcmd\n dey\n bne WSECTS\n\n* Read two non-contiguous sectors\n\nRSECTS lda ]rbuf0\n ora ]rbuf1\n clc\n beq :rts\n\n jsr JMPDDBUF\n bcs :rts\n\n* Now move them to where they belong\n\n ldx #$2C  ; bit ABS\n ldy #$99  ; sta ABS,Y\n\n* If this sector is to be ignored,\n* then change sta $FF00,Y to bit.\n\n sty ]rmod0\n lda ]rbuf0\n bne *+5\n stx ]rmod0\n\n sty ]rmod1\n lda ]rbuf1\n bne *+5\n stx ]rmod1\n\n ldy #0\n:0 lda BLOCKBUF,Y\n]rmod0 sta $FF00,Y\n]rbuf0 = *-1\n lda BLOCKBUF+256,Y\n]rmod1 sta $FF00,Y\n]rbuf1 = *-1\n iny\n bne :0\n:rts rts\n\n*-----------\n*\n* Write two non-contiguous sectors\n*\n\nWSECTS ldy #0\n:0 lda $FF00,Y\n]wbuf0 = *-1\n sta BLOCKBUF,Y\n lda $FF00,Y\n]wbuf1 = *-1\n sta BLOCKBUF+256,Y\n iny\n bne :0\n\nJMPDDBUF lda #>BLOCKBUF\n\n*-----------\n*\n* Jump to Device Driver\n*\n* Enter: A - address of buffer\n*\n\nJMPDD sta DDPbufhi\n\n* Set block number\n\n lda #$11\nBLOCKLO = *-1\n sta DDPblklo\n lda #$11\nBLOCKHI = *-1\n sta DDPblkhi\n\n* Get address of firmware\n\n lda slot\n sta DDPunit\n lsr\n lsr\n lsr\n lsr\n ora #$C0\n sta CARD+1\n lda #0\n sta CARD\n sta DDPbuflo\n\n* Get address of Device Driver\n\n ldy #$FF\n lda (CARD),Y\n sta CARD\n\n* Jump to it!!!\n\n jmp (CARD)\n\n*------------------------------------------------- RW18\n*\n* Entry point into RW18\n*\n\nRW18 pla\n sta GOTBYTE+1\n pla\n sta GOTBYTE+2\n\n bit $CFFF\n\n jsr SWAPZPAG\n\n jsr GETBYTE\n sta command\n and #$0F\n asl\n tax\n\n lda cmdadr,X\n sta :1+1\n lda cmdadr+1,X\n sta :1+2\n:1 jsr $FFFF\n\n lda GOTBYTE+2\n pha\n lda GOTBYTE+1\n pha\n\nSWAPZPAG php\n ldx #0\n:0 lda zpage,x\n ldy ZPAGSAVE,X\n sta ZPAGSAVE,X\n sty zpage,x\n inx\n cpx #zpagelen\n bne :0\n plp\n rts\n\ncmdadr da SKIP2  ; CMDRIVON\n da rts  ; CMDRIVOF\n da CMseek\n da CMreadseq\n da CMreadgroup\n da CMwriteseq\n da CMwritegroup\n da CMid\n da CMoffset\n\n*------------------------------------------------- CMseek\n*\n* SEEK\n* <check disk for lastrack?>,\n* <track>\n*\nCMseek jsr GETBYTE\n jsr GETBYTE\n sta track\n rts\n\n*------------------------------------------------- CMreadseq\n*------------------------------------------------- CMreadgroup\n*\n* Read sequence\n* <buf adr>\n*\n* Read group\n* <18 buf adr's>\n*\nCMreadseq ldx #1\n hex 2C\nCMreadgroup ldx #18\n jsr CMADINFO\n\nCMREAD2 jsr READ\n\n*-------------------------------------------------\n*\n* READ/WRITE exit.\n*\nINCTRAK? bit command\n bcs WHOOP?\n\n* If bit 6 set, then inc track\n\n bvc ]rts\n inc track\n]rts rts\n\n* If bit 7 set then whoop speaker\n* WARNING:use only with READ\n\nWHOOP? bpl ]rts\n ldy #0\n:1 tya\n bit $C030\n:2 sec\n sbc #1\n bne :2\n dey\n bne :1\n beq CMREAD2\n\n*------------------------------------------------- CMwriteseq\n*------------------------------------------------- CMwritegroup\n*\n* Same as READ\n*\n\nCMwriteseq ldx #1\n hex 2C\nCMwritegroup ldx #18\n jsr CMADINFO\n jsr WRITE\n jmp INCTRAK?\n\n*------------------------------------------------- CMid\n*\n* Change offset based on ID\n*\n\nCMid jsr GETBYTE\n sta :IDmod+1\n\n ldy #-3\n:0 iny\n iny\n iny\n lda :IDlist,y\n beq :rts\n\n:IDmod cmp #$11\n bne :0\n\n lda :IDlist+1,y\n sta BOFFLO\n lda :IDlist+2,y\n sta BOFFHI\n\n:rts rts\n\n:IDlist db $A9\n dw 16 ;side one\n\n db $AD\n dw 16+315 ;side two\n\n db 0 ;end of list\n\n*------------------------------------------------- CMoffset\n*\n* Set new block offset\n*\n\nCMoffset jsr GETBYTE\n sta BOFFLO\n jsr GETBYTE\n sta BOFFHI\n rts\n\n*-------------------------------------------------\n*\n* Get buffer info.\n*\n\nCMADINFO stx temp\n ldx #0\n:0 jsr GETBYTE\n sta BUFTABLE,X\n inx\n cpx temp\n bcc :0\n tay\n\n* If sequence, then fill table\n\n:1 iny\n cpx #18\n beq :2\n tya\n sta BUFTABLE,X\n inx\n bne :1\n\n:2 rts\n\n*-------------------------------------------------\n*\nSKIP2 jsr GETBYTE\nSKIP1\n\nGETBYTE inc GOTBYTE+1\n bne GOTBYTE\n inc GOTBYTE+2\nGOTBYTE lda $FFFF\n rts\n\n*-------------------------------------------------\n\n sav rw1835\n\nZPAGSAVE ds $100\nBUFTABLE ds 18\n ds \\\nBLOCKBUF ds 512\n\n*-------------------------------------------------\n"
  },
  {
    "path": "03 Disk Protection/CUBE.S",
    "content": " lst off\n\n*------------------------------------------------- rotcube\n\nmainYoffset = 46 ;(192-60)/2\nbotYoffset = 72\nmainXoffset = 68 ;(280-144)/2\n\ncolor = $E4\npage = $E6\n\n dum 0\nindex ds 1\nysave ds 1\nyadd ds 1\nyoffset ds 1\n dend\n\n*-------------------------------------------------\n\nrotcube jsr $f3e2 ;hgr\n jsr $f3d8 ;hgr2\n\n lda #1\n sta yadd\n\n sta yoffset\n\n* Draw on page not showing:\n\nmainloop lda page\n eor #$60\n sta page\n ldx #$7F\n jsr draw\n\n* If not a //c, then wait for vbl\n\n lda $FBC0\n beq :is2c\n lda $C019\n bpl *-3\n lda $C019\n bmi *-3\n:is2c\n\n* Now display that page\n\n bit $C054\n lda page\n cmp #$20\n beq *+5\n bit $C055\n\n* Now erase old image from last page\n\n eor #$60\n sta :smc0+2\n sta :smc1+2\n ldx #$20\n lda #0\n:loop tay\n:smc0 sta $2000,y\n:smc1 sta $2080,y\n iny\n bpl :smc0\n inc :smc0+2\n inc :smc1+2\n dex\n bne :loop\n\n inc index\n jmp mainloop\n\n*-------------------------------------------------\n\ndraw stx color\n\n ldy #12-1\n:drawloop lda drawlist,y\n sty ysave\n\n pha\n and #15\n jsr getpoint\n\n tax\n tya\n ldy #0\n jsr $f457 ;plot\n\n pla\n lsr\n lsr\n lsr\n lsr\n jsr getpoint\n ldx #0\n jsr $f53a ;lineto\n\n ldy ysave\n dey\n bpl :drawloop\n\n lda yoffset\n clc\n adc yadd\n bne :not0\n\n inc yadd ;make +1\n inc yadd\n\n:not0 cmp #191-48-botYoffset\n bcc :0\n\n dec yadd ;make -1\n dec yadd\n\n:0 sta yoffset\n rts\n\n*-------------------------------------------------\n*\n* given a = point number, return a = xcoor, y = ycoor\n*\n\ngetpoint tay\n\n* Get index into tables\n\n asl ;*16\n asl\n asl\n asl\n adc index\n and #$3F\n tax\n tya\n\n and #4 ;bottom?\n cmp #4\n\n* Compute ycoor\n\n lda ydata,x\n bcc :not_bot\n adc #botYoffset-1\n\n:not_bot adc yoffset\n tay\n\n* Compute xcoor\n\n lda xdata,x\n adc #mainXoffset\n rts\n\n*-------------------------------------------------\n\ndrawlist hex 01122330 ;draw top\n hex 45566774 ;draw bottom\n hex 04152637 ;draw connecting lines\n\nxdata hex 908F8E8C8A87837F7A757069635C564F\n hex 484039332C261F1A15100C0805030100\n hex 0000010305080C10151A1F262C333940\n hex 474F565C636970757A7F83878A8C8E8F\n\nydata hex 181A1C1E21232527282A2B2D2E2E2F2F\n hex 2F2F2F2E2E2D2B2A28272523211E1C1A\n hex 181513110E0C0A080705040201010000\n hex 000000010102040507080A0C0E111315\n\n*-------------------------------------------------\n"
  },
  {
    "path": "03 Disk Protection/LOSHOW.S",
    "content": " lst off\n\n org $c00\n\n*-------------------------------------------------\n\n dum 0\ncurpage ds 1\nxsave ds 1\nysave ds 1\nasave ds 1\ntemp ds 1\ntmplo ds 1\ntmphi ds 1\nlevel ds 1\nisGS? ds 1\n dend\n\nframebase = $1000\n\n*------------------------------------------------- show\n*\n* put on the show!\n*\n\nshow bit $C010\n\n lda #0\n sta isGS?\n\n bit $C081\n sec\n jsr $fe1f ;GS?\n bcs :notGS\n\n inc isGS?\n\n* Use special show frame routine for //GS that\n* writes directly to bank $E0, since page two\n* text is not properly shadowed to that bank.\n\n ldx #$4C ;jmp\n ldy #GSshowframe\n lda #>GSshowframe\n stx showframe\n sty showframe+1\n sta showframe+2\n\n* Make our lookup tables up in ramcard area\n\n:notGS bit $C083\n bit $C083\n\n jsr MAKEfade_tbls\n\n jsr lgr\n\n:again\n\n ldx #0\n:fadein stx level\n lda #0\n jsr showframe\n ldx level\n inx\n cpx #15\n bcc :fadein\n\n* Here we go...\n\n lda #0\n:floop pha\n ldx #15\n jsr showframe\n pla\n clc\n adc #1\n cmp #23\n bcc :floop\n\n ldx #15\n:fadeout stx level\n lda #22\n jsr showframe\n ldx level\n dex\n bpl :fadeout\n\n bit $C000\n bpl *-3\n bit $C010\n\n jmp :again\n\n*------------------------------------------------- lgr\n*\n* Clear and display lo-resolution screen\n*\n\nlgr sta $C000 ;turn off 55.54 select\n sta $C00C ;40 columns\n bit $C052 ;full screen\n bit $C055 ;show page two\n bit $C056 ;lores\n bit $C050 ;graphics on\n\n lda #4 ;use page one next\n sta curpage\n\n ldy #0\n sty tmplo\n sta tmphi\n\n tya\n ldx #8\n\n:0 sta (tmplo),y\n iny\n bne :0\n\n inc tmphi\n dex\n bne :0\n\n rts\n\n*------------------------------------------------- loget\n*\n* Enter with a:frame number\n*            x:fade level\n*\n\nshowframe asl\n asl\n adc #>framebase\n sta :src+2 ;hi byte\n\n txa\n ora #>fade_table\n sta :fademod+2\n\n lda curpage\n sta :dst+2\n eor #4!8\n sta curpage\n\n lda #4\n sta temp\n\n ldx #0\n:loop\n:src ldy $1100,x\n:fademod lda fade_table+$F00,y\n:dst sta $0400,x\n inx\n bne :loop\n\n inc :src+2 ;hibyte\n inc :dst+2 ; \"  \"\n\n dec temp\n bne :loop\n\n]waitvbl jsr waitvbl\n\n bit $C055\n lda curpage\n cmp #4\n beq *+5\n bit $C054\n\n rts\n\nGSshowframe asl\n asl\n adc #>framebase\n sta :src+2 ;hi byte\n\n txa\n ora #>fade_table\n sta :fademod+2\n\n lda curpage\n sta :dst+2\n eor #4!8\n sta curpage\n\n lda #4\n sta temp\n\n ldx #0\n:loop\n:src ldy $1100,x\n:fademod lda fade_table+$F00,y\n:dst stal $E00400,x\n inx\n bne :loop\n\n inc :src+2 ;hibyte\n inc :dst+2 ; \"  \"\n\n dec temp\n bne :loop\n beq ]waitvbl\n\n*------------------------------------------------- waitvbl\n*\n* Wait for a few vbl's to go by!\n*\n\nwaitvbl ldx #6\n:0 bit $C019\n bpl :0\n:1 bit $C019\n bmi :1\n dex\n bne :0\n rts\n\n*------------------------------------------------- MAKEfade_tbls\n*\n* Make 16 lookup tables each containing 256 bytes\n* for the 16 levels of fade-in.\n*\n\nMAKEfade_tbls dum 0\n:curtmp ds 2 ;ptr into current tmp_scale table\n:curfade ds 2 ;ptr into current page of fade table\n:temp ds 1\n:ysave ds 1\n dend\n\n jsr MAKEtmp_scale\n\n ldy #tmp_scale\n lda #>tmp_scale\n sty :curtmp\n sta :curtmp+1\n\n ldy #fade_table\n lda #>fade_table\n sty :curfade\n sta :curfade+1\n\n* byte loop\n\n ldy #0\n\n:bloop tya\n and #$0F\n jsr :convert\n sta :temp\n\n tya\n lsr\n lsr\n lsr\n lsr\n jsr :convert\n asl\n asl\n asl\n asl\n ora :temp\n\n sta (:curfade),y\n\n iny\n bne :bloop\n\n* next fade table\n\n inc :curfade+1\n\n* next tmp table\n\n clc\n lda :curtmp\n adc #16\n sta :curtmp\n bcc :bloop\n\n rts\n\n* given a=0-15, in lores unsequential grey scale,\n* convert it back to sequential, lookup new value\n* in tmp_scale table and then convert back to\n* lores unsequential.\n\n:convert sty :ysave\n\n* Convert lores color back to sequential 00-0F\n\n tax\n lda :unlores,x\n\n* Scale it\n\n tay\n lda (:curtmp),y\n\n* Convert back to unsequential lores color\n\n tax\n lda isGS?\n beq :notGS\n lda :loresGS,x\n bra :isGS\n\n:notGS lda :lores2e,x\n\n:isGS ldy :ysave\n rts\n\n:unlores hex 000301070405020a\n hex 06080b0c090e0d0f\n\n:loresGS hex 0002060104050803\n hex 090c070a0b0e0d0f\n\n:lores2e hex 00000000\n hex 02020202\n hex 06060606\n hex 07070707\n\n*------------------------------------------------- MAKEtmp_scale\n*\n* Make lookup table that contains values\n* for 0-15 multiplied by 1/16...  16/16.\n*\n\nMAKEtmp_scale dum 0\n:color ds 1\n:scale ds 1\n dend\n\n lda #1 ;start with 1/16th\n sta :scale\n\n:sloop ldy #0\n:cloop sty :color\n lda #0\n ldx :scale\n:mloop clc\n adc :color\n dex\n bne :mloop\n lsr\n lsr\n lsr\n lsr\n:smc sta tmp_scale,y\n iny\n cpy #16\n bne :cloop\n inc :scale\n lda :smc+1\n clc\n adc #16\n sta :smc+1\n bcc :sloop\n rts\n\n*-------------------------------------------------\n\n dum $D000\nfade_table ds $1000\ntmp_scale ds $100\n dend\n\n*------------------------------------------------- EOF\n"
  },
  {
    "path": "03 Disk Protection/POPBOOT0.S",
    "content": "* boot\norg = $800\n lst off\n xc off\n\nREDFLAG79 = $23B ; in aux mem!\n\n*-------------------------------\n* $800 TS (0,0) boot sector\n\nSLOT = $2b\nsector = $50\n\ntext = $fb2f\nhome = $fc58\nvtab = $FB5B\ncout = $FDF0\nnormal = $fe84\npr0 = $fe93\nin0 = $fe89\n\n*-------------------------------\n\nsmclo = $4E\nsmchi = $4F\n\nrw18 = $d000\n\nslot = $fd\ntrack = $fe\nlastrack = $ff\n\n dum $00\n\ndest ds 2\nsource ds 2\nendsourc ds 2\n\n dend\n\n*-------------------------------------------------\n\n org org\n\n hex 01\n\nentry lda #$60\n sta entry\n\n lda #MAKEBIT\n sta smclo\n\n ldx #$ff\n stx $4fb\n stx $3f3\n stx $3f4\n stx $7831\n stx $c000 ;80store off\n stx $c002 ;RAMRD main\n stx $9fd8\n stx $c004 ;RAMWRT main\n stx $c00c ;80col off\n stx $c00e ;Altcharset off\n stx $c081 ;write RAM, read ROM (2nd 4k bank)\n txs\n jsr text\n jsr home\n jsr normal\n jsr pr0\n sta $DF35\n jsr in0\n stx $8492\n\n ldx SLOT\n txa\n lsr\n lsr\n lsr\n lsr\n ora #$c0\n sta :rdsect+2\n lda #$0f\n sta sector\n\n:0 ldy sector\n lda skewtbl,y\n sta $3d\n lda sectaddr,y\n beq :1\n sta $27\n\n inc $9fd8\n\n:rdsect jsr $005c\n:1 dec sector\n bne :0\n\n beq decode\n\nskewtbl hex 00,0d,0b,09,07,05,03,01\n hex 0e,0c,0a,08,06,04,02,0f\n\nsectaddr hex 00,09,0a,0b,00,0c,0d,0e\n hex 30,31,32,33,34,10,11,2f\n\ndecode ldx #14\n:loop lda sectaddr,x\n beq :nope\n\n sta :smc0+2\n sta :smc1+2\n\n ldy #0\n:loop1\n:smc0 lda $FF00,y\n eor $2F00,y\n:smc1 sta $FF00,y\n eor $7831 ;bogus garbage\n sta $7831 ; \" \"   \"   \"\n sta $3C\n iny\n bne :loop1\n\n:nope dex\n bpl :loop\n\n ldx SLOT\n\nstage2 stx slot\n\n jsr check128k ;check for 128K memory\n\n jsr moverw18 ;& move RW18 to D000\n\n lda #0\n sta lastrack\n\n jsr rw18\n hex 07,a9 ;Bbund ID byte\n\n jsr rw18\n hex 00,01,00 ;drive 1 on\n\n jsr rw18 ;seek track 1\n hex 02,00,01\n\n* load & run stage 3 boot\n* from drive 1\n\n jsr rw18\n hex c3,ee\n\n jmp $ee00\n\n*-------------------------------------------------\n* Check for AUX memory routine\n\nCHECKER lda #$EE\n sta $C005\n lda #>MAKEBIT\n sta smchi\n sta $C003\n sta $0800\n lda $0C00\n cmp #$EE\n bne :0\n asl $0C00\n lda $0800\n cmp $0C00\n beq :1\n:0 clc\n:1 sta $C004\n sta $C002\n rts\n\nCHECKEND = *-CHECKER\n\n*-------------------------------------------------\n*\n* Check to make sure //c or //e\n* with 128k\n*\n*-------------------------------\n\n hex 34\n hex 55\n hex 99\n\ncheck128k\n sta $c081\n\n lda $FBB3 ;Apple // family ID byte\n cmp #6\n bne NOT128K ;Must be e/c/GS\n\n bit $C017\n bmi NOT128K\n\n ldx #CHECKEND\n:0 lda CHECKER,X\n sta $180,X\n dex\n bpl :0\n\n jsr $180\n bcs NOT128K\n\n rts\n\n*-------------------------------\n* Turn off drive and display message\n\nNOT128K ldx SLOT\n lda $C088,X\n\n jsr text\n jsr home\n lda #8\n jsr vtab\n\n ldy #0\n:0 lda MEMTEXT,Y\n beq *\n jsr cout\n cmp #$8D\n bne :1\n lda #4\n sta $24\n:1 iny\n bne :0\n\nMEMTEXT hex 8D\n asc \"REQUIRES A //C OR //E WITH 128K\"\n hex 00\n\n*-------------------------------\n* Move RW18\n* d0 < 30.40\n*-------------------------------\nmoverw18\n bit $c08b\n bit $c08b ;rd/wrt RAM, 1st 4k bank\n\n lda #$d0\n ldx #$30\n ldy #$40\n\n* a < x.y\n* 20 < 40.60 means 2000 < 4000.5fffm\n* WARNING: If x >= y, routine will wipe out 64k\n\nmovemem sta dest+1\n stx source+1\n sty endsourc+1\n\n ldy #0\n lda #$24\n sta (smclo),y\n sty dest\n sty source\n sty endsourc\n\n:loop lda (source),y\n sta (dest),y\n\n iny\n bne :loop\n\n inc source+1\n inc dest+1\n\n lda source+1\n cmp endsourc+1\n bne :loop\n\nMAKEBIT rts\n hex FF\n\n*-------------------------------------------------\n*\n* HLS APPLE COPY PROTECTION\n* COPYRIGHT (C) 1987 HLS DUPLICATION\n*\n* CONTACT ROBERT FREEDMAN 408-773-1300\n* IF THERE ARE QUESTIONS ABOUT USE OF\n* THIS CODE\n*\n* EXIT clc IF A O K\n* sec IF PIRATE\n*\n*-------------------------------------------------\n\nOBJSCT = $07 ;PHYSICAL SECTOR #\n\n* ZERO PAGE\n*  IF THIS CONFLICTS WITH YOUR CODE\n*  CHANGE THE FOLLOWING ZERO PAGE\n*  LOCATIONS, OR USE THE SAVE ZERO\n*  PAGE ROUTINE\n\nHDRC = $F0\nHDRS = HDRC+1\nHDRT = HDRC+2\nHDRV = HDRC+3 HEADER SECTOR\nLSRETRY = HDRC+4 ;NIB READ RETRIES\nPRETRY = HDRC+5 ;OBJSCT RETRIES\nNPTR = HDRC+6\nNPTRH = HDRC+7\nMEM1 = HDRC+8\nMEM2 = HDRC+9\n\n*-------------------------------------------------\n\nCheckCP\n lda #10\n sta LSRETRY\n lda #>REDFLAG79\n sta smchi\n ldx SLOT\n lda $C089,X\n lda $C08E,X\n lda #:NIBS ; !!!!! LOW BYTE\n sta NPTR\n lda #>:NIBS ; !!!!! HIGH BYTE\n sta NPTRH\n:AGAIN lda #$80\n sta PRETRY\n:M1 dec PRETRY\n beq :LSFAIL\n jsr RADR16\n bcs :LSFAIL\n lda HDRS\n cmp #OBJSCT\n bne :M1\n\n ldy #0\n:M2 lda $C08C,X\n bpl :M2\n dey\n beq :LSFAIL\n cmp #$D5\n bne :M2\n ldy #0\n\n:M3 lda $C08C,X\n bpl :M3\n dey\n beq :LSFAIL\n cmp #$E7\n bne :M3\n\n:M4 lda $C08C,X\n bpl :M4\n cmp #$E7\n bne :LSFAIL\n\n:M5 lda $C08C,X\n bpl :M5\n cmp #$E7\n bne :LSFAIL\n\n lda $C08D,X\n ldy #$10\n bit $6 ;3 US. ( FOR //C)\n:M6 lda $C08C,X\n bpl :M6\n dey\n beq :LSFAIL\n cmp #$EE\n bne :M6\n\n* NOW AT 1/2 NIBBLES\n*\n* INSTEAD OF COMPARING AGAINST A TABLE\n* THE DATA READ FROM THE DISK CAN BE\n* USED IN YOUR PROGRAM.  BE CAREFUL\n* WHEN MODIFYING THIS PART OF THE CODE.\n* KEEP THE CYCLE COUNTS CONSTANT.\n\n ldy #7\n:M7 lda $C08C,X ; READ DISK DATA\n bpl :M7\n cmp (NPTR),Y ; COMPARE AGAINST TABLE\n bne :LSFAIL1\n dey\n bpl :M7\n bmi :GOOD\n\n:LSFAIL jmp :LSFAIL1\n\n* A O K\n\n:GOOD eor #$79!$FC\n iny\n ldx #6\n dex\n sta $C000,x\n sta (smclo),y\n dex\n sta $C000,x\n eor #$ED\n sta $239\n eor #$23\n sta $4E\n\n jmp yippee\n\n* FAILED, try again\n\n:LSFAIL1 ldy #-1\n tya\n dec LSRETRY\n beq :GOOD\n jmp :AGAIN\n\n:NIBS db $FC,$EE,$EE,$FC\n db $E7,$EE,$FC,$E7\n\n*-------------------------------------------------\n*\n* Read address mark\n*\n\nRADR16 ldy #$FD ;READ ADR HDR\n sty MEM1\n tya\n eor #REDFLAG79!$FD\n sta smclo\n:RA1 iny\n bne :RA2\n inc MEM1\n beq :RAEXIT\n:RA2 lda $C08C,X\n bpl :RA2\n:RA3 cmp #$D5\n bne :RA1\n nop\n:RA4 lda $C08C,X\n bpl :RA4\n cmp #$AA\n bne :RA3\n ldy #3\n:RA5 lda $C08C,X\n bpl :RA5\n cmp #$96\n bne :RA3\n lda #0\n:RA6 sta MEM2\n:RA7 lda $C08C,X\n bpl :RA7\n rol\n sta MEM1\n:RA8 lda $C08C,X\n bpl :RA8\n and MEM1\n sta HDRC,Y\n eor MEM2\n dey\n bpl :RA6\n tay\n nop\n clc\n rts\n\n:RAEXIT sec\n]rts rts\n\noscsh sec\n jsr $FE1F\n bcs *\n\n jsr $1000\n\n jmp ($FFFC)\n\n*-------------------------------------------------\n\nyippee ldx SLOT\n lda $C061\n bpl ]rts\n lda $C062\n bpl ]rts\n lda $C000\n bpl ]rts\n bit $C010\n sta :cmp+1\n\n ldy #-3\n:loop iny\n iny\n iny\n lda :dispatch,y\n beq ]rts\n:cmp cmp #$11\n bne :loop\n\n lda :dispatch+1,y\n sta 0\n lda :dispatch+2,y\n sta 1\n\n bit $C081\n lda $C088,x\n\n jmp (0)\n\n:dispatch hex FF\n da oscsh\n\n asc \"!\"\n da rcmess\n\n hex 8D\n da confusion\n\n asc \"@\"\n da rotcube\n\n asc \"^\"\n da drive\n\n db 0\n\n*-------------------------------------------------\n*\n* motorcycle disk drive\n*\n\ndrive lda $C089,x ;drive back on!\n\n:loop lda $C087,x\n lda $C080,x\n jsr :delay\n lda $C085,x\n lda $C086,x\n jsr :delay\n lda $C083,x\n lda $C084,x\n jsr :delay\n lda $C081,x\n lda $C082,x\n jsr :delay\n jmp :loop\n\n:delay lda #6\n sta 0\n\n:del2 bit $C070\n nop\n nop\n bit $C064\n bmi *-3\n\n dec 0\n bne :del2\n rts\n\n*------------------------------------------------- rotcube\n\nmainYoffset = 46 ;(192-60)/2\nbotYoffset = 72\nmainXoffset = 68 ;(280-144)/2\n\ncolor = $E4\npage = $E6\n\n dum 0\nindex ds 1\nysave ds 1\nyadd ds 1\nyoffset ds 1\n dend\n\n*-------------------------------------------------\n\nrotcube jsr $f3e2 ;hgr\n jsr $f3d8 ;hgr2\n\n lda #1\n sta yadd\n\n sta yoffset\n\n* Draw on page not showing:\n\nmainloop lda page\n eor #$60\n sta page\n ldx #$7F\n jsr draw\n\n* If not a //c, then wait for vbl\n\n lda $FBC0\n beq :is2c\n lda $C019\n bpl *-3\n lda $C019\n bmi *-3\n:is2c\n\n* Now display that page\n\n bit $C054\n lda page\n cmp #$20\n beq *+5\n bit $C055\n\n* Now erase old image from last page\n\n eor #$60\n sta :smc0+2\n sta :smc1+2\n ldx #$20\n lda #0\n:loop tay\n:smc0 sta $2000,y\n:smc1 sta $2080,y\n iny\n bpl :smc0\n inc :smc0+2\n inc :smc1+2\n dex\n bne :loop\n\n inc index\n jmp mainloop\n\n*-------------------------------------------------\n\ndraw stx color\n\n ldy #12-1\n:drawloop lda drawlist,y\n sty ysave\n\n pha\n and #15\n jsr getpoint\n\n tax\n tya\n ldy #0\n jsr $f457 ;plot\n\n pla\n lsr\n lsr\n lsr\n lsr\n jsr getpoint\n ldx #0\n jsr $f53a ;lineto\n\n ldy ysave\n dey\n bpl :drawloop\n\n lda yoffset\n clc\n adc yadd\n bne :not0\n\n inc yadd ;make +1\n inc yadd\n\n:not0 cmp #191-48-botYoffset\n bcc :0\n\n dec yadd ;make -1\n dec yadd\n\n:0 sta yoffset\n rts\n\n*-------------------------------------------------\n*\n* given a = point number, return a = xcoor, y = ycoor\n*\n\ngetpoint tay\n\n* Get index into tables\n\n asl ;*16\n asl\n asl\n asl\n adc index\n and #$3F\n tax\n tya\n\n and #4 ;bottom?\n cmp #4\n\n* Compute ycoor\n\n lda ydata,x\n bcc :not_bot\n adc #botYoffset-1\n\n:not_bot adc yoffset\n tay\n\n* Compute xcoor\n\n lda xdata,x\n adc #mainXoffset\n rts\n\n*-------------------------------------------------\n\ndrawlist hex 01122330 ;draw top\n hex 45566774 ;draw bottom\n hex 04152637 ;draw connecting lines\n\nxdata hex 908F8E8C8A87837F7A757069635C564F\n hex 484039332C261F1A15100C0805030100\n hex 0000010305080C10151A1F262C333940\n hex 474F565C636970757A7F83878A8C8E8F\n\nydata hex 181A1C1E21232527282A2B2D2E2E2F2F\n hex 2F2F2F2E2E2D2B2A28272523211E1C1A\n hex 181513110E0C0A080705040201010000\n hex 000000010102040507080A0C0E111315\n\n*------------------------------------------------- confusion\n\n dum 0\nxr ds 1\nyr ds 1\nrandseed ds 1\ntemp ds 1\n dend\n\nhgr2 = $F3D8\nplot = $F457\nhcolor = $F6F0\n\n* Confusion triangle\n\nconfusion lda #$7F\n sta $E4 ;hcolor=3\n\n jsr hgr2\n\n* xr=xarray(0), yr=yarray(0)\n\n ldx xarray\n ldy yarray\n stx xr\n sty yr\n\n* Plot that dot\n\n:loop lda $C000\n bpl :nokey\n bit $C010\n cmp #$E0\n bcc *+4\n and #$DF\n cmp #\"C\"\n bne :nokey\n\n:randcol jsr getrandcol\n sta temp\n jsr $F3F4 ;clear to that color\n\n:randloop jsr getrandcol\n tax\n eor temp\n bmi :randloop ;different hi bits\n cpx temp ;same color\n beq :randloop\n\n:nokey ldy #0\n lda xr\n asl\n tax\n bcc :skip\n iny\n:skip lda yr\n jsr plot\n\n lda yr\n ldx $E0\n ldy $E1\n inx\n bne *+3\n iny\n jsr plot\n\n* Get a random number between 0-2\n\n jsr random\n sec\n:sub30 sbc #30\n bcs :sub30\n adc #30\n sec\n:sub3 sbc #3\n bcs :sub3\n adc #3\n tax\n\n*-----------\n* xr stuff:\n* determine which midpoint routine to use\n\n lda xarray,x\n cmp xr\n bge :xarr_xr\n\n* If xarray(rand) < xr then:\n* xr = xarray + ( xr - xarray) / 2\n\n lda xr\n sec\n sbc xarray,x\n lsr\n clc\n adc xarray,x\n jmp :sta_xr\n\n* If xarray(rand) >= xr then:\n* xr = xr + ( xarray - xr ) / 2\n\n:xarr_xr lda xarray,x\n sec\n sbc xr\n lsr\n clc\n adc xr\n:sta_xr sta xr\n\n*-----------\n* yr stuff:\n* determine which midpoint routine to use\n\n lda yarray,x\n cmp yr\n bge :yarr_yr\n\n* If yarray(rand) < yr then:\n* yr = yarray + ( yr - yarray) / 2\n\n lda yr\n sec\n sbc yarray,x\n lsr\n clc\n adc yarray,x\n jmp :sta_yr\n\n* If yarray(rand) >= yr then:\n* yr = yr + ( yarray - yr ) / 2\n\n:yarr_yr lda yarray,x\n sec\n sbc yr\n lsr\n clc\n adc yr\n:sta_yr sta yr\n\n jmp :loop\n\nxarray db 70,139,0\nyarray db 0,191,191\n\nrandom lda randseed\n adc #$23\n sta randseed\n eor $C020 ;a little randomness\n rts\n\ngetrandcol jsr random\n and #7\n tax\n jmp hcolor\n\n*------------------------------------------------- rcmess\n\nrcmess ldy #0\n:0 lda :text,y\n beq :lores\n jsr $FDF0\n iny\n bne :0\n\n:lores bit $c000\n bpl :lores\n\n sta $c00d ;80 col\n sta $c001 ;80 store\n bit $c056\n bit $c052\n bit $c050\n bit $c05e ;merez\n\n:loop lda #$FF\n jsr :random\n sta $30 ;color\n\n lda #80 ;max x\n jsr :random\n lsr\n tay\n bit $c054\n bcs *+5\n bit $c055\n\n lda #48 ;max y\n jsr :random\n\n jsr $F800 ;plot\n\n jmp :loop\n\n:random sta 1\n\n lda 0\n adc #$23\n sta 0\n eor $C020\n\n cmp 1\n bcc :ok\n:loop2 sbc 1\n bcs :loop2\n adc 1\n\n:ok rts\n\n:text hex 8d8d\n asc \"8/25/89\",8d8d8d\n asc \"Robert!\",8d8d8d\n asc \"Jordan and Roland wish you the very\",8d8d\n asc \"Brightest College Years.\",8d8d8d8d8d\n asc \"  meres !\",8d,8d\n asc \"    meres !\",8d,8d\n asc \"      meres !\"\n brk\n\n*------------------------------------------------- EOF\n\n lst on\n da *\n lst off\n"
  },
  {
    "path": "03 Disk Protection/PURPLE.MAIN.S",
    "content": "* purple.main\n\n lst off\n\n* The job of this routine is to set $DA to $01\n*                                ( in aux-zpage!!! )\n\nslot = $FD\n\n*-------------------------------------------------\n*\n* HLS APPLE COPY PROTECTION\n* COPYRIGHT (C) 1987 HLS DUPLICATION\n*\n* HLS 408-773-1500\n*\n* Modified by Roland Gustafsson 8/25/89\n* for Prince of Persia copy protection.\n*\n*-------------------------------------------------\n\n* ZERO PAGE\n\nOBJSCT = $07 ;PHYSICAL SECTOR #\n\nHDRC = $40\nHDRS = HDRC+1\nHDRT = HDRC+2\nHDRV = HDRC+3 HEADER SECTOR\nLSRETRY = HDRC+4 ;NIB READ RETRIES\nPRETRY = HDRC+5 ;OBJSCT RETRIES\nNPTR = HDRC+6\nNPTRH = HDRC+7\nMEM1 = HDRC+8\nMEM2 = HDRC+9\n\nzpage = HDRC\nzpagelen = 13\n\n*-------------------------------------------------\n*\n* Here is the code that ends up at $6321.\n* Assemble it and run \"make.purple.hex\" which\n* reverses the code and puts it in a text file.\n*\n*-------------------------------------------------\n\n org $2000\n\n da len6321\n\n dum $6254\nzpagebuf ds zpagelen\n dend\n\n org $6321\n\nstrt6321 jsr swapzpage\n lda #10\n sta LSRETRY\n ldx slot\n lda $C089,X\n lda $C08E,X\n lda #:NIBS ; !!!!! LOW BYTE\n sta NPTR\n lda #>:NIBS ; !!!!! HIGH BYTE\n sta NPTRH\n:AGAIN lda #$80\n sta PRETRY\n:M1 dec PRETRY\n beq :LSFAIL\n jsr RADR16\n bcs :LSFAIL\n lda HDRS\n cmp #OBJSCT\n bne :M1\n\n ldy #0\n:M2 lda $C08C,X\n bpl :M2\n dey\n beq :LSFAIL\n cmp #$D5\n bne :M2\n ldy #0\n\n:M3 lda $C08C,X\n bpl :M3\n dey\n beq :LSFAIL\n cmp #$E7\n bne :M3\n\n:M4 lda $C08C,X\n bpl :M4\n cmp #$E7\n bne :LSFAIL\n\n:M5 lda $C08C,X\n bpl :M5\n cmp #$E7\n bne :LSFAIL\n\n lda $C08D,X\n ldy #$10\n bit $6 ;3 US. ( FOR //C)\n:M6 lda $C08C,X\n bpl :M6\n dey\n beq :LSFAIL\n cmp #$EE\n bne :M6\n\n* NOW AT 1/2 NIBBLES\n\n ldy #7\n:M7 lda $C08C,X * READ DISK DATA\n bpl :M7\n cmp (NPTR),Y * COMPARE AGAINST TABLE\n bne :LSFAIL\n dey\n bpl :M7\n bmi :GOOD\n:LSFAIL jmp :LSFAIL1\n\n* A O K\n\n:GOOD jsr swapzpage\n lda #0\n sta $C009-zpagelen,x\n rol\n sta $DA-zpagelen,x\n sta $C008-zpagelen,x\n clc\n rts\n\n* FAILED\n\n:LSFAIL1 dec LSRETRY\n beq :ERROR\n jmp :AGAIN\n\n:NIBS db $FC,$EE,$EE,$FC\n db $E7,$EE,$FC,$E7\n\n* Note that drive motor is still on\n\n:ERROR\nswapzpage ldx #0\n:0 ldy zpagebuf,x\n lda zpage,x\n sty zpage,x\n sta zpagebuf,x\n inx\n cpx #zpagelen\n bne :0\n rts\n\n*-------------------------------------------------\n*\n* Read address mark\n*\n\nRADR16 ldy #$FD ;READ ADR HDR\n sty MEM1\n:RA1 iny\n bne :RA2\n inc MEM1\n beq :RAEXIT\n:RA2 lda $C08C,X\n bpl :RA2\n:RA3 cmp #$D5\n bne :RA1\n nop\n:RA4 lda $C08C,X\n bpl :RA4\n cmp #$AA\n bne :RA3\n ldy #3\n:RA5 lda $C08C,X\n bpl :RA5\n cmp #$96\n bne :RA3\n lda #0\n:RA6 sta MEM2\n:RA7 lda $C08C,X\n bpl :RA7\n rol\n sta MEM1\n:RA8 lda $C08C,X\n bpl :RA8\n and MEM1\n sta HDRC,Y\n eor MEM2\n dey\n bpl :RA6\n tay\n nop\n clc\n rts\n\n:RAEXIT sec\n rts\n\nlen6321 = *-strt6321\n\n org\n\n*------------------------------------------------- EOF\n\n sav purple.main\n"
  },
  {
    "path": "03 Disk Protection/RYELLOW1.S",
    "content": "* Ryellow1 (put this file!!!)\n\n* This code sets the high bit of $7C in aux mem\n* if signature is found on track zero.\n\n* NOTE: make sure the x register has a number\n* greater than 4 when calling YELLOW.\n\nYELLrun = $AAAA\n\nYELLOW\n:0 sec\n rol\n clc\n rol\n dex\n bne :0\n sta 4\n\n jsr YELLsub\n jmp YELLnothing\n\n*-------------------------------------------------\n\nYELLcode\n hex 27A26A0C5717236A8AAD0603AA8A3401\n hex 03A02F9E0C5717246A03012F9D03E92F\n hex 9C032A2F9F6C9F5AF68AF8011AFD0F9B\n hex 63AD7A5B0AAA17266ABA51225AED637F\n hex 7A5E0AAA17266ABA51225A93634D7A5E\n hex 17266ABA51634D7A8617266ABA51634D\n hex 7A8917276A0ABA8EAC17266ABA51225A\n hex BE63447A5E0AAD17266ABA517B9C7AAF\n hex 22BA5E9AA9E696018AAD06374215DCF1\n hex B2CA6C9E5AA1E66100564444564D4456\n hex 4D8AAD06374215CA0A572E92627AAE4C\n hex 925A9717266ABA51637F7A5A4017266A\n hex BA5163007A580AA917266ABA51633C7A\n hex 4D03AA2F9317266ABA51802F9217266A\n hex BA518F92339AAAEF9322BA4D0240B2CA\n hex 92CA03AE27620E6F555AFC03AA27670E\n hex 0F55276F0E9247620E5A9F1AACE3554C\n hex 553AAEC3546C5567670E3AA907670E63\n hex A61AAB02928A440113B3068A5601076F\n hex 0EB28A5A01138F068A560144670E7A6A\n hex 8A5601B20F5583A980AF5700172A6A0C\n hex 57CA08B8607A579243AB7A5CCA08AA16\n hex 0E0E1F9A3E9A370E0E424A8B7A5BCAAB\n hex 9A828E8AB4B7B6B6B6B6B6DA868C88B5\n hex B4B7B6B6B6B6B655A9\n\n*-------------------------------------------------\n\nYELLlen = *-YELLcode\n\n* Routine to decode code\n\n hex 20 ;jsr\n\nYELLsub sta 5\n ldy #0\n:0 lda YELLcode,y\n eor 4\n sta (4),y\n inc 5\n lda YELLcode+256,y\n eor 4\n sta (4),y\n dec 5\n iny\n bne :0\n lda 4\n eor #$4C!$AA ;jmp instruction\n sta 3\n jmp 3\n\n*-------------------------------------------------\n\n hex a9 ;lda #imm\n\nYELLnothing ldy #0\n inc 5\n:0 tya\n:1 sta (4),y\n iny\n bne :1\n rts\n\n\n*------------------------------------------------- EOF\n"
  },
  {
    "path": "03 Disk Protection/UPDATE.LS.S",
    "content": " lst off\n\n org $300\n\n*\n* loresshow:0C00.0FFF ($400)\n* framedata:1000.6BFF ($5C00)\n*\n* buffer18 :6C00.7DFF ($1200 one track)\n* rw18.d000:7E00.82FF ($500 moved to aux ramcard)\n*\n\nBbundID = $AD\n\nloresshow = $c00\nbuffer18 = $6c00\n\nrw18 = $d000\nrw18temp = $7e00\n\nslot = $FD\ntrack = $FE\nlastrack = $FF\n\nstartrack = 12 ;last 6 sectors here\n\n* 13,14,15,16,17 (5 full tracks here)\n\nerrcode = 0\n\nstart jsr $e74c ;get slot#\n txa\n asl\n asl\n asl\n asl\n\n sta $C009 ;aux zpage, ramcard\n sta slot\n\n bit $C083\n bit $C083\n\n* Move rw18 to its home\n\n ldx #>rw18temp\n ldy #>rw18\n lda #5\n jsr movedata\n\n* Now we can use rw18\n\n jsr rw18\n db 7,BbundID\n\n jsr rw18\n db 0,5,1 ;drive on\n\n jsr rw18 ;seek to startrack\n db 2,1,startrack\n\n* handle special track with\n\n jsr rw18\n db 3 ;read in original data\n db >buffer18\n lda #1\n bcs :error\n\n* update last 6 sectors\n\n ldx #>loresshow\n ldy #>buffer18+$C00\n lda #6\n jsr movedata\n\n* write it back out\n\n jsr rw18\n db 5 ;writesequ\n db >buffer18\n lda #2\n bcs :error\n\n* write out rest of data...\n\n lda #>loresshow+$600\n:wloop sta :buf\n\n inc track\n\n jsr rw18\n db 5 ;writesequ\n:buf db $11\n lda #2\n bcs :error\n\n lda :buf\n adc #$12\n cmp #>loresshow+$600+{5*$1200}\n bne :wloop\n\n lda #0\n\n:error pha\n jsr rw18\n db 1 ;drive off\n pla\n\n sta $C008\n bit $C081\n sta errcode\n rts\n\n*------------------------------------------------- movedata\n*\n* Move data: x:source, y:dest, a:length\n*\n\nmovedata stx :src+2\n sty :dst+2\n tax\n\n ldy #0\n:loop\n:src lda $1100,y\n:dst sta $1100,y\n iny\n bne :loop\n\n inc :src+2\n inc :dst+2\n\n dex\n bne :loop\n\n rts\n\n*------------------------------------------------- EOF\n"
  },
  {
    "path": "03 Disk Protection/YELLOW.MAIN.S",
    "content": "* yellow.main\n lst off\n\n* The job of this routine is to\n* set the high-bit of $7C in aux zpage.\n* (It does it by rotating in a carry set)\n\nslot = $fd\nlastrack = $ff\n\n*-------------------------------------------------\n*\n* HLS APPLE COPY PROTECTION\n* COPYRIGHT (C) 1987 HLS DUPLICATION\n*\n* Modified by Roland Gustafsson 8/25/89\n* for Prince of Persia copy protection.\n*\n*-------------------------------------------------\n\nOBJSCT = $07 ;PHYSICAL SECTOR #\n\n* ZERO PAGE\n\nHDRC = $30\nHDRS = HDRC+1\nHDRT = HDRC+2\nHDRV = HDRC+3 HEADER SECTOR\nLSRETRY = HDRC+4 ;NIB READ RETRIES\nPRETRY = HDRC+5 ;OBJSCT RETRIES\nNPTR = HDRC+6\nNPTRH = HDRC+7\nMEM1 = HDRC+8\nMEM2 = HDRC+9\n\nzpage = HDRC\nzpagelen = 33 ;arbitrarily long (only needs 10)\n\n*-------------------------------------------------\n\n* Jordan says: use $A400-ABFF\n* Roland says: OK\n\norgCHECK = $AAAA ;must be highbyte=lowbyte\n\n org $2000\n\n da lenCHECK\n\n dum $A4A4\nzpagebuf ds zpagelen\nwas27 ds 3 ;should be 1 !!!\nwas2A ds 5 ; ditto\nwas26 ds 7 ; ditto again\n dend\n\n org orgCHECK\n\n*-------------------------------------------------\n\nstart sta $C008 ;switch to main zpage\n\n ldx slot\n lda $C089,x ;drive on\n\n jsr swapzpage\n\n* First seek track zero\n\n lda #0\n jsr SEEK\n\n* Now check signature\n\n lda #10\n sta LSRETRY\n ldx slot\n lda $C08E,X\n lda #>:NIBS\n sta NPTRH\n lda #:NIBS\n sta NPTR\n\n:AGAIN lda #$80\n sta PRETRY\n:M1 dec PRETRY\n beq :LSFAIL\n jsr RADR16\n bcs :LSFAIL\n lda HDRS\n cmp #OBJSCT\n bne :M1\n\n ldy #0\n:M2 lda $C08C,X\n bpl :M2\n dey\n beq :LSFAIL\n cmp #$D5\n bne :M2\n ldy #0\n\n:M3 lda $C08C,X\n bpl :M3\n dey\n beq :LSFAIL\n cmp #$E7\n bne :M3\n\n:M4 lda $C08C,X\n bpl :M4\n cmp #$E7\n bne :LSFAIL\n\n:M5 lda $C08C,X\n bpl :M5\n cmp #$E7\n bne :LSFAIL\n\n lda $C08D,X\n ldy #$10\n bit $6 ;3 US. ( FOR //C)\n:M6 lda $C08C,X\n bpl :M6\n dey\n beq :LSFAIL\n cmp #$EE\n bne :M6\n\n* NOW AT 1/2 NIBBLES\n\n ldy #7\n:M7 lda $C08C,X * READ DISK DATA\n bpl :M7\n cmp (NPTR),Y * COMPARE AGAINST TABLE\n bne :LSFAIL\n dey\n bpl :M7\n bmi :GOOD\n:LSFAIL jmp :LSFAIL1\n\n* A O K\n\n:GOOD jsr swapzpage\n sta $C009-zpagelen,x\n ror $7C-zpagelen,x\n clc\n rts\n\n* FAILED\n\n:LSFAIL1 dec LSRETRY\n beq :ERROR\n jmp :AGAIN\n\n:NIBS db $FC,$EE,$EE,$FC\n db $E7,$EE,$FC,$E7\n\n:ERROR jsr swapzpage\n sta $C009-zpagelen,x\n rts\n\n*-------------------------------------------------\n*\n* Read address mark\n*\n\nRADR16 ldy #$FD\n sty MEM1\n:RA1 iny\n bne :RA2\n inc MEM1\n beq :RAEXIT\n:RA2 lda $C08C,X\n bpl :RA2\n:RA3 cmp #$D5\n bne :RA1\n nop\n:RA4 lda $C08C,X\n bpl :RA4\n cmp #$AA\n bne :RA3\n ldy #3\n:RA5 lda $C08C,X\n bpl :RA5\n cmp #$96\n bne :RA3\n lda #0\n:RA6 sta MEM2\n:RA7 lda $C08C,X\n bpl :RA7\n rol\n sta MEM1\n:RA8 lda $C08C,X\n bpl :RA8\n and MEM1\n sta HDRC,Y\n eor MEM2\n dey\n bpl :RA6\n tay\n nop\n clc\n rts\n\n:RAEXIT sec\n rts\n\n*-------------------------------------------------\n*\n* SEEK, a - track\n*\n\nSEEK4 lda #4\nSEEK sta was2A\n cmp lastrack\n beq :RTS0\n lda #0\n sta was26\n:MOVEHEAD lda lastrack\n sta was27\n sec\n sbc was2A\n beq :ISTHERE\n bcs :T0\n eor #$FF\n inc lastrack\n bcc :T1\n:T0 adc #$FE\n dec lastrack\n:T1 cmp was26\n bcc :T2\n lda was26\n:T2 cmp #$C\n bcs :T3\n tay\n:T3 sec\n jsr :CHKPOS\n lda ONTBL,Y\n jsr :MSWAIT\n lda was27\n clc\n jsr :CHKPOS2\n lda OFFTBL,Y\n jsr :MSWAIT\n inc was26\n bne :MOVEHEAD\n:ISTHERE jsr :MSWAIT\n clc\n:CHKPOS lda lastrack\n:CHKPOS2 and #3\n rol\n ora slot\n tax\n lda $C080,X\n ldx slot\n:RTS0 rts\n\n:MSWAIT ldx #$12\n:T21 dex\n bne :T21\n sec\n sbc #1\n bne :MSWAIT\n rts\n\n*-------------------------------------------------\n\nswapzpage ldx #0\n:0 ldy zpagebuf,x\n lda zpage,x\n sty zpage,x\n sta zpagebuf,x\n inx\n cpx #zpagelen\n bne :0\n rts\n\n*-------------------------------------------------\n\nONTBL db $01,$30,$28,$24,$20,$1E,$1D,$1C,$1C,$1C,$1C,$1C\nOFFTBL db $70,$2C,$26,$22,$1F,$1E,$1D,$1C,$1C,$1C,$1C,$1C,$FF,$03\n\n*-------------------------------------------------\nlenCHECK = *-orgCHECK\n\n org\n\n*------------------------------------------------- EOF\n\n sav yellow.main\n"
  },
  {
    "path": "04 Support/DRAZ/F/DBS",
    "content": "　@@AABBCCȑǱȑDD珎였ߟر였رEEǟǟ였FF㟞였珳揀ϟ̟߱ǟGGǏ珀ϏጀߟǱϱ瘀𰆀ƍHH䀀은Ɓ́ㆀرƁ́ᆀ은䀀䀀س挀II䀀ͱ́䀀은JJ䀀은옳㰘ƌر윃΁Ι䀀ƍ昛KK̙Á옳「ؙ̍ƙ㌀ƀ́ᆀƍ̱ƍÁسر쌀رƍϱLL쟀ƁƟر쟀ƁƱƁ㰌طMMر쀀؟Ɓ쟀́NN쟀옒㰌رƽޙƁƍƱOOرÁƍر「ȌرƙƄ΀ƟرƍÁطر㌌ƍ뀀رƁPP߿ϟ쟀ƁϱƁؿƁQQ怀瘰Ɓ쟀ƟƁRR옞عρƁƍϿΏSSÁƍϱܱƙƇرϿÁؿر㌌ダƃ̘　رƁ욀TTرر욀ƁرƁؽƁ߱UU㘰Ɓ욀ñƁ욀VV쏌؏탰ƁƁÁرWWÁؿǱ򁀀߿رƍÁؽرÁ߿　̀였XXرƁررƁ였̀̀㰌ع挀Ɓر̀رYYɱ̀였Ɓñ̀였ZZ쀌؝̓́؃Ɓ̀ƍƙƁ̙[[ÁƙرΙرƁررƍÁعۃر쎀ÁϏ瘀\\\\رϏ瘀㰌ϱϏ]]瘀瘀^^瀌񛆃Ϲƍ̟߱ΟǏ__󇃀ϱ܏رϱϱ眀Á"
  },
  {
    "path": "04 Support/DRAZ/F/IMG.ALPHA",
    "content": "+Y`b`k`t`}````````````````````\ba\u0011a\u001aa#a,a5aEaNaWa`aiara{aaaaaaaa\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007྆\u0001\u0007澆\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\b椼\u0001\u0007\u0001\u0007憆\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007涞\u0001\u0007\u0002\u0007ƁƁցƁ\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007涞\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0002\u0007ƁցƁƁ\u0001\u0007漘\u0001\u0007\u0001\u0007"
  },
  {
    "path": "04 Support/DRAZ/F/IMG.CHTAB5",
    "content": "-]``a{bVc$ddue\u0007ffng\bhh\\i6j\u0010k\u0013kkol\u0005mWmm+nn\u001boo\u0012plppOqqUrrUsssOtt]u\u0003vQvvv5www\u0004\"ß🀀🀀𕀀׀׀ꕀꅀꁀ\u0005&ÿծծՀ׀ꃀ\u0006#㟀ժݟ׏ՏՂՂ\u0007\u001f🀀뀀🀀պЪ݂ݪݪ\u0006\"뀾🀀׊ׂ׀\u0005%ៀ󏀀߆݆߂߂߀߀🀀🀀\u0004%ǟ⁀࿀࿀\u0004$ׁׁ׀߀߀߂߂׀Հ땀ꅀʇ࿀࿀\u0005\"࿀ի\u0005%߿߿࿀ീ򵀀׀׀蕀ꇀꀀ\u0004&Ճׂׂ߂굀ЂԀ\u0004'𿀀𿀀𿀀Ձ׀׀߀Հ\u0005$຅຅к򁀀Ў\u0006$࿀Ъી寀𫀀Ћԏԁԃ\u0006$܇𿀀ீீ𯁀߿߯֫֫Ջ\u0001\u0001\u0006\"ǟժݿןՏՂՂ\u0004#߆߂݂݂݊\u0004%ՁՁպ׀պ׀׀߀\u0004\u0014ǁիկ\u0004\u0018ダ뿀ի돾Ͽ\u0004\u001c࿀࿀🀀ԏ׏ׇ\u0004 𿀀🀀𿀀냸냰끠\u0003$Ппؚݎ݆݂\u0003(຀ເીீீીીՊՏՁ\u0003)؎؞ЏԆՆՎ׏ׇ\u0002,࿀ߟ\u0002,Пк\u0003-ӀÀÀ׀׀׀🀠􁠰\u0003-࿀׀ǀÀǂǂ߂׀׀׀ՇՃу\u0003)࿀ӀÀÀÀǂςς߀׀׀ՇՇԁ\u0003+࿀Àǀǀǂ߂߂߂݀ԏԞԞԞԚЀ\u0003)ррÂÂǂς߂׀׀׀ׁՏՏԎԆЀ\u0003*ς߂߀׀׀ׇߟ֞ԞԚԂЀ\u0001\u0001\u0003'߀߂\u0003&࿀࿀࿀оվ຀ЎООЏ\u0004&ǟǏ珀㇀пտŻЀޞ\u0004)࿀࿀࿀࿀𿀀𿀠𺕊кЂЂЇ\u0002&\u0002!\u0003\u001e菀\u0003\u0016՟׾׾ԿԿ臀\u0005\u0011ગ׀׀πÂ\u0006\u0010ՀՂ͊ʏꏠꏠ"
  },
  {
    "path": "04 Support/DRAZ/F/IMG.CHTABLE4",
    "content": "\u0013)``awbRc&dde\u0016ffgEhhijkkDl\u0018mmm\u0005\"ß🀠߀߀߀ꇀꃀꁀ\u0006#࿀瀀🀀🀀🀀ԪԪ\u0006\"࿀𿀀󏀀߀߀ꟀꟀꏀ\u0007\u001f🀀ρժ߀\u0006#𿀀վԞԎԯկի\u0005&🀟Ǐׇއ܆܂߂߂߀߀🀀🀀\u0004&ꏀꏀ뇀녀녀࿀࿀\u0004%𿾀݀݀߀ꀀꁀ\u0006!🀀𿀀烀տտկЂկ\u0005$蠀ßǟϏ࿏ꇀꁀꀀ\u0005#胀𿟀ԪЪ\u0005#ߟ߀߀𸍀РШЪꃀ\u0005%ꗀꗀꗀꀀꁀ\u0006$ꃀꁀ끀࿀࿀\u0006%🀀𿀀𿀀՟ԿппЮخ؎ЇԀԁԃ\u0005+󏀀׀ςЀЀ\u0006#🀀࿀񏀀χ࿁࿁𿁀𿁀𿁀ԿտՏцЊԀ\u0005#ԀԪտԿԿԁԃ\u0001\u0001\u0004$׃ׁ׀߀߀߂߂׀Հ땀ꅀʇ࿀࿀\u0004%ՁՁպ׀պ׀׀߀\u0004&Ճׂׂ߂굀ЂԀ\u0004*𿀀𿀀𿀀Ձ׀׀߀\u0005&🀀߿ծծՀ׀ꁀ\u0006\"ǟժߟןՏՂՂ\u0005#㏀ի\u0005%࿀࿀ЪՀ׀蕀ꇀꀀ\u0004$ß🀀׀׀ԾՀԸꁀ\u0007\u001fպЪ݂ݪݪ"
  },
  {
    "path": "04 Support/DRAZ/F/IMG.CHTABLE4.W",
    "content": "\u0014+``aa/b\nccd$eeDffg\u0016hhxi3j\u0007kkl$nn\u0004\"ß🀀\u0005\"\u0006\"࿀𿀀󏀀\u0007\u001f\u0006\"ߏ\u0005$🀟Ǉ🀀\u0004%ϟ🀀\u0004$\u0004#𿀀\u0005$\u0004#\u0004#\u0005\"\u0005$\u0005%࿀ߟ񇀀\u0006#\u0005#\u0007,࿀࿀࿀🀀񇀀ເ࿀ྀ\u0007,🀀𸀀𼀀\u0006$ϟߏ"
  },
  {
    "path": "04 Support/DRAZ/F/IMG.TEXTSET",
    "content": "+Y`b`k`t`}````````````````````\u0007a\u0010a\u0019a\"a+a4aDaMaVa_ahaqazaaaaaaaa\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007྆\u0001\u0007澆\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0007椼\u0001\u0007\u0001\u0007憆\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007涞\u0001\u0007\u0002\u0007ƁƁցƁ\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007涞\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0002\u0007ƁցƁƁ\u0001\u0007漘\u0001\u0007\u0001\u0007"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.ADVANCE",
    "content": "(\r1c&\u0001\u001fe\u0006%\u0001\u0006\u0015d\u000b\u0001\u0004\u0017\u0006\u0005\u0004\u0004d\u000e\u0007\u0002\u0001\u0011\u0004\u0005\u0002Ϗǜ\u00054.\u0011\u0004\n\u000b\u000b3/\t\u0005\u001d%6\u0001,\n0\u0004\rc4\r\t6,4\u0005\u0001\n\u0006c?\u0005\u00065-;\b\u0001\u0003\u000bd5\u001dd4\u0001 3-\u0007\u0001*\u0001\u0004\u0004\f6-\u000b\u0001\b\u001f\u0004\u0001\u0001\u0007\u0004\u00065˃,\u000e\u0004\u0004\b\u0004\u0001\u0006\rc\u0011\u0004\u0002\b\u0012\u000f6-\u0006\u0005\u0004#\b\r5,\u0006*\t\f6,6\u0007𼾟\u00075,;\u0007\u0006d>\b\u0001\u0005\u0004\u0005dV\u0002d[e[e\u0005\u0001$!e\n\u0002ߟ\u0004\u000e\u0001\u0004\u0006\u0004\u0005e\u0004\u0007\u0002ꪨ\u0011\u0006\u0003\u0001\u0004e\u0004\u0001\u0006\u0005\u001a\u0004ԅ\u000b7-2\u0005\u0004\u000e𰸜7-Y7,\\d\\d\\d\\3\u0004'\\9'\\d\\3"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.BASIL",
    "content": "$\u00047G4@H6\u000f\b\u000f\u001406\u0001%'\u0004\u00116Հ)\u0005Օ\u0004\u0015\u0005\bՕ՝\u0004\b6#\u0004\u0001ꪫ\u0004\r\u0004ࠠ\u0002\b6\u0006\u0007\u000f\u0006\u0004\f\u0001\u0006\u0007\u00106\u0006\u0004\u0007\u0004\nՕ\u0012\u0013\u00146Հ\u000f\u0007\u0015\u0014\u0014\u0001\u00146\u0001$.\u0015\u00136ՀX\u0016\u00126F\u0015(6-\u0018\u0014Հ\"6-.!\t\u000b+Հ#Հ&Հ\u0001\u000e\u00136\u0006\u0004ח\u000f\u0005ꊂ\b\u0016\u0004֖\u0005ۺ\u0005\t6ՀꨮԊ\u0007\u0004Օ\u0013Ձꪫ\u0004\b6\u0001\u0004\u0005\n\b\u0004\u0005\u0004հ쪫ꊃ\u0010\u0004\u0004\r6-՟\u0004ꨬ\u0007\u000f\u0012\u0004\u00146\u0011\u001b\u0014\u000e\u0004*6\u0010\u001b\u0019\u001d\u00186\u0012\u001a\u001a=6\u000f\u001a\u001b55J5\u00035Հ\u0001P+5\u0006ຨϮ\u0004(\u0004+5ՃҒꪨ\u0004Ъ\u0007Հ\u0001&Ԁ\u0001$5\u0001\b\u0018\u0006Ԕ\u0005\u0018\u0004ꪪ\u0005\u00101\u0004,\u0004\u0006\u0014\u0007\u00071\u0007,\u0004\u0006ןԏ닁\u0004\f\u0005耀լ\b1\u0006,Ճ\u0004訨\u0004\f\u0005\b\u00116\u0015\u0017@\u00136\u0016\u0014E\u0005\f6\u001a%G6\r\u0004\u0004\u0004\u0017H6\u0007\u0001>\u0001%6Հ\u0001\u001c\u00045\u0001\u0005ߗ\u0005\f4߿%1\u0007ß\u0001\u0001\u000b\u0015\u001c\u0006:\u001c\u0004\u0004\u0004\u000e4@\u001e\u0012\u0004\f\t\u0012"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.BIGBLOX",
    "content": ";0đđđđđ7đđđđđđđđŔĔĔĔĔĔĔĔĔŔđđđđđđđđđ040đđđđđđ0đđđđđđđđŔđđđđđđđđŕđđđđđđđőđđđđđđ0ݮ00đđđđđ0đđđđđ0#\u00010đđđĐ!đđđđđđ0ݮ00߿ʎʟߊ!đđđĐ2Ȣ$\u0006\u00016đđđđđđ0Đ9ݮ0@đđđđđ0@0\u0001@đđđđđđ0@ݮ0@đđđđđ0@0\u0001@đđđđđđ0@ݮ0Cđđđđđ0C0\u0001Cđđđđđđ0C0@đđđđđ0@#\u0001@đđđĐ!@ݮ;\u000fđŔЁđđđđđđđđŔЁđđ߿ʎʟ!\bđđđđđđđđŔĔĔĔĔĔĔĔĔŔđđđđđđđŔ\u0011#\u0006\u0006\u0015đđđđđđđđŔЁđđđđđđ\u0001Đđ0đđđđđđđđŔđđđđđđđđŕđđđđđđđŔ\u0018ݮ0󀀮ݷń/໮/\u0001܀đ0ݮ󆆮ݷńȇ㐐㐐㐐㐐໮㗐䐌ҡ㗐䐌ҡ㗐䐌ҡ㗐䐌\u0004\u0001܀ߓ䌌򜜲䌌򜜲䌌򜜲䌌𓏿\u0007"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.BIGBLOX2",
    "content": ";0đđđđđ7đđđđđđđđŔĔĔĔĔĔĔĔĔŔđđđđđđđđđ040đđđđđđ0đđđđđđđđŔđđđđđđđđŕđđđđđđđőđđđđđđ0ݮ00đđđđđ0đđđđđ0#\u00010đđđĐ!đđđđđđ0ݮ00߿ʎʟߊ!đđđĐ2Ȣ$\u0006\u00016đđđđđđ0Đ9ݮ0@đđđđđ0@0\u0001@đđđđđđ0@ݮ0@đđđđđ0@0\u0001@đđđđđđ0@ݮ0Cđđđđđ0C0\u0001Cđđđđđđ0C0@đđđđđ0@#\u0001@đđđĐ!@ݮ;\nđđđđđđđđŔЁđđđđđđđđŔЁđđ߿ʎʟ!\bđđđđđđđđŔĔĔĔĔĔĔĔĔŔđđđđ\u0007#\u0006\u0006đđđđđđđđŔđđđđđđđđŔЁđđđđđđ\u0001Đđ0đđđđđđđđŔđđđđđđđđŕđđđđđđđŃݮ0󀀮ݷń/໮/\u0001܀đ0ݮ󆆮ݷńȇ㐐㐐㐐㐐໮㗐䐌ҡ㗐䐌ҡ㗐䐌ҡ㗐䐌\u0004\u0001܀ߓ䌌򜜲䌌򜜲䌌򜜲䌌𓏿\u0007W"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.BLADE",
    "content": "\u0013;z8vđđđđ5ĐĐĐĐ\bժժժժժժժժժժժժժժժժժժժժA/\tժժժժժժժժժժժժժժժժժժժժAđđđŜ.đđđŕ\u000bժժժժժժժժժժժժժժժժժժժժA袈/\u000eժժժժժժժժժժժժժժժժժժժժAǗđđđ-ǟ\u0012ߪժժժժժժժժժժժժժժժժժժժժA\u0006\u0007\u0004\f\u0004\t\bժժժժժժժժժժժժժժժժժժժժAđđđ͝\u0005͝\u0004ۻ\u0007\nđđđđđ\bժժժժժժժժժժժժժժժժժժժխA\u0006\u0004\u0007\u000e\bժժժժժժժժժժժժժժժժժժժժAǷ\u0006Ʒ\u0005\u0004\t\u0011đđđđđđ\bժժժժժժժժժժժժժժժժժժժժA/\u0007ժժժժժժժժժժժժժժժժժժժժAđđđŜ.đđđŜ\u0006ժժժժժժժժժժժժժժժժժժժժA袈/袈\bժժժժժժժժժժժժժժժժժժժժAǗđđđ-Ǘđđđ\bժժժժժժժժժժժժժժժժժժժժA/\u0006ժժժժժժժժժժժժժժժժժժժժAđđđŜ.đđđ͝\u0005͝ݪժժժժժժժժժժժժժժժժժժժժA袈/\u0006\u0005ժժժժժժժժժժժժժժժժժժժժ@ƖŐŐŐ-Ƿ\u0006Ʒ\u0006ժժժժժժժժժժժժժժժժժժժժ@1\tժժժժժժժժժժժժժժժժժժժժ@đđđđŜ0đđđđŜ\bժժժժժժժժժժժժժժժժժժժժ@Ȣ0Ȣ\bժժժժժժժժժժժժժժժժժժժժ@đǗđđ0đǗđđ\bժժժժժժժժժժժժժժժժժժժժ@꺸\u000f\u001e꺸\bժժժժժժժժժժժժժժժժժժժժ@đđđĐ\n\u001fđđđĐ\nժժժժժժժժժժժժժժժժժժժժ@\u0007\u001f\u0007ժժժժժժժժժժժժժժժժժժժժ@Đ\u001f\tĐ\u0007ժժժժժժժժժժժժժժժժժժժժ@Ȣ\u001e\u0010ѻȢ\bժժժժժժժժժժժժժժժժժժժժ@đđđĐ2đđđĐ\nժժժժժժժժժժժժժժժժժժժժ@6\u000eժժժժժժժժժժժժժժժժժժժժ@Đ9Đ\u0011ժժժժժժժժժժժժժժժժժժժժ"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.BLONDGIRL",
    "content": " đđđđđđđđđđđđđđđđđđđđđđ\u0012\tđđľߟߟߟ\n\u0006\u0003\u0015\u0004đđđđđđđđđđđđđđđđđSEđđđƙSEȢSBǙőőőőSES\u0019Eđđđđđđđđđđđđđđđđđđđđđđđđđđđđđđ\u000e\u0004\u000e\u0007\b׿đđ\u0005\u0005\tđđđđđđđđđđđđđđđđđ"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.BLUELINE",
    "content": "111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.BONES",
    "content": "000đđđđđ0đđđđđ0đđđđđ0000đđđđđđ0đđđđđđ0đđđđđđ0ݮ000đđđđđ0đđđđđ0đđđđđ0##0đđđĐ!đđđĐ!đđđđđđ0ݮ000߿ʎʟߊ!߿ʎʟߊ!đđđĐ2Ȣ$\u0006Ȣ$\u00066đđđđđđ0ĐĐǞőđ0Đ9ݮ0돯iǑőđ0\u0001ƌh,kđđĀЄ\u001fđ༹ȉlݮ΂\u0001蠠\u001f򉣈oĜ߶ݘ؜&đŐēϽo윜-oāфđ0đđđđđ\u0017Vݮ0\u0001\u0005\u0007ÁQđđđđđ0đđđđđ\u0005\u0005\u0001Q0\u0001\u0005\u0005Wđđđđđđ0đđđđőĒ\u0013W0\u0015Vđđđđđ0đđđđēo#\u0005\u0004V\u0004đđđĐ!đēŐđ\u000b\u0005V\u0004\u0001ݮ0\u0005\u0004\u0005P\u0004\u0004߿ʎʟ!\u000b\u0005W\u0004\f#\u0006\u0001\u0005X\u0004\u0004\u0001Đđ0Đxݮݷń໮܀đݮ\u000b\u0004\u000b\u0004ݷńȇ㐐㐐㐐㐐\bȇ㐐㐐㐐㐐\bȇ㐐㐐㐐㐐໮㗐䐌ҡ㗐䐌ҡ㗐䐌ҡ㗐䐌\b\u0001⒡㗐䐌ҡ㗐䐌ҡ㗐䐌ҡ㗐䐌\b\u0001⒡㗐䐌ҡ㗐䐌ҡ㗐䐌ҡ㗐䐌\u0004܀ߓ䌌򜜲䌌򜜲䌌򜜲䌌𓏿\b̲䌌򜜲䌌򜜲䌌򜜲䌌𓏿\b̲䌌򜜲䌌򜜲䌌򜜲䌌𓏿\u0007\u001a"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.BYZ1",
    "content": "\u0007\u0007\u0007\n0đđđđđ\u0007\u0007\u0007\u0007đđđđđđđđŔĔĔĔĔĔĔĔĔŔđđđđđđđđđ0∢0đđđđđđđđđőđđđđđŔđđđđđđđđŕđđđđđđđőđđđđđđ0ݮ\u0001\u000fđđđđđł\u000f\u0001\u000fđđđĐ\u000fݮ\u000f߿ʎʟ߂\u000fȢ\u0001\u000fđđđđđđ\u000fݮ\u000fđđđđēł\u000f\u0001\u000fđđđđđđ\u000fݮ\u000fđđđđđĂ\u000f\u0001\u000fđđđđđđ\u000fݮ\u0012đđđđđĂ\u0012\u0001\u0012đđđđđđ\u0012\u000fđđđđđł\u000f\u0001\u000fđđđĐ\u000fݮ\fđŔЁđđ߿ʎʟ\bđđđđđđđđŔĔĔĔĔĔĔĔĔŔđđđđđđđŔ\u0011#\u0006\u0006\u0015đđđđđđđđŔЁđđđđđđ\u0001Đđ0đđđđđđđđŔđđđđđđđđŕđđđđđđđŔ\u0018ݮ0󀀮ݷń/໮/\u0001܀đ0ݮ󆆮ݷńȇ㐐㐐㐐㐐໮㗐䐌ҡ㗐䐌ҡ㗐䐌ҡ㗐䐌\u0004\u0001܀ߓ䌌򜜲䌌򜜲䌌򜜲䌌𓏿\u0007"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.C5.B",
    "content": " 111)11#\u0004\n)11\u0004ו\u0005)11Հ\b\u0004\u0004\u0002\b\u0004)111)11վ\b)11\n\u0001\u0003\u0004А\u0005)111)11\u0004\u0004ח\u0006)11Հ\b\u0004\u0004𠨨ߟ\u0005)111)11վ\u0005\u0005\b)11\u0005\u0007\b)11%\t)111)\u001c\r1՞\u0004\u0005\u000b)\u0004\n\u0006\u00111\u0005\u0004\t)\t\u0005\u0007\t\u000b1\u001f\u0002\r)\b\u0006\u000b11)Հ\u0018\u0001\u00111Տ\u0004\u0004\u0003\u0004\u0011)11\u0004\u0005\r)Շ\u0005\n\t\f\u0011\u0004\u0007\u0018\r)\u0004\u0005\u0007\u0007\u0004\u000b\u0006\u0007\r\u0005\u0018)Հ\u0005\u0001\u0005\u0004\b\u0002\u0003\u0003\u0002\u0013\u0005\u0004\u0001ꨬ\u0014)\u0013\n1\u0011)1\u0015\u0005\b\u0013𸰠\u0001\u0011)\u001c\u0011\u0004\u0004Ԕ\b1)վ\n\u0005\u0004\u000f\u0010\u0013Հ\u000b\u0019)\u0005\u0001\u0005\b\u000b1\u0004\u0017)Հ\f\u0001\fՁ\u0011\u0004\u0006Հ\u0005𡀀\u0001\u0016)1\u0001\u0004Ǉ\u0005\u0006\u000e\u0002\u0015)Հ\u0005\n\u0006\u0014Հ\u0007\u0004\u00141)\u0001\u0004\u0011\u000b1\u0005\u0004\u001b)\u0007\u0005\u0007\u0001\u0001\u0005\u000b\u0017\u0005\u0004\fՈ\u0002\u0005\u0001뮯\u001a)\u0005\u000e\u0007\u0012\u0006חԖ\bσ\u0019)\u0001\u0004\u0011\u000bՀ\u000b\u0003\u0012\t\u0019)\f\u0007\u0006\u000b1\u0007\u001f)1\u0018\u0004\u0005\n\u0001\u0004\u001e)\u0004\u000f\u0004\u0006\n\u0004\u0006Ǉחх\u0004\u0007χ\u001d)Հ\n\u0004\u0001\u0005\nՀ\u0005\t\u0001\t\u0005Հ\u0004\u001d\t"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.CLEANCLIMB",
    "content": "\fGƂР\u0006\u000fÏ\b\u0007\u0010\f\u0003\u0007\u0004\u0001\u0002\u0004Ώ\f\u0005ڀ\u0004\f\u0004\u0006\n\f\u0004\n\u0005\f\u0004PԀ\u001f\u001d\t\u0006\f\u0004PA\u0002\u0002\u000e\fPA\u000e\r\u0007P\n\u0007\t\u0018\u0005\u000e\r\u0004Z\u0005\u0005\u0007\u0001\u0013\u0005\u000e\r\u0007wρ\u0011\u0006\u000e\r\u0007P#\u0004\u0004\u000f\u0001\u0004\u000e\r\u0004P\u001a\u0004\u0017\u000e\r\u0004P\u000b\u0012\u0005\u0010\u0004\u0004\u000e\r\u0006P&\u000f\b\u000e\r\u0006P&\r\b\u000e\r\u0006P=\u0001\u0001\u000e\r\u0006P\u0005\u0006\u0004\b\u0010\u0004\u000e\r\u0004P\u0007\t\u0004\u0007\u0004\u0004\u000f\t\u000e\r\u0006P%\u0005\u000f\u0006\u000e\r\u0006S#\u001b\u0006\u000e\r\u0006P\f\n\u0005\u000e\u0013\u000e\rPߏ\u0006\u000e\u0004\u0003\u0004\u0002\u000b\u000e\rP%\u0014\u0006\u000e\r\u0007P>\u0006\u000e\r\u0006Q#\u0018\n\u000e\u0005\u0005\u0004\u0006\u0001Q\u0005\u0005\u0005\t\u000e\u0004\u000e\u0004\u0007Q\u0005\u0005\u000f\u0005\u000f\u0006\u000e\t\u0007S'\u0013\u000b\u000e\u0006\u0007R#\u0018\u0004\u000e񠄌\u0007\u0007P\u0011\r\u0011\u0006\u000eက\u0006\u0007S\u0004\u0004\t\u0004ࠠ\u0012\n\u000e\u0004\u0006\u0007Q=\u0006\u000e󁀀\u0006\u0004QA\u000e\u0005\u0007デ\u0005\u0006\u000e\u0006\u000f\u0006\u000f\u0006"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.CLIMB.CLEAN",
    "content": "\f\b\u0007\f\u0003\u0007v\u0004#\f\u0005ڀy\u0002\u0004\u0015\f\u0004x\r\u0004\u0015\f\u0004c#\u0004\u0001\u0015\f\u0004\u0018\u0006\u00043\u001e\t\u0003\u0017\f\u0004\u0015\u0002\u000fw\f\u0015\r\bE\u0004\r\u0004\u0019\r\u0007\u0015\u0017\u0001\u0001:\u0004\u0005\u0002\u0002\u0017\r\u0004p\u0016А\u0017\r\u0007\u0017o\u0004\u0002\u0018\r\u0007\u0019\u0004\u0007\u0005x\r\u0004\u0016\u0004\u0005\u0002\u0007\u0006<\u0007\t\u001c\r\u0004\u0016\t\u0006:\u0005\u0005\u0007\u0001\u0016\r\u0006\u0015\u0018\u0001Tρ\u0014\r\u0006\u0004\u0004\u0014\r\u0006\u0018\u0005Q\u0004\u001c\r\u0006\u0016\u0004\u0007\u0006\u0013\u0017\u0012\u0005\u0014\r\u0004\u0016\u0005\u0004\u0004\u0013\u0001\n2\u0011\r\u0006\u0015\u0015\u0003\u0015ᡁ\u0006+\u0011\r\u0006F\f\u0001Q\r\u0006E&\u0006\u0004\b\u0016\r\u0017\u0006\u0014\b\u001a\t\u0004\u0007\u0004\u0004\u0012\r\u0017\u0001\u0005\u0001\u001a\u00021\u0005\u0012\r\u0007\u001a⢢計\u001d̿/\u001d\r\u0006\u0016\u0010\u001b\u0005\t\u0011\n\u0005\u000e\u0017\u0005\u0005\u0004\u0006\u0001C\u0010\u0019\u000e\u0004\u0003\u0004\u0002\u0010\u0004\u0007CC\u0018\t\u0007DА\u0006\u0004N\u0006\u0007I\u0001\u0001/\u001d񠄌\u0007\u0007IȈ\u0012\u0005\u0005\t\u0013က\u0006\u0007F\n\u0003\u0016\u0005\u000f\u0005\u0013\u0004\u0006\u0007C\u0004F\u0018󁀀\u0006\u0004C\u00014\u001d\u0005\u0007I\u0002\u0011\u0011\r\u0016デ\u0005\u0006HԐՕ\u0011\u0004\u0004\t\u0004ࠠ\u0017\u000e\u0006G\b\u0007I\u000f\u0006F\n\tJ\u000f\u0006\u0005\u0005\u000f\u0005\u000f\u0006\u000e\t\u0007,\u0006\u0001\u000b\u0004\u0001\u0004\u0006'\u0013\u000b\u000e\u0006\u0007'\u000b\u000b\u0004\u0004\u0005#\u0018\u0004\u000e񠄌\u0007\u0007\u001d\u0007\u0005\u000b\u0002\u0001\u0011\r\u0011\u0006\u000eက\u0006\u0007\u001c\n\t\u0007\u0004\u0004\t\u0004ࠠ\u0012\n\u000e\u0004\u0006\u00070\nχ\u0005=\u0006\u000e󁀀\u0006\u0004,\u0006\n\t\u0005A\u000e\u0005\u0007'\u001a\u0004\u0004[デ\u0005\u0006\u001d\u0004\r\u0004\u000e^\u000e\u0006\u001b\u0005\u0002\u0002\f^\u000f\u0006,\u000b\u0007^\u000f\u0006+\u0005\u0002\u000b\t^"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.CLIMBUP",
    "content": "C>z>\u0004l>\u0005\u0002l>Հ\u0004l>\rm>>\u0004x>\u0002\u0004j>\n\u0006j>\u0006\u0001j>\u000fk>\u0006\u0004%\u0004\r\u0004`ո\u0002\u000f\"ռ\u0005\u0002\u0002^\f\b\u001c\u0011Аd\u001b訪\u0001\u001c\u0010\u0004\u0002e\u0004\u0007\u0005$\u0004\u0005\u0002\u0007\u0006#Ձ\u0007\tg\t\u0006\"\u0005\u0007\u0001a\u0017\u001f\u0016ρ_>\u0016\u0005\u0004_Հ\u0005#\u000f\u0004e\u0004\u0007\u0006#\u0012\u0005]\u0005\u0004\u0004#\u001bZ\u0016\u0001\" ZՁ\u0006&\u0001\u0005\u0001&\u0004\t\u0006\u0007TՀ⢢計(Ն証\t\u0004\u0004S\u0011' Z>Ձ\u0005\n\u000eT(\u0006\n\u0004\u0004\u0007ࠥTհ\u0001\n(ᡁմ(\u0007\u0006\u0005\u0004U\r\u0001+հࠠ\u0004\u0006\n\u0004\u0005\u0005T8\u0005\r\u0004\u0005T\u0004󏆀\u0005\u0004 ՠࠠ\u0005\u000b\u0005\u0004\u0004\bE\u0005\u0002&zܘ\u0005'\u000e\u0003+>="
  },
  {
    "path": "04 Support/DRAZ/F/PAC.CLIMBUPB",
    "content": "\u0006N\u0018\t\u0003\u0006\u0007\u0005\u0004\u0005\u0003\u0006\u0003\r\n\r\u000b\t\u0017\u001a5\u0006\u0001\u0004\u0001U\u001a\u001e\u0004!\u0005D\f\u001a\u001d\u0004\u0011W\u001a%\u0005\rW\u001a%Ƈ\u000e\u0007W\u0019!\t\u000f\u0006U\u0019\u0004,\u0013\u0006U\u0019\u0004\u0018\u0004\n\u0013W\u0019\u0004\u001f\u0001\u0005\u0011d\u00046\u0001\u0011\u0006O\t\u0004\u0005(\u0004\r\u0006K\t\u0002\u0004+\u0004\u000f\nj\u0017\u0005\t\u0010\n\u0004\u0005\u0002\u0004\rW\u0019\u0005\u0001*\u0001\rW\u0018\u0007*\u000b\bW\u0017\u0005 \t\u000e\bW\u0018\u0006\u0016\u0006\u0006\u0005\u000e\u0001\u0001\u00012$\u0017\u0006\u0015\u0006\u0006\u0001\u0007\rX\u0017\u0006'\rX\u0018\u0005&\u0005\u000e\u0007X\u0017\u0005 \u000b\r\u0007u<\nP\n\u0005\u000e\u0017\u0005\u0006\u0004\r\u0001S\u000e\u0004ܘ\u000f\u0004\u0004\u0004\u0005\u0001\u0002\u0005\tǀt(\nǇ숈H\u0007\u0018\u0006&\u0006\u0001\u000b\u0004\u0001\u0004N\u0018\u0007!\u000b\u000b\u0004\u0004P\n\u0006\u0007\u0017\u0007\u0005\u000b\u0002\u0001T\n\n\u0006\u0016\n\t\bK\f\u0002\b\u0006*\nχ\rށI\nↄ\u0006\u0006&\u0006\n\t\fH\n߈\u0006\u0006\u0001!\u001a\u0004\u0004\nI\u000b\u0006\u0006\u0017\u0004\r\u0004\u000e\u000eΏB\u000bĀ\u0007\u0006\u0015\u0005\u0002\u0002\f\u0010@\n߈ޞ\u0006\u0006&\u000b\u0007\u0012艁=\f\t\u0006%\u0005\u0002\u000b\t\u0004\f\u001c\u0004\u0017\u0017\u0004 \u0004\u0006\u0004\u000b\u0007\u000f\u001c\u0005\u0018\u0017\t\u0004\r\r\u0004\u0005\u0005\u0001\u000e\u0005"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.CLIMBUPC",
    "content": "j\u0015\u0003\t\u000e߿߿\u000bj\u0016\b\bࠀ :0\u0005\u0016\u0006Ą\u0007\u0004\b\u0004\f\u0019\r\u0004\u0006\u00075\n\u0006.\u000b\u0019\f\f\u0019\u0006\u0006\u0005\u0007@\u000b\u0019\u0019\b\u0011\r\b\u0004'\u0016\u0005\u0019\u0019)\u0001\b\f\u000b\b\u0004\u0019\u0019-\u0004\u0001\u0019\u0001\n\b\u0004\u0004\u0019\u00120\u0006\u0007\u0016ᡁ\b\t\u0004\u0018\u0005\b,\t\n\u0004\u0014\f\u0001\u000b\n\u0005\u0018\tA\u0002B\n\u0005\u0018\u00176&\u0006\u0016\t\u0005\u0018\u0014\u0011\n\u0004\u0010\u0005\u0011\r\u0004\b\u0005\u0018&\u0002\u000b\f)Ͽ\b\u0001\bǇ\u0005\u0018$\u000b\u0004\u0001\u0004\nπ&Ϗ\u0001\n\b\u0005\u0017$\u0015\u0001\u0007#\f\u000e\b\u0005\u0017\n5\u0005!\n\u0010\u0007\u0005\u0017\u00190\u0006\u0001\u0004\u0011\bА\u0006\u0004\t\u0004\u0005\u0016&\u0004\u0007\u0005\nπ'\u0001\u0001\t\u0006\u0017%\u0001\u0004\u0005\u0007\u0006\t'Ș\n\u0004\u0006\u0019%\t\u0004\u0007\t\u0004$\n\u0003\r\t\u0006\u0016$\u0018\u0006\u0001\t\u0016\u0004\u001b\n\u0006\u0016\b\u0006%\u0007\u0016\b\u0004\u0004\t\u0004\u0001\u0005\u0006\u0019\f\u000b!\u000f\u0001&\u0001\b؀\u0006\u0019&\u0005\u0006\f'\n\u0006\u0019%\u0004࠾\u0005\u0001\r&\b\u0003\u000b\u0006\u0001\u0005\u0006\u0016*\u0004\f\b\u0017\u001a\u0006\u0005\u0007\u0015$\u0015\f\t\u000b\b\u0013\u0006\u0005\u0007\u0015\f@\u0018\r񸾟\b\r\u0007\u0005\u0001\u0001\t'\t\u0010'Ɔȼ\b\u0001\u0004\u0007\u0005\t&\u0001\u0001\u0006\u000f%\u0005ߟ\b\u0004\u0004\u0007\b\b)\u0001ކ\u0010$\t\b\u000e\u0007\u0006\b%\u0010\u0003\u000f>\u000e\u0007\u0004\bI#\u0013\u0005\u0006\u0004\b\u0005\t\u0005\r0Ϝ%\u0001\u000b\u0005\u0001\u0004\b\u0005\u0001\b\u000e1$\n\u0005\u0004\b\u0005\b1\b\u0004\u0005߀,\f\u000e\b\u0007\u000b(\t\u0001\u0011\u0001#\u0007\u0004\f\u000e\b\u00135𰰰\u0007\u0006\u0005\u0001\u00047\u000e\t\u0013G\u0006\u0004\r\u0011\b\u0006\u0005\u0007\u0001\u0004"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.COLL1",
    "content": "111)111)111)111)111)111)111)11Հ()11\t )11վ\r\")11\u0005\u0007#)111)11Ã+)11՞\u0007$)11\u0001\u0004\u0001\u0002')11Հ\u0004,)111)11\u0004+)11\u0006!)11\u0005\u0002\u0004\u001b)11\n\u0004\u001b)11\u0005,)111)11Հ\u0004\u0016)11\u0003\u0004\u0001\u0002\t\u0013)11\f\f\u0014)11!\u000e)11Ճ\u0004\u0019)11\u0001\u0012\u0005\u0010)11\u0004\t\u0005\u0010)111)11Տ\u0004\u0004\u0014)11\u0002\f\u0004\u0001\u0004\r)11\r\u000f\u000e)111)11\u0002\u0004\u0005\b\u0004\n)11\b\t\u0004\u0005\u0004\n)111)11\u0004\u0005\t\u0004\b)11\u0007𰰰\u0004\u0004\u0004ࠨ\b)"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.COLL2",
    "content": " 111)111)111)111)111)111)111)111)111)111)111)111)11\u0004 )11Ճﯯ )11\u0004\u0001\u0002\")111)111)11Ձ\u0005&)11$)11\u0004')111)111)111)11Ճ\")11\u0001\u0004\u001b)11հ\b\u001b)111)11\u0004\u0004 )11\n\u0005\u0014)11𰰠\u0004\u0007\u0013)111)111)11\u0005\u0012)11\u0001\u0002\u000f\u0010)111)111)11\u0004\u0004\f)11\u0005\u000f\u000b)111)111\t\u0005$\b 111\b 111\b 11Ճ\u0004\"\b 11\u0004珿!\b 11Հ\u0001訠 \b 111\b 111\b 11\b 111\b "
  },
  {
    "path": "04 Support/DRAZ/F/PAC.COLL3",
    "content": " 111)111)111)11Մ\u0007\u0015\u000b)111)111)111)11Հ*)11\u0004!)11Տ\u0001Î\")11\u0002%)11Հ*)11\u0004*)11Հ\")11׷!)11\u0001￟\")11Ŕ%)11Հ-)111)11\n\u0004 )11Ã\")11տ\u0001\u0003!)11%)11Հ.)111)11Ճ\")11\u0001\u0004\u001b)11հ\b\u001b)111)11\u0004\u0004 )11\n\u0005\u0014)11𰰠\u0004\u0007\u0013)111)111)11\u0005\u0012)11\u0001\u0002\u000f\u0010)1\u0014\u001c1)1վ\u0005\u0005\b1)1\u0004\u0004\u0004\u0004\u0004\f)1\u0005\u000f\u0004\u0005\u000f\u000b\t"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.COLLAPSE",
    "content": "ￗ\u0004\b0\f\r\u0001\t\u0005\u0005\u0004\u0004\u0004\u0004Ϗ\b\u0007\b\u0006\f\u000b>\u0005\u0004D\u0004e\u0018\n\n3}\u0001\u000f\u0007\u0005\u0007\u001d\u0006\u000b\u001c\u0007\u0004\u001c\u0007\u0004$8\u0006B\u0007\t 8\tG\u0007\u0005\u001c3\bG\b\n\u0004\u0014,\u0004߿P\b\u0005\u0004\u0014\u0002\b\u0001\u0006\u0002\u001b\f&\t\u0005\b\r\b\u0007\u0004\n\u0001\u0003\u000f\t\u0004\u0016\u000e\u0018\t\t\u0004\t\u0005\u0004\u0001\t\r\b\u0002\u0001\u0010\u0011\u0013\u0007\t\u0003\f\u0001\u0005\u0006\t\u0004\u0006\u0004\u000f,\u000b\u0001\u0001{\t\t\u0004\u0005\u0004\u0003\u0001\u000bϞ܇|\t\u0004\u0005\b\n\u000bd\u0005\t2\b\u0001c\tE\u0006d9l\u0001Nl\u0005Jl\bIl\u0005\u000el("
  },
  {
    "path": "04 Support/DRAZ/F/PAC.DBS",
    "content": "\t㣱\t\u0005\tBR\u0005\u0006\u0001\u0001\t\u0001BQ\u00118\u0005Q౛\b\t8\u0006ـ\u0006Q𘍍𜎇\t8؀\u0005Q\t8\u0006ۀ㶶1\u001c࿃ᱱǀ\t8\u0005.񑘘\u001c\u0005񛛙\t\u00078 \u0007\u0001\u001cƆǆ\t8񛘘񀀀ُ٘ \u0007\u0001\u0006\u000b\u0005\n\u0006漀\t\u00018\u0005 \u0007\u000b\u0011\u0001\u0001\t㳟8\u0005 \u0007\u000b惃\u0011\u0005\t8\u0005π 񛘘\u0007\u000b\u0011\u0005ؘ\u0007\t\u0005>\u0007 𙍌\u0007\u000b\u0006\u0011\u0006\t\u0005i\u0019\u0005\u0011\t|\u0005\u000b㶶\u0011𘘙\ti\u0007\u0005\u000b\u0011\u0005\ti\r\u000b\u0011\u0001\u0001\u0011Ƽi\u0006\u0007\u000b\u0006\u0019\t\u0001o\u0007\u0005\u000b㶜\u0011\t\u0004k\u0007\u0005\u000b\u0011\u0005πؘ#\u0005\u0004\n\u0006\u0006\u0006\u000f\u0007\u0006\u000b\u0011\u0005π\u0007\t\u0006\u0011一Ƽ\u0001\u0001\u0001\u0001\u0001\u0001\u0004\t\u0005\u0007\u0005\u000b\u0007\u0011\u0006瀇\t\u0011\u0001\u0004Q\u0006\u0001\u0007\u0006#\u0005\tw#񙍍\ť\u0001\u0001\u0001\u0001\t\u0005w+\tw\u001c\tw㶆涶\u001c౛ǀ\fw𘙛\u001c𘌌̀\u0006\t\u0005w#ళ\u0005\t㶰\u0005\tఘz"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.DRAW",
    "content": "\u0002\u0018*!\u0006-h\u001a\u001e\u0015h\b\u0006\u0004\n\u0005\r\u0013/\u0006\u0013\u0005\u0012\b\u0001\u0007\u0006\u0002\b\u0002\u0001\u0004\u0004\u0007\u0002-:\u0005\u000b\u0017\u0005\u0007\u0001\u0005\u0006,S%\u0011\u0001,Y𸸜\u0004\u0004\u0004\b\u0007\u0006,m\u0004\u0007\u0001\u0006\u0007,:\u0007\u0013\u001f\u0011,\u0007\u0007%\u0005\u0001\u0004\u0007\u0004\u0007\u0004\u000f\u0004\u0006\u0004-\u0004\u000f%\u0005\u0002\u0005\u0004\u0001\u0004\n\u0004\u0001\u0005.\u0004\u0001\u000e$\u0004\u000f0.\u0007\u0004F\u000b\t\u0005\u0005/V\u000e\b\u0006\u0004\u0004\u0001\u0004/:\u0006\u0011$\b(:\u0001\u0007\u0006\u00071\u0004';\u0001\u0002\u0005\u0010\u0005\b\u0011'W\u0015\u0005\u0012\u0004'\u0006\u0004Wi\u0011\u001e#F\u001e\u0010\u0005\u0001\u0002,i\u0005\u0014\b\"]\n\u0011\u0019\u0001\u0001\u0001,ߏ \u0001\u0005iN󏏃`\u0004\b"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.DRAW1",
    "content": "111)111)111)111)111)111)111)11\u0004\u0004\u0017)11\u0005\u0004\u0005\u0004Օ\u0012)11Հ\u0004\u0001\u0001ʺ\r)11\u0004\u0005\t\u000e)111)11\u001c\r)11ո\u0004\n\u0006\u0011)11\t\u0005\u0007\t\u000b)11Հ\b\u0006\u000b)11\u0018\u0001\u0011)111)11\u0005\n\t\u0005\f)11\u0004\u0005\u0007\u0006\u000b)11\u0005\u0001\u0005\b)11Հ\u0013\n)111)11\u001c\u0012)11\n\u0005\u0010)11Հ\u0006\u0001\u0007\u000b)11\u0007\u000b)111)11\u0005\n\u0007\u0013)11\u0001\u0004\u000b\u000b)11\u0007\u0005\u0007\u000b)11Հ\u0005\u000e\b\u0012)11\u0001\u0004\u0005\u0006\n)11\f\u0007\n)111)11Շ\u0004\u000f\u0004\u0006\n)11\n\u0004\u0001\u0005\n)111)11\u0004\u0005\t\u0004\b)11\u0007𰰰\u0004\u0004\u0004ࠨ\b)"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.DRINK1",
    "content": "1,1.1,1#\u0004\u00071,1\u0004ו1,1Հ\b\u0004\u0004\u0002\b1,1.1,1վ\u00051,1\n\u0001\u0003\u0004А1,1.1,1\u0004\u0004ח1,1Հ\b\u0004\u0004𠨨ߟ1,1.1,1վ\u0005\u0005\u00051,1\u0005\u0007\u00051,1%\u00061,1.1,1՞\u0004\u0005\b1,1\u0005\u0004\u00061,1\u001f\u0002\n1,\u0006\t.1,\f\u0003\u0005\u000bՏ\u0004\u0004\u0003\u0004\u000e1,1\u0004\u0005\n1,\u0011\u0004\u0007\u0018\n1,\u0006\u0007\r\u0005\u00151,\u0002\u0003\u0003\u0002\u0013\u0005\u0004\u0001ꨬ\u00111,1\u000e1,\u0015\u0005\b\u0013𸰠\u0001\u000e1,\u0004\u0004Ԕ\b.1,\u0010\u0013Հ\u000b\u00161,1\u0004\u00141,Ձ\u0011\u0004\u0006Հ\u0005𡀀\u0001\u00131,\u0001\u0004Ǉ\u0005\u0006\u000e\u0002\u00121,Հ\u0007\u0004\u0014.1,1\u0005\u0004\u00181,\u0017\u0005\u0004\fՈ\u0002\u0005\u0001뮯\u00171,\u0006חԖ\bσ\u00161,Հ\u000b\u0003\u0012\t\u00161,1\u0007\u001c1,\u0018\u0004\u0005\n\u0001\u0004\u001b1,\u0004\u0006Ǉחх\u0004\u0007χ\u001a1,Հ\u0005\t\u0001\t\u0005Հ\u0004\u001a"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.EXITARCH",
    "content": "ˀ;z8vđđđđ4đđđđr0ođđđđđ0đđđđđo0ođđđđđđ0đđđđđđoݮ0ođđđđđ0đđđđđo0\u001dSđđđđđđ0đđđđđ\u001dSݮ0\u001d 2đđđđđ0đđđđđā\u0017\t\u0005\r20#𸞇\r2đđđđđđ0đđđđđđ)\r2ݮ#\r2đđđĐȇ㐐㐐㐐㐐đđđđđđ\u0002\u0017\n\u0005\u0001\r2㗐䐌ҡ㗐䐌ҡ㗐䐌ҡ㗐䐌Ͽ\u0004\u001d\u0013\r2Đ̲䌌򜜲䌌򜜲䌌򜜲䌌򙇟\bőđđĐ\u001dS<ꀮ\u001dSđđđĐ2߿ʟʟߊ\u0005i6∢ȢoĐ9đđđđđđo?\u0005\u0005\t\u0004M?đđ\u0001\u0007\u0004\u0004L?o?đđđđđđo?o?đđđđđo?00?đđđđđđ0đđđđđđ0?00\u000b0đđđđđ0đđđđđ0\u0005#00đĐ!đđđđđđ0đđđđđđ0ݮ000߿ʟʟ!đđđđđ0đđđđđ0∠%\u000600Đ9đđđđđđ0đđđđđđ0݀"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.FALLWSWORD",
    "content": "m\u0005\u0007\u0004\u0004\u0006\u0001\u000b\u0001\u0005\u0006\u0004\u0005\u0011\u0005\u0004\u0006\u0002\u0004\u0002뿟\u0007\u000f$స\u0012\u0007\u0010ఘ\u0005\u0002\u0002\u0004\u0004\u0004\n\u0002\u001f!𸎇\u0004\u000b\u0004\u0010𘎇\u0005\u0001\b\u0006\u0004ꪪ\u001a\u0001\u0005\u000b\u0003\u0004\u0005\u0007\u0001\u0019\u0005\u0001\u0004\u0006\u0001\u0004\u0004\u0004\u0019Ԕ݀\u0004Հ\u0004\u0001տ\u0004\tЀ\u0005\u0006\u0004\u0004\u0004\u000eE"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.FANCYARCH",
    "content": "ˀ;z8vđđđđ4đđđđr0ođđđđđ0đđđđđo0ođđđđđđ0đđđđđđoݮ0ođđđđđ0đđđđđo0qđđđđđđ0đ3ݮ0\u0001ֺֺֺֺֺֺջ3đđđđđ0đđđđ\u0018\u0001\u0007\u0004݈ݪ30%𾏀ջ3đđđđđđ0đđđđđđ(ݪ3ݮ\u001a\bջ3đđđĐȇ㐐㐐㐐㐐đđđđőő\u0018\n\u0007݈ݪ3㗐䐌ҡ㗐䐌ҡ㗐䐌ҡ㗐䐌Ͽ\u0004ջջջջջջջ3Đ̲䌌򜜲䌌򜜲䌌򜜲䌌򙇟\bőđđĐ>3<ꀮqđđđĐ2߿ʟʟߊ\u0005i6∢ȢoĐ9đđđđđđo?\u0005\u0005\t\u0004M?đđ\u0001\u0007\u0004\u0004L?o?đđđđđđo?o?đđđđđo?00?đđđđđđ0đđđđđđ0?00\u000b0đđđđđ0đđđđđ0\u0005#00đĐ!đđđđđđ0đđđđđđ0ݮ000߿ʟʟ!đđđđđ0đđđđđ0∠%\u000600Đ9đđđđđđ0đđđđđđ0݀"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.FANCYEXIT",
    "content": "ˀ;z8vđđđđ4đđđđr0ođđđđđ0đđđđđo0ođđđđđđ0đđđđđđoݮ0ođđđđđ0đđđđđo0ođđđđđđ0đđđđđđoݮ00đđđđđ0đđđđđז׶ֶֶַ֖֖֗ז׶֖п݈ݪ00ճճճճճճճճճճճճ݀ջ0đđđđđđ0đđđđđđĀݪ0ݮջ0đđđĐȇ㐐㐐㐐㐐đđđđđđ̪̪̪̪̪̪̪̪̪̪̪̪滀݈ݪ0㗐䐌ҡ㗐䐌ҡ㗐䐌ҡ㗐䐌Ͽ\u0004̌ˋ̌͋Ό΍͎̎ˍ̌ˍ̌΍ջ0Đ̲䌌򜜲䌌򜜲䌌򜜲䌌򙇟\bđđđđđđܬܬܬܬܬܬ0<ꀮođđđĐ2đđđđđo6oĐ9đđđđđđo?\u0005\u0005\t\u0004M?đđ\u0001\u0007\u0004\u0004L?o\b\u0007\u0007\u0007\u0007\u0005ÃÃÃÂÑđoבđđđđ݉ݫ݉ݫ݉ݫ݉ݫ݉ݫ݉ݫ݈ݪ\b\u0007\u0007\u0007\u0007\u0007\u00073ջ݉ݫ݉ݫ݉ݫ݉ݫ݉ݫ݉ݫ݈ݪ3đđđđđݪ\u0018\t\u0005ջ0ջđ\"𸟇ݪđ0בđđđđĀ̪̪̪̪̪̪̪̪̪̪̪̪滀݈ݪ)ջ0԰԰԰԰԰԰԰԰԰԰԰԰܀ջđđ\"݈ݪđ0đđđđݪ\u0018\n\u0005ջ0\u0005\u0004\u0005\u0004\u0005\u0004\u0005\u0004\u0005\u0005\u0004\u0005ݪđ0ȢȠȢ0\u0005\u0004\u0005\u0004\u0005\u0004\u0005\u0004\u0005\u0005\u0004\u00050߿ʟʟ!䑄䑄0đ0∠%\u000600Đ9đđđđđđ0đđđđđđ0݀"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.FITING",
    "content": "m\u0005\u0007\u0004\u0004\u0006\u0001\u000b\u0001\u0005\u0006\u0004\u0005\u0011\u0005\u0004\u0006\u0002\u0004\u0002뿟\u0007\u000f$స\u0012\u0007\u0010ఘ\u0005\u0002\u0002\u0004\u0004\u0004\n\u0002\u001f!𸎇\u0004\u000b\u0004\u0010𘎇\u0005\u0001\b\u0006\u0004ꪪ\u001a\u0001\u0005\u000b\u0003\u0004\u0004\u0005\u0007\u0001\u0004\u0019\u000e&\u0001\u0004\u0005t\u0004\u0004\u0004\u0006\u0004\u0004\u0001\u0001q\u0007Ͽ\u0004\u0006\u0001\u0004\u0001\u0005\u0003\u0007l\u0004\u0004\u0002\u0006\u0007\u0005\u0011x\u0018Д\"w݀\u001c𜇁 u ฎ\u001fs\u0004Հ#\u0004\u0001տ\u0004\t\u001bsЀ\u0005\u0006\u0004\u0004\u0004\u001b5s\u000e6E\u0002"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.FLAME",
    "content": "ˀ;z8vđđđđ4đđđđr0ođđđđđ0đđđđđo0R\u0004\u0011đđđđđđ0đđđđđđF\u0005\u0006\u0004\rݮ0ođđđđđ0đđđđđ\u0014\u0005\u0006A0ođđđđđđ0đđđđđđoݮ00đđđđđ0đđđđđז׶ֶֶַ֖֖֗ז׶֖п݈ݪ00ճճճճճճճճճճճճ݀ջ0đđđđđđ0đđđđđđĀݪ0ݮջ0đđđĐȇ㐐㐐㐐㐐đđđđđđ̪̪̪̪̪̪̪̪̪̪̪̪滀݈ݪ0㗐䐌ҡ㗐䐌ҡ㗐䐌ҡ㗐䐌Ͽ\u0004̌ˋ̌͋Ό΍͎̎ˍ̌ˍ̌΍ջ0Đ̲䌌򜜲䌌򜜲䌌򜜲䌌򙇟\bđđđđđđܬܬܬܬܬܬ0<ꀮođđđĐ2đđđđđ!M6\u0014\u0005\u0006\u0001Ĝ\"\u0005\u0006\u0001ԔĐ9đđđđđđo?\u0005\u0005\t\u0004.\u0005\u0006\u0001\u0007?đđ\u0001\u0007\u0004\u0004F?P\u0005\u0006\u0001Ԕ\b\u0007\u0007\u0007\u0007\u0005ÃÃÃÂÑđoבđđđđ݉ݫ݉ݫ݉ݫ݉ݫ݉ݫ݉ݫ݈ݪ\b\u0007\u0007\u0007\u0007\u0007\u0007\u0014\u0005\u0006\u0001АԐА\u0005ջ݉ݫ݉ݫ݉ݫ݉ݫ݉ݫ݉ݫ݈ݪ3đđđđđݪ\u0018\t\u0005ջ\u0011\u0005\u0006\u0001\u0004ؘАջđ\"𸟇ݪđ0בđđđđĀ̪̪̪̪̪̪̪̪̪̪̪̪滀݈ݪ)ջ\u0011\u0005\u0006\u0001АՕ԰԰԰԰԰԰԰԰԰԰԰԰܀ջđđ\"݈ݪđ0đđđđݪ\u0018\n\u0005ջ\u0011\u0005\u0006\u0001\u0005\u0005\u0004\u0005\u0004\u0005\u0004\u0005\u0004\u0005\u0005\u0004\u0005ݪđ0ȢȠȢ0\u0005\u0004\u0005\u0004\u0005\u0004\u0005\u0004\u0005\u0005\u0004\u0005\u0011\u0005\u0006\u0001ԜЀ\u0007߿ʟʟ!䑄䑄0đ0∠%\u00060\u0011\u0005\u0006\u0001ԔĐ9đđđđđđ0đđđđđđ0݈"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.GOSTONES",
    "content": "7\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003đđđđđ0đđđđđ0đđđđđ0000đđđđđđ0đđđđđđ0đđđđđđ0ݮ000đđđđđ0đđđđđ0đđđđđ0##0đđđĐ!đđđĐ!đđđđđđ0ݮ000߿ʎʟߊ!߿ʎʟߊ!đđđĐ2Ȣ$\u0006Ȣ$\u00066đđđđđđ0đđđđđđ0Đ9ݮ0ođđđđđ0đđđđđo0ođđđđđđ0đđđđđđoݮ0ođđđđđ0đđđđđo0ođđđđđđ0đđđđđđ\u0017Vݮ0\u0001\u0005\u0007ÁQđđđđđ0đđđđđ\u0005\u0005\u0001Q0\u0001\u0005\u0005Wđđđđđđ0đđđđőĒ\u0013W0\u0015Vđđđđđ0đđđđēo#\u0005\u0004V\u0004đđđĐ!đēŐđ\u000b\u0005V\u0004\u0001ݮ0\u0005\u0004\u0005P\u0004\u0004߿ʎʟ!\u000b\u0005W\u0004\f#\u0006\u0001\u0005X\u0004\u0004\u0001Đđ0Đxݮݷń໮܀đݮ\u000b\u0004\u000b\u0004ݷńȇ㐐㐐㐐㐐\bȇ㐐㐐㐐㐐\bȇ㐐㐐㐐㐐ຮ▐䐌Ҡ▐䐌Ҡ▐䐌Ҡ▐䐌\t⒠▐䐌Ҡ▐䐌Ҡ▐䐌Ҡ▐䐌\t⒠▐䐌Ҡ▐䐌Ҡ▐䐌Ҡ▐䐌\u0004y"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.GRID",
    "content": " 111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111\tO"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.GUARD",
    "content": "$\u0016\u0011E\u0005\f0\u0006\u0004q6\u0004\u0006Օ\u0006\u0007B\u0005\f2\u0004\u0004\u000f\u0003\u0001\u0004\u0006\u000e\r\u0013\u00112\u0006Հ\u0001\u0006\r\u0004Օ\u0004\u0003\f\u0005ꪪ\u000e2\u0004(\u0004\u0005Ӄ\u0013\u0007\u0004\u0001Ъ\u00076\u0018\r\u0005\u0005\u0005ʊ\u0016\u0006\u0004\u0005\u0004\u00076\u0013\u0013%\u001d6\u0006\u0004\t\bՀ\u0005'Հ&6\u0004\u0004\u0007ח\u0007\u0002(\u0004*6Հ\u0001\u0004\u0001\u0006\u0004b\u00046\u0004@56Ѐ&\u001a=6\u0004\u0001몪\u0006\f\u0004\u0019\u001d\u0017\u000b+\u0007\u0001Օ\bՃ\u0018$\u00186\u0005Ԕ\u0005\b\u0005\t˪\n\u0004*6Հ+\u0004\u0005\u000fՏ\u0004\u0005\u000e6+\u0004\u0013՝ʪ\b6\b\u0007\u0004\b\u0005čԐ\u0004\u0015\u0006ݕ\u0005\u0004\b6\u0004԰\u0004\u0004\u0011ߗ\f\u0017\u0006\u00116Հ&Հ(Հ\u001d\b\u0007,-\u0019\u0014\",-\u0018\u0014Հ\"\u0004,\\\u001a\r\u0007,ՀW\u0016\u00115\u001f.\u0015\u0001\u00145\u0005\u0004\u0004\u0007տ\u0011\u0013\u0014\u00135\b\u0004Ե\u0004\b\u0004ԕ\u0007ʫ\f\u0006\n\u0001\u00131\u0004Հꪨ\b\u0006\u0013\u0004\u0004\f\t\u0005\t1\u0004%\u0005𴴨\u0013\u0001\u0005\u0006߿\u0007\u0002\b1\u0004Հ(Հ#Հ\u0002\u0005\u0005\u000f6\u0001\u001f\u001f\u0005&6\u0007\u0006\u000f\b\u000f\u001606@G6\u0007\u0004\u0004\u0004\u0017H6\u0007\u0001>\u0001%6Հ\u0001\u001c\u00045\u0001\u0005ߗ\u0005\f4߿%1\u0007ß\u0001\u0001\u000b\u0015\u001c\u0006:\u001c\u0004\u0004\u0004\u000e4@\u001e\u0012\u0004\f\t\u0012㐐㐐㐐㐐\bȇ㐐㐐㐐㐐໮㗐䐌ҡ㗐䐌ҡ㗐䐌ҡ㗐䐌\b\u0001⒡㗐䐌ҡ㗐䐌ҡ㗐䐌ҡ㗐䐌\b\u0001⒡㗐䐌ҡ㗐䐌ҡ㗐䐌ҡ㗐䐌\u0004܀ߓ䌌򜜲䌌򜜲䌌򜜲䌌𓏿\b̲䌌򜜲䌌򜜲䌌򜜲䌌𓏿\b̲䌌򜜲䌌򜜲䌌򜜲䌌𓏿\u0007ݍ"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.GUARDMOD",
    "content": "111)1Հ\u0005\u0004\u0018Հ*)1\u0006\b\u000b\u0004\u0005\u000bꊂ\u001f1Ճ\u0005֖\u0003\u0001\n\u0005\u0004\u0001\u0002\u0001\n\u0005ח\u0007\u00051\u0001ࠠ\u0006\u001c\u0005ʪ\u0005\u0015\u0005׮\u0002\u0004\u00051Հ\u0005\u0018\t#ՀՕ\u000e1\u0004\u0004\u000b1\u0001\u0004!1Ճ\u0006ŕ֖\u0003\u0001\nՀ\u0001\f\u0019)1\u0001ࠠ\u0006\u001c\u0004\u0006\u0004\f)11\u0006\u0005ّ\fՀ 1\u0004\u0005\u0018\b\nа\u000f\u0004\u0004\u00131\u0005\u0010\u0001߿\f\u0005)Հ\u0005Ǘ\u000e1ʊ\u0004\u0001\u0002\f1\u0004߿\u0005ꪯ\u0005\u00041\u0001\b\u0007\u0017Հ\u0001(ՃՕ\u0004ਨ\u00041\u0015\u001a\u0004\b\f%1Հ)\b\u0005\fՀ!1\u0004\u0018ꪪ\u0007\u0013\u0006\u00111Հ\u0004\u0004\u0005\r\u0001\u0004\t\u0018Հ\u0005ח\u000e1\u0005\u0005\u0001\r1\u0003\u0005\u0001\u0006\t1՟\u0005\rՅ\u0011Հ(՟\u0004\u0007\u0001\b1\u001d\u000e\u0004\u0004\u0004\f\u0014\u000e1Հ\u0001\u000b\u0013\u0004\u0002\u0001\u000b\u0019\u000e1\u0007Ϗ\u0004\u000b\u0004\u0004\u001b!1\u000b\u0006\u0002\bվ\u0004)Հ\u00121\t\u0012\u00061\u0004\u0004\u0002՟\u00061\b\"Հ*\u0005\u0005\u0001\u000511\u0004\b\u001f\u0006\n\r1Հ(Հ\u0001\u0005\u0007\u0001߿\u000f\u0016\u000f1\u0005\u0005\"\u0001\u0005\u0002\u0001\u000e%1\u0005\u0007\n՟\u0006\t\u0005\u000fՀ߿\u001d1\b\u0004먨\u0001\u0002\n\u0016\u0017\u0005\u0001\u0004\u00041՟\b\u0004\u001bՀ\u0001\u0006\u0018\u0007\u0005\u00041.\u0006\u0004\u0005\u000b\u0005\u0004\u0005\f1Ռ)Ճŕ֖\u0003\u0001\nՀ&1\u0004\u0004\f\u0001ࠠ\u0006\u001c)1\u0005\u0004\u0001\u0001\u0001\u0001\u0004\u000bՀ&Հ\u0001!1\u0007\u0005\f\u0006\t\u0004\n\u0004\t\u00061Հ\t\u001fՀ\u0001\u0004\u0005\u0001\u0001\u0004\tՁ\u0004証\u0001\u0004\u0001\u00051\u0004+\u0001\u0006\u0004\n\n\u0004\f111\u0012\u0004\u0011"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.GUARDMOD.BK",
    "content": "(\b(\b1\u0012\u0005\u00121\u0004+Վ\u0004\u000e\rտ\u0007\u0004ԕ\f1\u0002\t ࠠ\u0004ʪן\u000b㡡\u0004\u00071\u0007\u0004\u0005Յ\u0007\u000f\u0007\u0003\u0004\u0012\u0005\t\u0001\u0005\b1\u0005\u0004ן\r&!1\u0004\u0001\u0014՟\n\u001dՀ'1)ڊ\f&1Ճ.\u0006\u0004\u0004\u0001\u0004\rռ\u0005\u0004\u000b\f1\u0002\t\u0005\u001b\u0006\u0018\u0007\u0005Ã\u00061\u0006Օ\fՃ\u0014\u0017\u0005\u0001\u0003\u0004\u00061\u0005\u0007\u0004\u0001Ԗ\u0001\u0004\f\u0001ޖ\u0006\u000b\u0017\u0001\u0001\u001b1\u0005\u0005\u0004\u0004\u0018Հ\u0004Օ߿\u0010Հ𸸀#1(ߟ\u0007\u0002\u0004\u0011\u0016\u000f1\u0004,Հ\u0004\b\u0006\u0019\u0006\u000bח\u000e1.*\u0005\u0004\u0005\u0005\u00071\u0003\u0006\u0015\u00061Հ\u0004\u0001\u0004\u0001\u0004\b1\f\u0005\u0006,\u0004˯\u0001\u00101\u0007\u0001\u0002\u0004뫨\u000b\u0004Օ\u0004\u001bՀ 1\nД\u0012\u0004ˊ\r\u0015\u000e1Ճ\u0019\u000e\u0004\u0004\u0004\u0001\rՏ\u0014\u000f1\u0001ޖ\u0005\u000f\u0011(\u0002\u0004\u0004\u0007\n1\u0004Օ\u0004򀅃\u000fՀ,Հ\u0005Օ\u0006\u000b1\u0004\u0006\u000f\u0005\n\u0018\u0001\u0001\u0001\u000e1\u0004\u0004\u0001\u0016\u0006\u0007\u0013Հ\u0004\u00101(\b྿\u0005\u000e 1Հ\u0010\u001a\u0004\b\u0003\u000eՁ#1\u0006\tꪀ\u0017(\u0005\u0004\u0005\u00061\u0005\u0004Օ\u000eՀ/Հ\u0003\u0004Օ\u0005\u00061\u0005\u0002\t\u0003\u0004\u000e\u0005)\u0004\u0005֔\r1Հ\u0005\u0016𿯋\u0005\f\u000f\u0004\u0004\u001211\u0006\u0005뫪\r 11\u0004\u0006\u0004魿\u000eՀ\u0005\"11\f\u0017)11Հ/Ձ\u0004!110\u0004\u0010\u000411\u0001Օ\u0005\u0015\u0005\u0001뫺\u0004\u000211\u0005\u0004\f\u0006\u0007\n11\u0004\u0002\u0003\u0005\u0001\u0004\rՀ\u001e11)#11Հ.)"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.GUARDMOD2",
    "content": "111)1Հ\u0005\u0004\u0018Հ*)1\u0006\b\u0004\r\u0004\u0005\u0004\rꊂ\u001f1Ճ\u0005֖\u0003\u0001\f\u0005\u0004\u0001\u0002\u0001\f\u0005ח\u0007\u000b1\u0001ࠠ\u0006\u001c\u0005ʪ\u0005\u0015\u0005׮\u0002\u00041Հ\u0005\u0018\t#ՀՕ\u000e1\u0004\u0004\u0004\r1\u0001\u0004!1Ճ\u0006ŕ֖\u0003\u0001\fՀ\u0001\f\u0019)1\u0001ࠠ\u0006\u001c\u0004\u0006\u0004\u000e)11\u0006\u0005ّՔ\rՀ 1\u0004\u0005\u0018\b\nа\u000f\u0004\u0004\u00131\u0005\u0010\u0001߿\u0004\u000f\u0005)Հ\u0005Ǘ\u000e1ʊ\u0004\u0001\u000e1\u0004߿\u0005ꪯ\u0005\u0004\u00061\u0001\b\u0007\u0017Հ\u0001(ՃՕ\u0004ਨ\u00061\u0015\u001a\u0004\b\u000e%1Հ)\b\u0005\u000eՀ!1\u0004\u0018ꪪ\u0007\u0013\u0006\u00111Հ\u0004\u0004\u0005\u000f\u0001\u0004\t\u0018Հ\u0005ח\u000e1\u0005\u0005\u0001\u000f1\u0003\u0005\u0001\u0006\u000b1՟\u0005\rՅ\u0011Հ(՟\u0004\u0007\u0001\n1\u001d\u000e\u0004\u0004\u0004\u000e\u0014\u000e1Հ\u0001\u000b\u0013\u0004\u0002\u0001\r\u0019\u000e1\u0007Ϗ\u0004\u000b\u0004\u0004\u001b!1\u000b\u0006\u0002\bվ\u0004)Հ\u00121\t\u0012\u00061\u0004\u0004\u0002՟\u0004\b1\b\"Հ*\u0005\u0005\u0001\u000711\u0004\b\u001f\u0006\n\r1Հ(Հ\u0001\u0005\u0007\u0001߿\u0015\u0016\u000f1\u0005\u0005\"\u0001\u0005\u0002\u0001\u0010%1\u0005\u0007\u0004\r՟\u0006\t\u0005\u0012Հ߿\u001d1\b\u0004먨\u0001\f\u0016\u0017\u0005\u0001\u0004\u0004\u00061՟\b\u0004\u001bՀ\u0001\u0006\u0018\u0007\u0005\u00061.\u0006\u0004\u0005\u0004\r\u0005\u0004\u0005\f1Ռ)Ճŕ֖\u0003\u0001\fՀ&1\u0004\u0015\u0001ࠠ\u0006\u001c)1\u0005\u0004\u0001\u0001\u0001\rՀ&Հ\u0001!1\u0007\u0005\u000e\u0006\t\u0013\u0004\t\u0005\b1Հ\t\u001fՀ\u0001\u0004\u0005\u0001\u000bՁ\u0004証\u0001\u0004\u0001\u00071\u0004+\u0001\u0006\u0004\f\n\u0004\f111\u0012\u0004\u001111\u0012\u0004\u0011"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.GUARDMODEL",
    "content": "111)1Հ\u0005\u0004\u0018Հ*)1\u0006\b\u000b\u0004\u0005\u000bꊂ\u001f1Ճ\u0005֖\u0003\u0001\n\u0005\u0004\u0001\u0002\u0001\n\u0005ח\u0007\u00051\u0001ࠠ\u0006\u001c\u0005ʪ\u0005\u0015\u0005׮\u0002\u0004\u00051Հ\u0005\u0018\t#ՀՕ\u000e1\u0004\u0004\u000b1\u0001\u0004!1Ճ\u0006ŕ֖\u0003\u0001\nՀ\u0001\f\u0019)1\u0001ࠠ\u0006\u001c\u0004\u0006\u0004\f)11\u0006\u0005ّ\fՀ 1\u0004\u0005\u0018\b\nа\u000f\u0004\u0004\u00131\u0005\u0010\u0001߿\f\u0005)Հ\u0005Ǘ\u000e1ʊ\u0004\u0001\u0002\f1\u0004߿\u0005ꪯ\u0005\u00041\u0001\b\u0007\u0017Հ\u0001(ՃՕ\u0004ਨ\u00041\u0015\u001a\u0004\b\f%1Հ)\b\u0005\fՀ!1\u0004\u0018ꪪ\u0007\u0013\u0006\u00111Հ\u0004\u0004\u0005\r\u0001\u0004\t\u0018Հ\u0005ח\u000e1\u0005\u0005\u0001\r1\u0003\u0005\u0001\u0006\t1՟\u0005\rՅ\u0011Հ(՟\u0004\u0007\u0001\b1\u001d\u000e\u0004\u0004\u0004\f\u0014\u000e11\u0004\u0002\u0001\u000b\u0019\u000e1\u0007\u0004\u0004\u0011\u0004\u0004\u001b!1Ձ\u0004\u0004\u0005\u0004\u0006\u0007վ\u0004)Հ\u00121ਨ\u0006\u0006\u00071\u0004\u0004\u0002՟\u00061\n\u001fՀ*\u0005\u0005\u0001\u000511\u0004\b\u001f\u0006\n\r1Հ(Հ\u0001\u0005\u0007\u0001߿\u000f\u0016\u000f1\u0005\u0005\"\u0001\u0005\u0002\u0001\u000e%1\u0005\u0007\n՟\u0006\t\u0005\u000fՀ߿\u001d1\b\u0004먨\u0001\u0002\n\u0016\u0017\u0005\u0001\u0004\u00041՟\b\u0004\u001bՀ\u0001\u0006\u0018\u0007\u0005\u00041.\u0006\u0004\u0005\u000b\u0005\u0004\u0005\f1Ռ)Ճŕ֖\u0003\u0001\nՀ&1\u0004\u0004\f\u0001ࠠ\u0006\u001c)1\u0005\u0004\u0001\u0001\u0001\u0001\u0004\u000bՀ&Հ\u0001!1\u0007\u0005\f\u0006\t\u0004\n\u0004\t\u00061Հ\t\u001fՀ\u0001\u0004\u0005\u0001\u0001\u0004\tՁ\u0004証\u0001\u0004\u0001\u00051\u0004+\u0001\u0006\u0004\n\n\u0004\f111\u0012\u0004\u0011\u0012\u0004\u0011"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.GUY1",
    "content": "(\n\u0004\t\u0005\u0007A\u001c)!\b\u001e\t5\u0006\u0001%'\f\r5\n\u0001\u0004\u0006\u0016\u0001\u001c\u0001\f\r5\u000e\u0006\u0001\u0004\u0002\u0004\u0014\f\u0004\r\b\u0004\u0004\u0004\t5\u0007\u0002\r\u0005\u0010\u0001\u0005\u0001\f\u0005\u0001\u00115\u0004\u0001&\u0004\t\"\u0001\f\b4\u0007\u001d\n\u0015!\u000b\u000b4##\u0014\u000b\u000b\u000e4\u0005\u0005\u0012\u000e\t\u0010#\u0001\b\u00064\u0004\u0005\u0004぀\u0005\u0005\u0004\u0001\u0005\u0010\u0007\u0007\u00065\u0010\u0003\u000b\u0001\u0005\u000e\u0005\u0004\u000b\u0001\u0004\u0015\u00175+)*4\u0005\u001a\b'\u0001\"4\n\u0002\t\u0015\u001b\u0001\u0005\u0005\r4\u0006\u0006\b\u0003\u0006\u0004\u0010\u0006\u0015\u0007\u0004\u0001\u0001\u0006\b4\u0005\u0001\u0004\u0005\n\u0004\u0014\u0005\u0001\u0006\u0010\u0001\u0004\u0004\u0004\u0001\u0005\u00064\u0015\f\u000e\u0001\u0005\u0006\u0005\u0019\u0006\u00074\u0014\n\u000e\u0013\u000e\u001e\b4\u0013\t&\u0001,\f4\u0005\u0017\u0010\u0016\u0012\u0016\u0006\u00064\u0005ర\u0004\u0005\u0001\u0004\u000b\u0007\u0005\u0006\u0005\u00054\u0010\u0014\u000b\u0004\u0004\u000b\u0007\b\u00064\u0005\u0005\u0006\u0005\u000f\u0004\u0004\u000b\n\u0018\u00054\n\u0003\r\u0007,)5\u0005\u000b\u0007\u0004\u0001\u0004\u000b\u0001'\u0001\u0001#5\u0004\u0001\u0005\u0005\n\u0012\u0004\u0004\u001d\u0001\u0006\u0005\u000e5\u0017\u0001\u001b\u0007\u001c\u0011\u0004\b4\u001a\u0001\u001b\b\u0001\u0007\u0010\u0004\u0004\u00074\u001d\u0010\u0003\u0001\u0004\u0005\u000e\u0001\u0005\b\u0005\u0006\b*\u0005\u0018\u0010\t!\u0018\u0005\u0007\u0001(\u0006\u0005\f\u001d7\u000b\u0007*\u0006\u0004\u0004\u0004\u0004\u0005\u0005'\u0005\u0005\u0006\u0004\u0005\b*\f\u0016\u0005\u0006\t\u0004\u0006\u0005\b\u0001\u00056\t\u001d\u000b\n\u001c\u000f\u0019\ty"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.GUY1.CLEAN",
    "content": "(\n\u0004\t\u0005\u0007A\u001c@`&\u001d\b\u001d\t5\u0001#%\f\r5\u0006\u0001\u0004\u0006\u0010\u0005\u0001\u0015\u0006\u0001\f\r5\n\u0006\u0001\u0004\u0002\u0004\t\n\f\u0004\f\b\u0004\u0004\u0004\t5Հ\u0002\r\u0005\t\u0006\u0001\u0005\u0001\u000b\u0005\u0001\u00115\u0001%\u0004\t\u0011\u0010\u0001\u00174\u0004Հ)\u0015\u0012\u000e\u001a42\u0018 \u001c4\u000434-.+4-.+3πՀ\"Հ&վ\u0001\"4\u0006\u0002\t\u000f\u0005\u0016\u0004\u0001\u0005\u0005\r4\u0004Հ\u0006\b\u0003\u0006\u0004\b\u0007\u0006\u0013Հ\u0007\u0004\u0001\u0001\u0006\b4\u0004\u0001\u0004\u0005\n\u0004\b\u000b\u0005\u0001\u0006\u000f\u0001\u0004\u0004\u0004\u0001\r4\u0004\u0010\u001aՏ\u0001\u0005\u0006\u0005\u000f\t\u00124\u0004\u000f\u001a\u0013\u000e\u0004*4\u000f\u001a\u0017\u0001>42\u0019=4\u0004-\u001b;4\u0004J:4\u0004Ո\u0006l4\u0006\u0003\r\u0007(\u0004(5Հ\u000b\u0007\u0004\u0001\u0004\bՀ\u0001&\u0001\u0001#5\u0001\u0005\u0005\n\u000b\u0006\u0004\u0004\u0018\u0004\u0001\u0006\u0005\u000e5\u0013\u0001\u0014\u0006\u0007\u0013\b\u0011\u0004\b4\u0016\u0001\u0013\u000b\b\u0001\u0007\u000e\u0004\u0004\u00074\u0004\u0018\u0013Ճ\u0003\u0001\u0004\u0005\r\u0001\u0005\b\u0005\u0005\u0006\b*\u0004,\t\u001e&\u0007\u0001(2\u000e\u001f*\u0007*\b*6\u0006<(y"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.GUY1.REV1",
    "content": "&\u00044\u0002\u0003(^6\u0001\u001d\u0004^6\u0006\u0001m4\nǟ\u0002\u0004c4Հ\u0002\u000e\u0007%\u000106\u0001%&\u0005\u0004\u00106Հ)\u0005\u0001\u0004\u0017\u0005\u0002\t\u0004\u0004\b6\u0001#\n\tߟ\u0004\r\u0004\u0005\u0001\u0002\b6\u0006\u0001\u0004\u0011\u0006\u0001\f\u0001\u0006\b\u00126\n\u0001\u0002\u0004\u0007\u0004\n\u0012\u0013\u00146Հܸ\u000e\u0007\u0015\u0014\u0014\u0001\u00146\u0001\u0007\u001c.\u0015\u00136Հ\u0005L\u0016\u00145F\u0015+5-\u0018\u0014Հ#5-.'5Հ\"Հ&Հ\u0001\"6\u0006\u0002\u000f\u0005\u0007\u0016\u0004\u0001\u0005ߗ\u0005\t6Հ\u0006\u0002ꨮ\u0007\u0007Ͽ\u0014Ձ\u0007ß\u0001\u0001\b6\u0001\u0004\u0005\n\b\u000b\u0004\u0001\u0005ߏ\u0010\u0004\u0004\u0004\r6-՟\u0001\u0005\u0007𪪪\u000f\u0012\u0004\u00146\u0011\u001b\u0014\u000e\u0004*6\u0010\u001b\u0019\u001d\u00186\u0012\u001a\u001a=6\u000f\u001a\u001b<6J<6Հ\u0001Q(6\u0006\u0002ߟ\u0004(\u0004(6Ճ\u0007\u0002ꪨ\u0007Հ&Ԁ\u0001#6\u0001\u0006\u0005\u0018\u0006\u0018\u0004\u0001\u0004\u0004\u000e6,\u0007\u0005\u0014\b\u000b\u00071\u0007,\u000b\u0004\u0004\f\u0005\u0004\b1\u0007,Ճ\u0003\u0007\f\u0004\u0005\b\u00116\u0015\u0017@\u00136\u0016\u0015E\u0005\u0006\u00066\u0019༇n6@G\u0017\u001c@ǾG6@I\u0012\u0004\b1\u0007,Ճ\u0003\u0007\f\u0004\u0005\b\u00116\u0015\u0017@\u00136\u0016\u0015E\u0005\u0006\u00066\u0019༇n6@G\u0017\u001c@ǾG6@I\u0012"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.GUY2",
    "content": "*\u0012\u001ax\"\u0004\"\u0005 \u000b5\u0007\u001b\u0005\n\f,5\u000b\u0001\u0006\u0011\u000e\u000e\n\u0004\r6\u0011\u0005\u0001\u0007\u0004\t\u0007\u0001\u0005\u0003\u0010\u0007\u0005\f5\u0007\t߼\n\u0007\u0016\u0006\u0005\u0001\u0005\u0004\u00075\u0007\u0004\u000e#\u0010\n\u0004\u00145J\u0001\u000b\u001a\u0001\u00125\"'(\u0001\u000f5\u0005\b\nـ\u0004\u0006\u0018-\u0004\u0004\u00065\u0006\u0006\u0005\u0001\u0004\u0004\u0002\u0005\u0001\u0004\u0004\u0006\u0005!\r5\u0010\f\u0002\u0018\u0005\t\u0001\u0014𘌌\n5\u0004\u000e\t\u000e\u0010\u0013\u0004*5\u0005\u001c\u0005\t\u0001\u00194\u000b\u0005\u0005\u001a\u0010\u0013\u0001\u0004\r4\u000e\u000f\u0005\f\u0005\u0005\u0001\u0001\u0013\u0004\u0004\u0001\u000b\u00074\f\u0004\u0001\u0004\u0005\f\u0001\u0006\u0007\u0014\u0001\u0004\u0006\u0004\u0007#\u0010\u0005\u0005\f\u0001$\u0004\u0011\u0011\u00134\u0004\u001a\u001f\u001f\u0005\u00115'\u0019 \u0005\u0005\u0001\r4\u0005\u0010\u0004\u0016,\u0005\u00064\u0004\u0006\u0004\u0004၁\u0006\u0004\u0005\u0005\u0013\u000e\r3\u0002\u000e\u0013\u0001\u0001\u0011\u0004\t\u0001\u0014ఘ\u000b3\u000f\n\t\u000f\u0011\u0005.3,\u0005\u0002\u000b\u000b(\u00015\u0006\u001d\u0007\u0003\u000f\f\u001a\u00044\n\t\u0019\u0005\u0004\u0001\u0004\u0005\u0001\u0010\r\r3\u000b\u000e\u0011\u0001\u0007\u0006\u0001\u0010\u0007\u0004\u0004\u0001\u0007\u0001\b4\u000b\u0004\u0005\u0001\u0005\u0017\u0010\u0001\t\u0004\u0006\u0004\t5\u0004\u0004\u0007\u001c\u0002\b\u0001$\u0001\u0005\u000b5\u0015 (\t\n(%\u0017*\f5\u0005\u0004\u0005\u0007\u0004\u0005\u000b\u000b\r\t(\u000f\u0014\u000e\u0005\u0005\n\u0004\b\u0005\u0001\u0004\u0001\t)\u0005\u0006\u0007\u0004\u0004\u0007\b\b\f\u0004\u0017\u0013\u0004K\u0012\u001ag"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.GUY2.CLEAN",
    "content": "*\u0012\u001ax\"\u0004\"\u0005 \u000b5\u0007\u001b\u0005\n\f,5\u000b\u0001\u0006\u0011\u000e\u000e\n\u0004\r6\u0011\u0005\u0001\u0007\u0004\t\u0007\u0001\u0005\u0003\u0010\u0007\u0005\f5\u0007\t߼\n\u0007\u0016\u0006\u0005\u0001\u0005\u0004\u00075\u0007\u0004\u000e#\u0004\u0010\n\u0004\u00145J\u0001\r\u001a\u0001\u00121P)\u0001\u000f1\u0004\u0004\u00061\r1r𘌌\n1\\*5\u0005\u001c\u0005\t\u0001\u00194\u000b\u0005\u0005\u001a\u0010\u0013\u0001\u0004\r4\u000e\u000f\u0005\f\u0005\u0005\u0001\u0001\u0013\u0004\u0004\u0001\u000b\u00074\f\u0004\u0001\u0004\u0005\f\u0001\u0006\u0007\u0014\u0001\u0004\u0006\u0004\u0007#\u0010\u0005\u0005\f\u0001$\u0017\u0011\u00134\u0004\u001a\u001f,\u00115'\u0019*\u0001\r43\u0016,\u0005\u00064m\u000e\r3\u0002nఘ\u000b33,\u0005\u0002\u000b\u000b(\u00015\u0006\u001d\u0007\u0003\u000f\f\u001a\u00044\n\t\u0019\u0005\u0004\u0001\u0004\u0005\u0001\u0010\r\r3\u000b\u000e\u0011\u0001\u0007\u0006\u0001\u0010\u0007\u0004\u0004\u0001\u0007\u0001\b4\u000b\u0004\u0005\u0001\u0005\u0017\u0014\u0001\t\u0004\u0006\u0004\t5\u0004\u0004\u0007\u001c\u0002.\u0001\u00125\u0015K\u000f\n(%H\u000f5\b(\t)6g,"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.GUY2.REV1",
    "content": "\u000b\u0013\t2\u0001\u001d7\u001f?\u0004\u0001\u0004\u0006\u000b7\u0001\u0006\n?\b\f\b,\b\u0005\u0001%\t\t\u0005\u0005\u0004Ԅ\b+\u0005\u0001\u0004 \b\b\u0004\u0005\r\u0007\u001e\u0005\u0004\" \b\b\u0007\u001b\u0007\r( \b\b\u000b\u0001\u0006\n\u0006\t\u0004\bՀ\n\u0013!\t\t\u0011\u0005\u0001\u0007\u0004\b\u0007\u0001\u0004\u0002\b\u0005\u0007ݝ\u0004\u0005 \b\b\u0004\u0005\u0004\t߼\t\u0007\u0015Ձ\u0006\u0005\u0001\u0004ਨ\u0005 \b\b\u0005\u0017\r\u0015\u0015\n\u0005\u0014\u001c\u0004\u0004\u0004\b\u0005\u0001#\u0017\u0001\r\u0004\u0016\u0012\u001c\u0007\u0004\u0006\u0004\u000f\u0001\u0004\u0013\u0019\u0011\u0017\u0001\u000f\u001c\u0007\u0004\u0006\u0004\u0013\u0001\u0002\u0004\u0003\u0004\fI\u0004\u0004\u0006\u001c\u0007\u0004\u0006\u0004\b\u0004\u0002\u0007V\r\u001c\u0007\u0004\u0006\u0004\b\u0001\u0011O𘌌\n\u001c\u0004\u0004\u0004\u00046%.\f\u000f\u0007\b\u0005\u001cՀ\tՀ\u0001\"\u001c\u0004\u0007\u0007\u000b\u0005\u0005\u0013\u0006\u0010\u000b\u0007\u0001\u0004\r\u001f\u0004\u0007\u0007\u000e\u000f\n\u0005\u0005\u0001\u0001\n\b\u0004\u0004\u0001\u0001\u0005\u001f\u0004\u0007\u0007\f\u0004\u0001\u0004\n\u0001\u0006\u0007\u0013\u0001\u0004\u0007\u0006\u001f\u0007\u0007\u0005\u0005\r\u000e\u0015\u0015Ѐ\u0011\u0014 \b\u0007\u0004\u001aԕ\b\u0016,\u0011\u001f\u0007\b'\u0016*\u0001\r\u001f\u0004\u0007\u00073\u0016,\u0005\u0006\u001f\u0007\u0007m\u000e\r\u001e\u0006\u0006\u0002nఘ\u000b\u001e\u0004\u0006\u00063X\u001e\u0004\u0006\u0006,\u0002\u000b\u000b&\u0001 \u0004\u0007\u0007\u0006\u001d\u0005\u0003\u000f\u000bռ \u001e\u0001\u0004\u0006\u0001\u0007\n\t\u0016\u0005\u0004\u0001\u0004\u0005\u0001\n\u0005\u0006\u0004ߗ\u000e\u001e\u0004\u0006\u0006\u000b\u000e\u0010Շ\u0001\u0007\u0006\u0001\u000f\u0007\u0004\u0004\u0001\u0001\u0006\u001f\u0007\u0007\u000b\u0004\u0001\n\f\u0013\u0001\t\u0005\u0006\u0007 \b\b\u0004\u0004\b\u000b\u000b\u0002\u001a\u0014\u0013 \u0001\b\u0001\b\u0015\u0006E\u000f!\b\b%H\u000f \u0007\u0007\u001f\u0004\u0007\u0007\u001f\u0007\u00075\u0012\u0012\u0003\u0001\u0019\nD"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.GUY3.CLEAN",
    "content": ")\u0007\u0006\u0006\u0005\u0006\t\u0004\u0006\u0004\n\u0004\u0005\u0017\u0004\u0017\u0007\u0005\u000e\u0007\u00065&'&6\u0001\u0005\u001c\u0004\u0004\u001a\u0006\u0001\u001d\b,\u000b\u0002\u0007\u0015\u0001\n\u0004\u0010\u0007\f5\u000e\u0001\u0005\u0001\u0001\u0017\u0001\b\u0015\u0001\u0004\u0001\u0007\b,\u0005\u0004\b\u0001\u0014\u0004\u000e\u0001\u000e\u0001\u0004\u00135\u0005\u0013\u0016+\f\u00154\u0001\u001a\u0011\u001b\u0007\u000f\u00154\u001d\u000f\t\u000f\u0004\u0006\t4\u0007\u0007\t\u0004\u000e\u0001\u0004\u0016\u0001\u0004\u00054\u0007\b\u0001\n\u0010\u0011\u0004\u0013\t\u0002\u0001\u0005\u00045\u0016\u000e\u0011\u0002\u0006\u0004\u0004\u0017\u0004\u0006\u0006\t\"\u0011*3\u0001\u001c\"\u0011\u0006\u001d\u0005\u0001\u001a\t\u0007\u0005\u0005!\u0011\u000b\u0001\u0004\u0005\u0011\u0002\u0004\u000b\u0011\u0007\u0001\u0006\u0004\u0001\u00074\f\u0005\u0004\u0001\u0017\u0004\u0003\u0007\f\u0004\u000b4\u0005\u0002\u0005\u0004\u0011\u0004\u0006\u0001\u0004\u000b\u0001\r\u000f4\u0011\u0017\u0001\u0001\u0004\u0011\u001d\u00173\u001b𾿟0\u0001\t\u0016\u000f4\u0005\u0014\u00013\u0006\u0006\u0006\u00074\u0004\u0007\u0004\u0004\u0004\u0011\f\u0014\u0001\n\u00075\u0011\u0005\n\u000b\u0004\u0005\u0004\u000e\b\u0004\b5\r\u000e\u0001\u0017\u0007\u0005\u0005\u0001\n\u0001\b\n\u0002\b5*\u000f\u0004\u0005\u0007\u0004\u0004\u000b\"5\u0005\u0011\b\u0003\u0004\u001b\u0006\u0001\u001b5\n\u0002\u0006\u0004\u000f\u0001\u0007\u0019\u00055\u0010\u0004\u0001\u0005\u0015\u0005\u0001\t\u001a\u0004\u0006\u0004\u00066\u0004\u0004\u0001\r\t\u0001\u0004\u0004\u0001\u0004\r\u0005\u0002\t\u0005\b6\n\u0010\b\u0001\u0005\u0004\u000b\u0010(\t*\u0012\u0004+26\b\u000b\u00013𸼞\t\u001d\t)\u0003\u0002\u0006\u0004\u0004*\t\u0004\u0005\u0006\u0007\t*\u0005\u000b\u0004\n\u0011\u0004\u0005\u0014\f\u0004\u00065\r\u0006\u0002\u0006\u0001\u000f\u0001\b\n\b\u0001\u0006\u00047\u0006\u0004\n\u0004\u0005\u0017\u0004\u0017ߟ\u001e\u0006#\u0006#\u0006#"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.GUY3.REV1",
    "content": "\u001a\u000e(ߟ\t\u0011\b\u0005\u0004\u0005\n\tس߾\u0001\u0004\u0004\u0005\u0007\u0001\u0004\u0004\u0002\u0005(\u0004\u0006\u0006\u0004\u0001\u0004\u0005\u000e\u0006\u0004\u0017ۀ\u0001\u001e+\u0006\u0005\u000b\u0011\b\"'+\u0001\u0006\u0004\u0004\u0004\u000b\u001b\u0006\u0001\"+\u0004\u0007\b\n\u0016\u0001\u0004\u0017\u0004\u0004\u0006+\u0004\u0007\u0016\u001cϿ\u0001ﮮ\u0004\u0012Ͽ\u0001\u0004\u0005\u0005+\u0004\u0007\n\u000f\f\u0001\u0007\u0005\u000b\u0001\u0004\u0013+\u0004\u0007\u0004\u0001\u0004\u000f\t$\f\u0015*\u0001\u0004\u0006\u0010\u0001\u0004\u0005\u000b\u001b\u0007\u000f\u0015*\u0005\u0006\n\u0003\u0006\u0006\u0003\u000b\t\u000f\u0004\u0006\t*\u0005\u0006\u0005\u0001\u0010\u0007\n\u0001\u0004\u0016\u0001\u0004\u0005*\u0004\u0006\u0006!\u000e\u0011\u0004\u0013\t\u0002\u0001\u0005\u0004+\u0004\u0006\r\u000e\u0013\u0002\u0006\u0004\u0004\u0017\u0004\u0006\u0006\t\u0018\u0011\u0004\u0006\u0011\u0011\t-\u0001\u001c\u0018\u0011\u0005\u0005\u0001\u0004\u0007\u0004\u0001\t\u0001\u0006!\t\u0007\u0004\u0017\u0011\u0005\u0005\u0005\n\u000b\u0001\u0007\u0003!\u0011\u0007\u0001\u0006\u0005*\u0005\u0004\u0001\u001c\u0001\u000e\u0001\u0018\f\u0004\u000b*\u0004\u0004\u0011\u0004\u0018\u0002\u0004\u0004\u0006\u000b\u0001\r\u0010*\u0005\u0005\u0005\u0005𰐘\r\u0005򪪨ꚺ\u001c\u0017)\u0005\u0005\u0006\u0006\u0005\u0001\b\u0004\u0007\u0004\t\u0016\u000f*\u0005\u0005\u000b\u000f\u0002\u001f\f\u0006\u0006\u0006\u0007*\u0004\u0005\u0006\u0004\u0004\u0005\u000f\f\f\u0014\u0001\n\u0007+\u0005\u0007 \u0006\u0004\u0005\u0004\u000e\b\u0004\b+\u0006\u0016\u000e\u0015\u0007\u0005\u0005\u0001\n\u0001\b\n\u0002\b+\u0004\u0005\u0007\b\u0001\u0005\u0005\u0010\u0004\u0005\u0007\u0004\u0004\u000b\"+\u0004\u0005\u0007\u0001\u0007\n\u0004\u0007\u001b\u0006\u0001\u001b+\u0004\u0005\u001e\u0012\u0001\u0007\u0019\u0005߿+\u0005\u001a\u001a\u0005\u0001\t\u001a\u0004\u0003\u0007,\u0006\u0005\u0013\u0015\u0001\u0004\u0004\u0001\u0004\r\u0005\u0002\t\b,\u0006\u0005\t\u0013\u0001\u0005\u0004\u000b\u0010(,Ѐ\u0006\f\u0001\u0005$2,\u0006\u000b\u0001\u0007\u0002\u00012𸼞\t\u001d+\u0006\u0005D\t\u0004\u0005\u0006\u0007+\u0004\u0006Ǉ\u0004 灀\t\u0004\u0005\u0014\f\u0004\u0006+\u0004\u0004\u0006\u0004\n\u0004\u0005\u000f\u0001\b\n\b\u0001\u0006\u0004-7\u0006\u0004\u0017ߟ\u001e\u0006#I\u0007\u0001\u0006\u0006\u0005\u0002[\u0001\u0013"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.GUY4.CLEAN",
    "content": ",\u001d\b\u0004:\u0016\nb\u0001\t\u0017\u0005\u0007\u0005\u0018a,\u0006\u001c`\u0007\u001c\n\u0001\u0006\u0004\u0004\u0004\ta\u000b\u0001\u0004\u0004\u001d\u0005\u0001\u0005\u0001\u0001\u0004a\u000e\u0010\u0010\u0001\u0007\u0007`\u0013\u0004\u0001\u0001\b\u001e`\n\u0005\u0004\u0012\u0006\u0006\u001c`\u0007\u001a\u0001\u000e𸸜\u0005\f\u00011.\b\u0005\f\f\u0007\n\t2\u0001.\u0014\u0001\u0004\u0004\f\u0006\u00062.\u0013\u0010\u0012\u0004\u0004\u0006\u0004\u00062.\u000f\u0001\u0001\u0003\u0007\f\b\u000b1.,*1/5\u001da\u0007\u0001*\u0001\b\u0006\u00102.\u000b'\b\u0004\u0007a\u000f\u0001\u0004\u0006\u0011\u0001\u0001\u0004\u0006\u00062-\u0012\u0004\u0001\u0004\u0007\u0001\u0004\u0004\u0004\t\u000e2-\u0006\u0007\u0003\u000f\u0002􀀀\u0014\u000e2-\u0006Ǉ\u0004\u000b\u0017\u0004\u00102-\b\t\u0001\u0004\u0004\u0004\u0007\u0007ޏ\n$\f/\u000f\u0005\u0010\u0004\b\u0004\u0001\u0005\u0007#\b3\u0007\u0002\u0004\u001a\u0004\u0004\u0004\u0005b\u0004\u0004А\u001e\u0011\b\u0005b*)\u0005b1\"b\u0005\u0001\f\u0017\u0001\u0006\u0005\u000bb\n\u0001\u0005\u0007\u0004\u0013\u0007\u0002\u0007\u0002\u0004\u0005\u0018\u001b-\u000f\n\u0002\u0002\t\u0001\u0001\u0004\u0006\u0017\u0019-\u0004\t\u0001\n\u0003\u0004\u0005\u000b\u0004𰸜\u0016\u001a-\u0004\t\n\u0007)\u0016\u001b-\u0006\b\u0005\u0006\u0007\u0001\b\u001d\u0004\u0006\u0016ϿG\u000e\u0006\u0007\r\u0003\n\u0006`\u0001\u000b\f\u0012\t\u0001\u0004\u0005\u0005\u0005a,\u000b\u0011\u0004\u0005\u0011"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.GUY4.REV1",
    "content": "(\r1c&\u0001\u001fe\u0006%\u0001\u0006\u0015d\u000b\u0001\t\u0017\u0006\u0005\u0004\u0004d\u000e\u0007\u0005ꊺ\u0012\u0004\u0005\u0002Ϗǜ\u00054.\u0011\u0004\u0004ԔԔ\u0007\u000b\u000b3/\t\u0005\u0011\u0005%6\u0001,\u0007၁\u0015\u0010\u0004\rc\b\u0004\t\f\r\t6,\u0014\u0004\u0004\u0004\u0004\u0007\u0005\u0001\n\u0006c\u0010\u0003\u0001\u0004\u0001\u0005\u0014\u0005\u00065-;\b\u0001\u0003\u000bd5\u001dd4\u0001 3-\u0007\u0001*\u0001\u0004\u0004\f6-\u000b\u0001\b\u001e\u0004\u0001\u0001\u0007\u0004\u00065˃,\u000e\u0004\u0007\n\u0004\u0001\u0006\rc\u0011\u0004\u0004\u0004Ԕ\u0004\u0012\u000f6-\u0006\u0005\u0018\u000e\b\r5,\u0006*\t\f6,4\u0007𼾟\u00075,;\u0007\u0006d,\u0011\b\u0001\u0005\u0004\u0005d*(\u0002d*/e[e\u0005\u0001\u000b\u0011!e\u000bϏ\u0004\r\u0001\u0004\u0006\u0004\u0005\u001fB\u000f\u0006\u0002\u000e\u0006\u0003\u0001\u0004\u0003\u0005\u0007\tB\u0004\t\u0012Ѐ\u0004ԅ\u0012\u0004\u0004Օ\u0014-\u0004\b\u001f\u0005\u0004\u000e𰸜\u0007\u0001\u0004\u0004\u0014-Y\u0015\u0014-2\u000f\u0006\u001dA\u0004!\u0006\b\u0006\u0004\u0007i,\r\u0002\u0011\u0004\u0005i-\u000e\u0004\u0001\u0002\u0005\u0005%\n\u0004Y\u0001\u0001\t\u0001\u00069Y\n\u0012\u0006&3\u0004\u0007 \u0004\u000f\n\r-\u000f\b\u0007\u0001\u0001\r\u0007\b\u0005\u0001\u0004Օ\u0007\f-\u000b\u0001\u0004\u0004\u0004\u001b\u0005\u0005Ç\u0005\u000b\u0006\u0005\r-\u0007+\u0006\u0004\u0004\u0004\b\u0005\u0002\u0004\u0004\u0004\r,\t\"\u0006\u001c\u0001\u001a:\t\u0015\u0005\u0004\u0005\u0013\u0004Ϗ\u0004㇟\u001a\u001d8\u0001𐸐\u001d\b\u000f\u0016\n\u0004\u001e82`\u0011"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.GUYBLOCK",
    "content": "\u001a\u000e1\u001b\u001e\t\u0005<\u0004\u0019\u0004\u001f\u0001(\u0004\u0006\u0006\u0004\u0001\u0004\u0005\u0010\u0001\u0016\u0001\u0001\u0006\u0007+\u0006\u0005\u000b\u0011\u0010\u0001\u0001\u0001\u0014\u000f\u0001\u0006+\u0001\u0006\u0004\u0004\u0004\u0015\u0004\u0011\u0001\t\u0004\u0005\u0001\u0006𜾾\u0002\u0006+\u0004\u0007\b\n5\t\u001c+\u0004\u0007\u0016,1+\u0004\u0007\n\u000f\b\u0005\u000f\u0001\u0011(+\u0004\u0007\u0004\u0001\u0004\u000f\t\u0005\u0004\f\u0001\u0007\f\t*\u0001\u0004\u0006\u0010\u0001\u0004\u0005\u0016\u0004\b\u0018\u0001Օ\u0007*\u0005\u0006\n\u0003\u0006\u0006\u0003\u0010\u0007\u0019\u0003\u0004\u0002*\u0005\u0006\u0005\u0001\u0010\u0007\u0004\u001b\u0006\f\r*\u0004\u0006\u0006!\u0007\u0005\u0004\u0005\u0007\u0004\u0004\u0007 +\u0004\u0006\r\u000e\u0017\u0001\u0006\u0005\n\u0001\b\r\b\u0018\u0011\u0004\u0006\u0011\u0011\f\u0004\u0005\u0001\u0001\u0001\u0004\u000e\u0007\u0004\b\u0018\u0011\u0005\u0005\u0001\u0004\u0007\u0004\u0001\t\u0001\u0010\u0001\u0002\f\u0016\u0001\u0001\u000bチ\b\u0017\u0011\u0005\u0005\u0005\n\u000b\u0001/Ç\u0005\u0003\u0004\u0006\u0007*\u0005\u0004\u0001\u001c\u00010\b\u0015\u000f*\u0004\u0004\u0011\u0004\u0016\u0015\u001c\u0017*\u0005\u0005\u0005\u0005𰐘\u0010\u0004\b\u0004\u000b\rఘ\u0010)\u0005\u0005\u0006\u0006\u0005\u0001\u0017\u0001\u0006\u0001\f\u0007\f*\u0005\u0005\u000b\u000f\u0002\u0012\u0002\u001d\u0004\u0006Յ\u0005*\u0004\u0005\u0006\u0004\u0004\u0005\u000f\u0005\u0001\u0019\n\u0005\u0002+\u0005\u0007 \u0007 \u0006\u001c܈+\u0006\u0016\u000e\u0011\u0006\u0004\u0004\u0015\u0004\u0004\u0006\u0007\t+\u0004\u0005\u0007\b\u0001\u0005\u0005\u000e\u000f\u0004\u0013\u0007\u0004\u0004+\u0004\u0005\u0007\u0001\u0007\n\u0004\u000f\u0001\u0004\u0001\u0002\u0016\u0004\u0001\u0005+\u0004\u0005\u001e\u000e\u0002\b\u0001\u0010\u0004\u0003\b\t+\u0005\u001a\u000f\u0017\u0004ర\b\u000f\u0015,\u0006\u0005\u0013\u0015&\r\u0015,\u0006\u0005\t\u0016\u0001\u000e\t\u0005\u0014,Ѐ\u0006\f\u0001\u0005\u0015\u0004\u0012Օ\u0005\u0005,\u0006\u000b\u0001\u0007\u0002\u0001\u0015𰠠\u0018\u0001\u0004\u0004\u0005+\u0006\u0005%\u0001\u001c\u0006\"+\u0004\u0006Ǉ\u0004 灀#&+\u0004\u0004\u0006\u0004\n\u0004\u0005\u000f\u0007\u0004\u0016\u0001\u001f-e\u0006\u0001\u0004\u0004\u0005\n\u0001\u0004\u0004\u0005H\u0007\u0001\u0006\u0006\u0005\u0006\u0001\u0002\t\u0001\u0019\u0005\u0004\u0011\u0002\u0013"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.GUYMODEL",
    "content": "1(\b1)11Հ))11\u0005\u0001\u0004\u0006\u0004\r\u0001\u001f11\t\u0006\u0003\u0001\f\u0006\u0001\r11\u0004ԅ\u0013\nǟ\u0002\u000411\u0005\u0004\u000e𰸜\fՀ\u0002\u000e111\u0001!11Հ\u0001\b\u001e)11\u0005\u0005߿\u000e)11\f\u0004\u0003\u000eՀ 1\u0005\u0004\u0016\u0005\u0002\t\u000f\u0006\u00121\u0006\u0002\t\u0004\u0004\u000e0\u0007\u0005\u000e1\u0005\u0005\u0001\u0002\u000e1\u000b\u0004\u0004\u00061\u0001\u0006\b\u0018Հ\u0001\t\u001eՃ\u0003\u0007\u00061\u0015\u001a\u0004\u000e$1Հ뿇)\u000b\u0002\u0007\u000eՀ!1\u0005\u0001\b\u0017\u0007\u0013\u0005\u0007\u00111\t\b\u0007\u000f\u0001蠀\u0011\u0018\u0007Ͽ\u000f1\u0006\u0004\u0001\u0004\u000f1\u000b\u0004\u0001\u0005ߏ\u000b1՟\u0005\u000e\u0012Հꏇ\t\u001e՟\u0001\u0005\u0007𪪪\n1\u001bԕ\u000e\u0005\u0004\u0004\u0004\u000e\u0014\u000e1Հ\u0001\u000b\u0013\nϿ\u0002ꪨ\u0004\u0001\r\u0019\u000e1\u0007Ϗ\u0004\u000b\u0004\u0001\u001b!1\u000b\u0006\u0002\bվ*\u0005\u0001\u0004\u00121\t\u0012\u00061\n\tߟ\u0004\b1\b\"Հ\u000b\u001e\u0006\u0001\u000711\u0004\t\u0019\u0004\n\r1Հ\u0001(\u0005\n\u0015\u0015\u000f1\u0005\u0001\b\u0018\u0006\u0004\u0004\u0001\u0010%1\b\u0004\u0004\f՟\u0004\b\u0004\u0012Հ𠠼\u0006\u00161\u000b\u0004\u0002\f\u0015\u0017\u0006\u0002\u0004\u0006\u0004\u00061՟\u0005\u0004\u001bՀ\u0001\u0006\u0018\n\u0004\u0001\u0004𪪪\u00061-\u0006\u0005\u0004\u0004\r\u0001\u0005\u0004\u0004\f1Ռ)ՃŅՕ\u0003\u0001\fՀ&1\u0005\u0001\u0004\u0015\u0001\u0005\u0007\u001d)1\b\u0007\u0002\u0001\rՀ&Հ\u0001!1\u000b\u0004\u000e\u0007\u0006\u0013\u0004\u0001\u0005ߗ\u0005\b1Հ\u0005 Հ\u0005\u0004\u0004\u0001\u000bՁ\u0007ß\u0001\u0001\u00071+\u0001\u0004\n\f\u0004\u0004\u0004\f11\u000b%\u0012\u0004\u0013"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.GUYMODEL.GD",
    "content": "(\b(\b1)11Հ*)11\u0004\u0005\u0004\r\u0001\u001f11\u0005\u0004\u0001\u0002\u0001\f\u0005ח\u0007\u000b11ʪ\u0005\u0015\u0005׮\u0002\u000411\u0004\b#ՀՕ\u000e111\u0001\u0004!11Հ\u0001\f\u0019)11\u0004\u0006\u0004\u000e)11\u0006\u0005ّՔ\rՀ 1\u0005\u0018\b\nа\u000f\u0004\u0004\u00131\u0005\r\u0001߿\u0004\u000f\u0005)\u0004\u0005Ǘ\u000e1\u0005ʊ\u0004\u0001\u000e1߿\u0005ꪯ\u0005\u0004\u00061\u0001\u0006\u0007\u0017Հ\u0001(Ճ\u0004Օ\u0004ਨ\u00061\u0015\u001a\u0004\b\u000e%1Հ뽅)\b\u0005\u000eՀ!1\u0004\u0018ꪪ\u0007\u0013\u0004\u0004\u0006\u00111Հ\u0004\u0004\u0005\u000f\u0001蠀\u0004\t\u0018Հ\u0005ח\u000e1\u0005\u0005\u0001\u000f1\u0002\u0005\u0001\u0006\u000b1՟\u0005\rՅ\u0011Հ酅(՟\u0004\u0007\u0001\n1\u001c\u000e\u0004\u0004\u0004\u000e\u0013\u000e1Հ\u0001\u000b\u0013\u0004\u0002\u0001\r\u0019\u000e1\u0007Ϗ\u0004\u000b\u0004\u0004\u0004\u001b!1\u000b\u0006\u0002\bվ)\u0004\u00121\t\u0012\u00061\u0004\u0002՟\u0004\b1\b\"Հ*\u0005\u0005\u0001\u000711\u0004\b\u001f\u0006\n\r1Հ\u0001(Հ\u0001\u0005\u0007\u0001߿\u0015\u0015\u000f1\u0005\u0005\"\u0001\u0005\u0002\u0001\u0010%1\u0005\u0007\u0004\r՟\u0006\t\u0005\u0012Հ𠠔߿\u001d1\b\u0004먨\u0001\f\u0015\u0017\u0005\u0001\u0004\u0004\u00061՟\b\u0004\u001bՀ\u0001\u0006\u0018\u0007\u0005\u00061.\u0006\u0005\u0004\u0004\r\u0005\u0004\u0005\f1Ռ)ՃŅ֖\u0003\u0001\fՀ&1\u0004\u0015\u0001\u0005\u0007\u001c)1\u0005\u0004\u0001\u0001\u0001\rՀ&Հ\u0001!1\u0007\u0005\u000e\u0007\u0005\u0013\u0004\t\u0005\b1Հ\t\u001fՀ\u0005\u0004\u0005\u0001\u000bՁ\u0004証\u0001\u0004\u0001\u00071\u0004+\u0001\u0004\u0004\f\u0007\u0004\f11\u000b%\u0012\u0004\u0011"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.HALVES",
    "content": "0ođđđđđ0đđđđđ;008+đđđđđđ0đđđđđđ4đǕ̹-ݮ00袨0đđđđđ0đđđđđ0ѓ/##0đđđĐ!đĐĐĐ!Đ9ݮ0u߿ʎʟߊ!\b\u0014\u0012\f\r\u001fȢ$\u0006\t\u0005\u0006\u0017\u0006\n\u0006\u001eđđđđđđ4\u0001\u0006ȸ)đƒÅȸ\b\u0005\u001aݮ0ࠠ(蠠\u000b\u0006\u0015đđđđđ0\u0004+ɍ\u000e\u0004\u0002\u00110-\u0013\u0006Ք\u0018đđđđđđ0Đ1Đ\u0017\u0019ݮ0O\u0004\u001cđđđđđ0đ;008\u001eđđđđđđ0đđđđđđ\u0017\u001bđĐȸ\u001dȸݮ0\u0001\u0005\u0007Á\u000f\u0004ࠠ\u001dࠠđđđđđ0đđđđđ\u0005\u0005\u0001\u000f\u0004\u001d0\u0001\u0005\u0005\u00156đđđđđđ0đđđđőĒ\u0013\u0015Đ9ݮ0\u0015Vđđđđđ0đđđđē;0#\u0005\u0004\"\b\u000b\u000e\u0005đđđĐ!đēŐđ\u000b\u0005\"\u0004đĐ\u000bȸ\rȸ\u0005ݮ0\u0005\u0004\u0005\"\fࠠ\rࠠ\b߿ʎʟ!\u000b\u0005)\f\r\u000b#\u0006\u0001\u0005)6Đđ0Đ9Đ9ݮݷńy0໮v\u0017\u0011܀đsđĐ\u0017ȸ\u0011ݮ\u000b\u0004\u0018ࠠ\u0014ݷńȇ㐐㐐㐐㐐\bȇ㐐㐐㐐㐐\u0018\u0017໮㗐䐌ҡ㗐䐌ҡ㗐䐌ҡ㗐䐌\b\u0001⒡㗐䐌ҡ㗐䐌ҡ㗐䐌ҡ㗐䐌\u00046܀ߓ䌌򜜲䌌򜜲䌌򜜲䌌𓏿\b̲䌌򜜲䌌򜜲䌌򜜲䌌𓏿\u0007Đ9݀"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.HIBLOX",
    "content": "0\u0002\u0004\u0004\u0004\u0005\b\u0007\u0004\u000f\u0001\r\u0004\u000b\u0005\u0012\u00067\r\u0001\u0016\u000e\u0011\r\b\u0005\u0001\u0004\u0002\u00048\u0006\u0004\u0004\u0001ޟ\u0005\u0004߁\u001a\u0005\u0004\b\u00048\u0005\u001d\u0005\u00056\r9\u0005\u0001/\u0001\u0004\u0004\u001f\n8\u0005\u0001\u000b ߿\u0004\u0005\u0001\u0001\u0012\u000b8\u0004\u0007Ϗ\u0004\u0012\u0001\u000b\u000e\u00137\u0010\u0006\u0002\u0004\n\u0015\b\u0004\b7\u0005\t\u0012Ѐ\u0004\u0013\u0004\t\b7\u0001\u0005\b\"\r\u0001\f\u0001\r\u000e7\u0010\u0004\u000e\u0005\u0005\u0004\u000b\u000b\u0004\u001d7\u0007\u0001\t\b\u000f\u000e\u0005-7\n\u0002\n\u0001\u0013\u0001\u0001\t\u0013\u000b\u00058\u0005\u0007\u0001\u0004\b\u0006\u0006!\r8\u0005\u0001\u0006\u0005\u000e\r\u0016\u0001\u0013\u0018\u0006\u00058&\u0002\u0019\u001f\u0005\u0005\u000e\u000e)\u0004\u001a\u001f \u0010\f(\u0005\u0005\u000b\u0001#\u0004\u0010\u0010\u00128\f\u0001\u0004\u0004\u000b\n\u0006\u0013\u0002\u0006\u0005\u0005\u00078\u000e\u000e\u0001\u0005\u0010\u0005\u0001\u0005\u0017\u0004\t\u0001\u00078\t\u0001\u0004\u0005\u0019\u0001\r\u0013\u0001\u0004\u000e8\u0005\u0001\u001d\u0005\u0005\u0004\u000b\u0005\u00198\u0005\u001d\u0010\u000b\u0004+9\u0005\u0001\u0004\n\u0006\b\u0004\u0001\u0004\u0001\u0004\u0012\n\u00058\u000e\u0004\u0001\u0004\u0001\u0005\u0004\u0007\b\u0005 \u0004\u00068\u0005\u0004\u0002訨\u0005 :8\u0004D\u000b\u001c\u00109\b=%\u00119\u0006\u0004\f\u0004\u000e\u0011\u0004\u0011\u0010\u0013:\n\t\n\u0004\u0005\f\u0004\u0004\u0007\b0\u000f\u0005\u000b\u0013\u0004\b\u0012\u000e\b\b\u00010\n\u0001\u0004\u0010\u0006\n\u0006\t\u000e\b/\u0006\u001b\u0006!\u0001\u0006\b\u0017ف9\u000f,8,8"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.IMPALED",
    "content": "a>>J)\b/FǓǗǗ\n\"\u0004Ǖĕđđ/B,/Bф\u0006\u0005\b đēА0B񱐘+5BĐ\u0007\u0004ࠠ\u0005$Đ6>L-\u000b.J\u0006\u001f\u0006.FǓǗ뫋Ã\u001c\u0006đ/B\u0007\u0019.Bф\u0006\u0005\u0016ݷń0B񱑘\u0001\u0007\u0005\u0017໮2BĐ\b\u0004࣯\u0005#܀Đ3T)>\f.J)\t.FǗ×Ǘ\n \u0005đđđđ.B+/Bđ\u0007\u0005\b\u001fđđĐ2B񱑙+6BĐ\b\u0004ࠠ\u0005\"ݐ9>\n0J.\u00070FǗƗƕĕ\u0007(đđđđ0B//3đ𰰰\u0007'đđđđĐ0đđđđđ3ᡱ043Đ\u0005\u0007,Đ7đđđđđđtD\u0005\u0004V\u0004\u0004@Őđ\u000b\u0005V\u0004\f<\u0005\u0004\u0005O\u0004ߟC\u000b\u0005V\u0004\fC\u0001\u0005W\u0004\u0004\u0001CĐ9<\u001c\u0001"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.JUMPFALL",
    "content": "011\u0005\u0018011\u0007\u0012\u0005\u0001\u0004\u0004\u0016\u0012\u0005\u0014\u0005\b\u001c\u0004\u0004\u0006\u0001\u0012\u0007\u0001\u0005\u0011\u0004\u0006\u0004\u0002\r\u0003\u0015*\u0017\u0004\u0001\u000e\u0007\f\u0001\f\u0004\u0004\u000f\u000b\u0015\u0005\b\u001b\u0012\u0007\u0015\u0019\u000f\u0001\u0005\u0006\f\u0006\u0014\u0005\u0002\u0002\u0004\r1\u0004\u0005\f\u0004\u0001\u0004\u0010\u0004\u0004\n\u000b1*\u0019\u000f\u001f\u0001\u000f\u0005\u0004\u0005\u001b\u0011\u0005\u000b\u0005\b\u001a\u0004\u000b\u0004\u001b\u0001\u0005\u0017\u0004\u0006\u0002\u0004\u0002뿟\u0005\u0005\u000b\u0016\u0005\u0001\u000f\b\u0012\u0007\u000f\u0005\b\u0001\u0004\u0012\u0006\u0004\u0001\u0001\r\u0018\u0001\u0012*\u0017\u0001\u0011\u001a\u0001\u00131\u0012\u0007\u000e\u0004\u0004\u001a\u0001\u0005\u001a\u0005\u0004\u0019\u0005\u0002\u0002\u0004\u0005\n\u0017\u000b\u0003\rϏ㇟\b\u0016\u0004\u0004\n\u0002\u0004\u0006\u0001\u0004\u0014\u0005\u0007\r\u0004\u0006\u0001\u0011\u001f\b\u0016\u0002\u0013\u0019\u0001\u0015\u0018\u0001\u0011*\u0005\u001d(\u0005\u0005\u001c\u0004\u000b\u0004\u0014\u0006\b\u0019\u0005\u0001\u0004\u001c\u0006\b\u0018\u0005\u0001\u0007\u0004\u0005\u0005\u0017\u0006\u0001\u000f\u0006\u0006\u0002\u0014\u0006\u0004ꪪ\u0006\b\b\u0004\u0010\u0004\u0004\u000e\u0013Ԝ\u0014\u001a\b\u0005\u001b\u0019\u0002\u00141*\u0004\b\u001a'\u0005\u001a\u0001\u0005\u0013\u0004\u0006\u0018\u0001\u0002\u0004\t\u0007\b\u0019\u000b\u0003\u0004\u0005\u000f\u0001\u0017\u0013\u0004\u0004\u0006\b\u0005\u0004\u0016\u0005\u0007\u0001\u0005\u0004\u001c1\u0013\u0002\u0016\u0019\u000e\u0005\r\u001b11!\u0001\u0014\u0005\u0005\u0004\u0004\u0011\u0004\u0016\u0005\u0001\u0004\u0015\u0004\u0018\u0001\b\u0004\b\u0001\t\u0006\r\u001a\u0006\u0001\u0004\u0006\u0004\f\u001e%\n\u000e\u0013\u0004\u0004\u0006\t\u0003\u001c\u0013\u0018+\u0019Ԕ\u000e\u0004\u001b\u0005\u0004뻻\u0004\n\u0004\u0018݀*\u0003\u0001\u001e\u0016\u0002\n\u0005\u0004\u0005\u0016*\u0004\u0004\u0004\u001d1\f\u0015\u0004Հ*\u0005\u001e1+\u0004*\u0001\u0004\u0019\u0005\u0001\u0004\u0017\u0004\u001a\u0005\u0004\t\u0004\u0006\u0013\u0004\u0002\u0004\b\u0004\u0004\u0004\u0015Ѐ\b\u0007\u000b\u0015\u0005\u0014స\t\b\u001b\u0013\u0011\u0001\u0005\u00131+\u0005\u0004\u0005\u0004\u0005\u0004\u0004\u001311\u0018\u0004\u0002\u0004"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.JUMPHANG",
    "content": "瀂\u0001\u0001\u0005\u0004\u0001\nՇ\u0004\u00048\u0007\u0005Օ\u0004\u0004\u0004\u0005ܬq\n\u0004Օ\b\u0007k\u0004\u0005חM\u0004\u0006\u0004!\u0002\u0006\u0007N\u0005\u0002\u0004\u0001\u0006\u0003\n\u0005\u0004\u0001\u0004\u0005\u0005\u0004\u0018\u0004\u0004חY\u000e\u0004\u0004\u0005\u0018\u0001\u0006\u0006\u0010\u0004\u0005\u0007\n\u0004\u0005\tܘ\u0004ꪨ\u001c\u0005\f\bN\u0005\u0002\u0002\b\u0001'\u0006\u0006\b\u0004j\u0004%\u0001\u0005\u0004쬬\u0004\r\u0004\u0004\u0003\u0001)\u0005\u0005\u0005\u0004`4\u0003\u0004쬼\u0001\u0002\u0002\b\u0001'\u0006\u0006\b\u0004j\u0004%\u0001\u0005\u0004쬬\u0004\r\u0004\u0004\u0003\u0001)\u0005\u0005\u0005\u0004`4\u0003\u0004쬼\u0001\u0004\u0005\tܘ\u0004ꪨ\u001c\u0005\f\b\r\n\u0004\u0005\u0002\n\u0012\u0005W\u0002\u0004!\u0002\u0002\b\u0001'\u0006\u0006\b\u0004j\u0004%\u0001\u0005\u0004쬬\u0004ɀ\u0004\u0004\b\u0011\u0004\u0004]\t\u0001\u0005\f\u0011\u0003\u0001)\u0005\u0005\u0005\u0004`4\u0003\u0004쬼\u0001"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.L1",
    "content": "\u001e\u0006\u0004'\u0005@G0\u0005@G0\u0005\u0019n0\u0005\u0017_\u0005\u0006\u00060\u0005\u0015\u0001\u0017ՁB\u0005\f0\u0005,\u0001\u0004\u0007\f\u0004\u0005\t\u00110\b,\b\u0004\f\u0005\u0004\u0004\b0\u0005,\b\u0005\u0013\n\u0007\u0005׿\u00070\u0005՟\u0006\u0005\u001d\u0006\u0018\u0004\u0001\u0004\u0004\r0\u0005\u0007Օ\u0006&\"0\u0005\u0006\u0004\u0004Հ\u0005\"\u0004Հ%0\u0005\u0001\u0005\u0007\r,\u0004(0\u0005ՀF<0\u0005\u00116<0\u0005\u000f\u001a\u001a=0\u0005\u0010\u001a\u0019\u001d\u00180\u0005\u0011\u001bՏ\u0016\u000f\u0004*0\u0005-\u0002\u0005\u0007Տ\u000f\u0012\u0004\u00140\u0005Վ\u0004\u0005\u000f\b\u0007\u0004\u0001\u000fտ\u0004\u0004\u0005\t0\u0005\u0006Օ\u0004׿\u0007\b\u0005\u0001\u0013\b\u0001ߟ\b0\u0005\u0007\u0003\u000e\u0005\u0016\u0005\u0002\b\r0\u0005\u0001\"%\f\u00130\u0005Հ(Հ(Հ(/\u0005-\u0018\u0014+/\u0005-\u0018A/\u0005\ty/\u0005Ձ\u0007\u001c:\u001c/\u0005\u000f\b\u0016\u0013\r\u001a0\u0005\n뫺\u0004\u0003\u0007\u0004\u000b\u0012\u0010\u00170\u0005\u0007\u0001\u0004\u0001\u000e\u0004՗\u000b\u0005\u0005\u00130\u0005Հ\u0001\"\u000b\u0001\t\u0004\u0004\u000b\b\u0004\u0001\u0006\t0\u0005'\u0005\u0001\u0004\u0014\u0006\r\u0002\f0\u0005Ձ'Հ\u0001$Հ\b\u000b0\u0005\u0001\u000f\b!\u0019\b0\u0005\n\u0001뫺\u0004\u0003\u0006\u001f\u0007\u0004*0\u0007\u0007\u0001\r\u0007Հ\u0001\u001c\u0005r\u0016\u0005߿'\u001a\u000f\\\u000b3\u0004H\u0015"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.L2",
    "content": "\u000b\u0012\t\u0012\u0012\u0007\u0013p\u0007\u0004)#7,\u0007,\u0007!\t\bx\u000f \b\tX\u0019\u0001\u000e!\b\b0\u0018\u0016\u0013!\b\u0007.\u0004\u0004\u000b#\u000b\u0007!\t\u0006\u0004\b\u001f\u0004Օ\u001bו׿\u0006 \b\u0007\u0004Հ\u0005\u0001\n\u0007\n\u0001\u0004\u001b\u0005\u0004\r \b\u0007\u0004\n\r\n\u0005\t\"\u0004\u0012\u001c\u0004\u0004\u0004\u0006\u0004Հ\u0001\u0006\u000fՀ\u0001\n?\u001c\u0007\u0004\u0006\u0006\u0005&\u0004M\u001c\u0007\u0004\u0006\u0006,#\r\u000b\u001c\u0007\u0004\u0006\u00070\u001d\u0011\r\r\u001c\u0007\u0004\u0006\u0007\u00040\u0005\u0010'\u0005\u0006\u001c\u0004\u0004\u0004\u0007\f\u001e\u0005\u0004\u0007р$\r\u000f\u000f\u0007\bՀ\u000eผ\u0018\f\u0001\u0004\u0004\u0005\u0003!\u000f\u001f\u0004\u0007\u0007\u0004\u0001ޖ\b𔔅\u0011\u0007\u0001\u0005$\u0014\u001f\u0004\u0007\u0007\u0004\u0006\u0007\u000bՀ\b\u001a\u0006\u0004\f\u0006\u001f\u0004\u0007\u0007\u0004\b\fֿ\n'\u0004\u0001ו׿\u0005\u001f\u0007\u0007\u0004Հ\u0001\b\u0011,\b\u0004\u0003\f \b\u0007(,\u001d\u001c\u0007\u0004\u0004\u0004\"\u0005Հ(Ѐ*\u001c\u0004\u0007\u0004\u0007\u0012\u001aؐ\u0005\u0004\u0004\u001d\n\u001c\u0007\u0004\u0007Հ\u000f\u0019\u000b\u0001\u0004\u0004\u0017\r\r\u001e\u0006\u0004\u0007\u0004\u0005\u0016\u0007\u0004\u0006\u0004%\u0004\u0006\u001e\u0004\u0006\u0004\u0007\n\u0001\u0004\tՀ\u0001\u0006\u0019\u0017\u000f\u001e\u0004\u0006\u0004\u0004\u0007\u0004\u0004\t(\u0016\u0010\u001f\u0004\u0007\bՀ\t\u001a)\u0005Շ\n\u0006\u0015\u001e\u0001\u0004\u0006\u0001\b(\n\u0015\u0006\u0005\u0001Ձ\u0004\u0005\u001e\u0004\u0006\t\u0006\"\u0006\u0007\u0004\b\u0006\u0006\u0005\u0005\u001f\u0007\b*\f\u0006\u0005\u0004\b\n\u0004\f \b\b\u0012\u0013\n\u0007\rՀ\" \u0001\b\u0001\b\u0001\f\u001d\u001a\u0005Ã# \b\t\u0007\u0004\u0001\u001b'\u0003\u0005\u0005\u0004\u001f\u0007\u000b\rՕ\u0004\u000e'\t\u0004Օ\u0004#\u0004\u0007\u000b\t\u0002\u0004\u0004\u000e*\u0001\u0006ࠠ\n#\u0007\u000b\u0004\t\u001f*\u001e1\t\u0005'\u0006a\f%0\u001e1\n.g\u001c7\u001e1\r!n\u0004\u0004\u000b\u0001\u001b\u0004Հ!+\u0006\u0005\u000b\u0011\b\"%-\u0006\u0006\u0004\u0004\u0002\u0005\u0001\u000e\u0006\u0004\u0017Ր\u0001\u0013\u000b\u0006\u0004\u0004\u0005\b\u0004\u0004\u0005f\u0004\t\u0019\u0005\u0001\u0007\u000fe\u0004\u0001\u0002\t\u0001\u0019\u0005\u0004\u0011\u0001\u0014\u0011\u0001\u0014\u0014 "
  },
  {
    "path": "04 Support/DRAZ/F/PAC.L3",
    "content": "\u000e\u0015-\u00027\u0006\u0002\u0004\u0002\u0017\u0002\u0010\u0015(\u0004\u0004\u0006\u0004\n\u0004\u0005\u000f\u0001\u0001\b\u0001\n\u0003\u0007А\u0007\u0015+\u0004\u0006\u0004 \t\u0001\u0004\u0001\u0005\u0010\u0001ᨪ\u0004\u0006+\u0006\u0005D\u0002\u0010\u0005\u0005\u0001\u0006,\u0006\u000b\u00072\b\u0004\u0004\u0004\u0010,\u0006\f\u0001\u0005\u0002$\t$,\u0006\u0005\t\u0001\u0013\u0005\u0004\u000b\u000f\t\u001c,\u0006\u0005\u0013\u0015\u0004\u0004\u0004\u000b\b\u001c+\u0005\u001a\u001a\u0005\t\u0001\fՀ\u0005\u0001\u0007+\u0004\u0005\u001e\u0012\u0007\u0012\n\r\u0007+\u0004\u0005\u0007\u0007\n\u0004\u0007\u0001\u001b\u0004Հ\u0001\u0006\f+\u0004\u0005\u0007\b\u0005\u0005\u0010\u0004\u0005\u0007\u0004\u0004\u0004#+\u0006\u0016\u000e\u0015\u0007\u0005\u0005\u0005\u0004\u0001\b\u0007\b+\u0005\u0007 \u0001\u0006\u0004\u0001\u0005\u0002\u0004\u0005\b\b\u0004\u0001\b\u0018\u0011\u0004\u0005\u0006\u0001\u0004\u0004\u0005\u000f\f\u0002\f\u0002\u0007\f\u0001\nǇ\u0007\u0018\u0011\u0005\u0005\u000b\u0002\u000f\u001f\f\u0006\u0006\u0006\u0007\u0017\u0011\u0005\u0005\u0006\u0006\u0005\u0001\u0001\b\u0004\u0007Ձ\u0004\u0007Հ\u0016\u000f*\u0005\u0005\u0005\u0005񟇇\u0001\r\u0005\u0001\u0002\u0003\u000b\u0010\u001a)\u0001\u0004\u0004\u0001\u0011\u0004𘎃\u0018\u0004\u0004\u0006\nՀ\u000e\u0014)\u0005\u0004\u001c\u000e\u0001\u0018\n\u0001ޖ\b\u000e*\u0005\u0005\u0005\n\u000b\u0007Ã!\u0004\u0006\u0007\b*\u0005\u0005\u0004\u0007\u0004\u0001\t\u0006!\u0001Ā\b\fֿ\u0007*\u0004\u0006\u0011\u0011\t+Հ\u0001\b\u000e+\u0004\u0006\r\u000e\u0013\u0006\u0004\u0004\u000f%*\u0004\u0006\u0006!\u000e\u0011\u0004\u0007\u000b\u000b\u0006\u0004*\u0005\u0006\u0005\u0001\u0010\u0007\n\u0004\u0002\u0007\u000e\u0004\u0005*\u0005\u0006\n\u0002\u0006\u0006\u000b\t\fՀ\u0001\u0004\u0006\u0002\t*\u0004\u0006\u0010\u0004\u0005\u0001\u000b\u001bస\u0005\u000e\u0015+\u0004\u0007\u0004\u0004\u0001\u000f\t\u0002#Հ\u000f\u0015+\u0004\u0007\n\u000f\f\u0001\u0007\u0005\u0007\u0004\u0005\u0014+\u0004\u0007\u0016\u0001\u001c\u0001\u0002\u0004\u0007\n\u0001\u0004\u0006+\u0004\u0007\b\n\u0016\u0001\u0004\u0011\u0007\u0004\u0006+\u0006\u0004\u0004\u0004\u000b\u0001\u001b\u0004Հ!+\u0006\u0005\u000b\u0011\b\"%-\u0006\u0006\u0004\u0004\u0002\u0005\u0001\u000e\u0006\u0004\u0017Ր\u0001\u0013\u000b\u0006\u0004\u0004\u0005\b\u0004\u0004\u0005f\u0004\t\u0019\u0005\u0001\u0007\u000fe\u0004\u0001\u0002\t\u0001\u0019\u0005\u0004\u0011\u0001\u0014"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.LITEBRIX",
    "content": "0ođđđđđ0đđđđđ;\u0018ݐ\u000b\b08\u0007\u0007\u0007\u000fđđđđđđ0đđđđđđ4đǕ̹\u0005\u0007\u0007\u0007\u0005\nݮ00袨0đđđđđ0đđđđđ0ѓ/##0đđđĐ!đđđĐ!Đ9ݮ0o߿ʎʟߊ!߿ʎʟߊ!\fĐ\u0017ݐ\u000b\bȢ$\u0006Ȣ$\u0006\n\u0007\u0007\u0007\u000fđđđđđđ0đđđđđđ4đƒÅȸ\u0007\u0007\u0007\u0005\bݮ00蠠)đđđđđ0đđđđđ0ɍ)006đđđđđđ0đđđđđđ0Đ9ݮ\u000f\u0007\u0007\ro\u0005đđđđ\u0007\u0004\u0007\u0006\u0007\u0005đđđđđ;\u0018ݐ\u000b\b.\u00048\u0007\u0007\n\u0006.\u0004\u0001đđđđđđ\u0017\u001bđĐȸ\u0005\u0007\u0007\u0005ȸݮ0\u0001\u0005\u0007Á\u000f\u0004ࠠ\u001dࠠđđđđđ0đđđđđ\u0005\u0005\u0001\u000f\u0004\u001d0\u0001\u0005\u0005\u00156đđđđđđ0đđđđőĒ\u0013\u0015Đ9ݮ0\u0015Vđđđđđ0đđđđē;\u0018ݐ\u000b\b#\u0005\u0004\"\b\b\u0005\u0007đđđĐ!đēŐđ\u000b\u0005\"\u0004đĐ\u000bȸ\u0005\u0006􆇅ȸ\u0005ݮ0\u0005\u0004\u0005\"\fࠠ\rࠠ\b߿ʎʟ!\u000b\u0005)\f\r\u000b#\u0006\u0001\u0005)6Đđ0Đ9Đ9ݮݷńy\u0018ݐ\u000b\b໮v\b\u0007\u0006\u000f܀đsđĐ\u0017ȸ\u0011ݮ\u000b\u0004\u0018ࠠ\u0014ݷńȇ㐐㐐㐐㐐\bȇ㐐㐐㐐㐐\u0018\u0017໮㗐䐌ҡ㗐䐌ҡ㗐䐌ҡ㗐䐌\b\u0001⒡㗐䐌ҡ㗐䐌ҡ㗐䐌ҡ㗐䐌\u00046܀ߓ䌌򜜲䌌򜜲䌌򜜲䌌𓏿\b̲䌌򜜲䌌򜜲䌌򜜲䌌𓏿\u0007Đ9݄Đ9݀"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.MAGICFIRE",
    "content": "000đđđđđ0đđđđđ0đđđđđ0000đđđđđđ0đđđđđđ0đđđđđđ0ݮ000đđđđđ0đđđđđ0đđĒʘȮ###ҀА%đđđĐ!đđđĐ!đđđđđđ0ݮ000߿ʎʟߊ!߿ʎʟߊ!đđđĐ2Ȣ$\u0006Ȣ$\u00066đđđđđđ0đđđđđđ0Đ9ݮ0ođđđđđ0đđđđđo0ođđđđđđ0đđđđđđoݮ0ođđđđđ0đđđđđo0ođđđđđđ0đđđđđđ\u0017Vݮ0\u0001\u0005\u0007ÁQđđđđđ0đđđđđ\u0005\u0005\u0001Q0\u0001\u0005\u0005Wđđđđđđ0đđđđőĒ\u0013W0\u0015Vđđđđđ0đđđđēo#\u0005\u0004V\u0004đđđĐ!đēŐđ\u000b\u0005V\u0004\u0001ݮ0\u0005\u0004\u0005P\u0004\u0004߿ʎʟ!\u000b\u0005W\u0004\f#\u0006\u0001\u0005X\u0004\u0004\u0001Đđ0Đxݮݷń໮܀đݩ\u000b\u0004\u000b\u0004ńȇ㐐㐐㐐㐐\bȇ㐐㐐㐐㐐\bȇ㐐㐐㐐㐐໮㗐䐌ҡ㗐䐌ҡ㗐䐌ҡ㗐䐌\b\u0001⒡㗐䐌ҡ㗐䐌ҡ㗐䐌ҡ㗐䐌\b\u0001⒡㗐䐌ҡ㗐䐌ҡ㗐䐌ҡ㗐䐌\u0004ߓ䌌򜜲䌌򜜲䌌򜜲䌌𓏿\b̲䌌򜜲䌌򜜲䌌򜜲䌌𓏿\b̲䌌򜜲䌌򜜲䌌򜜲䌌𓏿\u0007݀"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.MSG",
    "content": "R\u0004\u0006\u0004(N񘌌\u0004\"\u0004\u00171\u0004Z\t\r\u0001 \t\u0001\u0001\u0005~\u0005漀\u000bՀ\u0006怀\u0006\u001a\u0005\u0004\u0004\u0006\u0001\u0007\u000b\u0001 \u0006~䶷\u0006\u0001\u000bՀ\u0006\u0006\u001a\u0004\u0004\u0005\u0006怀\u0001\u000b쀀\u001aΌ̌Ό\u0004̀\u0004̎̌̀̌̌Ό̌Ό\u0004\u0004Ό\u0006\u0001澀\u0001椼\u0005\u0004Հ\u0005\u0004\u0004t\t\u0001 \tǀt\u0005漀񀀀\tՀ\u0005J)憆漀󀀀\t\u00056\u0012)𘙘\u0005\u000bՀ\u00066\u000e\b\r\r\u0005󀀀ۛۛ\n\r6Հ\u0005\u0004Հ\bՀ涞澀ՀՀ\u0005Հ\u0006\u0006\u000e\u00176\u0004Ό\u0004\b\u0001\u0001\u0001\u0005Հ\nՀ\bՀ\u0005怀ՀՀ\u0005\u0015\u0001\u0013S\u0004\b\u0005漀\u0005\u0015\u0005\u0013SՀ\u0004Հ\bՀՀՀ\u0005\u0015\u0006\u0001\u0013S𘙘\u0004\b瀀\u0015\u0006\u0001\u0013SՀ\u0004Հ\bՀ̀ՀՀ͍́\u0015\u0006g\u0006\u0004\b\u0005\u0015g\u000eԀ\bՀՀՀ\u0004\u0005\u0015f\u0014\b지\u0005\u0015Հ\u0006쀀ՀՀ\u0004\u0005\u0015\u0013p\u0005\u0004Ɔ\u0015\u0013p\t၁Հ\t\u0015ۛ\u0013\u0013\u001e"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.PANELS",
    "content": "/=\u0013=+<\u0010<);\u0001\u0011;\u0001)<\u0010<+>\u0013>/đđđĐ2\u0010đđđĐ2,6\u00106,Đ9\u0010Đ98\u0012=+⣦ͽͽͽͽͽβ⣦\u0010<)񑓙*񑓙\u0010;\u0001)ȉ϶̸ȉ϶\u0010<+\bꪪ\u0007ꪪ\u0007ꪪ\u0007ꪪ\u0007ꪪ\u0007\u0007\u0012>/đđđĐ2\u0010đđđĐ2,6\u00106,Đ9\u0010Đ98\u0013\u0007\n\n\n\b\u0004+⣦⣦⣦⣦⣦⣦⣦\u0010ʀʀʀʀʀ)ٱٱٱٱٱٱٱ\u0011\u0001襥\u0001)ȉȉȉȉȉȉȉ\u0010Ŕ+\u0007ꪪ\u0007ꪪ\u0007ꪪ\u0007ꪪ\u0007ꪪ\u0007\u0007\u0013>/đđđĐ2\u0010đđđĐ2,6\u00106,Đ9\u0010Đ98\u0013\b\u0007+ۼۼۼۼۼܶܰ\u0010\u0004ȇ㐐㐐㐐㐐\u0004)⣦⣦⣦⣦⣦⣦⣦\u0011\u0001⒡㗐䐌ҡ㗐䐌ҡ㗐䐌ҡ㗐䐌\u0004\u0001)ٱٱٱٱٱٱٱ\u0010\u0004̲䌌򜜲䌌򜜲䌌򜜲䌌𓏿\u0004+>\u0013>/đđđĐ2\u0010đđđĐ2,6\u00106,Đ9\u0010Đ98=F6<\u001303;\u0001\u00140/<\u0013đđđđ0.>\u00130.đđđĐ2\u0010đđđĐ2.6\u00106.Đ9\u0010Đ9\u000b"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.PRINCESS",
    "content": " đđđđđđđđđđđđđđđđđđđđđđ\u0016\u0006\u0004đđľ\u0006\fˋ\u000e\u0004đđđđđđđđđđđđđđđđđ\u000b\b\b\u001c\u0016Eđđđƙ\r+EȢ\u0014\t\t*BǙőőőő4\u001fE4\u001f\u0019Eđđđđđđđđđđđđđđđđđđđđđđđđđđđđđđ\u000e\u0004\u000e\u0007\b׿đđ\u0005\u0005\tđđđđđđđđđđđđđđđđđ"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.ROB1.REV",
    "content": "5\u0012\u0004\u0004\u000e\u0004\u0013L\u0005\u0005\u0007\u0004\u0006\u0004\u0005\u000b\u0002\n\u0004\n\u0004\u0004\u0004\u0010\b\u001b\u001a\u000e\u0011\u0013\u0004\u0001\t\u0006\u0004\u0004\u0001\u0005\u0001\u0004&\u0015\u0005\u0001\u0005\u0003\u0005\u0002\u0002\n\n\r<\u0005\u0006\u001a\u0016)\r<\"\u001b(\u000b\u001a\t\u000f\u001b\f\u000b%\u0001\u0004\f\u0019\u0006\u0001\u000e\u0001\u0006\b\u0013\u0001\u001f\u0011\u0013\u0019\u0005\u0001\u0003߈\u000e\f\u0001\u0004Օ\f\u0006\u0002ߟ\u0004\u0006\u0004\u0005\b\u0019ƒۛ뛫\u000f\u0007\u0001\u0001ʺ\b\u0007\u0002ꪨ\u000f\u0004\u0007\u0001\b\u0019ں\u0007\u000e\u0007\u0005\t\t\u0001\u0006\u0005\u0011\n\b\u000f\u0019\u0005\u0002\u000e\u0007\u0001\u0018\u0005\b\u0011\u0001\u001a\u0019᱀\u000e\n\u0001\b\u0006\u0004\f\u0001\u0004Օ\u0011\u0002ߟ\u0004\u0005\u0014\u0005\n\u000f\u0007\u0004\u0001\u0007\u0001\u0001ʺ\u0006\u0007\u0002ꪨ\u0013\u0006\u000f\u0007\u0001\u0002\u0004\u0001\u000bԕ\t\u0005\t\u0007\u0001\u0006\u0005\u0015\u0015\u0004\u000f(\u001d)\u000f+\u000f\"\u0019\u001f\u0006\u000f\u0017\u0002\u0004\u0004\u0006\u000f\u0005\u0015\u0001!\u0001$\u0011\u0015믻ߜ\u000f\u0005\u0004\t\u001f\u0015\u000f\u0012\u0012\u000f\u000f\b\u000b\u0006\b\u0013\u0006\u0004\u0005\u0004\u0007\u0013\u000b\u0005\u000e\u0001\f\u0001\u0005\u0011\u0005\u0005Օ\u0012\f\u0001\u0004\b\u0016\b\u0001\u000e\u0006(\t\u0004\u0004\u0005\u0005\u0001\u0004\u000b\u0013\u0005Á\u000f\u0006\u001f\u0001\u0005\u0005\u0004\b\u0005\u001d耀\u0015\u0004\rϚ\u000f\u0010\u0004\u0007\u0018\u0007\u000e\u0016\u0018\u0012\u0010\u000f\u0012\u0002\u0004\u0001\u0005\u0001\u0004\u0006\u0013\f\f\u0011\n\u0006\u000f\u0006\u0004\t\u0005\n\u000b+\u0006\u0006\u0011\b\u000e\"%9)\u0001\u0010G'\u0010\u0015\u0014\u0010\u0007<$\u0011\u0010\u0004\u0005\u000f\u0006𸸼\n\f߇\u0006\u0005\u0005\u0016\n\u0004\u0013\b\u0002\u0005\u0013ߟ\u000f\u0010\u0006㻝\t\u0007Օ\u0007\u0006\u0005\u0004\b\b\u0004\u0016\u000f\r\u0002\u0004\u0001\u0004\u0010\u0004\u0004\u000b\u0005\u0003\u0001\f\u0007\u0005\b\u000e\u0006\u0001\u0017\u0006\u0001\u0005\u0007\f\u0004\u001c\u0007ؚ\u0006\u0002\u0007\u000e\u0005\u0018\u0007\u0004!\u0007#Ǉ\b\u0005S!\u0001\u001b\u0001\u0005\b\u0002\u0005\u0005חߏ"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.ROB1.REV0",
    "content": "6/\f\u0004\u0005\u0013`\u0004\u0005\r\u0006\u0005\u0004\n\u0005\n\u0013+u\u0001\u0001\u0002\u0018\t)\u0011\u0001\u0015\u0004\f\u0001\u0005\u0001\u000e\u0001\u0002\u0007\u0005:\u000b\u0001\u0004\u0001\u0004\u0001\u0005\u0011\t\u0007\u0005\u0002\u0004%\u0012\u0005\u0004\u0004\n\u000f*\u0016\u000e!\u0012\u0005\u0017\u001c6\u0001\u000b\u0017\u0004\u0002\u0003\u0011\u001f\u000f\n8𼏇\u0007\u0017֓۟ۻ\u0013\u0019\u0010\u0004\u0004\u0004#\u0006\u0017\u0001\u001c\u0017 \u0001\u0006\u0007&\u0007\u0007\u0018\u001f\u0005\t\t\u0011\u0002\u0001<\u0015\u0001\u0004\u0011\u0005\u0007\u0001\u0005\u0003\u000e\u0006A\u0012\u0007\u0010\n\u0006\u0004\b\u0006\u001d \u0010\t\u0001\u0010\u0006\u0007\t\u0006\u000e\u0007\u0004\u0004\u0005　\u0001Օ\u0007\u0013\u0004\u0005\u000f\u0010\u0001\u0005\u0001\n\u0002\u0004\u0001烁\t\u0001\u0001\u0004'\u000f\u0005\u0004\u0007\u0007\r\u000b\u0004\u0004\u0007\u0004\u0013\u0003\u0005\b\u0010\u0005\u0016\u0001\u0010\u0015\u0001\u0011\u0017\u000e\u0012䛿ߞߟޞ\u0010 \u0001$*Յ\r\u0010\u000f\u0013\n\u000e\u0011.\u000b\u0011\u0004秆\u0010\u0014\f\u000e\u0004\u0004\u0018\t\u0007\u0014\b\u000f\u0001\u0005\n\u0017\u0001\u0006\u0012߇\u0006\u0005\u0005\u0004\t\u0007\u0017ٙŃ\u000f\u0005\u0006\u0006\u0004\u0003\u000f\u0003\u0001\u0013\u0007Օ\u0018\r\u0001߀\u0010\u000b\u0005\u0002\u0013\u000b\u001c\u0004\u0004\u0010\u0004\u0005\u0010\u0006\u001a\u0005\u001e\u0005\u0001\u0005\u0007\r\u0010\n\u0006\u0010\u0010\r\u0005\u000e\u0016\u0007#\u0010\u000f\n\u0004\u0002\u000b\u0004\u0001\u0001\u0004\u0014\u0016*\u000f\u0005\u0006\f\u000f\u0007\r\u0017\n\b\u0006(ֆ\u000f\u0006\u0019༇$\u0007\u0014\r\u000f\u0010\u0005\u0001\u000f$! \u000b\u000e\u0011\u000b\r\u0005'\u000f \u0019&\u000f\u0005\u001f\u0004\u0006\u000b\u000f\u0015\u0005\u0006\u0004\u000e\u0001\r\u0001\u0005\u0004\u0014\u0006\u0001\u0004\u000b\u0006\u0005\u000f\u0005\u0005\u0006祡\u0004\u000e\f\u0004\u0015\u0012\u0007\u0004Օ׿\u0004\u0005\u0007߿\u0013\u000e\u0007\u0001#(\u0002\u0003\u000b\u0006ϯ\u0011\n\u000e\b\u001f\u0006\u001f\u0005\u0001\u001c&\u0001\u0001\u0012\u0007J>\u0018\u0001\u0003\u0005؈\u0004"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.ROB1.REV1",
    "content": "6/\f\u0004\u0005\u0013`\u0004\u0005\r\u0006\u0005\u0004\n\u0005\n\u0013+u\u0001\u0001\u0002\u0018\t)\u0011\u0001\u0015\u0004\f\u0001\u0005\u0001\u000e\u0001\u0002\u0007\u0005:\u000b\u0001\u0004\u0001\u0004\u0001\u0005\u0011\t\u0007\u0005\u0002\u0004%\u0012\u0005\u0004\u0004\n\u000f*\u0016\u000e!\u0012\u0005\u0017\u001c6\u0001\u000b\u0017\u0004\u0002\u0003\u0011\u001f\u000f\n8𼏇\u0007\u0017֓۟ۻ\u0013\u0019\u0010\u0004\u0004\u0004\u000f\u0005\b\u0006\u0017\u0001\u001c\u0017 \u0001\u0006\u0007\u0014\u0004\u0007\u0018\u001f\u0005\t\t\u0011\u0002\u0001\u001b\u000e\u0001\u0004\b\u0015\u0001\u0004\u0011\u0005\u0007\u0001\u0005\u0003\u000e\u0006\u001d\u0017\u0012\u0007\u0010\n\u0006\u0004\b\u0006\u001d\u0005\u001f\u0010\t\u0001\u0010\u0006\u0007\t\u0006\u000e\u0007\u0004\u0004\u0005\u0004\u001a\u0013\u0004\u0005\u000f\u0010\u0001\u0005\u0001\n\u0002\u0004\u0001烁\b\u0003\u0004\u0004\t'\u000f\u0005\u0004\u0007\u0007\r\u000b\u000f\u0001\u0004\u0013\u0003\u0005\b\u0010\u0005\u0016\u0001\u0010\u0015\u0001\u0012\u0001\u0001\u0006\u0012䛿ߞߟޞ\u0010 \u0001$\u0013\u0016ޗ\u000e\u0010\u000f\u0013\n\u000e\u0011-\u000b\u0011\u0004秆\u0010\u0014\f\u000e\u0004\u0004\u0018\t\u0007\u0014\b\u000f\u0001\u0005\n\u0017\u0001\u0006\u0013\u0005\u0005\u0005𾟏\u0005\u0007\u0017ٙŃ\u000f\u0005\u0006\u0006\u0004\u0003\u000f\u0003\u0001\u0015\t\u0004\b\u0018\r\u0001߀\u0010\u000b\u0005\u0002\u0013\u000b\u001b\u0007\u0002\r\u0010\u0004\u0005\u0010\u0006\u001a\u0005\u001e\u0005\u001d\u0004\u0010\n\u0006\u0010\u0010\r\u0005\u000e\u0016-\u0010\u000f\n\u0004\u0002\u000b\u0004\u0001\u0001\u0004\u0014\u0016*\u000f\u0005\u0006\f\u000f\u0007\r\u0017\n\b\u0006(ֆ\u000f\u0006\u0019༇$\u0007\u0014\r\u000f\u0010\u0005\u0001\u000f$! \u000b\u000e\u0011\u000b\r\u0005'\u000f \u0019&\u000f\u0005\u001f\u0004\u0006\u001b\u0014\u0005\u0006\u0004\u000e\u0001\r\u0001\u0005\u0004\u0014\u0006\u0001\u0004\f\u0001\u0005\u0001\u0004\n\u0005\u0006祡\u0004\u000e\f\u0004\u0015\u001b\u0004\u0005\u0001\n\u0005\u0007߿\u0013\u000e\u0007\u0001#%\u0007\u000f\u0006ϯ\u0011\n\u000e\b\u001f\u0006\u001f\u0006\u001e&\u0001\u0001\u0012\u0007J>\u0018\u0001\u0003\u0005؈\u0004`"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.ROB1MID",
    "content": "(\n\u0004\t\u0005\u0007?\t\u001d\u000b\n\u0002\u001c\u000f\u0019\t3\f\u0001\u0016\u0006\u0004\u0002\t\u0001\u0006\u0005\u0001\b\u00053\u0006\u0004\u0004\u0001\u0004\u0004\u0005\u0005\u0001\u0015\n\u0001\u0005\u0005\u0006\u0004\u00053\u0006\u0005\f\u0010D\u000e3\u0005\u0018\u001e9\u0001\t4\u001d\u0010\u0007!\u0019\u00074\u001a\u0010\u0003\u0004\u0005\u000e\u0005\u0007\u00065\u0017 \u0010\u0015\u0001\u0004\b5\u0004\u0005\u0005\n\u0012\u0006\u0001\u0001\u001c\u0010\u0001\u0004\b5\u0005\u000b\u0001\u0007\u0004\u0004\u0001\u000f\u0001\u0004\u001b\u0001\u0006\u0005\u00114\n\r\u0007\u0005\u0002\u001f\u0005\u0003\u001d4\u0005\u0005\u0006\u0005\u0010\u0004\u000b\n\u0018\u00054\u0010\u0014\f\u0005\u0001\u0004\u0001\u000b\u0007\u0001\b\u00064\u0005\u0004\u0001\u0005\u0004\t\u0007\u0005\u0001\u0006\u0001\u0005\u0001\u00054\u0005\u0002\u0004\u000e\u0010\u0015\u0012\u0016\u0006\u00064\u001f&,\u0001\f4\u0014\n\u0001\u000e\u0014\u000e\u001e\t4\u0014\u000b\u0001\u000e\u0001\u0005\u0006\u0004\u0019\u000b\b4\u0006\u000e\"\u0004\u0004\u0006\u0001\u0010\u0004\u0004𸸜\u0004จ\u00064\u0005\u0001\u0001\u0001\u0006\u0004\u0011\u0007\u0001\u0001\u0014\b\u0004\b4\u0006\u0006\u0010\u0004\u000f\u0001\u001c\u000e\u0001\b4\t\u0001\t\u0012&\u0005\u0005\u00115\u0005\u001c\u0007\u001f\u0005!5\u0010\u000b\u0005\u000e\u0005\u0004\u000b\u0004\u0015\u00174\u0004\u0005\u0004\u0001\u0005\u0005\u0004\u0001\u0005\u0010\u0007\u0007\u00064\u0005\u0001\u0005\u0012\u0001\u000e\t\u0010#\b\u00064#$\u0014\u000b\f\u000f4&\n\u0016!\u000b؆\f5\u0004(\u0004\u000b\"\u000b\n5\u0005\u0001\u000e\u0005\u000e\u0005\f\u000e\u0001\n\b\b,\u000e\u0004\u0004\u0004\u0001\u0015\r\u0001\u0004\f\u0004\u0004\u0006\t\u0007\u0001*\u000b\u0001\u0004\u0001\u0006\u0015\u0001\u001c\u0006\u0007\n\u0007,\u0006\u0001$\u0001&\u0001\b\u000b\b,\u0006 \u0006\u0019\b\u0004\u0018\b8\u001cRy"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.ROB1SM",
    "content": "(\u000f\t\u0004\u000ep\u0001\u0004\u0004\u001d\n\u0001\u0002\u0018\u00077\u000b\u0001\u0017\u0004\f\u0002\t\u0004\u0007\u0004\u0004\u0004\b\u00057\u000b\u0001\u0004\u0001\u0001\u0004\u0001\u0005\u0013\t\u000b\u0006\u00057\u0006\u0004\n\u000fB\r7\u0005\u0017\u001c7\u0001\b8\u001f\u0010\t\u001f\u0018\u00068\u0019\u0001\u000f\u0004\u0001\u0004\u000f\u0001\u0006\u0007\u00069\u0017\u0001 \u000e\u0001\u0016\u0004\b9\u0005\u0005\u0004\t\u0011\u0004\u0002\u0001\u001b\u0005\u0006\u0002\u0004\b9\u0005\u0006\u0001\u0004\u0005\u0003\u000e\u0006\u001a\u0006\u00188\t\u0005\u0002\u0004\u0001\u0007\u0005\u001d\u0004\u001e8\u0006\r\u0006\u0004\u000f\u0004\u0004\f\u000b\f\t8\u0010\u0004\u0006\u0005\u0001\u000b\u0004ϟ\u0002\u0001ǃ\u000b\u0004\u0001\u0001\u0007\u00058\u0006\u0004\u0001\u0006\u0001\u0004\u0006\f\n\u0001\u0005\u0007\u0004\u00048\u0006\u0015\u000f\u0015\u0012\u0016\u0007\u0006$\u0012 &\u0001+\u0001\f7\u0014\n\u000e\u0011.\u00077\u0015\u000b\r\u0004\u0005\u0004\u0019ࠐ\u0006𼏁\u00077\u0005$\u0001\u0007\u0011\u0004\u0004\u0005\u00077\u0005\u0007\u0001\u0006\u0005\u0001\u0001\u000f\u0002\u0001\u0015\u0007\u0004\u0004\u0003\b8\u000b\u0006\u0003\u0001\u0012\u0001\n\u001b\u0001\u0006\u0001\r8\u0006\u0001\u001a\u0006\u001e\u0004\u0005\u0001\u001d\u00048\u0007\u0006\u0014\r\u0013/8\f\u0001\u0001\u0001\f\u0005\u0001\u0001\u0004\u0001\u0003\u0011\u0007\u0007\u00068\u0005\u0004\n\u000f\t\u000b\u0001\u0017\n\b\u00068\u0005\u0019\r\u0016\u0007\u0014\f\u000f7\u0001#𜏁 \u001f\u000b\r7\u0005\u001e\t\u0010 \u000b\u000b9\u0004\u001f\u0007\u0004\u001c\u0014\u00070\n\u0001\u0001\u0015\u0006\u0001\u0004\f\u0001\u0001\t\u0006\u0001-\u000b\u0006\u0005\u0016\u0002\u001a\u0004\u0006\t\u0006󯯿.\u0007\u0001#\u0001%\b\u000f\u00070\u0006\u001e\u0005\u001e\u0006\u0014\n9\u0006\u001f\u0006\"Y"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.ROB2",
    "content": "5\u0012\u0004\u0004\u000e\u0004\u0013L\u0005\u0005\u0007\u0004\u0006\u0004\u0005\u000b\u0002\n\u0004\n\u0004\u0004\u0004\u0010\b\u001b\u001a\u000e\u0011\u0013\u0004\u0001\t\u0006\u0004\u0004\u0001\u0005\u0001\u0004&\u0015\u0005\u0001\u0005\u0003\u0005\u0002\u0002\n\n\r<\u0005\u0006\u001a\u0016)\r<\"\u001b(\u000b\u001a\t\u000f\u0004\u0013\u0015\u0007$\u0001\u0004\f\u0019\u0006\u0001\u000e\u0001\u0005\u0006\u0005\u0018\u000f\u0011\u0013\u0019\u0005\u0001\u0003߈\u000e\u000f\u0004\u0006\u000b\u0004\u0007\u000f\u0004\u0005\b\u0019ƒۛ뛫\u000f\u000b\u0003\u0006\u001b\u0004\u0005\u0014\u0004\u0007\u0001\b\u0019ں\u0007\u000e\u0006\u0001%\u0001\u0005\u0002\u0001\r\b\u000f\u0019\u0005\u0002\u000e\u0007\u001e\u0004\u001d\u0005 \u0019᱀\u000e\f\u0005\u0006\t\u0005\u000f\f4\u0014\u0005\n\u000f\u0005\u000b\u0002\u0001\u0002\u0004\u0004\u0005\n\u0001\u0004\u0003\u0013\u0010\u0013\u0006\u000f\u0005\u0001\u0002\f\u0007\u0004\t\u0004\u0004!\r\u0015\u0004\u000f'𾏃\u0019)\u000f+\u000f\"\u0019\u001f\u0006\u000f\u0017\u0002\u0004\u0004\u0006\u000f\u0005\u0015\u0001!\u0001$\u0011\u0015믻ߜ\u000f\u0005\u0004\t\u0010\u0012\u0015\u000f\u0012\u0012\u000f\u000f\b\f\u001f\u0004\u0001\u0006\f\u0006\u0004\u0005\u0004\u0007\u0013\u000b\u0005\u000e\u0001\f\u0001\u0005\u0019\u0005\u0004\u0005\u0001\u0015\f\u0001\u0004\b\u0016\b\u0001\u000e\u0006#\u0004\u0001\u000b\u0005\u0005\u0001\u0004\u000b\u0013\u0005Á\u000f\u0006\u001f\u0001\u0005\u001f\u0005\u001d耀\u0015\u0004\rϚ\u000f\u0010\u0004\u0007\u0017\u0005\u0002\u0007\u0004\u0016\u0018\u0012\u0010\u000f\u0012\u0002\u0004\u0001\u0005\u0001\u0004\u0006\u0013\f\f\u0011\n\u0006\u000f\u0006\u0004\t\u0005\n\u000b+\u0006\u0006\u0011\b\u000e\"%9)\u0001\u0010G'\u0010\u0015\u0014\u0010\u0007<$\u0011\u0010\u0004\u0005\u000f\u0006𸸼\n\f\t\b\u0016\n\u0004\u0013\b\u0002\u0005\u0013ߟ\u000f\u0010\u0006㻝\t\u0007\u0001\u0004\u000b\u0006\u0005\u0004\b\b\u0004\u0016\u000f\r\u0002\u0004\u0001\u0004\u0010\f\u0001\u0011\u0005\u0003\u0001\f\u0007\u0005\b\u000e\u0006\u0001\u0017\u0006\t\u000b\u0004\u001c\u0007ؚ\u0006\u0002\u0007\u000e\u0005\u0018\u0007(\u0007#Ǉ\b\u00057\u0001\u001b\u0001\u0005\b\u0002\u0005\u0005חߏ"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.ROB2.REV",
    "content": "5\u0012\u0004\u0004\u000e\u0004\u0013L\u0005\u0005\u0007\u0004\u0006\u0004\u0005\u000b\u0002\n\u0004\n\u0004\u0004\u0004\u0010\b\u001b\u001a\u000e\u0011\u0013\u0004\u0001\t\u0006\u0004\u0004\u0001\u0005\u0001\u0004&\u0015\u0005\u0001\u0005\u0003\u0005\u0002\u0002\n\n\r<\u0005\u0006\u001a\u0016)\r<\u0004\u001d\u001b(\u000b\u0004\u0007\u0005\u0005\t\u000f\u0004\b\u0004\u0006\n\u000b%\u0001\u0004\f\u0004\u0007\u0007\u0004\u0006\u0001\u000e\u0001\u0005\u0005\u0004\u0001\u0004\fՀ\u0001\u001f\u0011\u0013\u0019\u0005\u0001\u0003߈\u000e\u0005坟\u0007\u0006\u0002ߟ\u0004\u0006\u0004\u0005\b\u0004߿߿\u0004ƒۛ뛫\u000f\u0005Հ\u0005\b\u0007Ճ\u0007\u0002ꪨ\u000f\u0004\u0007\u0001\b\u0004\u0007\u0007\u0004ں\u0007\u000e\u0005\u0005\u000f\n\u0005\u0001\u0006\u0005\u0011\n\b\u000f\u0004\u000f\u0004\u0005\u0002\u000e\u0006\b\u0007\u0005\u0004\b\u0011\u0001\u001a\u0004\u000f\u0004᱀\u000e\u0004\b\u0001\u0007\u0001\u0005\u0006\u0001\u0004Օ\u0011\u0002ߟ\u0004\u0005\u0004\u0005\u0007\u0005\n\u000f\u0004Հ\u0004\u0001ꂀ\u0006Հ\u0001\u0001ʺ\u0006\u0007\u0002ꪨ\u0007\u0007\n\u000f\u0005\u0004\u0010ԕ\u0006\u0005\t\u0007\u0001\u0006\u0005\u0015\u0004\b\u0007\u0006\u000f\u0005#\u0016)\u000f+\u000f\u0004\u001d\t\u0018\u001f\u0006\u000f\u0017\u0002\u0004\u0004\u0006\u000f\u0005Տ\u0015\u0001\r\u0014\u0004\u0001%\u0011\u0015믻ߜ\u000f\u0005󱰐\f\u001f\u0015\u000f\u0012\u0012\u000f\u0005\u0003\u0007\u000e\u0006\b\u0013\u0006\u0004\u0005\u0004\u0007\u0013\u000b\u0005\u000e\u0001\u0005\u0001\u0002\u0004\u0007\u0005\u0005Օ\u0012\f\u0001\u0004\b\u0016\b\u0001\u000e\u0005Հ\u0001\u0005\u0006𰰨\r\t\u0004\u0004\u0005\u0005\u0001\u0004\u000b\u0013\u0005Á\u000f\u0005\u0017\f\u0005\u0005\u0004\b\u0005\u001d耀\u0015\u0004\rϚ\u000f\u0005ռ\t\b\u0012\u0007\u000e\u0016\u0018\u0012\u0010\u000f\u0005\u0006\u0004\u0007߿\u0004\u0006\u0001\u0004\u0006\u0013\f\f\u0011\n\u0006\u000f\u0005Հ\u0001\u0006\n\u000b+\u0006\u0006\u0011\b\u000e\u0006\u0005\fՁ%9)\u0001\u0010\u0005\u001c#'\u0010\u0015\u0014\u0010\u0007<$\u0011\u0010\u0004\u0005\u000f\u0006𸸼\n\f߇\u0006\u0005\u0005\u0016\n\u0004\u0013\b\u0002\u0005\u0013ߟ\u000f\u0010\u0006㻝\t\u0007Օ\u0007\u0006\u0005\u0004\b\b\u0004\u0016\u000f\r\u0002\u0004\u0001\u0004\u0010\u0004\u0004\u000b\u0005\u0003\u0001\f\u0007\u0005\b\u000e\u0006\u0001\u0017\u0006\u0001\u0005\u0007\f\u0004\u001c\u0007ؚ\u0006\u0002\u0007\u000e\u0005\u0018\u0007\u0004!\u0007#Ǉ\b\u0005S!\n\u0017\u0011\u000f\n\u0004\u0001\b\u000e\t\u0001\u001bl\u0007\u0004\u000b\u0015\u0001\u0005\b\u0002l\u0001Օ\u0001\u0006\t\u0005\u0005l\u0006\u0005\n\b\u0007\tחߏ"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.ROB2MID",
    "content": "*\u0012\u001aw\u0005\u0006\u0001\u0005\u0004\u0004\u0007\u0007\b\f\u0004\u0016\u0005\u0001\u0001\u000b4\b\u0007\u0006\u0003\u0001\u0001\u0004\u0007\b\u0005\u0001\u0001\t\b\u0005\u0001\u0005\u00046\u0004\u0001\u0004\u0006\u0004\u0005\u0007\u0004\b\u0004\u0017\u0001\r6\r\u0018\u0018*\f6\u001f\u000e\f(\n5\u0001\u0004\u0004\u0010\u0001\u0016\u0002\u0004\u0004%\u000b3\u0001\u0005\u0004\u0001\u0006\u0006\u000b\r\u0001\u0010\u000e\u00133\u0010\u0005\u0007\u0004\f\u0002\u0005\u0002\u0006\u000f\u0007\u0004\u0001\u0004\b4\u000b\t\u001b\u0004\u0004\t\u0014\u0010\u0001\t4\u0006\u0001&\u0001\u000b\u0002\u0001\b\u0004\u0001\u000e\u000b\u00043\u0006\u001e\u001d\u0002 4\r\t\t\u0010\u000e24\u0001\u0010\b\u0001\u000b\u0003\u0005\u0004\u0005\u0001\t\u0013\u000b4\u0005\u0001\u0004\u0001\u0005\u0004\u0001\u0007\u0001\u0005\u0005\u0007!\u0001\u0004\u00064\u0004\u0007\u0013\u001b,\u000e5$\u0002\u0019 \u0005\u0004\u0001\r#\u0010\u0004\u001a!&\u0001\u00114\u0005\u0004\u000b\u000f\u0014\u0010\u0011\u00134\u0010\u0004\u0004\u0005\f\u0006\u0006\u0012\u0003\u0006\u0004\u00074\u000e\u000e\u0001\u0005\u0011\u0005\u0004\u0005\u0017\u0005\n\u0001\u00074\t\u0005\u0005\u001a\u0002\u0006\u0007\u0001\u0014\u0002\u0004\u000e5\u0005\u0001\u001e\u0005\u0004\n\u0001\u001a5\u0004\u000b\t\u0007\u0006\u0010\u0010\u0004\"\b5\u0011\u000f\b\u0005\u0005\u0004\u0005\u0001\u0013\n5\u0005\u0006\u0005\u0001\u0001\u0001\u0004\u0001\u0005\u0005\u0007\u0007\u0005!\u0004\u00065\u0005\b\f\u000e\u00182\u0004\u00065\"&\u000b\u001d\u000f5J&\u00115\u0007\u0013#\u0004\u0011\u0012\u00135\u0006\n\u0001\u000b\u0006\u0006\r\u0001\u0004\u0006\u0007\u0004\b\t(\u0001\u0011\u0005\u0007\u0004\u0010\u0005\u0003\u0017\u0005\u00075\u000b\u0003\u0006\u000b\t\u0001\u0011\n\r\b)\u0007\u001a\u0005\u001c\u0005 \t*\u0006\u001d\u0004\"\u0005 \u000f"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.ROB2SM",
    "content": "0\u0002\u0004\u0004\u0004\u0005\b\u0007\u0004\u000f\u0001\r\u0004\u000b\u0005\u0012\u00067\r\u0001\u0016\u0012\u0011\b\b\u0005\u0001\u0004\u0002\u00048\u0006\u0004\u0004\u0001ޟ\u0005\u0004\u0004\u0004\u0001\u0005\u0001\u0004\b\u00048\u0004\u0001\u0012\u0005\b\u000b\u000e\u0018\r9'\u001b(\n8\u0004\u0016\u0012\t%\u000b8\u0004\u0004\u0007\u001c\u0011\u0011\u00137\f\u0005\u0004\u0001\f\b\u0006\u0010\t\u0004\b7\u000b\b\u0001\u0001\u0012\t\u0001\u0004\u0013\u0004\t\b7\u0001\t\b \r\u0001\f\u0001\r\u000e7\u0007\u0001\u001d\u0004\u000b\u000b\u0004\u001d7\u000e\t\u0005\u0005\u000f\u000e\u0005-7\r\u0011\u0011\u0001\u0001\t\u0013\u000b\u00058\u0005\u0001\u0007\u0006\u0006!\r8\u0005\u0004\u0004\u0011\u0005\u0016\u0001\u0013\u0018\u0006\u00058&\u0002\u0019\u001f\u0005\u0005\u000e\u000e)\u0004\u001a\u001f \u0010\f(\u0005\u0005\u000b\u0001#\u0004\u0010\u0010\u00128\f\u0001\u0004\u0004\u000b\n\u0006\u0013\u0002\u0006\u0005\u0005\u00078\u000e\u000e\u0001\u0005\u0010\u0005\u0001\u0005\u0017\u0004\t\u0001\u00078\t\u0001\u0004\u0005\u0019\u0001\r\u0013\u0001\u0004\u000e8\u0005\u0001\u001d\u0005\u0005\u0004\u000b\u0005\u00198\u0010\u0005\u0004\u0007\u0005\u0010\u000b\u0004+9\u0011\u000f\u0006\b\u0004\u0001\u0004\u0001\u0004\u0012\n\u00058\u0006\b\u0004\u0004\u0005\u0004\u0007\b\u0005 \u0004\u00068\u0006\u0007\r&:8!&\u000b\u001c\u00109\b=%\u00119\u0006\u0004\f\u0004\u000e\u0011\u0004\u0011\u0010\u0013:\n\t\n\u0004\u0005\f\u0004\u0004\u0007\b0\u000f\u0005\u000b\u0013\u0004\b\u0012\u000e\b\b\u00010\n\u0001\u0004\u0010\u0006\n\u0006\t\u000e\b/\u0006\u001b\u0006!\u0001\u0006\b\u0017ف9\u000f,8 \b,\u000f\u0010\u0019$8`"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.ROB3MID",
    "content": ")\u0007\u0006\u0006\u0005\u0006\t\u0006\u0004\u0001\t\u0005\u0013\u0004\u0016\u0007\u0001\u0004\u000e\u0005\u00065\u000f\u000f\u000f\u0005\u0001\u0003\f\u0002\t\u0004\u0001\b5\u0005\u0004\u0004\u0001\u0001\b\u0012\u0004\f\u0001\u0014\u0005\u0001\fჁ\t5\u0001\b\u0002\b\u0004+\t\u0001\u0002\u0001\u0006\u00076\u0004\u0015\u00013\u0002\t\u0005\u0001\u00126\u0013,\u001f\r6\n\u000f\b\u0005\u0004\t-\f6\u0004\u0001\u0004\u000f\n\u0001\u0005\u0004\f\t\f\u0005\t5\u0010\u0001\u0004\u0005\u0014\u000e\u0001\u0011\u0004\u0005\u0001\u0006\u00065\n\u0003\u0006\u0006\u0003\u000f\u0007\u001c\u0003\t\u0001\u00075\u0005\u0001\u0010\u0007\u0004\u0001\u001c\u0006\u0001\t\u000b5\u0006\u0005\u0013\u0007\r\u0004\u0005\u0005\u0004\u0006Ã\u0017\u0004\"\u0012\u000f\u0010\u0011\u0005\u0012\u000b\u0001\b\t\b\"\u0012\f\u0004\u0001\u0001\b\u000b\u0001\u0004\u0001\u0005\u0001\u0010\t\u0004\u0001\b!\u0011\u0004\u0007\b\u0013\u000f\u000e\u0001\b\u00074\u0005\u00163Ⴧ\u0004\u0007\t\u0006\u00073\u001c0\u0006\u0015\u00104\u0017\u0014\u001a\f\u000eผ\u00104\u0005\u0005㾸\u0011\u0004\u000b\u000b\n܏\u000e4\u0006\u0006\u0005\u0004\u0016\u0004\u0003\u000f\n4\f\u0004\u0011\u0001\u0013\u0006\u0001\u0002\u001a\u0013\u00074\u0006\u0001\u0004\u0005\n\u0006\u0001\u0004\u0013\b\u0006\u0001\b\u0005\u00054\u0006\u001f\u0005\u0004\u001b\u0005\u001c5\u0015\u0004\u0002\b\u0005\u000b\u0005\u0004\u0004\u0015\u0004\u0006\b4\u0007\b\u0001\u0004\u0004\u0004\u0012\u0005\u0001\t\u0004\u0018\u0012\u00044\u0007\u0007\u000b\u0012\u0001\u0004\u0010\u0004\u00054\u001c\u0001\u000f\u0001\u000b\u000b\u0004\u0005\n\t5\u001a\u0015 ర\b\u000f\u00155\u0005\u000f\u0001A\r\u0015\t)\u0005\u0004\u0007\f\u0007\u0011\f\u0005\u00135\r\u0005\u0005\u0006\u0001\u0011\u0004\b\u0015\u0001\u0004\u0007\b)\b\u0007\u001b\r\u0001\u0004\u0011\u0001\u0007\u0001\u0002\f\b*\u0005\u001d\u0004\u0001\u0012\u0006\u001d5&\u0004\u001f\u0004\u0006 b"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.ROB4",
    "content": "\u0010񀀠\u0005ࠀȐނĠ0+\u0005\u000e\u0004\u0005၀\u0004\u0004秣﷿\u0006/-ߟ\u001dϟϏ0\u0005\u0004\u001b\u0012\n\u0004\u0006+\u0004\u0004-\u000b\u0005\u000e\b\u0001\u0006\u0005#-\u0012\u0010\b\f\u0005&\u000e.\u0005\u0004\u0001\u0006(\u0006#-\u0004\u0004\f$#\u0001,\u0010\u0005\u0004\u0004\u0007\u0006#̀Ȍ܀-\u000b\u0001\u0005\u0001\u0006\u0002\t\u0005\u0004Ǉ\u0004\u0006\u001f\u0001,\u0006\t\u0017\u0004\u0004\u0003\u0007\u0001\u0004\u0006\u001f,2\u000b\u000e\u001f⤠㢢,(\u0007\u001f\u001f\u0004,(\u001b\u0005\u0006\u001f¦̀,\u0007,\u0005\u0002\u0005\u0002\u0004\u0006\u001fб+\u000b\u0006\u0012\u0004\n߇\u0007\u001f˫ˡɃǅ+\u0014\u0004\u0006\u0005\u0005\u0007\u0005\b#\u0001\u0001츘+\u0007\u0001\t\u0001\n\t\u0011\u001f\u0001ʈȈ̀Ѐ+\u0006\u0002\u0007\u000f\u0001\u0019\u000f\u001f\u001a+\u000e\u0004\u0001\u0005\u0005ϟ\u0004\u0006\t\u000f \n\u0005+\u0010\u0007\u0002\u0006\u0003\b\u0004\u0007 熂+\r\u0001\u0004\u0004\u0016\u000f\u0001\u0004\u0007 \u0007*\b(\b\u0005\u000e!\u0016*\n\u001e\u0006\u001c *\u0012\f\u0004\u0007\u000e\u0005\u0004\u0004\n \u0001*\u0010\u0001\u0004\u0015\r\n \u0001*\u0015\u0006\u0002\u0007\u0012\u0001\u0004\u0002\u0006 ǃÃχχ*\b\u0004\u0001\u0006\u0004\b\u0006\f\t#\u0001*\u0007\u0001\u0006\u000f\t\f\u000b ۏۻݗ\u0004*\n\u0004\u0005\u0011𐘌\r\u0018 \u0005*\u000e\u0007\u0004\u0004\"\u0016\u0001\b\u0004\u0004*\u0012\u0005Ϗ\u000b\u0004\u0007\b\u0013\b\u0001غⰰ𐀀*\f\u0002\u0005\t\u0017\u0004\u0006Ç򘌄\u0004\u0014\t\u0006\u000b)\u0001\u0006\u0001(\b\u0014\bȀ\f\b)\b\u001f\u0005\u001b\u0014\b夤㪤)\u0007\u0017燇\u0004&\"ȁ\u0005\u0001\u0001\u0004\u0006\u0001\u0006\tp\u0018\u0006\u0005Ͽ\u0006q\u0001\t\t\u0001\u0001\u0001\u0005ؚ\u0006\u0007\bg\u0006\t򀚀\u0004\u0006\u0001\b\u0007A>"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.ROB4SM",
    "content": "60\u0005\u000b\u0014\t\n\u0002\u0011\u0004\u0005c\n\u0006\u001b\u0004\u0001\u0002\u0005\u0005e\u000f\u0007\b\b\u0001\u0001\t\u0001\u0006e\u0005\u0005\u0001\u0007\u0001\b\n\u0012\u0006e\u0004\t\r\u0001(40\u0005\t\u0001\u0007\u0001\u0005\u0004\n31\f\u0001\f\u0004\u0001\u0006\u0004\u0001\u00056\u0001.\u0005\u0001\u0006\u0002\u0013\u0010\u0001\u0004\u0005e\u0006,\u0001\u0004\u0006\u0005\u000b6.3!e)(\u00045.\u0005\u0004\u001d\u0010\b\u0005\u0004d\u0007\u0001\u0005\u0005\u0018\u0004\u0007\u0001\u0005d\u000f\u0004\u000f\u0005\u0007\u0004\u0001\u0006\u0001\u00073-\u0007\t\u0001\u0004\u0004\u0004\u0007\b\u0001\f6-\u0006\f\u0016\u0006\u000e5˃+\u0006\u000f\u0013\u000fd\u0012\u0005\u0004\u0004\u0005\u0007\u000e6-\r\u0003\u0003\u0004\u0015\u0004\u0006\u0005\u00065,\n\u0001(\u0001\u0004\u0004\f6,\u0007' 5,*\u0006\u001dd\u000f\u0007\r\t\u000bd\u0011\u0006\u0006\u0005\u0013\u0004\u0001\u0002\u0006\u0006c\u0014\u0001\u0004\u0004\u0004\u0007\u0005\u0001\b\u0006c\b\u0004\u0001\u000b\f\u0001\u0007\t\tc\u0007\u0019\u000f\u000bc\t\u0012\u0001\u0005#c\u0013\u0004񁃇\u0007\u000b\f\u0016L\u000e\u000f\u0001\u0001\u0011\u0005𸎇\u0006\u0016 ,\n\u0001\u0004!\u0010\u0001\u0004\u0014\u001f,\u0006\u001c\t\u0001\u0006\u0005\u0004\n\u0014\u001f,\u000b\u0017\u0001\u0005\u001di\n\u000b\n\u0004w"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.ROBGUYSTR",
    "content": "111)11՘냁))11\u0004\u0001\f\u0014)11\u0007\u0001\u0006\u0016)11\u000b\u0004݃\u0013)11Հ\u0001\u0005\u0006𺪪\u0012)11\u0014Ѐ\u0013)11\u0016\u0019)111)11ռ與\u0016\u0010)11\u0005\u0001\u0005\u0005\u0007\u0010!11\u000b\b\u000e\u0005\u0001\u0004\u001211\u0005\u0001\u0001\u0001\u000e\n\tߟ\u0004\b1Վ蠏'Հ\u0001蠀\u0005\n\u0004\f\u0004\u0006\u0001\u00071\u0005\u0002\t\u0014\u0017\u0017\u0004\n\r1Հ\u0005\u0001\u0002\f1\u0015\u000f1\u0001\u0005\u0004\u0006\r1%1-\u0004ռ돏&Հ𠠼\u001d11\u0006\u0002\u0004\u0004\u0005׀\f\u0006\u0002\u0004\u0006\u0004\u000611\u000e\u0001쪪\u000b\n\u0004\u0001\u0004𪪪\u00061(\u0005\u0004\u0001\b\u0010\u0001\u0005\u0004\u0004\f1\u0005\u0001\u0004\u0004\u0016Հ\u0006\u000e\u000e\u0004Հ&1\t\u0005\u0002\u0004\f1)1Հ\u0002\u0004\b\f\u0001)Հ\u0001!1ހ*\u0001\u0005\u0004Օ\u0005\u0010\u0004\u0001\u0005ߗ\u0005\b1-\u0004Հ\u0004\u0004\u0001\u0002\u000fՁ\u0007ß\u0001\u0001\u000711\u0001\u0004\u0004\b\u0016\u0004\u0004\u0004\f1հ)-\u0004\u0012\u0004\u00131\u0005\u0004\u001b1\u0005\u0004\u000e1\u0006\u0001\u0005\u0017ྟ\u0004\u0015\u0006\u0002\t\u0004\u0004\u00061\nן\u0004\u000f\u0006\u0005\u0004\u0004\u000e\u0005\u0005\u0001\u0002\u00061Հ\u0003\u0007\u000fՀ\u0005\u0001\u000e\u0001\u0006\b\u00101.\u0006\u0007\u0018\u0015\u00121,\u0005-\u0004)111)1\b\u0017\b\u0017Հ\u0001\u001e1\u0006\u0001\u0004Օ\u0012\u0006\u0001\u0004Օ\u0012\u0006\u0002ߟ\u0004\u00051Հ\u0001\u0001ʺ\rՀ\u0001\u0001ʺ\rՃ\u0007\u0002ꪨ\u00041\u0005\t\u000e\u0005\t\u000e\u0001\u0006\u0005\u001511-\u0004)\u0005\t\u000e\u0005\t\u000e\u0001\u0006\u0005\u001511-\u0004))"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.ROBMODEL",
    "content": "111)111)111)111)111 11՟\u0001*\u0005\u0001\u0004\u0004\u000e11\u0001\u0004\u0006\u0015\t\u0002\u0004\u00041ռ\n\u0016\b\u0003\u0001\rՀ\u0002\u0004\b\u00041\u0007\u0004\u0005߿\u0004\f\u0005\u0004\rހ\"1Հ\u0001\fՀ$հ!1\u0005\fՁ\u0013$\n\u0005\u0004\u00131ྟ\u0004\u0015՜\u0004\u000b\u0010\u0006\u0001\u0005\u000f1\u0006\u0005\u0004\u0004\u000e\u0006\u0003\u0005\u0001\u000b\nן\u0004\u00071Հ\u0005\u0001\u000eՀ\u0001𠠨నʂ\nՀ\u0003\u0007\u00071\u0006\u0007\u0018\u0002\u0001\u0011\n&1ռ與\u0016\u0010ռ\u0007\u0007\u0005\u0011՘냁!1\u0005\u0001\u0004\u0005\u0007\u0010\u0006\u0001\u0007\u0001\u000b\u0004\u0001\f\f1\r\b\u0010Հ\u0004\u0001ꂀ\f\u0007\u0001\u0006\u000e1\u0005\u0001\u0001\u000f\u0004\u0004\u0010Ԕ\r\u000b݃\u000b1Հ\u0001蠀\u0005\n\u0004\u0010莟\u0004\"Հ\u0001\u0005\u0006𺪪\n1\u0017\u0017\u0005\u0002\u0005ו\r\u0014Ѐ\u000b11\b\u0004ਪ\u0001\f\u0016\u001111\u0004\bՕ\u0006\r)11Հ-ռ與\u0016\b111\u0005\u0001\u0005\u0005\u0007\b11Հ냁(\u000b\u0007\u000611\u0005\u0001\t\u0007\u0010\u0005\u0001\u0001\u0001\u00061Ռ)\u0007\b\u0012Հ\u0001蠀\u0005\n\u0004\b1\u0004#\u0005\u0001\u0001\u0001\u000f\u0017\u000f1\u0007\u0001\u0004\u0014Հ\b\u0007\u0010ռ돏\u001e1\nՕ\u0001\u000f1\u0006\u0002\u0004\u0004\u0005׀\u00041Հ\u0002\u0006\u0007\u0010\b\u0017\u000e\u0001쪪1.\u0006\u0001\u0004Օ\u0012\u0005\u0004\u0001\b\b1՟訟\u001d\tՀ\u0004\u0001\u0001ʺ\rՀ\u0006\u000e\n1\u0004\u0001\u001f\u0004\u0005\t\u000e%1\b\u0001ﯯ\rՎ蠏'\u0001!1\u000b\r\u0005\u0001\b\u0012\u0001\u0005\u0004Օ\u0005\b1Հ\u0006\u0013\fՀ\u0004\u0001\u0002⚺\fՀ\u0004\u0001\u0002\u00071\u0004\u001f\f\u0001\u0005\u0004\u0006\r\u0001\u0004\b\u000e1$\n1)\n1)ր+\u0001\u0005\u0004\u0006\r\u0001\u0004\u0004\b\u000e111)"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.ROBSTANCES",
    "content": "5\u0012\u0004\u0004\u000e\u0004\u0013L\u0005\u0005\u0007\u0004\u0006\u0004\u0005\u000b\u0002\n\u0004\n\u0004\u0004\u0004\u0010\b\u001b\u001a\u000e\u0011\u0013\u0004\u0001\t\u0006\u0004\u0004\u0001\u0005\u0001\u0004&\u0015\u0005\u0001\u0005\u0003\u0005\u0002\u0002\n\n\r<\u0005\u0006\u001a\u0016)\r<\"\u001b(\u000b\u001a\t\u000f\u0004\u0013\u0015\u0007$\u0001\u0004\f\u0019\u0006\u0001\u000e\u0001\u0005\u0006\u0005\u0018\u000f\u0011\u0013\u0019\u0005\u0001\u0003߈\u000e\u000f\u0004\u0006\u000b\u0006\b\u000f\u0004 \fƒۛ뛫\u000f\u000b\u0003\u0006'\u0005\u0016\u0004\u0002 \fں\u0007\u000e\u0006\u0001$\u000f\u0001\u0001\r3\f\u0005\u0002\u000e\u0007\u001e\u0004\u0001\u0004\u0004\u0007\u0005\u0001'\f᱀\u000e\f\u0005\u0006\t\u0005\r\u0001\u0005Օ\u0012\u0002\u0004\u0004\t\u0013\u0005\n\u000f\u0005\u000b\u0002\u0001\u0002\u0004\u0004\u0006\u0005\u0001స\u0002ꚺ\u0007\u0005򪪨ꚺ\u0012\u0006\u000f\u0005\u0001\u0002\f\b\u0004\t\u0004\b\u0004\u0007\u0004\u0004\u0014\u0004\u000f'𾏃\u0019)\u000e*\u000f\"\u0019:\u0016\u0002\u0004\u0004\u0006\u000f\u0005\u0015\u0001!\u0001$\u0012\u0014믻ߜ\u000f\u0005\u0004\t\u0010*\u000f\u0012\u0012\u000f\u000f\b\f$\u0006\u0004\u0005\u0004\u0007\u0013\u000b\u0005\u000e\u0001\f\u0001\u0005F\f\u0001\u0004\b\u0016\b\u0001\u000e\u0006\"$\u0005\u0001\u0004\u000b\u0013\u0005Á\u000f\u0006\u001f\u0001\u0004\u0001\u0004\u0006\u000b\u0005\u001d耀\u0015\u0004\rϚ\u000f\u0010\u0004\u0007\u0014\u0002뫫\u0004\u0014\u0018\u0012\u0010\u000f\u0012\u0002\u0004\u0001\u0006\u0001\u0004\u0002\u0012\f\f\u0011\n\u0006\u000f\u0006\u0004\t\u0006\t\f+\u0006\u0006\u0011\b\u000e\"%9)\u0001\u0010K\u0001'\u0010\u0015\u0014\u0010\u0007B$\u0011\u0010\u0004\u0005\u000f\u0006𸸼\n\r\u0001!\n\u0004\u0013\b\u0002\u0005\u0013ߟ\u000f\u0010\u0006㻝\u000f\u0002ߟ\u0004\u0007\u0006\u0005\u0004\b\b\u0004\u0016\u000f\r\u0002\u0004\u0001\u0004\n\u0007\u0002ꪨ\n\u0005\u0003\u0001\f\u0007\u0005\b\u000e\u0006\u0001\u0017\u0005\u0001\u0006\u0005\u0012\u0004\u001c\u0007ؚ\u0006\u0002\u0007\u000e\u0005\u0018\u0007(\u0007#Ǉ\b\u00057\u0001\u001b\u0001\u0005\b\u0002\u0005\u0005חߏ\u0002\u0005\u0005חߏ"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.RUN",
    "content": ",//////////////////////////////////////////////////'///Հ𠜿\u0015///\u0007\b\u0002Օ\u0004\t///\u0011\u0007\u0004\t///////՟'///\u0001\b\u0004\u0016///Հ࠾\u0001믯뺚\u0004\t//%\u0007\u0005\u0002\t/Հ\u0004\u0005\u0017՟\u0017//\u0001\u0004\u0001\u0005Օ\u0004\t\u0002\u0004\u0005Օ\u0004\b//\b\u0004𰰰\b\u0013\u0005\bտ\u0005\u0007\u0004\u0018/\u0004\u0005$/\u0006\u0004\t/\u0007$Հ%Հ\u0004\u0005ꪠ𸸸\b/\u0007\u0004\u0007\u0004\u0013\u0007#//Հ\u0004\u0002꯯\u0004\u0007Ձ\u0006\u0003\u0012Տ\u0007\u0005\u0015/\u0005\u0004\u0005\u0002\u0007ؼ\u0001\u0001ח\u0004\u0007\u0007\u0004\u0004\u0007/Հ%\b\u0004\u000b\u0004ࠠ\u0007\bȨ\u0005\u0007/\u0007\u0001\u0004\u001c&//\t\u0001\u0006\u0011\u0006\u0001\u001bՁ-/\u0001׿\u0004\u0007Օ\u000fа\u0003\u0004\u0005\u0005\u0004\u0007/Հ\u0006\u0006\b\b\u0007Հ\u0001\u0002\u0002\u0003\u0001\u0007\u0006\u0006訨\u0004訪\u0006//\u0019Ԕ\u0005\b////տ\u0004\u0004\u0007\u0004\u0006/%'\u0004\b\u0004\u0004\u0005\u0002\u0006/\u0001\u0005\u0014Հ󽞞\u0012//\u0001\u0003\u0004\u0007\u0001\u0002\u0001\u0004\u0004\u0005\t\u0004\u0006/\t\u0004\u0004\n\n\u0006\u0007𰰰\u0004\u0004\u0004ࠨ\u0006Հ\u0004\u0005\t\u0004\u0005.\t\u0004\u0004\n\n\u0006\u0007𰰰\u0004\u0004\u0004ࠨ\u0005Հ"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.RUNJUMP",
    "content": "r\b\bՕ\u0004\u0005\u0001\u0011\u0004\u0004\u0004h\u000b\u0010\u0001\u0007\u0001\u0005\u0002d6\n\u0005.\u0004$\u0004\u0001\u0004\b\u0004Օ\"\u0001\u0005\u0001\"\u0004z\u0004\u0006\u0002!᯿\u0004ח\u0004j-\u0001\u0004\u0005訨\u0001h+\u0001\u000bq,\u0014o\u0006(\u0012q\u0001\n\u001c\u0001\u0005\u0005Ձv\u0001\u0004ꪮ\u0019\u0004\u0004\u0004s\u0004\u0002\u0018\u0005\u0005\bԅq\u0001)\u0005\n\u0001UP\u0001\u0006\u0002\u0004\u0001\u0006ח\u0004P\u00135\u0004\u0005@\u0007\u0005Օ\u0011\u0001\u0004\u0004\u0004\u0001\u0001\u0012\u0004\u0006\u0019`\n\u0002\u0018\u0001\r\u0013\u0004\b\u0001\u0013\u0002\u0004\u0004~\u0001\fД\n\u0004ח\u0004r$\u0004\u0004\tg\u0006\u0002\u0004\u0007\u0002\t\u0004\u0004\u0006પ𠠨\u0005\u0007А"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.RUNWSWORD",
    "content": "n//////'///Հ𠜿\u0015///\u0007\b\u0002Օ\u0004\t///\u0011\u0007\u0004\t///////՟'///\u0001\b\u0004\u0016///Հ࠾\u0001믯뺚\u0004\t//%\u0007\u0005\u0002\t/Հ\u0004\u0005\u0017՟\u0017//\u0001\u0004\u0001\u0005Օ\u0004\t\u0002\u0004\u0005Օ\u0004\b//\b\u0004𰰰\b\u0013\u0005\bտ\u0005\u0007\u0004\u0018/\u0004\u0005$/\u0006\u0004\t/\u0007$Հ%Հ\u0004\u0005ꪠ𸸸\b/\u0007\u0004\u0007\u0004\u0013\u0007#//Հ\u0004\u0002꯯\u0004\u0007Ձ\u0006\u0003\u0012Տ\u0007\u0005\u0015/\u0005\u0004\u0005\u0002\u0007ؼ\u0001\u0001ח\u0004\u0007\u0007\u0004\u0004\u0007/Հ%\b\u0004\u000b\u0004ࠠ\u0007\bȨ\u0005\u0007/\u0007\u0001\u0004\u001c&//\t\u0001\u0006\u0011\u0006\u0001\u001bՁ-/\u0001׿\u0004\u0007Օ\u000fа\u0003\u0004\u0005\u0005\u0004\u0007/Հ\u0006\u0006\b\b\u0007Հ\u0001\u0002\u0002\u0003\u0001\u0007\u0006\u0006訨\u0004訪\u0006//\u0019Ԕ\u0005\b////տ\u0004\u0004\u0007\u0004\u0006/%'\u0004\b\u0004\u0004\u0005\u0002\u0006/\u0001\u0005\u0014Հ󽞞\u0012//\u0001\u0003\u0004\u0007\u0001\u0002\u0001\u0004\u0004\u0005\t\u0004\u0006/\t\u0004\u0004\n\n\u0006\u0006񿸰\u0004\u0004\u0004ࠨ\u0006退"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.SLICE",
    "content": "000đđđđđ0đđđđđ0đđđđđ0000đđđđđđ0đđđđđđ0đđđđđđ0ݮ00\"\rđđđđđ0đđđđđ0đđđĐ\u001d\u000e##\u001a\u0015đđđĐ!đđđĐ!Đ\u0016\u001cݮ00\f#߿ʎʟߊ!߿ʎʟߊ!đđđđđ0Ȣ$\u0006Ȣ$\u00060đđđđđđ0đđđđđđ0đđđđđđ0ݮ00\u0018\u0012đđđđđ0đđđđđ0đđđĐ\u0013\r\u000400\u0010\r\u000bđđđđđđ0đđđđđđ0Đ\f\r\u0012ݮ00\u0012\u0019đđđđđ0đđđđđ0đđđđđ0000đđđđđđ0đđđđđđ\u0017\u0017đđđđđđ0ݮ0\u0001\u0005\u0007Á\u000f\u000e!đđđđđ0đđđđđ\u0005\u0005\u0001\u000fđđđĐ\t!0\u0001\u0005\u0005\u0015\u0006!đđđđđđ0đđđđőĒ\u0013\u0015Đ!\bݮ0\u0015\u0017∢\u001f\u000fđđđđđ0đđđđē0đđđĐ2#\u0005\u0004\"6đđđĐ!đēŐđ\u000b\u0005\"Đ9ݮ0\u0005\u0004\u0005P\u0004\u0004߿ʎʟ!\u000b\u0005W\u0004\f#\u0006\u0001\u0005X\u0004\u0004\u0001Đđ0Đxݮݷń໮܀đݮ\u000b\u0004\u000b\u0004ݷńȇ㐐㐐㐐㐐\bȇ㐐㐐㐐㐐\bȇ㐐㐐㐐㐐໮㗐䐌ҡ㗐䐌ҡ㗐䐌ҡ㗐䐌\b\u0001⒡㗐䐌ҡ㗐䐌ҡ㗐䐌ҡ㗐䐌\b\u0001⒡㗐䐌ҡ㗐䐌ҡ㗐䐌ҡ㗐䐌\u0004܀ߓ䌌򜜲䌌򜜲䌌򜜲䌌𓏿\b̲䌌򜜲䌌򜜲䌌򜜲䌌𓏿\b̲䌌򜜲䌌򜜲䌌򜜲䌌𓏿\u0007"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.STANDJUMP",
    "content": "ۀ\u0002\"\u0006\u0007s\u0001&\u0001\u0007\u0002\u0004o\u0007&\u0005|(\u0004\b\u0002k/\u0002\u0004v\u0001\u0004#\u0004\u0005\u0001v\u00054\u0004n\u0002\u00064D\u0004\u0004\u0005\u0005\u0010x\u0001𰠠\u0004蠠\b>\b\u0005T\u0019\u00012\u0006qE?\u000b\b\u0004\u0004\f\u0001?\u0002<𱳛\u0001\u0005\u000e\u0007|\u0005 \u0003\u001f\u0004\n\u0004p\u0001\b\u001c\u0007\u0003\u0001j\u0001\u0011\u001c\u0016<\u0004\u0005)7;\u0006\u0006\u0001\t\u0004蠠\u000f\u000f.\u0006s%\u0002\u0005\u0001\u0006\u0001՝7\u0006\u001e\u00069;\u0004\u0001\u0014\u0004\u0003r訠\u0006\u0005\u000e\u0001\ts\b\u00044Д\u0016\u00054𾾞\u0001\u00035\u0016\u0006\u0007\u00047\u0004\u0001\u0011\n\b\u0011\u0004\u0007$\u0005\u0004\u0005\u0004c\u0001\t\u001e\u0004\u0005\u0004\u0005\u00026\u0005\u001c\u0004qӗ\u0001\u001e\u0006\u0007q\u0004\u0005\u0005,Nӗ\u0001\u001e\u0006\u0007\u0016\u0005\u0005\u00072\u0004\u0005\u0005,\u001c\u0006\u0007\u0004\u0005\t\t"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.STEPFWD",
    "content": "^//_//_//_//_//_//_/\b\u0005\u0006\u0004\u0004_/\u0005\u0005\u0001\u0002\u0004_/\u0004\u0001\u0004\u0016_/%_/)_/Հ\u0006\u0001\t_/\u0006ǟ\u0001\u0007\t_/Հ\u0003\"_\u0004\u0005\t\u0004\u0006*_\u0007𰰰\u0004\u0004\u0004ࠨ\u0006/_/\u0004\u0006\u0004\t_/\u0004߿\u0005\u0002訨\u0002\t_\u0004\u0004\u0006\u0001\u001f_\u0004\u0005\u0004ࠠ\u0004\u0005Հ(_//_/Հ\u0004\u0004\b_\u0004\u0001\u0007Ͽ\u0004\u0002\b_\b\u000b\bՀ\u0001\u0004 _//_Հ\u0007\u0005\u0007\u0004\tՁ\u0004\u0005\u0004\t_\u0004\u0003\u0002\b\u0003\u0005\u0001\b_\u0001\u0004\u001e/_)/_\u0005\u0006\u0006\u0004\nՇ\u0005\u0004\u0006_\u0006Ͽ\u0004\u0002\u0005\u0002\t\b\u0004\u0004\u0002_\u0001\u0006\u001f/_//_Հ(/_\u0005\u0004\u0005\u0007\u0004\u0005\u0006\b_\u0005\u0004Ͽ\u0001\u0005\u0005\u0006\u0007\u0001\u0004_\u0005 \u0004\u0005\t\u0004\u0006_/\u0007𰰰\u0004\u0004\u0004ࠨ\u0006_//_//Հ\n\u0002\u0006\t\u00060\u0001)\u0012\u0001\u0004\r\u000b\u0004\t\u0007&7\u0006Aώ\t\u0006&7\b!\u0004\t\u0012\u0007\t\u0006&\b\u0013\u0004\u0012\b\u000f\u0005\u0004\u0006\n\b\t\u0006&\b\u0006\n\u0006\u000f\u0005\u0005\u0010\u000b\b\t\u0005&\u0010\u0001\u0006\n\u0005C\u0004\t\u0006&\b\u0001\"\u0001\u0012\u0006\u0004𼜅\f\u0005\t\u0005&\b\u0001(\b\u0010\u0003\u0005\f\u0006\t\u0004&\u00015\u0005C\u0005\t\u0007&\u0007\u0007\u0006\u0004\t\t\u000f,\u0005\t\u0004ό&\u000b\u0004\u0006\u0001\u0002\t\u0001\u000f\u0001\u0002\u0004\t\f\u0006\t\u0005&\u0007\u0001\u0004\u0016\u000e\u0013\u0004\u0004\u0006\u001c\u0005ߜ&\u0005'\u0005R\u0005ߏ&!\u0004\n\bR\u0007&\u0011\u0010\u000b־\u0004T\u0007&\u0004\u000f\u0013\u000f\n\u0005=\u000f&\u0004E\u0005=\u0005\n\u0004\u000b\u0011\u0014\u001e\u000b\f\u000f\u0005\u0004\u0006\b\u0005燆ώ'\u0005\u0001%ϯ\u0004\u000eȶ\u000b\u0006\u0006\b\u0006Ç爿'.\t\u000f\b\u0018\u0006\b\u0006ϟ\u0001'#\u0006\r?\u0005\b\u0006珿'\u0005\u0019۞\u0005\u0004\u000b\u0001?\u0005\t\u000f'\u0004\u000f\u000e\n\u0002\u0007N\u000f'\u0004\u000e\u0012\f\b\t\u0014\u001e\"'\u0001A\u0001\u000f\u0002\u001d\u0017\u000b"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.STEPFWD.T",
    "content": "^//_//_//_//_//_//_/\b\u0005\u0006\u0004_/\u0005\u0005\u0001\u0004_/\u0004\u0001\u0004\u0016_/%_/)_/Հ\u0006\u0001\t_/\u0006ǟ\u0001\t\n_/Հ\u0003\"_\u0004\u0005\t\u0004\u0006*_\u0007𰰰\u0004\u0004\u0004ࠨ\u0006/_/\u0004\u0006\t_/\u0004߿\u0005\u0002訨\t_\u0004\u0004\u0006\u0001\u001f_\u0004\u0005\u0004ࠠ\u0004\u0005Հ(_//_/Հ\u0004\b_\u0004\u0001\u0007Ͽ\u0004\u0002\u0002\b_\b\u000b\bՀ\u0001\u0004 _//_Հ\u0007\u0005\u0007\u0004\tՁ\u0004\u0005\b_\u0004\u0003\u0002\b\u0003\u0005\u0002\b_\u0001\u0004\u001e/_)/_\u0005\u0006\u0006\tՇ\u0005\u0004\u0006_\u0006Ͽ\u0004\u0002\u0005\t\b\u0004\u0004_\u0001\u0006\u001f/_//_Հ(/_\u0005\u0004\u0004\u0007\u0004\u0005\u0006\u0004\u0006_\u0005\u0004Ͽ\u0001\u0004\u0005\u0006\u0007\u0004_\u0005 \u0004\u0005\t\u0004\u0006_/\u0007𰰰\u0004\u0004\u0004ࠨ\u0006_//_//Հ"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.STRIKE",
    "content": "&\u0004'\u0005\u0004H9\u0002\u0003*\r\u0001\u000f\u000f);\u0001\u001d\u0006\u0006\u0001\u0010\nǟ\u0002\u0004\u0006\u001f\u0007\u0004*6Հ\u0002\u000e\u0007%\u0001\u001d\t6\u0001%%\f\r6Հ)\u0005\u0001\u0004\u0016\u0006\u0001\f\r6\u0001#\n\tߟ\u0004\f\b\u0004\u0004\u0004\t6\u0006\u0001\u0004\u0011\u0006\u0001\u000b\u0005\u0001\u00116\n\u0001\u0002\u0004\u0007\u0004\n\u0011\u0010\u0001\u00176Հܸ\u000e\u0007\u0015\u0013\u000e\u001a6\u0001\u0007\u001c:\u001c6Հ\u0005x5FA5-\u0018\u0014+5-.+5Հ\"Հ&Հ\u0001\"6\u0006\u0002\u000f\u0005\u0007\u0016\u0004\u0001\u0005ߗ\r6Հ\u0006\u0002ꨮ\u0007\u0007Ͽ\u0014Ձ\u0007ß\u0001\u0001꾾\b6\u0001\u0004\u0005\n\b\u000b\u0004\u0001\u0005ߏ\u0010\u0004\u0004\u0004\t6-՟\u0001\u0005\u0007𪪪\u000f\u0012\u0004\u00146\u0011\u001b\u0014\u000e\u0004*6\u0010\u001b\u0019\u001d\u000b\n6\u0012\u001a\u001a2༇\b6\u000f\u001a\u001b3\u00044J<4Հ\u0001Q(6\u0006\u0002ߟ\u0004(\u0004(6Ճ\u0007\u0002ꪨ\u0006Հ&Ԁ\u0001#6\u0001\u0006\u0005\u0018\u0006\u0018\u0004\u0001\u0004\u0006\u00116,\u0007\u0005\u0014\b\f\u00071\u0007,\u000b\u0004\u0004\f\u0005\u0004ԄÆؐ\u00061\u0007,Ճ\u0003\u0007\f\u0004\u0005\r\f6\u0015\u0017U6\u0016\u0015M\u00066\u0019༇n6@G\u0017\u001c@ǾG6@I\u0012"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.STRIKEBLOCK",
    "content": "ǀ\u0001\t\u0002\u0007\u0007\u0001蠀\fvꏇ\t\u0004\u0004\u0004Ͽ\u0002ꪨ\u0004\u0001،\u000b\u000fp\u000b\t\n\u0004\u0004\u0001\u0004\b\u0015мࠠ\u0001P뿇\n[\u0001\u0004\u0006B\u0001\bX\f<\b\u0007H\u0005\u0004Ԅ9\u0004\u0001\u0004H\u0004\u0005\r9\u0005\u000e\u001bԕఘ&b\u0001\b\u001c𠠼\u0006\u0005߿\u0011\u0002\u0004\u0006\u0004{\u0004\u0003\u0015\u0004\u0001\u0004𪪪o\u0005\u0002\t\f\u0001\u0005\u0004\u0004u.9\u0012"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.STRIKESCRN",
    "content": "\u001d\u0005[\u0006$/\u0004=G/\u0004=G/\u00046v\u0005\u0006\u0006\u0005-\u0004,Շ(&2\u0006+\u0003\u0004\f\u0004\u0005\u0007\u00102\u0004,\u000b\u0004\u0001\u0004\f\u0005\u0001\u0004\u00076,\u0006\u0001\u0001\u0014\u0007\u000b\u00076\u0006\u0005\u000f\u0007\u0005\u0005\u0019Ԁ\u0001\u0004\u0004\u00116\u0007\u0004Օ׿\u0006\u0002&\u0002#6\u0005\u0002\u0003\r((6\u0001}6'#<6\u000f\u001a\u001b<6\u0012\u0001\u001a\u001a\u001c\u001e6\u0010\u001b\u0019\u001fర\u0018\u00042\u0011\u001bտ\u0013\u000b)6-\u0001\u0005տ\u000f\u0011\u00116ո\u0004\u0004\u0005\u0007\u000b\u0004\u0004\u0002\u0012\u0004\u0006\b6\u0006\u0005ו\u0007\u0006\u0003\u0014\b\u0004\u0004\b6\u0005ࠠ\u0010\u0004\u0001\b\u0016\u0004\u0004\u0005\u000e6#\u0002&\u0001#\u00015)\u0004\u0019\u0011+5-\u0018\u0014+5FA5\u0005𸜎x3-\u0014 \u0019\u0007/)\u0004\tՅ\f\u0010\u00146Հ)\n\u0003\u000b\u0006\b\u00126%\b\u0004\u0010\u0005\u0005Օ\b1\u0004Հ\u0001\u000e\u0007\u0004\u001f\u0006\t\u0004\u0004\b1\u0004\n\u0004\u0007&\u0005\u0004\u00101\u0004\u0006𰠠\u0011\u0001\u001e\u0006\u0019\b6\u0001#\"\u0013\r2\u0004Ԑ&/\u0001\u0005տ\f2b\u0006\u0005\u000f\u00062b\u0007\u0004Օ׿\u0005\u0017\u0018b\u0005\u0002\u0003\f2d\u0001!\u0012"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.STRTSLICE",
    "content": "000đđđđđ0đđđđđ0đđđđđ0000đđđđđđ0đđđđđđ0đđđđđđ0ݮ00(đđđđđ0đđđđđ0đđēϿ.##Ȣ-đđđĐ!đđđĐ!đđđđ(\u0004ݮ00+߿ʎʟߊ!߿ʎʟߊ!đđĐđ0Ȣ$\u0006Ȣ$\u00060đđđđđđ0đđđđđđ0đđđđ,ݮ00+đđđđđ0đđđđđ0đđĐđ0000đđđđđđ0đđđđđđ0đđđđ,ݮ00\u001e\f\u0001đđđđđ0đđđđđ0đđēϿ\u001a\u0001߿\u001200\u0017\u0001߿\u0019đđđđđđ0đđđđđđ\u0017\u0017ν\u000bܼ ݮ0\u0001\u0005\u0007Á\u000f\u001a\u0004\bđđđđđ0đđđđđ\u0005\u0005\u0001\u000fđđēϿ\u0016\u0001\u000e0\u0001\u0005\u0005\u0015\u0013\u0001\u0015đđđđđđ0đđđđőĒ\u0013\u0015ν\u0007\u0005\u001cݮ0\u0015\u0017\u0011\u0017đđđđđ0đđđđē0đđēϿ\r\u0001\u0016\u0004#\u0005\u0004\"\n\u0001\u0016\u000bđđđĐ!đēŐđ\u000b\u0005\"ν\u0018\u0012ݮ0\u0005\u0004\u0005\"\t\"߿ʎʟ!\u000b\u0005)đđēϿ\u0005\u0001&#\u0006\u0001\u0005)\u0001&Đđ0Đ9νđđđ\"\nݮo(ݷńnđđēϿ.໮nȢ-܀đođđđđ(\u0004ݮ\u000b\u0004,ݷńȇ㐐㐐㐐㐐\bȇ㐐㐐㐐㐐đđĐđ0໮㗐䐌ҡ㗐䐌ҡ㗐䐌ҡ㗐䐌\b\u0001⒡㗐䐌ҡ㗐䐌ҡ㗐䐌ҡ㗐䐌\u00040܀ߓ䌌򜜲䌌򜜲䌌򜜲䌌𓏿\b̲䌌򜜲䌌򜜲䌌򜜲䌌𓏿\u0007đđđđ, "
  },
  {
    "path": "04 Support/DRAZ/F/PAC.TORCHONWALL",
    "content": "\u000e눈눈אאאאאא눈눈눈눈눈눈눈|đđđĄאאאאאאאx눈눈눈눈눈눈uđđđđđאאאאאאu눈눈눈눈눈눈uđđđđđאאӗǟ҂אאuݮ눈눈ˈ눈눈uđđđđđאאאאאאאu눈눈눈눈눈눈uđđđđđĐאאאאאאsݮ\u0015\u0007\u0001sđđđđđđđđđđĐ,s1sđđđđđđđĐ \fsݮ\brđđđĐȇ㐐㐐㐐㐐\u0007̾r㗐䐌ҡ㗐䐌ҡ㗐䐌ҡ㗐䐌Ͽ\u0006\u0001ҡG#Đ̲䌌򜜲䌌򜜲䌌򜜲䌌򙇟\b̲򜜲9đĐ!<<ꀮ0đđđĐ2đđđđđ0߿ʟʟߊ!60∢Ȣ$\u0006Đ9đđđđđđ0đđđđđđ0?0\u0005\u0005\t\u0004PđđđĐ2đđ\u0001\u0007\u0004\u0004O6rĐ9đđđđđđ}0đđěđz0񞢈vđđđđ0đđđđđr\u0013\u0013>0đđđđđ0đđđđđ3\u0005#04đĐ!đđđđđđ0đđđđđđ3013߿ʟʟ!đđđŗ2đđđđđ3∠%\u0006\u0016\u0004\u00193Đ99đđđđđđ3"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.TUNNEL",
    "content": "8:đđđđđ4фđđ>00đđđđđđ0đđđĐ2ݮ06đđđđđ;ф7#\b:đđđĐ!\u0004фđđ>ݮ00߿ʎʟߊ!đđđĐ2Ȣ$\u00066đđđđđđ09Đ9ݮđđđđđ;ф78:đđđđđđ4фđđ>ݮ00đđđđđ0\bđđđĐ\f0\u0005\u0006đĐ\"đđđđđđ0݀đđđđ0Đ\n\r\u0007\u0010ݮ\u0007\rđđđđđ;Ā485đđđđđđ4đđđ\u0012\u0013 '0?đđđđđ07\u001b\f6đđđĐ\u001a\fĐ9Đ9ݮ?\u0012đŔЁđđđđđđđđŔЁđđ߿ʎʟ!\u0017Ƞ\u00137\u0012\u0013%đđđđđđđđŔЁđđđđđđ\u0001Đđ4ȢȢȢ\u001aݮ0\u000f󀀮ݷń/\u0011݀໮/܀đđĐ\u0014܀đ0Đ9\u0018K<ݷńȇ㐐㐐㐐݀໮㗐䐌ҡ㗐䐌ҡ㗐䐌ҡ㗐䐌܀ߓ䌌򜜲䌌򜜲䌌򜜲䌌𓏿ߓ䌌򜜲䌌򜜲䌌򜜲䌌𓏿𓏿ݑݮ󆆮ݷńȇ㐐㐐㐐㐐໮㗐䐌ҡ㗐䐌ҡ㗐䐌ҡ㗐䐌\u0004\u0001܀ߓ䌌򜜲䌌򜜲䌌򜜲䌌𓏿\u0007"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.TURNROUND",
    "content": "\u0001\u0004\u0004\u0004\u0004\u0006\u0004\u0004ꨠ\u0007ਨZ\u0006\u0004\u0001\u0007\u0003\u0005\u0001\u0001\r\\\u0005\u0004\u0004\u0003\u0005\u0002k\u0006\u0006\u0004\u0004\u000f\u0001\u0005\u0001\b\u0007\n\t\u0007\u0007\u0006\u0005\u0004`\u000bߟ\u0004\u0004\n\u0001\u0004\u0005\u0004\u0004\u0005\u0004\u0005\u0004\u000b\u0002\u0004\u0007ظ\u0004X\u0004\u000b\u0002\u0004\u0007ظ\u0004\u0006\u0007\u0004\u0005\u0002\u0005\u0005\u0007Ԁ"
  },
  {
    "path": "04 Support/DRAZ/I/C1.A",
    "content": "ύ؀ԃീ׋઀𗀀ՀߊԀꁀԇ🀀̀׀뀀׀׀ϟ𿀀ӠàЏ ǟЎɍЏժժժժժժժժժժժժժժժժժժժժԃԀꀀ𿀀ɁދુՀ߂ת睬ĀЀꀀԃП🀀🀀އŲɅЀׁ뀀߂ǀϿ׾Џ߁ПϾǿ쟌ԁІɄ݀ԁꁀԀꀀ𿀀ЀՀՁކ׀Ԯ🀀聠ԁ􇀰ПƁׁ끀π􍆼࿀釅󀀀ߞ忪Ȁ࿀ǻĠ˥ԆМЊ臀Ԁꀀꁀꏀɾ鄘׀׃ކ߀වԿ଀聀ԃޱȥ߀࿀🀀ȹقȩժժժժժժժժժժժժժժժժժժժժ󩭙ꁀժӾЇꁀ𿀀ʩ࿀߀׃Ԇ߀־ʀӾ􆀸߀邍🀀̹Ԁ䟀ϟ𝀾˾꾮˾ʐת׀聀࿀Ҿظ🀀࿀߂׃՞ꃀ߃پീ߀׀￀̿ԠԎ돀׀ؾ膺ߟ񏀀ժժժժժժժժժժժժժժժժժժժժʾЏğ̹̀꾍־🀀ժ௝Ѡ׀ԃ🀀ׂՇꃀ߃𫀀펼ീ߂ׂ￀ؾـЎ돀׀о򇀼ѱ꾀ߟŠ𾰹؀鄍ȾΠ🀀ժ𤨊툀ׁ઀𕀀ՀþԁꀨՃ߇𯀀𿀀ྫྷ߾຀ՀߊՀ߂ǿժժժժժժժժժժժժժժժժժժժժɞЏ𫀀оρ　ϟ࿀ξЀЀ侰ީ߾"
  },
  {
    "path": "04 Support/DRAZ/I/C1.B",
    "content": "ύ؀ԃޮׂׂ࿀ꁀ࿀🠀̀胀߀Ӡà􇀀տ激󿀀𗏀Џ蟀ɍЏժժժժժժժժժժժժժժժժժժժժԁꝀՀ߂Ɂ׊׀睬Āꀀꁀ࿠ŲɅЀ臀߀׾􇀀ПϾ㿀Ӏ🀀🀀쟌ՀɄ݀ꃀԀ׀Ѐǂ޾🀀ꀀ𿀀࿀􃀀臀ނ􍆼󀀀􏀀🀀釅р𿀀忪Ȁ🀀ǻĠ˥Ղ׀🀀߂ɾ鄘߂ޮ🀀଀🀀ꇀޱȥ࿀􇀀ꇀ؆ȹÀ𿀀قȩժժժժժժժժժժժժժժժժժժժժ󩭙׊оӾꁀꁀׁаʩ࿀ߎ֮־ʀ࿀ӾȺ􏀀ꇀпЎ邍퀀ꁀ̹Ԁǂ˾꾮˾ʐת׀ꀀՊ臀Ҿظ࿀ގپက̿ԠПÃ膺ժժժժժժժժժժժժժժժժժժժժʾ󟞀̹̀꾍־Ѡꏀժ🀀֞Ꟁ𿾀펼胀ؾـ􁀀ꏀпǁѱ꾀Š𾰹㏜鄍ȾΠޮՀ𤨊툀࿀þ࿀🨀ֿ࿦ྫྷ߾胀׀ժժժժժժժժժժժժժժժժժժժժɞ􃀀ԿϿпξ侰ީ߾"
  },
  {
    "path": "04 Support/DRAZ/I/C1.C",
    "content": "ύ؀Կԫ🀀߂藀􁀚ԫ̀܆πցÏӠàПÇɍЏժժժժժժժժժժժժժժժժժժժժɁ俁܀睬Ā􁀜ЊŲɅЀ܆πց𿀀׾🀀🀀ПϾ쟌Ʉ݀Ѐ必߀܀ԃ࿈􁀜Ђ܆ԟ߀փ𿀀􍆼🀀🀀釅忪ȀǻĠ˥ɾ鄘߀߀࿁଀􀀀ԁ࿀🀀׀􁀜ޱȥ܆Կ׀փȹقȩժժժժժժժժժժժժժժժժժժժժ󩭙ӾŊʩ࿀߀߀־ʀ߀Ԁ𿀀߀􁀜Ӿ܆оĿ׃𿀀𿀀邍̹Ԁက˾꾮˾ʐת׀ЂՊҾظ࿀࿀߀߀پ߀ނЃÏς̿Ԡ܆ܾ׃膺ժժժժժժժժժժժժժժժժժժժժʾ؀၀̹̀꾍־ѠՋԀ࿀߀߀߀펼؆߀ߊÏπؾـ࿁Оև꿀ѱ꾀࿀Š𾰹Ç鄍ȾΠ𤨊툀пԫþ🀀߀߀իྫྷ߾܆πցÏժժժժժժժժժժժժժժժժժժժժɞПξÇ侰ީ߾"
  },
  {
    "path": "04 Support/DRAZ/I/C2.A",
    "content": "샀Џ聀ꁀύ؀냀߀ԟ߃𿀀࿀ǀ̀߀𿅀߀𿁀܂ϿӠà򃊀เ샬ЎՀժ耀ɍЏժժժժժժժժժժժժժժժժժժժժ🀀냀߂𿀀🀀ׁɁՃ睬ĀπŲɅЀ߀🅀߀𿁀ގÿǟ矀׾ӂПϾ쟌샬؎ׂǪՂ􀀄Ʉ݀🀀쏀𿀀𿀀ׁЀ࿀߀𚀀׀Ԁ߀ß珀Ï􍆼Հ釅ß忪Ȁ🀀ꃀǻĠ˥𕀎؎׊܇ժ쏀𿀀𿀀߃ɾ鄘🀀Пը଀􀀀𝀀Ў߀Ю࿀ޱȥ𗀀Ԁ׀߂ȹقȩժժժժժժժժժժժժժժժժժժժժꁀԇꃀꃀꃀ󩭙׀ߨ􀀀⁀Ӿը菀׀𿀀߆ʩ🀀ЀЎת־ʀ߀ເІЬӾ𗀀ՀՀ𗠿㏀邍̹Ԁ˾耀ԃꁀꁀꁀꃀ꾮˾ߨ惀ʐת׀菀߀߆Ҿظ🀀ъ܎׀پ߀߀𻀀ނߟЬ̿Ԡ𕀀Հ񀀀葠膺࿀ϟժժժժժժժժժժժժժժժժժժժժʾ̹̀Ё耀耀耀ꁀꃀ꾍־߂𿊀ԇ샀Ѡ߂߀ނ🀀࿀🀀ކÀ펼߀߂𿁀߀߇Ͽ߿Яؾـ࿠Պѱ꾀ϟ񏀀Š𾰹เЀ耀ꁀ鄍ȾΠ׀ԏ𤨊툀߂Яீþ࿀🀀࿀߂ǀ࿀ྫྷ߾߀߂𿁀߀ъ߿ժժժժժժժժժժժժժժժժժժժժɞԂξ侰ީ샀耀ꃀ߾"
  },
  {
    "path": "04 Support/DRAZ/I/C2.B",
    "content": "ύ؀ІЀЁ܇ЎІׁӠà𿀀🀀Ё􀀀􀀀􃀀􃀀ɍЏ򀀀𿀀𿀀ɁܞփЃ睬Ĉ܇ІЂダŲɅ׾🀀ПϾЃԀ􀀀􃀀Ѓ쟌Ʉ݀𿀀࿀𿀀࿀Ѐꃀ菀ܞփԃ𿀀އЂ烀󃀀􍆼🀀🀀釅聀􀀀忪ȀԃԁЀ􁀀ЁǻĠ˥𿀀𿀀ɾ鄘ꏀОЃԃ܇Ⴠ぀ޱȥȹ࿀胀􃀀قȩժժժժժժժժժժժժժժժժժժժժևցЁЁЃ󩭙Ӿ࿀ʩꏀОԃЁ־񀀀Ӿ𞀀邍̹Ԁ胀ԃ􀀀˾ׇԃЁꀀЃ꾮˾Ѐʐת׈ҾظЎԁԀپ𿀀𰀀̿ԠꇀО࿀膺ʾ胀ԃ̹̀ԃԃ끀؃꾍־Ѡ𨁀𿀀؂Ԁց펼🀀ؾп࿀ѱ࿀࿀Š𾰹胀ԃ􀀀􀀀􀀀փԇ끀؇鄍ȾΠ𤨊툨ЀЀ𿀀þނЃЎׁ󏀀ྫྷ߾ժժժժժժժժժժժժժժժժժժժժɞԿ🀀࿀࿀࿀ξ𿀀聀ԁ􀀀􀀀􁀀􁀀侰ީև߾"
  },
  {
    "path": "04 Support/DRAZ/I/C2.C",
    "content": "臀ꇀ𚀀֏؏վ🀀燀񏀀ժժժժժժժժժժժժժժժժժժժժ𚀀܏؏Ԫ࿀῀　о󟀀ເп؎ЏЪЎ񟀀χ㿀􃀀ເ􃀀Ն뀀܆ꀀ􃀀І񿀀࿀ժժժժժժժժժժժժժժժժժժժժԁԿ뀀臀ԁ՞ꀀ􃀀п󇀀ៀُ𿀀臀𿀀Пԃ􀀀ן끀Џ࿀𾀀𻀀񟁀㇀🀀ժժժժժժժժժժժժժժժժժժժժֿ؎臀𛀀㏀ď؏ԺꟀ蟀ժժժժժժժժժժժժժժժժժժժժ񇀀Ǐ"
  },
  {
    "path": "04 Support/DRAZ/I/C3.A",
    "content": "ύ࿀Ꟁ֮ܺ叀רЏԟ࿀🀀🀀埀߁󀀁࿁𿎀𿁀ӠàɍЏ胀𿀀ʿ֮ɁՏ睬İЏԟ𿀀🀀ŏŲɅρ߁χρ聀׾ЀПϾ耀쟌ɄݨЇ􃀀Џ𿀀ԃЬЀԏ𿀀ş灀🇀Ǐ􍆼󀟀釅胀忪Ȁ胊ǻĠ˥냀ЂԀЂ臀臀ԃԁ蟀ɾ鄘࿀꿀菀ޱȥ񁀀Ǐවȹ臀قȩ胀󩭙뇀ӾЂЀԁԀߏʩЪԂ࿀߮־臀Ӿ㇀邍̹Ԁ臀˾臀꾮˾ꏀʐתԀҾظЎЪԂՂ࿀ר񀀀پ𿀀̿Ԡ㏀膺ժժժժժժժժժժժժժժժժժժժժʾ瀀臀̹̀臀Ԟꀀ🀀꾍־菀ѠЊԇ臀Ԃ࿀נퟀ펼࿀ؾـßժժժժժժժժժժժժժժժժժժժժѱ꾀Š𾰹🀀臀Վ🀀鄍ȾΠꏀ𤨊ീ蟀þЎЎ􇀀࿀🀀🀀ퟀďſྫྷ߾ժժժժժժժժժժժժժժժժժժժժɞξ侰ީ🀀胀߾"
  },
  {
    "path": "04 Support/DRAZ/I/C3.C",
    "content": "֪Я𿄀ύ؀ׂ񇀾Ǐ㏀ՠЊІ̀Ӡàǟ󇀀ܪ֪ОЎῈςПоתՀ𿀀ɍЏ򀀀׃р񏀾ǟßɁ֪Ղ聀ժժժժժժժժժժժժժժժժժժՂ睬ĀЪŲɅЀ׾ᏀПϾժժժժժժժժժժժժժԪ腀݀怀Ю🀀㿈П྅쟌Ʉ݀߃рßЀՆԪժ݇ުվ𚀀􍆼󀀀Ꮐ釅ހӾЯ忪Ȁ🀀㿈ຄǻĠ˥рჀɾ鄘܆ЂԿ଀ޱȥȹ׀׿ԯЯقȩԁЀ࿔ໄ󩭙Ӿʩϟϟ־ʀӾ邍퀀̹Ԁ׀Я˾ԁՁ࿐ໄ꾮˾ʐת׀ОҾظ܊ǟǿ燀پ̿Ԡ򀀀ߟ珀Ϗϟ膺🀀ʾ瀀߂׀п̹̀Ԁ𿐀𿄀꾍־珀ѠОЎꁀՎ珀펼ԪժժժժժժժժՀؾـߟ珀ϟϟѱ꾀🀀؎Š𾰹πпԇ𿐀𿄀鄍ȾΠ珀㏀𤨊툀ЀЎЎꀀ؀þԎÏྫྷ߾ɞǟϟ󇀀ꁀ܆ЎξῊςп侰ީկ𿄀߾"
  },
  {
    "path": "04 Support/DRAZ/I/C4.GD.A",
    "content": "Ԁԇύ؀ڀªДДԪЪДʀ􏀀Ԁ̀叀埀𿀀ӠàԿО׏ԾꟀԪԀ׀ЇӞԁɍЏժժժժժժժժժժժժժժժժժժժժԏʀԔԔɁٿԪԪ睬Āʀ􏀀࿵ŲɅЀЏЪៀ󿀀׾ПԿ🀀ԿПϾԘԾՂ𿀀🀿쟌Ʉ݀՟럀ЀԂԊԀЀ񏴠𚀪П׀Ъ࿀󟀀􍆼ԟտ釅῀՘࿀Ԃ忪Ȁ࿀ǻĠ˥՟ꁀɾ鄘Ѐܞ԰԰ЪЊ଀􏀀ޱȥ𿀀🀀ՅЪد󟀀՟վ폀ȹ῁տԊقȩժժժժժժժժժժժժժժժժժժժժО󩭙߀ӾꃀꁀʩԯжԼЪ־ʀӾ🀀𿁀Ӕǀꁪ߯邍퀠՟վЪЪꏀ🀀̹Ԁ񯁀翀􇀀߿՟ꀀ˾Ў꾮˾諂߀ʐת׀ꀀꃀҾظԧо߀ԤԼЊپꃀꁀ̿Ԡ򠁼🁀ʄ߫膺՟ЪЪꏀժժժժժժժժժժժժժժժժժժժժʾ瀨񯅀߀߿̹̀꾍־߂ѠꁀتД߀԰펼🀀🀀ؾ٠ՀꚅԾèѱ꾀՟ԪԪ⏀Š𾰹߿ԇꃀꃀ鄍ȾΠоо𤨊툀ԪþԔπ􇀀Ԁྫྷ߾叀埀ժժժժժժժժժժժժժժժժժժժժɞ菀܂뾅ԾៀꏀԪԂ𗀀ξ侰ީԁꀀꀀ߾"
  },
  {
    "path": "04 Support/DRAZ/I/C4.GD.B",
    "content": "ύ؀ԏ🀀ʏ̀🀀оŃՀӠàк퇀뀟ʇԪՀԂЪž׃ꫥꏀɍЏժժժժժժժժժժժժժժժժժժժժɁꃀ睬ĀԏԅŲɅЀ꿀оꀀ􇀀Ԁ׾ޞкԊЪЮ꿾ժПϾ򟀀ՆԊЪ߂Њ쟌Ʉ݀ЀꀀԞԅ𚀰忀࿀şоꀀ􍆼՞ԊЪԮ׿釅򿀀՞ԪԪ⫅忪ȀԪǻĠ˥ɾ鄘଀ԞԝЀޱȥОʀк՞ЪԪժՔӿȹЪʯ⪕قȩժժժժժժժժժժժժժժժժժժժժ󩭙Ӿꃀʩ־ʀԃ辀ԞЀӾꀀԞꁀ􇀀邍퀀кѾꀀՔӟ̹Ԁ߆Ъ𿪅Ղ˾꾮˾ʐת׀ꀀҾظԇپ􏀀辀ОހЅ̿Ԡ؀Ԟ򁀀膺КѾ🀀ժǏʾ瀀聀ǪՊ̹̀꾍־Ѡ펼辀оԀؾـԞ므Ϗѱ꾀ԊѾժժժժժժժժժժժժժժժժժժժժŠ𾰹êժ鄍ȾΠ𤨊툀þྫྷ߾菀оؾҀ큀ժժժժժժժժժժժժժժժժժժժժɞԺ򇀐폀뀇ȯԂѾևξꏀ侰ީ߾"
  },
  {
    "path": "04 Support/DRAZ/I/C4.SH.A",
    "content": "ԀЊԃύ؀࿀Կ࿁Ԫ߀߀녀Ъꏀ̀ꇀꟀ߀߂ǟӠà🀀ׇЇцԁɍЏժժժժժժժժժժժժժժժժժժժժ࿀՟࿁ԀɁ녀Ԫꗀ𿾀𿾀睬Ā࿀ŲɅЀꟀժ烀ß׾耀ПϾ𿀀𿀀🀀쟌ՏɄ݀ꃀЀ뇀ꗀχ𚀕🀀߀ի􍆼耠釅忪Ȁ࿀ǻĠ˥؎տԿ𿀀ɾ鄘Ђկꗀ񏀀଀ޱȥ🀀߀կ胀ȹ🀀قȩժժժժժժժժժժժժժժժժժժժժ󩭙끀خԿԿӾꁀЪꁀʩ߀կ־ʀӾ߀🀀ԯ邍🀀̹Ԁ࿀˾࿀꾮˾ꁀЮ𿁀տʐת׀ꀀꀀШꀀҾظ߀տ߀𿀀پ߀̿Ԡ߀Ԏ܂𿀀膺瀀ρժժժժժժժժժժժժժժժժժժժժʾ̹̀࿀꾍־ꃀп𿁀߀߀ѠꁀР🀀߀տ߀펼ꁀԪ߀࿏ߟ🀀🀀ؾ٠߀Ԟ܆ѱ꾀󏀀ǏŠ𾰹ԃꁀꁀ鄍ȾΠп𿁀߀߀𤨊툀𸍀þ🀀ꏀꇀྫྷ߾ꃀԪꏀ߂𿾀Ϗ𿟀ժժժժժժժժժժժժժժժժժժժժɞվއßξ侰ީԁԀꀀꀀ߾"
  },
  {
    "path": "04 Support/DRAZ/I/C4.SH.B",
    "content": "ύ؀̀վӠà񏀀ɍЏժժժժժժժժժժժժժժժժժժժժɁ睬ĀŲɅЀԪ꿀׾ПϾ󟀀쟌Ʉ݀ЀЪ¿􍆼釅㿀忪ȀǻĠ˥ɾ鄘଀􃀀Նޱȥ࿀ȹقȩժժժժժժժժժժժժժժժժժժժժ󩭙Ӿʩ־ʀ臀ԁ՞Ӿ邍퀀𿀀̹Ԁ𿀀˾꾮˾ʐת׀ҾظپЏꏀ࿀̿Ԡ膺🀀ʾ瀀̹̀꾍־Ѡ펼臀ؾـѱ꾀ժժժժժժժժժժժժժժժժժժժժŠ𾰹鄍ȾΠ𤨊툀þྫྷ߾Ժժժժժժժժժժժժժժժժժժժժժɞ񇀀ξ侰ީ߾"
  },
  {
    "path": "04 Support/DRAZ/I/C4.SKEL.A",
    "content": "΁ύ؀߁぀󀀀̀뇀ÁЁӠàɀ܀　臀ɍЏժժժժժժժժժժժժժժժժժժժժ࿀Ɂ̀睬ĀЏ񿀀ŲɅЀ׾࿀΁࿀݁끀ПϾ쟌Ʉ݀샀Ѐ܁×࿀퀀􍆼࿀̇釅忪ȀǻĠ˥􀀀񿀀ɾ鄘􁀀΃Ѓ଀ೀޙޱȥ𝀀߀رρȹقȩժժժժժժժժժժժժժժժժժժժժ󩭙ƍӾೆ࿀࿀ʩ솀־ʀ臀􃀀܇؋Ӿ򀀀Ã󂟀⁀邍ǘ𿂀À΃🀀̹Ԁ　쀀˾꾮˾܀ߙʐת׀🃀ÁೀೀҾظپކ܇̿Ԡက膺ǀժժժժժժժժժժժժժժժժժժժժʾ瀀̹̀࿀꾍־ǁ඀șࣞ솀솀Ѡ怀Á펼โ🀀ؾ ѱ꾀Š𾰹鄍ȾΠ灀ೀ𤨊툀𸇀ȁȃÀþ🀀΃㇀🀀ྫྷ߾瀀ρ󀀀ժժժժժժժժժժժժժժժժժժժժɞฎවξ侰ީ􃀀߾"
  },
  {
    "path": "04 Support/DRAZ/I/C4.SKEL.B",
    "content": "ύ؀🀀̀ㅛӠàী獃󀀀ɍЏժժժժժժժժժժժժժժժժժժժժɁ睬ĀŲɅЀÌੀ׾΀ПϾÁ𹀀쟌Ʉ݀ЀЏ􃀀·𚀘􍆼󀀆釅ǁう忪ȀǻĠ˥ɾ鄘଀臀̧ޱȥ㏀ȹ𸀀قȩժժժժժժժժժժժժժժժժժժժժ󩭙Ӿʩ־ʀӾ쀀񀀀􇀀邍퀀ダΛ̹Ԁ˾꾮˾ʐת׀Ҿظپ胀̿Ԡ膺ダӀʾ瀀̹̀꾍־Ѡ펼ؾـѱ꾀ÁժժժժժժժժժժժժժժժժժժժժŠ𾰹Ã󀀀鄍ȾΠ𤨊툀þྫྷ߾𾀀𖀀ժժժժժժժժժժժժժժժժժժժժɞρ䁀怀Ƒξ぀侰ީ߾"
  },
  {
    "path": "04 Support/DRAZ/I/C4.VIZ.A",
    "content": "пύ؀꿀ԏ􏀀ևўԪЪ꿀ןߞԟԟ􏀀԰̀叀쇀埀𿀀ӠàПԿޏԾꟀԪԀ׀ϟԃ燀؇󃀀ɍЏժժժժժժժժժժժժժժժժժժժժԏ􇀀꿀ɁՏԟԏѾ􏀀ԪԪ꿀睬Ā՟ПԟԟŲɅЀՏЪ῀󿀀׾ПԿ🀀񃼀ԿПϾԘԾՂ𿀀🀿쟌Ʉ݀՟諽꿀ЀտԾԞ՟Ӿ埀ԂԊ꿀ԟԟԟ՟ﯠ𚀪🀀ПЪ࿀󿀀􍆼ԟվ釅ៀ՘࿀Ԃ忪Ȁ࿀⏀ǻĠ˥꿀ԟԟ՞꿀ɾ鄘տԾЀ뿀Ԟ՟Ӿ忀԰԰꿀ЪЊ଀蟀࿀𿀀ԟԟ՟߰ޱȥП𿀀Ъ󟀀՟鏀ȹេտԊقȩժժժժժժժժժժժժժժժժժժժժ󩭙ԿԿӾ՞忀ʩտϪԾԟ־寀ԾЪ־ʀ샀蟀՟Ӿ俀࿁ח瀀꿪邍퀠՟ЪЪꏀ🀀̹Ԁ񯁀翀􇀀߿՟ꀀ˾🀀꾮˾迀ԾԾʐת׀Վ忀ҾظԿߪԾԿԾ寀ԾЊپ샀՟̿Ԡп֟ꃨ膺՟ЪЪꏀժժժժժժժժժժժժժժժժժժժժʾ瀨񯅀߿̹̀🀀꾍־迀Ѡ蟀Ўت꿀ЪվԿԾ叀Ծ펼ꃀ՟🀀🀀ؾ٠п֟ԾϿѱ꾀՟ԪԪ⏀Š𾰹柀߿🀀􏀀鄍ȾΠ꿀𤨊툀󃀀󃀀ЎԪ꿀þמԿԟԾྫྷ߾叀蟀埀ժժժժժժժժժժժժժժժժժժժժɞПԟￅԾϧៀꏀԪԂ𗀀ξÇԏ侰ީ􏀀߾"
  },
  {
    "path": "04 Support/DRAZ/I/C4.VIZ.B",
    "content": "ύ؀ԏ🀀̀оԂӠàк퇀ժԏՀԂЪž׃ꫥꏀɍЏժժժժժժժժժժժժժժժժժժժժ񇀀Ɂ菀睬ĀԟԟʟŲɅЀоꀀ򁀀׾ޞкԊЪЮժԏПϾ򟀀ՆԊЪ߂Њ쟌Ʉ݀Ѐ쁀Ԟԟ𚀰忀оꀀ􍆼՞ԊЪԮժ釅򿀀՞ЪԪ⫅忪ȀԪǻĠ˥ɾ鄘଀Ԟԟ򟀀ޱȥОʀՏ՞ЪԪȹߪʯ⪕قȩժժժժժժժժժժժժժժժժժժժժ󩭙Ӿʩ蟀־ʀ􏀀辀Ծ򟀀ӾԞꁀՏ邍퀀кѾꀀ̹Ԁת𿪅Ղ˾꾮˾ʐת׀菀Ҿظԏ샀پ辀о̿ԠԞ򁀀տՏ膺кѾ🀀ԪՊʾ瀀聀ǪՊ̹̀꾍־ꇀѠ쁀펼菀辀ؾـԞ뿀տՏѱ꾀ԚѾժժժժժժժժժժժժժժժժժժժժŠ𾰹ώêժ鄍ȾΠꁀ𤨊툀þྫྷ߾샀оԀժժժժժժժժժժժժժժժժժժժժɞԺ򇀐폀ՏԊѾևξꏀ侰ީ߾"
  },
  {
    "path": "04 Support/DRAZ/I/C5.A",
    "content": "ԁ߀ύ؀Ъ땀ի߂׀຅ǟ🀀ׁ࿀̀ꕀ׏ݪ׀߂ǟ󏀀߿Ӡà🀀݆耀耀ៀԏ׀ɍЏժժժժժժժժժժժժժժժժժժժժ࿀𯁀ɁՀׂՁ຅睬Āꃀׁ࿀ŲɅЀݟݪׂ߂߿🀀׾߆ПϾ🀀쟌ЋՋպ׀Ʉ݀࿀࿀ԀீЀ׀׀ׂՂ܇׀ժЪ݂׊􍆼釅🀀🀀忪ȀǻĠ˥֫Տպ׀࿀Ђீ߂ɾ鄘߂׀Ճ଀׀Ղޱȥ׀պȹقȩժժժժժժժժժժժժժժժժժժժժ󩭙𫀀֫ן݂ՁӾ굀𿀀߆ʩ߂𿀀־ʀՀӾ࿀邍ÿ̹Ԁ˾꾮˾߯ݿ݂Ձʐת׀ꀀՀЎҾظ߀𿀀پꁀ̿Ԡ膺㟀ժժժժժժժժժժժժժժժժժժժժʾ뀞̹̀꾍־寀߿ժ݊Ѡ⁀ʇꇀ߀򁀀߀򵀀𿀀펼ծ߀ؾـ𕀀ѱ꾀Š𾰹􀀀Ղ鄍ȾΠી𤨊툀ꅀ蕀׀кþ🀀׀ീྫྷ߾ꅀծՏ߀ժժժժժժժժժժժժժժժժժժժժɞ🀀ß󏀀ξ侰ީԃՂ߾"
  },
  {
    "path": "04 Support/DRAZ/I/C5.B",
    "content": "ύ؀ՇԁЀЀ࿀蟀菀׀׀߂׀׀пԆÀԿગꏠ̀ી߀׀࿀󃀀Ӡàիԏꇀ؎ǁ𿀀聀ɍЏժժժժժժժժժժժժժժժժժժժժՇԚЀ࿀蟀蟀臀Ɂߟ߂׀߂׀׀𿀀睬ĀՁЏӀǂꏠŲɅЀ𺀀ீÀ࿀󃀀׾􏀀пПϾ🀀쟌胀ꁀɄ݀ՇԞԆԂ迀蟀Ѐ߀߂׀߀𿀀迀􇀀ՏП🀀ǀʏ𚀀끎ீÀ࿀񃀀􍆼ꏀП࿀釅🀀𿀀忪ȀǻĠ˥臀ꁀԞԎԚЎޚЎ迀蟀ɾ鄘ǂς🂀߂߂վ࿀迀଀Պǀр׾͊ޱȥ냀Ӏ𿀀񇀀࿀ȹ࿀قȩժժժժժժժժժժժժժժժժժժժժ󩭙菀ӾԞՏԞІЀІ蟀迀ʩׇǂςςςо࿀Â־ʀ݂𚀀Àр׾ՂӾϿ냀ી㇀邍կ뿀̹Ԩ࿀˾꾮˾菀臀菀ʐת׀ԏՏ֞Ђк迀Ҿظ׏Àǂǂઁ࿀πپ݆՟Հ̿Ԡ򀀀ເ🀀珀膺ի𿀀ժժժժժժժժժժժժժժժժժժժժʾ缀̹̀꾍־у菀臀Ѡ׀􇀀ߟ຀ŋ𺕀迀迀ՎǀÀÂ߂ુ࿀׀펼ݎ𪀀׀🀀ؾـꇀׇ຀𞀸Ǐѱ꾀Š𾰹ꁀ鄍ȾΠՃ㇀蟀菀𤨊툀׀ׇׁ݀𺁀տ迀迀þՆк׀ÀÂ߀Կ׀ྫྷ߾ؚી׀׀ժժժժժժժժժժժժժժժժժժժժɞ돀׏؞࿀ǟξダ࿀侰ީ߾"
  },
  {
    "path": "04 Support/DRAZ/I/C6.A",
    "content": "чуύ؀ЁЁЇ臀聀Ѓꏀꏀ􁀀пЃՂԪՀԪՀ̀ԂԎ􏀀ՌՀЪՁʃժӠàԪՂՊՊժЪՀԪՂՊ՚ఀ҇҇ɍЏժժժժժժժժժժժժժժժժժժժժЃЃɁ瀀Ѓ胀耀Ёʏʏ睬Ā􃀀ԿԃՂԪՀԪՀŲɅЀ򗀀ՀՂՂЪՀժժ׾𿀀࿃灀ΌПϾՂՊՊժԪՀԪՀՂՊ՚฀쟌􃀀臀ЃЇɄ݀ЃЃЀĀЃ胀耀Ёࢀφ耀􃀀ԿևՊԪԪՊՂЪՀժժ􍆼𿀀׃Ъך釅ՂժժժԪԪՊՊՊ忪Ȁ࿀ǻĠ˥ЁЃԃԃɾ鄘ԃ胀ꀀЁ଀𲀀ՠǎ聀ևޱȥ🀀ՊՂԪՂժժЪ׀τӊ僀ŇȹՊժժժԪժՊժժقȩժժժժժժժժժժժժժժժժժժժժ󩭙ЁЁӾփ退сևևʩА􃀀胀Ё־ʀԂժ胀𿀀ӾՊՊԪՂժժЪ邍׀ׂ߂׆ժՁՂ̹ԀՊժժժժՀժ˾꾮˾ЁЁʐת׀҇耀遀уևևҾظА􃀀о胀ЁЪЪپ΀􇁀胀Շտ񏀀̿Ԡ𿀀ՊՊԪՂժժЪ膺ՀՂׂ׌ԪՀՀժժժժժժժժժժժժժժժժժժժժʾ瀨ՀՊԊ̹̀꾍־ƂЁЁѠҏ郀чԇ􁀀пЁՀЪЪ펼𒀀Ю􇁀聀Տꇀ՟ꏀؾـ࿀𿀀ժՊժՀՊժժԪՀѱ꾀ՀՊՊՊЪՀԪՀՂՆŠ𾰹ср鄍ȾΠЁЁ𤨊툀֏胀҇þ􁀀ЃՀЪЪྫྷ߾䒀ծ脀ՎꇀՒʏժժժժժժժժժժժժժժժժժժժժɞ࿀ΟЪՊՀՊժՊԪՀՂՊՊՊЪՀԪՂՂՌξ侰ީус߾"
  },
  {
    "path": "04 Support/DRAZ/I/C6.B",
    "content": "ύ؀ܾ⏀⇀🀀ރꇀ਀𿀀߿̸菀􃀀Ղ࿀ЪꟀӠà׀Ã쏀܏̪ՂЪիժЪժЪ၀ɍЏժժժժժժժժժժժժժժժժժժժժԁƾҟҿɁꇀՃ睬ĈߟŲɅи𗀐菀􃀀ՂЪЪꟀꏀ׾߀؀Ã܇܃ПϾԪܪՂЪժժԪժԪ񁀀쟌Ʉ݀ԁҺҺЀꏀ𚪀𕀐􁀀׀ՀЪ꿀ЪꟀꏀ􍆼߀އ΃惀釅ԪԪՂЪժժժժԪժ忪󇀀ǻĠ˥ЂҺɾ鄘𿀀଀ЀꟀޱȥ򀀀Њ􁀀πЪՀԪժԪꟀꟀ࿀߃珀揀ȹԪժՀԪժժժժЪժقȩժժժժժժժժժժժժժժժժժժժժ󩭙ӾԏЪʩЂ𿀀߿־ʠЪԂ￀࿿Ӿ臀Ԁ􀀀ǀԪԪժԪşꟀꟀ邍࿀̹ԪժՀЪժբԂԪЪ˾꾮˾ʐת׀ՏҾظ𿀀߿߿پؗлՂо̿Ԡ؀胀􀀀ԪԪԪşꏀꟀ膺࿀ժժժժժժժժժժժժժժժժժժժժʾԨЪժՠԪ̹̀꾍־࿀࿀ѠԪ՟տ뀀뀀𿀀߿߿펼пЀоؾԪԎЪşꏀʟѱ܊߀Š𾰹ԈŉကԪЊ鄍ȾΠ࿀񟀀迀𤨊툀Ԫ🀀ܯꀀꀀþ਀࿀߿ྫྷ߾пЁꟀժժժժժժժժժժժժժժժժժժժժɞրЀ쏀̟̊߂Պξ၀侰ީ߾"
  },
  {
    "path": "04 Support/DRAZ/I/C6.C",
    "content": "ύ؀࿀̀؎ЪӠàЪՊժժՂժժժՂ֪֪֪֪Հ𿥀ՊՊՊՊժժЪՊɍЏժժժժժժժժժժժժժժժժժժժժÁрɁ􁀀睬ĀӀ𿀀ŲɅЀܪ߂埁ժժЪՀ׾ԪՊժժՀՊժПϾךךЂڐڄ߀ԪՀԪՀԪՀԪՀվՂԪՀ쟌Ʉ݀ȁЀЀЀ􀀀À𿀀𚀀ࠀժժժЪՀՀ􍆼󀀀ԪՊժՁժ釅߂߂߂߂忪ԪԪԪԪոЪǻĠ˥ɾ鄘Ѐ଀ǂޱȥԪժժժԪՀՀꁀЪՇՃȹׂׂׂׂՂقȩժժժժժժժժժժժժժժժժժժժժ󩭙ÀӾЀʩĂժ־ʀ迀Ӿ΁׈תժՀժժժԪՂՀ邍뇀ꇀ񃀨̹׊׊׊׊ՂՀת˾꾮˾぀ʐת׀ЀЀҾظժپ🊀꿀̿Ԡ򀀄ժժժՀժժժԪՂЪՂ膺ЦЦЦІ냀ժժժժժժժժժժժժժժժժժժժժʾՊՊՊՊՂՀժ̹̀꾍־ࠀѠ𐀀Ѐ҂׀펼𞀀ꟀؾـժժժՂժժժԪՂЪՂѱ꾀ددد؏ꁀŠ𾰹ժժժժժՀުՀժ鄍ȾΠÁ𤨊툀þЂǂྫྷ߾ЎЪժժժժժժժժժժժժժժժժժժժժɞрЪժժժՂժժժЪՀՂԯЀԯԯԏՂકξժժժժժԪժ侰ީ߾"
  },
  {
    "path": "04 Support/DRAZ/I/C6.D",
    "content": "߀ύ؀𿁀Հ𿊀ЂԪ̀ժӠà՟Ъ🀀珀߀ɍЏժժժժժժժժժժժժժժժժժժժժ࿕ɁоооՀ睬Ā࿀ߊЂԪŲɅЀժ׾̟ꟀПϾ՟쟌𿀀߀Ʉ݀𿀀𿕀ЀооЎЎЎԀ࿀׊оը𚀠􍆼釅տ忪ȀǻĠ˥оо߀߀𿀀ɾ鄘ЎЎ؏؏؏Ԁê଀࿀תޱȥ꿀ȹտقȩժժժժժժժժժժժժժժժժժժժժ󩭙ЎЎ߀׀Ӿ𿀀ʩ؏؏ྀྀԀ־ʀת🀀Ӿ꿀邍퀨տ🀀̹ԀտЊ࿀˾꾮˾؏؏ྀ߁׀ʐת׀࿀࿀ՀҾظԂЪپժ🀀̿Ԡ꿀꿀膺տժժժժժժժժժժժժժժժժժժժժʾ瀀ՏЂ￀̹̀꾍־࿁ѠՀ𿪅ԂЪ펼ժؾـ꿀꿀𡕨ѱ꾀Š𾰹՟ߏЂ࿀߀鄍ȾΠ࿁𤨊툀ՀþЂԪྫྷ߾ժժժժժժժժժժժժժժժժժժժժժɞ꿀꿀࿀ЪЪξ՟׏忀𛀀侰ީ🀀߀߾"
  },
  {
    "path": "04 Support/DRAZ/I/C6.E",
    "content": "ύ؀Ԁꃀ䇀࿀оڀꃀԏ⏀⏀⏀оꏀꟀ蟀蟀ꇀк迀迀Ӡà蟀菀ԟՏ迀кՇտ􀀀ԀԀ􀀀ɍЏ򀀀돀ԟɁоЎ؀ꁀП睬кꏀ迀꿀ŲɅ菀蟀臀Շк迀俀׾蟀ԟՏ迀ПϾкՇտ՟쟌Ʉ݀𕀀Կ𕀀𕀀𕀀ЀЎ؏ЀП🀀🀀🀀кꏀ迀꿀迀菀Տк迀俀􍆼ԟ՟Տ釅кՇՏ忪ǻĠ˥Կɾ鄘쟀؏ЂО🀀🀀ꏀкꏀ迀꿀迀ޱȥ菀׏迀俀Ԟ՟Տȹꇀкԇ򁀕Ԃقȩժժժժժժժժժժժժժժժժժժժժ󩭙Ӿ🀀🀀Կ🀀🀀🀀ʩĿо־ꏀкꏀ迀꿀迀Ӿ蟀ҏ迀࿀邍Ծ՟՟̹Ԁ臀кԇ⁀Ԃ˾꾮˾ʐתԏԏԏҾظоپꟀꏀкꏀ迀迀̿Ԡ蟀ҏ迀迀膺Ծվ՟Շʾ臀кԎ Ԁ̹̀꾍־ДѠԃԃԃоꇀꟀ펼Ꟁ菀к迀迀ؾ蟀菀ԏՇ迀ѱԾ􁀀ԇԇ􁀀Š𾰹臀кЎЂ🀀鄍ȾΠЀ䀀𤨊ԇþоꇀꟀྫྷ߾蟀蟀ꇀк迀迀ɞ蟀菀ԏՏ迀о􁀀ԃԃ􁀀ξ臀𝀀Ђժժժժժժժժժժժժժժժժժժժժ侰ީ߾"
  },
  {
    "path": "04 Support/DRAZ/I/IMG.BGTAB1.PAL",
    "content": "\u0001a3aa\u0003bAbsbbcyddde\u001bfAf_fwff\u000bg)gOgAhOh]hkhyhhyii\u001fj3jejjjj$k<kkk\u001elTlll\\mmmmmmm\u0018n8nXnxnnnnnn\u000eo\u001co'o/o4o7o:o=o@ofooo:pXp\u000bqqrrrstt$uuuu\u0001v\u0012v$v\u0016wpww4xxxx\u0007yIyLy^yyyy<zz0{{$|'|a}{}}}k~t~}~~~~~~~~~~\u0019+9\u0004\fĈĠĈĀĈĀĀĀ\u0004'ĀĈժժȡժժ\u0004\f\u0004\u000f\u0004\fĈĠĈĀĀĀĀ\u0003\fĀĈ\u0004;ĈĠĿѿĀĀĀĀĀ\u0004<ĀÈժժ\u0002\u0003\u0004\u001dĈꈑĈꀑĈꀐꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀ\u0004<ĀҀІІІІІІІІІІІІІІІІІІІІЮІІ΀ІІЮІІІІІІІІІІІІІІІІІІІІІ\u0004\fІІІІІІІІІІІІ\u0004\t\u0004\u0007ĈĿѿ\u0002\u000bՀր؀\u0004\u001dĈ߀݀Հ̀݀݀݀݀瀀瀀瀀瀀瀀瀀\u0004\u0007𿀀\u0004\u0007ĈĈĈ\u0004\tĠĀ\u0004<Ĉ֐֊ĖĖՐ؊⪖րւ֊֪\u0004\u0003ݻݻ\u0004\u0003\u0004\u0003ꀀꀀ\u0004\u0003ݻĈ\u0004\u0003ݻ\u0004<πժǂȺǂժ\u0003\fĀĈ\u0002?\u0003\u0006\u0004\fĢĈĠĈĀĈĀĀĀ\u0004\fѻĈĀĈĀĀĀĀ\u0004\r׻נĢĈĠĀр݀\u0003\rĠĀ\u0004\u000bȑĈĠĉрТĀĀĀ\u0002\u000bĈĈ\u0004\u0013ȑȑиĠĠ\u0002\u0012˓ŊÊ\u0004\u001bȑ๺ุ̰Ȱذ\u0002\u001a˓Ëǋ\u0004\u001aȑฺุ̰Ȱذ\u0002\u0019˓Ëǋ\u0004\u001aȑฺุͰ̰Ȱ\u0002\u0018˓Ëǋ\u0004\u0003ݻ\u0004\u0003\u0004\u0003ݻݛ\u0003\nӀӀӀр׀܀Ѐ\u0003\nߐӀӀӀӀрԀЀ\u0003\n׀߀ÀӀӀӀӀЀЀ\u0003\nр׀߀ÀӀӀӀЀЀ\u0003\nӀр׀߀ÀӀӀЀЀ\u0003\nӀӀр׀߀ÀӀЀЀ\u0003\ñӀӀӀр׀߀ÀЀЀ\u0003\nӀӀӀр׀߀ЀЀ\u0003\b̃ӌӌӌэׇߜ\u0003\u0007̃ӌӌӌэׇ\u0003\u0006̃ӌӌӌэ\u0003\u0005̃ӌӌӌ\u0003\u0004̃ӌӌ\u0003\u0003̃ӌ\u0003\u0002̃\u0003\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\fЀЄЄЄЄЌЌЌэчќ\u0003\n\u0002:\u0001<\u0004\u0007ժժȡժժ\u0003;ઝઝ\u0003?ઝ\u0003<ĀĈ\u0004\rݻĈĠĈĀĈĀĀĀ\u0004\u0003ݻ\u0004<ĈĢĈĢĈĢĈĢĈĢĈǈֆֆֆֆֆֆֆֆֆֆֆ\u0004<ĀĈؚ蝀ȘȘȘ蝀ؚؚ蝀ȘȘȘ蝀ؚؚ蝀ȘȘȘ蝀ؚؚ蝀ȘȘȘ蝀ؚؚ蝀ȘȘȘ蝀ؚؚ\u0004\u000fݻ֪ժݒĈĈĈ֪ժݻ\u0004\u000fȘȘȘߚݻժ՚ĘĘĘժ՚ݻ\u0004*ĀĈպժȡպժ\u0001\u000fԔ\u0001\u000fԜЀ\u0001\u000f\u0001\u000fАՕ\u0001\u0010ؘА\u0004<ĈĈψܹ޵\u0004\u0016𐀀\u0004\"ĈĈψ󿀀㿀ỀṀ\u0004\u000e𐀀\u0004\u0019ĈĈψτ󿀀㿀ỀṀ\u0003\u0007\u0004\u0012ĈĈ̓ĄψĄ牑ƧĀĀ㓀ˀṀ\u0002\u0005\u0004\u0010ĈĄňĄǈƢĀ£Āǀᑀ\u0001\u0001\u0001\u0010АԐА\u0002\u0010ȀĀԀЀ\u0002\u000fЀрՀԀ\u0002\u0010рЀЀԀ\u0002<Ĝ\u0002<Ĝƀ\u0002<Ĝƀ\u0002<Ĝ̓τƀ\u0002<ČǄǀƀ\u0001\u0001\u00064ǈĈڇ膠ĈʆȆˇݻʆ녀ݻݻݻĈچ膀ʆȇʆꅀݛچ놀ȆʇȆꅀۆꆀˆʇʆ؅؇膀ȆȆȇ膀؅؇膀ȆȆȇ\u0006\u0004ݻ̙ժժ̙\u0006\u0004ݻ̙ժժ̙\u0006\u0004ݻݻժժݻ\u0003>ĀĈĈĈĈĈĈĈňЈĀĈĈĈĈĈ\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0006\u0007𙘀\n\u0011ԪժժժժԪժժժժ\u000e\u001bԪժժժժժժƼ憀憀澀憀憀ǧ́ၳ͍͍́Ԫժժժժժժ\u0010\u0011Ԫժժժժժժժ烿ᶶƱƱッƱᶶƱ烃Ԫժժժժժժժ\u000e\u000fժժժժժժժ猼栁漆̍憞澶栁짌猼ժժժժժժժ\b\u0007ヰ𰰰ヰダժժժժժժժ栁짌猼ժժժժժժժ"
  },
  {
    "path": "04 Support/DRAZ/I/IMG.BGTAB2.PAL",
    "content": "2g`iaabcccccccc\u0004d\u0007ddeefg\u001bhihhhhhhiiiijjjkk5ll1m\u0003n}nnoYpkppoqqqqqq\u0004@쀀ȍفϑ󙲃̷؞계̪۪Ϫ֪͇݅Ӫ̪تȪɪ̪۪Ϫ֪͇݅Ӫ̪تȪɪ̪۪Ϫ֪͇݅Ӫ̪تȪɪ̪۪Ϫ֪͇݅Ӫ̪تȪɪ̪۪Ϊ݅Ӫ͇̪ȩϑ\u0004\rϑ΅⁀즄𳄀턀؅\u0004<ݻݻݻݻݻݻݻ݆ݻĈрݺݺݺݺݺݺݺݺݸĀݻǻݻݻݻݻݻݻݻݻݻԀ\u0004>ĀĈĈĈĈĈĈĈňЈȈĀĈĈĈĈĈ\u0003\tĈňЈ\u0004\u0003ݻݻ\u0002\u000b\u0001\u0004\u0002\u0004\u0003\u0004ԀԀ\u0004\u0004ԨԨ\u0001\u0004\u0001\u0001\u0004<ĈĈψ꿬꿴֢آܹ޵\u0004\"ĈĈψ꿌꿄꿄꿀꿀¢¢\u0004\u0019ĈĈψČ꓌τ꿄꿀꿀¢¢\u0004<ĈĢĈĢĈĢĈĢĈĢĈޞڞڌڌތ܌ތ݌݌݌ތ܌ތڞڌڌތܿ݀݀ހ܀ހڀڀڀހ܀ހ݀݀݀ހ܀ހڀڀڀސ܀ހ݀\u0004<ĈĢĈĢĈĢĈĢĈĢĈĢڰڰڰްܰްݰݰݰްܰڰڰڰ݀݀݀ހ܀ހڀڀڀހ܀ހ݀݀݀ހ܀ހڀڀڀހ܀ހ\u0004\u0013݀݀ހ܀ހڀڀځށ܁ރ݃݇ݏ޿ժ\u0004\u0013݀݀ހ܀ހڀڀڀހ܀ހ݀݀݀ހժ\u0002\u000fԊ\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0004@쁀ȝ󀀎ك瑻℘ϣ󹄎턛ۅ℘ϣ󹄎턛ۅ℘ϣ󹄎ۅ℘ϣ󹄎턛ۅ℘ϣ󹄎턛ۅ윲ͣ󦄎ٹ瑛\u0004\f瑛𜲇℀Σไ\u0001\u0001\u0001\u0001\u0004=󀀀ك恠✠ϣ̣ħǆͦ󆜲ۧ⼆ϣ̇ćǦ͆✠ǜسׯϟʗޜ񀀀\u0001\u0001\u0001\u0001\u0004:ꀀꀀꀀժꑢĈꑢĈꑢĈꑢĈꑢĈꐢĈꐢꐢꁢꇈ꜠ٳׯϟ˗Ꝼꀀꀀꀀꀀꀀ\u0004\fĀĈ\u0004\u0013ժժȡժժ\u0004)ĀĈՊЪȡՊЪ\u0004\u0015ՊЪȡՊЪ\u00044ĄĄĄĄĄĄĄĄĄĄÂĀāǂ܀\u0004\u001eĈĠĿѿĀĀĀĀĀ\u0002;\u0004:ۀπۀπ۠π۠ρۡߛߛۂφۄۙ۳ۿޝޛ\u0004\u001eժժĈĈĈĈĈĈĈĈĈĈĈĈĈĈĈ✠Ĝٳׯϟ˗ޝ\u0004\u0004ψۀ\u0004 ժժĈĈĈĈĈĈĈĈĈĈĈĈĈĈĈĈĈ‑ĈǇ˗\u0004 ժժĈĈĈĈĈĈĈĈĈĈĈĈĈĈĈĈĈ③ĸĈڑĈĈΑ߄ޏ񀀀\u0004\u0016\u0001\b\u0001\b\u0001\b\u0001\b"
  },
  {
    "path": "04 Support/DRAZ/I/IMG.BGTAB2.PALB",
    "content": "2g`iaabcccccccc\u0004d\u0007ddeefg\u001bhihhhhhhiiiijjjkk5ll-mmynnoUpgppkqqqqqq\u0004@쀀ȍفϑ󙲃̷؞계̪۪Ϫ֪͇݅Ӫ̪تȪɪ̪۪Ϫ֪͇݅Ӫ̪تȪɪ̪۪Ϫ֪͇݅Ӫ̪تȪɪ̪۪Ϫ֪͇݅Ӫ̪تȪɪ̪۪Ϊ݅Ӫ͇̪ȩϑ\u0004\rϑ΅⁀즄𳄀턀؅\u0004<ݻݻݻݻݻݻݻ݆ݻĈрݺݺݺݺݺݺݺݺݸĀݻǻݻݻݻݻݻݻݻݻݻԀ\u0004>ĀĈĈĈĈĈĈĈňЈǈĀĈĈĈĈĈ\u0003\tĈňЈ\u0004\u0003ݻݻ\u0002\u000b\u0001\u0004\u0002\u0004\u0003\u0004ԀԀ\u0004\u0004ԨԨ\u0001\u0004\u0001\u0001\u0004<ĈĈψ꿬꿴֢آܹ޵\u0004\"ĈĈψ꿌꿄꿄꿀꿀¢¢\u0004\u0019ĈĈψČ꓌τ꿄꿀꿀¢¢\u0004<ĈĢĈĢĈĢĈĢĈĢĈޞڞڌڌތ܌ތ݌݌݌ތ܌ތڞڌڌތܿ݀݀ހ܀ހڀڀڀހ܀ހ݀݀݀ހ܀ހڀڀڀސ܀ހ݀\u0004<ĈĢĈĢĈĢĈĢĈĢĈĢڰڰڰްܰްݰݰݰްܰڰڰڰ݀݀݀ހ܀ހڀڀڀހ܀ހ݀݀݀ހ܀ހڀڀڀހ܀ހ\u0004\u0013݀݀ހ܀ހڀڀځށ܁ރ݃݇ݏ޿ժ\u0004\u0013݀݀ހ܀ހڀڀڀހ܀ހ݀݀݀ހժ\u0002\u000fԊ\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0004@쁀ȝ󀀎ك瑻℘ϣ󹄎턛ۅ℘ϣ󹄎턛ۅ℘ϣ󹄎ۅ℘ϣ󹄎턛ۅ℘ϣ󹄎턛ۅ윲ͣ󦄎ٹ瑛\u0004\f瑛𜲇℀Σไ\u0001\u0001\u0001\u0001\u0004=󀀀ك恠✠ϣ̣ħǆͦ󆜲ۧ⼆ϣ̇ćǦ͆✠ǜسׯϟʗޜ񀀀\u0001\u0001\u0001\u0001\u0004:ꀀꀀꀀժꑢĈꑢĈꑢĈꑢĈꑢĈꐢĈꐢꐢꁢꇈ꜠ٳׯϟ˗Ꝼꀀꀀꀀꀀꀀ\u0004\fĀĈ\u0004\u0013ժԪ㑈ժԪ\u0004)ĀĈՊЪ㑉ՊЪ\u0004\u0014ՊЪ㑉ՊЪ\u00044ĄĄĄĄĄĄĄĄĄĄÂĀāǂ܀\u0004\u001eĈĠĿѿĀĀĀĀĀ\u0002;\u0004:ۀπۀπ۠π۠ρۡߛߛۂφۄۙ۳ۿޝޛ\u0004\u001eժժĈĈĈĈĈĈĈĈĈĈĈĈĈĈĈ✠Ĝٳׯϟ˗ޝ\u0004\u0004ψۀ\u0004 ժժĈĈĈĈĈĈĈĈĈĈĈĈĈĈĈĈĈ‑ĈǇ˗\u0004 ժժĈĈĈĈĈĈĈĈĈĈĈĈĈĈĈĈĈ③ĸĈڑĈĈΑ߄ޏ񀀀\u0004\u0016\u0001\b\u0001\b\u0001\b\u0001\b"
  },
  {
    "path": "04 Support/DRAZ/I/IMG.BGTAB2.PALN",
    "content": "2g`iaabccccccc\nd\rd\u0010d\u0002eeefg$hrhhhhhhiiiijjjkk>ll:m\fnnnobptppxqqqqqq\u0004@쀀ȍفϑ󙲃̷؞계̪۪Ϫ֪͇݅Ӫ̪تȪɪ̪۪Ϫ֪͇݅Ӫ̪تȪɪ̪۪Ϫ֪͇݅Ӫ̪تȪɪ̪۪Ϫ֪͇݅Ӫ̪تȪɪ̪۪Ϊ݅Ӫ͇̪ȩϑ\u0004\rϑ΅⁀즄𳄀턀؅\u0004<ݻݻݻݻݻݻݻ݆ݻĈрݺݺݺݺݺݺݺݺݸĀݻǻݻݻݻݻݻݻݻݻݻԀ\u0004>ĀĈĈĈĈĈĈĈňЈȈĀĈĈĈĈĈ\u0003\tĈňЈ\u0004\u0003ݻݻ\u0002\u000b\u0001\u0004\u0003\u0004ԀԀ\u0004\u0004ԨԨ\u0005\u0004ЀԨтԨтЀ\u0001\u0001\u0001\u0001\u0004<ĈĈψ꿬꿴֢آܹ޵\u0004\"ĈĈψ꿌꿄꿄꿀꿀¢¢\u0004\u0019ĈĈψČ꓌τ꿄꿀꿀¢¢\u0004<ĈĢĈĢĈĢĈĢĈĢĈޞڞڌڌތ܌ތ݌݌݌ތ܌ތڞڌڌތܿ݀݀ހ܀ހڀڀڀހ܀ހ݀݀݀ހ܀ހڀڀڀސ܀ހ݀\u0004<ĈĢĈĢĈĢĈĢĈĢĈĢڰڰڰްܰްݰݰݰްܰڰڰڰ݀݀݀ހ܀ހڀڀڀހ܀ހ݀݀݀ހ܀ހڀڀڀހ܀ހ\u0004\u0013݀݀ހ܀ހڀڀځށ܁ރ݃݇ݏ޿ժ\u0004\u0013݀݀ހ܀ހڀڀڀހ܀ހ݀݀݀ހժ\u0002\u000fԊ\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0004@쁀ȝ󀀎ك瑻℘ϣ󹄎턛ۅ℘ϣ󹄎턛ۅ℘ϣ󹄎ۅ℘ϣ󹄎턛ۅ℘ϣ󹄎턛ۅ윲ͣ󦄎ٹ瑛\u0004\f瑛𜲇℀Σไ\u0001\u0001\u0001\u0001\u0004=󀀀ك恠✠ϣ̣ħǆͦ󆜲ۧ⼆ϣ̇ćǦ͆✠ǜسׯϟʗޜ񀀀\u0001\u0001\u0001\u0001\u0004:ꀀꀀꀀժꑢĈꑢĈꑢĈꑢĈꑢĈꐢĈꐢꐢꁢꇈ꜠ٳׯϟ˗Ꝼꀀꀀꀀꀀꀀ\u0004\fĀĈ\u0004\u0013ժժȡժժ\u0004)ĀĈՊЪȡՊЪ\u0004\u0015ՊЪȡՊЪ\u00044ĄĄĄĄĄĄĄĄĄĄÂĀāǂ܀\u0004\u001eĈĠĿѿĀĀĀĀĀ\u0002;\u0004:ۀπۀπ۠π۠ρۡߛߛۂφۄۙ۳ۿޝޛ\u0004\u001eժժĈĈĈĈĈĈĈĈĈĈĈĈĈĈĈ✠Ĝٳׯϟ˗ޝ\u0004\u0004ψۀ\u0004 ժժĈĈĈĈĈĈĈĈĈĈĈĈĈĈĈĈĈ‑ĈǇ˗\u0004 ժժĈĈĈĈĈĈĈĈĈĈĈĈĈĈĈĈĈ③ĸĈڑĈĈΑ߄ޏ񀀀\u0004\u0016\u0001\b\u0001\b\u0001\b\u0001\b"
  },
  {
    "path": "04 Support/DRAZ/I/IMG.CHTAB1",
    "content": "A``VaaGbb{c\u0019ddeKffgyhhDiiiajjekkil7mQn3oo[pp\u001eqqqkrr}s\u0013ttu<v\u0015w6x(yyzG{{{a||R}}7~~~'1\u0004o΁3q'\u0002)࿀ЏЏЏЎԎЀԀԁԃ\u0003)Ѐ࿀࿀迀聀ꀀꁀ\u0003(Џ䟀ׁׁ׀ീീ\u0003'ğϟ𝀸聀ꀀꁀ\u0004&ǿǟϟߟߟ돀돀끀뀀뀀຀ԃԁԃ\u0004&߂׀Հ\u0004'𫀀ߊ߂߀🀀🀀\u0005(࿀񏀀߁׀׀߀߀πǀ׀Հ࿀࿀\u0005(Ѐ؀ߞооؾ߂ׂ׀\u0004'🀀Ճׂ߂߀׀Հ\u0004&ρϿϟǿ￀￀Շ׃׃׃Ձീ臀\u0005(࿀՞Ԇކކދ׋ׁ׀🀀🀀\u0005(🀀ꃀꃀુ઀઀ЇԀԁԃ\u0003'〰ԇ߇߃߃߀߀׀Հ聀ꀀꁀ\u0002)\u0002)ППԀԀԃ\u0002(𕰅ꁪ\u0003'߂ՀՀꁀꀀ\u0004!ԿԮתߊ\u0004\u001fժժ\u0004\u001f🀀ꏀꁀ\u0004!Ԇԁ\u0006\"އ𿀀𿀀МІЎ\b#🀀𿀀\b\u001cƁ࿀𿀀௝ժЊ\u0006\u001b㿀󿀀􏀀􇀀􇀀􃀀􁀀Ⱥ\u0005\u001a㏜󟞀ꁀտ࿀࿀\u0003\u0019ǂÀрӀꏀ\u0004\u001d􃀀Џп\u0003\"蟀\u0003$\u0003'ꇀꇀ臀臀胀胀胀ꀀꁀ\u0002(п࿀\u0005&🀀🀀激ԿпПЎ؆ނ߀߀׀ꇀꀀꁀ\u0004%ǁÃ׊ׂꏀꀀꁀ\u0005&Ͽ࿀࿀🀀ժՊꁀ\u0006'က𿀀࿠🠀🨀ǂ׀臀ꃀ\u0003)ֿ֞ގߎ߂ׁ׀Ԁԁԃ\u0005+🀀࿀࿀а🀀\u0007)࿀Ꝁ\b\u001eꟀ֮ޮ޾\u0006\u001b࿦𿾀߂׀Հޮޮ\u0006#׊ՂՀ\u0005!🀀߂ׂՀо\u0002'܆܆܆܆܆܆܆؆\u0002'ܾоԿԟ࿀\u0003(؀׀߀߀\u0003(ÇÇÇ࿁Ŀ࿀࿀\u0003'ߊނ􀀕\u0003%ППОЃԀԁԃ\u0003&և׃׃փփցցց\u0002'꿨\u0002'\u0002'\u0003&࿀࿈Ђ\u0004%𿀀🀀🀀🀀必俁Կп\u0003#\u0003\"߂߀߀߀߀߀߀\u0003#ÏÏÏÏ߀߀߀߀\u0003\u001fπς߀׀藀߀߀܀܀\u0003!࿁\u0002\u001e\u0002\u0018\u0001\u0018\u0004\u001aЂЊԫիԫԫՋԀՊŊ\u00030"
  },
  {
    "path": "04 Support/DRAZ/I/IMG.CHTAB2",
    "content": "F`^aab[ccdfeefDggh&i|i jrjj\u001aklkk8llPmm2nn\u0011oo8pp\u0018qzqq\u001crnrqr\fssNtt2uuFvvwxPy\u001azz{'||O}}\u0016~]~~~\u001a|\\ր\\ǁ;\u0005)ßϟ𕀀𗀀𗀀׀߀߀߀߀߀߀🀀🀀\u0003'เเ࿠􀀕\u0006'࿀߂߂߀𝀀🀀🀀\u0004&🀀ԀԀ🅀𿅀𿁀𿁀ເ࿀࿀\u0004&Հ׀߀߀߀߀߀🀀🀀\u0005%ϟԂՊ𿁀𿁀𻀀࿀࿀\u0005$ՀՀ߂߇ނІЎ\u0004!ގ܂ъ\u0005!ъՃ\u0005#Ͽߟ߃߂߂\u0005$ßÿЀЯ\u0004%ǟ߿߿߂ކ܎ЎПீ\u0004%珀矀Ͽ߀߀πǀǀÀ׀תը🀀🀀\u0007\fը׀𕀎\u0006\u001b葠𗠿ЯЬЬЮ\u0005\u0010Հӂ򃊠㏀Ï\u0002)쏬\u0002)쏬\u0002(؎؎ЎЏЀЁԃԇ\u0002(\u0003(߂߀׀聀耀ꁀꃀ\u0003(߂ߨߨ׊ׂՀ샀耀ꁀꃀ\u0004'𿀀𿀀𿀀🀀܇Ǫժ耀ꁀꃀ\u0003&ժՂ耀ꁀꃀ\u0003$࿀࿀ނ߆߆߃ׁׁ耀ꁀꃀ\u0003#ԟԏԇ􀀔\u0003&샀惀⁀􀠵\u0003/࿀܇ꏀꏀꃀ\u00032࿀菀\u00028ނ؂ЎООܞܞІЀЀ\u00026\u00020އ܇܇ЃԀԁԃЃփփЀ\u0002)ЂІЎ\u0002&ꇪ\u0002(ԿпОЂІЎ\u0001\u0001\u00033࿀࿀\u00035࿀\u00035ׁׁցԀЁԃԃЃЁЀ\u00027\u00029ЎООО\u00027ގ؎؆ЀЃЇЇЇЇЃЀ\u00036Çχ臀聀耀\u00036聀聀聀샀聀耀\u00043က぀ǃ燀Ǉ𿀀𿀀聀聀聀聀耀\u00043胀臀臀胀샀\u00042矀𿀀𿀀𿀀𿀀փփԁ􀀀􁀀􁀀􁀀􁀀\u00042࿀𿀀𿀀؇؃ЃЃЁЃ􃀀􁀀􀀀\u00042࿀𿀀\u0005#㿀󟀀񏀀񇀀ЪԪ臀臀\u0004$վԺЏԁ􃀀\u0004#𿀀🀀𿀀࿀࿀Ꟁ\u0004&࿀՞Ն\u0003$пď\u0003\u001dпІЎ\u0003\u0017По\u0003\u0013Ǐ臀\u0003\u0014\u0003\u0016\u0004\u0018燀񟁀񿀀񟀀῀\u0004\u001a\u0004\u001dχ㏀㇀　蟀Կ\u0004\u001eៀ𾀀\u0004!ُ𛀀𻀀ֿן臀\u0003#܆؎܏֏ꇀ\u0003&ꀀເເԃԁ\u0002'Џ؏؏؏؎􀕀\u0003\u0004𿀰\u0003\u0004ܟ\u0002\n\u00030࿀净Շꁀꇀ\u00030࿀ꁀꇀ"
  },
  {
    "path": "04 Support/DRAZ/I/IMG.CHTAB3",
    "content": "N``Aaa\bbbbccd,eeeIff\u000fgiggh\u0016iii^jj2kk\u0006ll\u000emvmmmmmmmmm\u000bn=nunnnnnn\u0001o\u000bo\u0019o)o1oo\u001fpp\u0010qqqrrrs\u001att%uu\rv!vGvovvvvvvvv\u000ew.wEwOwaw\u0002(菨\u0002'ԏЏЏЎЂЂЇ\u0002'ԟԟЎЊЀԀ\u0003'ßρ࿁ԇЎЂЏ\u0004&灀߁臀臀\u0005&Ǐ🇀𿀀𿀀࿀࿀ЪЪ𿀀𿀀࿀\u0004&𿀀臀\u0004%ЀǏχ𿎀🀀🀀🀀\u0004&ρ𿁀ԂԂԀԁԃ\u0003'࿀ՂԂԀԁԃ\u0002(׀׀߀ހހހ\u0002)࿠\u00025耈\u0002,🨟胊\u0002,ՎԞ\u0003-聀ꀀ\u0004'ʿꟀꏀ菀ꏀ뇀냀\u0004!Ь֮֮\u0004\u001c\u0005\u0016şŏ埀ퟀנퟀר߮\u0005\u0014߁Տܺ叀ߏ\u0005\u0018󀀈ď񀀀ר蟀\u0004\u0016ſ\u0004\u0018꿀\u0004\u001c蟀\u0004\u001f\u0004\"\u00023🠟胈\u0001\t\u0002\u0002\u0003\u0003\u0003\u0004\u0003\u0007\u0001\u0007\u0003\u0005\u0002\f\u0003\n\u0003\u0010\u0003\u0012\u0003\u0006က\u0003\f\u0004\u0004\u0004\u0003\u0003\b\u0002\u000b\u0002\u0004\u0003\u0004\u0002\u0007\u0003\u0002\u0003'ߟߟ֪ՠ\u0003'ǟǟ܆ՆՂЎОО\u0003(ϟϟϏԪ\u0003'ϟϟԎՎ܊݇ІЎЎ\u0003'ЪԿվ聀ꀀꁀ\u0003'ǟϟ߃׃ׂԀԁԁ\u0003&ǿϟԇՁ\u0003&ÏррЯկ\u0004&㿈㿈ῈῊ߂׀׀Ԫܪ\u0004&ςςπ׀腀֪ꁀ\u0004&؀ǟǏ珀珀ހ݀🀀🀀\u0003%ßßЀ׿ӾО\u0003&࿐࿔ППԯЯЮЎ܆\u0003&ໄໄຄ྅опппЯЯЎ؎\u0001\u0012࠰\u0002\u0012ЀЀ\u0002\u0013\u0002\u000fՀ\u0004\bЂު\u0004\u0003\u0003\u0006Հ\u0002\u000b\u0002\u0007\u0001\u0001\u0002\u0007\u0003\n\u0003\u0007\u0002\u0004\u0002\b"
  },
  {
    "path": "04 Support/DRAZ/I/IMG.CHTAB4.GD",
    "content": " C``abc|dFeefZg\u001ahhiUj;k'llmfn\u0004ooXppqq'rrrVsss]tt\u0005$񯅀񯁀῁῀ៀ՟՟՟՟ԟП菀𿀀ꃀ\u0006%߀翀վվտԿԿ🀀🀀ПЏ叀叀\u0006$࿀𿀀􇀨ꟀꏀՀ🁀𿁀ꁀ\u0007!🀿՘࿀ԘԪԪԪЪЪ🀀О܂ӔՅ׀\u0006%߿߿߿տԾԀԂԪЪЪ뾅ꚅʄǀ\u0005(՟ԊԂՂ׀𗀀⏀ꏀꏀ폀׏\u0004(Дԧԯ\u0004'ԔДоꀀꃀ\u0006#🀀ԿԾԾԾЪЪЪʀʀπ߀߀Ѐ\u0005&􏀀􇀀Ԥжܞꁀꃀ\u0005%ꁪ\u0005%è߫߯د࿀ៀ埀埀􏀀􏀀ٿ՟՟ԏ\u0005'ꁀ\u0006&԰ԂԪԪԪت\u0006'🀀࿵ԀԀ԰ԼԼ԰ԊԪЪ럀ʀڀЇԀԁԇ\u0004*諂ЎО\u0006$🀀ԀЊЪЪꁀӞ\u0005%ЀЊª߂߀߀ԁԇ\u0004'񏴠ԔДоꀀꃀ\u0004'ԔДоꀀꃀ\u0005$߆򿀀򟀀忀🀀菀\u0004%՞ՆՀꀀ࿀꿀􏀀ԃ\u0004$聀ЪЪԪԊԂԂԊКкк؀ş\u0001\u0001\u0006\u001b𿪅ʯԪЪЪžѾѾѾѾ՞՞ޞ\b\u000eԪЊꫥꏠꏠêժǪՊՂ⪕⫅߂׃և\u0002(ккԺԞԞԞОооооԞԞԏԇ\u0003#ԊԊʀؾоОԞԝԅԅԏꀀꃀ\u0003 ЪЪЪ퇐폀ҀԀހ\u0003\u0016ԪԮЮ뀨므Ń큠ʏ\u0005\u0013ժ꿾ʇȯԀՀЅЀЀ\u0006\u000bժՔӟՔӿ׿ժԪԀՀЅЀЀ\u0006\nժǏՔӟՔӿ׿ժԪϏ􇀀က𿀀࿠🠀🨀ǂ׀臀ꃀ\u0003)ֿ֞ގߎ߂ׁ׀Ԁԁԃ\u0005+🀀࿀࿀а🀀\u0007)࿀Ꝁ\b\u001eꟀ֮ޮ޾\u0006\u001b࿦𿾀߂׀Հޮޮ\u0006#׊ՂՀ\u0005!🀀߂ׂՀо\u0002'܆܆܆܆܆܆܆؆\u0002'ܾоԿԟ࿀\u0003(؀׀߀߀\u0003(ÇÇÇ࿁Ŀ࿀࿀\u0003'ߊނ􀀕\u0003%ППОЃԀԁԃ\u0003&և׃׃փփցցց\u0002'꿨\u0002'\u0002'\u0003&࿀࿈Ђ\u0004%𿀀🀀🀀🀀必俁Կп\u0003#\u0003\"߂߀߀߀߀߀߀\u0003#ÏÏÏÏ߀߀߀߀\u0003\u001fπς߀׀藀߀߀܀܀\u0003!࿁\u0002\u001e\u0002\u0018\u0001\u0018\u0004\u001aЂЊԫիԫԫՋԀՊŊ"
  },
  {
    "path": "04 Support/DRAZ/I/IMG.CHTAB4.SKEL",
    "content": " C``abYc'ddxe\nff}g)hhidj>kkl@mmdn\u0015oo9p<pp@qCqFqIqLqOqq\u0005\"ǘ뇀\u0006\"𿂀࿀࿀臀\u0006!΁Ã߀퀀瀀\u0007\u001eǀ࿀ 󂟀\u0006\"㠀Àρ݁ɀฎ⁀رÁ􃀀\u0005%　섀΃끀܀ЁρЏ🀀\u0004%̇぀΃܁̀࿀\u0004$ೀ࿀솀\u0006 🀀ව󀀀โ󀀀\u0005#ࠀ老ކ܇㇀􁀀\u0005\"܇؋߁\u0005#ޙ🀀×𸇀ೆ샀\u0005$΃ȁ\u0006#🃀ǁ܀􀀀࿀\u0006$灀඀΁\u0004#ȃ􃀀\u0006!🀀șƍ臀\u0005\"ЃÀÁÁೀࣞߙ\u0004$ೀ࿀솀\u0004$ೀ࿀솀\u0005#臀\u0004$Áダダ쀀Ì𾀀Џ🀀\u0004$𹀀぀Ã𸀀Ƒρ񀀐ㅛ􃀀\u0001\u0001\u0005\u0018ǁ񀀇Λ䁀\u0004\"うÁ獃ী怀胀\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0006\nժǏՔӟՔӿ׿ժԪϏ􇀘ী怀胀\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0006\nժǏՔӟՔӿ׿ժԪϏ􇀪ЊꫥꏠꏠêժǪՊՂ⪕⫅߂׃և"
  },
  {
    "path": "04 Support/DRAZ/I/IMG.CHTAB4.VIZ",
    "content": " C``abcvd;eesfAg\u0001hhri2j\u0012kkl^m\u0019nnMoop!q$qq:rrrnss\u0013tbt\u0005$񯅀񯁀េៀៀ՟՟՟՟ԟПППпп俀🀀\u0006%Ç柀翀վԿԿԟ֟֟ППՏ叀叀샀蟀\u0006$࿀𿀀􇀨Ꟁꏀ࿁𿀀\u0007!🀿՘࿀ԘԪԪԪЪЪ🀀ח쇀蟀\u0006$ϟ߿߿߿տԾԀԂԪЪЪￅ瀀샀蟀࿀\u0005'՟ԊԂՂ׀𗀀⏀ꏀꏀ鏀ޏꃀ𿀀\u0004'ԟ՟ןԿտտտՏ\u0004&񃼠ԾԾԟԏ󃀀\u0006\"🀀ԿԾԾԾЪЪЪЪߪϪЀ뿀􏀀\u0005&ԟԟПߞמվԾԾԞԞԏև󃀀\u0005$ꃨ꿪ԟԟԟԟԿԿԿԟ՟՟蟀\u0005%ϧϿ࿀῀埀埀՟՟՟՟՟ԟԟԟԾԾ־ӾӾѾўЎЎՎ՞՞՟ԏ\u0005&􏀀叀寀寀忀埀􏀀\u0006%԰ԂԪԪԪت􇀀\u0006&🀀԰ԾԾԾԾ԰ԊԪЪ諽燀􏀀\u0003.꿀꿀꿀꿀꿀꿀忀忀꿀꿀꿀꿀꿀迀迀⏀ԃԏ\u0006$🀀ЊЪЪ꿀؇п\u0005%Њ􏀀\u0004&߰ﯠԾԿԟ\u0004&ԾԿԟ󃀀\u0005\"ώ򿀀򟀀忀샀菀\u0004$՞ՆՀ􏀀\u0004%תߪЪԊԂԊԚкк\u0001\u0001\u0006\u001b𿪅ʯԪЪЪžѾѾѾѾ՞՞ޞ\b\u000eԪЊꫥꏠꏠêժǪՊՂ⪕⫅߂׃և\u0002&ккԺԞԞԞОооооԞԞԟԏ\u0003\"ԊԊʀоԾԟԟԟԏ쁀菀\u0004\u001fꀀЪЪЪ퇀폀🀀샀蟀\u0003\u0016ԪԮЮ뿀ʟ\u0005\u0013ժժժ򁀀ԂԀ\u0007\u000bԪՊտտʟ\u0005\u0013ժ꿾ʇȯԀՀЅЀЀ\u0006\u000bϏߟӿ׿ԯχӿ׿ժԪϏ"
  },
  {
    "path": "04 Support/DRAZ/I/IMG.CHTAB5",
    "content": "-]``a{bVc$ddue\u0007ffng\bhh\\i6j\u0010k\u0013kkol\u0005mWmm+nn\u001boo\u0012plppOqqUrrUsssOtt]u\u000bvYvvv=www\u0004\"ß🀀🀀𕀀׀׀ꕀꅀꁀ\u0005&ÿծծՀ׀ꃀ\u0006#㟀ժݟ׏ՏՂՂ\u0007\u001f🀀뀀🀀պЪ݂ݪݪ\u0006\"뀾🀀׊ׂ׀\u0005%ៀ󏀀߆݆߂߂߀߀🀀🀀\u0004%ǟ⁀࿀࿀\u0004$ׁׁ׀߀߀߂߂׀Հ땀ꅀʇ࿀࿀\u0005\"࿀ի\u0005%߿߿࿀ീ򵀀׀׀蕀ꇀꀀ\u0004&Ճׂׂ߂굀ЂԀ\u0004'𿀀𿀀𿀀Ձ׀׀߀Հ\u0005$຅຅к򁀀Ў\u0006$࿀Ъી寀𫀀Ћԏԁԃ\u0006$܇𿀀ீீ𯁀߿߯֫֫Ջ\u0001\u0001\u0006\"ǟժݿןՏՂՂ\u0004#߆߂݂݂݊\u0004%ՁՁպ׀պ׀׀߀\u0004\u0014ǁիկ\u0004\u0018ダ뿀ի돾Ͽ\u0004\u001c࿀࿀🀀ԏ׏ׇ\u0004 𿀀🀀𿀀냸냰끠\u0003$Ппؚݎ݆݂\u0003(຀ເીீீીીՊՏՁ\u0003)؎؞ЏԆՆՎ׏ׇ\u0002,࿀ߟ\u0002,Пк\u0003-ӀÀÀ׀׀׀🀠􁠰\u0003-࿀׀ǀÀǂǂ߂׀׀׀ՇՃу\u0003)࿀ӀÀÀÀǂςς߀׀׀ՇՇԁ\u0003+࿀Àǀǀǂ߂߂߂݀ԏԞԞԞԚЀ\u0003)ррÂÂǂς߂׀׀׀ׁՏՏԎԆЀ\u0003*ς߂߀׀׀ׇߟ֞ԞԚԂЀ\u0001\u0001\u0003'߀߂\u0003&࿀࿀࿀ુઁоվ຀ЂІЎ\u0004&ǟǏ珀㇀пտŋЀޚ࿀࿀\u0004+࿀࿀࿀࿀𿀀𿀠𺕊кІЎ㇀\u0002&\u0002!\u0003\u001e菀\u0003\u0016՟׾׾ԿԿ臀\u0005\u0011ગ׀׀πÂ\u0006\u0010ՀՂ͊ʏꏠꏠ"
  },
  {
    "path": "04 Support/DRAZ/I/IMG.CHTAB6.A",
    "content": "g````\ra\u001ca+a:aIaXaa[bb:ccc!dndd\beUeeeeeFffLggLhhi'jjj2kk8llm\u0017n\u001an\u001dn n#n&n)n,n/n2n5n8n;n>nAnDnGnJnMnPnSnVnYn\\n_nbnenhnknnnqntnwnzn\toopq_r\u001dssAtteuuvKw\txxyz{|P}\u0012~~6)ӂ\u0001\r\u0001\rЀ\u0001\rԔ\u0001\rԔ\u0001\r\u0001\rДЀ\u0001\r\u0001\r\u0001\rДĀ\u0003+ԪԪԪЪЪЪʏꏀևևԃЃЃЁЁЁЁЁЁЃ҇чус\u0003*ԪԪԪЪЪЪʏꏀԇևևԃЃЃЁЁЁЁЁЃЇ҇уср\u00030\u0003\u0019߇̆Ύ͖Ơ̆̏ƵՌՍՎՎՎՎ\u0003\u0019߇̆Ύ͖Ơ̆̏ƵՌՍՎՎՎՎ\u0003\u0019ߧ՜̆Ύ͖Ơ̆̏ƵՌՍՎՎՎ\u0003\u0019߯՜̆Ύ͖Ơ̆̏ƵՌՍՎՎ\u0003\u0019ߧ՜̦ՌΎ͖Ơ̆̏ƵՌՍՎ\u0003\u0019ߧ՜̦ՌΎ͖Ơ̆̏ƵՌ\u0003\u0019ߧ՜̦ՌΎ͖Ơ̆̏ƵՌ\u0003\u0019߯՞ήՎήՎ͖Ơ̆̏Ơ\u0003\u0019߇̆Ύ͖Ơ̆̏ƵՌՍՎՎՎՎ\u0001\tĤ\u0001\tĠ\u0001\t\u0003+ՊՊՂՂՂՂՀՀ׀׀Ԃ䒀ࢀАА\u0003+ժժՊՊՊՊՂׂτ࿃ԎծЮ΀\u0003+ժժժՊՊՊՊׂ߂࿀࿀Ԃ\u0003*࿀฀ఀՀժժժժժՊՊ׌׆׃ժՠ\u0003*ՊժԪԪԪЪЪЪЪ\u0004*ԊժժԪԪՀԪԪԪԪժӊךΌՀĀ\u0004+ՀՊՊՂՂՂՀՀՁΟǎφ\u0003+ժՊՊՊՂՂՀՂ僫瀀\u0003+ժժՊ՚՚ՌՆŇ脀聀胀胀聀耀\u0003\u0001\u0003+ՊՊՊՊՂՂՂՀՎՇ\u0003+ժԪԪԪЪЪЪԃЃЃЇ֏ҏ҇փ\u0003+ՊՊՂՂՂՀՀՁԿԿппо耠\u0004+ժժժժժժժʃտ𿀀胀胀胀胀胀臀\u0004+ՊժժժժժժժՒ՟񏀀ꀀ耀耀聀胀郀遀退\u0003+ԪԪԪЪЪЪʏꏀևևԃЃЃЁЁЁЁЁЁЃ҇чусƂ\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003/՟՟Տ࿀࿀࿀؏Ўо\u0004/տտտ՟՟؏Ўо\u0005/׏ЪЪ꿀꿀꿀\u0005/ߏྀ࿀\u0004/ЂЂЊЪ꿀꿀꿀꿀꿀\u0004/տտྀ࿀\u00030؏Ўо\u00030珀忀؏Ўо\u00030؏Ўо\u00030؏Ўо\u00030؏Ўо\u00030ྀ࿀\u00040\u0004/\u00050̟\u0005/Ꟁ🀀\u00050𡕨ժժժժժתת׊ߊ𿊀𿀀𿀀𿀀߁߀߀𿀀\u00050оЂЂЂԂԂԀԀԀՀՀՀՀՀ𿕀࿕׀׀߀߀߀߀߀߀࿀\u00050🀀ըԪԪԪЪЪê𿪅𿁀࿁࿁𛀀🀀\u00030蟀蟀蟀蟀蟀蟈菨\u00040蟀蟀蟀ꟀꟀ\u00030\u00030菀菀菀菀菈菊菨臸Ŀ쟀࿀\u00030кккккккоԾԾԾԞԟԟԟԏԏҏҏ׏ՏՇ؏Ўо\u00041𝀀ЎԎԇԇՇՇՇ؏Ўо\u00051ЂЂ ⁀򁀀վ՟՟՟ՏՏՏՇЂЀ؀ꁀڀꃀ\u00036տ\u00038ԀԂԂՏ՟տԀЀД\u0003:\u00026ꃨ"
  },
  {
    "path": "04 Support/DRAZ/I/IMG.CHTAB6.A.BK",
    "content": "g````\ra\u001ca+a:aIaXaa[bb7ccc\u001edkdd\u0005eReeeeeCffIggIhhi$jjj-kk3llm\u0012n\u0015n\u0018n\u001bn\u001en!n$n'n*n-n0n3n6n9n<n?nBnEnHnKnNnQnTnWnZn]n`ncnfninlnonrnun\u0004oopqZr\u0018ss<tt`uuvFw\u0004xxyz{|K}\r~~1$΂~\u0001\r\u0001\rЀ\u0001\rԔ\u0001\rԔ\u0001\r\u0001\rДЀ\u0001\r\u0001\r\u0001\rДĀ\u0003+ԪԪԪЪЪЪʏꏀևևԃЃЃЁЁЁЁЁЁЃ҇чус\u0003*ԪԪԪЪЪЪʏꏀԇևևԃЃЃЁЁЁЁЁЃЇ҇уср\u0003/\u0003\u0019߇̆Ύ͖Ơ̆̏ƵՌՍՎՎՎՎ\u0003\u0019߇̆Ύ͖Ơ̆̏ƵՌՍՎՎՎՎ\u0003\u0019ߧ՜̆Ύ͖Ơ̆̏ƵՌՍՎՎՎ\u0003\u0019߯՜̆Ύ͖Ơ̆̏ƵՌՍՎՎ\u0003\u0019ߧ՜̦ՌΎ͖Ơ̆̏ƵՌՍՎ\u0003\u0019ߧ՜̦ՌΎ͖Ơ̆̏ƵՌ\u0003\u0019ߧ՜̦ՌΎ͖Ơ̆̏ƵՌ\u0003\u0019߯՞ήՎήՎ͖Ơ̆̏Ơ\u0003\u0019߇̆Ύ͖Ơ̆̏ƵՌՍՎՎՎՎ\u0001\tĤ\u0001\tĠ\u0001\t\u0003+ՊՊՂՂՂՂՀՀ׀׀Ԃ䒀ࢀАА\u0003+ժժՊՊՊՊՂׂτ࿃ԎծЮ΀\u0003+ժժժՊՊՊՊׂ߂࿀࿀Ԃ\u0003*࿀฀ఀՀժժժժժՊՊ׌׆׃ժՠ\u0003*ՊժԪԪԪЪЪЪЪ\u0004*ԊժժԪԪՀԪԪԪԪժӊךΌՀĀ\u0004+ՀՊՊՂՂՂՀՀՁΟǎφ\u0003+ժՊՊՊՂՂՀՂ僫瀀\u0003+ժժՊ՚՚ՌՆŇ脀聀胀胀聀耀\u0001\u0001\u0003+ՊՊՊՊՂՂՂՀՎՇ\u0003+ժԪԪԪЪЪЪԃЃЃЇ֏ҏ҇փ\u0003+ՊՊՂՂՂՀՀՁԿԿппо耠\u0004+ժժժժժժժʃտ𿀀胀胀胀胀胀臀\u0004+ՊժժժժժժժՒ՟񏀀ꀀ耀耀聀胀郀遀退\u0003+ԪԪԪЪЪЪʏꏀևևԃЃЃЁЁЁЁЁЁЃ҇чусƂ\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003/՟՟Տ࿀࿀࿀؏Ўо\u0004/տտտ՟՟؏Ўо\u0005/׏ЪЪ꿀꿀꿀\u0005/ߏྀ࿀\u0004/ЂЂЊЪ꿀꿀꿀꿀꿀\u0004/տտྀ࿀\u00030؏Ўо\u00030珀忀؏Ўо\u00030؏Ўо\u00030؏Ўо\u00030؏Ўо\u00030ྀ࿀\u00040\u0004/\u00050̟\u0005/Ꟁ🀀\u00050𡕨ժժժժժתת׊ߊ𿊀𿀀𿀀𿀀߁߀߀𿀀\u00050оЂЂЂԂԂԀԀԀՀՀՀՀՀ𿕀࿕׀׀߀߀߀߀߀߀࿀\u00050🀀ըԪԪԪЪЪê𿪅𿁀࿁࿁𛀀🀀\u00030蟀蟀蟀蟀蟀蟈菨\u00040蟀蟀蟀ꟀꟀ\u00030\u00030菀菀菀菀菈菊菨臸Ŀ쟀࿀\u00030кккккккоԾԾԾԞԟԟԟԏԏҏҏ׏ՏՇ؏Ўо\u00041𝀀ЎԎԇԇՇՇՇ؏Ўо\u00051ЂЂ ⁀򁀀վ՟՟՟ՏՏՏՇЂЀ؀ꁀڀꃀ\u00036տ\u00038ԀԂԂՏ՟տԀЀД\u0003:\u00026ꃨ"
  },
  {
    "path": "04 Support/DRAZ/I/IMG.CHTAB6.B",
    "content": "I````````\ra\u001caajbbLccc3ddd\u001aegeeeeeXff^gg^h\bii9jj?kkEllvm$nnAoDoGogoo\tpppq rrhsttu>vvZwwIxx\u001cyzyy[zzM{{|\u0019}}M~~t\u0001\r\u0001\rЀ\u0001\rԔ\u0001\rԔ\u0001\r\u0001\rДЀ\u0001\r\u0001\r\u0001\rДĀ\u00040ԄԈԜռռռ՞՞՞՞՞՞՞ՎՎՏՏ遀ß\u0003.ԄԈԜռռռ՞՞՞՞՞՞՞ՎՎՏՏԔԏՇՇՃ\u00031\u0003\u0019߇̆Ύ͖Ơ̆̏ƵՌՍՎՎՎՎ\u0003\u0019߇̆Ύ͖Ơ̆̏ƵՌՍՎՎՎՎ\u0003\u0019ߧ՜̆Ύ͖Ơ̆̏ƵՌՍՎՎՎ\u0003\u0019߯՜̆Ύ͖Ơ̆̏ƵՌՍՎՎ\u0003\u0019ߧ՜̦ՌΎ͖Ơ̆̏ƵՌՍՎ\u0003\u0019ߧ՜̦ՌΎ͖Ơ̆̏ƵՌ\u0003\u0019ߧ՜̦ՌΎ͖Ơ̆̏ƵՌ\u0003\u0019߯՞ήՎήՎ͖Ơ̆̏Ơ\u0003\u0019߇̆Ύ͖Ơ̆̏ƵՌՍՎՎՎՎ\u0001\tĤ\u0001\tĠ\u0001\t\u0003+ՊՊՂՂՂՂՀՀ׀׀Ԃ䒀ࢀАА\u0003+ժժՊՊՊՊՂׂτ࿃ԎծЮ΀\u0003+ժժժՊՊՊՊׂ߂࿀࿀Ԃ\u0003*࿀฀ఀՀժժժժժՊՊ׌׆׃ժՠ\u0003*ՊժԪԪԪЪЪЪЪ\u0004*ԊժժԪԪՀԪԪԪԪժӊךΌՀĀ\u0004+ՀՊՊՂՂՂՀՀՁΟǎφ\u0003+ժՊՊՊՂՂՀՂ僫瀀\u0003+ժժՊ՚՚ՌՆŇ脀聀胀胀聀耀\u0003+ЪժՊՊՊՊՂՌՏ\u0003+ՊՊՊՊՂՂՂՀՎՇ\u0003+ժԪԪԪЪЪЪԃЃЃЇ֏ҏ҇փ\u0003+ՊՊՂՂՂՀՀՁԿԿппо耠\u0004+ժժժժժժժʃտ𿀀胀胀胀胀胀臀\u0004+ՊժժժժժժժՒ՟񏀀ꀀ耀耀聀胀郀遀退\u0003+ԪԪԪЪЪЪʏꏀևևԃЃЃЁЁЁЁЁЁЃ҇чусƂ\b\u0013ՊՂՂՀՀ\u0001\u0001\u0001\u0001\u0002\u000f\u0002'ԈԨԪԪԪԪ̪̊܊򀪀\u0002(ŉժժԪܪ臨ؗ\u0003'𜀰ՀՀՂՂՂ߂߀࿀࿀࿀ЊпплЪ਀਀\u0003&ЪЪԪЪЪЪ؀ԀՂԂЀ\u0004%၀၀Ԫժժժժժի胀菀菀\u0004%ՠբժժժժ߃߀߀׀ր􀀀􀀀􁀀􁀀􃀀􃀀ЁЀ\u0004$ЊԪԂԪժժժժԪժЪժՊ\u0005$ЪЪժԪժԪЪǀπ׀\u0007(؀ЀԪԪԪЪՀՀՂՂ࿀࿀𿀀𿀀Ђ𿀀𿀀🀀ԪԪ՟Տԏԁԁ\u0006(ԎԪԪժԪժЪ꿀ЪꟀꏀꇀ࿀࿀\u0005(珀ÃÃЪşԪşԪşԪЪЪЪ￀ՃރЪЂ񟀀\u0004(揀އ܇쏀쏀ꏀꏀꟀꟀꟀꟀꟀꟀоо࿿ꇀܯտƾܾ迀࿀\u0003(΃߿߿߿ҺҺҟ⏀\u0003(惌܃܏̟ʟߟ߿߿߿߿Һҿ⇀\u0005\u0017ԪԪՀՊժժՊ׊ׂ߂ך֪ԯЀدЦ\u0005\u0017ԪԪՀՊժժՊ׊ׂ߂ךЂ֪ԯدЦ\u0004\u0017ԪԪՀՊժժՊ׊ׂ߂ڐ֪ԯدЦ\u0004\u0017ԪԪՀՊժժՊ׊ׂ߂ڄ֪ԏ؏І\u0005\u0019ովժժժՀՂՂՂՂ\u0004\u0018ՂժԪުՀ߀Հр΁\u0005\u001aЪԪՀЪՊժժժת𿥀કꁀ냀뇀ࠀ\u0004\u001bꇀꁀԪՊԪՊЪՊЪժժժ׈ܪ؎Ў𞀀\u0005\u001eЪժժժժժת߂ЀЀ\u0005 ՇժժՀժՂժՂժՂժՀժՀԪ🊀Ђ҂Ă𐀀\u0004$ՃՁՊժժժժժժժ埁ǂÀӀЀЀȁ\u0004%ժժժժժժժժժժǂ׀ЀЀÁ\u0004'ժժժժժժժժժժ􀀠ЀрÁ\u0004*ЪՀԪՂԪՂԪՂԪՀЪՀЪЪЪꟀࠀÀ\u0003)ժժԪԪԪԪԪЪУЧчуср"
  },
  {
    "path": "04 Support/DRAZ/I/IMG.CHTAB7",
    "content": "\b\u0013`y`\u000baa/bbAccd\u00022ккккккккккоооооОППԏԇԿԿԿԟ䀊\u00030ꏀꏀꏀꏀꏀꏀꇀꇀ\u00030迀迀迀迀⏀ԃԏ\u00030迀迀迀迀迀迀迂迚꿀꿀蟀⏀ԃԏ\u00020ԃԏ\u0003:Ԁԃԇ՟՟ՏՏ\u0003:ԀԃԇՇ\u00030臀臀臀臀ꇀ"
  },
  {
    "path": "04 Support/DRAZ/I/IMG.EDTABLE",
    "content": "-]`b\u0001eSgVg_ghgqgzggggggggggg(hZhlh~hhhhhhhh\u000ei i2iDiVihi|iiiiiiiiij\bJÁఀကρ怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀瀀́ρ\bJ怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀Á\bJ瀀က󁀀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀Á\u0001\u0001\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0002)\u0004\f\u0002\b\u0002\b\u0002\bÁ怼Á\u0002\bǃǃ\u0002\bǃǃ\u0002\bǃ\u0002\bǃǃ\u0002\b\u0002\b\u0002\b쀘\u0002\b΀π\u0002\bՂǃ׃\u0002\b\u0002\b\u0002\bǃǃǃ\u0002\tƁƁ\u0002\b\u0001\b\u0001\b༘\u0002\b\u0001\b࿃\u0001\b㿃\u0002\b\u0003\u0003\u0006%꿀ꟀꟀꟀꟀꟀ韀񿀀տԾ"
  },
  {
    "path": "04 Support/DRAZ/I/PAC.C1.A",
    "content": " 1\u0004\n\u0004\u00161)1տ\u0001\u0004\u0001\u0006\u0003\u0001\u00131)\u0001+\u0016\u00101)\u0004(\u001a\u0010Հ')\u0005\u0001 1\u0007%)\b\u0007\u001aՃ\u0006\u0006\u0015Ձ\u0006\u0003\u0014)\t\u0003\u0017\u0001\u0004\u0003\u0006\u0001՝\u000bؼ\u0001\u0001ח\u0004\t)Հ\u0001\b\u0015\u001b\n\b\u0004\u000b\u0004ࠠ\t)\u0001\u0011\u00151()\u0019\u00161\u0006\u0001\u001d)+\u0005\nՕ\u0011)\u0005&\u0006\u0006\u0004\tՀ\u0001\u0002\u0002\u0003\u0001\t)\u0007\u001e1\u0019Ԕ\u0005\n)\u000b\u0006\u0017՟\u0004\u0005\u0004\b1)\t\u0004\u0003\u0010\u0004\u0005\u0004\u0005\u0002\b))Հ\u0001\t\u00101Հ󽞞\u0014)\u001cД\u000f\u0004\u0005\t\u0004\b\u0007\u0001\u0002\u0001\n) \u000f\u0007𰰰\u0004\u0004\u0004ࠨ\b\n\n\u0006\n)*1))\u0004\u0007\u001dՀ\u0004\u0005\u0019Հ𠜿\u0017)\u0004\u0001\t\u0017\u0001\u0004\u0001\u0005Օ\u0004\u000b\u0007\b\u0002Օ\u0004\u000b)Հ\u0004\u000f\b\u0004𰰰\n\u0011\u0007\u0004\u000b)\t\u0006\u0007\u000f\u0004\u0005&1)\u0018\u0015\u0007&՟))1\u0007\u0004\u0007\u0004\u0015\u0001\b\u0004\u0018)Տ\u0005\u0006\u001dՀ\u0004\u0002꯯\u0004\tՀ࠾\u0001믯뺚\u0004\u000b)\u0004\u0001\r\u0018\u0005\u0004\u0005\u0002\t\u0007\u0005\u0002\u000b)\b\u0005\u0010Հ'տ\u0005\u0007\u0004\u001a)\t\u0004\b\u0002\u0010\u0007\u0001\u0004\u001e\u0006\u0004\u000b)1\t\u0001\u0006\u0013Հ\u0004\u0005ꪠ𸸸\n)\u0002\u0004\u0004\u001a\u0001׿\u0004\t1)\u0004\u0004\u0001\u0017Հ\u0006\u0006\b\b\tՏ\u0007\u0005\u0017)\u0014\u0004\u0013'\u0007\u0004\u0004\t)\u0017\u0012\u0001\u0005\u0016\bȨ\u0005\t)1\u0001\u0003\u0004\u000bа\u0003\u0004\u0005\u0005\u0004\t)Ճ\u0005\t\u0005\u0018\t\u0004\u0004\u000b\u0006\u0006訨\u0004訪\b)\u0005\u0016'1)\u0016\u0012՟\u0019տ\u0004\u0004\u0007\u0004\b)\u0018\u0002\u0012\u0002\u0004\u0005Օ\u0004\n\u0004\b\u0004\u0004\u0005\u0002\b)1\u0013\u0005\n1\t"
  },
  {
    "path": "04 Support/DRAZ/I/PAC.C1.B",
    "content": " 1*1)1Հ\u0006\"\u0005&)1\u0004\u0001\n\u0015\b\")1\n\u0001\u0004ꪮ\u0013\b\u0002\u0004\u0004\u0018)1\f\u0004\u0002\u0013\u0004ח\u0004\f)1\t!\u0004\u0004\t\u000b)1\u0007\u0001&1)1Մ*Ճ\u0004\u0004\u0005\t)1\u0004\u0001#\u0001\u0004\b\n)1\t\u0004\u0006\u00121)1\u000f\u0001\r\t\u000b\b\u0004\u0004\u000b)1\u0013\u0004\b\u0001\tՁ\u0001\u0005\n)1\n\u0001\fД\b\u0005\u001b)1\n\"Հ\u0004\u0005\u0014)1*\u0007\u0005\u0006\u0001\r)1\u0006\u0002\u0004\u0007\u0017\u0004蠠\u000f\u000e)1\u000b\u0002\t\u0004\u00061)1\n\u0004\u0006પ𠠨\u0006Հ\u0006\u0017)1\n\u0005\u0007А\f\u0007\u0004\u0001\u000f)1Հ\u0004\u0004\u0004\b\u0001訠\u0006\u0005\u000f)\u000f\u001f\u0001\u0007\u0001\u0005\u0002\b\b\u0004\u001c)\u0011\u001a\r\n\u0005\u000fո𾾞\u0001\u0003\u0019)\u0007\u0005Օ\u00141\u0004\u0004\u0001\u0014)՟\u0004\u0004\u0004\u0001\u0001\u0010\u0005\u0004&Հ\n\b\u0015)\b\n\u0002\u0010\b\u0001%1)1\t\u0004\u0016\u0004\u0005\u001d)\u0015\u0018\t᯿\u0004ח\u0004\u000bӗ\u0001\u0019)\u000b\b\u0015\u0006\u0001\u0004\u0005訨\u0001\n\u0004\u0005\u0005\u0018)\u0007\bՕ\u0012\u0001\u000b\u0015 )\u0007\u0004\u0005\u0001\u000e1\u0004\u0002\u001b)\u0004\u000b\u000e\u0014\u0012\u0005\u0001\u001b)ռ'\u0004\u0012\u0011\u0007\u0017)1\u0005\u0001\u0005\u0005Ձ\u0010\u0015\u0018)Հ\u0004\u001d\u0004\u0004\u0004\u0004\u000b\u0004()\u0001\u0004\b\u0004Օ\u0018\u0005\u0005\bԅ\f\u0005()\u0005\u0005\u0001\u00171\u0005\u0001\u0004\u001c)\b\u0004\u0006\u0002\u0016\u0005\n\u0017\b\u0005\u0019)Հ%\u0001\u0014\u0004\u0001\u0006\u0016))\u0005\u0001\u0006\u0002\u0004\u0001\u0006ח\u0004\r\u000e\u0016)1\t\u0004\u0005\f1\t\u0004\u000b\u0004()\u0001\u0004\b\u0004Օ\u0018\u0005\u0005\bԅ\f\u0005()\u0005\u0005\u0001\u00171\u0005\u0001\u0004\u001c)\b\u0004\u0006\u0002\u0016\u0005\n\u0017\b\u0005\u0019)Հ%\u0001\u0014\u0004\u0001\u0006\u0016))\u0005\u0001\u0006\u0002\u0004\u0001\u0006ח\u0004\r\u000e\u0016)1\t\u0004\u0005\f1\t "
  },
  {
    "path": "04 Support/DRAZ/I/PAC.C1.C",
    "content": " 111)1՘\u0005\u0004\b\u00191)111)1Ձ\u0015\u00191)1\u0005\u0005\u001a1)111)1\u0006\t\u000b\u00131)1ո\u0005\u0005\u00141)1\u0015\u0006\u00101)1Տ\u0007\b\u00101)1\u0005\u0007\u0006\u00161)1\u000f\r\u00121)1ח\u00121)1Մ\u0004\u00181)11\u0001\u0004\u0004\u0004\u0004\n)1\b\b\u0004\u000e\u0006\u0004\u0004ꨠ\u0007ਨ\n)1\b\u0004\u0004\u0006\u0004\u0001\u0004\u000e1)1՘\u0004\u000b\u0018Տ\u0006\u0004\u0015)11\u0001\u0007\u0003\u0005\u0001\u0001\u000b)1\u0006\u0006\u000f\u0014\r\f)1\u0007\u0007\u0005\u000f1)1\b\u0018տ\u0005\u0004\f)1\u0006\u0004\u0006\u000e\u0004\u0003\u0005\u0002\f)1Հ\t\u0004\u000f\u0014\u001b)1\u0002\r\u00191)11Շ\u0006\u0006\u0004\u0012)1\u0004\u0005\t\b\f\u0004\u000f\u0001\u0005\u0001\n)1Հ\u0005\u0004\u0004\f\b\b\u0007\n\u000b)1\u0001\u0004\u0012\t\u0007\u0011)1\u0002'\u0007\u0006\t)11\u0005\u0004\n)1Հ\u0004\u0004\b\u000b1)1\b\n\u0001\u0004\u000b\u0006\u000bߟ\u0004\t)1\u0001\u0005\u0016վ\u0004\n\u0001\u0004\t)1\u0006\n\u001a\u0005\u0012)1՟\u0004\u0002\u0007\t\u0004\u000bՇ\u0004\u0004\u0005\n)\u0004 1\u0004\u0005\u000b)Հ\u0007\u0017Հ\b\u0004\u000e\nՃ\u0004\u000b\n)\u0004\u001b\u0001\u0006\u0006\u0004\u0004\u000b\u0002\u0004\u0007ظ\u0004\n)\u0007\u0005\u001c11\t\u0005\u001c11\t"
  },
  {
    "path": "04 Support/DRAZ/I/PAC.C2.A",
    "content": " 111)Հ\u0005\u000e1Ճ\u0005\u0005\u0006\u0001\u0010)\u0002\u0002\b\u0001\f1\u0001\u0004\u0012)\u001d\u0004\u000bՀ*\b\u0004\u0002ʈ\u0015)1\u0004!\")Տ\u0004\u0004\u0010Տ\u0001Î\"\u0017\r)\u0003\u0001\u000e\u0002\u0015\f\u0004\u0004\u0005\u0004\r)\u0013\u001aՀ\u001a\u000b\u0004\u0002ࠠ\u0016)1 \u0006\u0007\u0005\u0001!)\u000f\u001bՀ\u0004\u0015\t՜*)\u0001\u0001\u000e\u0001\u0004\b\u0004\u0006\u0004ו\u0005\u0018\u0004\u0015)\u0005\u0005\r\u0005\u0005\u0004\u0005\u0006\u0006\f)1\u0005\u0004\u0004\u0003\b\t\u0005\u0005\r)\u000f\u0004\u0014Հ%\u0005\u0001 )\u0001\nՇ\f*))\u0004\u0004\u000b\u0018\f1)\u001c\u0013\t\u0001\u0004\f\u0006\u0005\u0005\u000b)\u0019\u0013\u0004ϟ\u0005\u0003\u0015\u0004\u0005\u0005\u0002\b𰠠\u000b)\u0007\u0005Օ\u000b \u0006\u0001\u001f)\u0004\u0004\u0004\u0005ܬ\n1Հ()1\u0016\r\u0016ԅ\u0013)\u0017\u0014\nﯨ\u0003\f\u000e\u0007\u000b)\n\u0004Օ\n\u0005\u0006\u0005\u0013\u0006\u0006\u0001\u0004\f)հ\b\u0007\tվ\u0004\u001d\u0004\u0003\u001b)11\u0019\u0015)\u0012\u001b\u0015\u0019\u0004\u0012\u0014)\u0004\u0005ח\n\u0017Д\r𸇁\u0006\u0004\u0005\n)\u0002\u0006\u0007\t\bﯫ\r\u0006\u0002𠠠\n)1\u0004𸘜Ç\b\u0012\u0004\u0001!)1Վ\u0006\u001a.)\u0004\u0004ח\n\u0014\u00191)\u0001\u0006\u0006\t\u0017\u000e\u0012\u0006\u0012)1\u0004\u000e\b\u0001\n)Ձ\u0005\tՀ\b\u0001\u0012\u0002\u0002\u0005\u000b)\f\b\t\u0004\u0014\u0007#)1\u0016\u0010\t#)\u0006\u0006\b\u0004\t\u0005\u0005ї\u0010\b\u0005\u0006\b)՟\u0001\u0005\u0004쬬\u0005\bՀ\u0004\u0006\u0001\u0012Հ\u0004\u0001\u0005\u0005\b)\u0005\u0005\u0005\u0004\t\u0005\u0004\u0013\u0001\u0005 )\u0003\u0004쬼\u0001\bո%1\t"
  },
  {
    "path": "04 Support/DRAZ/I/PAC.C2.B",
    "content": " 𿿟T[ՠ\u0004U\u001f\u00060\t\u0002\u0007\u0004:\u0005\u0006\u0004\u0006\u0004\t&\u0012\u0003\u0005\u0006\b1Ճ\t\u0005\u0005\u0005:c\u0017\u0007&\u0004V\u0005\u0005\b\u00027\u0004S\u0001\u0004\u0005@\b\u0002\u0005\u0007;[\u000f\u0004\u0005\u0004\u00041\u0017\u0005\t(c\u0004\b\u0006\u00027\u0004Y\u0010\u0005@ՃU[\u0005\u0005\u0004A[\f\u0004\u0001\n\u0004\u00046[\u001c\u000f\u00061[Հ\u0004X\u0006\u00063\bQ\u0005\u0006\u00073\u0004\u0001\b:[\u000f\u0004\u0005\u0004\u0004\u00050\u0006\u00045Հ[\u0001\u0005\u0003ꪸࠨ5Q[հ\u0001\b\u0004\u0007?տ\u0004\u0006\u00044\r\u0007\u0004\u0004\u00050\u0007\b\u00012c[\u0004S[Հ\u0002\n\u00049Հ\u0005\b\u0006\u0004\u00041\n\u0005\u000b\u0006.\u0005\u0005\b\u0005\u0002\u0005+\u001b\u0005C[\u0005X\u0005\r\u0006\n%՘\u0007\u0004\u0004\u0005\u00047\u000b\u0005\u0004\u0003\u00040\u0005\u0007\u0001\u0001\b\u0004\b-[\u001bCՌ\u0004\u0006\u00040\t\u0010\u0005\u00046\u0005\u0002\u0004\u0001\u0006\u0003\t%\u0004\u0001\b\t\u0006\t,\u0005R\u0004\u0007\n\u0004Ǐ6\u0004\u0001\u0004\u0005\u0005\u0004)Ռ\u0004\u0005\t\n\u0004\r+\n\u000e\u0004\u0004\u0005)\u0010\u0005\u0007\u0007\n,[Ձ\u0004\u0001\u0011\u00016ՀU\r\tJ\u0004\u0005\u0007\n\u0004,c\b\u0005\tܘ\u0004ꪨ\f\u0005\u0007\n\u0004,c\b\u0005\tܘ\u0004ꪨ\f"
  },
  {
    "path": "04 Support/DRAZ/I/PAC.C2.C",
    "content": " 111)11Հ\u0004 )11\u0004\u0005\u001e)1Ճ\u0005\u0004\u0004\u0012ը\f\u001d)1\u0001\b\u0004\b\u0001\n1)11Ձ\u0004#)1\u0012\u0019\u0004\u0004\u0004\u001e)1Տ\u0005\u0004뻻\u0004\u000bՊ\b\u001e)1\u0016\u0002\u000b\u0005 )11ո\u0007\u001a)11\u0004\u0006\u0001\u001a)1\u0004\u0001\u0004\u00181)1\u0002\u0004\u000f\n\u001d)1\u0014స\u000eՏ\u0001\u0005\u0006\u0014)1\u0004\b\u001d\u0004\u0005\u0014)1Հ\u0003\u00161)1\u0004\u0004\u0010\u0010\u0005\u0013)1\u0018\u0010Ձ\u0004\u0006\u0002\u0004\u0002뿟\r)1\u0004\u0004\u0005\u001c\u0007\u000f\r)1Հ\u0001\u0005\u00181)1\b\u0013\u0011\u0007\u0016)1\u0017\u0001\u0013Հ\u0005\u0002\u0002\u0004\r)11\u0004\u0004\n\u0002\u000b)1Հ\u0004\u001c\u001e\u0010)1Ϗ㇟\b\u00191)1\u0004\u0006\u0001\u0014Հ\u000b\u0004\u001c)1\u0015\u0001\u0014\u0005\u0001\u000f)1Հ\u0005\u001fռ\u0006\u0004ꪪ\u000e)1\u0006\b\u001b\u0019\u0010)1Հ\u0006\u0002\u0017Հ+)1\u0010Ԝ\u0017\u0001\u0005\u001b)11Հ\u000b\u0003\u0004\r)1\u0005\u001d\u0005\u0007\u0001\r)1\b\u001c\u0018\u0016)1\u0004\u0019))1\u0010\u0002\u0019\u0004\u0001\u0004\u001d)11\u0006\u0001\u0004\u000e)1Հ\u0004\u001e\u0004\u000e)1\u0004\r\u001c\u0018Ԕ\u0016)1ը\u000e\u001b1\t"
  },
  {
    "path": "04 Support/DRAZ/I/PAC.C3.A",
    "content": " 88M88Հ\u0007\u0005\u0007\u0004'88\u0004\u0003\u0002&88\u0001\u0004<\u0005\r\u0005\u0004\u000b0Gՠࠠ\n\b\u0007\u0004\u0004\u0005\u0005\u0001\u0004\"\u0005\u0006\u0006\u0004(\u0006\u0004\u001f\n\u0005\"\u0006Ͽ\u0004\u0002\u0005\u0002'ո\u0002\u000f\u001c\u0006\u0001\"\u0001\u0006=\f\u0007\u0016\u000e#M\u001b訪\u00168ՀF\u0004\u0007\u0005\u001e\u0004\r\u0004\u001e\u0005\u0004(\u0004\u0005\u0005\u0004\u0006\u001dռ\u0004\u0005\u0007\u001c\u0005\u0004Ͽ\u0001(\t\u0007\u0004\u001a\u0011\u001c\u0005>\u0017\u0001\u0019\u0010\u0001\u001dM88\b\u0005\u0006\u0004'Հ\u0005\u001dՁ\u0007\t\u001f\u0005\u0005\u0001\u0002'\u0004\u0007\u0006\u001d\u0005\u0007\u0001\u0019\u0004\u0001\u00044\u0005\u0004\u0004\u0004\u001d\u0016\u0017C\u0015\u001c\u0016\u0004\u0001\u0017GՁ\u0006 \u000f\u0004\u001dՀ\u0006\u0001'\u0001\u0005\u0001 \u0012\u0005\u0015\u0006ǟ\u0001\u0007'Հ⢢計!\u001b\u0011Հ\u0003@\u0010\u0001!!\u0001\u0011H88M\"\u0004\t\u0006\u0007\f\u0004\u0006\u0004'հ\u0001\n\"Ն証\t\u0004\u0004\u000b\u0004߿\u0005\u0002訨\u0002'ᡁմ\" \u0012\u0001=\r%Ձ\u0005\n\u000e\fՀF\u0006\u0004(\u0006\n\u0004\u0004\u0007ࠥ\fM\u0004󏆀\u0005\u0004 8Հ\u0004\u0004&\u0005\u0001\u0001 \u0007\u0006\u0005\u0004\rϿ\u0004\u0002&\u0005\u0006ꫫ\u0001!հࠠ\u0004\u0006\n\u0004\u0005\u0005\fՀ\u0001\u0004>\f\u0002%\u0005\r\u0004\u0005\fM8ՠࠠ\u0005\u000b\u0005\u0004\u0004\bՁ\u0004\u0005\u0004'18\u0003\u0005\u0001&\u0004߸$8Շ\u0005\u0004\u0006&\u0005\u0002$\u0004\u0004\u0006\u000f\b\u0004\u0004\u0002&Հ\u0004º$\u0004\u0005\u0004ࠠ\u0004\u0005\u000fM\u000b%\u0004\u0001\u0010\u0007\u0004\u0005\u0006&8\b\u000b\u0011\u0005\u0006\u0007\u0001\u0005\u0005"
  },
  {
    "path": "04 Support/DRAZ/I/PAC.C3.B",
    "content": " 1$I 1$I 1$ ( 1$ \u0013\f 1$\u001f\u0013\u0006 1$4\nࠠ 1$I 1$\u001f\u000e\r\u0005 1$\u001f\u000eఘ\u0007\u0005 1$4\t\u0005 1$\u001f& 1$\u001f\u0011\u0006\u000b 1$\u001f\u0011ฎ\u000b 1$4\u0006\u000b 1$\u001f& 1$\u001f\u0011\u0004\t 1$4\u0007\t 1$\u001f\t\u001f 1$\u001fࠠ\n\u0010 1$4\u0010 1$\u001f\u0006\r\u0004\u0010 1$\u001f\" 1$\u001f\u0004\r\u000e 1$I 1$\u001f\u0012\u0004\u000e 1$\u001f\u0012𞃀\u000e 1$\u001f\u0012\u0004༇\u000e 1$\u001f' 1$\u001f\u0011\u0011 1$\u001f\u0001\u0011\u0011 1$\u001f\u0011\u0001\u0013 1$\u001f& 1$4\u0012 1$\u001f\t\t\u0012 1$\u001f\u0004\t\u0001\u0012 1$\u001f\u0007\u001e 1$4\u0013 1$\n\u0011\u000f\u0013 1$\n\u0001\u0011$ 1$\n\u0011\u0004\u000f\f"
  },
  {
    "path": "04 Support/DRAZ/I/PAC.C3.C",
    "content": "_\u0005\b\b\u00049_Հ\n\u00058_\u0001\u0005\u0004\u0005\u0005@_\u001a@_\u001aރ?_\u001f<_\";_\u0002\u0004\b8_\u0005\u0004\u00048_Հ\u0005\r@\u0005\u0006\u0007\u0005A\u001aՅ=\u0007\f,\u001a\u0004ర4\b\u0005\u0004\u0006\f\u0005ё\u000e\t\u000572Հ\u0004\u0010\u0006Հ\u0005\u0005\u00047\u0004\u0004\u0004\u0014\u000b\u0005\b\u0006\u0004\u0005\u000fԕ>Հ\u0005\u0005\u0005\f\u0013\f\u001c\u00041\u0007\u0004\f\u0013\u0013\u001c\u000e\u0004.2ռ\u0004\t\u0005\b՜\b8\u0001\u0005А\u0013\u0007\u0003\u0004Ԕ\u0006\t\u00058Հ\u000f枟\rՀ\u0007\u000e\u0004\u0007Հ\b\u0004\u000f>\u0001\u0006\u0004\u0006𰘖\r\u0016\u000e\u001dи02\u0016\u0010-.\u0012\u0005\u001b\u0018\u0012\u0004\u0004\u00078՜\u0006\u0014ռ\u0004\u0006\u0005\u0006Հ\u0006\u0004\u0006\u0006𪪠8\r\u0004ݝ\f\u0004\u0006\u0006\u0005\u0004\u0015Յ;Հ\t\u0004\b𰘊\fՀ\n\u000f\u000e\u001d\u0004࠰.2\u0019\u000f^Հ\u0006\n\u0004\u0018\u0019o\u0001\u0004\u0004ח\u000e\u001cnՀ\u0004\u0001\u0004\u0007\u0001\f\u001dn\u0018֎Հ\u0004\u0005\u0004\u000b\u0004חՀ\u0001\u0006\u0005\u0018స"
  },
  {
    "path": "04 Support/DRAZ/I/PAC.C4.B",
    "content": " 111)11#\u0004\n)1\u0005\n\t\u0005\f\u0004ו\u0005)1\u0004\u0005\u0007\u0006\u0004\u0006Հ\b\u0004\u0004\u0002\b\u0004)1\u0005\u0001\u0005ㆌ\u00061)1Հ\u0013\fվ\b)1 \u0010\n\u0001\u0003\u0004А\u0005)1\u001d\u00121)1\n\u0005\u0010\u0004\u0004ח\u0006)1Հ\u0006\u0001\u0007\u000bՀ\b\u0004\u0004𠨨ߟ\u0005)1\u0007ހ\f1)11վ\u0005\u0005\b)\u0005*\u0005\n\b\u0013\u0005\u0007\b)Հ*\u0001\u0004\t\u000b%\t)\u0004!\u0007\u0005\u0007\u000b1)տ\"Հ\u0005\t\u0004\b\u0012՞\u0004\u0005\u000b)%\u0001\u0004\u0005\u0006\n\u0005\u0004\t)Հ,\f\u0007\n\u001f\u0002\r)111)\n\u0004 Ձ0Տ\u0004\u0004\u0003\u0004\u0011)Ã\"0\u0004\u0005\r)տ\u0001\u0003!\u0011\u0004\u0007\u0018\r)%\u0006\u0007\r\u0005\u0018)Հ.\u0002\u0003\u0003\u0002\u0013\u0005\u0004\u0001ꨬ\u0014)11\u0011)Ճ\"\u0015\u0005\b\u0013𸰠\u0001\u0011)\u0001\u0004\u001b\u0004\u0004Ԕ\b1)հ\b\u001b\u0010\u0013Հ\u000b\u0019)11\u0004\u0017)\u0004\u0004 Ձ\u0011\u0004\u0006Հ\u0005𡀀\u0001\u0016)\n\u0005\u0014\u0001\u0004Ǉ\u0005\u0006\u000e\u0002\u0015)𰰠\u0004\u0007\u0013Հ\u0007\u0004\u00141)11\u0005\u0004\u001b)1\u0017\u0005\u0004\fՈ\u0002\u0005\u0001뮯\u001a)\u0005\u0012\u0006חԖ\bσ\u0019)\u0001\u0002\u000f\u0010Հ\u000b\u0003\u0012\t\u0019)11\u0007\u001f)1\u0018\u0004\u0005\n\u0001\u0004\u001e)\u0004\u0004\f\u0004\u0006Ǉחх\u0004\u0007χ\u001d)\u0005\u000f\u000bՀ\u0005\t\u0001\t\u0005Հ\u0004\u001d\t"
  },
  {
    "path": "04 Support/DRAZ/I/PAC.C4.C",
    "content": " 111)11Հ()11\u0005\u0017)11Ձ\u0005뢠\u0018)1\u0004\u0004\u0012\n\t\u0005$)1՟\bյ\u0007\b-)1\t\u0005\u0005\n1)1\u0005\u0005$ՀՕ\r\u001a)1\u0006\u0010\u0016\u0004Ճ\u0019)1՜\u0006Օ\u000b\u0007Օ\u0005\u001f)1\n\u0001\b))1\u0005\u0004\u0004!1)11\u0005))1Հ\n\b\nՀ\u0004Օ\t\u0018)1\b\u0004մ\u0001\n\u0004Տ\u0018)1\n\u0001\u0005\u000e\u0006\u0001\u001c)1\u0005\u0005%\u0005()1Հ\u0007\r\f\u0004()1\n\u0004ו\fє\u001a)1\u000bࠠ\u0004\u0010Յ\u0005ڪ\u001a)1'\u0004\u0004\u001e)1\u0004\u0010\r()1\u0007ӗ\r1)1Հ\n\u0001\u0010\u0004()1\u0004%є\u001a)11Յ\u0005ڪ\u001a)1\u0004*\u0004\u0004\u001e)1Հ\u0006Օ\t\u0011()1\b\u0004\u0001Ą\u00111)1Օ\b \u0004()1+є\u001a)1Հ\u0010\u0013Յ\u0005ڪ\u001a)1\u0006ߗ\u0001\u0013\u0004\u0004\u001e)1\u0005\u0005\u0015()1\u0007\u0004$1)1Հ-\u0004()1\t\u0004\u0016є\u001a)1Շ\u0006ן\u0016Յ\u0005ڪ\u001a)1\u0005\u0001\u0001\u001d\u0004\u0004\u001e)1)(\t"
  },
  {
    "path": "04 Support/DRAZ/I/PAC.C4.FAT.A",
    "content": " 111)Հ\u0005\u0004\u001dՀ*1)\u0006\u0006\u0001\u000b\u0004\u0005\nꊂ')Ճ\n֖\u0004\u0001\u0001\n\u0005\u0004\u0001\u0004\u0001\n\u0004ח\u0006\u0004\u0004\u000b)\u0001ࠠ\t\u0016\u0011կ\u0015\u0006\u0001Ү\u0006\u0005\t)Հ\b\u0018\u0004\b\u001dՀ\u0010ժ\u0002\t)\u0004\u0004\u0001\u000b1\u0001\t$)Ճ\n֖\u0004\u0001\u0001\nՀ\u0001\f\u00191)\u0001ࠠ\n\u0004\u0016\u0004\u0006\u0004\f1)1\u0006\u0007\u0001\fՀ()\u0004\u0005\u0018\u0013а\u000f\u0004\u0004\u0004\u001b)\u0005\u0010\u0001\f\u0005\f\u001dՀ\u0004\u0005Ǘ\u0016)ʊ\u0007\u0001\u0002\f1޾\u0005ꪫ\u0005\f)\u0001\u0004\tР\u0016Հ\u0001(Ճ\u000bՄ\u0002𨨨\f)\u0015\u001a\u0004\u0005\b\f\u0006%)Հ)\u0007\u0006\b\fՀ))\u0004\u0018\u000e뫪\u0013\u0001\u0006\u0019)Հ\u0004\u0005\u0005\r\u0001\u0004\u0007\u0018Հ\u0005ӗ\u0016)\u0005\t\u0001\u0005\r1\u0003\u0005\u0001\u0006\u0011)՟\b\u0007РՕ\u0011Հ(՟\nŪ\u0001\u0010)\u001a\u000e\u0004\u0006\u0002\f\u0006\u0005\u0005\u0016)1\u0004\u0002\u0006\u0001\u0001\u000b\u0019\u0016)\u0006\u0005\u0004\u0004\u0005\u0011\u000e\u0015))Ձ\b\u0005\u0006\u0007\u0001\u0006\u0005!Հ\u001a)\u000b\u00071\u0004\u0002տ\u000e)\b\u0006\u0007Р\u0015Հ*\u0005\bՊ\u0007\u0001\r)1\u0004\b\u001e\u0006\u0004𪪪\u0015)Հ(Հ\u0001\u0005\u0007\u0001\u000f\u0016\u0017)\u0005\u0005 \t\u0004\u0001\u000e-)\u0005\u0007\u0004\n՟\b\u0004Ш\u0005\u000fՀ߿\u0005\u001e)\u0006\b멩\u0002\n\u0016\u0017\u0004\u0004\u0005\u0004\f)՟\t\u0006Ԩ\u0017Հ\u0001\u0007\u0018\u0005\u0007\u0004\f).\u0005\u0007\u000b\u0007\b𠠨\u0014)Ռ(Ճ\n֖\u0005\u0001\nՀ.)\u0004\u0004\b\f\u0001ࠠ\n\u0004\u00151)\u0005\u0004\u0004\u0004\u0001\u0004\u000bՀ&Հ\u0001))\u0007\bե\f\u0005\u0006\u0004\n\f\u000e)Հ\t\u001cՀ\u0007\u0001\u0006\u0001\u0001\u0004\tՁ\u0007꫿\u0006\u0001\r)\u0004+\u0001𨨨\u0006\u0003\u0004\n\b\u0005ꪪ\u0014)11\u0012\u0004\u0019\t\u0019\t"
  },
  {
    "path": "04 Support/DRAZ/I/PAC.C4.FAT.B",
    "content": " 021)021)021)021)021)021)021)021)021)021)020)021)0*1)0Հߟ%Հ&)0\u0006$\u0005\u0005\u0017)0\u0001%\u0005\u0004\u0016)0+\u0006\u0005\u0001\u0007\u0016)02Հ\u0005\u001a)02*)0Հ\u0007!1)0#1)0տ\u0004\u0001\u0005\u0001\"1)0%0)0ՀԠ,1)021)0՟믯\u001eՀ\u000b\u0004\u001c)0\u0006\u0005\u001c說\u0003\f)0մ\u0003𠠀\u001cռ\fծ\u0001\u0001\u0001\u0004\u0001\u000b)0\t(\f\u0004𠠠\f)0\u0004$1)0ꪪ\u0005\u0003\u0012\u0001\u0006\u0007\u001a)0Ԕը\u0005\u0001\u0012Հ\u0005Օ\u0001꯿\n)02\u000b\u0001\u0002\n)0\u0005\u0005\u001e\u000e\u0005\u0015)0\u0001\u000f*)0\u0006ե\u0001\u000f\u0004\u0004\u001a)02\u0005\u0007\u0001\u0005\u000b)0\u000f\u0005\u001b\u0004\b\u0004\u000b)0\u0004\u0002\u0001\u0003\n\u0012\u0004\u0016)0\u0004\u0006թ\u0001\n1\t1\t\u0002\u0001\u0003\n\u0012\u0004\u0016)0\u0004\u0006թ\u0001\n1\t\u0016)0\u0004\u0006թ\u0001\n1\t"
  },
  {
    "path": "04 Support/DRAZ/I/PAC.C4.GD.A",
    "content": " 111)Հ\u0005\u0004\u0018Հ*1)\u0006\b\u000b\u0004\u0005\u000bꊂ')Ճ\u0005֖\u0003\u0001\n\u0005\u0004\u0001\u0002\u0001\n\u0005ח\u0007\u0005\u000b)\u0001ࠠ\u0006\u001c\u0005ʪ\u0005\u0015\u0005׮\u0002\u0004\u0005\t)Հ\u0005\u0018\t#ՀՕ\u000e\t)\u0004\u0004\u000b1\u0001\u0004))Ճ\u0006ŕ֖\u0003\u0001\nՀ\u0001\f\u00191)\u0001ࠠ\u0006\u001c\u0004\u0006\u0004\f1)1\u0006\u0005ّ\fՀ()\u0004\u0005\u0018\b\nа\u000f\u0004\u0004\u001b)\u0005\u0010\u0001߿\f\u0005)Հ\u0005Ǘ\u0016)ʊ\u0004\u0001\u0002\f1\u0004߿\u0005ꪯ\u0005\f)\u0001\b\u0007\u0017Հ\u0001(ՃՕ\u0004ਨ\f)\u0015\u001a\u0004\b\f-)Հ)\b\u0005\fՀ))\u0004\u0018ꪪ\u0007\u0013\u0006\u0019)Հ\u0004\u0004\u0005\r\u0001\u0004\t\u0018Հ\u0005ח\u0016)\u0005\u0005\u0001\r1\u0003\u0005\u0001\u0006\u0011)՟\u0005\rՅ\u0011Հ(՟\u0004\u0007\u0001\u0010)\u001d\u000e\u0004\u0004\u0004\f\u0014\u0016)1\u0004\u0002\u0001\u000b\u0019\u0016)\u0007\u0004\u0004\u0011\u0004\u0004\u001b))Ձ\u0004\u0004\u0007\u0007\u0007վ\u0004)Հ\u001a)ਨ\t\u00071\u0004\u0004\u0002՟\u000e)1Հ*\u0005\u0005\u0001\r)1\u0004\b\u001f\u0006\n\u0015)Հ(Հ\u0001\u0005\u0007\u0001߿\u000f\u0016\u0017)\u0005\u0005\"\u0001\u0005\u0002\u0001\u000e-)\u0005\u0007\n՟\u0006\t\u0005\u000fՀ߿%)\b\u0004먨\u0001\u0002\n\u0016\u0017\u0005\u0001\u0004\f)՟\b\u0004\u001bՀ\u0001\u0006\u0018\u0007\u0005\f).\u0006\u0004\u0005\u000b\u0005\u0004\u0005\u0014)Ռ)Ճŕ֖\u0003\u0001\nՀ.)\u0004\u0004\f\u0001ࠠ\u0006\u001c1)\u0005\u0004\u0001\u0001\u0001\u0001\u0004\u000bՀ&Հ\u0001))\u0007\u0005\f\u0006\t\u0004\n\u0004\t\u000e)Հ\t\u001fՀ\u0001\u0004\u0005\u0001\u0001\u0004\tՁ\u0004証\u0001\u0004\u0001\r)\u0004+\u0001\u0006\u0004\n\n\u0004\u0014)11\u0012\u0004\u0019\t\u0004\u0019\t"
  },
  {
    "path": "04 Support/DRAZ/I/PAC.C4.GD.B",
    "content": " 021)021)021)021)021)02Հ,)02ꪊ*)02Հ\u0005Օ')02ե\u0005\u0001&)02ժ₃#)02\u0001#)02Հ$)02\u0004+)0Տ\u0004*Հ&)0\u0001Ϗ(\u0005\u0005\u0017)0(\u0005\u0004\u0004\u0001\u0016)0)\u0006\u0005\u0001\u0001\u0017)0\u0004Ճ,Հ%)0-*)0\u0005'1)0\u0001\u0005&1)0Օ󿇯Օ!1)0\b\u001f0)0մП+1)0/1)0Ճ믯\u001eՀ\u000b\u0004\u001c)0\u0001\u0005\u001c說\u0004\u0001\u000e)0մ\b\u001cռ\u0004\u0005\u0001\u0004\u0001\r)0\t(\u0010ؠ\u0007\u000e)0\u0004$1)0ꪪ\u0005\u0003\u0012\u0001\u0004\u0004\u001b)0\u0004А\u0005𨨨\u0012Հ\u0004Օ\u0002\u0004\f)02\u0006\u0004\u0007\u0001\f)0\u0005(\u0018\u0016)0\u0010*)0\u0005\u0005\u0002\u0001\u000f\u0004\u0004\u001d)02\u0005\u0007\u0002\r)02\u0004訨\r)0\u0004\u0007\u000b\u0018\u0016)0\u0004\u0005Ԕ\u0004\u0001\n1\t\u0004\u0007\u000b\u0018\u0016)0\u0004\u0005Ԕ\u0004\u0001\n1\t"
  },
  {
    "path": "04 Support/DRAZ/I/PAC.C4.SH.A",
    "content": " -11)Հ\u0001&Հ)1)\u0006\u0002\u0004ߟ\u0004\r\u0005\u0001\u0004\u0006\u0004\r\u0001')Ճ\u0007\u0001ꪨ\f\t\u0006\u0003\u0001\f\u0006\u0001\u0015)\u0001\u0006\u0005\u001c\u0004ԅ\u0015\nǟ\u0002\u0004\u000b)Հ\u0001&\u0005\u0004#Հ\u0002\u000e\u000b)\u0006\u0002\u0004ߟ\u0004\r1\u0001))Ճ\u0007\u0001ꪨ\fՀ\u0001'1)\u0001\u0006\u0005\u001c\u0005\u0005߿\u000e1)1\f\u0004\u0003\u000eՀ()\u0005\u0004\u0016\u0005\u0002\t\u000f\u0006\u001a)\u0006\u0002\t\u0004\u0004\u000e0\u0007\u0005\u0016)\u0005\u0005\u0001\u0002\u000e1\u000b\u0004\u0004\u000e)\u0001\u0006\b\u0018Հ\u0001(Ճ\u0003\u0007\u000e)\u0015\u001a\u0004\u000e,)Հ뿇)\u000b\u0002\u0007\u000eՀ))\u0005\u0001\b\u0017\u0007\u0013\u0005\u0007\u0019)\t\b\u0007\u000f\u0001蠀\u0011\u0018\u0007Ͽ\u0017)\u0006\u0004\u0001\u0004\u000f1\u000b\u0004\u0001\u0005ߏ\u0013)՟\u0005\u000e\u0012Հꏇ(՟\u0001\u0005\u0007𪪪\u0012)\u001bԕ\u000e\u0005\u0004\u0004\u0004\u000e\u0014\u0016)1\nϿ\u0002ꪨ\u0004\r\u0019\u0016)1\u0004\u0001\u001b))1վ*\u0005\u0001\u0004\u001a)01\n\tߟ\u0004\u0010)1Հ*\u0006\u0001\u000f)1\u0004\t\u0019\u0004\n\u0015)Հ\u0001(\u0005\n\u0015\u0015\u0017)\u0005\u0001\b\u0018\u0006\u0004\u0004\u0001\u0010-)\b\u0004\u0004\f՟\u0004\b\u0004\u0011Հ𠠼%)\u000b\u0004\u0002\f\u0015\u0017\u0006\u0002\u0004\u0006\u0004\u000e)՟\u0005\u0004\u001bՀ\u0001&\n\u0004\u0001\u0004𪪪\u000e)-\u0006\u0002\u0004ߟ\u0004\r\u0001\u0005\u0004\u0004\u0014)Ռ)Ճ\u0007\u0001ꪨ\fՀ.)\u0005\u0001\u0004\u0015\u0001\u0006\u0005\u001c1)\b\u0007\u0002\u0001\rՀ&Հ\u0001))\u000b\u0004\u000e\u0006\u0002\u0013\u0004\u0001\u0005ߗ\u0005\u0010)Հ\u0005\u0005\u0018Հ\u0006\u0002ꨮ\u000bՁ\u0007ß\u0001\u0001\u000f)+\u0001\u0004\u0005\n\f\u0004\u0004\u0004\u0014)11\u0012\u0004\u001b\t\u0004\u0005\n\f\u0004\u0004\u0004\u0014)11\u0012\u0004\u001b\t"
  },
  {
    "path": "04 Support/DRAZ/I/PAC.C4.SH.B",
    "content": " 021)021)021)021)021)021)021)021)021)021)021)021)021)021)021)021)021)021)021)021)02\u0011\u0007\u0016)02Հ\u0005\u0002\u0002\u0004\r)02\u0004\u0004\n\u0002\u000b)02\u001e\u0010)021)02Հ\u000b\u0004\u001c)02\u0005\u0001\u000f)02ռ\u0006\u0004ꪨ\u000e)02\u0015\u0007\u0010)021)02\u0001\u0005\u001b)02Հ\u000b\u0003\u0004\r)02\u0005\u0007\u0001\r)02\u0018\u0016)02))02\u0004\u0001\u0004\u001d)02\u0006\u0001\u0004\u000e)02\u0004\u000e)02\u0018Ԕ\u0016)021\t\u0004\u001d)02\u0006\u0001\u0004\u000e)02\u0004\u000e)02\u0018Ԕ\u0016)021\t\r)02\u0018\u0016)0\u0005\u0013))0\u0001\u0002\u000f\u0011\u0004\u0001\u0004\u001d)02\u0006\u0001\u0004\u000e)02\u0004\u000e)0\u0004\u0004\r\u0018Ԕ\u0016)0\u0005\u000f\f1\t\r\u0018\u0016)0\u0005\u000f\f1\t)"
  },
  {
    "path": "04 Support/DRAZ/I/PAC.C4.SKEL.A",
    "content": " 111)Հ\u0001𘌇)Հ+1)\u0006\u0004\u000e\u0005\u000e상()Ճ\t\r\f\r\b𰎆\u0015)\u0001\b\u0004\u001c\u0005̆\u0015\u000bܸ\f)Հ\u0001𘌇)\n#\b\u0012\f)\u0006\u0004\u000e1\u0001〘&)Ճ\t\rՀ\u0001)1)\u0001\b\u0004\u001c\u0007𐘜\u000e1)1\u000eù೟\u000eՀ*)\t\u001f\u0001\u0004\u0004\u000b\u0010\u0006􆃁\u0004\u001a)\u0006𸐎\u000f0\tɎⱛ\u0016)\n\u0005\u0001\u0001\u000f1\f،È\u000f)\u0004\t\u0018Հ\u0001*Տ\u0005\b\u000f)\u0015\u001a\u0006𰘈\u000f')Հ\u0001*\fؠ\u0001ߜ\u000fՀ\u0001*)\u0006༉\u0006\u001f\n\u0014\u0006ง\n\u0019)\u000b\u0010\u0001\u0011\u0014\tǏ\u0001྇\u0017)\n\u0006ȸƟ\u00101\r\u0001\u0014)՟\u0004\u000f\u0014Հ臁*՟\n\b\u0013)\u001c\u0010\u0006༌\u0005\u000f\r\u0017)1\r㦰\u000e\u0019\u0016)\u0001𘌇)\u0004\u0005\u001b𸎃*)\u0006\u0004\u000eո,\u0006𔎇\u0004\u001a)\u0005\u0007㞼\u000e1\u000b\u0002픋\u0011)\u0001\u0004\u001fՀ+\u000b\u0004\u0010)1\u0005\u0004\u001f\u0004\u0004\u000b\u0017)Հ*\u0006󾏎\u0017\u0017\u0018)\u0006\r\u0019\n\u0005\u0001\u0011-)\n𰘜綞\r՟\u000b\u0012Հ()\u000e\u0004ξ\u0001\r\u0018\u0017\u0007𸘜\u000f)՟\u0005\u001cՀ\u0001𘌇)\r\u0001\u000f)/\u0006\u0004\u000e\u0006\u0004\u0014)Ռ+Ճ\t\rՀ.)\u0005พ\u0004\u0018\u0001\b\u0004\u001c1)\bర\u0001\u000eՀ*Հ\u0001))\u000f\u0004\u0004ࠀ\u000f\u0006\u0016\u0006򝟆\u0010)Հ\u0007\u0018Հ\u000bθ̶\f\f\u0001\u000f)\u0004,̄\nࠀ\r𰰰\u0006\u0015)11\u0012\u0018\t"
  },
  {
    "path": "04 Support/DRAZ/I/PAC.C4.SKEL.B",
    "content": " 021)021)021)021)021)021)021)021)021)021)02\u0001&)02\b懃\u0006\u000f)02\u0004\u0006萐\u000f)0Տ\u0004*Մ\u0001.)0\u0001Ϗ(\u0006()0(Հ񱱞\u0004\u0019)0)\u0001\u0001䘐\u0019)0\u0004Ճ,\u0004%)0-()0\u0005'1)0\u0001\u0005&\u001a)0Օ󿇯Օ!ՀӣΜ\u0001\u0011)0\b\u001fర𧇾\u0001\f)0մП+\u001d\r)0/1)0Ճ믯\u001eՀ\r\u001c)0\u0001\u0005\u001cÓ𸌆񜜌\u0013)0մ\b\u001cռ\u0005Ƈ\u0004ࠀ\r)0\t(\r\t　\r)0\u0004$1)0ꪪ\u0005\u0003\u0012\u0004\u0004\u001b)0\u0004А\u0005𨨨\u0012Հ쫆\u0013)02జ぀\u0004Þ\r)0\u0005(\u000e\u0005\u0004\r)0\u0010*)0\u0005\u0005\u0002\u0001\u000fՀజ\u0005\u001d)02\u0002𜟾\u0014)02\u0004𰘙\u000e)0\u0004\u0007\u000b\n\u000b\u000e)0\u0004\u0005Ԕ\u0004\u0001\n1\t"
  },
  {
    "path": "04 Support/DRAZ/I/PAC.C4.VIZ.B",
    "content": " 021)021)021)021)021)02Հ,)0\u0007\u0010\b\u0005ꪊ*)0\u0005\u0006\u0005\u0007\u0001\u0004Հ\u0005Օ')0\u0010\u0017\u0006ե\u0005\u0001&)02ժ₃#)02\u0001#)02Հ$)0\u0004,\u0004+)0վ\u0003\u0004)Հ&)0߿'\u0005\u0005\u0017)0\u0005'\u0005\u0004\u0004\u0001\u0016)0ҧ)\u0006\u0005\u0001\u0001\u0017)0*Հ%)0-*)0Հ%1)0\u0001\u0004$1)0\u0006Ԗ\u001f1)0\u0004\u0006\u001f0)0մ'1)021)0Ճ\u001fՀ\u000b\u0007\u0019)0\u0001\u0001\u001d說\u0004\u0006\f)0մ\u0007𰠀ʊ\u001cռ\u0004\u0006\u0001\u0004\u0001\f)0\t(\u0005\tؠ\u0007\r)0\u0004$1)0ꪪ\u0006\u0004\u0013\u0001\u0004\u0006\u0018)0\u0004А\u0005\u0002\u0013Հ\u0004Օ\u0004\u0004\r)02\u0006\u0004\u0007\u0001\r)0\u0005(\u0018\u0016)0\u0002\u0010*)0\u0005\u0005\u0002\u0010Հ\u0004\u001d)02\u0005\u0006\u0004\u000f)02\u0004\u0002\u000f)0\u0004\u0007\u0004\f\u0018\u0016)0\u0004\u0005Ԕ\u0004\f1\t\u000f)0\u0004\u0007\u0004\f\u0018\u0016)0\u0004\u0005Ԕ\u0004\f1\t"
  },
  {
    "path": "04 Support/DRAZ/I/PAC.C5.A",
    "content": " 111)111)111)111)11􏏇()1՞*\u0005\u0001\u0004\u0004\u0016)1\u0001\u0004\u0006\u0012\t\u0005\u0002\u0004\f)ռ\n\u0016\b\u0005򎏏\rՀ\u0002\u000e\f)\u0007\b߿\u0004\f\u0001\u0004\r\u0001*)Հ\u0006\u0001\fՀ\b\n\u0018հ*)\u0005\fՁ\u00131\u0004\u0004\u001b)ྟ\u0004\u0015՜\u0004\u0004\u000b\u0004\u0010\u0006\u0006\u0017)\u0006\u0005\u0004\u0004\u000e\u0006\u0002\u0006\u0001\u000b\n\u0004ן\u0004\u000f)Հ\u0005\u0001\u000eՀ\u0005\u0004\u0001𠠨నʂ\nՀ\u0003\u0007\u000f)\u0006\u0007\u0018\u0002\u0011\n.)ռ\u0016\u0010ռ\u0007\t\u0005\u0011հ*)\u0005\u0001\u0007\u0010\u0006\b\u0001\u000b\u0004\u0001\u000b\u0014)\r\t\u0010Հ\u0004\u0001ꂀ\f\u0007\u0007\u0016)\u0005\u0001\u0001\u000f\u0004\u0004\u0010Ԕ\r\u000b\u0004\u0001݃\u0013)Հ\u0001\u0005\u0004\t\u0004\u0010Ճ)Հ\u0006\u0006𺪪\u0012)\u0017\u0017\u0002\u0005\u0005ו\r\u0015Ѐ\u0013)1Հ\u0004\u0001\u0004\u0001\f\u0016\u0019)1\u0004\u0004\u0006\n\r1)11ռ\u0016\u0010)11\u0005\u0002\b\u0010)1Հ)\u000b\n\u000e)0\u0005\u0001\t\u0007\u0010\u0004\u0001\u0001\u0001\u000e)Հ*\u0007\t\u0012Հ\u0001\u0005\u0005\t\u0004\u0010)\u0007\u0016\u0004\u0001\u0001\u000f\u0017\u0017)\u0005\u0002\u0004\u0013Հ\b\u0004\u0007\u0010ռ\u0004&)\u0004\u0001Օ\u0001\u000e1\u0006\u0002\u0004\u0004\u0005׀\f)Հ\b\b\u0007\u000f\u0004\u0004\u0017\u000e\u0004\u0001쪪\u000b)1\u0005\u0004\u0005\u0004Օ\u0012\u0005\u0004\u0003\b\u0010)Տ*Հ\u0004\u0001\u0001ʺ\rՀ\u0004\u0011\u0012)\u0001\u001d\u0004\u0005\t\u000e1)\u0007\u0007\u0004\rՎ'վ))\f\u0004\u0002\r\u0005\u0001\b\u0012\u0001\u0005\u0004ו\u0004\u0010)\u0005\u0007\u0007\u0017Հ\u0004\u0004\u0001\u0002⚺\fՀ\u0005\u0001\u000f)\u0005+\u0001\u0005\u0004\u0006\r\u0001\u0004\b\u0016)111\t"
  },
  {
    "path": "04 Support/DRAZ/I/PAC.C5.B",
    "content": " 111)11#\u0004\n)1\u0005\n\t\u0005\f\u0004ו\u0005)1\u0004\u0005\u0007\u0006\u0004\u0006Հ\b\u0004\u0004\u0002\b\u0004)1\u0005\u0001\u0005ㆌ\u00061)1Հ\u0013\fվ\b)1 \u0010\n\u0001\u0003\u0004А\u0005)1\u001d\u00121)1\n\u0005\u0010\u0004\u0004ח\u0006)1Հ\u0006\u0001\u0007\u000bՀ\b\u0004\u0004𠨨ߟ\u0005)1\u0007ހ\f1)11վ\u0005\u0005\b)\u0005*\u0005\n\b\u0013\u0005\u0007\b)Հ*\u0001\u0004\t\u000b%\t)\u0004!\u0007\u0005\u0007\u000b1)տ\"Հ\u0005\t\u0004\b\u0012՞\u0004\u0005\u000b)%\u0001\u0004\u0005\u0006\n\u0005\u0004\t)Հ,\f\u0007\n\u001f\u0002\r)111)\n\u0004 Ձ0Տ\u0004\u0004\u0003\u0004\u0011)Ã\"0\u0004\u0005\r)տ\u0001\u0003!\u0011\u0004\u0007\u0018\r)%\u0006\u0007\r\u0005\u0018)Հ.\u0002\u0003\u0003\u0002\u0013\u0005\u0004\u0001ꨬ\u0014)11\u0011)Ճ\"\u0015\u0005\b\u0013𸰠\u0001\u0011)\u0001\u0004\u001b\u0004\u0004Ԕ\b1)հ\b\u001b\u0010\u0013Հ\u000b\u0019)11\u0004\u0017)\u0004\u0004 Ձ\u0011\u0004\u0006Հ\u0005𡀀\u0001\u0016)\n\u0005\u0014\u0001\u0004Ǉ\u0005\u0006\u000e\u0002\u0015)𰰠\u0004\u0007\u0013Հ\u0007\u0004\u00141)11\u0005\u0004\u001b)1\u0017\u0005\u0004\fՈ\u0002\u0005\u0001뮯\u001a)\u0005\u0012\u0006חԖ\bσ\u0019)\u0001\u0002\u000f\u0010Հ\u000b\u0003\u0012\t\u0019)11\u0007\u001f)1\u0018\u0004\u0005\n\u0001\u0004\u001e)\u0004\u0004\f\u0004\u0006Ǉחх\u0004\u0007χ\u001d)\u0005\u000f\u000bՀ\u0005\t\u0001\t\u0005Հ\u0004\u001d\t"
  },
  {
    "path": "04 Support/DRAZ/I/PAC.C6.A",
    "content": " 111)Ձ\u0004Օ\u0004\u0005\u000711)\u0001\t\tу\u00071\u0005\u0004\u0004\u0004\u0004\u0006)\u0004$1\u0007Օ\u0001\u0004\u0002\u0006舀\u0006)11\u0005\u0004\u0004\u001d)Ձ\u0004Օ\u0004\u0006\u000611)\u0001\t\tѓ\u00061\u0006\u0007\u0015)\u0004$Ձ\u0004Օ\u0004\u0006\u0004\u0006Շ\b\u0001\u0006)1\u0001\t\tѓƆ\u0006\u0006\u0004\u0007\u0007)1\u0004$1)11\u0005\")1\u0006&Ճ\t\u0006)1\u0007\u0004\u0004\u0004\u0006\f\u0005\u0007)1\n\b\u0004鉁\u0006\u000e\r\u0001\f)1\u0005\u0004\u0010\u000f1)1Հ\u0004#ՀՕ$)1\u0007\u0005\u0006\u0004\t\u0007)1՞\tՕ\u0005\u0006\u0004\u0006\u0001\u0006Ξ𲺺\u0004\u0007)1\u0004\u0004\u0004%!\n)11\u0006\u0004Օ\u001e)1\u000e\u0005\u0004\u0006\u000b\u0005\u0007)1\u0005\b\u0001\u0005\u0004計\u0006ոА\u0004\u0004\u0007)1\u0001\b\u0005А\u0005\u000b1)111)\"1\u0006\u0005\u001f)\u0004\u0004\"ՀՕ\u0005\u0005\u0006տ\bח\u0004\u0007)1\u0007\u0007֖\u0007\u0005Օ\u0007)1Ռ\u0004\u0004\u001f1)01\u0005\u0004\u0004\n\u0006\u0010)11Շ\u0007\u0004\u0004\u0006\u0006)0\u0004\u0004\u0004\u0006\u0004\u0004\u0007\u0007\u0004\u0004\u0005\u0007)1\tՕ\u0001\u0001\u00061),\u0005\u0004\u0005 \u0005\u0004\u001e)-1Ճ\u0007ϟ\u0004\u0006)ʊ*1\u0004\b\u0007\u0006\u0004\u0006)Հ\u0007Օ#11)$\u0004\u0004\u0004\u0005\u0004\u0006\u0005\u0004%)Հ(\u0007Օ\u0001\u0004\u0004\u0006՟\b׿\u0004\u0006)\u001e\u0006\"\u0007\u0006\bА\u0006)Հ\u0004\u001e11\t"
  },
  {
    "path": "04 Support/DRAZ/I/PAC.C6.B",
    "content": " 111)111)111)111)111)111)111)11\u0005\t\u001b)11\u0004\u0001\u0006\u0004\r)1Շ\u0005\b\u0005\u0001\t\u0005\u0001񡁁\r)1\u0005\u0002\u0005߿\u0001\t\u0005\u0005\b\u0016)1Հ\u0004\u0005\u0016Հ%)111)1Շ\f\u0006\u0004\u0001\t1)1\u0005\u0004\u0001\u0006\u0005ߞ\t\u0006\u0005\n\r)1Հ\u0005\u0006\u0017\u0004\u0005\u0007\r)1\u0012\u0005\u0006\u000f\u0005\u0005\u0005\u0018)1Տ\u0004\u0006\u0004\u0006꯿\u0001\tհ$)1\b꾾\u0005\u0002\n1)1Հ\u0006\u0004\u0005\u001bՃ\u0007\u0007\f)11ࠠ\u0004\u0006В\f)1\u0012\u0004\u0004\u0010՜\u0007 )1\u0004\u0004\u0002\u0003\u0002\t\u0006&)1\u0001烃\u0004ߟ\u0004\u0004\u0001\t\u0005))1\n\u0002\u0005Р\u000b\u0006\u0004\f)1Հ!\u0006\u0004\u0003訠\f)1\t\u0004\u000f\")1Տ\u0002\u0004\u0005\u0002\u0006\t\u0005\u0004\u0006\u000b)1ꪪ\bՁЀ\n\u0006\u0001\u0006\u0002Ё\u000b)1\u0006\u0006\n\u0004\u000f\u0011)1\n\u0001\u0004\u0006\f\b\u0004\f\b\u0011)1Հ\u0004\u0004!Շ\u0005߿\u0005\n)11𰰪\u0004\u0007А\u0004\f)1Ձ\u0007\b\t1)1\u0001\u0003\u0004\u0001\u0004\u0002\t\u0004\u0006\u0005\u0005\t)1\b\u0004\u0006\u0011ŕ\u0004ب\n)1\u000b\nДԐ\u00111)1Շ\u0004\u0004\f1)1\b\u0007\u0011\u0005\u0005\u0004\u0005\n)1\u0004%\u0006\u0004򪸸\n\t"
  },
  {
    "path": "04 Support/DRAZ/I/PAC.C6.C",
    "content": " 111)11Հ()11\u0005\u0017)11Ձ\u0005뢠\u0018)1\u0004\u0004\u0012\n\t\u0005$)1՟\bյ\u0007\b-)1\t\u0005\u0005\n1)1\u0005\u0005$ՀՕ\r\u001a)1\u0006\u0010\u0016\u0004Ճ\u0019)1՜\u0006Օ\u000b\u0007Օ\u0005\u001f)1\n\u0001\b))1\u0005\u0004\u0004!1)11\u0005))1Հ\n\b\nՀ\u0004Օ\t\u0018)1\b\u0004մ\u0001\n\u0004Տ\u0018)1\n\u0001\u0005\u000e\u0006\u0001\u001c)1\u0005\u0005%\u0005()1Հ\u0007\r\f1)1\n\u0004ו\f\u001a)1\u000bࠠ\u0004\u0010Յ\u0005ڪ\u001a)1'\u0004\u0004\u001e)1\u0004\u0010\r()1\u0007ӗ\r1)1Հ\n\u0001\u00101)1\u0004%\u0005\u001a)11Յ\u0005ڪ\u001a)1\u0004*\u0004\u0004\u001e)1Հ\u0006Օ\t\u0011()1\b\u0004\u0001Ą\u00111)1Օ\b \t')1+Д\u001a)1Հ\u0010\u0013Յ\u0005ߚ\u001a)1\u0006ߗ\u0001\u0013\u0004\u0004\u001e)1\u0005\u0005\u0015()1\u0007\u0004$1)1Հ-\t&)1\t\u0004\u0016Д\u001a)1Շ\u0006ן\u0016Յ\u0005ߚ\u001a)1\u0005\u0001\u0001\u001d\u0004\u0004\u001e)1)(\t(\t(\t"
  },
  {
    "path": "04 Support/DRAZ/I/PAC.C6.D",
    "content": " 11\u0004\u0006\u000e\u0013)1Հ\u0005\u001a՟\u0007\u001a)1ਨ\n\u0005\u0004߿\u0004\u0006\u0015\u0006)1՟\u0007\u0005߿\u0005\u00011)1\u0006\u0019\u0005\f\u0013)1\u0005\u0002\u0004\u001d՟\b\u0015)11\u0006\u0015\u0006)1Հ\u0004\b\t\f1)1ꪫ\u0005\u0005\u0011\u0002\u0003\t\u0013\u0013)1\u0001\u0011\u0002\u000f՟\u0007\u001a)1\u0005\u0001\n\u001c\u0006\u0015\u0006)1\n\u0005\u001eՀ&)11\u0002\u0005\u0004\u0005\u0007\u0004\u0004)1\n\u0004\b\u0006\u0004Ճ嵕\u0004\b\u0004\u0002\u0005\u0002\u0001)1\u001e\u0001\u0001\u0002\u0001\u000e\u0014)1Հ\u0001\u0014\u0002\r1)1\u0007\n\u0001\u0018 )1\n\u001fՀ\u0005\u0005\u0006\u0004\u0004)1\u0005\u0005\u0004\b\t\u0004\u0007\u0006\u0005\u0006\u0004)1\u0001\"\u0003\b\u0007\u0012\u0004)1\u0015\u0002\n1)1\b\u0002\u0003\u0005\u0016Տ\u0004\u0004 )11\u0004\u0006\u0004\u0004\u0004)1Հ\u000b\u0007\u0005\u000b\u0004\u0004\u0006\u0004\u0006\u0003\u0001)1%\u0005\u0007\u0004\u0004\u0013)1\u001b\u0003Հ.)1\u0005\u0004\u0004\u0006\u0014\u0005\u0004!)11\u0004\b\u0004\u0004\u0004\u0004\u0004)1\u0007\b\u0004\f\u0006\u0006\u0006\u0001\u0004\u0002\u0004)Հ\b\u0006\n\bՇ\u001f\u0001\u0001\u0004Ն\u0004\u0015\u0004)\r\u0004\u0005\u0005\u0003\u0005\u0007\t\u0006-)ՇÇ\u0001\u00161Ձ.)\u0001\u001e\u0004\u0005\u000f\r\u0002\u0005\u0006\u0005\u0005\u0010)\u0007&Շ\u0004\u0003\u001e\u0006\u0006\u0007\f)\u0005\u001c\u0006\u0004\u000b\u000b\r\u0005)Հ\u0004\u0005\u0005\u0006\u0006\u0005\u000111)\u0007\u0004\u0001\u0004\u0004!\u0004\u0006\u0005\u0004\u0006\u0017)\u0005\u0001\u001a՟\u0007\u0005\u0013Տ\u0005\b\f\u0006)\u0007\"\u0006\u0012\b\u0005\u0006\f\u0006)111\t111\t\t"
  },
  {
    "path": "04 Support/DRAZ/I/PAC.C6.E",
    "content": "H\t+Տ\u0013\u000f\u0006\u0004\u0010\u000b\b\n\u001eK;՟\u0004\f\u0004\u0006\u0005\u0007N\u0005(\u000e\t\u000f\u0001RՏ\u0012\u000f\u0006\u0004\u0010\u000b\b\n\u0006\u0004o;Տ\u0001\u0004\u0006\u0007\u0004\u0004\u0007M\u0004%\u0007\u0004\u0007\u000fPՏ\u0004\u000f\u000f\u0006\u0004\u0006y\u0010\u000b\b\n\u0003\u0004\t\u0004R;\u0004\f\n\u0004\u0001\u0004R;\r\u0006\f\u0004ꊂ\u0004TՇ\u0007\u0013\u0007\f%ڊU\u0001\u0005\u0005\u0005\u0007\u0006\u0001\u000b\u0006\u0004\fg;՟\u0001\b\t\nR;\r\b\u0004\u0004RՇ\b\u0013\u0007\f\u0017g\u0001\u0005\t\t\u0004\u0004\u0001\u000b\b\u0004\u0006\u0005\u0004^\u0018\u001e\b\t\u0006\u0004S;\u0015\tSՇ\t\u0004\u000f\u0007\fՃ\u0006\t\b\u0005\u0004_\u0001\u0005\u0012\u0004\u0001\u000b\u0001\t\u0006\b\u0006\u0001T\u001f܊\u0015\u0017\u0005쨨\u0002S;Ձ\u0005\u0018\u0006\rՇ\u0004\n\u0004\u0007\u0004\u0004V\u0005\u0011\b\u0005\u0001\u0004\u000b\n\r\u0004\u0001\u0004S\"Ԕ\f\u0017\u0005S;\by;տ\u0004\t\u0007\u0006U\f\u000e\u0005\f\u0007\f\u0004\u0003\u0004S\u0005\r\u0012Ԕ\u0004䊊\t\u0017\u0007\u0004T;Տ\u0013\u0005\u0005\u0005\f՟\u0006\b\u0006\b\u0004U\t\u000b\u000f\u0004\u0005\u0005\u0005\u0005\t\u0005\u0004\u0004S;\u0017\t\u0004T\t+Տ\u0013\u000f\u0006\u0004Ձ\u0010\n\u0007\u0007V\u0010\u000b\b\n\u0004\b\n\f\u0004S;\u000b\t\u0005\u0004\u000b"
  },
  {
    "path": "04 Support/DRAZ/I/PAC.GRID",
    "content": " 111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111\tO"
  },
  {
    "path": "04 Support/DRAZ/I/PAC.MOUSE",
    "content": " 1\u0004*1)1Շ\u0006Օ\t\u00061)\u0004'\u0006\u0002\u0006\u00061)՟\tՔ\t\u0006\u0005'1)\u0004\u0005\u0004\u0006А\u00061􏏇()\u0005*1\u0005\u0001\u0004\u0004\u0016)11\t\u0005\u0002\u0004\f)11Հ\u0002\u000e\f)1\u0015\u0018\u0001*)1\u0015\u0010\u0005+)1\u0016\t\u0010\u001b)1$\n\u000b\u0007\u0017)1\u0014\u0005\u0015\u0015ן\u0004\u000f)1\u0014Ǉ\b\u0006\u0004\u0004\u000f\u000f)1\u0014\u0005\u0005\b\u0007\u0005\u0006\u0019)1 \t\u0004հ*)1 \r\u0004\u0001\u000b\u0014)1Ռ-\u0007\u0007\u0016)1\u0001'\u000b\u0004\u0001݃\u0013)11Հ\u0006\u0006𺪪\u0012)1.\u0015Ѐ\u0013)1Հ\u0007\"\u0016\u0019),\u0006\u001f1)Հ+Հ\u000b\u001fռ\u0016\u0010)++\u0005\u0002\b\u0010)1Հ+\u000b\n\u000e)01\u0004\u0001\u0001\u0001\u000e)Հ*1Հ\u0001\u0005\u0005\t\u0004\u0010)\u0007\u00161\u0017\u0017)\u0005\u0002\u0004\u00131ռ\u0004&)\u0004\u0001Օ\u0001\u000e1\u0006\u0002\u0004\u0004\u0005׀\f)Հ\b\b\u0007\u000fԕ\t\u001f\u000e\u0004\u0001쪪\u000b)1\u0004\b\u0004ӕ\u0011\u0005\u0004\u0003\b\u0010)Տ*Հ\b\u0004\u0002గ\rՀ\u0004\u0011\u0012)\u0001\u001d\u0014\u0004\u0004\u000e1)\u0007\u0007\u0004\rՎ'վ))\f\u0004\u0002\r\u0005\u0001\b\u0012\u0001\u0005\u0004ו\u0004\u0010)\u0005\u0007\u0007\u0017Հ\u0004\u0004\u0001\u0002⚺\fՀ\u0005\u0001\u000f)\u0005+\u0001\u0005\u0004\u0006\r\u0001\u0004\b\u0016)111\t\u0002\u0004\u0004\u0005׀\f)Հ\b\b\u0007\u000fԕ\t\u001f\u000e\u0004\u0001쪪\u000b)1\u0004\b\u0004ӕ\u0011\u0005\u0004\u0003\b\u0010)Տ*Հ\b\u0004\u0002గ\rՀ\u0004\u0011\u0012)\u0001\u001d\u0014\u0004\u0004\u000e1)\u0007\u0007\u0004\rՎ'վ))\f\u0004\u0002\r\u0005\u0001\b\u0012\u0001\u0005\u0004ו\u0004\u0010)\u0005\u0007\u0007\u0017Հ\u0004\u0004\u0001\u0002⚺\fՀ\u0005\u0001\u000f)\u0005+\u0001\u0005\u0004\u0006\r\u0001\u0004\b\u0016)111\t\t"
  },
  {
    "path": "04 Support/DRAZ/I/PAC.PMODEL",
    "content": " 111)111)1+\u0005\u0004\u0004\u0004\u0004\u0006)1Հ,\u0007Օ\u0001\u0004\u0002\u0006舀\u0006)1ʊ)\u0005\u0004\u0004\u001d)1Հ\u0007Օ\"1)1#\u0006\u0007\u0015)1Հ'Շ\b\u0001\u0006)1\u0004\u001d\u0006\u0004\u0007\u0007)1\u0004\u0004\u001d1)11\u0005\")1Ձ\u0004Օ\u0004\u0006\u0004\u0006Ճ\t\u0006)1\u0001\t\tѓƆ\u0006\f\u0005\u0007)1\u0004$\u000e\r\u0001\f)111)1\u0006&ՀՕ$)1\u0007\u0004\u0004\u0004\u0006\u0004\t\u0007)1\n\b\u0004鉁\u0006\u0001\u0006Ξ𲺺\u0004\u0007)1\u0005\u0004\u0010\u000f!\n)1Հ\u0004#\u0006\u0004Օ\u001e)1\u0007\u0005\u0006\u000b\u0005\u0007)1՞\tՕ\u0005\u0006\u0004\u0006ոА\u0004\u0004\u0007)1\u0004\u0004\u0004%\u001f\u0006\n)111)1\u000e\u0005\u0004\u0006\u0006\u0005\u001f)1\u0005\b\u0001\u0005\u0004計\u0006տ\bח\u0004\u0007)1\u0001\b\u0005А\u0005\u000b\u0005Օ\u0007)111)11\u0005\u0004\u0004\n\u0006\u0010)1ՀՕ\u0005\u0005\u0006Շ\u0007\u0004\u0004\u0006\u0006)1\u0007\u0007֖\u0007\u0004\u0004\u0007\u0007\u0004\u0004\u0005\u0007)1Ռ\u0004\u0004\u001f1)1\u0004\u0004\u0004\u0006\u0005\u0004\u001e)1\tՕ\u0001\u0001\u0006Ճ\u0007ϟ\u0004\u0006)1\u0005\u0004\u0005 \u0004\b\u0007\u0006\u0004\u0006)111)1\u0004\u0004\u0004\u0005\u0004\u0006\u0005\u0004%)1\u0007Օ\u0001\u0004\u0004\u0006՟\b׿\u0004\u0006)1\u0006\"\u0007\u0006\bА\u0006)111\t\t"
  },
  {
    "path": "04 Support/DRAZ/I/PAC.PWALK1",
    "content": "\u0016\u001a\u0007S'ӏǯ\u0005\u0005\t\u001eS\u0007\u0014\u0006\u0004\u0001\b\n\u0005)|\f\u0014\u0007\u0016M+\u000f/J\u0007\u000f\u0005\u0006\u00141C\u0004\f\u0004\u0001\u0003\u0001\u0004\u000f\u0004,\b\t\u0013\u001e\u000b\u0010\u0005\u0001\r\u0001\u0001+\u0006\u0007\u001a@\b0\u0006\u0001ࠠ\u000f\b\u0006\r(\b\u0001\u0001\u0004\u0004*C\u000b\u0004\u0005\u0007\u0004\b\t\u0002\u0006\"B\u0006\b\u0004\u0005\u0004\u0005\t\u0006ϯ+B\u0001\u000f\u0014\u0004\u0005\u000b:\u0007\u0002\u0015\u0005\u0005\u000e\u0004+J\u0007\u0004\u0006\n\u0004\u0005\r\u0005\u0005\u0006\u0015JF\u0004\u0006\n\u0005KB\u0006\u0007\n\u0006쨨\u0002KB0<\u001c2\u0005\u0004!<\u0017\u0005\u000b\b\u0005\u0004\u000f\u0004\u0006\u0004\u0006\u000b0\u0017\u0007\b\u0005\u0011\u0004\u0006\u0004\u0005\u0003\u0001\u0004=\u0017\t\u0004+\u0007\u0004\u0004\u0012\u0005=R.=Q\u0005\u0004!=Q\u0004\b\u0004\u0004\u0004\u0006<\u0018\u00040\u0006\u0006\u0005\u0001\u0004\u0002\u0004\u0005<\u0016\u0014\u0005\u0004\u0004\u000e\u0004\u0015\u0004\u0007\n0\u0017\u0005\u0004\u0006\u0005\u0006\u000e.\n0\u00174/\u000b0Q\u0002\u0005\u0006\u0005\u0004\u0010\u000b0\u001a\u0004\u0005\t\t\u0011\u0006\u0006\u0007\u000b\u000e0\u0015\u0007\u0001\u0006\u0004Դ\u0004Â\u0011\u000b\f\u0005\u000e0\u0015\u0004\u0006А\tD\u000e0\u001b3\u0007\u0004\u0005\u0017\r0Q\b\b\u000b\u0006\r4M\u0005\u0006\u000b\u0006\r4}\u0001\f4\f4\u001e\u0007\u001f\n\""
  },
  {
    "path": "04 Support/DRAZ/I/PAC.SHEATHE",
    "content": "_\u0005\b\b\u00049_Հ\n\u00058_\u0001\u0005\u0004\u0005\u0005@_\u001a@_\u001aރ?_\u001f<_\";_\u0002\u0004\b8_\u0005\u0004\u00048_Հ\u0005\r@\u0005\u0006\u0007\u0005A\u001aՅ=\u0007\f,\u001a\u0004ర4\b\u0005\u0004\u0006\f\u0005ё\u000e\t\u000572Հ\u0004\u0010\u0006Հ\u0005\u0005\u00047\u0004\u0004\u0004\u0014\u000b\u0005\b\u0006\u0004\u0005\u000fԕ>Հ\u0005\u0005\u0005\f\u0013\f\u001c\u00041\u0007\u0004\f\u0013\u0013\u001c\u000e\u0004.2ռ\u0004\t\u0005\b՜\b8\u0001\u0005А\u0013\u0007\u0003\u0004Ԕ\u0006\t\u00058Հ\u000f枟\rՀ\u0007\u000e\u0004\u0007Հ\b\u0004\u000f>\u0001\u0006\u0004\u0006𰘖\r\u0016\u000e\u001dи02\u0016\u0010-.\u0012\u0005\u001b\u0018\u0012\u0004\u0004\u00078՜\u0006\u0014ռ\u0004\u0006\u0005\u0006Հ\u0006\u0004\u0006\u0006𪪠8\r\u0004ݝ\f\u0004\u0006\u0006\u0005\u0004\u0015Յ;Հ\t\u0004\b𰘊\fՀ\n\u000f\u000e\u001d\u0004࠰.2\u0019\u000f^Հ\u0006\n\u0004\u0018\u0019o\u0001\u0004\u0004ח\u000e\u001cnՀ\u0004\u0001\u0004\u0007\u0001\f\u001dn\u0018֎Հ\u0004\u0005\u0004\u000b\u0004חՀ\u0001\u0006\u0005\u0018స\u0001\u0004\u0004ח\u000e\u001cnՀ\u0004\u0001\u0004\u0007\u0001\f\u001dn\u0018֎Հ\u0004\u0005\u0004\u000b\u0004חՀ\u0001\u0006\u0005\u0018స\u0006\u000e\u0016\u0010-ąŉ&\r\u0004ݝ\u0006\u0018\u0012\u0004\u0004\u0007\nӰ%Հ\t\u0004\b𰘊\u0006ռ\u0004\u0006\u0005\u0006Հ\u0006\u0004\u0006\u0006𪪠\nȂ\u0001ހ%\u0014\t\u000e\u0004\u0006\u0006\u0005\u0004\u0015Յ\r\u0001%\u001d\u0007\u0004Հ\n\u000f\u000e\u001d\u0004࠰%,\u0019\u0010&\u0005\u0001\u0002ࠀ%,\u0019\u0010\u0004\t\u0005\u0001ǁ%,\u001c\r\u0005\u000b\u0004\u0004\u0004\u0006ʂ%,\u001a\r3Ӂ%,\u001a\f3\u0004%HB\u0005%\u0005%Ѐ\u0005%\u0004$"
  },
  {
    "path": "04 Support/DRAZ/I/PAC.VCAST",
    "content": ")\u000f\u0001.\u0014\u001c\u0004\u0001\b\u0018#\u0011\u0015\t\u0003A\u0001\u0015&\u0011\u0012\u0010\u0012\u0005*\u0006<G\u0002\u0002\u0005\u0004\u0006\u0006\n\u0005\u0007<\u0004\u0001\u0004\b\u0014\u0004\u001f\u0011\u000e<\u0004\u0004\t\u0006\u0004\u0005\u000f\u0005<<\u001e(\u0015\u0004\u0006\u0004\r<H\u0001\u0002\t\n\u0004\f=\u0006L\b\u0005\u0001\u0010=\u0004\u0001\u0003\u000f\u0004:\f?\u0004\u0006\u0004\tM?%T?H\u0004\u0007\u0004\t\u000b\u0004\b@G\u0004\u0007\u0004Ǐ\u0002\u0003\b@\u0004\u0001\u0006\t\r\u0004\u0005*\u0018A\u0004\u0005\n\u000b\u0003\u0012\u0017\u001cB,\u0004\u0011\n'C\u0004A\u0001\u0003\u000e\u0004\u000b@\u0001\u0002\u0010\u000f\u0015\u0007\t\u0004\u0005\u0004\u0006\tA\u0005\b\u0006\u0005\u0005\bJ\u0001@A\n\u000e\u001d@\u0004@\u0001\u0001\u0004\u0005\u0007\b\u000b?\u0001\u0002\u000b\u0006\t\u0004\u0004+\u0007\n?\u0004\u0006\u0004\u0007\u0005\n\u0005\u0004D@B\u0005\u0004\u0011\u0018@H\u0002\u0002\u0006\t\u0005\b@\u000b\f\t\u00052\u0005\u0007B\u0004\u0005\r\u0003\u0004#\u0019D,\u0012\u0004-CG\u0004\u000f\u0004\u0004\u0007?\u0005\u0013\u0006\u0007\b\n\u0007\r\u0001\u0002\n?\u0004\u0006\u0003\u0011\u0001\u0007\u0005!\u0015\u0004A\u001f\b\u0005\u0005\"\u0007\u0007\u0005\u0005\u0006C7\u0016 \nB\u0005\n\u0005\u0005\b\u0007\u0017\u001d\f@\u0005\u0004\u0006\n\u0002\u0007\u0010\u0004\u0004\u0005\n\b\u0012A-\u0014\u000e\u0002\u0001\u0002\n@^\u001a\u0001?~?\u0010\u000b\n\u0004\u0011\u0015\u001b\u0001\r"
  },
  {
    "path": "04 Support/DRAZ/I/PAC.VCAST1",
    "content": ")\u0005\t\u00130\u001c\u0004\u0001\b\u0018#\u0005Շ\u0007\u001a\u00138\u0001\u0015&\u0004\u0001ࠠ\u000f\b\u0006\u0013:<\u0004B\u0001Հ8\u00048\u0004\u0004\b\u0014\u0014\u0001\u0004\u0006\u0006\u0007\t8\u0004\u0004\t\u0006\u0004\u0001\u000e\u0005\u0004\u0005\u0011\u0005\f8\u0004\u0018\u000f\u0015>8\u0004CՀ\"\u000e8\u0004C\u0001\u0004\t\u0004\u0004\u0001\u0004\r8ۀտ\u0007\u0016\u0014\u0005\u0004\u0004\u0006\f\u0004\u000b9\u0004\tʪ\u0001\u0013'\r< ܊\u001d<:C\u0006\u0010\n\r<C\u0005\u0004\t\u0002\u0001\u000b<\u0001\u0006\t\r\u0014\u0015\b\f<\u0005\n\u000b孩\u0002\u0012\u0017\"<(\u0011;=Հ@՟\n\u0004\u0004\u0004\u0004\u0004\u0004\u000e<\u0001\u0002\u0010\r\u0014\u0007\t\t\u0002\u0001\u0004\u000b=\u0005\b\u0006\u0005\u0005Ԕ\u0004䊊\u0011'\u000b=>\n\u000e =Ձ@\u0001\u0001\u0004\u0005\u0007\u0004\u0004\r<\u0001\u0002\u000b\u0006\t\u0004\u0014\u0017\u0005\u0001\f<\u0006\u0004\u0007\u0005\n\u0004а\r<<>\u0005\u0004\u0011\u001c<C\u0001\u0002\u0006\t\u000e<\u000b\f\t\u0005\u001a\u0016ꨨ\u0004\u0004\f=\u0004\u0005\r\u0003\u0004\t\u001a\u000b\u0004\r=)\u00124=C\u0004\u000f\u0004\f=\u0013\u0006\u0015\u000b\u0007\rꪪ\u0001\u000b=՜\u0001\u0001\u0004\u0006\u0016\u0004\u0004\u0004\n\u0017\u001e>\u0015\u0007\b\u0013;>\u0007*\u000f\u0006\n\u0005\f=\u0004\u0004\t\n\u0007\f\u0007\f\u0001\u000b>\u0006\u0005\u0004\u0007\u0007\u0002\u0001\u0011\u0017\u001bA&\u0014\u0005\f\u001e=DՇ\b\u0015\f=D\u0001ࠠ\u000f\b\u0006\f=\u000e\u000b\n\u0004\u0011\t<\r\u0007"
  },
  {
    "path": "04 Support/DRAZ/I/PAC.VCAST2",
    "content": ")\u0005\t\u00130\u001c\u0004\u0001\b\u0018#\u0005Շ\u0007\u001a\u00138\u0001\u0015&\u0004\u0001ࠠ\u000f\b\u0006\u0013:<\u0004B\u0001Ձ:\u00048\u0004\u0004\b\u0014\u0014\u0005\u0004\u0006\u0006\t\t8\u0004\u0004\t\u0006\u0004\u0001\u000e\u0005\u0004\u0005\u0010\u0004訢\f8\u0004\u0018\u000f\u0015>8\u0004C?8\u0004C\u001e\u0004\r8ۀտ\u0007\u0016\u0014Հ\u0001Օ\t\u0007\u0001\u0004\n9\u0004\tʪ\u0001\u0013\u000e\u0006\f\u0004\f< ܊\u001d'Ж\r:C8<C\u0001\u0004\t\u0005\u000b<\u0001\u0006\t\r\u0014\t\b\u0004\u0004\u000b<\u0005\n\u000b孩\u0002\u0012\u0017 <(\u0011<=Հ@Փ\n\u0004\u0004\u0005\u0004\u001c<\u0001\u0002\u0010\r\u0014\u0007\t\n\f=\u0005\b\u0006\u0005\u0005Ԕ\u0004䊊\u0011\u0015\t\u0001\u000b=><=Ձ@Ճ\u0004\r\u0004\u0005\u001b<\u0001\u0002\u000b\u0006\t\u0004\u0014\u0001ம\u0006\r\u0005\u0001\r<\u0006\u0004\u0007\u0005\n\u0004а\r\u0017\u0005쨨\u0002\f<><<CՇ\u0005\u0004\u0011\u0016<\u000b\f\t\u0004\u0014\u0006\u0001\u0007\r=\u0004\u0005\r\u0003Օ\u0005\t\u0017\u0005쨨\u0002\f='\u0010<=C\u0004\u000f\u0004\r=\u0013\u0006\u0015\u000b\u0004\r\u0005\u0004\u000b=՜\u0001\u0001\u0004\u0006\u0016\u0004\u0004\u0004\n\u0017\u0007\u0004\f>\u0015\u0007\b\u0013;>D՟\u0006\u0006\n\b\r=&\f\u0005\u000e\u0005\u0004\u000b>\u0001\u0004\u0005\t\n\u0004\u000f\u0017\t\u0004\tA\n\t\u0007\u0007Ԕ\u0001\u0013\u0005\f\u001e=DՇ\b\u0015\f=D\u0001ࠠ\u000f\b\u0006\f=\u000e\u000b\n\u0004\u0011\t<\r=\u000e\u000b\n\u0004\u0011\t<\r "
  },
  {
    "path": "04 Support/DRAZ/I/PAC.VTURN1",
    "content": "-\u00070\u000e\u000b\f\u0004P\u0007Հ,\u000e\u000b\u0011\bH\u0006'\u000e\n\u0010\u0006H\u0006Հ\u0006\u0004\f\u0004\u000e\n\u0014\u0001\u0010\u0007?\u0006\u0003\u0005\u0006\t\u0004\u0003\u000e0\b?\u0006\u0005\u0004\u0004\u0004\u0015\u000e\n\u0004\b\u0006\u0004\n=\u00060\u000e\u001e\u0001\u0001\u0002\u000b<\u0006Հ࠰\u0007\u0004\u000eՀ\u0001\u0014\u0002\f\u000b<\u0006㷏\n\u0005\u000e\u0007\n\u0001\u0017\n=\u0006Հ\b\u0002\u0004\u0014\u000e\n\u001e\t>\u0006\u0005\"\u000e0\t>\u0006\r\f\n\u0006\u000e\u0005\u0005\u0004\b\t\u0004\t>\u0006\u0005\t\u0006\u000e\u0001\"\u0003\u0007?\u0006Հ\u0002Ǐ\u0004\u0001\u0006\u000b\u000eՀ\u0015\u0002\t\u0006A\u0006\u0007\u0006\u0001\u001c\u000e\b\u0002\u0003\u0005\u0015\b>\u0006\b$\u000eՀ\u000b\u0007\u0005\u000b\n=\u00060\u000e%\u0005\n=\u0006Հ\b\u0006\n\b\u000e\u001b\u0003\t=\u0006\r\u0004\u0005\u0005\u0003\u000e\u0005\u0004\u0004\u0006\u0013\b<\u0006ՇÇ\u0001\u0015\u000e0\n<\u0006\u0001\u001d\u000e\u0007\b\u0004\f\t>\u0005\u0007%\u000eՇ\u001f\u0001\u0001\u0004\t>\u0006\u0005\u001c\u000e\u0005\u0007\t\u0006\t>\u0006Հ\u0004\u0005\u0005\u0006\u0006\u0005\u0001\u000e0\b?\u0006\u0007\u0004\u0001\u0004\u000e\u0004\u0005\u000f\f\b?\u0006\u0005\u0001\u0019\u000eՇ\u0004\u0003\u001e\t>\u0006\u0007!\u000e\u0006\u0004\u000b\t>0\u000e0\u0007?\u00050\u000e0H\u0006Հ\u0005\u001a\u000e0\u0007?\u0006ਨ\n\u0005\u0004߿\u0004\u000e\u0004 \u0006?\u0006՟\u0007\u0005߿\u0005\u0001\u000e՟\u0007\u0005\u0013\u0006B\u0006\u0006\u0018\u000e\u0006\u0012\b઀B\u0005\u0002\u0004\u001c\t\u0005Հ\t\u0013\u0007\u0005ՁD\u00050\t\u0005\u0007\u0012\b\u0002\u0004H\u0006Հ\u0004\b\t\f\u000e\b\u0007\u000e\u0006\u0001A\u0006ꪫ\u0005\u0005\u0011\u0002\u0003\u000e\u000f\u0001\u0017\u0001@\u0006\u0001\u0011\u0002\u000e\u0007\u0006\u0018\u000e\b\u0004ࠀ@\u0006\u0005\u0001\n\u001b\u0015b\u0011\u0005\u001dZ\u0005@\u0006\u0005\u0001\n\u001b\u0015b\u0011\u0005\u0014ZZZ"
  },
  {
    "path": "04 Support/DRAZ/I/PAC.VWALK",
    "content": "\u0016\u001a\u0007S'ӏǯ\u0005\u0005\t\u001eS\u0007\u0014\u0006\u0004\u0001\b\n\u0005)|\f\u0014\u0007\u0016L*\u000f/J\b\u000f\u0005\u0004\u0006\u00141C憀\u0005\u0003\u0006\u0005\u000f\u0004,\u0007\u0007\u0014\b\u0017\f \u0001\r\u0001\u0001+\u0006\u0007\u000b\u0004\u000b\u0002\u0011+\b0\u0005\n\u0007\b\u0004\u0005\u000f\u0002\u0006\u0004\u0005\u0007\u0014\b\u0001\u0001\u0004\u0004*B\b\u0002\t\u0001\u0007\t\u0002\u0006\"B\b\u0004\u0005\u0005\u0005\b\t\u0006ϯ+u\u000b:\u0007\u0002\u0015\u0005\u0005\r\u0004\"J\u0007\u0004\u0006\n\u0004\u0005\u000e\u0007\u0002\u0005\u0005\u0006\u0004\u0004\u0007JB𰠀\u0005\u0001\u0004\u0001\u0005KA\u0004\u0005\u0005\u001eKB1<\u001c2\u0005\u0004!<\u0017\u0005\u000b\b\u0005\u0004\u000f\u0002\u0006\u0004\r\u000b0\u0017\u0007\b\u0005\u0011\u0002\u0003\u0004\u0005=\u0017\t\u0004*Â\t\f\u0005\u0006=Q/=Q\u0005\u0005\u0004!=Q\u0002\u0006\u0004\u0004\u0004\r<\u0018\u0004-\u0002\u0002\u0006<\u0016\u0014\u0005\u0004\u0004\rÃ\u0007\u0004\u000f\t\n0\u0017\u0005\u0004\u0006\u0005\u0006\r.\n0\u00174,\u000b0Q\u0005\u0005\u0006\u0005\u0004\r\u000b0\u001a\u0004\u0005\t\t\u0011\u0004\u0001\u0007\u0002\u000e0\u0015\u0007\u0001\u0006\u0004Դ\u0004Â\u0010\u0002𰐐\u0004\t\u0006\u0005\u000e0\u0015\u0004\u0006А\t\u0014)\u000e0\u001b3\u0003\u0007\u0004\u0005\u0005\u0004\f\r0Q\u0001\u0005\u0004\u0004\r4M\tࠠ\u0016\u0006\r4}\u0001\f4\f4\u001e\u0007\u001f\n\"y8\u0001\fN':\fNr\u001e\u0007\u001f\n\""
  },
  {
    "path": "04 Support/DRAZ/I/PAC.VWALK1",
    "content": "-\u00070\u000e\u000b\f\u0004P\u0007Հ,\u000e\u000b\u0011\bH\u0006'\u000e\n\u0010\u0006H\u0006Հ\u0006\u0004\f\u0004\u000e\n\u0014\u0010\u0007?\u0006\u0003\u0005\u0006\t\u0004\u0003\u000e\u000e\u0004\b\u0006\u0004\b?\u0006\u0005\u0004\u0004\u0004\u0015\u000e\u0004\u001a\u0001\u0006\n=\u00060\u000e\u001b\u0001\u000b<\u0006Հ࠰\u0007\u0004\u000e\u0006\u0001\f\u0013\u000b<\u0006㷏\n\u0005\u000e\t\u0001\u0001\u001c\n=\u0006Հ\b\u0002\u0004\u0014\u000e0\t>\u0006\u0005\"\u000e\n\u0004\b\t\u0004\t>\u0006\r\f\n\u0006\u000eռ\"\u0005\t>\u0006\u0005\t\u0006\u000e\u0001\u0018\u0002\u0007?\u0006Հ\u0002Ǐ\u0004\u0001\u0006\u000b\u000eՀ\u0004\u000b\u0002\u0011\u0006A\u0006\u0007\u0006\u0001\u001c\u000e\b\"\b>\u0006\b$\u000eՀ\u000b\u0007\u0005\u000b\n=\u0006,\u000e%\u0005\n=\u0006Հ\b\u0006\b\b﫫\u000e\u001b\u0003\t=\u0006\u0007\u0004\u0002\u0004\u0005\u000e\u0005\u0004\u0004\u0006\u0013\b<\u0006՜Ç\u0001\u0019\u000e0\n<\u0006\u0007\u0004\u001f\u000e\u0007\b\u0004\f\t>\u0005\t&\u000eՇ\u001f\u0001\u0001\u0004\t>\u0006\u0005\u001c\u000e\u0005\u0007\t\u0006\t>\u0006Հ\u0004\u0005\u0005\u0006\u0006\u0005\u0001\u000e\u0004\u0005'\b?\u0006\u0007\u0004\u0001\u0004\u000e\u0005\u0005\u000f\b?\u0006\u0005\u0001\u0019\u000e՟\u0005\u0001\t\u0001\u000b\u0002\u0001\t>\u0006\u0007!\u000e\t\b\u0010\t>\u0006)\u000e0\u0007?\u0005\u0001\u0005\u001a\u000e0H\u0006Հ\u0007Օ\u0004\u0004\u0001\u000e\u0005(\u0007?\u0006\n\u0004\u0002\u0004\u000e\u0004\u0004\u0014\u0006?\u0006ՀǏ\u0007\u0019\u000e\u0004\u0005\t\u0001\b\u0002\u0001\u0006B\u0006\u0005\u0003\u0004\u001c\u000e%B0\t\u0005Հ\t\u0013\u0007\u0005ՁD\u00050\t\u0005\u0007\u0012\b\u0002\u0004H\u0006Հ\u0004\b\t\f\u000e\b\u0007\u000e\u0006\u0001A\u0006ꪫ\u0005\u0005\u0011\u0002\u0003\u000e\u000f\u0001\u0017\u0001@\u0006\u0001\u0011\u0002\u000e\u0007\u0006\u0018\u000e\b\u0004ࠀ@\u0006\u0005\u0001\n\u001b\u0015b\u0011\u0005\u0014Z"
  },
  {
    "path": "04 Support/DRAZ/IP/IMG.BGPAL2.BK",
    "content": "%M`OaawbqccccccccccdTeefgg:hhhijjk1l4l&m$nVndngnnnoo\u0004@쀀ȍفϑ󙲃̷؞계̪۪Ϫ֪͇݅Ӫ̪تȪɪ̪۪Ϫ֪͇݅Ӫ̪تȪɪ̪۪Ϫ֪͇݅Ӫ̪تȪɪ̪۪Ϫ֪͇݅Ӫ̪تȪɪ̪۪Ϊ݅Ӫ͇̪ȩϑ\u0004\rϑ΅⁀즄𳄀턀؅\u0004<ݻݻݻݻݻݻݻ݆ݻĈрݺݺݺݺݺݺݺݺݸĀݻǻݻݻݻݻݻݻݻݻݻԀ\u0004>ĀĈĈĈĈĈĈĈňЈȈĀĈĈĈĈĈ\u0003\tĈňЈ\u0004\u0003ݻݻ\u0002\u000b\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0004<ĈĈψ꿬꿴֢آܹ޵\u0004\"ĈĈψ꿌꿄꿄꿀꿀¢¢\u0004\u0019ĈĈψČ꓌τ꿄꿀꿀¢¢\u0004<ĈĢĈĢĈĢĈĢĈĢĈޞڞڌڌތ܌ތ݌݌݌ތ܌ތڞڌڌތܿ݀݀ހ܀ހڀڀڀހ܀ހ݀݀݀ހ܀ހڀڀڀސ܀ހ݀\u0004<ĈĢĈĢĈĢĈĢĈĢĈĢڰڰڰްܰްݰݰݰްܰڰڰڰ݀݀݀ހ܀ހڀڀڀހ܀ހ݀݀݀ހ܀ހڀڀڀހ܀ހ\u0004\u0013݀݀ހ܀ހڀڀځށ܁ރ݃݇ݏ޿ժ\u0004\u0013݀݀ހ܀ހڀڀڀހ܀ހ݀݀݀ހժ\u0004*ĀĈպժȡպժ\u0001\u0001\u0004<ĈĈĈꀀ\u0004<ĀĈЀЀЀԪ򄒢ȠԪ\u0004\fĈĈǈň\u0004@쁀ȝ󀀎ك瑻℘ϣ󹄎턛ۅ℘ϣ󹄎턛ۅ℘ϣ󹄎ۅ℘ϣ󹄎턛ۅ℘ϣ󹄎턛ۅ윲ͣ󦄎ٹ瑛\u0004\f瑛𜲇℀Σไ\u0001\u0001\u0004<ݻݻݻݻݻݻݻ݆ݻĈрݺݺݺݺݺݺݺݺݸĀݻǻݻݻݻݻݻݻݻݻݻԀ\u0004?ăԇԇԇԇԇԇԇԇԇԇԇԇԇԇԇԇԇԇԇԇԇԇԇԇԇсՇ̆Ćǆ͆ۆ⼆ϣ̆Ćǆ͆󆝲ۆ⼆ͣ̆ٹ䆱Ćǆ͆\u0004\f܇̣̇䆀ćǆ͆󆀀܇\u0004\u0003ݻݻ\u0001\u0001\u0004\fĀĈ\u0004\u0013ժժȡժժ\u0004)ĀĈՊЪȡՊЪ\u0004\u0015ՊЪȡՊЪઝ\u0003<ĀĈĈĈĂ\u0004\rݻĈĠĈĀĈĀĀĀ\u0004\u0003ݻ\u0004<ĈĢĈĢĈĢĈĢĈĢĈǈֆֆֆֆֆֆֆֆֆֆֆ\u0004<ĀĈؚ蝀ȘȘȘ蝀ؚؚ蝀ȘȘȘ蝀ؚؚ蝀ȘȘȘ蝀ؚؚ蝀ȘȘȘ蝀ؚؚ蝀ȘȘȘ蝀ؚؚ\u0004\u000fֆݻ֪ժݒĈĈĈ֪ժݻ\u0004\u000fȘȘȘߚݻժ՚ĘĘĘժ՚ݻ\u0003*ĀĈ\u0001\u000fԔ\u0001\u000fԜЀ\u0001\u000f\u0001\u000fАՕ\u0001\u0010ؘА\u0004<ĈĈψܹ޵\u0004\u0016𐀀\u0004\"ĈĈψ󿀀㿀ỀṀ\u0004\u000e𐀀\u0004\u0019ĈĈψτ󿀀㿀ỀṀ\u0003\u0007\u0004\u0012ĈĈ̓ĄψĄ牑ƧĀĀ㓀ˀṀ\u0002\u0005\u0004\u0010ĈĄňĄǈƢĀ£Āǀᑀ\u0001\u0001\u0001\u0010АԐА\u0002\u0010ȀĀԀЀ\u0002\u000fЀрՀԀ\u0002\u0010рЀЀԀ\u0002<Ĝ\u0002<Ĝƀ\u0002<Ĝƀ\u0002<Ĝ̓τƀ\u0002<ČǄǀƀ\u0001\u0001\u00064ǈĈڇ膠ĈʆȆĈʇˆܻꅀݛܻܻچ놀ȆʇȆꅀĘݻۆꆀˆʇˆ腀؆膀ȆȇȆ؅؇膀ȆȆȇ膀؅؆膀ȆȇȆ\u0006\u0004ݻ̙ժժ̙\u0006\u0004ݻ̙ժժ̙\u0006\u0004ݻݻժժݻ\u0001\u0001\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0006\u0007𙘀\n\u0011ԪժժժժԪժժժժ\u000e\u001bԪժժժժժժƼ憀憀澀憀憀ǧ́ၳ͍͍́Ԫժժժժժժ\u0010\u0011Ԫժժժժժժժ烿ᶶƱƱッƱᶶƱ烃Ԫժժժժժժժ\u000e\u000fժժժժժժժ猼栁漆̍憞澶栁짌猼ժժժժժժժ"
  },
  {
    "path": "04 Support/DRAZ/IP/IMG.BGTAB.DUN2",
    "content": "2g`iaabccccccccccdteeeeee\u0006f\tfSfffggghi\u0016j$j'jjok!lllllllllllllll\u0004@쀀ȍفϑ󙲃̷؞계̪۪Ϫ֪͇݅Ӫ̪تȪɪ̪۪Ϫ֪͇݅Ӫ̪تȪɪ̪۪Ϫ֪͇݅Ӫ̪تȪɪ̪۪Ϫ֪͇݅Ӫ̪تȪɪ̪۪Ϊ݅Ӫ͇̪ȩϑ\u0004\rϑ΅⁀즄𳄀턀؅\u0004<ݻͻݻͻݻͻݻͻݻͻݻͻݻͻݻŻݻܻݻܻݻܻݻܻݻܻݻܻݻܻݻܻݻܻݻĈܻݛݻݛݻݛݻݛݻݛݻݛݻݛݻݛݻݛܻĨ\u0004>ĀĈĈĈĀĈĀĈĀĈĀĈĀňĀЈĀĀĠŀĈЀĈĈŀĈŀĈŀĈŀĈŀňŀЈŀŀĠŀĈЀĈĈĀĈĀĈĀĈĀň\u0003\tЈĀĀŀ\u0004\u0003ݻͻ\u0002\u000b\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0004<ĈĈĈĈ꿬꿴֢آܹ޵\u0004\"ĈĈĈĈ꿌꿄꿄꿀꿀¢¢\u0004\u0019ĈĈĈĈ꣌ꏄ꿄꿀꿀¢¢\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0002\u000fԊ\u0001\u0001\u0004\u0012ĈĈЈȁ򽀀\u0003\u0012ӆƋĆ\u0004\fĈĈǈň\u0004@쁀ȝ󀀎ك瑻℘ϣ󹄎턛ۅ℘ϣ󹄎턛ۅ℘ϣ󹄎턛ۅ℘ϣ󹄎턛ۅ℘ϣ󹄎턛ۅ윲ͣ󦄎ٹ瑛\u0004\f瑛𜲇℀Σไ\u0001\u0001\u0004<ݻͻݻͻݻͻݻͻݻͻݻͻݻͻݻŻݻܻݻܻݻܻݻܻݻܻݻܻݻܻݻܻݻܻݻĈܻݛݻݛݻݛݻݛݻݛݻݛݻݛݻݛݻݛܻĨ\u0004?󀀀ك恀✀ϣ̃ćǆ͆󆜲ۇ⼆ϣ̇ćǆ͆󆜲ۇ⼆ϣ̇ćǆ͆󆜲ۇ⼆ϣ̇ćǆ͆󆜲ۇ⼆ϣ̇ćǆ͆󆜲ۇ⼆ͣ̇ٹ䆱ćǆ͆\u0004\f܇̣̇䆀ćǆ͆󆀀܇\u0004\u0003ݻͻ\u0001\u0001\u00041ĀĈĈĈĀꕀծբ݊\u0004 ׂՠ݂\u0004,ĀĈĈĈĀգĪ׀ծ\u0004!ՂЪݪՀ\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\b\u0001\b\u0001\b\u0001\bЀЀ\u0003\nӀӀӀр׀߀ЀЀ\u0003\b̃ӌӌӌэׇߜ\u0003\u0007̃ӌӌӌэׇ\u0003\u0006̃ӌӌӌэ\u0003\u0005̃ӌӌӌ\u0003\u0004̃ӌӌ\u0003\u0003̃ӌ\u0003\u0002̃\u0003\u0001\u0003\u000eĈԀЀЀЀЀЀЀЀЀЀЀЀ\u0002\u0004ĀĈ\u0001\u0003\u0001\u0001\u0003\fЀЄЄЄЄЌЌЌэчќ\u0003\n\u0003;݈݂ݢݢݢݢݢݢݢݨ݂ݢݢݢݢݢݢݢݨ݂ݢݢݢݢݢݢݢ\u0001<\u0001\u0001\u0003;ઝઝ\u0003?ઝ\u0003<ĀĈĈĈĂ\u0004\rݻĈĈĈĈĈ\u0004\u0003ݻݻ\u0004<ĈĈĈĈĈĈĈĈĈĈĈĈ􎀀􎀀܋܋􎀀􎀀܋܋􎀀􎀀܋܋􎀀􎀀܋܋􎀀􎀀܋􎀀\u0004<ĀĈĈĈĀĈ񿀀лл𮀀𮀀лл𮀀𮀀лл𮀀𮀀лл𮀀𮀀лл𮀀𮀀л\u0004\u000f􎀀ܻժݻĈĈĈݻժܻ\u0004\u0010лݻժݻĈĈĈݻժݻ\u0003*ĀĈĈĈĀ\u0001\u000fԔ\u0001\u000fԜЀ\u0001\u000f\u0001\u000fАՕ\u0001\u0010ؘА\u0004<ĈĈĈĈǈܹ޵\u0004\u0016𐀀\u0004\"ĈĈĈĈǈ󿀀㿀ỀṀ\u0004\u000e𐀀\u0004\u0019ĈĈĈĈǈ󿀀㿀ỀṀ\u0003\u0007\u0004\u0012ĈĈ܈̣ĈĈ瑢ǈ󈀀㣀ዀṀ\u0002\u0005\u0004\u0010ĈĈĈĈÈዀᡀ\u0001\u0001\u0001\u0010АԐА\u0002\u0010ȀĀԀЀ\u0002\u000fЀрՀԀ\u0002\u0010рЀЀԀ\u0002<Ĉ\u0002<Ĉƀ\u0002<Ĉƀ\u0002<Ĉ܈̣ƀ\u0002<Ĉƀ\u0001\u0001\u00063ĈĈĈьĈݻՋݻݻݻ׌ĈĈԋՌы񍀀􎀀ЌЌЍЌ\u0006\u0004̙݇ժՆ̙\u0006\u0004߻̙ߪժ̙\u0006\u0004ݻժժժݻ\u0001\u0001\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0006\u0007𙘀\n\u0011ԪժժժժԪժժժժ\u000e\u001bԪժժժժժժƼ憀憀澀憀憀ǧ́ၳ͍͍́Ԫժժժժժժ\u0010\u0011Ԫժժժժժժժ烿ᶶƱƱッƱᶶƱ烃Ԫժժժժժժժ\u000e\u000fժժժժժժժ猼栁漆̍憞澶栁짌猼ժժժժժժժ"
  },
  {
    "path": "04 Support/DRAZ/IP/IMG.BGTAB.PAL1",
    "content": "~`1aa\u0001b?bqbbcwddde\u0019f?fBfEffff\u0015g\u0007h\u0015h#h1h?hMh?iuii\tj;jmjjjj\u0012k`kkk*lll2mdmrmmmmmm\u000en.nNnnnnnnnnnn\u0005o\no6o@oEoHonoo\u0004pBp`p\u0013qqrrrstt,uuuu\tv\u001av,v\u001ewxw\u0002x<xxx\u0003y\u000fyQyTyfyyyyDzz8{{,|/|i}}}}s~|~~~~~~~~~~~!3\u0007\u0004\fĈĠĈĀĈĀĀĀ\u0004'ĀĈժժȡժժ\u0004\f\u0004\u000f\u0004\fĈĠĈĀĀĀĀ\u0003\fĀĈ\u0004;ĈĠĿѿĀĀĀĀĀ\u0004<ĀÈժժ\u0002\u0003\u0004\u001dĈꈑĈꀑĈꀐꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀ\u0004<ĀҀІІІІІІІІІІІІІІІІІІІІЮІІ΀ІІЮІІІІІІІІІІІІІІІІІІІІІ\u0004\fІІІІІІІІІІІІ\u0004\tІІІІІІІІӆ\u0001\u0001\u0001\u0001\u0004\u001dĈ߀݀Հ̀݀݀݀݀瀀瀀瀀瀀瀀瀀\u0004\u0006\u0004\u0006ĈĈĈ\u0004\tĠĀ\u0004<Ĉ֐֊ĖĖՐ؊⪖րւ֊֪\u0004\u0003ݻݻ\u0004\u0003\u0004\u0003ꀀꀀ\u0004\u0003ݻĈ\u0004\u0003ݻ\u0004<πժǂȺǂժ\u0004\rĀĈ\u0002?\u0003\u0006\u0004\fĢĈĠĈĀĈĀĀĀ\u0004\fѻĈĀĈĀĀĀĀ\u0004\r׻נĢĈĠĀр݀\u0003\rĠĀ\u0004\u000bȑĈĠĉрТĀĀĀ\u0002\u000bĈĈ\u0004\u0013ȑȑиĠĠ\u0002\u0012˓ŊÊ\u0004\u001bȑ๺ุ̰Ȱذ\u0002\u001a˓Ëǋ\u0004\u001aȑฺุ̰Ȱذ\u0002\u0019˓Ëǋ\u0004\u001aȑฺุͰ̰Ȱ\u0002\u0018˓Ëǋ\u0004\u0003ݻ\u0004\u0003\u0004\u0003ݻݛ\u0003\nӀӀӀр׀܀Ѐ\u0003\nߐӀӀӀӀрԀЀ\u0003\n׀߀ÀӀӀӀӀЀЀ\u0003\nр׀߀ÀӀӀӀЀЀ\u0003\nӀр׀߀ÀӀӀЀЀ\u0003\nӀӀр׀߀ÀӀЀЀ\u0003\ñӀӀӀр׀߀ÀЀЀ\u0003\nӀӀӀр׀߀ЀЀ\u0003\b̃ӌӌӌэׇߜ\u0003\u0007̃ӌӌӌэׇ\u0003\u0006̃ӌӌӌэ\u0003\u0005̃ӌӌӌ\u0003\u0004̃ӌӌ\u0003\u0003̃ӌ\u0003\u0002̃\u0003\u0001\u0003\u000eĀҀЀЀЀЀЀЀЀЀЀЀЀ\u0002\u0004\u0001\u0003\u0001\u0001\u0003\fЀЄЄЄЄЌЌЌэчќ\u0003\n\u0002:\u0001<\u0004\u0007ժժȡժժ\u0003;ઝઝ\u0003?ઝ\u0003<ĀĈ\u0004\rݻĈĠĈĀĈĀĀĀ\u0004\u0003ݻ\u0004<ĈĢĈĢĈĢĈĢĈĢĈǈֆֆֆֆֆֆֆֆֆֆֆ\u0004<ĀĈؚ蝀ȘȘȘ蝀ؚؚ蝀ȘȘȘ蝀ؚؚ蝀ȘȘȘ蝀ؚؚ蝀ȘȘȘ蝀ؚؚ蝀ȘȘȘ蝀ؚؚ\u0004\u000fֆݻ֪ժݒĈĈĈ֪ժݻ\u0004\u000fȘȘȘߚݻժ՚ĘĘĘժ՚ݻ\u0004*ĀĈպժȡպժ\u0001\u000fԔ\u0001\u000fԜЀ\u0001\u000f\u0001\u000fАՕ\u0001\u0010ؘА\u0004<ĈĈψܹ޵\u0004\u0016𐀀\u0004\"ĈĈψ󿀀㿀ỀṀ\u0004\u000e𐀀\u0004\u0019ĈĈψτ󿀀㿀ỀṀ\u0003\u0007\u0004\u0012ĈĈ̓ĄψĄ牑ƧĀĀ㓀ˀṀ\u0002\u0005\u0004\u0010ĈĄňĄǈƢĀ£Āǀᑀ\u0001\u0001\u0001\u0010АԐА\u0002\u0010ȀĀԀЀ\u0002\u000fЀрՀԀ\u0002\u0010рЀЀԀ\u0002<Ĝ\u0002<Ĝƀ\u0002<Ĝƀ\u0002<Ĝ̓τƀ\u0002<ČǄǀƀ\u0001\u0001\u00064ǈĈڇ膠ĈʆȆĈʇˆܻꅀݛܻܻچ놀ȆʇȆꅀĘݻۆꆀˆʇˆ腀؆膀ȆȇȆ؅؇膀ȆȆȇ膀؅؆膀ȆȇȆ\u0006\u0004ݻ̙ժժ̙\u0006\u0004ݻ̙ժժ̙\u0006\u0004ݻݻժժݻ\u0003>ĀĈĈĈĈĈĈĈňЈĀĈĈĈĈĈ\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0006\u0007𙘀\n\u0011ԪժժժժԪժժժժ\u000e\u001bԪժժժժժժƼ憀憀澀憀憀ǧ́ၳ͍͍́Ԫժժժժժժ\u0010\u0011Ԫժժժժժժժ烿ᶶƱƱッƱᶶƱ烃Ԫժժժժժժժ\u000e\u000fժժժժժժժ猼栁漆̍憞澶栁짌猼ժժժժժժժ̍憞澶栁짌猼ժժժժժժժ栁짌猼ժժժժժժժ"
  },
  {
    "path": "04 Support/DRAZ/IP/IMG.BGTAB.PAL2",
    "content": "2g`iaabccccccccccdneefg\u0006hThthwhzh}hhiiiijjjkk ll\u001cmmhnnoDpVppZqqqqqq\u0004@쀀ȍفϑ󙲃̷؞계̪۪Ϫ֪͇݅Ӫ̪تȪɪ̪۪Ϫ֪͇݅Ӫ̪تȪɪ̪۪Ϫ֪͇݅Ӫ̪تȪɪ̪۪Ϫ֪͇݅Ӫ̪تȪɪ̪۪Ϊ݅Ӫ͇̪ȩϑ\u0004\rϑ΅⁀즄𳄀턀؅\u0004<ݻݻݻݻݻݻݻ݆ݻĈрݺݺݺݺݺݺݺݺݸĀݻǻݻݻݻݻݻݻݻݻݻԀ\u0004>ĀĈĈĈĈĈĈĈňЈȈĀĈĈĈĈĈ\u0003\tĈňЈ\u0004\u0003ݻݻ\u0002\u000b\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0004<ĈĈψ꿬꿴֢آܹ޵\u0004\"ĈĈψ꿌꿄꿄꿀꿀¢¢\u0004\u0019ĈĈψČ꓌τ꿄꿀꿀¢¢\u0004<ĈĢĈĢĈĢĈĢĈĢĈޞڞڌڌތ܌ތ݌݌݌ތ܌ތڞڌڌތܿ݀݀ހ܀ހڀڀڀހ܀ހ݀݀݀ހ܀ހڀڀڀސ܀ހ݀\u0004<ĈĢĈĢĈĢĈĢĈĢĈĢڰڰڰްܰްݰݰݰްܰڰڰڰ݀݀݀ހ܀ހڀڀڀހ܀ހ݀݀݀ހ܀ހڀڀڀހ܀ހ\u0004\u0013݀݀ހ܀ހڀڀځށ܁ރ݃݇ݏ޿ժ\u0004\u0013݀݀ހ܀ހڀڀڀހ܀ހ݀݀݀ހժ\u0002\u000fԊ\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0004@쁀ȝ󀀎ك瑻℘ϣ󹄎턛ۅ℘ϣ󹄎턛ۅ℘ϣ󹄎ۅ℘ϣ󹄎턛ۅ℘ϣ󹄎턛ۅ윲ͣ󦄎ٹ瑛\u0004\f瑛𜲇℀Σไ\u0001\u0001\u0001\u0001\u0004=󀀀ك恠✠ϣ̣ħǆͦ󆜲ۧ⼆ϣ̇ćǦ͆✠ǜسׯϟʗޜ񀀀\u0001\u0001\u0001\u0001\u0004:ꀀꀀꀀժꑢĈꑢĈꑢĈꑢĈꑢĈꐢĈꐢꐢꁢꇈ꜠ٳׯϟ˗Ꝼꀀꀀꀀꀀꀀ\u0004\fĀĈ\u0004\u0013ժժȡժժ\u0004)ĀĈՊЪȡՊЪ\u0004\u0015ՊЪȡՊЪ\u00044ĄĄĄĄĄĄĄĄĄĄÂĀāǂ܀\u0004\u001eĈĠĿѿĀĀĀĀĀ\u0002;\u0004:ۀπۀπ۠π۠ρۡߛߛۂφۄۙ۳ۿޝޛ\u0004\u001eժժĈĈĈĈĈĈĈĈĈĈĈĈĈĈĈ✠Ĝٳׯϟ˗ޝ\u0004\u0004ψۀ\u0004 ժժĈĈĈĈĈĈĈĈĈĈĈĈĈĈĈĈĈ‑ĈǇ˗\u0004 ժժĈĈĈĈĈĈĈĈĈĈĈĈĈĈĈĈĈ③ĸĈڑĈĈΑ߄ޏ񀀀\u0004\u0016\u0001\b\u0001\b\u0001\b\u0001\b"
  },
  {
    "path": "04 Support/DRAZ/IP/IMG.BGTAB.RED1",
    "content": "~`1aWaaaa\u001fb\rcccAd3eeeeee\u0007f!f;fafSgagog}gggOhRhhh\u0018iJiiiii=jcjj\u0007kqkk\u000flAlOl]lklllll\u000bm+mKmkmmmmmmmmm\u0013n\u001dn\"n&nLnlnn o#oopKqqqrssssttttttu;vvvew|www\u0014x\u0017x)xKxkxx\u0007yyyuzzz,|F|`|z|}|||||||||||\u0003}}+=\u0011\u0004\fĈĠĈĀĈĀĀĀ\u0003\fĀĈ\u0004\f\u0004\u000f\u0004\fĈĠĈĀĀĀĀ\u0003\fĀĈ\u0004;ĈĠĿѿĀĀĀ\u0003<Āň\u0002\u0003\u0004\u001dĈĈĈ\u0004<Ā\u0004\f\u0004\t\u0001\u0001\u0001\u0001\u0004\u001dĈ߀݀Հ̀݀݀݀݀瀀瀀瀀瀀瀀瀀\u0004\u0006\u0004\u0006ĈĈĈ\u0004\tĠĀ\u0004<Ĉ֐֊ĖĖՐ؊⪖րւ֊֪\u0004\u0003ݻݻ\u0004\u0003ݻݻ\u0004\u0003\u0004\u0003ݻĈ\u0004\u0003ݻ\u0003<π\u0001\u0001\u0002?\u0003\u0006\u0004\fĢĈĠĈĀĈĀĀĀ\u0004\fѻĈĀĈĀĀĀĀ\u0004\r׻נĢĈĠĀр݀\u0003\rĠĀ\u0004\u000bȑĈĠĉрТĀĀĀ\u0002\u000bĈĈ\u0004\u0013ȑȑиĠĠ\u0002\u0012˓ŊÊ\u0004\u001bȑ๺ุ̰Ȱذ\u0002\u001a˓Ëǋ\u0004\u001aȑฺุ̰Ȱذ\u0002\u0019˓Ëǋ\u0004\u001aȑฺุͰ̰Ȱ\u0002\u0018˓Ëǋ\u0004\u0003ݻ\u0004\u0003\u0004\u0003ݻݛ\u0003\náéǩܩ\u0003\nïáéĩЩ\u0003\nëïáé\u0003\nëïá\u0003\nߩëï\u0003\nǩߩë\u0003\nǩߩ\u0003\néǩߩ\u0003\béǩߩëïá\u0003\u0007éǩߩëï\u0003\u0006éǩߩë\u0003\u0005éǩߩ\u0003\u0004éǩߩ\u0003\u0003éǩ\u0003\u0002é\u0003\u0001é\u0003\u000eĀ\u0002\u0004\u0001\u0003\u0002\u0001\u0003\fèèè\u0003\nÀÀÀ\u0002:\u0001<\u0001\u0001\u0003;ઝઝ\u0003?ઝ\u0003<ĀĈ\u0004\rݻĈĠĈĀĈĀĀĀ\u0004\u0003ݻ\u0004<ĈĢĈĢĈĢĈĢĈĢĈǈֆֆֆֆֆֆֆֆֆֆֆ\u0004<ĀĈؚ蝀ȘȘȘ蝀ؚؚ蝀ȘȘȘ蝀ؚؚ蝀ȘȘȘ蝀ؚؚ蝀ȘȘȘ蝀ؚؚ蝀ȘȘȘ蝀ؚؚ\u0004\u000fֆݻ֪ժݒĈĈĈ֪ժݻ\u0004\u000fȘȘȘߚݻժ՚ĘĘĘժ՚ݻ\u0004*ĀĈպժȡպժ\u0001\u000fԔ\u0001\u000fԜЀ\u0001\u000f\u0001\u000fАՕ\u0001\u0010ؘА\u0004<ĈĈψܹ޵\u0004\u0016𐀀\u0004\"ĈĈψ󿀀㿀ỀṀ\u0004\u000e𐀀\u0004\u0019ĈĈψτ󿀀㿀ỀṀ\u0003\u0007\u0004\u0012ĈĈ̓ĄψĄ牑ƧĀĀ㓀ˀṀ\u0002\u0005\u0004\u0010ĈĄňĄǈƢĀ£Āǀᑀ\u0001\u0001\u0001\u0010АԐА\u0002\u0010ȀĀԀЀ\u0002\u000fЀрՀԀ\u0002\u0010рЀЀԀ\u0002<Ĝ\u0002<Ĝƀ\u0002<Ĝƀ\u0002<Ĝ̓τƀ\u0002<ČǄǀƀ\u0001\u0001\u00064ǈĈڇ膠ĈʆȆĈʇˆܻꅀݛܻܻچ놀ȆʇȆꅀĘݻۆꆀˆʇˆ腀؆膀ȆȇȆ؅؇膀ȆȆȇ膀؅؆膀ȆȇȆ\u0006\u0004ݻ̙ժժ̙\u0006\u0004ݻ̙ժժ̙\u0006\u0004ݻݻժժݻ\u0001\u0001\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0006\u0007𙘀\n\u0011ԪժժժժԪժժժժ\u000e\u001bԪժժժժժժƼ憀憀澀憀憀ǧ́ၳ͍͍́Ԫժժժժժժ\u0010\u0011Ԫժժժժժժժ烿ᶶƱƱッƱᶶƱ烃Ԫժժժժժժժ\u000e\u000fժժժժժժժ猼栁漆̍憞澶栁짌猼ժժժժժժժ"
  },
  {
    "path": "04 Support/DRAZ/IP/IMG.BGTAB.RED2",
    "content": "%M`Oaawb3cPc^cvc|ccccccd\u0016e|enf`ggghh\u001fixiijjjkl\u0003m\u0011m\u0014mmn*oo\u0004@쀀ȍفϑ󙲃̷؞계̪۪Ϫ֪͇݅Ӫ̪تȪɪ̪۪Ϫ֪͇݅Ӫ̪تȪɪ̪۪Ϫ֪͇݅Ӫ̪تȪɪ̪۪Ϫ֪͇݅Ӫ̪تȪɪ̪۪Ϊ݅Ӫ͇̪ȩϑ\u0004\rϑ΅⁀즄𳄀턀؅\u0004<ݻݻݻݻݻݻݻ݆ݻĈрݺݺݺݺݺݺݺݺݸĀݻǻݻݻݻݻݻݻݻݻݻԀ\u0003>ĀĈĈĈĈĈĈĈňЈĀĈĈĈĈĈ\u0003\tĈňЈ\u0004\u0003ݻݻ\u0002\u000b\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0004<ĈĈψ꿬꿴֢آܹ޵\u0004\"ĈĈψ꿌꿄꿄꿀꿀¢¢\u0004\u0019ĈĈψČ꓌τ꿄꿀꿀¢¢\u0004<ĈĢĈĢĈĢĈĢĈĢĈޞڞڌڌތ܌ތ݌݌݌ތ܌ތڞڌڌތܿ݀݀ހ܀ހڀڀڀހ܀ހ݀݀݀ހ܀ހڀڀڀސ܀ހ݀\u0004<ĈĢĈĢĈĢĈĢĈĢĈĢڰڰڰްܰްݰݰݰްܰڰڰڰ݀݀݀ހ܀ހڀڀڀހ܀ހ݀݀݀ހ܀ހڀڀڀހ܀ހ\u0004\u0013݀݀ހ܀ހڀڀځށ܁ރ݃݇ݏ޿ժ\u0004\u0013݀݀ހ܀ހڀڀڀހ܀ހ݀݀݀ހժ\u0004*ĀĈպժȡպժ\u0001\u0001\u0004\u001dĈĈ䁜ހ߃ࡶ߳옿΀𗀀耀\u0003\u001dĀáƋУĆā\u0004\fĈĈǈň\u0004@쁀ȝ󀀎ك瑻℘ϣ󹄎턛ۅ℘ϣ󹄎턛ۅ℘ϣ󹄎턛ۅ℘ϣ󹄎턛ۅ℘ϣ󹄎턛ۅ윲ͣ󦄎ٹ瑛\u0004\f瑛𜲇℀Σไ\u0001\u0001\u0004<ݻݻݻݻݻݻݻ݆ݻĈрݺݺݺݺݺݺݺݺݸĀݻǻݻݻݻݻݻݻݻݻݻԀ\u0004?󀀀ك恀✀ϣ̃ćǆ͆󆜲ۇ⼆ϣ̇ćǆ͆󆜲ۇ⼆ϣ̇ćǆ͆󆜲ۇ⼆ϣ̇ćǆ͆󆜲ۇ⼆ϣ̇ćǆ͆󆜲ۇ⼆ͣ̇ٹ䆱ćǆ͆\u0004\f܇̣̇䆀ćǆ͆󆀀܇\u0004\u0003ݻݻ\u0001\u0001\u0004'ĀĈժժȡժժ\u00044ĄĄĄĄĄĄĄĄĄĄÂĀāǂ܀\u0004)ĀĈՊЪȡՊЪ\u00044ĄĄĄĄĄĄĄĄĄĄÂĀāǂ܀"
  },
  {
    "path": "04 Support/DRAZ/IP/IMG.BGTAB.TWR1",
    "content": "~`1aWaaaa\u001fb\u0011cccWdIe{eeeeZftfffgggggghh%i9ikiiii*jBjjj$kZkkkbllllll\u0002m\"mBmbmmmmmm\u0007n\u0018n&n1n9n>njntnyn|nnnuoooip(qq\u0014r\"r\u0014s\u0006tDtt\u0006u\u0017u(u9uJu\\uNvv2wlwww3x?xxxxxxxtyyhzz\\{_{||||||||\b}\u0011}\u001a}#},}5}>}j}\u0016~x\u0004\fĈĈĈĈĈ\u0003\fĀĈĈĈ\u0004\f\u0004\u000f\u0004\fĈĈĈĈĈ\u0003\fĈĈĈ\u0004<Ĉ݈݂ݢݢݢݢݢݢݢݨ݂ݢݢݢݢݢݢݢݨ݂ݢݢݢݢݢݢݢ\u0003<ĀĈĈĀ\u0003\b\u0004\u001dĈꐢꀢꀈꀠꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀ\u0004<ĀĈĈԀІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІ\u0004\fІІІІІІІІІІІІ\u0003\tЇП\u0003\rĀĈĈĈ\u0003\u000bĀĈĈĈ\u0004\u001dĈ߀݀Հ̀݀݀݀݀瀀瀀瀀瀀瀀瀀\u0004\u0006\u0004\u0006ĈĈĀ\u0004\tݻлݻĈ\u0004<ĈĈՐ؊⪈լ֬ج଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀ଁଅକՀ\u0004\u0003ݻݻݻ\u0004\u0003ݻݻ\u0004\u0003ꀀ\u0004\u0003ݻݻĈ\u0004\u0003ݻݻ\u0003<ŀĈ\u0001\u0001\u0002?\u0003\u0006\u0004\fĈĈĈĈĈĈ\u0004\fĈĈĈ\u0004\rݻлݻĈ\u0003\rĮݻĈĈ\u0004\u000bĈĈň񢀀Ј\u0002\u000bǀĈĈĈ\u0004\u0013Ĉ됢Ć񤀱\u0002\u0012ǀƈƊĆ\u0004\u001bĈѣċ둣Ň𠠈\u0002\u001aǀÈǎ\u0004\u001aĈѣ둧ņ𠠈\u0002\u0019ǀǈǎ\u0004\u001aĈѣ둧ņ𰠈𠠈\u0002\u0018ǀǈǎ\u0004\u0003ݻݻ\u0004\u0004ݻݻݻ\u0004\u0003ݻݻܻ\u0003\nӀӀӀр׀܀Ѐ\u0003\nߐӀӀӀӀрԀЀ\u0003\n׀߀ÀӀӀӀӀЀЀ\u0003\nр׀߀ÀӀӀӀЀЀ\u0003\nӀр׀߀ÀӀӀЀЀ\u0003\nӀӀр׀߀ÀӀЀЀ\u0003\ñӀӀӀр׀߀ÀЀЀ\u0003\nӀӀӀр׀߀ЀЀ\u0003\b̃ӌӌӌэׇߜ\u0003\u0007̃ӌӌӌэׇ\u0003\u0006̃ӌӌӌэ\u0003\u0005̃ӌӌӌ\u0003\u0004̃ӌӌ\u0003\u0003̃ӌ\u0003\u0002̃\u0003\u0001\u0003\u000eĈԀЀЀЀЀЀЀЀЀЀЀЀ\u0002\u0004ĀĈ\u0001\u0003\u0001\u0001\u0003\fЀЄЄЄЄЌЌЌэчќ\u0003\n\u0003;݈݂ݢݢݢݢݢݢݢݨ݂ݢݢݢݢݢݢݢݨ݂ݢݢݢݢݢݢݢ\u0001<\u0001\u0001\u0003;ઝઝ\u0003?ઝ\u0003<ĀĈĈĈĂ\u0004\rݻĈĈĈĈĈ\u0004\u0003ݻݻ\u0004<ĈĈĈĈĈĈĈĈĈĈĈĈ􎀀􎀀܋܋􎀀􎀀܋܋􎀀􎀀܋܋􎀀􎀀܋܋􎀀􎀀܋􎀀\u0004<ĀĈĈĈĀĈ񿀀лл𮀀𮀀лл𮀀𮀀лл𮀀𮀀лл𮀀𮀀лл𮀀𮀀л\u0004\u000f􎀀ܻժݻĈĈĈݻժܻ\u0004\u0010лݻժݻĈĈĈݻժݻ\u0003*ĀĈĈĈĀ\u0001\u000fԔ\u0001\u000fԜЀ\u0001\u000f\u0001\u000fАՕ\u0001\u0010ؘА\u0004<ĈĈĈĈǈܹ޵\u0004\u0016𐀀\u0004\"ĈĈĈĈǈ󿀀㿀ỀṀ\u0004\u000e𐀀\u0004\u0019ĈĈĈĈǈ󿀀㿀ỀṀ\u0003\u0007\u0004\u0012ĈĈ܈̣ĈĈ瑢ǈ󈀀㣀ዀṀ\u0002\u0005\u0004\u0010ĈĈĈĈÈዀᡀ\u0001\u0001\u0001\u0010АԐА\u0002\u0010ȀĀԀЀ\u0002\u000fЀрՀԀ\u0002\u0010рЀЀԀ\u0002<Ĉ\u0002<Ĉƀ\u0002<Ĉƀ\u0002<Ĉ܈̣ƀ\u0002<Ĉƀ\u0001\u0001\u00063ĈĈĈьĈݻՋݻݻݻ׌ĈĈԋՌы񍀀􎀀ЌЌЍЌ\u0006\u0004̙݇ժՆ̙\u0006\u0004߻̙ߪժ̙\u0006\u0004ݻժժժݻ\u0001\u0001\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0006\u0007𙘀\n\u0011ԪժժժժԪժժժժ\u000e\u001bԪժժժժժժƼ憀憀澀憀憀ǧ́ၳ͍͍́Ԫժժժժժժ\u0010\u0011Ԫժժժժժժժ烿ᶶƱƱッƱᶶƱ烃Ԫժժժժժժժ\u000e\u000fժժժժժժժ猼栁漆̍憞澶栁짌猼ժժժժժժժ"
  },
  {
    "path": "04 Support/DRAZ/IP/IMG.BGTAB1.PAL",
    "content": "~`1aWaaaa\u001fb\rcccAd3eeeeee\u0007f!f;fafSgagog}gggOhRhhh\u0018iJiiiii=jcjj\u0007kqkk\u000flAlOl]lklllll\u000bm+mKmkmmmmmmmmm\u0013n\u001dn\"n&nLnlnn o#oopKqqqrssssottttttu\u0011vvv;wRwwwwww!xAxcxxWyyKzzz\u0002|\u001c|6|P|S|\\|e|n|w||||||||}\u0001\u0013\u0004\fĈĠĈĀĈĀĀĀ\u0003\fĀĈ\u0004\f\u0004\u000f\u0004\fĈĠĈĀĀĀĀ\u0003\fĀĈ\u0004;ĈĠĿѿĀĀĀ\u0003<Āň\u0002\u0003\u0004\u001dĈĈĈ\u0004<Ā\u0004\f\u0004\t\u0001\u0001\u0001\u0001\u0004\u001dĈ߀݀Հ̀݀݀݀݀瀀瀀瀀瀀瀀瀀\u0004\u0006\u0004\u0006ĈĈĈ\u0004\tĠĀ\u0004<ĈĈՐ؊⪈լ֬ج଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀ଁଅକՀ\u0004\u0003ݻݻ\u0004\u0003ݻݻ\u0004\u0003\u0004\u0003ݻĈ\u0004\u0003ݻ\u0003<π\u0001\u0001\u0002?\u0003\u0006\u0004\fĢĈĠĈĀĈĀĀĀ\u0004\fѻĈĀĈĀĀĀĀ\u0004\r׻נĢĈĠĀр݀\u0003\rĠĀ\u0004\u000bȑĈĠĉрТĀĀĀ\u0002\u000bĈĈ\u0004\u0013ȑȑиĠĠ\u0002\u0012˓ŊÊ\u0004\u001bȑ๺ุ̰Ȱذ\u0002\u001a˓Ëǋ\u0004\u001aȑฺุ̰Ȱذ\u0002\u0019˓Ëǋ\u0004\u001aȑฺุͰ̰Ȱ\u0002\u0018˓Ëǋ\u0004\u0003ݻ\u0004\u0003\u0004\u0003ݻݛ\u0003\náéǩܩ\u0003\nïáéĩЩ\u0003\nëïáé\u0003\nëïá\u0003\nߩëï\u0003\nǩߩë\u0003\nǩߩ\u0003\néǩߩ\u0003\béǩߩëïá\u0003\u0007éǩߩëï\u0003\u0006éǩߩë\u0003\u0005éǩߩ\u0003\u0004éǩߩ\u0003\u0003éǩ\u0003\u0002é\u0003\u0001é\u0003\u000eĀ\u0002\u0004\u0001\u0003\u0002\u0001\u0003\fèèè\u0003\nÀÀÀ\u0002:\u0001<\u0001\u0001\u0003;ઝઝ\u0003?ઝ\u0003<ĀĈĈĈĂ\u0004\rݻĈĠĈĀĈĀĀĀ\u0004\u0003ݻ\u0004<ĈĢĈĢĈĢĈĢĈĢĈǈֆֆֆֆֆֆֆֆֆֆֆ\u0004<ĀĈؚ蝀ȘȘȘ蝀ؚؚ蝀ȘȘȘ蝀ؚؚ蝀ȘȘȘ蝀ؚؚ蝀ȘȘȘ蝀ؚؚ蝀ȘȘȘ蝀ؚؚ\u0004\u000fֆݻ֪ժݒĈĈĈ֪ժݻ\u0004\u000fȘȘȘߚݻժ՚ĘĘĘժ՚ݻ\u0003*ĀĈ\u0001\u000fԔ\u0001\u000fԜЀ\u0001\u000f\u0001\u000fАՕ\u0001\u0010ؘА\u0004<ĈĈψܹ޵\u0004\u0016𐀀\u0004\"ĈĈψ󿀀㿀ỀṀ\u0004\u000e𐀀\u0004\u0019ĈĈψτ󿀀㿀ỀṀ\u0003\u0007\u0004\u0012ĈĈ̓ĄψĄ牑ƧĀĀ㓀ˀṀ\u0002\u0005\u0004\u0010ĈĄňĄǈƢĀ£Āǀᑀ\u0001\u0001\u0001\u0010АԐА\u0002\u0010ȀĀԀЀ\u0002\u000fЀрՀԀ\u0002\u0010рЀЀԀ\u0002<Ĝ\u0002<Ĝƀ\u0002<Ĝƀ\u0002<Ĝ̓τƀ\u0002<ČǄǀƀ\u0001\u0001\u00064ǈĈڇ膠ĈʆȆĈʇˆܻꅀݛܻܻچ놀ȆʇȆꅀĘݻۆꆀˆʇˆ腀؆膀ȆȇȆ؅؇膀ȆȆȇ膀؅؆膀ȆȇȆ\u0006\u0004ݻ̙ժժ̙\u0006\u0004ݻ̙ժժ̙\u0006\u0004ݻݻժժݻ\u0001\u0001\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0006\u0007𙘀\n\u0011ԪժժժժԪժժժժ\u000e\u001bԪժժժժժժƼ憀憀澀憀憀ǧ́ၳ͍͍́Ԫժժժժժժ\u0010\u0011Ԫժժժժժժժ烿ᶶƱƱッƱᶶƱ烃Ԫժժժժժժժ\u000e\u000fժժժժժժժ猼栁漆̍憞澶栁짌猼ժժժժժժժ짌猼ժժժժժժժժժ"
  },
  {
    "path": "04 Support/DRAZ/IP/IMG.BGTAB2.PAL",
    "content": "~`1aWaaaa\u001fb\rcccAd3eeeeee\u0007f!f;fafSgagog}gggOhRhhh\u0018iJiiiii=jcjj\u0007kqkk\u000flAlOl]lklllll\u000bm+mKmkmmmmmmmmm\u0013n\u001dn\"n&nLnlnn o#oopKqqqrssssottttttu\u0011vvv;wRwwwwww!xAxcxxWyyKzzz\u0002|\u001c|6|P|S|\\|e|n|w||||||||}\u0001\u0013\u0004\fĈĠĈĀĈĀĀĀ\u0003\fĀĈ\u0004\f\u0004\u000f\u0004\fĈĠĈĀĀĀĀ\u0003\fĀĈ\u0004;ĈĠĿѿĀĀĀ\u0003<Āň\u0002\u0003\u0004\u001dĈĈĈ\u0004<Ā\u0004\f\u0004\t\u0001\u0001\u0001\u0001\u0004\u001dĈ߀݀Հ̀݀݀݀݀瀀瀀瀀瀀瀀瀀\u0004\u0006\u0004\u0006ĈĈĈ\u0004\tĠĀ\u0004<ĈĈՐ؊⪈լ֬ج଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀ଁଅକՀ\u0004\u0003ݻݻ\u0004\u0003ݻݻ\u0004\u0003\u0004\u0003ݻĈ\u0004\u0003ݻ\u0003<π\u0001\u0001\u0002?\u0003\u0006\u0004\fĢĈĠĈĀĈĀĀĀ\u0004\fѻĈĀĈĀĀĀĀ\u0004\r׻נĢĈĠĀр݀\u0003\rĠĀ\u0004\u000bȑĈĠĉрТĀĀĀ\u0002\u000bĈĈ\u0004\u0013ȑȑиĠĠ\u0002\u0012˓ŊÊ\u0004\u001bȑ๺ุ̰Ȱذ\u0002\u001a˓Ëǋ\u0004\u001aȑฺุ̰Ȱذ\u0002\u0019˓Ëǋ\u0004\u001aȑฺุͰ̰Ȱ\u0002\u0018˓Ëǋ\u0004\u0003ݻ\u0004\u0003\u0004\u0003ݻݛ\u0003\náéǩܩ\u0003\nïáéĩЩ\u0003\nëïáé\u0003\nëïá\u0003\nߩëï\u0003\nǩߩë\u0003\nǩߩ\u0003\néǩߩ\u0003\béǩߩëïá\u0003\u0007éǩߩëï\u0003\u0006éǩߩë\u0003\u0005éǩߩ\u0003\u0004éǩߩ\u0003\u0003éǩ\u0003\u0002é\u0003\u0001é\u0003\u000eĀ\u0002\u0004\u0001\u0003\u0002\u0001\u0003\fèèè\u0003\nÀÀÀ\u0002:\u0001<\u0001\u0001\u0003;ઝઝ\u0003?ઝ\u0003<ĀĈĈĈĂ\u0004\rݻĈĠĈĀĈĀĀĀ\u0004\u0003ݻ\u0004<ĈĢĈĢĈĢĈĢĈĢĈǈֆֆֆֆֆֆֆֆֆֆֆ\u0004<ĀĈؚ蝀ȘȘȘ蝀ؚؚ蝀ȘȘȘ蝀ؚؚ蝀ȘȘȘ蝀ؚؚ蝀ȘȘȘ蝀ؚؚ蝀ȘȘȘ蝀ؚؚ\u0004\u000fֆݻ֪ժݒĈĈĈ֪ժݻ\u0004\u000fȘȘȘߚݻժ՚ĘĘĘժ՚ݻ\u0003*ĀĈ\u0001\u000fԔ\u0001\u000fԜЀ\u0001\u000f\u0001\u000fАՕ\u0001\u0010ؘА\u0004<ĈĈψܹ޵\u0004\u0016𐀀\u0004\"ĈĈψ󿀀㿀ỀṀ\u0004\u000e𐀀\u0004\u0019ĈĈψτ󿀀㿀ỀṀ\u0003\u0007\u0004\u0012ĈĈ̓ĄψĄ牑ƧĀĀ㓀ˀṀ\u0002\u0005\u0004\u0010ĈĄňĄǈƢĀ£Āǀᑀ\u0001\u0001\u0001\u0010АԐА\u0002\u0010ȀĀԀЀ\u0002\u000fЀрՀԀ\u0002\u0010рЀЀԀ\u0002<Ĝ\u0002<Ĝƀ\u0002<Ĝƀ\u0002<Ĝ̓τƀ\u0002<ČǄǀƀ\u0001\u0001\u00064ǈĈڇ膠ĈʆȆĈʇˆܻꅀݛܻܻچ놀ȆʇȆꅀĘݻۆꆀˆʇˆ腀؆膀ȆȇȆ؅؇膀ȆȆȇ膀؅؆膀ȆȇȆ\u0006\u0004ݻ̙ժժ̙\u0006\u0004ݻ̙ժժ̙\u0006\u0004ݻݻժժݻ\u0001\u0001\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0006\u0007𙘀\n\u0011ԪժժժժԪժժժժ\u000e\u001bԪժժժժժժƼ憀憀澀憀憀ǧ́ၳ͍͍́Ԫժժժժժժ\u0010\u0011Ԫժժժժժժժ烿ᶶƱƱッƱᶶƱ烃Ԫժժժժժժժ\u000e\u000fժժժժժժժ猼栁漆̍憞澶栁짌猼ժժժժժժժ짌猼ժժժժժժժ"
  },
  {
    "path": "04 Support/DRAZ/IP/IMG.BGTABLE1",
    "content": "~`1aWaaaa\u001fb\u0011cccWdIe{eeeeZftfffgggggghh%i9ikiiii*jBjjj$kZkkkbllllll\u0002m\"mBmbmmmmmm\u0007n\u0018n&n1n9n>njntnyn|nnnuoooip(qq\u0014r\"r\u0014s\u0006tDtt\u0006u\u0017u(u9uJu\\uNvv2wlwww3x?xxxxxxxtyyhzz\\{_{||||||||\b}\u0011}\u001a}#},}5}>}j}\u0016~x\u0004\fĈĈĈĈĈ\u0003\fĀĈĈĈ\u0004\f\u0004\u000f\u0004\fĈĈĈĈĈ\u0003\fĈĈĈ\u0004<Ĉ݈݂ݢݢݢݢݢݢݢݨ݂ݢݢݢݢݢݢݢݨ݂ݢݢݢݢݢݢݢ\u0003<ĀĈĈĀ\u0003\b\u0004\u001dĈꐢꀢꀈꀠꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀ\u0004<ĀĈĈԀІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІ\u0004\fІІІІІІІІІІІІ\u0003\tЇП\u0003\rĀĈĈĈ\u0003\u000bĀĈĈĈ\u0004\u001dĈ߀݀Հ̀݀݀݀݀瀀瀀瀀瀀瀀瀀\u0004\u0006\u0004\u0006ĈĈĀ\u0004\tݻлݻĈ\u0004<ĈĈՐ؊⪈լ֬ج଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀ଁଅକՀ\u0004\u0003ݻݻݻ\u0004\u0003ݻݻ\u0004\u0003ꀀ\u0004\u0003ݻݻĈ\u0004\u0003ݻݻ\u0003<ŀĈ\u0001\u0001\u0002?\u0003\u0006\u0004\fĈĈĈĈĈĈ\u0004\fĈĈĈ\u0004\rݻлݻĈ\u0003\rĮݻĈĈ\u0004\u000bĈĈň񢀀Ј\u0002\u000bǀĈĈĈ\u0004\u0013Ĉ됢Ć񤀱\u0002\u0012ǀƈƊĆ\u0004\u001bĈѣċ둣Ň𠠈\u0002\u001aǀÈǎ\u0004\u001aĈѣ둧ņ𠠈\u0002\u0019ǀǈǎ\u0004\u001aĈѣ둧ņ𰠈𠠈\u0002\u0018ǀǈǎ\u0004\u0003ݻݻ\u0004\u0004ݻݻݻ\u0004\u0003ݻݻܻ\u0003\nӀӀӀр׀܀Ѐ\u0003\nߐӀӀӀӀрԀЀ\u0003\n׀߀ÀӀӀӀӀЀЀ\u0003\nр׀߀ÀӀӀӀЀЀ\u0003\nӀр׀߀ÀӀӀЀЀ\u0003\nӀӀр׀߀ÀӀЀЀ\u0003\ñӀӀӀр׀߀ÀЀЀ\u0003\nӀӀӀр׀߀ЀЀ\u0003\b̃ӌӌӌэׇߜ\u0003\u0007̃ӌӌӌэׇ\u0003\u0006̃ӌӌӌэ\u0003\u0005̃ӌӌӌ\u0003\u0004̃ӌӌ\u0003\u0003̃ӌ\u0003\u0002̃\u0003\u0001\u0003\u000eĈԀЀЀЀЀЀЀЀЀЀЀЀ\u0002\u0004ĀĈ\u0001\u0003\u0001\u0001\u0003\fЀЄЄЄЄЌЌЌэчќ\u0003\n\u0003;݈݂ݢݢݢݢݢݢݢݨ݂ݢݢݢݢݢݢݢݨ݂ݢݢݢݢݢݢݢ\u0001<\u0001\u0001\u0003;ઝઝ\u0003?ઝ\u0003<ĀĈĈĈĂ\u0004\rݻĈĈĈĈĈ\u0004\u0003ݻݻ\u0004<ĈĈĈĈĈĈĈĈĈĈĈĈ􎀀􎀀܋܋􎀀􎀀܋܋􎀀􎀀܋܋􎀀􎀀܋܋􎀀􎀀܋􎀀\u0004<ĀĈĈĈĀĈ񿀀лл𮀀𮀀лл𮀀𮀀лл𮀀𮀀лл𮀀𮀀лл𮀀𮀀л\u0004\u000f􎀀ܻժݻĈĈĈݻժܻ\u0004\u0010лݻժݻĈĈĈݻժݻ\u0003*ĀĈĈĈĀ\u0001\u000fԔ\u0001\u000fԜЀ\u0001\u000f\u0001\u000fАՕ\u0001\u0010ؘА\u0004<ĈĈĈĈǈܹ޵\u0004\u0016𐀀\u0004\"ĈĈĈĈǈ󿀀㿀ỀṀ\u0004\u000e𐀀\u0004\u0019ĈĈĈĈǈ󿀀㿀ỀṀ\u0003\u0007\u0004\u0012ĈĈ܈̣ĈĈ瑢ǈ󈀀㣀ዀṀ\u0002\u0005\u0004\u0010ĈĈĈĈÈዀᡀ\u0001\u0001\u0001\u0010АԐА\u0002\u0010ȀĀԀЀ\u0002\u000fЀрՀԀ\u0002\u0010рЀЀԀ\u0002<Ĉ\u0002<Ĉƀ\u0002<Ĉƀ\u0002<Ĉ܈̣ƀ\u0002<Ĉƀ\u0001\u0001\u00063ĈĈĈьĈݻՋݻݻݻ׌ĈĈԋՌы񍀀􎀀ЌЌЍЌ\u0006\u0004̙݇ժՆ̙\u0006\u0004߻̙ߪժ̙\u0006\u0004ݻժժժݻ\u0001\u0001\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0006\u0007𙘀\n\u0011ԪժժժժԪժժժժ\u000e\u001bԪժժժժժժƼ憀憀澀憀憀ǧ́ၳ͍͍́Ԫժժժժժժ\u0010\u0011Ԫժժժժժժժ烿ᶶƱƱッƱᶶƱ烃Ԫժժժժժժժ\u000e\u000fժժժժժժժ猼栁漆̍憞澶栁짌猼ժժժժժժժ݊"
  },
  {
    "path": "04 Support/DRAZ/IP/IMG.BGTABLE1.B",
    "content": "~`1aWaaaa\u001fb\u0011cccOdAeseeee\u0015f/fIfofagog}gggg]h`hhh&iXiiiiiKjqjj\u0015kkk\u001dlOl]lklylllll\u0019m9mYmymmmmmmmmm!n+n0n4nZnzn-okono!ppqqqrss:tttttt\u0010u\u0002v\\vv wwwww5x8xJxlxxx(yy\u001czz\u0010{\u0013{M|g||||||||||||||$}}L^2\u0004\fĈĠĈĀĈĀĀĀ\u0003\fĀĈ\u0004\f\u0004\u000f\u0004\fĈĠĈĀĀĀĀ\u0003\fĀĈ\u0004<ĈĠݻݻрݻрݻрݻݻݻݻݻݻݻݻݻĀݻݻݻݻݻݻݻݻݻĀݻݻݻݻܻ\u0003<ĀĀĀĀĀĀĀĀĀЀĀĀĀĀĀĀĀĀЀĀĀĀĀ\u0002\bĀĀĀ\u0004\u001dĈĈĈ\u0004<Ā\u0004\f\u0004\t\u0001\u0001\u0001\u0001\u0004\u001dĈ߀݀Հ̀݀݀݀݀瀀瀀瀀瀀瀀瀀\u0004\u0006\u0004\u0006ĈĈĈ\u0004\tĠĀ\u0004<ĈĈՐ؊⪈լ֬ج଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀ଁଅକՀ\u0004\u0003ݻݻ\u0004\u0003ݻݻ\u0004\u0003\u0004\u0003ݻĈ\u0004\u0003ݻ\u0003<ŀĈ\u0001\u0001\u0002?\u0003\u0006\u0004\fĢĈĠĈĀĈĀĀĀ\u0004\fѻĈĀĈĀĀĀĀ\u0004\r׻נĢĈĠĀр݀\u0003\rĠĀ\u0004\u000bȑĈĠĉрТĀĀĀ\u0002\u000bĈĈ\u0004\u0013ȑȑиĠĠ\u0002\u0012˓ŊÊ\u0004\u001bȑ๺ุ̰Ȱذ\u0002\u001a˓Ëǋ\u0004\u001aȑฺุ̰Ȱذ\u0002\u0019˓Ëǋ\u0004\u001aȑฺุͰ̰Ȱ\u0002\u0018˓Ëǋ\u0004\u0003ݻ\u0004\u0003\u0004\u0003ݻݛ\u0003\náéǩܩ\u0003\nïáéĩЩ\u0003\nëïáé\u0003\nëïá\u0003\nߩëï\u0003\nǩߩë\u0003\nǩߩ\u0003\néǩߩ\u0003\béǩߩëïá\u0003\u0007éǩߩëï\u0003\u0006éǩߩë\u0003\u0005éǩߩ\u0003\u0004éǩߩ\u0003\u0003éǩ\u0003\u0002é\u0003\u0001é\u0003\u000eĀ\u0002\u0004\u0001\u0003\u0002\u0001\u0003\fèèè\u0003\nÀÀÀ\u0003;ݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻܻ\u0001<\u0001\u0001\u0003;ઝઝ\u0003?ઝ\u0003<ĀĈĈĈĂ\u0004\rݻĈĠĈĀĈĀĀĀ\u0004\u0003ݻ\u0004<ĈĢĈĢĈĢĈĢĈĢĈǈֆֆֆֆֆֆֆֆֆֆֆ\u0004<ĀĈؚ蝀ȘȘȘ蝀ؚؚ蝀ȘȘȘ蝀ؚؚ蝀ȘȘȘ蝀ؚؚ蝀ȘȘȘ蝀ؚؚ蝀ȘȘȘ蝀ؚؚ\u0004\u000fֆݻ֪ժݒĈĈĈ֪ժݻ\u0004\u000fȘȘȘߚݻժ՚ĘĘĘժ՚ݻ\u0003*ĀĈ\u0001\u000fԔ\u0001\u000fԜЀ\u0001\u000f\u0001\u000fАՕ\u0001\u0010ؘА\u0004<ĈĈĈĈǈܹ޵\u0004\u0016𐀀\u0004\"ĈĈĈĈǈ󿀀㿀ỀṀ\u0004\u000e𐀀\u0004\u0019ĈĈĈĈǈ󿀀㿀ỀṀ\u0003\u0007\u0004\u0012ĈĈ܈̣ĈĈ瑢ǈ󈀀㣀ዀṀ\u0002\u0005\u0004\u0010ĈĈĈĈÈዀᡀ\u0001\u0001\u0001\u0010АԐА\u0002\u0010ȀĀԀЀ\u0002\u000fЀрՀԀ\u0002\u0010рЀЀԀ\u0002<Ĉ\u0002<Ĉƀ\u0002<Ĉƀ\u0002<Ĉ܈̣ƀ\u0002<Ĉƀ\u0001\u0001\u00064ǈĈڇ膠ĈʆȆĈʇˆܻꅀݛܻܻچ놀ȆʇȆꅀĘݻۆꆀˆʇˆ腀؆膀ȆȇȆ؅؇膀ȆȆȇ膀؅؆膀ȆȇȆ\u0006\u0004ݻ̙ժժ̙\u0006\u0004ݻ̙ժժ̙\u0006\u0004ݻݻժժݻ\u0001\u0001\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0006\u0007𙘀\n\u0011ԪժժժժԪժժժժ\u000e\u001bԪժժժժժժƼ憀憀澀憀憀ǧ́ၳ͍͍́Ԫժժժժժժ\u0010\u0011Ԫժժժժժժժ烿ᶶƱƱッƱᶶƱ烃Ԫժժժժժժժ\u000e\u000fժժժժժժժ猼栁漆̍憞澶栁짌猼ժժժժժժժժժժժժժժժݻ"
  },
  {
    "path": "04 Support/DRAZ/IP/IMG.BGTABLE1.BK",
    "content": "~`1aWaaaa\u001fb\u0011cccWdIe{eeee\u0014f.fHfnf`gng|gggg\\h_hhh%iWiiiiiJjpjj\u0014k~kk\u001clNl\\lnl|lllll\u001cm<m\\m|mmmmmmmmm$n.n3n6n\\n|n/omopo#ppqqqrss@ttttt\u0004u\u0016u\bvbvv&wwwww;x>xPxrxxx.yy\"zz\u0016{\u0019{M|g||||||||||||||$}}L^2\u0004\fĈĈĈĈĈ\u0003\fĀĈĈĈ\u0004\f\u0004\u000f\u0004\fĈĈĈĈĈ\u0003\fĈĈĈ\u0004<Ĉ݈݂ݢݢݢݢݢݢݢݨ݂ݢݢݢݢݢݢݢݨ݂ݢݢݢݢݢݢݢ\u0003<ĀĈĈĀ\u0003\b\u0004\u001dĈꐢꀢꀈꀠꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀ\u0004<ĀĈĈԀІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІ\u0004\fІІІІІІІІІІІІ\u0003\tЇП\u0001\u0001\u0001\u0001\u0004\u001dĈ߀݀Հ̀݀݀݀݀瀀瀀瀀瀀瀀瀀\u0004\u0006\u0004\u0006ĈĈĀ\u0004\tݻлݻĈ\u0004<ĈĈՐ؊⪈լ֬ج଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀ଁଅକՀ\u0004\u0003ݻݻݻ\u0004\u0003ݻݻ\u0004\u0003ꀀ\u0004\u0003ݻݻĈ\u0004\u0003ݻݻ\u0003<ŀĈ\u0001\u0001\u0002?\u0003\u0006\u0004\fĈĈĈĈĈĈ\u0004\fĈĈĈ\u0004\rݻлݻĈ\u0003\rĮݻĈĈ\u0004\u000bĈĈň񢀀Ј\u0002\u000bǀĈĈĈ\u0004\u0013Ĉ됢Ć񤀱\u0002\u0012ǀƈƊĆ\u0004\u001bĈѣċ둣Ň𠠈\u0002\u001aǀÈǎ\u0004\u001aĈѣ둧ņ𠠈\u0002\u0019ǀǈǎ\u0004\u001aĈѣ둧ņ𰠈𠠈\u0002\u0018ǀǈǎ\u0004\u0003ݻݻ\u0004\u0004ݻݻݻ\u0004\u0003ݻݻܻ\u0003\nӀӀӀр׀܀Ѐ\u0003\nߐӀӀӀӀрԀЀ\u0003\n׀߀ÀӀӀӀӀЀЀ\u0003\nр׀߀ÀӀӀӀЀЀ\u0003\nӀр׀߀ÀӀӀЀЀ\u0003\nӀӀр׀߀ÀӀЀЀ\u0003\ñӀӀӀр׀߀ÀЀЀ\u0003\nӀӀӀр׀߀ЀЀ\u0003\b̃ӌӌӌэׇߜ\u0003\u0007̃ӌӌӌэׇ\u0003\u0006̃ӌӌӌэ\u0003\u0005̃ӌӌӌ\u0003\u0004̃ӌӌ\u0003\u0003̃ӌ\u0003\u0002̃\u0003\u0001\u0003\u000eĈԀЀЀЀЀЀЀЀЀЀЀЀ\u0002\u0004ĀĈ\u0001\u0003\u0001\u0001\u0003\fЀЄЄЄЄЌЌЌэчќ\u0003\n\u0003;݈݂ݢݢݢݢݢݢݢݨ݂ݢݢݢݢݢݢݢݨ݂ݢݢݢݢݢݢݢ\u0001<\u0001\u0001\u0003;ઝઝ\u0003?ઝ\u0003<ĀĈĈĈĂ\u0004\rݻĈĈĈĈĈ\u0004\u0003ݻݻ\u0004<ĈĈĈĈĈĈĈĈĈĈĈĈ􎀀􎀀܋܋􎀀􎀀܋܋􎀀􎀀܋܋􎀀􎀀܋܋􎀀􎀀܋􎀀\u0004<ĀĈĈĈĀĈ񿀀лл𮀀𮀀лл𮀀𮀀лл𮀀𮀀лл𮀀𮀀лл𮀀𮀀л\u0004\u000f􎀀ܻժݻĈĈĈݻժܻ\u0004\u0010лݻժݻĈĈĈݻժݻ\u0003*ĀĈĈĈĀ\u0001\u000fԔ\u0001\u000fԜЀ\u0001\u000f\u0001\u000fАՕ\u0001\u0010ؘА\u0004<ĈĈĈĈǈܹ޵\u0004\u0016𐀀\u0004\"ĈĈĈĈǈ󿀀㿀ỀṀ\u0004\u000e𐀀\u0004\u0019ĈĈĈĈǈ󿀀㿀ỀṀ\u0003\u0007\u0004\u0012ĈĈ܈̣ĈĈ瑢ǈ󈀀㣀ዀṀ\u0002\u0005\u0004\u0010ĈĈĈĈÈዀᡀ\u0001\u0001\u0001\u0010АԐА\u0002\u0010ȀĀԀЀ\u0002\u000fЀрՀԀ\u0002\u0010рЀЀԀ\u0002<Ĉ\u0002<Ĉƀ\u0002<Ĉƀ\u0002<Ĉ܈̣ƀ\u0002<Ĉƀ\u0001\u0001\u00063ĈĈĈьĈݻՋݻݻݻ׌ĈĈԋՌы񍀀􎀀ЌЌЍЌ\u0006\u0004̙݇ժՆ̙\u0006\u0004߻̙ߪժ̙\u0006\u0004ݻժժժݻ\u0001\u0001\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0006\u0007𙘀\n\u0011ԪժժժժԪժժժժ\u000e\u001bԪժժժժժժƼ憀憀澀憀憀ǧ́ၳ͍͍́Ԫժժժժժժ\u0010\u0011Ԫժժժժժժժ烿ᶶƱƱッƱᶶƱ烃Ԫժժժժժժժ\u000e\u000fժժժժժժժ猼栁漆̍憞澶栁짌猼ժժժժժժժ"
  },
  {
    "path": "04 Support/DRAZ/IP/IMG.BGTABLE2.B",
    "content": "%M`Oaasb/cLcZcrcucxc{c~cccccccccccc\u0015dnddeeefgg\u0007h\nhhRi\u0004jj\u0004@쀀ȍفϑ󙲃̷؞계̪۪Ϫ֪͇݅Ӫ̪تȪɪ̪۪Ϫ֪͇݅Ӫ̪تȪɪ̪۪Ϫ֪͇݅Ӫ̪تȪɪ̪۪Ϫ֪͇݅Ӫ̪تȪɪ̪۪Ϊ݅Ӫ͇̪ȩϑ\u0004\rϑ΅⁀즄𳄀턀؅\u0004;ݻݻݻݻݻݻݻ݆ݻĈрݺݺݺݺݺݺݺݺݸĀݻǻݻݻݻݻݻݻݻݻݻ\u0003>ĀĈĈĈĈĈĈĈňЈĀĈĈĈĈĈ\u0003\tĈňЈ\u0004\u0003ݻݻ\u0002\u000b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0004\u001dĈĈ䁜ހ߃ࡶ߳옿΀𗀀耀\u0003\u001dĀáƋУĆā\u0004\fĈĈǈň\u0004@쁀ȝ󀀎ك瑻℘ϣ󹄎턛ۅ℘ϣ󹄎턛ۅ℘ϣ󹄎턛ۅ℘ϣ󹄎턛ۅ℘ϣ󹄎턛ۅ윲ͣ󦄎ٹ瑛\u0004\f瑛𜲇℀Σไ\u0001\u0001\u0004<ݻͻݻͻݻͻݻͻݻͻݻͻݻͻݻŻݻܻݻܻݻܻݻܻݻܻݻܻݻܻݻܻݻܻݻĈܻݛݻݛݻݛݻݛݻݛݻݛݻݛݻݛݻݛܻĨ\u0004?󀀀ك恀✀ϣ̃ćǆ͆󆜲ۇ⼆ϣ̇ćǆ͆󆜲ۇ⼆ϣ̇ćǆ͆󆜲ۇ⼆ϣ̇ćǆ͆󆜲ۇ⼆ϣ̇ćǆ͆󆜲ۇ⼆ͣ̇ٹ䆱ćǆ͆\u0004\f܇̣̇䆀ćǆ͆󆀀܇\u0004\u0003ݻͻ\u0001\u0001\u00041ĀĈתծ\u0004 իתĮ\u0004,ĀĈꑀիת\u0004!ծת๺ุ̰Ȱذ\u0002\u001a˓Ëǋ\u0004\u001aȑฺุ̰Ȱذ\u0002\u0019˓Ëǋ\u0004\u001aȑฺุͰ̰Ȱ\u0002\u0018˓Ëǋ\u0004\u0003ݻ\u0004\u0003\u0004\u0003ݻݛ\u0003\náéǩܩ\u0003\nïáéĩЩ\u0003\nëïáé\u0003\nëïá\u0003\nߩëï\u0003\nǩߩë\u0003\nǩߩ\u0003\néǩߩ\u0003\béǩߩëïá\u0003\u0007éǩߩëï\u0003\u0006éǩߩë\u0003\u0005éǩߩ\u0003\u0004éǩߩ\u0003\u0003éǩ\u0003\u0002é\u0003\u0001é\u0003\u000eĀ\u0002\u0004\u0001\u0003\u0002\u0001\u0003\fèèè\u0003\nÀÀÀ\u0003;ݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻܻ\u0001<\u0001\u0001\u0003;ઝઝ\u0003?ઝ\u0003<ĀĈĈĈĂ\u0004\rݻĈĠĈĀĈĀĀĀ\u0004\u0003ݻ\u0004<ĈĈĈĈĈĈĈĈĈĈĈĈ􎀀􎀀܋܋􎀀􎀀܋܋􎀀􎀀܋܋􎀀􎀀܋܋􎀀􎀀܋􎀀\u0004<ĀĈĈĈĀĈ񿀀лл𮀀𮀀лл𮀀𮀀лл𮀀𮀀лл𮀀𮀀лл𮀀𮀀л\u0004\u000f􎀀ܻժݻĈĈĈݻժܻ\u0004\u0010лݻժݻĈĈĈݻժݻ\u0003*ĀĈ\u0001\u000fԔ\u0001\u000fԜЀ\u0001\u000f\u0001\u000fАՕ\u0001\u0010ؘА\u0004<ĈĈĈĈǈܹ޵\u0004\u0016𐀀\u0004\"ĈĈĈĈǈ󿀀㿀ỀṀ\u0004\u000e𐀀\u0004\u0019ĈĈĈĈǈ󿀀㿀ỀṀ\u0003\u0007\u0004\u0012ĈĈ܈̣ĈĈ瑢ǈ󈀀㣀ዀṀ\u0002\u0005\u0004\u0010ĈĈĈĈÈዀᡀ\u0001\u0001\u0001\u0010АԐА\u0002\u0010ȀĀԀЀ\u0002\u000fЀрՀԀ\u0002\u0010рЀЀԀ\u0002<Ĉ\u0002<Ĉƀ\u0002<Ĉƀ\u0002<Ĉ܈̣ƀ\u0002<Ĉƀ\u0001\u0001\u00063ĈĈĈьĈݻՋݻݻݻ׌ĈĈԋՌы񍀀􎀀ЌЌЍЌ\u0006\u0004̙݇ժՆ̙\u0006\u0004߻̙ߪժ̙\u0006\u0004ݻժժժݻ\u0001\u0001\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0006\u0007𙘀\n\u0011ԪժժժժԪժժժժ\u000e\u001bԪժժժժժժƼ憀憀澀憀憀ǧ́ၳ͍͍́Ԫժժժժժժ\u0010\u0011Ԫժժժժժժժ烿ᶶƱƱッƱᶶƱ烃Ԫժժժժժժժ\u000e\u000fժժժժժժժ猼栁漆̍憞澶栁짌猼ժժժժժժժ"
  },
  {
    "path": "04 Support/DRAZ/IP/IMG.BKUP",
    "content": "\u001a7``aybMc\u001bddleefqg\u001dhhiXj2kzkBllfmmn;oocp\u0007qyq\u0005\"ǘ뇀\u0006\"𿂀࿀࿀臀\u0006!΁Ã߀퀀瀀\u0007\u001eǀ࿀ 󂟀\u0006\"〘Àρ݁ɀฎ⁀رÁ􃀀\u0005%　쀸΃끀܀ЁρЏ🀀\u0004%぀΃܁̀࿀\u0004$ೀ࿀솀\u0006 🀀ව󀀀โ󀀀\u0005#ࠀ老ކ܇㇀􁀀\u0005\"܇؋߁\u0005#ޙ🀀×𸇀ೆ샀\u0005$΃ȁ\u0006#🃀ǁ܀􀀀࿀\u0006$灀඀΁\u0005\u000e̟ρ݁σ\u0006!🀀șƍ臀\u0004$ೀ࿀솀\u0004$ೀ࿀솀\u0004$ೀ࿀솀\u0005#臀\u0004$Áダダ쀀Ì𾀀Џ🀀\u0004$𹀀぀Ã𸀀Ƒρ񀀐ㅛ􃀀\u0004%Ӏ㏀΀ੀ𖀀̧·\u0006\u001b𿪅ʯԪЪЪžѾѾѾѾ՞՞ޞ\b\u000eԪЊꫥꏠꏠêժǪՊՂ⪕⫅߂׃և"
  },
  {
    "path": "04 Support/DRAZ/IP/IMG.CHTAB4.FAT",
    "content": "\u001a7``abcpd:eezfNg\u000ehhiIj/k\u001bllmZnnoVppkq\u0011rrOs\u0005$񯅀񯁀忁տտտտտտտ꧀񫥀꿵ꃀ\u0006%߀㿀Ъ𯕀\u0006$࿀𿀀߾ꟀꏀՀꇀ\u0007!🀿ߪ՘՘ժժժժժՂ߂הՅӀ\u0006%߿վվպՂՊժժժժ꾅ꚅʄǀ\u0005(Հ՞Њтӂ׀ꏀꟀꟀퟀҟծթ\u0004(կ՟՟՟տտտДտտ\u0004'տЖԀЀ􇀀ꃀꃀꃀ\u0006#🀀ԿԾպպժժժժԪԪԪԪЪЀ\u0005&ЪЪЪЪЪЪпԾԔ՜ꇀꇀ\u0005%ݪԪ\u0005%ê߫ݯٯ῀埀埀埀՟՟ԏ\u0005'ЪЪЪЪЪЪЪЪժꃀꃀꃀ\u0006&ԊԪԪԪԪЪЪЪʪժ\u0006'🀀Հ࿵ՂՂղվվպժժԪԪԪԪԪԪ뿀몀🀀Їԇԇԇ\u0004*Ŋƪ̪ЫХДЖКЪОО\u0006$🀀ԀԪԪԪЪЪЪЪЪЪתӞ\u0005%ЀԊԪԪԪԪԪЪЪުԏԃ\u0004'񏴠ЖՔהꇀꃀꃀ\u0004'ԀԀꃀꃀꃀ\u0005&ԎՎ߆򿀀򿀀׀࿀菀\u0004'՞ՆՀ꿀ԇԇ􇀀\u0003'ЪЪժՊՂՂՊ՚պպВЪ\u0004)ŊŊŊŊЪЪЪЪߪ\u0006\u001b𿪅ʯԪЪЪžЪѾѾ\u0004&ŊŊŊŊЪЪЪȪߪ"
  },
  {
    "path": "04 Support/DRAZ/IP/IMG.CHTAB4.GD",
    "content": "\u001a7``abcpd:eezfNg\u000ehhiIj/k\u001bllmZnnoLpptq\u000err$s\u0005$񯅀񯁀῁῀ៀ՟՟՟՟ԟП菀𿀀ꃀ\u0006%߀翀վվտԿԿ🀀🀀ПЏ叀叀\u0006$࿀𿀀􇀨ꟀꏀՀ🁀𿁀ꁀ\u0007!🀿՘࿀ԘԪԪԪЪЪ🀀О܂ӔՅ׀\u0006%߿߿߿տԾԀԂԪЪЪ뾅ꚅʄǀ\u0005(՟ԊԂՂ׀𗀀⏀ꏀꏀ폀׏\u0004(Дԧԯ\u0004'ԔДоꀀꃀ\u0006#🀀ԿԾԾԾЪЪЪʀʀπ߀߀Ѐ\u0005&􏀀􇀀Ԥжܞꁀꃀ\u0005%ꁪ\u0005%è߫߯د࿀ៀ埀埀􏀀􏀀ٿ՟՟ԏ\u0005'ꁀ\u0006&԰ԂԪԪԪت\u0006'🀀࿵ԀԀ԰ԼԼ԰ԊԪЪ럀ʀڀЇԀԁԇ\u0004*ЎО\u0006$🀀ԀЊЪЪꁀӞ\u0005%ЀЊª߂߀߀ԁԇ\u0004'񏴠ԔДоꀀꃀ\u0004'ԔДоꀀꃀ\u0005$߆򿀀򟀀忀🀀菀\u0004%՞ՆՀꀀ࿀꿀􏀀ԃ\u0004$聀ЪЪԪԊԂԂԊКкк῀\u0004&ŊŊŊŊ􃀀끀ீ𿀀\u0006\u001b𿪅ʯԪЪЪžѾѾѾѾ՞՞ޞ\b\u000eԪЊꫥꏠꏠêժǪՊՂ⪕⫅߂׃և"
  },
  {
    "path": "04 Support/DRAZ/IP/IMG.CHTAB4.SKEL",
    "content": "\u001a7``aybMc\u001bddleefqg\u001dhhiXj2kkl4mmXn\too-pp=qq\u0005\"ǘ뇀\u0006\"𿂀࿀࿀臀\u0006!΁Ã߀퀀瀀\u0007\u001eǀ࿀ 󂟀\u0006\"㠀Àρ݁ɀฎ⁀رÁ􃀀\u0005%　섀΃끀܀ЁρЏ🀀\u0004%̇぀΃܁̀࿀\u0004$ೀ࿀솀\u0006 🀀ව󀀀โ󀀀\u0005#ࠀ老ކ܇㇀􁀀\u0005\"܇؋߁\u0005#ޙ🀀×𸇀ೆ샀\u0005$΃ȁ\u0006#🃀ǁ܀􀀀࿀\u0006$灀඀΁\u0004#ȃ􃀀\u0006!🀀șƍ臀\u0005\"ЃÀÁÁೀࣞߙ\u0004$ೀ࿀솀\u0004$ೀ࿀솀\u0005#臀\u0004$Áダダ쀀Ì𾀀Џ🀀\u0004$𹀀぀Ã𸀀Ƒρ񀀐ㅛ􃀀\u0004%Ӏ㏀΀ੀ𖀀̧·\u0005\u0018ǁ񀀇Λ䁀\u0004\"うÁ獃ী怀胀⫅߂׃և\b\u000eԪЊꫥꏠꏠêժǪՊՂ⪕⫅߂׃և"
  },
  {
    "path": "04 Support/DRAZ/IP/IMG.CHTAB4.VIZ",
    "content": "\u001a7``abcpd:eezfNg\u000ehhiIj/k\u001bllmZnnoLpptq\u000err$s\u0005$񯅀񯁀េៀៀ՟՟՟՟ԟПППпп俀🀀ꃀ\u0006%Ç柀翀վԿԿԟ֟֟ППՏ叀叀\u0006$࿀𿀀􇀨Ꟁꏀ࿁𿀀ꁀ\u0007!🀿՘࿀ԘԪԪԪЪЪ🀀ח\u0006%ϟ߿߿߿տԾԀԂԪЪЪￅ瀀\u0005(՟ԊԂՂ׀𗀀⏀ꏀꏀ鏀ޏꃀ\u0004(ԟ՟ןԿտտտՏ\u0004'񃼠ԾԾԟԏꀀꃀ\u0006#🀀ԿԾԾԾЪЪЪЪߪϪЀ꿀\u0005&ԟԟПߞמվԾԾԞԞԏևꁀꃀ\u0005%ꃨ꿪ԟԟԟԟԿԿԿԟ՟՟\u0005%ϧϿ࿀῀埀埀՟՟՟՟՟ԟԟԟԾԾ־ӾӾѾўЎЎՎ՞՞՟ԏ\u0005'􏀀叀寀寀忀埀􏀀ꀀꀀꁀ\u0006&԰ԂԪԪԪت􇀀\u0006'🀀԰ԾԾԾԾ԰ԊԪЪ諽ԁԁԇ\u0004*ЎО\u0006$🀀ЊЪЪ꿀О\u0005%Њԁԇ\u0004'߰ﯠԾԿԟꀀꃀ\u0004'ԾԿԟꀀꀀ\u0005$߆򿀀򟀀忀🀀菀\u0004%՞ՆՀꀀ࿀꿀􏀀ԃ\u0004$聀ЪЪԪԊԂԂԊКкк῀\u0004&ŊŊŊŊ􃀀끀ீ𿀀\u0006\u001b𿪅ʯԪЪЪžѾѾѾѾ՞՞ޞ\b\u000eԪЊꫥꏠꏠêժǪՊՂ⪕⫅߂׃և"
  },
  {
    "path": "04 Support/DRAZ/IP/IMG.CHTAB5.BK",
    "content": "\u0013)``saGb\"ccdAeef:ggrh(i\u0002jjkwl\u0005mm\u0004\"ß🀀׀׀ԾՀԸꁀꁀ\u0005&🀀렁Ͽ￀ծծՀ׀ꃀ\u0006#胀耠耀ៀժߟןՏՂՂ\u0007\u001f🀀退뀀𿀀պЪ݂ݪݪ\u0006\"耞뀾𿀀׊ׂ׀\u0005%ހៀ󏀀߆ކ߂߂߀߀🀀🀀\u0004%Ѓǟ⁀࿀࿀\u0004$׃ׁ׀߀߀߂߂׀Հ땀ꅀʇ࿀࿀\u0005\"ի\u0005%輅耄࿀࿀ЪՀ׀蕀ꇀꀀ\u0004&Ճׂׂ߂굀ЂԀ\u0004'𿀀𿀀𿀀Ձ׀׀߀\u0005$󏀀տ࿅ு஁ЊЎЎ\u0006$耞ůիી຀຀ЂІЎ\u0006\"𿀀ޯޯ֫֋Ջ\u0005+󏀀׀ςЀЀ\u0006\"胀耠耀ǟժߟןՏՂՂ\u0004#߆߂݂݂݊\u0004%ՁՁպ׀պ׀׀߀׀׀߀"
  },
  {
    "path": "04 Support/DRAZ/IP/IMG.CHTABLE1",
    "content": "=}``Naa?bbsc\u0011ddeCffgqhh<iiiYjj]kkal/mIn+ooSpp\u0016q~qqcrrus\u000bttu4v\rw.x yyz?{{{Y||J}}/~~~+.147:=\u0002)࿀ЏЏЏЎԎЀԀԁԃ\u0003)Ѐ࿀࿀迀聀ꀀꁀ\u0003(Џ䟀ׁׁ׀ീീ\u0003'ğϟ𝀸聀ꀀꁀ\u0004&ǿǟϟߟߟ돀돀끀뀀뀀຀ԃԁԃ\u0004&߂׀Հ\u0004'𫀀ߊ߂߀🀀🀀\u0005(࿀񏀀߁׀׀߀߀πǀ׀Հ࿀࿀\u0005(Ѐ؀ߞооؾ߂ׂ׀\u0004'🀀Ճׂ߂߀׀Հ\u0004&ρϿϟǿ￀￀Շ׃׃׃Ձീ臀\u0005(࿀՞Ԇކކދ׋ׁ׀🀀🀀\u0005(🀀ꃀꃀુ઀઀ЇԀԁԃ\u0003'〰ԇ߇߃߃߀߀׀Հ聀ꀀꁀ\u0002)\u0002)ППԀԀԃ\u0002(𕰅ꁪ\u0003'߂ՀՀꁀꀀ\u0004!ԿԮתߊ\u0004\u001fժժ\u0004\u001f🀀ꏀꁀ\u0004!Ԇԁ\u0006\"އ𿀀𿀀МІЎ\b#🀀𿀀\b\u001cƁ࿀𿀀௝ժЊ\u0006\u001b㿀󿀀􏀀􇀀􇀀􃀀􁀀Ⱥ\u0005\u001a㏜󟞀ꁀտ࿀࿀\u0003\u0019ǂÀрӀꏀ\u0004\u001d􃀀Џп\u0003\"蟀\u0003$\u0003'ꇀꇀ臀臀胀胀胀ꀀꁀ\u0002(п࿀\u0005&🀀🀀激ԿпПЎ؆ނ߀߀׀ꇀꀀꁀ\u0004%ǁÃ׊ׂꏀꀀꁀ\u0005&Ͽ࿀࿀🀀ժՊꁀ\u0006'က𿀀࿠🠀🨀ǂ׀臀ꃀ\u0003)ֿ֞ގߎ߂ׁ׀Ԁԁԃ\u0005+🀀࿀࿀а🀀\u0007)࿀Ꝁ\b\u001eꟀ֮ޮ޾\u0006\u001b࿦𿾀߂׀Հޮޮ\u0006#׊ՂՀ\u0005!🀀߂ׂՀо\u0002'܆܆܆܆܆܆܆؆\u0002'ܾоԿԟ࿀\u0003(؀׀߀߀\u0003(ÇÇÇ࿁Ŀ࿀࿀\u0003'ߊނ􀀕\u0003%ППОЃԀԁԃ\u0003&և׃׃փփցցց\u0002'꿨\u0006\fǀ߄ߜߞՇ\b\fը߾߾ׇׇ׀𕀎\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0006\u001b葠𗠿ЯЬЬЮ"
  },
  {
    "path": "04 Support/DRAZ/IP/IMG.CHTABLE2",
    "content": "C`XaabUccd`eef9ggh\u001fi\"i%i(i|ii\"jtjjhk\u0006lzllSmmVnn`oo2pppqqBrrsshtt|u vvwxPy\u001azz]{{||L}}}\f~P~~\u001c\fq\u0005)ϟ𕀀𗀀𗀀׀߀߀߀׀׀🀀🀀\u0003'เเ࿠􀀕\u0006'𳀀߂߂߀𝀀🀀🀀\u0004&🀀ԀԀ🅀𿅀𿁀𿁀ເ࿀࿀\u0004&ᇀÇǏՀ׀߀߀߀߀߀🀀🀀\u0005%ϟԂՊ𿁀𿁀𻀀࿀࿀\u0005$ՀՀ߂߇ނІЎ\u0004!ގ܂ъ\u0005 ъՃ\u0005#Ͽϟ߃߂߂Ї\u0005$𼂀ßÿЀЯ\u0004&𸀀ßǿ߂ހ܆؎Оீ\u0004%㟀߀߀πǀǀÀ׀תը🀀🀀\u0001\u0001\u0001\u0001\u0001\u0001\u0002)쏬\u0002)쏬\u0002(؎؎ЎЏЀЁԃԇ\u0002(\u0003(߂߀׀聀耀ꁀꃀ\u0003(߂ߨߨ׊ׂՀ샀耀ꁀꃀ\u0004'𿀀𿀀𿀀🀀܇Ǫժ耀ꁀꃀ\u0003&ժՂ耀ꁀꃀ\u0003$࿀࿀ނ߆߆߃ׁׁ耀ꁀꃀ\u0003#ԟԏԇ􀀔\u0003&샀惀⁀􀠵\u0003/࿀܇ꏀꏀꃀ\u00032࿀菀\u00028ނ؂ЎООܞܞІЀЀ\u00026𝠝\u00021܎܆؆ЂЀЁЃЃЀ\u0003(࿀\u0002(꿪\u0004)🀀🀀🀀𿀀࿀𿀀ԿԾ𻀀𺀀຀ЂЂІ\u0001\u0001\u00033࿀࿀\u00035࿀\u00035ׁׁցԀЁԃԃЃЁЀ\u00027\u00029ЎООО\u00027ގ؎؆ЀЃЇЇЇЇЃЀ\u00036Çχ臀聀耀\u00036聀聀聀샀聀耀\u00043က぀ǃ燀Ǉ𿀀𿀀聀聀聀聀耀\u00043胀臀臀胀샀\u00042矀𿀀𿀀𿀀𿀀փփԁ􀀀􁀀􁀀􁀀􁀀\u00042࿀𿀀𿀀؇؃ЃЃЁЃ􃀀􁀀􀀀\u00042࿀𿀀\u0005#㿀󟀀񏀀񇀀ЪԪ臀臀\u0004$վԺЏԁ􃀀\u0004#𿀀🀀𿀀࿀࿀Ꟁ\u0004&࿀՞Ն\u0003$пď\u0003\u001dпІЎ\u0003\u0017По\u0003\u0013Ǐ臀\u0003\u0014\u0003\u0016\u0004\u0018燀񟁀񿀀񟀀῀\u0004\u001a\u0004\u001dχ㏀㇀　蟀Կ\u0004\u001eៀ𾀀\u0004!ُ𛀀𻀀ֿן臀\u0003#܆؎܏֏ꇀ\u0003&ꀀເເԃԁ\u0002'Џ؏؏؏؎􀕀ԁ\u0002'Џ؏؏؏؎􀕀\u0005%񇀀󇀀χЪ􋀀"
  },
  {
    "path": "04 Support/DRAZ/IP/IMG.CHTABLE3",
    "content": "1m``\u000fa_aapb0cc`ddqee\u0017fff7ggZhhRii(jjjbkkRllDmOmUm`mnmmmmmm\u000bnCnWn}nnnnnnnnnnnnsn\u0002(菨\u0002'ԏЏЏЎЂЂЇ\u0002'ԟԟЎЊЀԀ\u0003'ßρ࿁ԇЎЂЏ\u0004&灀߁臀臀\u0005&Ǐ🇀𿀀𿀀࿀࿀ЪЪ𿀀𿀀࿀\u0004&𿀀臀\u0004%ЀǏχ𿎀🀀🀀🀀\u0004&ρ𿁀ԂԂԀԁԃ\u0003'࿀ՂԂԀԁԃ\u0002(׀׀߀ހހހ\u0002)࿠\u00025耈\u0002,🨟胊\u0002,ՎԞ\u0003-聀ꀀ\u0004&ʿꟀꏀ菀ꏀ뇀냀\u0004!ρ\u0004\u001c\u0005\u0016ŏş֠͟ퟀ߬\u0005\u0014Տ叀埀ޏ\u0005\u0018󀀂񀀀\u0004\u0016ſ\u0004\u0019꿀\u0004\u001c蟀\u0004\u001f\u0004\"\u00023🠟胈\u0001\t\u0002\u0002\u0003\u0003\u0003\u0004\u0003\u0007\u0001\u0007\u0003\u0005\u0002\f\u0003\n\u0003\u0010\u0003\u0012\u0003\u0006က\u0003\f\u0004\u0004\u0003\u0004\u0003\u0007\u0002\u000b\u0002\u0004\u0003\u0004\u0002\u0007\u0003\u0002"
  },
  {
    "path": "04 Support/DRAZ/IP/IMG.CHTABLE4",
    "content": "\u0013)``awbRc&dde\u0016ffgEhhijkkDl\u0018mmm\u0005\"ß🀠߀߀߀ꇀꃀꁀ\u0006#࿀瀀🀀🀀🀀ԪԪ\u0006\"࿀𿀀󏀀߀߀ꟀꟀꏀ\u0007\u001f🀀ρժ߀\u0006#𿀀վԞԎԯկի\u0005&🀟Ǐׇއ܆܂߂߂߀߀🀀🀀\u0004&ꏀꏀ뇀녀녀࿀࿀\u0004%𿾀݀݀߀ꀀꁀ\u0006!🀀𿀀烀տտկЂկ\u0005$蠀ßǟϏ࿏ꇀꁀꀀ\u0005#胀𿟀ԪЪ\u0005#ߟ߀߀𸍀РШЪꃀ\u0005%ꗀꗀꗀꀀꁀ\u0006$ꃀꁀ끀࿀࿀\u0006%🀀𿀀𿀀՟ԿппЮخ؎ЇԀԁԃ\u0005+󏀀׀ςЀЀ\u0006#🀀࿀񏀀χ࿁࿁𿁀𿁀𿁀ԿտՏцЊԀ\u0005#ԀԪտԿԿԁԃ\u0001\u0001\u0004$׃ׁ׀߀߀߂߂׀Հ땀ꅀʇ࿀࿀\u0004%ՁՁպ׀պ׀׀߀\u0004&Ճׂׂ߂굀ЂԀ\u0004*𿀀𿀀𿀀Ձ׀׀߀\u0005&🀀߿ծծՀ׀ꁀ\u0006\"ǟժߟןՏՂՂ\u0005#㏀ի\u0005%࿀࿀ЪՀ׀蕀ꇀꀀ\u0004$ß🀀׀׀ԾՀԸꁀ\u0007\u001fպЪ݂ݪݪ"
  },
  {
    "path": "04 Support/DRAZ/IP/IMG.CHTABLE4.GD",
    "content": "\u001a7``abcpd:eezfNg\u000ehhiIj/k\u001bllmZnnoLpptq\u000err$s\u0005$񯅀񯁀῁῀ៀ՟՟՟՟ԟП菀𿀀ꃀ\u0006%߀翀վվտԿԿ🀀🀀ПЏ叀叀\u0006$࿀𿀀􇀨ꟀꏀՀ🁀𿁀ꁀ\u0007!🀿՘࿀ԘԪԪԪЪЪ🀀О܂ӔՅ׀\u0006%߿߿߿տԾԀԂԪЪЪ뾅ꚅʄǀ\u0005(՟ԊԂՂ׀𗀀⏀ꏀꏀ폀׏\u0004(Дԧԯ\u0004'ԔДоꀀꃀ\u0006#🀀ԿԾԾԾЪЪЪʀʀπ߀߀Ѐ\u0005&􏀀􇀀Ԥжܞꁀꃀ\u0005%ꁪ\u0005%è߫߯د࿀ៀ埀埀􏀀􏀀ٿ՟՟ԏ\u0005'ꁀ\u0006&԰ԂԪԪԪت\u0006'🀀࿵ԀԀ԰ԼԼ԰ԊԪЪ럀ʀڀЇԀԁԇ\u0004*ЎО\u0006$🀀ԀЊЪЪꁀӞ\u0005%ЀЊª߂߀߀ԁԇ\u0004'񏴠ԔДоꀀꃀ\u0004'ԔДоꀀꃀ\u0005$߆򿀀򟀀忀🀀菀\u0004%՞ՆՀꀀ࿀꿀􏀀ԃ\u0004$聀ЪЪԪԊԂԂԊКкк῀\u0004&ŊŊŊŊ􃀀끀ீ𿀀\u0006\u001b𿪅ʯԪЪЪžѾѾѾѾ՞՞ޞ\b\u000eԪЊꫥꏠꏠêժǪՊՂ⪕⫅߂׃և"
  },
  {
    "path": "04 Support/DRAZ/IP/IMG.CHTABLE4.SH",
    "content": "\u0014+``aybTc(dde\u0018ffgGhhijrkukIllm&n\u0005\"ß🀠߀߀߀ꇀꃀꁀ\u0006#࿀瀀🀀🀀🀀ԪԪ\u0006\"࿀𿀀󏀀߀߀ꟀꟀꏀ\u0007\u001f🀀ρժ߀\u0006#𿀀վԞԎԯկի\u0005&🀟Ǐׇއ܆܂߂߂߀߀🀀🀀\u0004&ꏀꏀ뇀녀녀࿀࿀\u0004%𿾀߀߀߀ꀀꁀ\u0006!🀀𿀀烀տտկЂկ\u0005$蠀ßǟϏ࿏ꇀꁀꀀ\u0005#胀𿟀ԪЪ\u0005#ߟ߀߀𸍀РШЪꃀ\u0005&ꗀꗀꗀꀀꁀ\u0006$ꃀꁀ끀࿀࿀\u0006%🀀𿀀𿀀՟ԿппЮخ؎ЇԀԁԃ\u0001\u0001\u0006#🀀࿀񏀀χ࿁࿁𿁀𿁀𿁀ԿտՏцЊԀ\u0005#ԀԪտԿԿԁԃ\u0004%𿾀߀߀߀ꀀꁀ\u0004%𿾀߀߀߀ꀀꁀ݀݀߀ꀀꁀ\u0004%𿾀݀݀߀ꀀꁀ"
  },
  {
    "path": "04 Support/DRAZ/IP/IMG.CHTABLE5",
    "content": "\u0013)``saGb\"ccdAeef:ggrh(i\u0002jjkl\u0011mm\u0004\"ß🀀🀀𕀀׀׀ꕀꅀꁀ\u0005&ÿծծՀ׀ꃀ\u0006#㟀ժݟ׏ՏՂՂ\u0007\u001f🀀뀀🀀պЪ݂ݪݪ\u0006\"뀾🀀׊ׂ׀\u0005%ៀ󏀀߆݆߂߂߀߀🀀🀀\u0004%ǟ⁀࿀࿀\u0004$ׁׁ׀߀߀߂߂׀Հ땀ꅀʇ࿀࿀\u0005\"࿀ի\u0005%߿߿࿀ീ򵀀׀׀蕀ꇀꀀ\u0004&Ճׂׂ߂굀ЂԀ\u0004'𿀀𿀀𿀀Ձ׀׀߀Հ\u0005$຅຅к򁀀Ў\u0006$࿀Ъી寀𫀀Ћԏԁԃ\u0006$܇𿀀ீீ𯁀߿߯֫֫Ջ\u0005+󏀀׀ςЀЀ\u0006\"ǟժݿןՏՂՂ\u0004#߆߂݂݂݊\u0004%ՁՁպ׀պ׀׀߀׀߀"
  },
  {
    "path": "04 Support/DRAZ/IP/IMG.CHTABLE5.B",
    "content": "\u0013)``saGb\"ccdAeef:ggrh(i\u0002jjkwl\u0005mm\u0004\"ß🀀׀׀ԾՀԸꁀꁀ\u0005&🀀렁Ͽ￀ծծՀ׀ꃀ\u0006#胀耠耀ៀժߟןՏՂՂ\u0007\u001f🀀退뀀𿀀պЪ݂ݪݪ\u0006\"耞뀾𿀀׊ׂ׀\u0005%ހៀ󏀀߆ކ߂߂߀߀🀀🀀\u0004%Ѓǟ⁀࿀࿀\u0004$׃ׁ׀߀߀߂߂׀Հ땀ꅀʇ࿀࿀\u0005\"ի\u0005%輅耄࿀࿀ЪՀ׀蕀ꇀꀀ\u0004&Ճׂׂ߂굀ЂԀ\u0004'𿀀𿀀𿀀Ձ׀׀߀\u0005$󏀀տ࿅ு஁ЊЎЎ\u0006$耞ůիી຀຀ЂІЎ\u0006\"𿀀ޯޯ֫֋Ջ\u0005+󏀀׀ςЀЀ\u0006\"胀耠耀ǟժߟןՏՂՂ\u0004#߆߂݂݂݊\u0004%ՁՁպ׀պ׀׀߀"
  },
  {
    "path": "04 Support/DRAZ/IP/IMG.EDTABLE",
    "content": "-]`b\u0001eSgVg_ghgqgzggggggggggg(hZhlh~hhhhhhhh\u000ei i2iDiVihi|iiiiiiiiij\bJÁఀကρ怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀瀀́ρ\bJ怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀Á\bJ瀀က󁀀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀Á\u0001\u0001\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0002)\u0004\f\u0002\b\u0002\b\u0002\bÁ怼Á\u0002\bǃǃ\u0002\bǃǃ\u0002\bǃ\u0002\bǃǃ\u0002\b\u0002\b\u0002\b쀘\u0002\b΀π\u0002\bՂǃ׃\u0002\b\u0002\b\u0002\bǃǃǃ\u0002\tƁƁ\u0002\b\u0001\b\u0001\b༘\u0002\b\u0001\b࿃\u0001\b㿃\u0002\b\u0003\u0003\u0006%꿀ꟀꟀꟀꟀꟀ韀񿀀տԾ"
  },
  {
    "path": "04 Support/DRAZ/IP/IMG.PAL2.BK",
    "content": "._`aaabccccccccccdfeefggLhOhRhUhXh[h]iiijzk}kkulllmmn=oop\u0019q+qq/rr\u0004@쀀ȍفϑ󙲃̷؞계̪۪Ϫ֪͇݅Ӫ̪تȪɪ̪۪Ϫ֪͇݅Ӫ̪تȪɪ̪۪Ϫ֪͇݅Ӫ̪تȪɪ̪۪Ϫ֪͇݅Ӫ̪تȪɪ̪۪Ϊ݅Ӫ͇̪ȩϑ\u0004\rϑ΅⁀즄𳄀턀؅\u0004<ݻݻݻݻݻݻݻ݆ݻĈрݺݺݺݺݺݺݺݺݸĀݻǻݻݻݻݻݻݻݻݻݻԀ\u0004>ĀĈĈĈĈĈĈĈňЈȈĀĈĈĈĈĈ\u0003\tĈňЈ\u0004\u0003ݻݻ\u0002\u000b\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0004<ĈĈψ꿬꿴֢آܹ޵\u0004\"ĈĈψ꿌꿄꿄꿀꿀¢¢\u0004\u0019ĈĈψČ꓌τ꿄꿀꿀¢¢\u0004<ĈĢĈĢĈĢĈĢĈĢĈޞڞڌڌތ܌ތ݌݌݌ތ܌ތڞڌڌތܿ݀݀ހ܀ހڀڀڀހ܀ހ݀݀݀ހ܀ހڀڀڀސ܀ހ݀\u0004<ĈĢĈĢĈĢĈĢĈĢĈĢڰڰڰްܰްݰݰݰްܰڰڰڰ݀݀݀ހ܀ހڀڀڀހ܀ހ݀݀݀ހ܀ހڀڀڀހ܀ހ\u0004\u0013݀݀ހ܀ހڀڀځށ܁ރ݃݇ݏ޿ժ\u0004\u0013݀݀ހ܀ހڀڀڀހ܀ހ݀݀݀ހժ\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0004@쁀ȝ󀀎ك瑻℘ϣ󹄎턛ۅ℘ϣ󹄎턛ۅ℘ϣ󹄎ۅ℘ϣ󹄎턛ۅ℘ϣ󹄎턛ۅ윲ͣ󦄎ٹ瑛\u0004\f瑛𜲇℀Σไ\u0001\u0001\u0004<ݻݻݻݻݻݻݻ݆ݻĈрݺݺݺݺݺݺݺݺݸĀݻǻݻݻݻݻݻݻݻݻݻԀ\u0004=󀀀ك恠✠ϣ̣ħǆͦ󆜲ۧ⼆ϣ̇ćǦ͆✠ǜسׯϟʗޜ񀀀\u0001\u0001\u0004\u0003ݻݻ\u0004:ꀀꀀꀀժꑢĈꑢĈꑢĈꑢĈꑢĈꐢĈꐢꐢꁢꇈ꜠ٳׯϟ˗Ꝼꀀꀀꀀꀀꀀ\u0004\fĀĈ\u0004\u0013ժժȡժժ\u0004)ĀĈՊЪȡՊЪ\u0004\u0015ՊЪȡՊЪ\u00044ĄĄĄĄĄĄĄĄĄĄÂĀāǂ܀\u0004\u001eĈĠĿѿĀĀĀĀĀ\u0002;\u0004:ۀπۀπ۠π۠ρۡߛߛۂφۄۙ۳ۿޝޛ\u0004\u001eժժĈĈĈĈĈĈĈĈĈĈĈĈĈĈĈ✠Ĝٳׯϟ˗ޝ\u0004\u0004ψۀ\u0004 ժժĈĈĈĈĈĈĈĈĈĈĈĈĈĈĈĈĈ‑ĈǇ˗\u0004 ժժĈĈĈĈĈĈĈĈĈĈĈĈĈĈĈĈĈ③ĸĈڑĈĈΑ߄ޏ񀀀\u0004\u0016\u0004\u0003ကۀ"
  },
  {
    "path": "04 Support/DRAZ/IP/IMG.PANELS",
    "content": "n`\u0011a7aiaaaabcc7d)e[exevff\u001eg8gRgxgjhxhhhhhfiiiii/jajjjj\u0006kTkzkk\u001elll&mXmfmxmmmmm\u0006n&nFnfnnnnnnnnn\u0002o.o8o=o@ofoo9pwpzp-qqrrrst\buJuuuuu\u000ev v\u0012wlww0xxxx\u0003yEyGzYz{zzz7{{+||\u001f}Q}~~~~\u0004\fĈĈĈĈĈ\u0003\fĀĈĈĈ\u0004\f\u0004\u000f\u0004\fĈĈĈĈĈ\u0003\fĈĈĈ\u0004<Ĉ݈݂ݢݢݢݢݢݢݢݨ݂ݢݢݢݢݢݢݢݨ݂ݢݢݢݢݢݢݢ\u0003<ĀĈĈĀ\u0003\b\u0004\u001dĈꐢꀢꀈꀠꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀ\u0004<ĀĈĈԀІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІ\u0004\fІІІІІІІІІІІІ\u0003\tЇП\u0004?󀀀ك恀✀ϣ̃ćǆ͆󆜲ۇ⼆ϣ̇ćǆ͆󆜲ۇ⼆ϣ̇ćǆ͆󆜲ۇ⼆ϣ̇ćǆ͆󆜲ۇ⼆ϣ̇ćǆ͆󆜲ۇ⼆ͣ̇ٹ䆱ćǆ͆\u0004\f܇̣̇䆀ćǆ͆󆀀܇\u0004\u001dĈ߀݀Հ̀݀݀݀݀瀀瀀瀀瀀瀀瀀\u0004\u0006\u0004\u0006ĈĈĀ\u0004\tݻлݻĈ\u0004<ĈĈՐ؊⪈լ֬ج଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀଀ଁଅକՀ\u0004\u0003ݻݻݻ\u0004\u0003ݻݻ\u0004\u0003ꀀ\u0004\u0003ݻݻĈ\u0004\u0003ݻݻ\u0003<ŀĈ\u0001\u0001\u0002?\u0003\u0006\u0004\fĈĈĈĈĈĈ\u0004\fĈĈĈ\u0004\rݻлݻĈ\u0003\rĮݻĈĈ\u0004\u000bĈĈň񢀀Ј\u0002\u000bǀĈĈĈ\u0004\u0013Ĉ됢Ć񤀱\u0002\u0012ǀƈƊĆ\u0004\u001bĈѣċ둣Ň𠠈\u0002\u001aǀÈǎ\u0004\u001aĈѣ둧ņ𠠈\u0002\u0019ǀǈǎ\u0004\u001aĈѣ둧ņ𰠈𠠈\u0002\u0018ǀǈǎ\u0004\u0003ݻݻ\u0004\u0004ݻݻݻ\u0004\u0003ݻݻܻ\u0003\nӀӀӀр׀܀Ѐ\u0003\nߐӀӀӀӀрԀЀ\u0003\n׀߀ÀӀӀӀӀЀЀ\u0003\nр׀߀ÀӀӀӀЀЀ\u0003\nӀр׀߀ÀӀӀЀЀ\u0003\nӀӀр׀߀ÀӀЀЀ\u0003\ñӀӀӀр׀߀ÀЀЀ\u0003\nӀӀӀр׀߀ЀЀ\u0003\b̃ӌӌӌэׇߜ\u0003\u0007̃ӌӌӌэׇ\u0003\u0006̃ӌӌӌэ\u0003\u0005̃ӌӌӌ\u0003\u0004̃ӌӌ\u0003\u0003̃ӌ\u0003\u0002̃\u0003\u0001\u0003\u000eĈԀЀЀЀЀЀЀЀЀЀЀЀ\u0002\u0004ĀĈ\u0001\u0003\u0001\u0001\u0003\fЀЄЄЄЄЌЌЌэчќ\u0003\n\u0003;݈݂ݢݢݢݢݢݢݢݨ݂ݢݢݢݢݢݢݢݨ݂ݢݢݢݢݢݢݢ\u0001<\u0001\u0001\u0003;ઝઝ\u0003?ઝ\u0003<ĀĈĈĈĂ\u0004\rݻĈĈĈĈĈ\u0004\u0003ݻݻ\u0004<ĈĈĈĈĈĈĈĈĈĈĈĈ􎀀􎀀܋܋􎀀􎀀܋܋􎀀􎀀܋܋􎀀􎀀܋܋􎀀􎀀܋􎀀\u0004<ĀĈĈĈĀĈ񿀀лл𮀀𮀀лл𮀀𮀀лл𮀀𮀀лл𮀀𮀀лл𮀀𮀀л\u0004\u000f􎀀ܻժݻĈĈĈݻժܻ\u0004\u0010лݻժݻĈĈĈݻժݻ\u0003*ĀĈĈĈĀ\u0001\u000fԔ\u0001\u000fԜЀ\u0001\u000f\u0001\u000fАՕ\u0001\u0010ؘА\u0004<ĈĈĈĈǈܹ޵\u0004\u0016𐀀\u0004\"ĈĈĈĈǈ󿀀㿀ỀṀ\u0004\u000e𐀀\u0004\u0019ĈĈĈĈǈ󿀀㿀ỀṀ\u0003\u0007\u0004\u0012ĈĈ܈̣ĈĈ瑢ǈ󈀀㣀ዀṀ\u0002\u0005\u0004\u0010ĈĈĈĈÈዀᡀ\u0004@쀀ȍف瑛℘ϣ󹄎턛ۅ℘ϣ󹄎턛ۅ℘ϣ󹄎턛ۅ℘ϣ󹄎턛ۅ℘ϣ󹄎턛ۅ윲ͣ󦄎ٹ瑛\u0001\u0010АԐА\u0002\u0010ȀĀԀЀ\u0002\u000fЀрՀԀ\u0002\u0010рЀЀԀ\u0002<Ĉ\u0002<Ĉƀ\u0002<Ĉƀ\u0002<Ĉ܈̣ƀ\u0002<Ĉƀ\u0004\f瑛𜲃℀Σไ\u00063ĈĈĈьĈݻՋݻݻݻ׌ĈĈԋՌы񍀀􎀀ЌЌЍЌ\u0006\u0004̙݇ժՆ̙\u0006\u0004߻̙ߪժ̙\u0006\u0004ݻժժժݻ"
  },
  {
    "path": "04 Support/DRAZ/IP/IMG.TEXTSET",
    "content": "+Y`b`k`t`}````````````````````\u0007a\u0010a\u0019a\"a+a4aDaMaVa_ahaqazaaaaaaaa\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007྆\u0001\u0007澆\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0007椼\u0001\u0007\u0001\u0007憆\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007涞\u0001\u0007\u0002\u0007ƁƁցƁ\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007涞\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0002\u0007ƁցƁƁ\u0001\u0007漘\u0001\u0007\u0001\u0007"
  },
  {
    "path": "04 Support/DRAZ/IP/MIR",
    "content": "ݻݻݻݻݻݻݻݻݻݻݻݻݻӆӆ͈ݻĈͣͣΆꄀІꄀІ͈ݻ̇̇ΆꀀІȀꀀІЈժΪժՊЪժժժժժպժժժĢ䆀䆀ΆꀀІꀀІݺݢććΆꀀІꀀІݺ݂ň걞ǆ걞ǆΆꀀІꀀІ݈ݻ͆͆ʆĈꀀІꀀІ݈ĎĈĈĈĈĈĈĈݻۈĈццĈĈĈĈĈĈĈĈݨĈݻݻݻݻݻݻݻݻݻݻ߆꜆ц꜆цݻĈ͈⼆⼆ʆꄀІԀꄀІݻ࿀Ԁ͈ϣϣΆꀀІꀀІĢ臁ݸ̇̇ȓȓꀀΓȓꀀΓȀݢݺ䆀䆀ΆꀀІꀀІ݂ňݺććΆꀀІꀀІݻĈ݈⁀걞ǆ걞ǆĈĈꈑĈĈꈑĈĀݻĈĈĈĈĈĈĈĈī݈ꑻІꑻІѿĈĈѿĨĈꀑĈĈꀑĈĀݻݻݻݻݻݻݻݻݻĈꜲ󆀀Ꜳ󆀀߆ꇆцꇆц͈ݻĈꜲۇꜲۇ߆ꄀІՀꄀІ͈࿀ݻ⼆⼆ΆꀀІꀀІݸǂݢȓȓϣϣΆꀀІꀀІݺݢ̇̇ΆꀀІꀀІݺݨĈ䆀䆀ΆꀀІꀀІ݈ݻňććƿÈĿèĈĀĈĈĀĈ݈ĈĈĈĈĈĈĈĈݻÈѿĈ걎߆걎߆ĿĈĿĠĈĈĈĈĈĈĈԈ͆͆ƿꍆцꍆцݻĈ͈󆀀󆀀ƿꀀІрꀀІݻ͠ꜲۇꜲۇΆꀀІꀀІݢȓȓȓȓȓȓݺ⼆⼆ΆꀀІꀀІݢоݺϣϣΆꀀІꀀІݨĈ̇̇ΆꀀІꀀІݻĈĈĈѣĨĈĈĈĈī݈③ĿÈ䆀䆀ӿĈĈѿĈĠꈑĈĈꈑĈĀݻĈѿĈĈĈĈĈĈĈīݠĈĿك׆ك׆ĈĈĢĈꈑĈĈꈑĈĀԈݻĈꑛǆꑛǆ޿ꌂцꌂц͈ݻĀ͆͆޿ꀀІЀꀀІ͠ݻ󆀀󆀀ΆꀀІꀀІݺǂݢꜲۇꜲۇήժժΪժժꀀЮպժպꀀЮՊЪݺݢ⼆⼆ΆꀀІꀀІĈϣϣΆꀀІꀀІ݈ĿÈćĈĈĈĈĈݻÈѿĈ̃̃ĈğĢĈꢄĈĈꢄĈݠĈĿĈĈĈĈĈĈĈݻĈĀццĈĈݻĈĈĈĈĈĈݻĈ͈ćć߆ꌂІꌂІݻĀЀ͈걞ǆ걞ǆ߆ꀀІꀀІݻ͆͆ΆꀀІꀀІݢׂݺժΪժժ󆀀󆀀ΆꀀІꀀІݢݺꜲۇꜲۇΆꀀІꀀІĈĈш⼆⼆ΆꀀІꀀІݻĠĈѿĈĈĈĈĈĈī݈ğĀϣϣĈĈĈшꈁĈĈꈁĈĀݻĈĈĈĈĈĈĈĈīݢĈĈꝾӆꝾӆԨݻݻݻݻݻݻݻݻ͈ݻĈٹ䆀ٹ䆀̃ΆꌂІꌂІ͈Ѐݻćć̃ʆꀀІԀꀀІݻǢ걞ǆ걞ǆ̃ήժժΪժժꀀЮպժպꀀЮՊЪݺժΪժՊКҪժժժժպժժժݢ͆͆̃ΆꀀІꀀІݺݢЈ󆀀󆀀̃ΆꀀІꀀІĈшݻĈꜲۇꜲۇ̃ΆꀀІꀀІ݈ğĈĆǈĈĈĈĈݻ߈Ĉ܆܆ĈĎĈĈĈĈݢĈĈĈĈĈĈĈĈĈݻݻݻꇎӆꇎӆԨݻݻĈ͈̇̇ʆꄂІЀꄂІݻ͈䆀䆀ΆꀀІĀꀀІݻǢЈժΪժժććΆꀀІꀀІݢݺ걞ǆ걞ǆΆꀀІꀀІݢЈݺ͆͆ΆꀀІꀀІݻĈ݈󆀀󆀀ΆꀀІꀀІݻĈĈĈĈĈĈĈĈī݈ĎꜲ׆Ꜳ׆ĈĈĈňꈐĈĈꈐĈĀݻݻݻݻݻݻݻݻݻݻݻӆӆݻݻݻݻݻݻݻݻ"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.ARCH",
    "content": "ĐфффǍ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗Ԁ܀ĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑ0櫆櫆旝đđđđđđđđđđđ旝đđđđđođđĐđđđđđđŔđđđđđđđŔ\u0005\u0004V\u0004\u000b\u0005V\u0004\u0001Ǎ͗͗͗͗͗͗͗͗Ԁ\u0006\u0004\u0005P\u0004\u0004\u000b\u0005W\u0004\fĀݷݷݷݷݷݷݷݷݑݑ\u0005\u000b\u0005\u0005\u0001АԐА4\u0004\u0004\u0001櫆oǍ͗͗͗͗͗͗͗͗Ԁđđđđđ//Āݷݷݷݷݷݷݷݷݑݑđđđđđđđ\b݈\n\n\n\u000b/櫆\b\n\n\n\u0010/Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđđđė\b\n݈\n\n\u000e/\n\n\n\f\b\u0006/Āݷݷݷݷݷݷݷݷݑݑđđđđđā\u0005\u0004\u0004\t/櫆\u0003/Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđr\u001eSĀݷݷݷݷݷݷݷݷݑݑđđđđđđ\u0012\u0005\u0005\u0001\u0004ؘАC櫆rǍ͗͗͗͗͗͗͗͗ԀđđĔÆ\u0007N\u0004\t\u0003\u00184ĀݷݷݷݷݷݷݷݷݑݑđđđԁА\u0004АаАаđđ\u0005đŇ#\u0004櫆1!\u0004Ǎ͗͗͗͗͗͗͗͗ԀĐđĐđĐđ1!Āݷݷݷݷݷݷݷݷݑݑ܀đф%\u0006櫆8Ǎ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗ԀĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑ݀櫆櫆櫆"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.ARCHES",
    "content": "\"đđđđ0~đđđĐ2~6~Đ9Jđđđđ!\u000b~ǗǗǗǗǗ\u0019\u0004\u0010~\u0019\u0004\u0001\u000e~đđđđđđ#\n~&\u0001\b~đđđđđ(\b~'\b~đđđđđđ&\t~!\u000b~ǗǗǗǗ\u001b\u0004\u0010~ \u0004\u0001\u000e~Đ,\nJĀ~đđđ\u0012\u0013ĐĀ~đđđ\u0012\u0013Đd"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.ARCHMOD",
    "content": "Ǎ͗͗͗͗͗͗͗͗Ԁݗ\u0014ł-\u0005\u0005\u0005\u0005\u0004ݗ\u0013ΎΎ\u0007ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ\u0014\t\u0006櫆\u0014$ర̄˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014Ȅ.߿\u0014ՁĂ0篟Āݷݷݷݷݷݷݷݷݑݑđđđđđđ\u00140\u0001ϗ櫆\u0014-\u0001˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅ\u001f\u0005ճ߿Ο݀\u0013ΎΎ\u0007ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ\u0014\t\u0006櫆\u0014UǍ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȄU\u0014ՁĂUĀݷݷݷݷݷݷݷݷݑݑđđđđđđp櫆pǍ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅ\u001f\u0005ճ߿Ο݀\u0013ΎΎ\u0007ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđф\u0015\t\u0006櫆\u001d$ర̄˝\u0001　Ǎ͗͗͗͗͗͗͗͗ԀU߿݀W篟Āݷݷݷݷݷݷݷݷݑݑ݀\u0006K\u0001ϗ櫆H\u0001˝Ǎ͗͗͗͗͗͗͗Āݷݷݷݷݷݷݷݷݑ'T櫆'ՐĨTǍ͗͗͗͗͗͗͗͗\rȅ\u0010\u0014>\rՁĂ\u0010Մ\u0010đ>Āݷݷݷݷݷݷݷݷݑݑ\r\u0010\r>櫆\r\u0010\u000bםםםםם\u0004\nǍ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅ\u000b݀\u0013ΎΎ\u0007͗ĀĀܶĀݷݷݷݷݷݷݷݷݑݑđфđđ\u0014\tꡈ⣦櫆\u0014\u000bܙ\u0001ߛǍ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014Ά.✇߿݀,\u0004\u0004ۼ篟ĀݷݷݷݷݷݷݷݷݑݑđđĐđ)\u0004\u0004⣦⣦Ѐ\u0001ϗ櫆&\u0004ٱٱ\u0001˝"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.ARRS",
    "content": "\u000f\t\u0006\tՀՀ\u0005𳰰ՀՀ\u0004󀀀\u0004\u0004Հ\u0005Հ\u0004涞怀Հ漀Հ\u0005瀀Հ\u0007ՀǀՀ⁃˃\u0005\u0006\u000fđđđĒގ\u0004̄\u0001̄ͭ\u0011\u0005\u0006\t\tđǟ\u0005\u001d\n\u000bࠠ$\tQoQoQoQoQo\u0019\u0005\u0005\u0010\u000b"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.BACKBRICKS",
    "content": "\u000f\u0007\u0007\u0010\u0017\u0007\u0010\u0007\u0007\u0007\u0007\u0007\u0007đđđđđ\u0007\u0004\u0007\u0007݁\u000bđđđđđ\u0007\u0004\u0007\u0007݁\u000bđđđđđ\u0007\u0007\u0007\u0007\u0007\u0007\u000f\u0007\u0007\u0010\u000f\u0007\u0007\u0010\u0007\u0007\u0007\u0007\u0007\u0007đđđđđđ\u000f\u0007Ԑ\u0015đđđđđđ\u000f\u0007Ԑ\u0015đđđđđđ\u0007\u0007\u0007\u0007\u0007\u0007ݮ00\u0007\u0007\u0007\u0007\u0007\u0007đđđđđ0đđđđđ0đđđđđ\u0007\u0007\u0007\u0007\u0007\u0007##\u0007\u0007\u0007\u0007\u0007\u0007đđđĐ!đđđĐ!đđđđđđ\u0007\u0007\u0007\u0007\u0007\u0007ݮ00\u0007\u0007\u0007\u0007\u0007\u0007߿ʎʟߊ!߿ʎʟߊ!đđđđđ\u0007\u0007\u0007\u0007\u0007\u0007Ȣ$\u0006Ȣ$\u0006\u0007\u0007\u0007\u0007\u0007\u0007đđđđđđ0đđđđđđ0đđđđđđ\u0007\u0007\u0007\u0007\u0007\u0007ݮ\u0017\u0007\u0010\u0017\u0007\u0010\u0007\u0007\u0007\u0007\u0007\u0007đđđđđ\u0007\u0004\u0007\u0007݁\u000bđđđđđ\n\u0007Հ\u0010đđđđđ\u0007\u0007\u0007\u0007\u0007\u0007\u000f\u0007\u0007\u0010\u0007\u0007\u0007\u000b\u0007\u0007\u0007\u0007\u0007\u0007đđđđđđ\n\u0005\u0007\u0007\u0006\nđđđđđđ\u0007\u0007\u0007Հ\u0004\u0010đđđđđđ\u0007\u0007\u0007\u0007\u0007\u0007ݮ\u000f\u0007\u0007\u0010\u0004\u0007\u0004\u0018\u0007\u0007\u0007\u0007\u0007\u0007đđđđđ\u0007\u0004\u0007\u0007݁\u000bđđđđđ\u0007Ԁ\u0004\u0007\u0007\u0010đđđđđ\u0007\u0007\u0007\u0007\u0007\u0007\u000f\u0007\u0007\u0010\u0007\u0007\u0007\r\u0007\u0007\u0007\u0007\u0007\u0007đđđđđđ\u000f\u0007Ԑ\u0015đđđđđđ\u000f\u0007Ԑ\u0015đđđđđđ\u0007\u0007\u0007\u0007\u0007\u0007ݮ\u000f\u0007\u0007\u0010\u0001\u0005\u0007Á\u000f\u0007\u0007\u0007\u0007\u0007\u0007đđđđđ\u0007\u0004\u0007\u0007݁\u000bđđđđđ\u0005\u0005\u0001\u000fđđđđđ\u0007\u0007\u0007\u0007\u0007\u0007Հ\u000f\u0007\u0007\u0010\u0001\u0005\u0005\u0015\u0007\u0007\u0007\u0007\u0007\u0007đđđđđđ\u000f\u0007Ԑ\u0015đđđđőĒ\u0013\u0015đđđđđđ\u0007\u0007\u0007\u0007\u0007\u0007Հ0\u0015Vđđđđđ0đđđđēo#\u0005\u0004V\u0004đđđĐ!đēŐđ\u000b\u0005V\u0004\u0001ݮ0\u0005\u0004\u0005P\u0004\u0004߿ʎʟ!\u000b\u0005W\u0004\f#\u0006\u0001\u0005X\u0004\u0004\u0001Đđ0Đxݮݷń໮܀đݮ\u000b\u0004\u000b\u0004ݷńȇ㐐㐐㐐㐐\bȇ㐐㐐㐐㐐\bȇ㐐㐐㐐㐐໮㗐䐌ҡ㗐䐌ҡ㗐䐌ҡ㗐䐌\b\u0001⒡㗐䐌ҡ㗐䐌ҡ㗐䐌ҡ㗐䐌\b\u0001⒡㗐䐌ҡ㗐䐌ҡ㗐䐌ҡ㗐䐌\u0004܀ߓ䌌򜜲䌌򜜲䌌򜜲䌌𓏿\b̲䌌򜜲䌌򜜲䌌򜜲䌌𓏿\b̲䌌򜜲䌌򜜲䌌򜜲䌌𓏿\u0007݀"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.BALC",
    "content": "ĐфффǍ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗Ԁ܀ĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑ0櫆櫆旝đđđđđĀ\u001a\u001ađđđđđđ\u001a\u001a旝đđđđđođđĐđđđđđđŔđđđđđđđŔ\u0005\u0004V\u0004Őđ\u000b\u0005V\u0004\u0001Ǎ͗͗͗͗͗͗͗͗Ԁ\u0005\u0004\u0005P\u0004\u0004\u000b\u0005W\u0004\fĀݷݷݷݷݷݷݷݷݑݑ݈\u0001\u0005\u000b\u0005\u0005\u0001АԐА4\u0004\u0004\u0001櫆Ĉ∢oǍ͗͗͗͗͗͗͗͗Ԁđđđđđ//Āݷݷݷݷݷݷݷݷݑݑđđđđđđ\u000b\u001f\u0004/櫆ד\u000bՓՓ\u001f\t/Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u000b\u001f\t/\u000bݾݾ\u0004\u001f\u0004/Āݷݷݷݷݷݷݷݷݑݑđđđđđđ/櫆/Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđr\u001eSĀݷݷݷݷݷݷݷݷݑݑđđđđđđ\u0012\u0005\u0005\u0001\u0004ؘАC櫆rǍ͗͗͗͗͗͗͗͗ԀđđĔÆ\u0007N\u0004\t\u0003\u00183ĀݷݷݷݷݷݷݷݷݑݑđđđԁА\u0004АаАаđđĐđĐĐĐĐĐĐĐĕЀĐĐĐĐĐĐĐĕЀĐĐĐĐĐ櫆1\u0012\u0013\u000eǍ͗͗͗͗͗͗͗͗ԀĐđĐĐфффĀݷݷݷݷݷݷݷݷݑݑ܀܀櫆Ǎ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗ԀĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑ݀櫆櫆櫆"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.BG1",
    "content": "b\u001f<.0\u001d<+0\u001acđđđĐ0\u0016đđđ_-஻\u0010<ꮻ,đĐ0\u0010đđđĐ2,∢,ջ\u00106,\u00047\u0010Đ9JĀ~đđđ\u0012\u0013~~~Đ9kO90\u001b060\u001802đđđđ0\u0014đđđ0/0\u00100/đđđĐ2\u0010đĐāĐ2/6\u00106/Đ9\u0010Đ9\n\u0001\u00040\u00075\u00019<.?\u0013\u000b0m\u0010\b0m\u0010\u0004\u00050m\u0010݀\b0:\b\u0007F6\u0004ȇ㐐㐐㐐㐐\u0004\u001303\u0001⒡㗐䐌ҡ㗐䐌ҡ㗐䐌ҡ㗐䐌\u0004\u0001\u00140/\u0004̲䌌򜜲䌌򜜲䌌򜜲䌌𓏿\u0004\u0013đđđđ0.>\u00130.đđđĐ2\u0010đđđĐ2.6\u00106.Đ9\u0010Đ9\u000b0.đđđĐ2\u0010đđđĐ2.6\u00106.Đ9\u0010Đ9\u000b䐌ҡ㗐䐌ҡ㗐䐌\b\u0001\f\b/.̲䌌򜜲䌌򜜲䌌򜜲䌌𓏿\b\u000f\u0004đđđđ/.>\u0013/.đđđĐDđđđĐ1.5\u00125.Đ8\u0012Đ8\f\f"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.BG1.B",
    "content": "b\u001f</0\u001e<+đđ0\u001ađd0\u0017_đđđĐ-\u00100,0\u00102,Đđđ-\u0010đđĐ5,3\u0004\u00109KđĐĐĐĐĐĐĐĕЀĐĐĐĐĐĐĐĕЀĐĐĐĐĐĐĐ~\u0012\u0013Đфффđđ~~܀~98O06đđKđđ03H0/đđđđđCĐđđđđ0/E2/đđĐHĐđ5/L9/O\u000b\u00040\u0007\u00015\u00048\u0001<.?\u0013<m\u0010\b0m\u0010\u0005\u00040m\u0010\b0:>F7\u0001ЀȈ̜Ȉ̜Ȉ̜Ȉɇ\u0004\u0001\u001403\u0004ɐƎƎƎƌ\u0004\u0013đđ00\u0001晘ƹƹƹƹ\u0004\u0001\u00140.\u0007\u0004\n\n\n\u0007\u0006\u0012đđđđđ0.2\u00102.đđĐ5\u0010đđĐ5.9\u00109\u000bm\u0010\t09\u0005\u0007\u001506\u0001ᑎÃƠܱÃƠܱÃƠܱÃƠ٧\u0004\u0001\u001402\u0004ĤƮȠƮȠƮȠƮȠϿ\u0004\u0013đđ0/\u0004㇝ə幹㇝ə幹㇝ə幹㇝ə᧟\u0004\u0001\u00140.2ԁ\u0010đđđđđĐ0.3\u00103.đĐ6\u0010đĐ6.:\u0010:\u000b\u000b"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.BG1.GR",
    "content": "b\n\u0014<.0\n\u0012\u0001<+̳̳0\u001a̳c0\u0016_̳̳̳̱ǟ-\u0010<,㏿\u00010\u00102,̱ǟ̳̳,\u0004\u0010̳̳̰5,\u00043\u0004\u00109,<\u0010<态̳̰̰̰̰̰̰̰̰̰̰̰̰̰̰̰̰̰̰̰̰̰̿̿}\u0012\u0013̰Ì󌳌̳̳~\u0013\u0013\u0012~\u0012\u0001\u0011\u0001\u0010~9k\u0010<70\u001b06̳̳0\u0018̳̳020\u00140/̳̳̳̳̳0\u0010̰̳̳̳̳0/2\u00102/̳̳̰5\u0010̰̳5/9\u00109/<\u0010\u000b\u00040\u0007\u00015\u00048\u0001<.?\u0013\u000b0m\u0010\b0m\u0010\u0004\u00050m\u0010\b0:2\t\u0007\u000b06\u0004\u0001ؘؘؘؘܼܼܼ\u0001ۏ\u0004\u0001\u001303\u0004۱ΞΞΞΝ\u0005\u0013̳̳0/\u0004\u0001\u0004\u0001\u00130.>\u0012̳̳̳̳̳0.2\u00102.̳̳̰5\u0010̳̳̰5.9\u00109\u000b"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.BG2",
    "content": "a>>J)\b/FǓǗǗ\n\"\u0004Ǖĕđđ/B,/Bф\u0006\u0005\b đēА0B񱐘+5BĐ\u0007\u0004ࠠ\u0005$Đ6>\u000b.J)\u0006.FǓǗǗ\n!\u0006đ/B,.Bф\u0006\u0005\b ݷń0B񱑘+໮2BĐ\b\u0004ࠠ\u0005#܀Đ3>\f.J)\t.FǗ×Ǘ\n \u0005đđđđ.B+/Bđ\u0007\u0005\b\u001fđđĐ2B񱑙+6BĐ\b\u0004ࠠ\u0005\"ݐ9>\n0J.\u00070FǗƗƕĕ\u0007(đđđđ0B//3đ𰰰\u0007'đđđđĐ0đđđđđ3ᡱ043Đ\u0005\u0007,Đ7đđđđđđtD\u0005\u0004V\u0004\u0004@Őđ\u000b\u0005V\u0004\f<\u0005\u0004\u0005O\u0004ߟC\u000b\u0005V\u0004\fC\u0001\u0005W\u0004\u0004\u0001CĐ9<\u001c<\u001cB\u000b\u0005V\u0004\fB\u0001\u0005W\u0004\u0004\u0001BĐ8>\u001fB\u0001\u0005W\u0004\u0004\u0001BĐ8>\u001f"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.BG2.B",
    "content": "a>>JÓǖ)\bđđ/GË\n\"\u0005/BđȘ,Đđđđ/BȢ\u0006\u0005\b 0Bđő𸸘+đđ4B\u0007𰰰\u0005$ࠠ6>\u000b.JÓǖ)\u0006đđ.GË\u0004\n!\u0007/Bđؐ,בđѷݑ#BȢ\u0006\u0005\b 踠\u0006踠$Bđő񸸘+𝗝đđ\u0007𝗝đđ\"B\b𰰰\u0005#\t#>\r.JÓǖ)\tđđ.GË\u0005\n \u0006.Bđؐ+đđđđĐ.B⸺\u0007\u0005\b\u001f2Bđő񹸘+đĐ5B\b𰰰\u0005\"9>\u000b0JőÒ.\u0007đđ0Gˣ\u0007(\u00040BđÒđ/đđđđđđ/3\u0007'03đőИ0ݗđđĐ3đđđđđđ3\u0005\u0005,7\u0004>tD\u0005\u0004V\u0004\u0004@Őđ\u000b\u0005V\u0004\f<\u0005\u0004\u0005O\u0004ߟC\u000b\u0005V\u0004\fC\u0001\u0005W\u0004\u0004\u0001CĐ9<\u001c"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.BG3",
    "content": "\u0006333f&34\u0006\u0004\f\b\u0004\u0010\u0001\t\f\u000b34\u0004\f\u0005\u0004\u0010\t\f\u000b34\u0004\f\u0004\u0010\u0006őőő\f\u000b33<\t\b\u0007\u0004\u0006\u0004\u0005\u0004\u0004\u0004\u00043<\t\b\u0007\u0006\u0005\u0004憆憆3<\t\b̌\u0007̌\u0006̌\u0005̌\u0004̌̌33,\u0004\u0004\u0004\u00043,\u0005\u0006\u0006憆\u0006憆\u0006\u0004\u0006\u0004\u00043,\b\t\t\t\t\t\u0007\u0007\t\t\t\t\u0007\u0007"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.BG3.B",
    "content": "n\t興\t\r\u0005지Հ\u0006ـ\u0005π؀\u0006Հ\u0006ۀ\u0005쀀\u0005瀀Հ\u0007񛘘񀀀Հ\u0005Հ\u0005\u0019\tՀ\u0005π\u0019\t\t\u0019\u0007\u0017Հ\u0007\u0007\u0006\u0004\u0001\u000b΀333f&3,\b\n\f\f\t\u0007\u0001\b\f\u0006\u000534\f\u0005\u0010\u0005đ\f\u000b34\u0004\u0004\f\u0004\u0004\u0010\u0006\f\u000b33/\r\t\b\u0007\u0004\u0006\u0004\u0005\u0004\u0004\u0004\u00043<\t\b\u0007\u0006\u0005\u00043<\t\b\u0007憆\u0006憆\u0005\u0004\u0004\u0004\u000433&\u0006\u0004\u0004\u0004\u00043,\u00043,\b\t\t\t\t\t\u0007\u0007"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.BGTAB.PAL2",
    "content": "A1đǐŐ1\u00041đđđđē\u000e_Đ\t1\u000eꢢ_=đēϿ\u000e\t_\t\u0011 \u000f̌\f_\u0006\r đđđđē\u0017\u000fEĀЄ \u0017ꢢޞV΂\u0001蠠 đēϿ\u0017ع\\Ĝ߶ݘ؜\u0007 \u0018̬\u001bE윜\u000e @@Ā\u0015 \u0015\u0004\u0004\u0004>=@>=@>=5><\u000355==ܶܰ5==⣦\u00055==\b5==\f*@\bۼۼۼۼۼ*7\u0005⣦⣦⣦⣦⣦⣦\u0007*đŔ7ٱٱٱٱٱٱٱ\u0010*\u00067Ǎ͗͗͗͗͗͗͗͗Ԁ\u0005\u0005\b*#Ȅ\u0015\u0005\b*\tĀݷݷݷݷݷݷݷݷݑݑ\u0005*\u0005đđđđđđđđŔđđđđđ櫆\u0005*CđđđđđǍ͗͗͗͗͗͗͗͗ԀE\u0003Eđđđđđđđ\u000b\u0012\u0005Āݷݷݷݷݷݷݷݷݑݑ\u0004@\u000b\u0018櫆\u00045đđđđđđđ\u000b\u0001\n\r3⣦5\u0001\u000b\u0014β⣦3\u00055đđđđđđ\u00053\b5\u0003϶\t3\u000bǇđđđđē\u0006$\r\b⣦⣦⣦⣦⣦⣦\u0006ꢢ$\t⣦ͽͽͽͽͽ\u0004ٱٱٱٱٱٱٱđēϿ\u0006\b$\u0006񑓙*񑀃ȉȉȉȉȉȉȉ\u0006܌\u000b$ȉ϶̸ȉ"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.BGTAB2.PAL",
    "content": "k\b\nđŔБđđđđđđđđŔőőőőőőőőŔđđđđ\u0001đđđđŔđđđđđđđđŔđđđđđđđś\u0004ٱٱٱٱٱٱȉȉȉȉȉȉؼؼؼؼؼܴĀԀݑđ\r3BܴܴܴܴܴܴܴܔĀ\r333B\u000b3B⣦⣦⣦⣦⣦⣦⣦\u000b3B\u0005ٱٱٱٱٱٱ\u000b3B\bȉȉȉȉȉȉ\u000b\u0005\u0004\u0004\u0007"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.BOOKS",
    "content": "ĐфффǍ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗Ԁ܀ĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑ0櫆櫆旝đđđđđđđđđđđ旝đđđđđođđĐđđđđđđŔđđđđđđđŔ\u0005\u0004V\u0004\u000b\u0005V\u0004\u0001Ǎ͗͗͗͗͗͗͗͗Ԁ\u0006\u0004\u0005P\u0004\u0004\u000b\u0005W\u0004\fĀݷݷݷݷݷݷݷݷݑݑ\u0005\u000b\u0005\u0005\u0001АԐА4\u0004\u0004\u0001櫆oǍ͗͗͗͗͗͗͗͗Ԁđđđđđ//Āݷݷݷݷݷݷݷݷݑݑđđđđđđđ\b݈\n\n\n\u000b/櫆\b\n\n\n\t\u0005/Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđđđė\b\n݈\n\n\b/\n\n\n\u001a/Āݷݷݷݷݷݷݷݷݑݑđđđđđā\u0005\u0004\u0004\t/櫆\u0003/Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđr\u001eSĀݷݷݷݷݷݷݷݷݑݑđđđđđđ\u0012\u0005\u0005\u0001\u0004ؘАC櫆rǍ͗͗͗͗͗͗͗͗ԀđđĔÆ\u0007N\u0004\t\u0003\u00184ĀݷݷݷݷݷݷݷݷݑݑđđđԁА\u0004АаАаđđ\u0005đŇ#\u0004櫆1!\u0004Ǎ͗͗͗͗͗͗͗͗ԀĐđĐđĐđ1!Āݷݷݷݷݷݷݷݷݑݑ܀đф%\u0006櫆8Ǎ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗ԀĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑ݀櫆櫆櫆"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.BORDERS",
    "content": "đđđđđeЉРBeՁBđđđđđđeBQ\u0013B旝đđđđđ\u001fՄ+\u0013ЉРB\u001f+Մ\rՁBđđđđđđ\u000f\u0004ՁĂՆ\u0007\u0004\u0019\rB\u000f\u0004\u0007\u0004\u0005\u0002\u0019ՁĂ\rB旝đđđđđ\u001fՄ+\rЉРBʢʢ\u0012\rՁBđđĐđđđđđđŔՁĂՑđđđđđđŔ\u0005\u0004\u0004Ӌӣ\r\u0007)\u0004Őđ\u000b\u0005\u0018ՠ\u0006)\u0004\u0001ǍՄ͗͗͗͗Ԁ\u0005\u0004\u0005\u0018ЉР\u0007ЉР\u0014\u000f\u0004\u0004\u000b\u0005\u000b\rՁ\"\u000f\u0004\fĀݷݷݷݷݷݷݷݷݑՁĂݑ݈\u0001\u0005\u000b\r\u0007$\u0004\u0004\u0001櫆Đ\u0012ՁĂ\r\u00074ǍՄ͗͗͗͗Ԁđđđđđ\u0012\fшѡ\u0006ЉР\u0014\u0004\u0005\u0005\u0005\u0004\u000eĠրՁ!ĂĨĂĨĂĨĂĀݷݷݷݷݷݷݷݷݑՁĂݑđđđđđđ\u000e\u0004!¢ň櫆\u000eАЕĨА\b!\u001b\bǍՄ͗͗͗͗Ԁđđđđđ\u0012\fЉР\u000e\u0005\u0005\u0005\u0005\u0005\u0005\u0006\u0012Ԅ\f\t\u000eŭŃĂŭŃĂŭłĨĂĀݷݷݷݷݷݷݷݷݑՁĂݑđđđ\u0001\u0004\t\u0018ãǎ櫆\u0005\u000b\u0018)\u0004\tǍՄ͗͗͗͗Ԁđđđđđ\u0012#\u0005\u0005\u0005\u0005\u0005\u0005\u0006\u000eĠԀ\u0005\u0004\u0014ĨĂūłĨĂūłĨĂūłĀݷݷݷݷݷݷݷݷݑՁĂݑđđđđđđ\u000e\u0012գգãקǎ櫆\u000eАЕĨА\u001f)\u0004\tǍՄ͗͗͗͗Ԁđđđđđ\u0012Y\u0012Մ#3ĀݷݷݷݷݷݷݷݷݑĂݑđđđđđĐĐĐĐĐĐĐĕЀĐĐĐĐĐĕЀĐĐĐĐĐĐđĐĐĐĐĐĐĐĕЀĐĐĐĐĐĐĐĕЀĐĐĐĐĐ櫆Հջ\u0012\u0013\u0010\u0012\u0013\u000eǍͪ͗͗͗͗ԀĐфффĐфффՂĀݷݷݷݷݷݷݷݷݑĂݑ܀܀櫆ՀջǍͪ͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗ԀՂĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑ݀櫆Հջ櫆櫆"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.BYZ3",
    "content": "1\u0014\u0014\u0014\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b("
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.BYZ4",
    "content": "ȔϤۯ&鴚\bx勖w˖ͦڭˣۣ֬ٲ˖̦ڭˣۣ֬ٲ˖ͦڭˣۣ֬ٲ˖̦ڭrڬٲ˖ڴ鴚̙˖ڴڬٲ˖ڴ鴚̙˖h\t˖̦ڭˣۣ֬ٲ˖ͦڭˣۣ֬ٲ˖̦ڭˣۣ֬ٲ˖ͦڭr鴚̙˖ڴڬٲ˖ڴ鴚̙˖ڴڬٲ˖t\u0004ڭˣۣ֬ٲڭˣۣ֬ٲ˖ͦڭˣۣ֬ٲzׯ߿߯\u0006ׯ߿߯\u0006ڬٲ˖\u0006ׯ߿y߯ׯ߿\u0006߯ׯ߿\u0006߯ׯ߿\u0006߯\u0001yׯ߿߯\u0006ׯ߿߯\u0006ׯ߿߯\u0006ׯ߿y߯ׯ߿\u0006߯ׯ߿\u0006߯ׯ߿\u0006߯\u0001yׯ߿߯\u0006ׯ߿߯\u0006ׯ߿߯\u0006ׯ߿y߯ׯ߿\u0006߯ׯ߿\u0006߯ׯ߿\u0006߯\u0001\u0014\u0014\u0014\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b("
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.BYZ5",
    "content": "݀\u0005\u0005\u0005kĀڬٲ˖ڴ鴚̙˖ڴڬٲ˖ڴ鴚̙˖h˖̦ڭˣۣ֬ٲ˖ͦڭˣۣ֬ٲ˖̦ڭˣۣ֬ٲ˖ͦڭdđđđđ鴚̙˖ڴڬٲ˖ڴ鴚̙˖ڴڬٲ˖`˖ͦڭˣۣ֬ٲ˖̦ڭˣۣ֬ٲ˖ͦڭˣۣ֬ٲ˖̦ڭ`đđđđđĀڬٲ˖ڴ鴚̙˖ڴڬٲ˖ڴ鴚̙˖`˖̦ڭˣۣ֬ٲ˖ͦڭˣۣ֬ٲ˖̦ڭˣۣ֬ٲ˖ͦڭ`đđđđđđ鴚̙˖ڴڬٲ˖ڴ鴚̙˖ڴڬٲ˖`˖ͦڭˣۣ֬ٲ˖̦ڭˣۣ֬ٲ˖ͦڭˣۣ֬ٲ˖̦ڭ`đđđđđĀڬٲ˖ڴ鴚̙˖ڴڬٲ˖ڴ鴚̙˖`˖̦ڭˣۣ֬ٲ˖ͦڭˣۣ֬ٲ˖̦ڭˣۣ֬ٲ˖ͦڭ`đđđđđđ鴚̙˖ڴڬٲ˖ڴ鴚̙˖ڴڬٲ˖`˖ͦڭˣۣ֬ٲ˖̦ڭˣۣ֬ٲ˖ͦڭˣۣ֬ٲ˖̦ڭ`đđđđđĀڬٲ˖ڴ鴚̙˖ڴڬٲ˖ڴ鴚̙˖`˖̦ڭˣۣ֬ٲ˖ͦڭˣۣ֬ٲ˖̦ڭˣۣ֬ٲ˖ͦڭ`đđđđđđޞޞޞ\bޞޞޞޞ\bޞޞޞ\bޞޞޞޞ\u0003`đđđĐĐ\u0007\u0007\u0007nөڭ֭֬ڍөڍ֭ڍөڭ֭֬ڍөڍրn򥋆өڭ֫ѭѥ֬򥋆өڭ֫ѭѥ֬򥋆өڭ֫ѭѥ֬򥋆өڭրnөڍ֭ڍөڭ֭֬ڍөڍ֭ڍөڭ֬րn򥋆өڭ֫ѭѥ֬򥋆өڭ֫ѭѥ֬򥋆өڭ֫ѭѥ֬򥋆өڭրnөڭ֭֬ڍөڍ֭ڍөڭ֭֬ڍөڍրn򥋆өڭ֫ѭѥ֬򥋆өڭ֫ѭѥ֬򥋆өڭ֫ѭѥ֬򥋆өڭրnөڍ֭ڍөڭ֭֬ڍөڍ֭ڍөڭ֬րn򥋆өڭ֫ѭѥ֬򥋆өڭ֫ѭѥ֬򥋆өڭ֫ѭѥ֬򥋆өڭրnөڭ֭֬ڍөڍ֭ڍөڭ֭֬ڍөڍրn򥋆өڭ֫ѭѥ֬򥋆өڭ֫ѭѥ֬򥋆өڭ֫ѭѥ֬򥋆өڭրnөڍ֭ڍөڭ֭֬ڍөڍ֭ڍөڭ֬րn򥋆өڭ֫ѭѥ֬򥋆өڭ֫ѭѥ֬򥋆өڭ֫ѭѥ֬򥋆өڭրnөڭ֭֬ڍөڍ֭ڍөڭ֭֬ڍөڍրn򥋆өڭ֫ѭѥ֬򥋆өڭ֫ѭѥ֬򥋆өڭ֫ѭѥ֬򥋆өڭրnϯϏ﯏ϯ\u0005Ϗϯϯϯ﯏ϯ\u0005ϏϯϏ﯏ϯ\u0005Ϗϯϯϯ﯏ϏԀ"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.BYZ6",
    "content": "\"đđđđ0~đđđĐ2~6~Đ9īʕ׫劕׫劕׀đđđ劕׫劕׫劕׀\nΕ˕Ηϟ~ǗǗǗǗǗǧ\u0005燗ק\u0006ϯϯϯ~¨¨¨¨¨¥ʥ˧˥ʥ¨̨¥ʥ˧\u0004\u0001~đđđđđ勗׫\fܪ~劕׫劕׀\u000f\u0001~đđđđđī劕׫\u0011ݪ~劕׫劕׀\u0010ջ~đđđđđ劕֫\u000f~ʕ׫򘌘劕׀\n㕮ջ~ǗǗǗǗǇ\u0005秗ק\u0004ϯϯ~ȂȠȢūǯǫŪŢȬȢŪūǠϠ\u0004~Đ\t勗׫\u0001\fđđđĂĨĂĨ\u0011Ε˕Ηϟ~ǗǗǗǗǗǧǧ\u000eϯϯϯ~¨¨¨¨¥ʷϷʥ¥ʷϷʥ \u0004\u0001~đđđđđū׫łū׫ł\u0013܊~բբ\u0017\u0001~đđđđđѠѠ\u0018~ШРШР\u0017ѻ~đđđđđԺԨԺԨ\u0016~\u0011ㅮԸ~ǗǗǗǗǇǧǧ\n\u0001Ϋ~¨¥Ȱȥ¥Ȱȥ ~Đ\bĨĂ\u0013("
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.BYZ7",
    "content": "\"đđđđ0~đđđĐ2~6~Đ9īʕ׫劕׫劕׀đđđ劕׫劕׫劕׀\nΕ˕Ηϟ~ǗǗǗǗǗǧ\u0005燗ק\u0006ϯϯϯ~¨¨¨¨¨¥ʥ˧˥ʥ¨̨¥ʥ˧\u0004\u0001~đđđđđ勗׫\fܪ~劕׫劕׀\u000f\u0001~đđđđđī劕׫\u0011ݪ~劕׫劕׀\u0010ջ~đđđđđ劕֫\u000f~ʕ׫򘌘劕׀\n㕮ջ~ǗǗǗǗǇ\u0005秗ק\u0004ϯϯ~ȂȠȢūǯǫŪŢȬȢŪūǠϠ\u0004~Đ\t勗׫\u0001\fРШРШРШРđđԨԺԨԺԨԺԨĂĨĂĨĂĨĂ}ݾݪݾݪݾݪÏϾѝΕ˕Ηϟ~ǗǗǗǗקקקǧϯϯϯ~\u0001~đđđāłū׫łū׫łū׫łĨĂĨ܊~բբբ\u0001~đđđđѠѠѠѠ~РШРШРШРЈРЈСѻ~đđđđԨԺԨԺԨԺԨĂĨĂį~ݾݪݾݪݾݪÏԸ~ǗǗǗǷקקקˮ\u0001Ϋ~~Đ\u0004ĂĨШĂĨШĂĨШĂĨĂ("
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.CHTABLE4.SH",
    "content": "111)1Հ\u0001&Հ))1\u0006\u0002ߟ\u0004\r\u0005\u0001\u0004\u0006\u0004\r\u0001\u001f1Ճ\u0007\u0002ꪨ\f\t\u0006\u0003\u0001\f\u0006\u0001\r1\u0001\u0006\u0005\u001d\u0004ԅ\u0013\nǟ\u0002\u00041Հ\u0001&\u0005\u0004\u000e𰸜\fՀ\u0002\u000e1\u0006\u0002ߟ\u0004\r1\u0001!1Ճ\u0007\u0002ꪨ\fՀ\u0001\b\u001e)1\u0001\u0006\u0005\u001d\u0005\u0005߿\u000e)11\f\u0004\u0003\u000eՀ 1\u0005\u0004\u0016\u0005\u0002\t\u000f\u0006\u00121\u0006\u0002\t\u0004\u0004\u000e0\u0007\u0005\u000e1\u0005\u0005\u0001\u0002\u000e1\u000b\u0004\u0004\u00061\u0001\u0006\b\u0018Հ\u0001\t\u001eՃ\u0003\u0007\u00061\u0015\u001a\u0004\u000e$1Հ뿇)\u000b\u0002\u0007\u000eՀ!1\u0005\u0001\b\u0017\u0007\u0013\u0005\u0007\u00111\t\b\u0007\u000f\u0001蠀\u0011\u0018\u0007Ͽ\u000f1\u0006\u0004\u0001\u0004\u000f1\u000b\u0004\u0001\u0005ߏ\u000b1՟\u0005\u000e\u0012Հꏇ\t\u001e՟\u0001\u0005\u0007𪪪\n1\u001bԕ\u000e\u0005\u0004\u0004\u0004\u000e\u0014\u000e11\nϿ\u0002ꪨ\u0004\r\u0019\u000e1\u0001\u000b\u0013\u0004\u0001\u001b!1\u0007Ϗ\u0004\u000bվ*\u0005\u0001\u0004\u00121\u000b\u0006\u0002\b1\n\tߟ\u0004\b1Տ\t\u0012\u0006Հ\u000b\u001e\u0006\u0001\u00071\b\"\u0004\t\u0019\u0004\n\r1Հ\u0001(\u0005\n\u0015\u0015\u000f1\u0005\u0001\b\u0018\u0006\u0004\u0004\u0001\u0010%1\b\u0004\u0004\f՟\u0004\b\u0004\u0011Հ𠠼\u0006\u00161\u000b\u0004\u0002\f\u0015\u0017\u0006\u0002\u0004\u0006\u0004\u00061՟\u0005\u0004\u001bՀ\u0001&\n\u0004\u0001\u0004𪪪\u00061-\u0006\u0002ߟ\u0004\r\u0001\u0005\u0004\u0004\f1Ռ)Ճ\u0007\u0002ꪨ\fՀ&1\u0005\u0001\u0004\u0015\u0001\u0006\u0005\u001d)1\b\u0007\u0002\u0001\rՀ&Հ\u0001!1\u000b\u0004\u000e\u0006\u0002\u0013\u0004\u0001\u0005ߗ\u0005\b1Հ\u0005 Հ\u0006\u0002ꨮ\u000bՁ\u0007ß\u0001\u0001\u00071+\u0001\u0004\u0005\n\f\u0004\u0004\u0004\f111\u0012\u0004\u0013"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.DAR4",
    "content": "đđđđđ\u0014ȅTđđđđđ\u0014ȅ\u0015\u0012Ё̂ДR\u0014ՁĂ\u0015đđđđđđ\u0013Sđđđđđđ\u0014\u0015\u0014T\u0014\u0015đđđđđÃ\u000bȄ\u001c\u001b\u001ađđđđđ\u0014ȅ\u0015\n\u001d\u0019ۼۼ\u0014ՁĂՀ\u000bđđđđđđ\u00148۲⣦⣦đđđđđđ\u0012\u0001ԜЀ\u0007\u0014\u0013\u000f\fёٱٱٱ\u0014\u0015\u0002\u0002\u0013\u0012Aꗝđđđđđ\u0014ȅ\u0015\u0014ՁĂՀ\u000bB\u0014ՁĂ\u0015đđđđđđ\u0012\u0001ԔBđđđđđđ\u0014\u0015\u0014T\u0014\u0015đđđđđ\u0014ȅTđđđđđ\u0014ȅ\u0015\u0014ՁĂՀP\u0014ՁĂ\u0015đđđđđđ\u0012\u0001Fđđđđđđ\u0014\u0015\u0014T\u0014\u0015đđđđđÃ\u000bȄ\u001c\u001b\u001ađđđđđ\u0014ȅ\u0015\n\u001d\u0019ۼۼ\u0014҂Ă\u0015đđđđđđ\u00148۲⣦⣦đđđđǑđ\u0006ǧǇ\r\u0014\u0013\u000f\fёٱٱٱ\u0001\u0001\u0002\u0004\r\u0002\u0002\u0013\u0011AꗝđđđđđĀ\u0001\u0004Аȅ\u0015\u0013ՁĂ8ՁĂ\u0015\nЁ̂Д\u0013đđĐđđ\u00138\u0015đđđđđ\u0011\u0014\u00138\u0015\u0014\u0015đđđđđ\u0013ȅ8ȅ\u0015đđđđđ\u0014ȅ\u0015\u0014ՁĂ!\u0014ՁĂ\u0015\u0014ՁĂ\u0015đđŔđ×\u000b\u0011\u0005đ×\u000b\u0011đđđđđ×\u000b\u0011݀\n\u0010\n\u0010\n\u0010đđđđđ\u0014ȅ\u0015đđđđđ\u0014ȅ\u0015đđđđđ\u0014ȅ\u0015\u0013ΎΎ\u0007\u0013ΎΎ\u0007\u0013ΎΎ\u0007đфđđ\u0014\t\u0006đфđđ\u0014\t\u0006đфđđ\u0014\t\u0006\u0014\u0015\u0014\u0015\u0014\u0015đđđđđ\u0014ȅ\u0015đÍ۟ߏÑŁ\u0012Ȅ\u0015đđđđđ\u0014Ȅ\u0018\u0014ՁĂ\u0015\u0003𢈢đđđđđ×\u000b\u0011đđĐđđđđđđŔđđđđđđđĐđđđđđđŔđđđđđđđ\n\u0010đđđđđ\u0014Ά\u0015Ǎ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗Ԁ\u0004!߿߿߻ԔфƗ\u0004\u0004\u0004\u0004\u0004ƆĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑ݊̌̌̌̌̌̌櫆櫆櫆"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.DAR5",
    "content": "đđđđđ\u0014ȅTđđđđđ\u0014ȅ\u0015\u0012Ё̂ДR\u0014ՁĂ\u0015đđđđđđ\u0013Sđđđđđđ\u0014\u0015\u0014T\u0014\u0015đđđđđÃ\u000bȄ\u001c\u001b\u001ađđđđđ\u0014ȅ\u0015\n\u001d\u0019ۼۼ\u0014ՁĂՀ\u000bđđđđđđ\u00148۲⣦⣦đđđđđđ\u0012\u0001ԜЀ\u0007\u0014\u0013\u000f\fёٱٱٱ\u0014\u0015\u0002\u0002\u0013\u0012Aꗝđđđđđ\u0014ȅ\u0015\u0014ՁĂՀ\u000bB\u0014ՁĂ\u0015đđđđđđ\u0012\u0001ԔBđđđđđđ\u0014\u0015\u0014T\u0014\u0015đđđđđ\u0014ȅTđđđđđ\u0014ȅ\u0015\u0014ՁĂՀP\u0014ՁĂ\u0015đđđđđđ\u0012\u0001Fđđđđđđ\u0014\u0015\u0014T\u0014\u0015đđđĐÞ\u0011ˇ%\u0004\u000b\u001ađđđđđ\u0014ȅ\u0015\u0011$\u0004\u000bۼۼ\u0014҂Ă\u0015đđđđđ\u00148۲⣦⣦đđđđǑđ\u0006ǧǇ\r\u0014\u001f\u0006\u0006\u0004ёٱٱٱ\u0001\u0001\u0002\u0004\rϏϏϏ\u0014Ϗ\u001a\u0004/đđđđđĀ\u0001\u0004Аȅ\u0015\u0013\u0019\u0005Հ1ջﻉ\nЁ̂Д\u0013đĐđđ\u00138\u0015đđđđđ\u0011\u0014\u00138\u0015\u0014\u0015đđđđđ\u0013ȅ8ȅ\u0015đđđđđ\u0014ȅ\u0015\u0014ՁĂ!\u0014ՁĂ\u0015\u0014ՁĂ\u0015đđŔđ×\u000b\u0011\u0005đ×\u000b\u0011đđđđđ×\u000b\u0011݀\n\u0010\n\u0010\n\u0010đđđđđ\u0014ȅ\u0015đđđđđ\u0014ȅ\u0015đđđđđ\u0014ȅ\u0015\u0013ΎΎ\u0007\u0013ΎΎ\u0007\u0013ΎΎ\u0007đфđđ\u0014\t\u0006đфđđ\u0014\t\u0006đфđđ\u0014\t\u0006\u0014\u0015\u0014\u0015\u0014\u0015đđđđđ\u0014ȅ\u0015đÍ۟ߏÑŁ\u0012Ȅ\u0015đđđđđ\u0014Ȅ\u0018\u0014ՁĂ\u0015\u0003𢈢đđđđđ×\u000b\u0011đđĐđđđđđđŔđđđđđđđĐđđđđđđŔđđđđđđđ\n\u0010đđđđđ\u0014Ά\u0015Ǎ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗Ԁ\u0004!߿߿߻ԔфƗ\u0004\u0004\u0004\u0004\u0004ƆĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑ݊̌̌̌̌̌̌櫆櫆"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.DAR6",
    "content": "đđđđđ\u0014ȅTđđđđđ\u0014ȅ\u0015\u0012Ё̂ДR\u0014ՁĂ\u0015đđđđđđ\u0013Sđđđđđđ\u0014\u0015\u0014T\u0014\u0015đđđđđÃ\u000bȄ\u001c\u001b\u001ađđđđđ\u0014ȅ\u0015\n\u001d\u0019ۼۼ\u0014ՁĂՀ\u000bđđđđđđ\u00148۲⣦⣦đđđđđđ\u0012\u0001ԜЀ\u0007\u0014\u0013\u000f\fёٱٱٱ\u0014\u0015\u0002\u0002\u0013\u0012Aꗝđđđđđ\u0014ȅ\u0015\u0014ՁĂՀ\u000bB\u0014ՁĂ\u0015đđđđđđ\u0012\u0001ԔBđđđđđđ\u0014\u0015\u0014T\u0014\u0015đđđđđ\u0014ȅTđđđđđ\u0014ȅ\u0015\u0014ՁĂՀP\u0014ՁĂ\u0015đđđđđđ\u0012\u0001Fđđđđđđ\u0014\u0015\u0014T\u0014\u0015đđđĐÞ\u0011ˇ%\u0004\u000b\u001ađđđđđ\u0014ȅ\u0015\u0004\u000bۼۼ\u0014҂Ă\u0015đđđđđ\u00148۲⣦⣦đđđđǑđ\u0006ǧǇ\r\u0014\u001f\u0006\u0006\u0004ёٱٱٱ\u0001\u0001\u0002\u0004\rώώώώώ\u0004/đđđđđĀ\u0001\u0004Аȅ\u0015ؒАҐҐАААААААААՑҔґՐАААААААААААА\u0005Հ1ջﻉ\nЁ̂Д\u0013đĐđđ\u00138\u0015đđđđđ\u0011\u0014\u00138\u0015\u0014\u0015đđđđđ\u0013ȅ8ȅ\u0015đđđđđ\u0014ȅ\u0015\u0014ՁĂ!\u0014ՁĂ\u0015\u0014ՁĂ\u0015đđŔđ×\u000b\u0011\u0005đ×\u000b\u0011đđđđđ×\u000b\u0011݀\n\u0010\n\u0010\n\u0010đđđđđ\u0014ȅ\u0015đđđđđ\u0014ȅ\u0015đđđđđ\u0014ȅ\u0015\u0013ΎΎ\u0007\u0013ΎΎ\u0007\u0013ΎΎ\u0007đфđđ\u0014\t\u0006đфđđ\u0014\t\u0006đфđđ\u0014\t\u0006\u0014\u0015\u0014\u0015\u0014\u0015đđđđđ\u0014ȅ\u0015đÍ۟ߏÑŁ\u0012Ȅ\u0015đđđđđ\u0014Ȅ\u0018\u0014ՁĂ\u0015\u0003𢈢đđđđđ×\u000b\u0011đđĐđđđđđđŔđđđđđđđĐđđđđđđŔđđđđđđđ\n\u0010đđđđđ\u0014Ά\u0015Ǎ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗Ԁ\u0004!߿߿߻ԔфƗ\u0004\u0004\u0004\u0004\u0004ƆĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑ݊̌̌̌̌̌̌櫆櫆"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.DAR7",
    "content": "đđđđđ\u0014ȅTđđđđđ\u0014ȅ\u0015\u0012Ё̂ДR\u0014ՁĂ\u0015đđđđđđ\u0013Sđđđđđđ\u0014\u0015\u0014T\u0014\u0015đđđĐÞ\u0011ˇ%\u0011\u001ađđđđđ\u0014ȅ\u0015\u0011ۼۼ\u0014ՁĂՀ\u000bđđđđđ\u00148۲⣦⣦đđđđđđ\u0012\u0001ԜЀ\u0007\u0014\u001f\u0007\u0007ёٱٱٱ\u0014\u0015Ϟߞߞߞߞ\u00056đđđđđ\u0014ȅ\u0015ؒААААААААААААёАБѐАААААААААААА7ջ\u0014ՁĂ\u0015đđđđđđ\u0012\u0001ԔBđđđđđđ\u0014\u0015\u0014T\u0014\u0015đđđđđ\u0014ȅTđđđđđ\u0014ȅ\u0015\u0014ՁĂՀP\u0014ՁĂ\u0015đđđđđđ\u0012\u0001Fđđđđđđ\u0014\u0015\u0014T\u0014\u0015đđđĐÞ\u0011ˇ%\u0011\u001ađđđđđ\u0014ȅ\u0015\u0010ۼۼ\u0014҂Ă\u0015đđđđđ\u0014(\u000e۲⣦⣦đđđđǑđ\u0006ǧǇ\r\u0014!\u0005\u0007ѝٱٱٱ\u0001\u0001\u0002\u0004\rϞߞߞߞߞ\u00052\u0001đđđđđĀ\u0001\u0004Аȅ\u0015ؒААААААААААААёАБѐАААААААААААА4׻ﻉ\nЁ̂Д\u0013~đđđđđ\u0011\u0014\u00138\u0015\u0014\u0015đđđđđ\u0013ȅ8ȅ\u0015đđđđđ\u0014ȅ\u0015\u0014ՁĂ!\u0014ՁĂ\u0015\u0014ՁĂ\u0015đđŔđ×\u000b\u0011\u0005đ×\u000b\u0011đđđđđ×\u000b\u0011݀\n\u0010\n\u0010\n\u0010đđđđđ\u0014ȅ\u0015đđđđđ\u0014ȅ\u0015đđđđđ\u0014ȅ\u0015\u0013ΎΎ\u0007\u0013ΎΎ\u0007\u0013ΎΎ\u0007đфđđ\u0014\t\u0006đфđđ\u0014\t\u0006đфđđ\u0014\t\u0006\u0014\u0015\u0014\u0015\u0014\u0015đđđđđ\u0014ȅ\u0015đÍ۟ߏÑŁ\u0012Ȅ\u0015đđđđđ\u0014Ȅ\u0018\u0014ՁĂ\u0015\u0003𢈢đđđđđ×\u000b\u0011đđĐđđđđđđŔđđđđđđđĐđđđđđđŔđđđđđđđ\n\u0010đđđđđ\u0014Ά\u0015Ǎ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗Ԁ\u0004!߿߿߻ԔфƗ\u0004\u0004\u0004\u0004\u0004ƆĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑ݊̌̌̌̌̌̌櫆櫆"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.DAYTIME",
    "content": "ĐфффǍ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗Ԁ܀ĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑ0櫆櫆旝đđđđđĀ\u001a\u001ađđđđđđ\u001a\u001a旝đđđđđođđĐđđđđđđŔđđđđđđđŔ\u0005\u0004V\u0004Őđ\u000b\u0005V\u0004\u0001Ǎ͗͗͗͗͗͗͗͗Ԁ\u0005\u0004\u0005P\u0004\u0004\u000b\u0005W\u0004\fĀݷݷݷݷݷݷݷݷݑݑ݈\u0001\u0005\u000b\u0005\u0005\u0001АԐА4\u0004\u0004\u0001櫆Ĉ∢oǍ͗͗͗͗͗͗͗͗Ԁđđđđđ//Āݷݷݷݷݷݷݷݷݑݑđđđđđđ\u000b\"/櫆ד\u000bՓՓ(/Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u000b'/\u000bݿݿ\u0004\"Ͽ/Āݷݷݷݷݷݷݷݷݑݑđđđđđđ/櫆/Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđr\u001eSĀݷݷݷݷݷݷݷݷݑݑđđđđđđ\u0012\u0005\u0005\u0001\u0004ؘАC櫆rǍ͗͗͗͗͗͗͗͗ԀđđĔÆ\u0007N\u0004\t\u0003\u00183ĀݷݷݷݷݷݷݷݷݑݑđđđԁА\u0004АаАаđđĐđĐĐĐĐĐĐĐĕЀĐĐĐĐĐĐĐĕЀĐĐĐĐĐ櫆1\u0012\u0013\u000eǍ͗͗͗͗͗͗͗͗ԀĐđĐĐфффĀݷݷݷݷݷݷݷݷݑݑ܀܀櫆Ǎ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗ԀĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑ݀櫆櫆櫆"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.DEAD",
    "content": "\u0004\u0001Î\u0002@\u0001\u0001ܿ\u0001\u0001{\u0005\u0005\t\u0007\b\u0001\u0001\u0004\u000e+\n"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.DIE",
    "content": ";\u0005\u0004\u0005\u0002\u0004\u001a\u0007\u0005\u0002\u0002\u0004\u0004\u0004\n\u0002i\u0004\u0003D\u0001\u0004\u0004{\u0004\u0005\t\u0004\u0007𰰰\u0004\u0004\u0004ࠨ"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.DUNJBRIX",
    "content": "C\u0016TđđđđđđđđŔĔĔĔĔĔĔĔĔŔđđđđđđđŔфđđđđđđđđŔĔĔĔĔĔĔĔĔŔđđđđđđđŔ>=đđđđđđđđŔđđđđđđđđŔđđđđđđđŔđđđđđđđđđŔđđđđđđđđŔđđđđđđđŔ?蠎蠎CĀĀĀCC׍Āݑܐ׍ĀݑܐC蠎蠎CĀĀĀCC׍Āݑܐ׍ĀݑܐC蠎蠎CĀĀĀCC׍Āݑܐ׍ĀݑܐC蠎蠎CĀĀĀCC׍Āݑܐ׍ĀݑܐC蠎蠎CĀĀĀCC׍Āݑܐ׍ĀݑܐC蠎蠎CĀĀĀCC׍Āݑܐ׍Āݑܐ\u0015\u0004"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.EXIT",
    "content": "\ft\bАаАаАаАаАаАп݈ݪt\u00053ջtđđđđ3ݪt3ջvđđđđđđ3݈ݪvջvđđđđđđܬܬܬܬܬܬ6єշבԱ՗ѴААаА\u0005v\u0018\u0005ճճ\u0004vđđđđĐ!\u0005\u0004ݪv%\u0005\u0004ջvĐ/\u0005̪̪\u0004v\u0005ߟ㗐䐌ҡ㗐#Đ̲䌌򜜲䌌򜜲䌌򜜲䌌򙇟\b̲򜜲䌌򜜲䌌򜜲䌌򜜲䌌򜜲䌌őđđĐ!<<ꀮ0đđđĐ2đđđđđ0߿ʟʟߊ!60∢Ȣ$\u0006Đ9đđđđđđ0đđđđđđ0?0\u0005\u0005\t\u0004PđđđĐ2đđ\u0001\u0007\u0004\u0004O6rĐ9đđđđđđ}0đđđđđz0\u0001vđđđđ0đđđđđđr\u0013\u0013>0đđđđđ0đđđđđ3\u0005#04đĐ!đđđđđđ0đđđđđđ3013߿ʟʟ!đđđŗ2đđđđđ3∠%\u0006\u0016\u0004\u00193Đ99đđđđđđ3"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.FATMODEL",
    "content": "111)1Հ\u0005\u0004\u001dՀ*)1\u0006\u0006\u0001\u000b\u0004\u0005\nꊂ\u001fՀ,Ճ\n֖\u0004\u0001\u0001\n\u0005\u0004\u0001\u0004\u0001\n\u0004ח\u0006\u0004\u0004ꪊ*\u0001ࠠ\t\u0016\u0011կ\u0015\u0006\u0001Ү\u0006\u0005Հ\u0005Օ'Հ\b\u0018\u0004\b\u001dՀ\u0010ժ\u0002ե\u0005\u0001&\u0004\u0004\u0001\u000b1\u0001\t\u001cժ₃#Ճ\n֖\u0004\u0001\u0001\nՀ\u0001\f\u0019)\u0001#\u0001ࠠ\n\u0004\u0016\u0004\u0006\u0004\f)Հ$1\u0006\u0007\u0001\fՀ \u0004+\u0004\u0005\u0018\u0013а\u000f\u0004\u0004\u0004\u00131\u0005\u0010\u0001\f\u0005\f\u001dՀ\u0004\u0005Ǘ\u000e\u001c\u0015ʊ\u0007\u0001\u0002\f1޾\u0005ꪫ\u0005\u0004\u0010\u0015\u0001\u0004\tР\u0016Հ\u0001(Ճ\u000bՄ\u0002𨨨\u0004ը\u0005\u0005\u0015\u0015\u001a\u0004\u0005\b\f\u0006\u001d\u0005\u0004\u0015Հ)\u0007\u0006\b\fՀ!\u0006\u0005\u0001\u0007\u0015\u0004\u0018\u000e뫪\u0013\u0001\u0006\u0011\u0005\u0004\u0015Հ\u0004\u0005\u0005\r\u0001\u0004\u0007\u0018Հ\u0005ӗ\u000eՀ\u0014\u0015\u0005\t\u0001\u0005\r1\u0003\u0005\u0001\u0006\t\u001c\u0015՟\b\u0007РՕ\u0011Հ(՟\nŪ\u0001\b\u0005\u0004\u001a\u001a\u000e\u0004\u0006\u0002\f\u0006\u0005\u0005\u000eՀ\u0004ŕ\u0005\u0001\u0004\t1\u0004\u0002\u0006\u0001\u0001\u000b\u0019\u000e𠠨\r\u0004\u0004\u0001\u0001\u0001\b\u0006\u0005\u0004\u0004\u0005\u0011\u000e\u0015!\u000b\u0005\u0004Шښ\tՁ\b\u0005\u0006\u0007\u0001\u0006\u0005!Հ\u00121\t\u00071\u0004\u0002տ\u0006Հ+\b\u0006Р\u0015Հ*\u0005\bՊ\u0007\u0001\u0005說\u0005\u000b1\u0004\b\u001e\u0006\u0004𪪪\rռ\u0004\fՒ\u0004\u0002\u0004\nՀ(Հ\u0001\u0005\u0007\u0001\u000f\u0016\u000f\u000b\u0005\u0004୭\u0004\u000b\u0005\u0005 \t\u0004\u0001\u000e%1\u0005\u0007\u0004\n՟\b\u0004Ш\u0005\u000fՀ߿\u0005\u0016\u0001\u0006\u0007\u001a\u0006\b멩\u0002\n\u0016\u0017\u0004\u0004\u0005\u0004\u0004Հ\u0005Օ\u0001꯿\n՟\t\u0006Ԩ\u0017Հ\u0001\u0007\u0018\u0005\u0007\u0004\u0004\u000b\u0002\n.\u0005\u0007\u000b\u0007\b𠠨\f\u000e\u0005\u0015Ռ(Ճ\n֖\u0005\u0001\nՀ&*\u0004\u0004\b\f\u0001ࠠ\n\u0004\u0015)\u0004\u0004\u001a\u0005\u0004\u0004\u0004\u0001\u0004\u000bՀ&Հ\u0001!\u0005\u0007\u0001\u0005\u000b\u0007\bե\f\u0005\u0006\u0004\n\f\u0006\u0004\b\u0004ਨ\u000bՀ\t\u001cՀ\u0007\u0001\u0006\u0001\u0001\u0004\tՁ\u0007꫿\u0006\u0001\u0005\u0012\u0004\u0016\u0004+\u0001𨨨\u0006\u0003\u0004\n\b\u0005ꪪ\f111\u0012\u0004\u0011"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.FIVE",
    "content": "?đđđđđ\u0014ȅ*\u0013Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0014ՁĂ,\u0012?đđđđđđ\u0014+\u0012ݑ?\u0014&\u0014?đđđđđ\u0014ȅ\u0016\u0005\u0019Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0013ΎΎ\u0007(?đфđđ\u0014\t\u0006\u0005\u0003\u001cݑ?\u0014%\u0015?đđđđđ\u0014ȅ*\u0013Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0014ՁĂ,\u0012?đđđđđđ\u0014+\u0012ݑ?\u0014&\u0014?đđđđđ\u0014ȅ\u0016\u0005\u0019Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0013ΎΎ\u0007\u0004(?đфđđ\u0014\t\u0006\u0006\u000b\u0018ݑ?\u0014)\u000e?đđđđđ\u0014ȅ1\nǍ͗͗͗͗͗͗͗͗Ԁ?\u0014ՁĂ4\t?đđđđđđ\u00146\u0001\u0007ݑ?\u00147\u0007?đđđđđ\u0014ȅ6\u0007Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0014҂Ă4\t?đđđđǑđ\u0006ǧǇ)\nݑ?\u0001\u0001\u0002\u0004!\u000e怗đđđđđ\u0013ȅ\u0015đđđđđĀ\u0001\u0004Аȅ\u0016\b\u0004\u0018Ǎ͗͗͗͗͗͗͗͗Ԁ\u0014ՁĂ\u0015\u0005\fΎΎ\u0007\u0004(đđŔđ×\u000b\u0011đфđđ\u0014\t\u0005\u0004\u0005\u0003\u001cݑ݀\n\u0010\u0014%\u0015旝đđđđđ\u0014ȅ\u0015đđđđđ\u0014ȅ*\u0013Ǎ͗͗͗͗͗͗͗͗Ԁ\u0013ΎΎ\u0007\u0014ՁĂ,\u0012đфđđ\u0014\t\u0006đđđđđđ\u0014+\u0012ݑ\u0014\u0015\u0014&\u0014旝đđđđđ\u0014ȅ\u0015đđđđđ\u0014ȅ\u0016\u0005\u0019Ǎ͗͗͗͗͗͗͗͗Ԁ\u0014ՁĂ\u0015\u0013ΎΎ\u0007\u0004(đđđđđ×\u000b\u0011đфđđ\u0014\t\u0006\u0005\u0003\u001cݑ\n\u0010\u0014%\u0015搙đđđđđ\u0014Ά\u0015đđđđđ\u0014ȅ*\u0013Ǎ͗͗͗͗͗͗͗͗Ԁ\u0004!߿߿߻\u0014ՁĂ,\u0012ԔфƗ\u0004\u0004\u0004\u0004\u0004Ɔđđđđđđ\u0014+\u0012ݑ݊̌̌̌̌̌̌\u0014&\u0014"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.FIVE1",
    "content": "Ǎ͗͗͗͗͗͗͗͗Ԁđđđđ7\u0005ճ߿Ο݀ȟ!ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ$\u0005櫆7Ցđđđ񴱜͇˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ7߿݀\u00144篟ĀݷݷݷݷݷݷݷݷݑݑđđđđǑđ\u0006\u0004\u0014\u0001ϗ櫆\u0001\u0001\u0002\u0004\u0014ՑđđđđĐĐ\u0001˝Ǎ͗͗͗͗͗͗͗͗ԀđđđđđĀ\u0001\u0004А\u001f\u0005ճ߿Ο݀\u0005\u001aۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ$\u0005櫆?ؼ\u0002ϧӹǍ͗͗͗͗͗͗͗͗ԀđđđđđL\u0001ܾ݀QĀݷݷݷݷݷݷݷݷݑݑđđđđđđS櫆T\u0001　Ǎ͗͗͗͗͗͗͗͗ԀđđđđđT߿݀S\u0001篟ĀݷݷݷݷݷݷݷݷݑݑđđđđđđP\u0001ϗ櫆K\u0002˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ:\u0005\u0001\u0001ΟΟ݀!ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ$\u0005櫆7Ցđđđ񴱜͇˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ7߿݀K篟Āݷݷݷݷݷݷݷݷݑݑđđđđđđ7\u0001ϗ櫆7ՑđđđđĐĐ\u0001˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđđ7\u0005ճ߿Ο݀ȟ!ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ$\u0005櫆7Ցđđđ񴱜͇˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ7߿݀K篟Āݷݷݷݷݷݷݷݷݑݑđđđđđđ7\u0001ϗ櫆7ՑđđđđĐĐ\u0001˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđđ7\u0005ճ߿Ο݀ȟ!ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ$\u0005櫆7Ցđđđ񴱜͇˝\u0001　"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.FIVE2",
    "content": "Ǎ͗͗͗͗͗͗͗͗ԀđđđđđĀ\u0001\u0004А\u001f\u0005ճ߿Ο݀\u0005\u001aۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ$\u0005櫆?ؼ\u0002ϧӹǍ͗͗͗͗͗͗͗͗ԀđđđđđL\u0001ܾ݀QĀݷݷݷݷݷݷݷݷݑݑđđđđđđS\u0001櫆U\u0001　Ǎ͗͗͗͗͗͗͗͗ԀđđđđđU߿݀SĀݷݷݷݷݷݷݷݷݑݑđđđđđđP\u0001ϗ櫆K\u0002˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ:\u0005\u0001\u0001ΟΟ݀!ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ$\u0005櫆7Ցđđđ񴱜͇˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ7߿݀K篟Āݷݷݷݷݷݷݷݷݑݑđđđđđđ7\u0001ϗ櫆7ՑđđđđĐĐ\u0001˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđđ7\u0005ճ߿Ο݀ȟ!ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ$\u0005櫆7Ցđđđ񴱜͇˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ7߿݀K篟Āݷݷݷݷݷݷݷݷݑݑđđđđđđ7\u0001ϗ櫆7ՑđđđđĐĐ\u0001˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđđ7\u0005ճ߿Ο݀ȟ!ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ$\u0005櫆7Ցđđđ񴱜͇˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ7߿݀K篟Āݷݷݷݷݷݷݷݷݑݑđđđđđđ7\u0001ϗ櫆7ՑđđđđĐĐ\u0001˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđđ7\u0005ճ߿Ο݀ȟ!ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ$\u0005櫆7Ցđđđ񴱜͇˝\u0001　"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.G",
    "content": "?????????????????????????????????????????@"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.G1.PAL",
    "content": "đđđđđđ3đđđĐ-\u001d#30\u0013#đđĐ\u00043Đđđ-đđĐ\u0016#\b33\u0004\u001ab6@\u00059踠6@;𝗝đđ6|6|9!ȅ\u0015C9\n\u0014ՁĂ\u0015\u00044\u0004đđĐ9\u0006đ×\u000b\u0011\u00044\u0004\u00019\n\u0010\u0004\r2=đđđđđ/\u0005\n2\u0004\u00019!\u0005\u0006đđ2\u00049đф%\u0006\u00052<8\u0005 ȅ\u0015\u0005\u0004\u0005燇\"!ȅ\u0019\t\u0014ՁĂ\u0015\u000b\u0005\n\"\n\u0014ՁĂ\u0019\u0005\u0005\u0004\u0006ǧǇ\u0015\u0001\u0005\n\"\u0006đđ\u0014\u0019\u000b\u0005\"\u001a\"\u0014\u0019<!ȅ\u0018Đđđđđ4<\t\u0015ՁĂ\u00184<\u0005đđ\u0015\u0018Đđ\u00054<\u0015\u0018\t4<!ȅ\u0018\u000b\u00041<\u000b\u0013ՁĂ\u0018\u0007\u0001\u00051<\u0007đđ\u0013\u0018\u0004\b1<\u0004\u0013\u0018\u0001\f1<\t6\r4<\b6\t5<\u00058\u00068<;<<\f3!ȅ\u0019<\f3\n\u0014ՁĂ\u0019<\r3\u0006đđ\u0014\u0019<\r1\u0014\u0019=\f\u0014Ά\u0015đđđđđ4=\u000b0Ѐ4=\u0007đ1đđĐ\u00054=\u00041\t4"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.G2.PAL",
    "content": "\u000f=\u0014\"đؐ\f/\u0005\u0004)\u0013\u0018Ȣ\u0006\u0005\b/\u000b\u0005)\u0013\u0006\u0018ő񸸘\u000b/\u0001\u0005)\u0013\t\u0018\b𰰰\u0005/=\u0014\"I=\u0012\u0018I=\u0012憆\u0006\u0018\u0005Óǖ\t/<\u0012\t\u0018Ë\u0005\n/=\u0014\"đؐ\f.=\u0011\u0018⸺\u0007\u0005\b.=\u0011憆\u0006\u0018ő񹸘\f.<̌\u0011\t\u0018\b𰰰\u0005.=\u0014\"I=\u0004\u0010\u0004\u0018I!\u0010\u0004\u0006\u0018\u0005őÒ\u00067\u0005%\u0006̌\u0010\t\u0018ˣ\u00077=\u0014\"đÒđ\b6\u0007\u00043\u0004\u000f\u0004\u0018\u00076\u0004\u00043\u000f\u0004\u0018őИ\t6\u00043̌\u000f\u0007\u0018\u0005\u0005\u00056=\u0014\"I\b\u00041\u0004\u000e\u0004\u0018I\u0006\u00041\u000e\u0004\u0018\u0005đđ>\u00041̌\u000e\u0007\u0018>=\u0014\u001fĐđđđ>'\f\u0007\u0004\r\u001f>$đ\f\u0007憆\r\u001fđ\u0005> \f\u0007̌\r\u001fࠠ\u0007>=\u0014\u001f ȅ#=\u0004\f\u001f\t\u0012ՁĂ#=憆\f\u001f\u0004đđ\u0012#:̌\f\u001f\u0005\u0013#=\u0014\u001fבđѷݑ<=\u0004\n\u001f踠<9\u0005\n\u001f𝗝đđ\u0004<9\b\n\u001f\u0005<=\u0014\"đđđđĐ=\f/\n\"=đ\f/\u0006\n\u0005Óǖ\u0007\nđĐ\u0006=\f/\t\nË\n\n\n."
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.G3",
    "content": "??\u00078\t4đēϿ\u000e\u0010\u0011\u000481\u000f̌\u0010\u00118 `đđđđē\u0006& ȅ\u0004U\u0006&\t\u0014ՁĂՀ\u0016đēϿ\u0017ع\u001ađēϿ\u0006\b&\u0005đđ\u0012\u0001\u0016\u0018̬\u001b\u0007̌\u000b&\u0014\u0004U\n1p\u00072߻ջ2\u0010/\u00047\u0005ݪ2Ԕ/\t1\u0005ջqđđđđē\u000e\u001d\u0005݈ݪq\u000e\u001d\u0005ջ2\u000f0đēϿ\u000e\t\u001dݪ2\u00050\u000f̌\f\u001dֺ\u0001p\n\u0006)\rC\u00072\nظظظظظ\u0004\u000b/\u00047\u0006đđ/\u0004Ԕ/\u0011)/Cđđđđē\u0017\u000fđđđđđđ/C\u0017ޞ\u0014/CđēϿ\u0017ع\u001ađđđđđđǆ\u0004АԐА\u0004/\u0018̬\u001b\u0001ֺֺֺֺֺֺC?|?|?=>\u0004ؘА/=đđđđǑ/?đđđđđ3/?3đş\b/?đđĐ\u00053\u000b/АՕ0\tr??\n0\u0004:?\u0006đđ0\u0004:00\u0004đđđđē˹-?@-?.\u0004\u0004đēϯ\b-?.\u0004\r̄\u000b-ԜЀ\u000500\u0004\u0004\u0001"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.G3.PAL",
    "content": "??\u00078\t4đēϿ\u000e\u0010\u0011\u000481\u000f̌\u0010\u00118 `đđđđē\u0006& ȅ\u0004U\u0006&\t\u0014ՁĂՀ\u0016đēϿ\u0017ع\u001ađēϿ\u0006\b&\u0005đđ\u0012\u0001\u0016\u0018̬\u001b\u0007̌\u000b&\u0014\u0004U\n1p\u00072߻ջ2\u0010/\u00047\u0005ݪ2Ԕ/\t1\u0005ջqđđđđē\u000e\u001d\u0005݈ݪq\u000e\u001d\u0005ջ2\u000f0đēϿ\u000e\t\u001dݪ2\u00050\u000f̌\f\u001dֺ\u0001p\n\u0006)\rC\u00072\nظظظظظ\u0004\u000b/\u00047\u0006đđ/\u0004Ԕ/\u0011)/Cđđđđē\u0017\u000fđđđđđđ/C\u0017ޞ\u0014/CđēϿ\u0017ع\u001ađđđđđđǆ\u0004АԐА\u0004/\u0018̬\u001b\u0001ֺֺֺֺֺֺC?|?|?=>\u0004ؘА/=đđđđǑ/?đđđđđ3/?3đş\b/?đđĐ\u00053\u000b/АՕ0\tr??\n0\u0004:?\u0006đđ0\u0004:00\u0004đđđđē˹-?@-?.\u0004\u0004đēϯ\b-?.\u0004\r̄\u000b-ԜЀ\u000500\u0004\u0004\u0001"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.G4.PAL",
    "content": ".\u001d\u001d\u0014n\u001d\u001d\u0014n\u001d\u001d\u0014n\u001d\u001d\u0014n\u001d\u001d\u0014n\u001d\u001d\u0014n\u001d\u001d\u0014n\u001d\u001d\u0014n\r\u000e\u001d\u0014nՀ涞澀\u000e\u001d\u0014n\u0001\u0001\u000e\u001d\u0014\r߻\n\u0004\n\u0004AՀ\u0005怀\u000e\u001d\u0014\u000eݪ\n\nA\u0005漀\u000e\u001d\u0014\u000eջ\n\nAՀ\u000e\u0017\u0014\u000e\n̪\n̪A瀀\u000e\r\u0006\r\u000e\nճ\nճAՀ̀\u000eՀ\u0005πՀ\r\rݪ\nﯯ\nࠠA\u0005\u000e\u0006\u0005Ɵ\rnՀ\u000eՀ\u0006߀Հ𘙘\rn지\u000e\u0006\u0005ـ\r꛺꘻蚸ظظ:Հ\u0006쀀\u000eՀπՀ\u0006\rđđđđđĐ\u0018:\u0005\u000e\u0007\u0014\":\t၁\u000eՀ㶰　漀Հ\rđđ%:\u001d\u0005漀\u00140:\u001dՀ\u0005\u0001\u0001Հ\rǆ:\r\f\u0005Ɵ涞澀\u0014nՀ\u0006Հ\f\t澀Հ\u0004\rn\f\u0017\u0014nՀՀ\f\u001b\rm\u0006\f\u001d\u0014nՀՀ\f\u001d\rn簀瀀\f\r\f\u0014đǟ22ՀՀ\f\rՀ\f\r22\u0005\f\r\f\u0014nՀ䶷Հ\f\rՀ\f\rn\f\r\f\u0014đœϯ.2ՀՀ\f\rՀ\f\r̄.2\u0007\f\r\f\u0014n\rՀ\f\rՀ\f\u0004\rn\r\f\r\f\u0014đēϿ\u0006 8\rԀ\f\rԀ\f\u0005\r\u0007̌ \t\u0004"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.G5",
    "content": "A1đǐŐ1\u00041Đ\t1đđđđē\u000e_=\u000eꢢ_\t\u0011 đēϿ\u000e\t_\u0006\r \u000f̌\f_ĀЄ đđđđē\u0017\u000fE΂\u0001蠠 \u0017ꢢޞVĜ߶ݘ؜\u0007 đēϿ\u0017ع\\윜\u000e \u0018̬\u001b\u0004@Ā\u0015 @>=\u0015\u0004\u0004\u0004>=@>=@><55=\u00035ܶܰ5==⣦\u00055==\b5==\f*=\bۼۼۼۼۼ*@\u0005⣦⣦⣦⣦⣦⣦\u0007*7ٱٱٱٱٱٱٱ\u0010*đŔ7Ǎ͗͗͗͗͗͗͗͗Ԁ\u0005\u0005\b*\u00067\u0005\b*\tĀݷݷݷݷݷݷݷݷݑݑ\u0005*\u0005đđđđđđđđŔđđđđđ櫆\u0005*CđđđđđǍ͗͗͗͗͗͗͗͗ԀE\u0003Eđđđđđđđ\u000b\u0012\u0005Āݷݷݷݷݷݷݷݷݑݑ\u0004@\u000b\u0018櫆\u00045đđđđđđđ\u000b\u0001\n\r3⣦5\u0001\u000b\u0014β⣦3\u00055đđđđđđ\u00053\b5\u0003϶\t3\u000bđđđđē\u0006$\r\b⣦⣦⣦⣦⣦⣦\u0006ꢢ$\t⣦ͽͽͽͽͽ\u0004ٱٱٱٱٱٱٱđēϿ\u0006\b$\u0006񑓙*񑀃ȉȉȉȉȉȉȉ\u0006܌\u000b$ȉ϶̸ȉ"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.G5.PAL",
    "content": "A1đǐŐ1\u00041đđđđē\u000e_Đ\t1\u000eꢢ_=đēϿ\u000e\t_\t\u0011 \u000f̌\f_\u0006\r đđđđē\u0017\u000fEĀЄ \u0017ꢢޞV΂\u0001蠠 đēϿ\u0017ع\\Ĝ߶ݘ؜\u0007 \u0018̬\u001bE윜\u000e @@Ā\u0015 \u0015\u0004\u0004\u0004>=@>=@>=5><\u000355==ܶܰ5==⣦\u00055==\b5==\f*@\bۼۼۼۼۼ*7\u0005⣦⣦⣦⣦⣦⣦\u0007*đŔ7ٱٱٱٱٱٱٱ\u0010*\u00067Ǎ͗͗͗͗͗͗͗͗Ԁ\u0005\u0005\b*#Ȅ\u0015\u0005\b*\tĀݷݷݷݷݷݷݷݷݑݑ\u0005*\u0005đđđđđđđđŔđđđđđ櫆\u0005*CđđđđđǍ͗͗͗͗͗͗͗͗ԀE\u0003Eđđđđđđđ\u000b\u0012\u0005Āݷݷݷݷݷݷݷݷݑݑ\u0004@\u000b\u0018櫆\u00045đđđđđđđ\u000b\u0001\n\r3⣦5\u0001\u000b\u0014β⣦3\u00055đđđđđđ\u00053\b5\u0003϶\t3\u000bǇđđđđē\u0006$\r\b⣦⣦⣦⣦⣦⣦\u0006ꢢ$\t⣦ͽͽͽͽͽ\u0004ٱٱٱٱٱٱٱđēϿ\u0006\b$\u0006񑓙*񑀃ȉȉȉȉȉȉȉ\u0006܌\u000b$ȉ϶̸ȉ"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.G6.PAL",
    "content": "??????????????????????\u0005\u0005\u0005\u0005\u0005\u0005\u0004K?ĨĂĨĂĨĂĨĂĨĂĨĂK?ãǎK?)\u0004\u0007K?\rȅj?\u000bЁ̂Дj?\fj?\rՀj?!ȅV?\n\u0012Ё̂ДV?\u0006đđ\u0013V?\u0014ՀV?\rȅk?\rՁĂՀk?\rk?\rՀk?!ȅX?\n\u0014ՁĂX?\u0006đđ\u0014X?\u0014\u0019\u0019?\u0006đđ\u0014X?\u0014\u0019"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.GRAYFRONT",
    "content": "̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̀̀̀♀Ā♀Ā♀Ā̢̢̢̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̀̀̀撀摀撀ݮ0̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̀\u0017\u0007\u0010đđđđđ0♀Āđđđđđ\u0007\u0004\u0007\u0007݁\u000b0̢̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̀\u000f\u0007\u0007\u0010đđđđđđ0摀đđđđđđ\u000f\u0007Ր\u0015ݮ0̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̀0đđđđđĀ♀Āđđđđđ0̢̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̀0đđđđđ\u0012\u0013\u000b搀đđđđđđ0ݮ̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̀\u0017\u0007\u0010♀Āđđđđđ\u0007\u0004\u0007\u0007݁\u000b̢̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̀\u000f\u0007\u0007\u0010Đđ0撀đđđđđđ\u000f\u0007Ր\u0015ݮI0đđđđđđđŔőőőőőőőőŔđđđđđđđŔЀĀđđđđđ0໮0܀ĐĐĐĐĐĐĔĐĐĐĐĐĐĐĐĔĐĐĐĐĐĐđŔđđđ\u0012\u0013\u000bđđđđđđ0ݳ̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̀0♀ĀđđđĐ2̢̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̀6撀đđđđđđ0Đ9ݳ̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̀\u0017\u0007O♀Āđđđđđ\u0007\u0004\u0007\u0007݁J̢̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̀\u000f\u0007\u0007O撀đđđđđđ\u000f\u0007ՐTݳ̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̀\u0004\u0005\t\u0004K♀ĀđđđđĀ\u0007𰰰\u0004\u0004\u0004ࠨ\u0006B̢̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̀\u0012\u0005\u0005\u0001АՕB撀đđđđđđoݳ̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̀o♀Āđđđđđ\u001eP̢̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̀\u0012\u0005\u0005\u0001ԔA撀đđđđđđoݳ̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̀\u00190♀ĀđđđĐđđđđđđŔőőőőőőőőŔđđđđđđđŔЀ\u0004\u0004\u0004\u0004\u0004\u0004̢̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̀\u0004\u0004\u0004\u0004\u0004憆撀ĐđđđđđđŔđđđđđđđđŔđđđđđđđŔĝ̝͗̌̌̌̌̌̌݀"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.GREEN",
    "content": "=\u0007✇߿݀đđđđđ\u0014\u0015\u0014ՁĂՀ\u000b\u000bđđđđđđđđđ篟\u0014ՁĂ\u0015đđđđđđ\u0012\u0001Ԕ\u000b\u0001ϗđđđđđ\u0014\u0015\u0014\u001dՑđđđđĐĐ\u0001˝\u0014\u0015đđđđđ\u0014ȅ\u0016\u0005ճ߿Ο݀đđđđđ\u0014ȅ\u0015!ۏۏۏۏۏۏ\u0014ՁĂՀ\u000bĀ\u0005%\u0006đđđđđđ\u0012\u0001ԜЀ\u0007GՑđđđ񴱜͇˝\u0001　\u0014\u0015G6ꀀĐđđđđ\u0014ȅ\u0015\u0014ՁĂՀ\u000b\u000bđđđđđđđđđ篟\u0014ՁĂ\u0015đđđđđđ\u0012\u0001Ԕ\u000b\u0001ϗđđđđđđ\u0014\u0015\u0014\u001dՑđđđđĐĐ\u0001˝\u0014\u0015đđđđđ\u0014ȅ\u0016\u0005ճ߿Ο݀đđđđđ\u0014ȅ\u0015!ۏۏۏۏۏۏ\u0014ՁĂ\u0015Ā\u0005%\u0006đđđđđđ\u0014\u0015\u001d\u001dՑđđđ񴱜͇˝\u0001　\u0014\u0015đđđđđ\u0014Ά\u001d✇߿݀đđđđđ\u0014ȅ\u0015,\u0004\u0004ۼ͑篟\u0014҂Ă\u0015đđĐđ)\u0004\u0004⣦⣦\u0001ϗđđđđǑđ\u0006ǧǇ\r&\u0004ٱٱٱ\u0001ʜ\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0002\u0004\rzꪗđđđđđĀ\u0001\u0004Аȅ\u0015\u0013ՁĂ8ՁĂ\u0015\nЁ̂Д\u0013đđĐđđ\u00138\u0015đđđđđ\u0011\u0014\u00138\u0015\u0014\u0015đđđđđ\u0013ȅ8ȅ\u0015đđđđđ\u0014ȅ\u0015\u0014ՁĂ!\u0014ՁĂ\u0015\u0014ՁĂ\u0015đđŔđ×\u000b\u0011\u0005đ×\u000b\u0011đđđđđ×\u000b\u0011݀\n\u0010\n\u0010\n\u0010đđđđđ\u0014ȅ\u0015đđđđđ\u0014ȅ\u0015đđđđđ\u0014ȅ\u0015\u0013ΎΎ\u0007\u0013ΎΎ\u0007\u0013ΎΎ\u0007đфđđ\u0014\t\u0006đфđđ\u0014\t\u0006đфđđ\u0014\t\u0006\u0014\u0015\u0014\u0015\u0014\u0015đđđđđ\u0014ȅ\u0015đÍ۟ߏÑŁ\u0012Ȅ\u0015đđđđđ\u0014Ȅ\u0018\u0014ՁĂ\u0015\u0003𢈢đđđđđ×\u000b\u0011đđĐđđđđđđŔđđđđđđđĐđđđđđđŔđđđđđđđ\n\u0010đđđđđ\u0014Ά\u0015Ǎ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗Ԁ\u0004!߿߿߻ԔфƗ\u0004\u0004\u0004\u0004\u0004ƆĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑ݊\u0004\u0004\u0004\u0004\u0004\u0004檆檆"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.GUARDMODEL",
    "content": "111)1Հ\u0005\u0004\u0018Հ*)1\u0006\b\u000b\u0004\u0005\u000bꊂ\u001fՀ,Ճ\u0005֖\u0003\u0001\n\u0005\u0004\u0001\u0002\u0001\n\u0005ח\u0007\u0005ꪊ*\u0001ࠠ\u0006\u001c\u0005ʪ\u0005\u0015\u0005׮\u0002\u0004\u0005Հ\u0005Օ'Հ\u0005\u0018\t#ՀՕ\u000eե\u0005\u0001&\u0004\u0004\u000b1\u0001\u0004!ժ₃#Ճ\u0006ŕ֖\u0003\u0001\nՀ\u0001\f\u0019)\u0001#\u0001ࠠ\u0006\u001c\u0004\u0006\u0004\f)Հ$1\u0006\u0005ّ\fՀ \u0004+\u0004\u0005\u0018\b\nа\u000f\u0004\u0004\u00131\u0005\u0010\u0001߿\f\u0005)Հ\u0005Ǘ\u000e1ʊ\u0004\u0001\u0002\f1\u0004߿\u0005ꪯ\u0005\u0004Հ&\u0001\b\u0007\u0017Հ\u0001(ՃՕ\u0004ਨ\u0004\u0005\u0005\u0017\u0015\u001a\u0004\b\f%\u0005\u0004\u0016Հ)\b\u0005\fՀ!\u0006\u0005\u0007\u0017\u0004\u0018ꪪ\u0007\u0013\u0006\u0011Հ\b\u001aՀ\u0004\u0004\u0005\r\u0001\u0004\t\u0018Հ\u0005ח\u000e*\u0005\u0005\u0001\r1\u0003\u0005\u0001\u0006\t1՟\u0005\rՅ\u0011Հ(՟\u0004\u0007\u0001\b\u0005\u0006\u0017\u001d\u000e\u0004\u0004\u0004\f\u0014\u000eՀ\u0004ŕ\u0004믿\f1\u0004\u0002\u0001\u000b\u0019\u000e\u0005\b\u0001\u000b\u0007\u0004\u0004\u0011\u0004\u0004\u001b!\u000b\u0011ښ\u0010Ձ\u0004\u0004\u0005\u0004\u0006\u0007վ\u0004)Հ\u00121ਨ\u0006\u0006\u00071\u0004\u0004\u0002՟\u0006Հ\u000b\u0004\u001c\n\u001fՀ*\u0005\u0005\u0001\u0005說\u0004\u0001\u000e1\u0004\b\u001f\u0006\n\rռ\u0004\u0005\u0005\u0001\u0004\u0001\rՀ(Հ\u0001\u0005\u0007\u0001߿\u000f\u0016\u000f\u0019\u000e\u0005\u0005\"\u0001\u0005\u0002\u0001\u000e%1\u0005\u0007\n՟\u0006\t\u0005\u000fՀ߿\u001d\u0001\u0004\u0004\u001b\b\u0004먨\u0001\u0002\n\u0016\u0017\u0005\u0001\u0004\u0004Հ\u0004Օ\u0002\u0004\f՟\b\u0004\u001bՀ\u0001\u0006\u0018\u0007\u0005\u0004\u0006\u0004\u0007\u0001\f.\u0006\u0004\u0005\u000b\u0005\u0004\u0005\f\u0018\u0016Ռ)Ճŕ֖\u0003\u0001\nՀ&*\u0004\u0004\f\u0001ࠠ\u0006\u001c)\u0004\u0004\u001d\u0005\u0004\u0001\u0001\u0001\u0001\u0004\u000bՀ&Հ\u0001!\u0005\u0007\u0002\r\u0007\u0005\f\u0006\t\u0004\n\u0004\t\u0006\u0004訨\rՀ\t\u001fՀ\u0001\u0004\u0005\u0001\u0001\u0004\tՁ\u0004証\u0001\u0004\u0001\u0005\u0018\u0016\u0004+\u0001\u0006\u0004\n\n\u0004\f111\u0012\u0004\u0011"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.GUYMODEL",
    "content": "111)1Հ\u0001&Հ))1\u0006\u0002\u0004ߟ\u0004\r\u0005\u0001\u0004\u0006\u0004\r\u0001\u001fՀ,Ճ\u0007\u0001ꪨ\f\t\u0006\u0003\u0001\f\u0006\u0001\rꪊ*\u0001\u0006\u0005\u001c\u0004ԅ\u0015\nǟ\u0002\u0004Հ\u0005Օ'Հ\u0001&\u0005\u0004#Հ\u0002\u000eե\u0005\u0001&\u0006\u0002\u0004ߟ\u0004\r1\u0001!ժ₃#Ճ\u0007\u0001ꪨ\fՀ\u0001')\u0001#\u0001\u0006\u0005\u001c\u0005\u0005߿\u000e)Հ$1\f\u0004\u0003\u000eՀ \u0004+\u0005\u0004\u0016\u0005\u0002\t\u000f\u0006\u00121\u0006\u0002\t\u0004\u0004\u000e0\u0007\u0005\u000e1\u0005\u0005\u0001\u0002\u000e1\u000b\u0004\u0004\u0006Հ&\u0001\u0006\b\u0018Հ\u0001(Ճ\u0003\u0007\u0006\u0005\u0005\u0017\u0015\u001a\u0004\u000e$\u0005\u0004\u0016Հ뿇)\u000b\u0002\u0007\u000eՀ!\u0006\u0005\u0007\u0017\u0005\u0001\b\u0017\u0007\u0013\u0005\u0007\u0011Հ\b\u001a\t\b\u0007\u000f\u0001蠀\u0011\u0018\u0007Ͽ\u000f*\u0006\u0004\u0001\u0004\u000f1\u000b\u0004\u0001\u0005ߏ\u000b1՟\u0005\u000e\u0012Հꏇ(՟\u0001\u0005\u0007𪪪\n\u0005\u0006\u0017\u001bԕ\u000e\u0005\u0004\u0004\u0004\u000e\u0014\u000eՀ\u0004ŕ\u0004믿\f1\nϿ\u0002ꪨ\u0004\r\u0019\u000e\u0005\b\u0001\u000b\u0007\u0004\u0004\u0011\u0004\u0001\u001b!\u000b\u0011ښ\u0010Ձ\u0004\u0004\u0005\u0004\u0006\u000fվ*\u0005\u0001\u0004\u00121ਨ\u0006\u0006\u000f1\n\tߟ\u0004\bՀ\u000b\u0004\u001c\n\u001fՀ*\u0006\u0001\u0007說\u0004\u0001\u000e1\u0004\t\u0019\u0004\n\rռ\u0004\u0005\u0005\u0001\u0004\u0001\rՀ)\u0005\n\u0015\u0015\u000f\u0019\u000e\u0005\u0001\u0004\u0006\u0004\r\u0006\u0004\u0004\u0001\u0010%1\t\u0006\u0003\u0001\f՟\u0004\b\u0004\u0011Հ𠠼\u001d\u0001\u0004\u0004\u001b\u0004ԅ\u0015\u0015\u0017\u0006\u0002\u0004\u0006\u0004\u0006Հ\u0004Օ\u0002\u0004\f\u0005\u0004#Հ\u0001&\n\u0004\u0001\u0004𪪪\u0006\u0006\u0004\u0007\u0001\f1\u0006\u0002\u0004ߟ\u0004\r\u0001\u0005\u0004\u0004\f\u0018\u0016Ռ)Ճ\u0007\u0001ꪨ\fՀ&*\u0005\u0001\u0004\u0015\u0001\u0006\u0005\u001c'\u0004\u0004\u001d\b\u0007\u0002\u0001\rՀ&Հ\u0001!\u0005\u0007\u0002\r\u000b\u0004\u000e\u0006\u0002\u0013\u0004\u0001\u0005ߗ\u0005\b\u0004訨\rՀ\u0005\u0005\u0018Հ\u0006\u0002ꨮ\u000bՁ\u0007ß\u0001\u0001\u0007\u0018\u0016+\u0001\u0004\u0005\n\f\u0004\u0004\u0004\f111\u0012\u0004\u001311\u0012\u0004\u0011"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.HALLOWEEN",
    "content": "<~<.\t\t\t\tf\u0005؍\u0005؍ً\u0004\u0005؍gРЉ\tРЉ\tСխݮ\u0004׋\te\u0005؉\u0005؉ي\u0005؉gСՍ𠀀СՍ𠀀РЩݮکծ֮׋𠀀e\u0005؈\u0005؈\u0005؈񰸼Ę\u0005؈l\u0012\u0012\u0012\u0012B\b\bç\u0005\b\b\u0005㧗\b\bç\u0005\b\b\u0005㧗\b\bç\u0005\b\b\u0005ࠐ,\u0014\u0014\u0014\u0014eշ\u0005շ\u0005շ\u0005շ\u0005f\u0005㷗\u0005㷗\u0005㷗\u0005㷗eç\u0005ç\u0005ç\u0005ç\u0005b㧗㧗㧗㧗bշշշշb\u0005ࠐ\u0005ࠐ\u0005ࠐ\u0005ࠐ%"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.HASSANMOD",
    "content": "111)1Հ\u0005\u0004\u0018Հ*)1\u0006\b\u000b\u0004\u0005\u000bꊂ\u001fՀ,Ճ\u0005֖\u0003\u0001\n\u0005\u0004\u0001\u0002\u0001\n\u0005ח\u0007\u0005ꪊ*\u0001ࠠ\u0006\u001c\u0005ʪ\u0005\u0015\u0005׮\u0002\u0004\u0005Հ\u0005Օ'Հ\u0005\u0018\t#ՀՕ\u000eե\u0005\u0001&\u0004\u0004\u000b1\u0001\u0004!ժ₃#Ճ\u0006ŕ֖\u0003\u0001\nՀ\u0001\f\u0019)\u0001#\u0001ࠠ\u0006\u001c\u0004\u0006\u0004\f)Հ$1\u0006\u0005ّ\fՀ \u0004+\u0004\u0005\u0018\b\nа\u000f\u0004\u0004\u00131\u0005\u0010\u0001߿\f\u0005)Հ\u0005Ǘ\u000e1ʊ\u0004\u0001\u0002\f1\u0004߿\u0005ꪯ\u0005\u0004Հ&\u0001\b\u0007\u0017Հ\u0001(ՃՕ\u0004ਨ\u0004\u0005\u0005\u0017\u0015\u001a\u0004\b\f%\u0005\u0004\u0016Հ)\b\u0005\fՀ!\u0006\u0005\u0007\u0017\u0004\u0018ꪪ\u0007\u0013\u0006\u0011Հ\b\u001aՀ\u0004\u0004\u0005\r\u0001\u0004\t\u0018Հ\u0005ח\u000e*\u0005\u0005\u0001\r1\u0003\u0005\u0001\u0006\t1՟\u0005\rՅ\u0011Հ(՟\u0004\u0007\u0001\b\u0005\u0006\u0017\u001d\u000e\u0004\u0004\u0004\f\u0014\u000eՀ\u0004ŕ\u0004믿\f1\u0004\u0002\u0001\u000b\u0019\u000e\u0005\b\u0001\u000b\u0007\u0004\u0004\u0011\u0004\u0004\u001b!\u000b\u0011ښ\u0010Ձ\u0004\u0004\u0005\u0004\u0006\u0007վ\u0004)Հ\u00121ਨ\u0006\u0006\u00071\u0004\u0004\u0002՟\u0006Հ\u000b\u0004\u001c\n\u001fՀ*\u0005\u0005\u0001\u0005說\u0004\u0001\u000e1\u0004%\u0006\n\rռ\u0004\u0005\u0005\u0001\u0004\u0001\rՀ(\u0006\u0006\u000f\u0016\u000f\u0019\u000e\u0005\u0005\"\u0007\u0001\u000e%1\u0005\u0007\n՟\t\u0005\u000fՀ\u0004\u001d\u0001\u0004\u0004\u001b\b\u0004먨\u0001\u0002\n\u0016\u0017\u0005\u0007\u0004\u0005\u0004Հ\u0004Օ\u0002\u0004\f՟\b\u0004\u001bՀ\u0001\u0007 \u0007\u0004\u0005د\u0004\u0006\u0004\u0007\u0001\f.\u0005\u0007\u000b\u0005\u0004\u0005\u0004\f\u0018\u0016Ռ)Ճ\u0006ן\u0001\u0002\u0001\u0001\nՀ&*\u0004\u0004\f\u0001ࠠ\u0006\u001c)\u0004\u0004\u001d\u0005\u0004\u0001\u0001\u0001\u0001\u0004\u000bՀ&Հ\u0001!\u0005\u0007\u0002\r\u0007\u0005\f\u0006\t\u0004\n\u0004\u0006\u0006\u0004訨\rՀ\t\u001fՀ\u0001\u0004\u0005\u0001\u0001\u0004\tՁ\u0005\u0004証\u0005\u0001\u0005\u0018\u0016\u0004+\u0001\u0006\u0004\n\n\u0004\f111\u0012\u0010"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.IMPALED",
    "content": ".\u0001\u0004\b\u0004ࠩ\u0007\u0005\u0001\u0004Ԕ\u0004<\u0004\u0001\u0004\b\u0004\u0005\u0004\u0004\u0004\u0003=\u0001\u0004\b\u0004ࠩ\u0005\u0007\u0004\u0004\u0001\u001a"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.JOIN",
    "content": "đđđđđ\u0014ȅTđđđđđ\u0014ȅ\u0015\u0012Ё̂ДR\u0014ՁĂ\u0015đđđđđđ\u0013Sđđđđđđ\u0014\u0015\u0014T\u0014\u0015đđđđđ\u0014Ά!đđđđđ\u0014ȅ\u0015,\u0004\u0004ۼۼۼۼۼ\u0014ՁĂՀ\u000bđđĐđ)\u0004\u0004⣦⣦⣦⣦⣦⣦đđđđđđ\u0012\u0001ԜЀ\u0007&\u0004ٱٱٱٱٱٱٱ\u0014\u0015đđđđđ\u0014Ȅ\u001c✇߿ꗝđđđđđ\u0014ȅ\u0015\u0014ՁĂ\u001cđđđđđđđđđ篟\u0014ՁĂ\u0015đđđđđđ\u0014\u001c\u0001ϗđđđđđđ\u0014\u0015\u0014\u001cՑđđđđĐĐ\u0001˝\u0014\u0015đđđđđ\u0014ȅ\u001cճ߿Ο݀đđđđđ\u0014ȅ\u0015\u0013ΎΎ\u0007ۏۏۏۏۏۏ\u0014ՁĂ\u0015đфđđ\u0014\t\u0005đđđđđđ\u0014\u0015\u0014\u001cՑđđđ񴱜͇˝\u0001　\u0014\u0015đđđđđ\u0014Ά\u001c✇߿ꗝđđđđđ\u0014ȅ\u0015,\u0004\u0004ۼ篟\u0014҂Ă\u0015đđĐđ)\u0004\u0004⣦⣦\u0001ϗđđđđǑđ\u0006ǧǇ\r&\u0004ٱٱّ\u0001˝\u0001\u0001\u0002\u0004\r{ꗝđđđđđĀ\u0001\u0004Аȅ\u0015\u0013ՁĂ8ՁĂ\u0015\nЁ̂Д\u0013đđĐđđ\u00138\u0015đđđđđ\u0011\u0014\u00138\u0015\u0014\u0015đđđđđ\u0013ȅ8ȅ\u0015đđđđđ\u0014ȅ\u0015\u0014ՁĂ!\u0014ՁĂ\u0015\u0014ՁĂ\u0015đđŔđ×\u000b\u0011\u0005đ×\u000b\u0011đđđđđ×\u000b\u0011݀\n\u0010\n\u0010\n\u0010đđđđđ\u0014ȅ\u0015đđđđđ\u0014ȅ\u0015đđđđđ\u0014ȅ\u0015\u0013ΎΎ\u0007\u0013ΎΎ\u0007\u0013ΎΎ\u0007đфđđ\u0014\t\u0006đфđđ\u0014\t\u0006đфđđ\u0014\t\u0006\u0014\u0015\u0014\u0015\u0014\u0015đđđđđ\u0014ȅ\u0015đÍ۟ߏÑŁ\u0012Ȅ\u0015đđđđđ\u0014Ȅ\u0018\u0014ՁĂ\u0015\u0003𢈢đđđđđ×\u000b\u0011đđĐđđđđđđŔđđđđđđđĐđđđđđđŔđđđđđđđ\n\u0010đđđđđ\u0014Ά\u0015Ǎ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗Ԁ\u0004!߿߿߻ԔфƗ\u0004\u0004\u0004\u0004\u0004ƆĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑ݊̌̌̌̌̌̌櫆櫆"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.JOIN2",
    "content": "đđđđđ\u0014Ȅ\u001c✇߿݀đđđđđ\u0014ȅ\u0015\u0014ՁĂ\u001cđđđđđđđđđ篟\u0014ՁĂ\u0015đđđđđđ\u0014\u001c\u0001ϗđđđđđđ\u0014\u0015\u0014\u001cՑđđđđĐĐ\u0001˝\u0014\u0015đđđđđ\u0014ȅ\u001cճ߿Ο݀đđđđđ\u0014ȅ\u0015\u0013ΎΎ\u0007ۏۏۏۏۏۏ\u0014ՁĂՀ\u000bđфđđ\u0014\t\u0005đđđđđđ\u0012\u0001ԜЀ\u0007\u0014$ర̄˝\u0001　\u0014\u0015đđđđđ\u0014Ȅ.߿đđđđđ\u0014ȅ\u0015\u0014ՁĂ0篟\u0014ՁĂ\u0015đđđđđđ\u00140\u0001ϗđđđđđđ\u0014\u0015\u0014-\u0001˝\u0014\u0015đđđđđ\u0014ȅ\u001f\u0005ճ߿Ο݀đđđđđ\u0014ȅ\u0015\u0013ΎΎ\u0007ۏۏۏۏۏۏ\u0014ՁĂ\u0015đфđđ\u0014\t\u0005đđđđđđ\u0014\u0015\u0014$ర̄˝\u0001　\u0014\u0015đđđđđ\u0014Ά.✇߿݀đđđđđ\u0014ȅ\u0015,\u0004\u0004ۼ篟\u0014҂Ă\u0015đđĐđ)\u0004\u0004⣦⣦\u0001ϗđđđđǑđ\u0006ǧǇ\r&\u0004ٱٱّ\u0001˝\u0001\u0001\u0002\u0004\rzꀗđđđđđĀ\u0001\u0004Аȅ\u0015\u0013ՁĂ8ՁĂ\u0015\nЁ̂Д\u0013đđĐđđ\u00138\u0015đđđđđ\u0011\u0014\u00138\u0015\u0014\u0015đđđđđ\u0013ȅ8ȅ\u0015đđđđđ\u0014ȅ\u0015\u0014ՁĂ!\u0014ՁĂ\u0015\u0014ՁĂ\u0015đđŔđ×\u000b\u0011\u0005đ×\u000b\u0011đđđđđ×\u000b\u0011݀\n\u0010\n\u0010\n\u0010đđđđđ\u0014ȅ\u0015đđđđđ\u0014ȅ\u0015đđđđđ\u0014ȅ\u0015\u0013ΎΎ\u0007\u0013ΎΎ\u0007\u0013ΎΎ\u0007đфđđ\u0014\t\u0006đфđđ\u0014\t\u0006đфđđ\u0014\t\u0006\u0014\u0015\u0014\u0015\u0014\u0015đđđđđ\u0014ȅ\u0015đÍ۟ߏÑŁ\u0012Ȅ\u0015đđđđđ\u0014Ȅ\u0018\u0014ՁĂ\u0015\u0003𢈢đđđđđ×\u000b\u0011đđĐđđđđđđŔđđđđđđđĐđđđđđđŔđđđđđđđ\n\u0010đđđđđ\u0014Ά\u0015Ǎ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗Ԁ\u0004!߿߿߻ԔфƗ\u0004\u0004\u0004\u0004\u0004ƆĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑ݊̌̌̌̌̌̌櫆櫆"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.LWIND",
    "content": "ĐфффǍ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗Ԁ܀ĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑ0櫆櫆旝đđđđđ\u0018\u0013\u0004|\u0018\u0004\f\u0007wđđđđđđ\u0018\u000b\u0006\u0004w\u0018\u0014\u0004~旝đđđđđođđĐđđđđđđŔđđđđđđđŔ\u0005\u0004V\u0004Őđ\u000b\u0005V\u0004\u0001Ǎ͗͗͗͗͗͗͗͗Ԁ\u0005\u0004\u0005P\u0004\u0004\u000b\u0005W\u0004\fĀݷݷݷݷݷݷݷݷݑݑ݈\u0001\u0005\u000b\u0005\u0005\u0001АԐА4\u0004\u0004\u0001櫆ĐoǍ͗͗͗͗͗͗͗͗Ԁđđđđđğ3ۻۻۻۻۻ߻ջ3ĀݷݷݷݷݷݷݷݷݑݑđđđđđđĀݪ3櫆ջ3Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđđ̪̪̪̪̪̪̪̪̪̪̪̪݈ݪ3ճճճճճճճճճճճճջ3ĀݷݷݷݷݷݷݷݷݑݑđđđğǓőǃ积ﯯﭭ\u0004߯痢Օ禦禥禦ݪ3櫆\u0004ֺֺֺ\u00013Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđr\u001eSĀݷݷݷݷݷݷݷݷݑݑđđđđđđ\u0012\u0005\u0005\u0001\u0004ؘАC櫆rǍ͗͗͗͗͗͗͗͗Ԁđđđđđr<3ĀݷݷݷݷݷݷݷݷݑݑđđđđđĐĐĐĐĐĐĐĕЀĐĐĐĐĐĐĐĕЀĐĐĐĐĐĐđĐĐĐĐĐĐĐĕЀĐĐĐĐĐĐĐĕЀĐĐĐĐĐ櫆\u0012\u0013\u0010\u0012\u0013\u000eǍ͗͗͗͗͗͗͗͗ԀĐфффĐфффĀݷݷݷݷݷݷݷݷݑݑ܀܀櫆Ǎ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗ԀĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑ݀櫆櫆櫆"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.MASKMODEL",
    "content": "111)1Հ\u0005\u0004\u0018Հ*)1\u0006\b\u000b\u0004\u0005\u000bꊂ\u001fՀ,Ճ\u0005֖\u0003\u0001\n\u0005\u0004\u0001\u0002\u0001\n\u0005ח\u0007\u0005ꪊ*\u0001ࠠ\u0006\u001c\u0005ʪ\u0005\u0015\u0005׮\u0002\u0004\u0005Հ\u0005Օ'Հ\u0005\u0018\t#ՀՕ\u000eե\u0005\u0001&\u0004\u0004\u000b1\u0001\u0004!ժ₃#Ճ\u0006ŕ֖\u0003\u0001\nՀ\u0001\f\u0019)\u0001#\u0001ࠠ\u0006\u001c\u0004\u0006\u0004\f)Հ$1\u0006\u0005ّ\fՀ \u0004+\u0004\u0005\u0018\b\nа\u000f\u0004\u0004\u00131\u0005\u0010\u0001߿\f\u0005)Հ\u0005Ǘ\u000e1ʊ\u0004\u0001\u0002\f1\u0004߿\u0005ꪯ\u0005\u0004Հ&\u0001\b\u0007\u0017Հ\u0001(ՃՕ\u0004ਨ\u0004\u0005\u0005\u0017\u0015\u001a\u0004\b\f%\u0005\u0004\u0016Հ)\b\u0005\fՀ!\u0006\u0005\u0007\u0017\u0004\u0018ꪪ\u0007\u0013\u0006\u0011Հ\b\u001aՀ\u0004\u0004\u0005\r\u0001\u0004\t\u0018Հ\u0005ח\u000e*\u0005\u0005\u0001\r1\u0003\u0005\u0001\u0006\t1՟\u0005\rՅ\u0011Հ(՟\u0004\u0007\u0001\b\u0005\u0006\u0017\u001d\u000e\u0004\u0004\u0004\f\u0014\u000eՀ\u0004ŕ\u0004믿\f1\u0004\u0002\u0001\u000b\u0019\u000e\u0005\b\u0001\u000b\u0007\u0004\u0004\u0011\u0004\u0004\u001b!\u000b\u0011ښ\u0010Ձ\u0004\u0004\u0005\u0004\u0006\u0007վ\u0004)Հ\u00121ਨ\u0006\u0006\u00071\u0004\u0004\u0002՟\u0006Հ\u000b\u0004\u001c\n\u001fՀ*\u0005\u0005\u0001\u0005說\u0004\u0001\u000e1\u0004\b\u001f\u0006\n\rռ\u0004\u0005\u0005\u0001\u0004\u0001\rՀ(Հ\u0001\u0005\u0007\u0001߿\u000f\u0016\u000f\u0019\u000e\u0005\u0005\"\u0001\u0005\u0002\u0001\u000e%1\u0005\u0007\n՟\u0006\t\u0005\u000fՀ߿\u001d\u0001\u0004\u0004\u001b\b\u0004먨\u0001\u0002\n\u0016\u0017\u0005\u0001\u0004\u0004Հ\u0004Օ\u0002\u0004\f՟\b\u0004\u001bՀ\u0001\u0006\u0018\u0007\u0005\u0004\u0006\u0004\u0007\u0001\f.\u0006\u0004\u0005\u000b\u0005\u0004\u0005\f\u0018\u0016Ռ)Ճŕ֖\u0003\u0001\nՀ&*\u0004\u0004\f\u0001ࠠ\u0006\u001c)\u0004\u0004\u001d\u0005\u0004\u0001\u0001\u0001\u0001\u0004\u000bՀ&Հ\u0001!\u0005\u0007\u0002\r\u0007\u0005\f\u0006\t\u0004\n\u0004\t\u0006\u0004訨\rՀ\t\u001fՀ\u0001\u0004\u0005\u0001\u0001\u0004\tՁ\u0004証\u0001\u0004\u0001\u0005\u0018\u0016\u0004+\u0001\u0006\u0004\n\n\u0004\f111\u0012\u0004\u0011"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.MEDWIND",
    "content": "đđđđđđđđđđđ旝đđđđđđđđđđđ旝đđđđđođđĐđđđđđđŔđđđđđđđŔ\u0005\u0004V\u0004Őđ\u000b\u0005V\u0004\u0001Ǎ͗͗͗͗͗͗͗͗Ԁ\u0005\u0004\u0005P\u0004\u0004\u000b\u0005W\u0004\fĀݷݷݷݷݷݷݷݷݑݑ݈\u0001\u0005\u000b\u0005\u0005\u0001АԐА4\u0004\u0004\u0001櫆ĐoǍ͗͗͗͗͗͗͗͗Ԁđđđđđ<(\u0004\u0007<\u0014\u0019Āݷݷݷݷݷݷݷݷݑݑđđđđđđ<\u0010\u0015\u0004櫆<)\u0004\tǍ͗͗͗͗͗͗͗͗ԀđđđđđrrĀݷݷݷݷݷݷݷݷݑݑđđđ\u0001\u0004\tN櫆\u0005\u000b\u0004\u0004\u0004NǍ͗͗͗͗͗͗͗͗Ԁđđđđđ<(\u0004\u0007\u001e\u001d\u0012\u001bĀݷݷݷݷݷݷݷݷݑݑđđđđđđ\u0012\u0005\u0005\u0001\u0004ؘА\r\u0007\u001f\u0004櫆<)\u0004\tǍ͗͗͗͗͗͗͗͗Ԁđđđđđr<3ĀݷݷݷݷݷݷݷݷݑݑđđđđđĐĐĐĐĐĐĐĕЀĐĐĐĐĐĐĐĕЀĐĐĐĐĐĐđĐĐĐĐĐĐĐĕЀĐĐĐĐĐĐĐĕЀĐĐĐĐĐ櫆\u0012\u0013\u0010\u0012\u0013\u000eǍ͗͗͗͗͗͗͗͗ԀĐфффĐфффĀݷݷݷݷݷݷݷݷݑݑ܀܀櫆Ǎ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗ԀĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑ݀櫆櫆櫆"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.MIR",
    "content": "đđđđđ\u0014ȅTđđđđđ\u0014ȅ\u0015\u0012Ё̂ДR\u0014ՁĂ\u0015đđđđđđ\u0013Sđđđđđđ\u0014\u0015\u0014T\u0014\u0015đđđđđ\u0014Ά!đđđđđ\u0014ȅ\u0015,\u0004\u0004ۼۼۼۼۼ\u0014ՁĂՀ\u000bđđĐđ)\u0004\u0004⣦⣦⣦⣦⣦⣦đđđđđđ\u0012\u0001ԜЀ\u0007&\u0004ٱٱٱٱٱٱٱ\u0014\u0015{ꗝđđđđđ\u0014ȅ\u0015\u0014ՁĂՀ\u000bB\u0014ՁĂ\u0015đđđđđđ\u0012\u0001ԔBđđđđđđ\u0014\u0015\u0014T\u0014\u0015đđđđđ\u0014ȅTđđđđđ\u0014ȅ\u0015\u0014ՁĂՀP\u0014ՁĂ\u0015đđđđđđ\u0012\u0001Fđđđđđđ\u0014\u0015\u0014T\u0014\u0015đđđđđ\u0014Ά!đđđđđ\u0014ȅ\u0015,\u0004\u0004ۼۼۼۼۼ\u0014҂Ă\u0015đđĐđ)\u0004\u0004⣦⣦⣦⣦⣦⣦đđđđǑđ\u0006ǧǇ\r&\u0004ٱٱٱٱٱٱٱ\u0001\u0001\u0002\u0004\r{ꗝđđđđđĀ\u0001\u0004Аȅ\u0015\u0013ՁĂ8ՁĂ\u0015\nЁ̂Д\u0013đđĐđđ\u00138\u0015đđđđđ\u0011\u0014\u00138\u0015\u0014\u0015đđđđđ\u0013ȅ8ȅ\u0015đđđđđ\u0014ȅ\u0015\u0014ՁĂ!\u0014ՁĂ\u0015\u0014ՁĂ\u0015đđŔđ×\u000b\u0011\u0005đ×\u000b\u0011đđđđđ×\u000b\u0011݀\n\u0010\n\u0010\n\u0010đđđđđ\u0014ȅ\u0015đđđđđ\u0014ȅ\u0015đđđđđ\u0014ȅ\u0015\u0013ΎΎ\u0007\u0013ΎΎ\u0007\u0013ΎΎ\u0007đфđđ\u0014\t\u0006đфđđ\u0014\t\u0006đфđđ\u0014\t\u0006\u0014\u0015\u0014\u0015\u0014\u0015đđđđđ\u0014ȅ\u0015đÍ۟ߏÑŁ\u0012Ȅ\u0015đđđđđ\u0014Ȅ\u0018\u0014ՁĂ\u0015\u0003𢈢đđđđđ×\u000b\u0011đđĐđđđđđđŔđđđđđđđĐđđđđđđŔđđđđđđđ\n\u0010đđđđđ\u0014Ά\u0015Ǎ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗Ԁ\u0004!߿߿߻ԔфƗ\u0004\u0004\u0004\u0004\u0004ƆĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑ݊̌̌̌̌̌̌櫆櫆"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.MIR1",
    "content": "đđđđđ\u0014ȅTđđđđđ\u0014ȅ\u0015\u0012Ё̂ДR\u0014ՁĂ\u0015đđđđđđ\u0013Sđđđđđđ\u0014\u0015\u0014T\u0014\u0015đđđđđ\u0014Ά!đđđđđ\u0014ȅ\u0015,\u0004\u0004ۼۼۼۼۼ\u0014ՁĂՀ\u000bđđĐđ)\u0004\u0004⣦⣦⣦⣦⣦⣦đđđđđđ\u0012\u0001ԜЀ\u0007&\u0004ٱٱٱٱٱٱٱ\u0014\u0015{ꗝđđđđđ\u0014ȅ\u0015\u0014ՁĂՀ\u000bB\u0014ՁĂ\u0015đđđđđđ\u0012\u0001ԔBđđđđđđ\u0014\u0015\u0014T\u0014\u0015đđđđđ\u0014ȅ\u0016\u0005ճ߿Ο݀đđđđđ\u0014ȅ\u0015!ۏۏۏۏۏۏ\u0014ՁĂ\u0015Ā\u0005%\u0006đđđđđđ\u0014\u0015\u001d\u001dՑđđđ񴱜͇˝\u0001　\u0014\u0015đđđđđ\u0014Ά!đđđđđ\u0014ȅ\u0015,\u0004\u0004ۼۼۼۼۼ\u0014҂Ă\u0015đđĐđ)\u0004\u0004⣦⣦⣦⣦⣦⣦đđđđǑđ\u0006ǧǇ\r&\u0004ٱٱٱٱٱٱٱ\u0001\u0001\u0002\u0004\r{ꗝđđđđđĀ\u0001\u0004Аȅ\u0015\u0013ՁĂ8ՁĂ\u0015\nЁ̂Д\u0013đđĐđđ\u00138\u0015đđđđđ\u0011\u0014\u00138\u0015\u0014\u0015đđđđđ\u0013ȅ8ȅ\u0015đđđđđ\u0014ȅ\u0015\u0014ՁĂ!\u0014ՁĂ\u0015\u0014ՁĂ\u0015đđŔđ×\u000b\u0011\u0005đ×\u000b\u0011đđđđđ×\u000b\u0011݀\n\u0010\n\u0010\n\u0010đđđđđ\u0014ȅ\u0015đđđđđ\u0014ȅ\u0015đđđđđ\u0014ȅ\u0015\u0013ΎΎ\u0007\u0013ΎΎ\u0007\u0013ΎΎ\u0007đфđđ\u0014\t\u0006đфđđ\u0014\t\u0006đфđđ\u0014\t\u0006\u0014\u0015\u0014\u0015\u0014\u0015đđđđđ\u0014ȅ\u0015đÍ۟ߏÑŁ\u0012Ȅ\u0015đđđđđ\u0014Ȅ\u0018\u0014ՁĂ\u0015\u0003𢈢đđđđđ×\u000b\u0011đđĐđđđđđđŔđđđđđđđĐđđđđđđŔđđđđđđđ\n\u0010đđđđđ\u0014Ά\u0015Ǎ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗Ԁ\u0004!߿߿߻ԔфƗ\u0004\u0004\u0004\u0004\u0004ƆĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑ݊̌̌̌̌̌̌櫆櫆"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.MIR2",
    "content": "{ꗝđđđđđ\u0014ȅ\u0015\u0014ՁĂՀ\u000b\u000bđđđđđđđđđ篟\u0014ՁĂ\u0015đđđđđđ\u0012\u0001Ԕ\u000b\u0001ϗđđđđđđ\u0014\u0015\u0014\u001dՑđđđđĐĐ\u0001˝\u0014\u0015đđđđđ\u0014ȅ\u0016\u0005ճ߿Ο݀đđđđđ\u0014ȅ\u0015!ۏۏۏۏۏۏ\u0014ՁĂՀ\u000bĀ\u0005%\u0006đđđđđđ\u0012\u0001ԜЀ\u0007GՑđđđ񴱜͇˝\u0001　\u0014\u0015G7Đđđđđ\u0014ȅ\u0015\u0014ՁĂՀ\u000b\u000bđđđđđđđđđ篟\u0014ՁĂ\u0015đđđđđđ\u0012\u0001Ԕ\u000b\u0001ϗđđđđđđ\u0014\u0015\u0014\u001dՑđđđđĐĐ\u0001˝\u0014\u0015đđđđđ\u0014ȅ\u0016\u0005ճ߿Ο݀đđđđđ\u0014ȅ\u0015!ۏۏۏۏۏۏ\u0014ՁĂ\u0015Ā\u0005%\u0006đđđđđđ\u0014\u0015\u001d\u001dՑđđđ񴱜͇˝\u0001　\u0014\u0015đđđđđ\u0014Ά\u001d✇߿݆đđđđđ\u0014ȅ\u0015,\u0004\u0004ۼ͑篟\u0014҂Ă\u0015đđĐđ)\u0004\u0004⣦⣦\u0001ϗđđđđǑđ\u0006ǧǇ\r&\u0004ٱٱٱ\u0001ʜ\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0002\u0004\r{ꗝđđđđđĀ\u0001\u0004Аȅ\u0015\u0013ՁĂ8ՁĂ\u0015\nЁ̂Д\u0013đđĐđđ\u00138\u0015đđđđđ\u0011\u0014\u00138\u0015\u0014\u0015đđđđđ\u0013ȅ8ȅ\u0015đđđđđ\u0014ȅ\u0015\u0014ՁĂ!\u0014ՁĂ\u0015\u0014ՁĂ\u0015đđŔđ×\u000b\u0011\u0005đ×\u000b\u0011đđđđđ×\u000b\u0011݀\n\u0010\n\u0010\n\u0010đđđđđ\u0014ȅ\u0015đđđđđ\u0014ȅ\u0015đđđđđ\u0014ȅ\u0015\u0013ΎΎ\u0007\u0013ΎΎ\u0007\u0013ΎΎ\u0007đфđđ\u0014\t\u0006đфđđ\u0014\t\u0006đфđđ\u0014\t\u0006\u0014\u0015\u0014\u0015\u0014\u0015đđđđđ\u0014ȅ\u0015đÍ۟ߏÑŁ\u0012Ȅ\u0015đđđđđ\u0014Ȅ\u0018\u0014ՁĂ\u0015\u0003𢈢đđđđđ×\u000b\u0011đđĐđđđđđđŔđđđđđđđĐđđđđđđŔđđđđđđđ\n\u0010đđđđđ\u0014Ά\u0015Ǎ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗Ԁ\u0004!߿߿߻ԔфƗ\u0004\u0004\u0004\u0004\u0004ƆĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑ݊̌̌̌̌̌̌櫆櫆\n"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.MIR3",
    "content": "đđđđđ\u0014ȅ\u0016\u0005ճ߿Οꗝđđđđđ\u0014ȅ\u0015!ۏۏۏۏۏۏ\u0014ՁĂ\u0015Ā\u0005\u0015\t\u0006đđđđđđ\u0014\u0015#\u001dՑđđđ񴱜͇˝\u0001　\u0014\u0015#ȅ\u001d✇߿݀đđđđđ\u0014ȅ\u0015#ՁĂ\u001dđđđđđđđđđ篟\u0014ՁĂՀ\u000b#\u001d\u0001ϗđđđđđđ\u0012\u0001ԜЀ\u0007#\u001dՑđđđđĐĐ\u0001˝\u0014\u0015đđđđđ\u0014ȅ\u0016\u0005ճ߿ΟĐđđđđ\u0014ȅ\u0015\u0013ΎΎ\u0007ۏۏۏۏۏۏ\u0014ՁĂ\u0015Ā\u0005\u0015\t\u0006đđđđđđ\u0014\u0015#\u001dՑđđđ񴱜͇˝\u0001　\u0014\u0015#ȅ\u001d✇߿݀đđđđđ\u0014ȅ\u0015#ՁĂ\u001dđđđđđđđđđ篟\u0014ՁĂ\u0015#\u001d\u0001ϗđđđđđđ\u0014\u0015#\u001dՑđđđđĐĐ\u0001˝\u0014\u0015đđđđđ\u0014ȅ\u0016\u0005ճ߿Ο݀đđđđđ\u0014ȅ\u0015\u0004!߿߿ۏۏۏۏۏۏ\u0014҂Ă\u0015ԔфƗ\u0004\u0004\u0004\u0004\u0004ƆđđđđǑđ\u0006ǧǇ\r݊̌̌̌̌̌̌ٱٱٱٱٱٱٱ\u0001\u0001\u0002\u0004\r4FꗝđđđđđĀ\u0001\u0004Аȅ\u0015\u0013ՁĂ8ՁĂ\u0015\nЁ̂Д\u0013đđĐđđ\u00138\u0015đđđđđ\u0011\u0014\u00138\u0015\u0014\u0015đđđđđ\u0013ȅ8ȅ\u0015đđđđđ\u0014ȅ\u0015\u0014ՁĂ!\u0014ՁĂ\u0015\u0014ՁĂ\u0015đđŔđ×\u000b\u0011\u0005đ×\u000b\u0011đđđđđ×\u000b\u0011݀\n\u0010\n\u0010\n\u0010đđđđđ\u0014ȅ\u0015đđđđđ\u0014ȅ\u0015đđđđđ\u0014ȅ\u0015\u0013ΎΎ\u0007\u0013ΎΎ\u0007\u0013ΎΎ\u0007đфđđ\u0014\t\u0006đфđđ\u0014\t\u0006đфđđ\u0014\t\u0006\u0014\u0015\u0014\u0015\u0014\u0015đđđđđ\u0014ȅ\u0015đÍ۟ߏÑŁ\u0012Ȅ\u0015đđđđđ\u0014Ȅ\u0018\u0014ՁĂ\u0015\u0003𢈢đđđđđ×\u000b\u0011đđĐđđđđđđŔđđđđđđđĐđđđđđđŔđđđđđđđ\n\u0010đđđđđ\u0014Ά\u0015Ǎ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗Ԁ\u0004!߿߿߻ԔфƗ\u0004\u0004\u0004\u0004\u0004ƆĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑ݊̌̌̌̌̌̌櫆櫆"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.MUSTARD",
    "content": "̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̀̀̀♀Ā♀Ā♀Ā̢̢̢̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̀̀̀撀摀撀0̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̀\u0017\u0007\u0010̳̳̳̳̳0♀Ā̳̳̳̳̳\u0007\u0004\u0007\u0007݁\u000b0̢̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̀\u000f\u0007\u0007\u0010̳̳̳̳̳̳0摀̳̳̳̳̳̳\u000f\u0007Ր\u00150̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̀0̳̳̳̳̳̀♀Ā̳̳̳̳̳0怘\u0001\u0001̢̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̀0̳̳̳̳̳\u0012\u0013\u000b搀̳̳̳̳̳̳0ᇙᇙᇙ̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̀\u0017\u0007\u0010\u0013\u0013\u0012♀Ā̳̳̳̳̳\u0007\u0004\u0007\u0007݁\u000b\u0001\u0003\u0004\u0001\u0007\u0011\u0010̢̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̀\u000f\u0007\u0007\u0010̰ͳ0撀̳̳̳̳̳̳\u000f\u0007Ր\u0015\u0001晆\u000500Ì̳̳̳̳̳̳̳ϼÏϳϳϳϳϳϳϳϳϼÌ̳̳̳̳̳̳̳ϼ̳̳̳̳̳̀0\u0004ᆙᆙ怘\u0001\u00010\u0004̰̰̰̰̰̰̼̰̰̰̰̰̰̰̰̼̰̰̰̰̰̰̳ϼ̳̳̳\u0012\u0013\u000b̳̳̳̳̳̳0̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̀ᇙᇙᇙ0♀Ā\u0013\u0013\u0012̳̳̳̰2̢̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̀\u0001\u0001\u0001\u0001\u0001\b\u0011\u00106撀̳̳̳̳̳̳0̰9ݳ̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̀\u0017\u0007O♀Ā̳̳̳̳̳\u0007\u0004\u0007\u0007݁J̢̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̀\u000f\u0007\u0007O撀̳̳̳̳̳̳\u000f\u0007ՐTݳ̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̀濿\u0004\u0005\t\u0004K♀Ā̳̳̳̳̀\u0007𰰰\u0004\u0004\u0004ࠨ\u0006B̢̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̀\u0012\u0005\u0005\u0001АՕB撀̳̳̳̳̳̳oݳ̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̀o♀Ā̳̳̳̳̳\u001eP̢̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̀\u0012\u0005\u0005\u0001ԔA撀̳̳̳̳̳̳oݳ̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̀昁\u00050♀Ā̳̳̳̰Ì̳̳̳̳̳̳ϼÏϳϳϳϳϳϳϳϳϼÌ̳̳̳̳̳̳̳ϼ\u0004\u0004\u0004\u0004\u0004\u0004\u0005̢̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̳̀ᆙᆙᆙ\u0001\u0001\u0001\u0001\u0001\u0001撀̰Ì̳̳̳̳̳̳ϼÌ̳̳̳̳̳̳̳̳ϼÌ̳̳̳̳̳̳̳ϼ̿ܿ߿ܜܜܜܜܜܜ"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.NAR",
    "content": "ĐфффǍ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗Ԁ܀ĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑ0櫆櫆旝đđđđđđđđđđđ旝đđđđđođđĐđđđđđđŔđđđđđđđŔ\u0005\u0004V\u0004\u000b\u0005V\u0004\u0001Ǎ͗͗͗͗͗͗͗͗Ԁ\u0006\u0004\u0005P\u0004\u0004\u000b\u0005W\u0004\fĀݷݷݷݷݷݷݷݷݑݑ\u0005\u000b\u0005\u0005\u0001АԐА4\u0004\u0004\u0001櫆oǍ͗͗͗͗͗͗͗͗Ԁđđđđđ/>/Āݷݷݷݷݷݷݷݷݑݑđđđđđđđ\u000b\u0012\u000b/櫆\u000b&/Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđđđ\u000b\u0001\n\r\u0005\u0007/\u0001\u000b\u0014\n/Āݷݷݷݷݷݷݷݷݑݑđđđđđđ>/櫆\u0003\t\t\t\t\b\u0001/Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđr\u001eSĀݷݷݷݷݷݷݷݷݑݑđđđđđđ\u0012\u0005\u0005\u0001\u0004ؘАC櫆rǍ͗͗͗͗͗͗͗͗ԀđđĔÆ\u0007N\u0004\t\u0003\u00184ĀݷݷݷݷݷݷݷݷݑݑđđđԁА\u0004АаАаđđ\u0005đŇ#\u0004櫆1!\u0004Ǎ͗͗͗͗͗͗͗͗ԀĐđĐđĐđ1!Āݷݷݷݷݷݷݷݷݑݑ܀đф%\u0006櫆8Ǎ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗ԀĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑ݀櫆櫆櫆"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.NEWDOR",
    "content": "ĐфффǍ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗Ԁ܀ĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑ0櫆櫆旝đđđđđĀ\u001a\u001ađđđđđđ\u001a\u001a旝đđđđđođđĐđđđđđđŔđđđđđđđŔ\u0005\u0004V\u0004Őđ\u000b\u0005V\u0004\u0001Ǎ͗͗͗͗͗͗͗͗Ԁ\u0005\u0004\u0005P\u0004\u0004\u000b\u0005W\u0004\fĀݷݷݷݷݷݷݷݷݑݑ݈\u0001\u0005\u000b\u0005\u0005\u0001АԐА4\u0004\u0004\u0001櫆Ĉ∢oǍ͗͗͗͗͗͗͗͗Ԁđđđđđ//Āݷݷݷݷݷݷݷݷݑݑđđđđđđ:/櫆?/Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ?/7/Āݷݷݷݷݷݷݷݷݑݑđđđđđđ/櫆/Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđr\u001eSĀݷݷݷݷݷݷݷݷݑݑđđđđđđ\u0012\u0005\u0005\u0001\u0004ؘАC櫆rǍ͗͗͗͗͗͗͗͗ԀđđĔÆ\u0007N\u0004\t\u0003\u00183ĀݷݷݷݷݷݷݷݷݑݑđđđԁА\u0004АаАаđđĐđĐĐĐĐĐĐĐĕЀĐĐĐĐĐĐĐĕЀĐĐĐĐĐ櫆1\u0012\u0013\u000eǍ͗͗͗͗͗͗͗͗ԀĐđĐĐфффĀݷݷݷݷݷݷݷݷݑݑ܀܀櫆Ǎ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗ԀĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑ݀櫆櫆櫆ݷݷݷݑݑ݀櫆櫆櫆"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.NITETIME",
    "content": "ĐфффǍ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗Ԁ܀ĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑ0櫆櫆旝đđđđđđđđđđđ旝đđđđđođđĐđđđđđđŔđđđđđđđŔ\u0005\u0004V\u0004Őđ\u000b\u0005V\u0004\u0001Ǎ͗͗͗͗͗͗͗͗Ԁ\u0005\u0004\u0005P\u0004\u0004\u000b\u0005W\u0004\fĀݷݷݷݷݷݷݷݷݑݑ݈\u0001\u0005\u000b\u0005\u0005\u0001АԐА4\u0004\u0004\u0001櫆Ĉ∢oǍ͗͗͗͗͗͗͗͗Ԁđđđđđ/\u0003/Āݷݷݷݷݷݷݷݷݑݑđđđđđđđ\u000b\u0012\u000b/櫆\u000b'/Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđđđ\u000b\u0001\n\r\u0005\b/\u0001\u000b\u0014\n/Āݷݷݷݷݷݷݷݷݑݑđđđđđđ/櫆\u0003/Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđr\u001eSĀݷݷݷݷݷݷݷݷݑݑđđđđđđ\u0012\u0005\u0005\u0001\u0004ؘАC櫆rǍ͗͗͗͗͗͗͗͗ԀđđĔÆ\u0007N\u0004\t\u0003\u00183ĀݷݷݷݷݷݷݷݷݑݑđđđԁА\u0004АаАаđđĐđđ3櫆13Ǎ͗͗͗͗͗͗͗͗ԀĐđĐđđđđđ0Āݷݷݷݷݷݷݷݷݑݑ܀đđĐđđđđđđŔđđđđđ櫆Ǎ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗ԀĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑ݀櫆櫆櫆櫆"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.NOSTRIPE",
    "content": "?đđđđđ7߿Ǎ͗͗͗͗͗͗ݷ?K篟?đđđđđđ7\u0001ϗݑ?7ՑđđđđĐĐ\u0001˝*\u0010đđđđđ7\u0005ճ߿ΟǍ͗͗͗͗͗͗Ԁ\u0017\u0004\r\u0001\u0007\u0001\n!ۏۏۏۏۏۏ\u0017\u0004\tݾݾ\u0001߀đфđđ$\u0005߀ݑ\u0017\u0004\t߿߿߿7Ցđđđ񴱜͇˝\u0001　\u0017\u0004\u0004\u0004翟篟đđđđđ7߿Ǎ͗͗͗͗͗͗Ԁ\u0017\u0004\tϗϗK篟\u0017\u0004\u0004\u0004\u0001˝\u0002˝\u0002đđđđđđ7\u0001ϗݑ\u0017\u0004\u0004\u0004\u00017ՑđđđđĐĐ\u0001˝\u0017\u0004\u0004\u0004߯篟翟đđđđ7\u0005ճ߿ΟǍ͗͗͗͗͗͗Ԁ\u001c\u0004\u0001\nϟ߿ȟ!ۏۏۏۏۏۏ0\u000eđфđđ$\u0005߀ݑ\"7Ցđđđ񴱜͇˝\u0001　\"׻\u0001׻\u0001׻\u0001׻\u0001׻\u0001׻\u0001׻\u0001đđđđđ7߿Ǎ͗͗͗͗͗͗Ԁ\"ݾݾݾݾݾݾݾ\u00144篟\"ظظظظظظظđđđđǑđ\u0006\u0004\u0014\u0001ϗݑ?\u0001\u0001\u0002\u0004\u0014ՑđđđđĐĐ\u0001˝?đđđđđĀ\u0001\u0004А\u001f\u0005ճ߿ΟǍ͗͗͗͗͗͗Ԁ?\u0005\u001aۏۏۏۏۏۏ?đфđđ$\u0005߀ݑ?7Ցđđđ񴱜͇˝\u0001　怗đđđđđ\u0013ȅ\u0015đđđđđ7߿Ǎ͗͗͗͗͗͗Ԁ\u0014ՁĂ\u0015K篟đđŔđ×\u000b\u0011đđđđđđ7\u0001ϗݑ݀\n\u00107ՑđđđđĐĐ\u0001˝旝đđđđđ\u0014ȅ\u0015đđđđđ7\u0005ճ߿ΟǍ͗͗͗͗͗͗Ԁ\u0013ΎΎ\u0007!ۏۏۏۏۏۏđфđđ\u0014\t\u0006đфđđ$\u0005߀ݑ\u0014\u00157Ցđđđ񴱜͇˝\u0001　旝đđđđđ\u0014ȅ\u0015đđđđđ7߿Ǎ͗͗͗͗͗͗Ԁ\u0014ՁĂ\u0015#篟đđđđđ×\u000b\u0011đđĐđđđđđđŔđ\u000f\u0001ϗݑ\n\u0010\u000fՑđđđđĐĐ\u0001˝搙đđđđđ\u0014Ά\u0015Ǎ͗͗͗͗͗\u000f\u0005ճ߿ΟǍ͗͗͗͗͗͗Ԁ\u0004!߿߿߻ۏۏۏۏۏۏԔфƗ\u0004\u0004\u0004\u0004\u0004ƆĀݷݷݷݷݷݷݷݷݑ݀߀ݑ݊̌̌̌̌̌̌櫆櫆"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.PAL1",
    "content": "Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđo\u001e\u000bBĀݷݷݷݷݷݷݷݷݑݑđđđđđđ\u0012\u0005\u0005\u0001ԔB櫆oǍ͗͗͗͗͗͗͗͗Ԁđđđđ=\u0005\u0004\u0004\u0004\u0004\u0004\u0004\u0001ۼۼۼۼۼĀݷݷݷݷݷݷݷݷݑݑđđĐǟǟǟǟǟǟǟλ⣦⣦⣦⣦⣦⣦櫆\u0001\u0001\u0001\u0001\u0001\u0001\u0001ٱٱٱٱٱٱǍ͗͗͗͗͗͗͗͗Ԁ{nĀݷݷݷݷݷݷݷݷݑݑđđĝםđđn櫆oǍ͗͗͗͗͗͗͗͗Ԁבđѷݑq踠sĀݷݷݷݷݷݷݷݷݑݑ𝗝đőđ\u000b\u0004\u0004\u0004N櫆\u0001\u0003\u0004\tNǍ͗͗͗͗͗͗͗͗Ԁđđđđđs9ĀݷݷݷݷݷݷݷݷݑݑđđĐđĐĐĐĐĐĐĐĕЀĐĐĐĐĐĐĐĕЀĐĐĐĐĐĐđđđđđđđđŔđđđđđđđ櫆\u0012\u0013\rǍ͗͗͗͗͗͗͗͗ԀĐфффǍ͗͗͗͗͗͗͗͗ԀĀݷݷݷݷݷݷݷݷݑݑ܀Āݷݷݷݷݷݷݷݷݑݑ櫆0櫆Ǎ͗͗͗͗͗͗͗͗Ԁ*Ǎ͗͗͗͗͗͗͗͗ԀđđđǗ+Āݷݷݷݷݷݷݷݷݑݑ݈ĐĐĐĐĐĐĐĕЀĐĐĐĐĐĐĐĕЀĐĐԙĀݷݷݷݷݷݷݷݷݑݑ櫆Ĝ̤\u0012\u0013\u0004櫆Ǎ͗͗͗͗͗͗͗͗ԀĐфффđǍ͗͗͗͗͗͗͗͗ԀĀݷݷݷݷݷݷݷݷݑݑ܀Āݷݷݷݷݷݷݷݷݑݑ櫆/櫆Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ/Ǎ͗͗͗͗͗͗͗͗Ԁ1ĀݷݷݷݷݷݷݷݷݑݑđđĐ4Āݷݷݷݷݷݷݷݷݑݑ櫆8櫆思đđđđđoǍ͗͗͗͗͗͗͗͗Ԁ9đđđđđĐĐĐĐĐĐĐĕЀĐĐĐĐĐĐĐĕЀĐĐĐĐĐĐđđđđđđđđŔđđđđđĀݷݷݷݷݷݷݷݷݑݑ݀\u0012\u0013\r櫆"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.PAL2",
    "content": "Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđo\u001e\u000bBĀݷݷݷݷݷݷݷݷݑݑđđđđđđ\u0012\u0005\u0005\u0001ԔB櫆oǍ͗͗͗͗͗͗͗͗Ԁđđđđ=\u0005\u0004\u0004\u0004\u0004\u0004\u0004\u0001ۼۼۼۼۼĀݷݷݷݷݷݷݷݷݑݑđđĐǟǟǟǟǟǟǟλ⣦⣦⣦⣦⣦⣦櫆\u0001\u0001\u0001\u0001\u0001\u0001\u0001ٱٱٱٱٱٱǍ͗͗͗͗͗͗͗͗Ԁ{nĀݷݷݷݷݷݷݷݷݑݑđđĝםđđn櫆oǍ͗͗͗͗͗͗͗͗Ԁבđѷݑq踠sĀݷݷݷݷݷݷݷݷݑݑ𝗝đőđ\u000b\u0004\u0004\u0004N櫆\u0001\u0003\u0004\tNǍ͗͗͗͗͗͗͗͗Ԁđđđđđs9ĀݷݷݷݷݷݷݷݷݑݑđđĐđĐĐĐĐĐĐĐĕЀĐĐĐĐĐĐĐĕЀĐĐĐĐĐĐđđđđđđđđŔđđđđđđđ櫆\u0012\u0013\rǍ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0012Ǎ͗͗͗͗͗͗͗͗ԀӣӋӣӋ\u000e׳׳Āݷݷݷݷݷݷݷݷݑݑ\u0004\u0001݀Āݷݷݷݷݷݷݷݷݑݑ櫆բբ\u0013Ń櫆Ǎ͗͗͗͗͗͗͗͗ԀבđđđđđѠѠ\u0016׀Ǎ͗͗͗͗͗͗͗͗ԀШРШР\u0018ѻĀݷݷݷݷݷݷݷݷݑݑđđđđđԐԺԨԺԨ\u0018݀Āݷݷݷݷݷݷݷݷݑݑ櫆ݾݪݾݪ\u0016櫆Ǎ͗͗͗͗͗͗͗͗Ԁבđđđđđ\u0012׀Ǎ͗͗͗͗͗͗͗͗ԀӣӋӣӋ\nŷշĀݷݷݷݷݷݷݷݷݑݑ݀Āݷݷݷݷݷݷݷݷݑݑ櫆\t\u0013\u0001ջ櫆Ǎ͗͗͗͗͗͗͗͗Ԁݗф\u000e\u001dǍ͗͗͗͗͗͗͗͗Ԁ1ĀݷݷݷݷݷݷݷݷݑݑđđĐ4Āݷݷݷݷݷݷݷݷݑݑ櫆8櫆思đđđđđoǍ͗͗͗͗͗͗͗͗Ԁ9đđđđđĐĐĐĐĐĐĐĕЀĐĐĐĐĐĐĐĕЀĐĐĐĐĐĐđđđđđđđđŔđđđđđĀݷݷݷݷݷݷݷݷݑݑ݀\u0012\u0013\r櫆D"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.PARCH",
    "content": "đđđđđđđđđđ旝đđđđđ\rరeڬٲ˖ڴ鴚̙˖ڴڬٲ\u0014dđđđđđđ˖̦ڭˣۣ֬ٲ˖ͦڭˣۣ֬ٲ˖̦\u0014d볛˛˓۳۫۳˓۳볛˛\re旝đđđđđođđĐđđđđđđŔđđđđđđđŔ\u0005\u0004V\u0004Őđ\u000b\u0005V\u0004\u0001Ǎ͗͗͗͗͗͗͗͗Ԁ\u0005\u0004\u0005P\u0004\u0004\u000b\u0005W\u0004\fĀݷݷݷݷݷݷݷݷݑݑ݈\u0001\u0005\u000b\u0005\u0005\u0001АԐА4\u0004\u0004\u0001櫆ĐoǍ͗͗͗͗͗͗͗͗Ԁđđđđđğ3ۻۻۻۻۻ߻ջ3ĀݷݷݷݷݷݷݷݷݑݑđđđđđđĀݪ3櫆ջ3Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđđ̪̪̪̪̪̪̪̪̪̪̪̪݈ݪ3ճճճճճճճճճճճճջ3ĀݷݷݷݷݷݷݷݷݑݑđđđğǓőǃ积ﯯﭭ\u0004߯痢Օ禦禥禦ݪ3櫆\u0004ֺֺֺ\u00013Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđr\u001eSĀݷݷݷݷݷݷݷݷݑݑđđđđđđ\u0012\u0005\u0005\u0001\u0004ؘАC櫆rǍ͗͗͗͗͗͗͗͗Ԁđđđđđr<3ĀݷݷݷݷݷݷݷݷݑݑđđđđđĐĐĐĐĐĐĐĕЀĐĐĐĐĐĐĐĕЀĐĐĐĐĐĐđĐĐĐĐĐĐĐĕЀĐĐĐĐĐĐĐĕЀĐĐĐĐĐ櫆\u0012\u0013\u0010\u0012\u0013\u000eǍ͗͗͗͗͗͗͗͗ԀĐфффĐфффĀݷݷݷݷݷݷݷݷݑݑ܀܀櫆Ǎ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗ԀĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑ݀櫆櫆櫆"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.PNB",
    "content": "đđđđđđđđđđđ旝đđđđđđđđđđđ旝đđđđđođđĐđđđđđđŔđđđđđđđŔ\u0005\u0004V\u0004Őđ\u000b\u0005V\u0004\u0001Ǎ͗͗͗͗͗͗͗͗Ԁ\u0005\u0004\u0005P\u0004\u0004\u000b\u0005W\u0004\fĀݷݷݷݷݷݷݷݷݑݑ݈\u0001\u0005\u000b\u0005\u0005\u0001АԐА4\u0004\u0004\u0001櫆ĐoǍ͗͗͗͗͗͗͗͗Ԁđđđđđ<(\u0004\u0007<.Āݷݷݷݷݷݷݷݷݑݑđđđđđđ<'\u0004櫆<)\u0004\tǍ͗͗͗͗͗͗͗͗ԀđđđđđrrĀݷݷݷݷݷݷݷݷݑݑđđđ\u0001\u0004\tN櫆\u0005\u000b\u0004\u0004\u0004NǍ͗͗͗͗͗͗͗͗Ԁđđđđđ<\u0005\u0005\u0005\u0005\u0005\u0005\u0006\u001e\u001dĨĂĨĂĨĂĨĂĨĂĨĂĀݷݷݷݷݷݷݷݷݑݑđđđđđđ\u0012\u0005\u0005\u0001\u0004ؘА\rãǎ櫆<)\u0004\tǍ͗͗͗͗͗͗͗͗Ԁđđđđđr<3ĀݷݷݷݷݷݷݷݷݑݑđđđđđĐĐĐĐĐĐĐĕЀĐĐĐĐĐĐĐĕЀĐĐĐĐĐĐđĐĐĐĐĐĐĐĕЀĐĐĐĐĐĐĐĕЀĐĐĐĐĐ櫆\u0012\u0013\u0010\u0012\u0013\u000eǍ͗͗͗͗͗͗͗͗ԀĐфффĐфффĀݷݷݷݷݷݷݷݷݑݑ܀܀櫆Ǎ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗ԀĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑ݀櫆櫆櫆"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.PR2",
    "content": "Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅ\u001c✇߿݀Ϗ\u0014ՁĂ\u001cđđđđđđđđđ篟Āݷݷݷݷݷݷݷݷݑݑđđđđđđ\u0014\u001c\u0001ϗ櫆\u0014\u001cՑđđđđĐĐ\u0001˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅ\u0016\u0004ճ߿Ο݀\u0013ΎΎ\u0007ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ\u0014\t\u0006櫆\u0014\u001cՑđđđ񴱜͇˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅ\u001c✇߿݀\u0014ՁĂ\u001cđđđđđđđđđ篟Āݷݷݷݷݷݷݷݷݑݑđđđđđđ\u0014\u001c\u0001ϗ櫆\u0014\u001cՑđđđđĐĐ\u0001˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅ\u0016\u0004ճ߿Ο݀\u0013ΎΎ\u0007ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ\u0014\t\u0006櫆ɇ\u0007\u0004\u0012Ցđđđ񴱜͇˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđ\u000eꠀ\u0005\u0001\u0011߿݀\u0004\u0004\u0006ښ\b\u0006\u0012đđđđđđđđđđĀݷݷݷݷݷݷݷݷݑݑđđđ\u0014\t櫆\u0013\u001cՑđđđđđđđđđđđđǍ͗͗͗͗͗͗͗͗Ԁđđā\u0006\f\u0019\u0001݀\u0013니\u0014đđđđđđđđđđđĐĀݷݷݷݷݷݷݷݷݑݑđđđ\u0004\u0004\u0004\u0004\u0004\u0015Ǘ櫆\u0001\u0001\u0015\u001cՑđđđđĐĐ⌹˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅ\u0016\u0004ճ߿Ο݀\u0013ΎΎ\u0007ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđ\u0013\t\u0006櫆\u0013\u001cՑđđđ񴱜͇˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0013ȅ\u001c✇߿݀\u0014ՁĂ\u001cđđđđđđđđđ篟ĀݷݷݷݷݷݷݷݷݑݑđđŔđđ\u0014\u001c\u0001ϗ櫆\u0014\u001cՑđđđđĐĐ\u0001˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅ\u0016\u0004ճ߿Ο݀\u0013ΎΎ\u0007ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ\u0014\t\u0006櫆\u0014\u001cՑđđđ񴱜͇˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014Ά\u001e✇߿݀,\u0004\u0004ۼ͑篟\u0004ĀݷݷݷݷݷݷݷݷݑݑđđĐđ)\u0004\u0004ᆛ⣦⣦\u0001ϗ櫆&\u0004Íٱٱٱ\u0001ʜ\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.PRINC2",
    "content": "ҐբȢՉբݷ\u0007\u0004ճ߿Οđđ}ۏۏۏۏۏۏՈբزՈ∢բȒՈ݀đđĪđđđđđđđȓƐđđđđ䱤đđđȓƑđđđĪ\rՑđđđ񴱜͇˝\u0001　բՄآȒՈբ\r߿đđđđđđđĐƑđđĐĪĐĐĐđđĪđđđđ̛Ɛđđ𞴐͙͙͙\u000bđđđđđđđđđđՈȢ\u0007РՈ̔Չ΋ㆍāĐ\u000b̙ȪƐđđđđđđĐđр\u0001\u0005\u0004\u0001\rՑđđđđđđđđđđđđբڢāܑ݀\r\u0001đđđđđđđđՕũőđđđđ̙đĪ߶\rđđđđđđđđđđđĐբ\u0004ёŝԈֈȒզݕ՝\rǗđđđđđđđʀԕōĐđ컀\rՑđđđđĐĐ⌹˝ՈՀԪՀ\u0004Ս\u0005\u0004Ԕ\u0004՘̀\u0007\u0004ճ߿Ο'\u0001\u0018\u0001\u0001\t\u0001%\u0005ۏۏۏۏۏۏբՀ֪Հ\bիڂբ\u0007\u0001\u0007\u0004Օݝɤȍ\u0005đđđđʫꀪ\u0004Ҫ\u000eե\u0004Ɉꊪݷ\rՑđđđ񴱜͇˝\u0001　Ո֪ՀЀШ\u0007Ĕ\u0004\u0004\u0006\t\tՔԹ픀\r߿đđĪđđĐĐĀꨀ\u0004\u0004Ģ%򪳦ʓӆ\rđđđđđđđđđđ˪\u0004\u0004ܖ$ݗ\rđđđđđāāđđđđđĪđ\u0006\u0005\u0007ݕٳړԗ՗\rՑđđđđđđđđđđđđՈȥբդ\u0015\u0004זсֿջ\r\u0001đđĪđđđđĉ̩đƒƒʈ訠ģ\u0004\u0004\u0004\u0004\u0007ګݷ\rđđđđđđđđđđđĐբ\u0006Օ􀀁ۑֻԕő\rǗđđđʚʓȉ̡đđđđĀ\f̪ƈūã\rՑđđđđĐĐ⌹˝ȤԢբՈ\u0007ݷճٳ՗\u0007\u0004ճ߿ΟđđĪy\u0005ۏۏۏۏۏۏբՈŕ\bՕÈХ兖\u0005đđđđđđĩđđđđĪĒ̡РիȠ좊\rՑđđđ񴱜͇˝\u0001　Ո҈\u0004˩ҢԀ݀\r߿đđĪĐđđđĐƓȉđĒđđđĐ\u0007\u0004Շ؈؈Ȉȉȁȉȁ\rđđđđđđđđđđؑȢՕĄĀժÍĀϏώșܖݗݗݗ\rđđĒª̡đđđđđđđĐ\u0007ʪʨ졊Ȍ\rՑđđđđđđđđđđđđȢբ҈Ր\u0006ը譤ט\u0007\r\u0001đđđđĪđĐꊈ\u0001\u0001\u0001\u0004\rđđđđđđđđđđđĐՈɡȢ䌼〄\u0004Օ\u0006ЇЁ\u0004\u0004\u0001\rǗđđđĪđđđđȉʒ\u0004Ĩ\bږ⠢\rՑđđđđĐĐ⌹˝բ׎ՕׄĐٙܐްҐؐėųճճձ\u0007\u0004ճ߿ΟđĒy\u0005ۏۏۏۏۏۏՔ∢բ՝\u0005đđđĪđđđđđΚđđđĒʨ‎΋΋΋\rՑđđđ񴱜͇˝\u0001　΋΋΋\rՑđđđ񴱜͇˝\u0001　"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.PRINC4",
    "content": "Ȓ\u0005\u0001\u0004ȢՉG\u0004ճ߿Οđđđȓ\u0001\u0005ۏۏۏۏۏۏ∢բزՈ∢բȒDđđđđđđđĪđđƐđđđđ䱤đđđȓƑđđđOՑđđđ񴱜͇˝\u0001　բՄآȒՈO߿đđđđđđđđƑđđđĩđđĐđđĪđđđđ̛ƐđOđđđđđđđđđđՈȢРȒNđđđ̙ĪđđđĐʑđđđđđđđđđđđđđđĐNՑđđđđđđđđđđđđڢO\u0001đđđđđđđđՕũőđđđđġ̙OđđđđđđđđđđđĐՈ\u0004ёŝԈOǗđđđđđđđĪđĪʀԕōOՑđđđđĐĐ⌹˝բ\u0004ׇՍ\u0005\u0004ԔG\u0004ճ߿Οđđđđđđđ\u0005ۏۏۏۏۏۏ螼\u0006\t\u0007\u0004(ƒƒƒƐĐĪĐꀪ\u0004Ҫ\u000eե\u00043Ցđđđ񴱜͇˝\u0001　ЀШ\u0007Ĕ\u0004\u0004\u0006\t;߿đđđđđđđđꨀ\u0004\u0004ĢđđđđNđđđđđđđđđđՈ˪\u0004\u0004ܖNđđđđđđđĪđāđđđđđĪđǇǇÃ\u0005\u00075ՑđđđđđđđđđđđđբȥբԤ\u0015\u0004זс4\u0001đđđđđđđđ̩đƒƒʉ졄đđđģ\u0004\u0004\u0004\u00049đđđđđđđđđđđĐՉȢ\u0006ՕHǗđĐƒȉ̡đıđđđđđđđđđĀ\fHՑđđđđĐĐ⌹˝ȢբףՈ\u0007@\u0004ճ߿Οđđđđđđđ\u0005ۏۏۏۏۏۏ\u0001ŕ\u0006Օ\u00048đđđđđđđĪđđĪĒ̡РիȠ좊\u0012\t\b\u001aՑđđđ񴱜͇˝\u0001　բ҈\u0004˩Ң\u0010\u0018߿đđđđđđđƓȉđĒđđđĐ\u0007\u0004Շ\fđđ܎\u0018ԅđđđđđđđ∢ՕĄĀժ\u00116đđđĒȉđĪđđđđđĐ\u0007ʪȠ\u000b\u0017ԕđđđđđđđđĕ∢բՐ\u0006ը譤\fԔ\u0001\u0006\u0019\u0001đđđđđđđđꊈ\u0001\u0001\nф߇\u0004ﯧ\u0004\u0006\u001aЅđđđđēՈ䌼〄\u0004Օ\u0010>ǗđđđđđđđĪđĉʒ\u0004Ĩ\u0005\u0003ؔ\n\u0005>Ѕ⌹˝գА\n\u0004\u00179\n\u0005߿ΟđđđđđĐ\u0005ۏۏۏۏۏۏȢՈ∂\u0018\u0004\u00070đđĒȡđđĪđđΚđđđĒʨ\u0016А\u000eJđĐđđđđđđāđđĀ"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.PRINC5",
    "content": "Ȓ\u0005\u0001\u0004ȢՉ\u0015ЉР+\u0004ճ߿Οđđđȓ\u0001Ձտ\u0005ۏۏۏۏۏۏ∢բزՈ∢բȒ\u0015(đđđđđđđĪđđƐđđđđ䱤đđđȓƑđđđ\u00153Ցđđđ񤱜͇˝\u0001　բՄآȒՈ\u0010 ߿đđđđđđđđƑđđđĩđđĐđđĪđđđđ̛Ɛđ\u0015с΀3đđđđđđđđđđՈȢРȒ\u00143đđđ̙ĪđđđĐʑđđđđđđđđđđđđđđĐ\u00143Ցđđđđđđđđđđđđڢ\u0015ЉР\t\u0001đđđđđđđđՕũőđđđđġ̙\u0015Ձ\tܑđđđđđđĐՈ\u0004ёŝԈ\u0015\t̬̬̬̬̬ܺ∢ǗđđđđđđđĪđĪʀԕō\u00153ՑđđđđĐĐ⌹˝բ\u0004ׇՍ\u0005\u0004Ԕ\u0015ЉР+\u0004ճ߿Οđđđđđđđ￯\u0005ۏۏۏۏۏۏ螼\u0006\t\u0007\u0004&ƒƒƒƐĐĪĐꀪ\u0004Ҫ\u000eե\u00041Ցđđđ񴱜͇˝\u0001　ЀШ\u0007Ĕ\u0004\u0004\u0006\t2߿đđđđđđđđꨀ\u0004\u0004Ģđđđđ\u0014Մ\tńņđđđđđđđđՈ˪\u0004\u0004ܖ\u0014\tđđđđđđđĪđāđđđđđĪđǇǇÃ\u0005\u0007Ԁ̅\t\u0002֦֎֦֎֦֎֦֎֦֎߮ݜđđđđđđđđđբȥբԤ\u0015\u0004זЀ4\u0001đđđđđđđđ̩đƒƒʉ졄đđđģ\u0004\u0004\u0004\u00043đđđđđđđđđđđĐՉȢ\u0006Օ\u000e3ǗđĐƒȉ̡đıđđđđđđđđđĀ\f\tֆƆ֎\u0004 ՑđđđđĐĐ⌹˝ȢբףՈ\u0007\u000eçÀ\r\u001d\u0004ճ߿Οđđđđđđđ\u0005ۏۏۏۏۏۏ\u0001ŕ\u0006Օ\u00048đđđđđđđĪđđĪĒ̡РիȠ좊\u0012\t\b\u001aՑđđđ񴱜͇˝\u0001　բ҈\u0004˩Ң\u0010\u0018߿đđđđđđđƓȉđĒđđđĐ\u0007\u0004Շ\fđđ܎\u0018ԅđđđđđđđ∢ՕĄĀժ\u00116đđđĒȉđĪđđđđđĐ\u0007ʪȠ\u000b\u0017ԕđđđđđđđđĕ∢բՐ\u0006ը譤\fԔ\u0001\u0006\u0019\u0001đđđđđđđđꊈ\u0001\u0001\nф߇\u0004ﯧ\u0004\u0006\u001aЅđđđđēՈ䌼〄\u0004Օ\u0010>ǗđđđđđđđĪđĉʒ\u0004Ĩ\u0005\u0003ؔ\n\u0005>Ѕ⌹˝գА\n\u0004\u00179\n\u0005߿ΟđđđđđĐ\u0005ۏۏۏۏۏۏȢՈ∂\u0018\u0004\u00070đđĒȡđđĪđđΚđđđĒʨ\u0016А\u000eJđĐđđđđđđāđđĀ"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.PRINC6",
    "content": "Ȓ\u0005\u0001\u0004ȢՉЉР\u001dճ߿Οđđđȓ\u0001Ձտ\u0005ۏۏۏۏۏۏ∢բزՈ∢բȒ<đđđđđđđĪđđƐđđđđ䱤đđđȓƑđđđĀA𰰜͇˝\u0001　բՄآȒՈЉРAЉР߿đđđđđđđđƑđđđĩđđĐđđĪđđđđ̛ƐđՁAՁՀđđđđđđđđՈȢРȒAđđđ̙ĪđđđĐʑđđđđđđđđđđđđđđĐAՀđđđđđđđđđđđđڢЉР\u001d⡢䨰脊\u0001đđđđđđđđՕũőđđđđġ̙Ձ\u001dܑđđđđđđđƇՈ\u0004ёŝԈ\u001d̬̬̬̬̬ܺ∢ǗđđđđđđđĪđĪʀԕōAՀđđđđđĐŐđÖع⌹˝բ\u0004ׇՍ\u0005\u0004Ԕ\u0004ЉР?ճ߿Οđđđđđđđ￯\u0005ۏۏۏۏۏۏ螼\u0006\t\u0007\u0005&ƒƒƒƐĐĪĐꀪ\u0004Ҫ\fՕ\u0004\u0001+āāᠠ͇˝\u0001　ЀШ\u0007Ĕ\u0004\u0004Ą\t5ЈР߿đđđđđđđđꨀ\u0004\u0004ĢđđđđՄ\u001dБԘņđđđđđđđđՈ˪\u0004\u0004ܖ\u001dđđđđđđđĪđāđđđđđĪđǇǇÃՁͅ\u0005\u000b\u0002֦֎֦֎֦֎֦֎֦֎߮ݜđđđđđđđđđբȥբԤ\u0015\u0004זс.ЈР\u0001đđđđđđđđ̩đƒƒʉ졄đđđģ\u0004Հ\u00043ՀՀđđđđđđđđđđĐՉȢ\u0006ՕAЈРǗđĐƒȉ̡đıđđđđđđđđđĀ\fAՐĨՀđđđđĐĐ⌹˝ȢբףՈ\u0007?\u0004ճ߿Οđđđđđđđ\u0005ۏۏۏۏۏۏ\u0001ŕ\u0006Օ\u00048đđđđđđđĪđđĪĒ̡РիȠ좊\u0012\t\b\u001aՑđđđ񴱜͇˝\u0001　բ҈\u0004˩Ң\u0010\u0018߿đđđđđđđƓȉđĒđđđĐ\u0007\u0004Շ\fđđ܎\u0018ԅđđđđđđđ∢ՕĄĀժ\u00116đđđĒȉđĪđđđđđĐ\u0007ʪȠ\u000b\u0017ԕđđđđđđđđĕ∢բՐ\u0006ը譤\fԔ\u0001\u0006\u0019\u0001đđđđđđđđꊈ\u0001\u0001\nф߇\u0004ﯧ\u0004\u0006\u001aЅđđđĀՈ䌼〄\u0004Օ\u0010>ǗđđđđđđđĪđĉʒ\u0004Ĩ\u0005\u0003ؔ\n\u0005>⌹˝գА\n\u0004\u00179\n\u0005߿ΟđđđđđĐ\u0005ۏۏۏۏۏۏȢՈ∂\u0018\u0004\u00070đđĒȡđđĪđđΚđđđĒʨ\u0016А\u000eJđĐđđđđđđāđđĀ"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.PROOM",
    "content": "%đđđđđ\u0014ȅ@✇߿&\u0014ՁĂ@đđđđđđđđđ篟&đđđđđđ\u0014@\u0001ϗ&\u0014@ՑđđđđĐĐ\u0001˝&đđđđđ\u0014ȅ:\u0004ճ߿Ο&\u0013ΎΎ\u0007*ۏۏۏۏۏۏ%đđđđđđ\u00145%\u0014@Ցđđđ񴱜͇˝\u0001　&ŐŐŐŐŐŐ\u0014ȅ@✇߿&\u0014ՁĂ@đđđđđđđđđ篟&фффффф\u0014@\u0001ϗ&\u0014@ՑđđđđĐĐ\u0001˝&đđđđđ\u0014ȅ:\u0004ճ߿Ο&\n\bΎΎ\u0007*ۏۏۏۏۏۏ%ݔ\u00145%ɇ\u0007\u00047Ցđđđ񴱜͇˝\u0001　&đđ\u000eꠀ\u00057߿&\u0004\u0004\u0006ښ\b\u00067đđđđđđđđđđ&đđđ[&ZՑđđđđđđđđđđđđ&đđā\u0006\f=\u0001&\u0013니8đđđđđđđđđđđĐ&ŐŐđ\u0004\u0004\u0004\u0004\u00049Ǘ&\u0013@ՑđđđđĐĐ⌹˝&đđđđđđ\u0013ȅ:\u0004ճ߿Ο&\u0004\bΎΎ\u0007*ۏۏۏۏۏۏ%đфđ\u00135%\t\n@Ցđđđ񴱜͇˝\u0001　&đđđđđ\u0006\u0006꿅ȅ@߿&\u0006Ă@đđđđđđđđđđ&đđŔđđ\u0006\u0006@&\n\n\n@Ցđđđđđđđđđđđđ&\n\n\nȅ@\u0001&\n\n\nΎ\u00078đđđđđđđđđđđĐ&\n\n\n@Ǘ&\n\n\n@ՑđđđđĐĐ⌹˝&\n\n\nΆ\u00073\u0004ճ߿Ο&\n\n\b\u000b*ۏۏۏۏۏۏ%\n\n\u0005\u0004\u000b.%\n\n\b\u000b9Ցđđđ񴱜͇˝\u0001　\u0005\u0006\u0004\u0001\u0001\u0001\u0019đđđđđđđđđđđĐĀݷݷݷݷݷݷݷݷݑݑđđđėÚ\t\u001cǗ櫆Ȣ\u0014\u001cՑđđđđĐĐ⌹˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅ\u0016\u0004ճ߿Ο݀\u0013ΎΎ\u0007ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđ\u0013\t\u0006櫆\u0013\u001cՑđđđ񴱜͇˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0013ȅ\u001c✇߿݀\u0014ՁĂ\u001cđđđđđđđđđ篟ĀݷݷݷݷݷݷݷݷݑݑđđŔđđ\u0014\u001c\u0001ϗ櫆\u0014\u001cՑđđđđĐĐ\u0001˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅ\u0016\u0004ճ߿Ο݀\u0013ΎΎ\u0007ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ\u0014\t\u0006櫆\u0014\u001cՑđđđ񴱜͇˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014Ά\u001e✇߿݀,\u0004\u0004ۼ͑篟\u0004ĀݷݷݷݷݷݷݷݷݑݑđđĐđ)\u0004\u0004ᆛ⣦⣦\u0001ϗ櫆&\u0004Íٱٱٱ\u0001ʜ\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.PSKETCHES",
    "content": "Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ8✇߿݀Ϗ8đđđđđđđđ篟Āݷݷݷݷݷݷݷݷݑݑđđđđđđ9\u0001ϗ櫆8đđđđĐĐ\u0001˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ8ճ߿Ο݀\u000e*ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфĐĐ8櫆\u0004\u0012\u001eՑđđđ񴱜͇˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđ\u0004\u0004\u0006\t\u001b✇߿݀\u000eՁ\u0004\u0011đđđđđđđđđ篟Āݷݷݷݷݷݷݷݷݑݑđđđ\u0007\u0007\u0004\u0011\u0001ϗ櫆\u0014\u001cՑđđđđĐĐ\u0001˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅ\u0016\u0004ճ߿Ο݀\u0013ΎΎ\u0007ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ\u0014\t\u0006櫆\u0004˫ߏ\u0013Ցđđđ񴱜͇˝\u0001　Ǎ͗͗͗͗͗͗͗͗ԀđđđфĀ\u000b\u0004\u0013߿݀\u0014ՁĂՀ\u0018đđđđđđđđđđĀݷݷݷݷݷݷݷݷݑݑđđđđđđ\u0006\u0001Ԕ\t櫆\b\u001cՑđđđđđđđđđđđđǍ͗͗͗͗͗͗͗͗Ԁđđ\u0004Ņ\u0019\u0001݀\u0005\u0006\u0004\u0001\u0001\u0001\u0019đđđđđđđđđđđĐĀݷݷݷݷݷݷݷݷݑݑđđđėÚ\t\u001cǗ櫆Ȣ\u0014\u001cՑđđđđĐĐ⌹˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅ\u0016\u0004ճ߿Ο݀\u0013ΎΎ\u0007ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфŐ\u0013\t\u0006櫆\u0018\u001cՑđđđ񴱜͇˝\u0001　Ǎ͗͗͗͗͗͗͗͗ԀđđćߟϏ\t\u0005\u0013✇߿݀\u0005\u0006\u0004\u0004\u0003\u0013đđđđđđđđđ篟ĀݷݷݷݷݷݷݷݷݑݑđđŔǐ\u0014ǂ\u001c\u0001ϗ櫆\u0014\u001cՑđđđđĐĐ\u0001˝Ǎ͗͗͗͗͗͗͗͗Ԁđđߏߏ\u0004\u0004\u0004\u0004\u0004\u000e\u0004ճ߿Ο݀\u0013\u0002Դ\u0002興\tۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđф\u0004\u0004\u0007\u000e櫆\u0014\u001cՑđđđ񴱜͇˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđ\u001f\u001e✇߿݀\u001f\u0012\u0004\u0004ۼ͑篟\u0004ĀݷݷݷݷݷݷݷݷݑݑđđĐ/\u0004\u0004ᆛ⣦⣦\u0001ϗ櫆&\u0004Íٱٱٱ\u0001ʜ\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001ٱٱ\u0001ʜ\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.Q",
    "content": "\u000f=\u0014\"đؐ\f/\u0005\u0004)\u0013\u0018Ȣ\u0006\u0005\b/\u000b\u0005)\u0013\u0006\u0018ő񸸘\u000b/\u0001\u0005)\u0013\t\u0018\b𰰰\u0005/=\u0014\"I=\u0012\u0018I=\u0012憆\u0006\u0018\u0005Óǖ\t/<\u0012\t\u0018Ë\u0005\n/=\u0014\"đؐ\f.=\u0011\u0018⸺\u0007\u0005\b.=\u0011憆\u0006\u0018ő񹸘\f.<̌\u0011\t\u0018\b𰰰\u0005.=\u0014\"I=\u0004\u0010\u0004\u0018I!\u0010\u0004\u0006\u0018\u0005őÒ\u00067\u0005%\u0006̌\u0010\t\u0018ˣ\u00077=\u0014\"đÒđ\b6\u0007\u00043\u0004\u000f\u0004\u0018\u00076\u0004\u00043\u000f\u0004\u0018őИ\t6\u00043̌\u000f\u0007\u0018\u0005\u0005\u00056=\u0014\"I\b\u00041\u0004\u000e\u0004\u0018I\u0006\u00041\u000e\u0004\u0018\u0005đđ>\u00041̌\u000e\u0007\u0018>=\u0014\u001fĐđđđ>'\f\u0007\u0004\r\u001f>$đ\f\u0007憆\r\u001fđ\u0005> \f\u0007̌\r\u001fࠠ\u0007>=\u0014\u001fI=\u0004\f\u001f\t<=憆\f\u001f\u0004đđ<:̌\f\u001f\u0005<=\u0014\u001fבđѷݑ<=\u0004\n\u001f踠<9\u0005\n\u001f𝗝đđ\u0004<9\b\n\u001f\u0005<=\u0014\"đđđđĐ=\f/\n\"=đ\f/\u0006\n\u0005Óǖ\u0007\nđĐ\u0006=\f/\t\nË\n\n\n.ꀀ݀ݗđđđđđ\u0014ȅ\u0015,\u0004ۏۏۏۏۏۏﻈ\u0014҂Ă\u0015đđĐđ)\u0004\u0004đđđđǑđ\u0006ǧǇ\r3Ցđđ1\u0001\u0001\u0002\u0004\r{ꗝđđđđđĀ\u0001\u0004Аȅ\u0015\u0013ՁĂ8ՁĂ\u0015\nЁ̂Д\u0013đđĐđđ\u00138\u0015đđđđđ\u0011\u0014\u00138\u0015\u0014\u0015đđđđđ\u0013ȅ8ȅ\u0015đđđđđ\u0014ȅ\u0015\u0014ՁĂ!\u0014ՁĂ\u0015\u0014ՁĂ\u0015đđŔđ×\u000b\u0011\u0005đ×\u000b\u0011đđđđđ×\u000b\u0011݀\n\u0010\n\u0010\n\u0010đđđđđ\u0014ȅ\u0015đđđđđ\u0014ȅ\u0015đđđđđ\u0014ȅ\u0015\u0013ΎΎ\u0007\u0013ΎΎ\u0007\u0013ΎΎ\u0007đфđđ\u0014\t\u0006đфđđ\u0014\t\u0006đфđđ\u0014\t\u0006\u0014\u0015\u0014\u0015\u0014\u0015đđđđđ\u0014ȅ\u0015đÍ۟ߏÑŁ\u0012Ȅ\u0015đđđđđ\u0014Ȅ\u0018\u0014ՁĂ\u0015\u0003𢈢đđđđđ×\u000b\u0011đđĐđđđđđđŔđđđđđđđĐđđđđđđŔđđđđđđđ\n\u0010đđđđđ\u0014Ά\u0015Ǎ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗Ԁ\u0004!߿߿߻ԔфƗ\u0004\u0004\u0004\u0004\u0004ƆĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑ݊̌̌̌̌̌̌櫆櫆8"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.RIM",
    "content": "đđđđđQVQVđđđđđđQЈРVQՐĨV旝đđđđđQVQՄVđđđđđđQVQՁĂV旝đđđđđQV\u0012VđđĐđđđđđđŔđđđđđđđŔ\u0005\u0004\u0004ӋӣK\u0004Őđ\u000b\u0005V\u0004\u0001Ǎ͗͗͗͗͗͗͗͗Ԁ\u0005\u0004\u0005P\u0004\u0004\u000b\u0005\u000bE\u0004\fĀݷݷݷݷݷݷݷݷݑݑ݈\u0001\u0005\u000b\u0001АԐА4\u0004\u0004\u0001櫆Đ\u0012ՁĂVǍ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0012#\u0005\u0005\u0005\u0005\u0005\u0004\u0012Ġ#ĨĨĂĨĂĨĂĨĂĨĂĀݷݷݷݷݷݷݷݷݑݑđđđđđđ\u0012ЈР#¢ň櫆\u0012ՑĨ#\u0004(\bǍ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0012#\u0005\u0005\u0005\u0005\u0005\u0005\u0006\u0012Ԅ#ŭŃĂŭŃĂŭłĨĂĀݷݷݷݷݷݷݷݷݑݑđđđ\u0001\u0004\t\u0018ãǎ櫆\u0005\u000b\u0018)\u0004\tǍ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0012#\u0005\u0005\u0005\u0005\u0005\u0005\u0006\u0012\u0005\u001dĨĂūłĨĂūłĨĂūłĀݷݷݷݷݷݷݷݷݑݑđđđđđđ\u0012ؘغ\u0001\u0004ؘА\rգգãקǎ櫆\u0012ՐĨ#)\u0004\tǍ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0012Y\u0012Մ#3ĀݷݷݷݷݷݷݷݷݑݑđđđđđĐĐĐĐĐĐĐĕЀĐĐĐĐĐĕЀĐĐĐĐĐĐđĐĐĐĐĐĐĐĕЀĐĐĐĐĐĐĐĕЀĐĐĐĐĐ櫆\u0012\u0013\u0010\u0012\u0013\u000eǍ͗͗͗͗͗͗͗͗ԀĐфффĐфффĀݷݷݷݷݷݷݷݷݑݑ܀܀櫆Ǎ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗ԀĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑ݀櫆櫆櫆"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.ROW",
    "content": "?đđđđđ\u0014ȅ\u0014ՁĂđđđđđđ\u0014\u0014đđđđđ\u0014ȅ\u0014ՁĂՀ\u000bđđđđđđ\u0012\u0001ԜЀ\u0014đđđđđ\u0014ȅ\u0014ՁĂđđđđđđ\u0014\u0014đđđđđ\u0014ȅ\u0014ՁĂđđđđđđ\u0014\u0014đđđđđ\u0014ȅ\u0014҂ĂđđđđǑđ\u0006ǧǇ\u0001\u0001\u0002\u0004đđđđđĀ\u0001\u0004Аȅ\nЁ̂Дđđđđđ\u0011\u0014Xđđđđđ\u0013ȅ\u0015בđđđđđ\u0014ȅX\u0014ՁĂ\u0015\u0014ՁĂXđđŔđ×\u000b\u0011đđđđđ×\u000b\u0011D\n\u0010\n\u0010Cđđđđđ\u0014ȅ\u0015đđđđđ\u0014ȅW\u0013ΎΎ\u0007\u0013ΎΎ\u0007Cđфđđ\u0014\t\u0006đфđđ\u0014\t\u0006D\u0014\u0015\u0014Wđđđđđ\u0014ȅ\u0015đđđđđ\u0014ȄW\u0014ՁĂ\u0015đđđđđ×\u000b\u0011đđĐđđđđđđŔđđđđđđđđđĐđđđđđđŔđđđđđđđ\n\u0010đđđđđ\u0014Ά\u0015Ǎ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗Ԁ\u0004!߿߿߻ԔфƗ\u0004\u0004\u0004\u0004\u0004ƆĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑ݊̌̌̌̌̌̌櫆櫆"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.ROW10",
    "content": "?đđđđđ\u0014ȅ/׻\u0001͗͗͗͗͗͗͗͗͗ݷ?\u0014ՁĂ1ݾ?đđđđđđ\u00140߿݀ݑ?\u0014+Ǻ߯ջ?đđđđđ\u0014ȅ\u0016\u0007ֺ̚\u0001ֺ\u0001Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0013ΎΎ\u0007\u0004?đфđđ\u0014\t\u0005\u0004݀ݑ?\u0014)ఘ߯ջ?đđđđđ\u0014ȅ/׻\u0001Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0014ՁĂ1ݾ?đđđđđđ\u00140߿݀ݑ?\u0014+Ǻ߯ջ?đđđđđ\u0014ȅ\u0016\u0007ֺ̚\u0001ֺ\u0001Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0013ΎΎ\u0007\u0004?đфđđ\u0014\t\u0005\u0004݄ݑ?\u0014)ఘ߯ջ?đđđđđ\u0014ȅ/׻\u0001Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0014҂Ă1ݾ?đđđđǑđ\u0006ǧǇ(߿݀ݑ?\u0001\u0001\u0002\u0004#Ǻ߯ջ?đđđđđĀ\u0001\u0004Аȅ\u0016\u0007ֺ̚\u0001ֺ\u0001Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0005\fΎΎ\u0007\u0004?đфđđ\u0014\t\u0005\u0004݀ݑ?\u0014)ఘ߯ջ怗đđđđđ\u0013ȅ\u0015đđđđđ\u0014ȅ/׻\u0001Ǎ͗͗͗͗͗͗͗͗Ԁ\u0014ՁĂ\u0015\u0014ՁĂ1ݾđđŔđ×\u000b\u0011đđđđđđ\u00140߿݀ݑ݀\n\u0010\u0014+Ǻ߯ջ旝đđđđđ\u0014ȅ\u0015đđđđđ\u0014ȅ\u0016\u0007ֺ̚\u0001ֺ\u0001Ǎ͗͗͗͗͗͗͗͗Ԁ\u0013ΎΎ\u0007\u0013ΎΎ\u0007\u0004đфđđ\u0014\t\u0006đфđđ\u0014\t\u0005\u0004݀ݑ\u0014\u0015\u0014<旝đđđđđ\u0014ȅ\u0015đđđđđ\u0014Ȅ?Ǎ͗͗͗͗͗͗͗͗Ԁ\u0014ՁĂ\u0015đđđđđ×\u000b\u0011đđĐđđđđđđŔđđđđđđđđđĐđđđđđđŔݑ\n\u0010搙đđđđđ\u0014Ά\u0015Ǎ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗Ԁ\u0004!߿߿߻ԔфƗ\u0004\u0004\u0004\u0004\u0004ƆĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑ݊̌̌̌̌̌̌櫆櫆"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.ROW11",
    "content": "?đđđđđ\u0014ȅ/׻\u0001͗͗͗͗͗͗͗͗͗ݷ?\u0014ՁĂ1ݾ?đđđđđđ\u00140߿݀ݑ?\u0014+Ǻ߯ջ?đđđđđ\u0014ȅ\u0016\u0007ֺ̚\u0001ֺ\u0001Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0013ΎΎ\u0007\u0004?đфđđ\u0014\t\u0005\u0004݀ݑ?\u0014)ఘ߯ջ?đđđđđ\u0014ȅ/׻\u0001Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0014ՁĂ1ݾ?đđđđđđ\u00140߿݀ݑ?\u0014+Ǻ߯ջ?đđđđđ\u0014ȅ\u0016\u0007ֺ̚\u0001ֺ\u0001Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0013ΎΎ\u0007\u0004?đфđđ\u0014\t\u0005\u0004݀ݑ?\u0014)ఘ߯ջ?đđđđđ\u0014ȅ/׻\u0001Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0014҂Ă1ݾ?đđđđǑđ\u0006ǧǇ(߿݀ݑ?\u0001\u0001\u0002\u0004#Ǻ߯ջ?đđđđđĀ\u0001\u0004Аȅ\u0016\u0007ֺ̚\u0001ֺ\u0001Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0005\fΎΎ\u0007\u0004?đфđđ\u0014\t\u0005\u0004݀ݑ?\u0014)ఘ߯߀怗đđđđđ\u0013ȅ\u0015đđđđđ\u0014ȅ/׻\u0001Ǎ͗͗͗͗͗͗͗͗Ԁ\u0014ՁĂ\u0015\u0014ՁĂ1ݾđđŔđ×\u000b\u0011đđđđđđ\u00140߿݀ݑ݀\n\u0010\u0014+Ǻ߯ջ旝đđđđđ\u0014ȅ\u0015đđđđđ\u0014ȅ\u0016\u0007ֺ̚\u0001ֺ\u0001Ǎ͗͗͗͗͗͗͗͗Ԁ\u0013ΎΎ\u0007\u0013ΎΎ\u0007\u0004đфđđ\u0014\t\u0006đфđđ\u0014\t\u0005\u0004݀ݑ\u0014\u0015\u0014<旝đđđđđ\u0014ȅ\u0015đđđđđ\u0014Ȅ?Ǎ͗͗͗͗͗͗͗͗Ԁ\u0014ՁĂ\u0015đđđđđ×\u000b\u0011đđĐđđđđđđŔđđđđđđđđđĐđđđđđđŔݑ\n\u0010搙đđđđđ\u0014Ά\u0015Ǎ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗Ԁ\u0004!߿߿߻ԔфƗ\u0004\u0004\u0004\u0004\u0004ƆĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑ݊̌̌̌̌̌̌櫆櫆"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.ROW12",
    "content": "?đđđđđ\u0014ȅ\r׻\u0001͗͗͗͗͗͗͗͗͗ݷ?\u0014ՁĂ\rđđđđđđđđđđđđđđđđđݾ?đđđđđđ\u0014\r߿݀ݑ?\u0014\rđđđđđđđđđĐĐĐĐǺ߯ջ?đđđđđ\u0014ȅ\r\u0007ֺ̚\u0001ֺ\u0001Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0013ΎΎ\u0007ʎ\u0004?đфđđ\u0014\t݀ݑ?\u0014\rđđđđđđđđđđđđđ߯ջ?đđđđđ\u0014ȅ\r׻\u0001Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0014ՁĂ\rđđđđđđđđđđđđđđđđđݾ?đđđđđđ\u0014\r߿݀ݑ?\u0014\rđđđđđđđđđĐĐĐĐǺ߯ջ?đđđđđ\u0014ȅ\r\u0007ֺ̚\u0001ֺ\u0001Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0013ΎΎ\u0007ʎ\u0004?đфđđ\u0014\t݀ݑ?\u0014\rđđđđđđđđđđđđđ߯ջ?đđđđđ\u0014ȅ\r׻\u0001Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0014҂Ă\rđđđđđđđđđđđđđđđđđݾ?đđđđǑđ\u0006ǧǇ\u0005߿݀ݑ?\u0001\u0001\u0002\u0004\u0005đđđđđđđđđĐĐĐĐǺ߯ջ?đđđđđĀ\u0001\u0004Аȅ\r\u0007ֺ̚\u0001ֺ\u0001Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0005\fΎΎ\u0007ʎ\u0004?đфđđ\u0014\t݀ݑ?\u0014Ցđđđđđđđđđđđđđđđđđđđ߯߀怗đđđđđ\u0013ȅ\u0015đđđđđ\u0014ȅ׻\u0001Ǎ͗͗͗͗͗͗͗͗Ԁ\u0014ՁĂ\u0015\u0014ՁĂđđđđđđđđđđđđđđđđđđđđđđđđݾđđŔđ×\u000b\u0011đđđđđđ\u0014߿݀ݑ݀\n\u0010\u0014ՑđđđđđđđđđđđđđđđĐĐĐĐǺ߯ջ旝đđđđđ\u0014ȅ\u0015đđđđđ\u0014ȅ\u0007ֺ̚\u0001ֺ\u0001Ǎ͗͗͗͗͗͗͗͗Ԁ\u0013ΎΎ\u0007\u0013ΎΎ\u0007ʎ\u0004đфđđ\u0014\t\u0006đфđđ\u0014\t\u0005\u0004݀ݑ\u0014\u0015\u0014<旝đđđđđ\u0014ȅ\u0015đđđđđ\u0014Ȅ?Ǎ͗͗͗͗͗͗͗͗Ԁ\u0014ՁĂ\u0015đđđđđ×\u000b\u0011đđĐđđđđđđŔđđđđđđđđđĐđđđđđđŔݑ\n\u0010搙đđđđđ\u0014Ά\u0015Ǎ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗Ԁ\u0004!߿߿߻ԔфƗ\u0004\u0004\u0004\u0004\u0004ƆĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑ݊̌̌̌̌̌̌櫆櫆"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.ROW13",
    "content": "?đđđđđ\u0014ȅ∏͗͗͗͗͗͗͗͗͗ݷ?\u0014ՁĂՑđđđđđđđđđđđđđđđđđđđđđđđ߯ջ?đđđđđđ\u0014\u0001׻\u0001ݑ?\u0014đđđđđđđđđđđđđđđđđđđĐĐݾ?đđđđđ\u0014ȅ\u0005ջ߿߿݀Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0013ΎΎΎΎΎΎʟߊΚÏ\u0004ۏۏۏۏۏۏϻ?đфđđ\u0014Ȣݑ?\u0014đđđđđđđđđđđđđđđđđđ񴱜ƻݾ?đđđđđ\u0014ȅ∏߿݀Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0014ՁĂՑđđđđđđđđđđđđđđđđđđđđđđđ߯?đđđđđđ\u0014\u0001׻\u0001ݑ?\u0014đđđđđđđđđđđđđđđđđđđĐĐݾ?đđđđđ\u0014ȅ\u0005ջ߿߿݀Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0013ΎΎΎΎΎΎʟߊΚÏ\u0004ۏۏۏۏۏۏϻ?đфđđ\u0014∢ݑ?\u0014đđđđđđđđđđđđđđđđđđ񴱜ƻݾ?đđđđđ\u0014ȅ∏߿݀Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0014҂ĂՑđđđđđđđđđđđđđđđđđđđđđđđ߯ջ?đđđđǑđ\u0006ǧǇ\u0001׻\u0001ݑ?\u0001\u0001\u0002đđđđđđđđđđđđđđđĐĐݾ?đđđđđĀ\u0001\u0004Аȅ\u0005ջ߿߿݀Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0005\fΎΎΎΎΎΎʟߊΚÏ\u0004ۏۏۏۏۏۏϻ?đфđđ\u0014Ȣݑ?\u0014đđđđđđđđđđđđđđđđđđ񴱜ƻݾ怗đđđđđ\u0013ȅ\u0015đđđđđ\u0014ȅ∏߿݀Ǎ͗͗͗͗͗͗͗͗Ԁ\u0014ՁĂ\u0015\u0014ՁĂՑđđđđđđđđđđđđđđđđđđđđđđđ߯đđŔđ×\u000b\u0011đđđđđđ\u0014\u0001׻\u0001ݑ݀\n\u0010\u0014đđđđđđđđđđđđđđđđđđđĐĐݾ旝đđđđđ\u0014ȅ\u0015đđđđđ\u0014ȅ\u0005ջ߿߿݀Ǎ͗͗͗͗͗͗͗͗Ԁ\u0013ΎΎ\u0007\u0013ΎΎΎΎΎΎʟߊΚÏ\u0004ۏۏۏۏۏۏϻđфđđ\u0014\t\u0006đфđđ\u0014∢ݑ\u0014\u0015\u0014đđđđđđđđđđđđđđđđđđ񴱜ƻݾ旝đđđđđ\u0014ȅ\u0015đđđđđ\u0014Ȅ?Ǎ͗͗͗͗͗͗͗͗Ԁ\u0014ՁĂ\u0015đđđđđ×\u000b\u0011đđĐđđđđđđŔđđđđđđđđđĐđđđđđđŔݑ\n\u0010搙đđđđđ\u0014Ά\u0015Ǎ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗Ԁ\u0004!߿߿߻ԔфƗ\u0004\u0004\u0004\u0004\u0004ƆĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑ݊̌̌̌̌̌̌櫆櫆\u0003"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.ROW14",
    "content": "?đđđđđ\u0014ȅ\u0015׻\u0001͗͗͗͗͗͗͗͗͗ݷ?\u0014ՁĂ\u0015đđđđđđđđđđđđđݾ?đđđđđđ\u0014\u0015߿݀ݑ?\u0014\u0015ՑđđđđĐĐĐĐǺ߯ջ?đđđđđ\u0014ȅ\u0015\u0007ֺ̚\u0001ֺ\u0001Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0013ΎΎ\u0007\u0004?đфđđ\u0014\t\u0005\u0004݀ݑ?\u0014\u0015Ցđđđđđđđđ߯߀?đđđđđ\u0014ȅ\u0015׻\u0001Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0014ՁĂ\u0015đđđđđđđđđđđđđݾ?đđđđđđ\u0014\u0015߿݀ݑ?\u0014\u0015ՑđđđđĐĐĐĐǺ߯ջ?đđđđđ\u0014ȅ\u0015\u0007ֺ̚\u0001ֺ\u0001Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0013ΎΎ\u0007\u0004?đфđđ\u0014\t\u0005\u0004݀ݑ?\u0014\u0015Ցđđđđđđđđ߯߀?đđđđđ\u0014ȅ\u0015׻\u0001Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0014҂Ă\u0015đđđđđđđđđđđđđݾ?đđđđǑđ\u0006ǧǇ\r߿݀ݑ?\u0001\u0001\u0002\u0004\rՑđđđđĐĐĐĐǺ߯ջ?đđđđđĀ\u0001\u0004Аȅ\u0015\u0007ֺ̚\u0001ֺ\u0001Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0005\fΎΎ\u0007\u0004?đфđđ\u0014\t\u0005\u0004݀ݑ?\u0014\u0015Ցđđđđđđđđ߯߀怗đđđđđ\u0013ȅ\u0015đđđđđ\u0014ȅ\u0015׻\u0001Ǎ͗͗͗͗͗͗͗͗Ԁ\u0014ՁĂ\u0015\u0014ՁĂ\u0015đđđđđđđđđđđđđݾđđŔđ×\u000b\u0011đđđđđđ\u0014\u0015߿݀ݑ݀\n\u0010\u0014\u0015ՑđđđđĐĐĐĐǺ߯ջ旝đđđđđ\u0014ȅ\u0015đđđđđ\u0014ȅ\u0015\u0007ֺ̚\u0001ֺ\u0001Ǎ͗͗͗͗͗͗͗͗Ԁ\u0013ΎΎ\u0007\u0013ΎΎ\u0007\u0004đфđđ\u0014\t\u0006đфđđ\u0014\t\u0005\u0004݀ݑ\u0014\u0015\u0014\u0015Ցđđđđđđđđ߯߀旝đđđđđ\u0014ȅ\u0015đđđđđ\u0014Ȅ\u0015׻\u0001Ǎ͗͗͗͗͗͗͗͗Ԁ\u0014ՁĂ\u0015đđđđđ×\u000b\u0011đđĐđđđđđđŔđđđđđđđđđĐđđđđđđŔݑ\n\u0010搙đđđđđ\u0014Ά\u0015Ǎ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗Ԁ\u0004!߿߿߻ԔфƗ\u0004\u0004\u0004\u0004\u0004ƆĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑ݊̌̌̌̌̌̌櫆櫆"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.ROW15",
    "content": "?đđđđđ\u0014ȅ\u0015͗͗͗͗͗͗͗͗͗ݷ?\u0014ՁĂ\u0015Ցđđđđđđđđđđđđ߯?đđđđđđ\u0014\u0015\u0001׻\u0001ݑ?\u0014\u0015đđđđđđđđĐĐݾ?đđđđđ\u0014ȅ\u0015\u0005ջ߿߿݀Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0013ΎΎ\u0007\u0004ۏۏۏۏۏۏϻ?đфđđ\u0014\t\u0005ݑ?\u0014\u0015đđđđđđđ񴱜ƻݾ?đđđđđ\u0014ȅ\u0015∏߿݀Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0014ՁĂ\u0015Ցđđđđđđđđđđđđ߯?đđđđđđ\u0014\u0015\u0001׻\u0001ݑ?\u0014\u0015đđđđđđđđĐĐݾ?đđđđđ\u0014ȅ\u0015\u0005ջ߿߿݀Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0013ΎΎ\u0007\u0004ۏۏۏۏۏۏϻ?đфđđ\u0014\t\u0005ݑ?\u0014\u0015đđđđđđđ񴱜ƻݾ?đđđđđ\u0014ȅ\u0015∏߿݀Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0014҂Ă\u0015Ցđđđđđđđđđđđđ߯?đđđđǑđ\u0006ǧǇ\r\u0001׻\u0001ݑ?\u0001\u0001\u0002\u0004\rđđđđđđđđĐĐݾ?đđđđđĀ\u0001\u0004Аȅ\u0015\u0005ջ߿߿݀Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0005\fΎΎ\u0007\u0004ۏۏۏۏۏۏϻ?đфđđ\u0014\t\u0005ݑ?\u0014\u0015đđđđđđđ񴱜ƻݾ怗đđđđđ\u0013ȅ\u0015đđđđđ\u0014ȅ\u0015∏߿݀Ǎ͗͗͗͗͗͗͗͗Ԁ\u0014ՁĂ\u0015\u0014ՁĂ\u0015Ցđđđđđđđđđđđđ߯đđŔđ×\u000b\u0011đđđđđđ\u0014\u0015\u0001׻\u0001ݑ݀\n\u0010\u0014\u0015đđđđđđđđĐĐݾ旝đđđđđ\u0014ȅ\u0015đđđđđ\u0014ȅ\u0015\u0005ջ߿߿݀Ǎ͗͗͗͗͗͗͗͗Ԁ\u0013ΎΎ\u0007\u0013ΎΎ\u0007\u0004ۏۏۏۏۏۏϻđфđđ\u0014\t\u0006đфđđ\u0014\t\u0005ݑ\u0014\u0015\u0014\u0015đđđđđđđ񴱜ƻݾ旝đđđđđ\u0014ȅ\u0015đđđđđ\u0014Ȅ\u0015∏߿݀Ǎ͗͗͗͗͗͗͗͗Ԁ\u0014ՁĂ\u0015ȂȂȂȂȂȂª⊢ꀻđđđđđ×\u000b\u0011đđĐđđđđđđŔđđđđđđđđđĐđđđđđđŔݑ\n\u0010搙đđđđđ\u0014Ά\u0015Ǎ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗Ԁ\u0004!߿߿߻ԔфƗ\u0004\u0004\u0004\u0004\u0004ƆĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑ݊̌̌̌̌̌̌櫆櫆"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.ROW16",
    "content": "?đđđđđ\u0014ȅ\u0015͗͗͗͗͗͗͗͗͗ݷ?\u0014ՁĂ\u0015Ցđđđđđđđđđđđđ߯?đđđđđđ\u0014\u0015\u0001׻\u0001ݑ?\u0014\u0015đđđđđđđđĐĐݾ?đđđđđ\u0014ȅ\u0015\u0005ջ߿߿݀Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0013ΎΎ\u0007ۏۏۏۏۏۏϻ?đфđđ\u0014\t\u0005ݑ?\u0014\u0015đđđđđđđ񴱜ƻݾ?đđđđđ\u0014ȅ\u0015∏߿݀Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0014ՁĂ\u0015Ցđđđđđđđđđđđđ߯?đđđđđđ\u0014\u0015\u0001׻\u0001ݑ?\u0014\u0015đđđđđđđđĐĐݾ?đđđđđ\u0014ȅ\u0015\u0005ջ߿߿݀Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0013ΎΎ\u0007ۏۏۏۏۏۏϻ?đфđđ\u0014\t\u0005ݑ?\u0014\u0015đđđđđđđ񴱜ƻݾ?đđđđđ\u0014ȅ\u0015∏߿݀Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0014҂Ă\u0015Ցđđđđđđđđđđđđ߯?đđđđǑđ\u0006ǧǇ\r\u0001׻\u0001ݑ?\u0001\u0001\u0002\u0004\rđđđđđđđđĐĐݾ?đđđđđĀ\u0001\u0004Аȅ\u0015\u0005ջ߿߿݀Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0005\fΎΎ\u0007ۏۏۏۏۏۏϻ?đфđđ\u0014\t\u0005ݑ?\u0014\u0015đđđđđđđ񴱜ƻݾ怗đđđđđ\u0013ȅ\u0015đđđđđ\u0014ȅ\u0015∏߿݀Ǎ͗͗͗͗͗͗͗͗Ԁ\u0014ՁĂ\u0015\u0014ՁĂ\u0015Ցđđđđđđđđđđđđ߯đđŔđ×\u000b\u0011đđđđđđ\u0014\u0015\u0001׻\u0001ݑ݀\n\u0010\u0014\u0015đđđđđđđđĐĐݾ旝đđđđđ\u0014ȅ\u0015đđđđđ\u0014ȅ\u0015\u0005ջ߿߿݀Ǎ͗͗͗͗͗͗͗͗Ԁ\u0013ΎΎ\u0007\u0013ΎΎ\u0007ۏۏۏۏۏۏϻđфđđ\u0014\t\u0006đфđđ\u0014\t\u0005ݑ\u0014\u0015\u0014\u0015đđđđđđđ񴱜ƻݾ旝đđđđđ\u0014ȅ\u0015đđđđđ\u0014Ȅ\u0015∏߿݀Ǎ͗͗͗͗͗͗͗͗Ԁ\u0014ՁĂ\u0015ȂȂȂȂȂȂª⊢ꀻđđđđđ×\u000b\u0011đđĐđđđđđđŔđđđđđđđđđĐđđđđđđŔݑ\n\u0010搙đđđđđ\u0014Ά\u0015Ǎ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗Ԁ\u0004!߿߿߻ԔфƗ\u0004\u0004\u0004\u0004\u0004ƆĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑ݊̌̌̌̌̌̌櫆櫆"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.ROW17",
    "content": "?đđđđđ\u0014ȅ\u001c∏߿݀͗͗͗͗͗͗͗͗͗ݷ?\u0014ՁĂ\u001cđđđđđđđđđ篟?đđđđđđ\u0014\u001c\u0001ϗݑ?\u0014\u001cՑđđđđĐĐ\u0001˝*\u0010đđđđđ\u0014ȅ\u001c\u0005ճ߿߿݀Ǎ͗͗͗͗͗͗͗͗Ԁ\u0017\u0004\r\u0001\u0007\u0001\n\u0013ΎΎ\u0007ۏۏۏۏۏ\u0017\u0004\tݾݾ\u0001߀đфđđ\u0014\t\u0005ݑ\u0017\u0004\t߿߿߿\u0014\u001cՑđđđ񴱜͆˝\u0001\u0017\u0004\u0004\u0004翟篟đđđđđ\u0014ȅ\u001c∏߿݀Ǎ͗͗͗͗͗͗͗͗Ԁ\u0017\u0004\tϗϗ\u0014ՁĂ\u001cđđđđđđđđđ篟\u0017\u0004\u0004\u0004\u0001˝\u0002˝\u0002đđđđđđ\u0014\u001c\u0001ϗݑ\u0017\u0004\u0004\u0004\u0001\u0014\u001cՑđđđđĐĐ\u0001˝\u0017\u0004\u0004\u0004߯篟翟đđđđ\u0014ȅ\u001c\u0005ճ߿߿݀Ǎ͗͗͗͗͗͗͗͗Ԁ\u001c\u0004\u0001\nϟ߿ȟ\u0013ΎΎ\u0007ۏۏۏۏۏ0\u000eđфđđ\u0014\t\u0005ݑ\"\u0014\u001cՑđđđ񴱜͆˝\u0001\"׻\u0001׻\u0001׻\u0001׻\u0001׻\u0001׻\u0001׻\u0001đđđđđ\u0014ȅ\u001c∏߿݀Ǎ͗͗͗͗͗͗͗͗Ԁ\"ݾݾݾݾݾݾݾ\u0014҂Ă\u001cđđđđđđđđđ篟\"ظظظظظظظđđđđǑđ\u0006ǧǇ\u0014\u0001ϗݑ?\u0001\u0001\u0002\u0004\u0014ՑđđđđĐĐ\u0001˝?đđđđđĀ\u0001\u0004Аȅ\u001c\u0005ճ߿߿݀Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0005\fΎΎ\u0007ۏۏۏۏۏۏϻ?đфđđ\u0014\t\u0005ݑ?\u0014\u001cՑđđđ񴱜͆˝\u0001怗đđđđđ\u0013ȅ\u0015đđđđđ\u0014ȅ\u001c∏߿݀Ǎ͗͗͗͗͗͗͗͗Ԁ\u0014ՁĂ\u0015\u0014ՁĂ\u001cđđđđđđđđđ篟đđŔđ×\u000b\u0011đđđđđđ\u0014\u001c\u0001ϗݑ݀\n\u0010\u0014\u001cՑđđđđĐĐ\u0001˝旝đđđđđ\u0014ȅ\u0015đđđđđ\u0014ȅ\u001c\u0005ճ߿߿݀Ǎ͗͗͗͗͗͗͗͗Ԁ\u0013ΎΎ\u0007\u0013ΎΎ\u0007ۏۏۏۏۏۏϻđфđđ\u0014\t\u0006đфđđ\u0014\t\u0005ݑ\u0014\u0015\u0014\u001cՑđđđ񴱜͆˝\u0001旝đđđđđ\u0014ȅ\u0015đđđđđ\u0014Ȅ\u001c∏߿݀Ǎ͗͗͗͗͗͗͗͗Ԁ\u0014ՁĂ\u0015\nđđđđđđđđđ篟đđđđđ×\u000b\u0011đđĐđđđđđđŔđđđđ\n\u0001ϗݑ\n\u0010\nՑđđđđĐĐ\u0001˝搙đđđđđ\u0014Ά\u0015Ǎ͗͗͗͗͗͗͗\n\u0005ճ߿߿݀Ǎ͗͗͗͗͗͗͗͗Ԁ\u0004!߿߿߻ۏۏۏۏۏԔфƗ\u0004\u0004\u0004\u0004\u0004ƆĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑ݊̌̌̌̌̌̌櫆櫆"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.ROW18",
    "content": "?đđđđđ\u0014ȅ\u001c∏߿Ǎ͗͗͗͗͗͗ݷ?\u0014ՁĂ\u001cđđđđđđđđđ篟?đđđđđđ\u0014\u001c\u0001ϗݑ?\u0014\u001cՑđđđđĐĐ\u0001˝*\u0010đđđđđ\u0014ȅ\u001c\u0005ճ߿߿Ǎ͗͗͗͗͗͗Ԁ\u0017\u0004\r\u0001\u0007\u0001\n\u0013ΎΎ\u0007ۏۏۏۏۏۏ\u0017\u0004\tݾݾ\u0001߀đфđđ\u0014\t\u0005߀ݑ\u0017\u0004\t߿߿߿\u0014\u001cՑđđđ񴱜͆˝\u0001\u0017\u0004\u0004\u0004翟篟đđđđđ\u0014ȅ\u001c∏߿Ǎ͗͗͗͗͗͗Ԁ\u0017\u0004\tϗϗ\u0014ՁĂ\u001cđđđđđđđđđ篟\u0017\u0004\u0004\u0004\u0001˝\u0002˝\u0002đđđđđđ\u0014\u001c\u0001ϗݑ\u0017\u0004\u0004\u0004\u0001\u0014\u001cՑđđđđĐĐ\u0001˝\u0017\u0004\u0004\u0004߯篟翟đđđđ\u0014ȅ\u001c\u0005ճ߿߿Ǎ͗͗͗͗͗͗Ԁ\u001c\u0004\u0001\nϟ߿ȟ\u0013ΎΎ\u0007ۏۏۏۏۏۏ0\u000eđфđđ\u0014\t\u0005߀ݑ\"\u0014\u001cՑđđđ񴱜͆˝\u0001\"׻\u0001׻\u0001׻\u0001׻\u0001׻\u0001׻\u0001׻\u0001đđđđđ\u0014ȅ\u001c∏߿Ǎ͗͗͗͗͗͗Ԁ\"ݾݾݾݾݾݾݾ\u0014҂Ă\u001cđđđđđđđđđ篟\"ظظظظظظظđđđđǑđ\u0006ǧǇ\u0014\u0001ϗݑ?\u0001\u0001\u0002\u0004\u0014ՑđđđđĐĐ\u0001˝?đđđđđĀ\u0001\u0004Аȅ\u001c\u0005ճ߿߿Ǎ͗͗͗͗͗͗Ԁ?\u0005\fΎΎ\u0007ۏۏۏۏۏۏ?đфđđ\u0014\t\u0005߀ݑ?\u0014\u001cՑđđđ񴱜͆˝\u0001怗đđđđđ\u0013ȅ\u0015đđđđđ\u0014ȅ\u001c∏߿Ǎ͗͗͗͗͗͗Ԁ\u0014ՁĂ\u0015\u0014ՁĂ\u001cđđđđđđđđđ篟đđŔđ×\u000b\u0011đđđđđđ\u0014\u001c\u0001ϗݑ݀\n\u0010\u0014\u001cՑđđđđĐĐ\u0001˝旝đđđđđ\u0014ȅ\u0015đđđđđ\u0014ȅ\u001c\u0005ճ߿߿Ǎ͗͗͗͗͗͗Ԁ\u0013ΎΎ\u0007\u0013ΎΎ\u0007ۏۏۏۏۏۏđфđđ\u0014\t\u0006đфđđ\u0014\t\u0005߀ݑ\u0014\u0015\u0014\u001cՑđđđ񴱜͆˝\u0001旝đđđđđ\u0014ȅ\u0015đđđđđ\u0014Ȅ\u001c∏߿Ǎ͗͗͗͗͗͗Ԁ\u0014ՁĂ\u0015\nđđđđđđđđđ篟đđđđđ×\u000b\u0011đđĐđđđđđđŔđđđđ\n\u0001ϗݑ\n\u0010\nՑđđđđĐĐ\u0001˝搙đđđđđ\u0014Ά\u0015Ǎ͗͗͗͗͗\u000e\u0005ճ߿߿Ǎ͗͗͗͗͗͗Ԁ\u0004!߿߿߻ۏۏۏۏۏۏԔфƗ\u0004\u0004\u0004\u0004\u0004ƆĀݷݷݷݷݷݷݷݷݑ߀ݑ݊̌̌̌̌̌̌櫆櫆"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.ROW2",
    "content": "?đđđđđ\u0014ȅ>Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0014ՁĂ??đđđđđđ\u0014?ݑ?\u0014??đđđđđ\u0014ȅ>Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0013ΎΎ\u0007+?đфđđ\u0014\t\u0006,ݑ?\u0014??đđđđđ\u0014ȅ>Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0014ՁĂ??đđđđđđ\u0014?ݑ?\u0014??đđđđđ\u0014ȅ>Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0013ΎΎ\u0007+?đфđđ\u0014\t\u0006,ݑ?\u0014??đđđđđ\u0014ȅ>Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0014҂Ă??đđđđǑđ\u0006ǧǇ7ݑ?\u0001\u0001\u0002\u00047?đđđđđĀ\u0001\u0004Аȅ>Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0005\fΎΎ\u0007+?đфđđ\u0014\t\u0006,ݑ?\u0014?怗đđđđđ\u0013ȅ\u0015đđđđđ\u0014ȅ>Ǎ͗͗͗͗͗͗͗͗Ԁ\u0014ՁĂ\u0015\u0014ՁĂ?đđŔđ×\u000b\u0011đđđđđđ\u0014?ݑ݀\n\u0010\u0014?旝đđđđđ\u0014ȅ\u0015đđđđđ\u0014ȅ>Ǎ͗͗͗͗͗͗͗͗Ԁ\u0013ΎΎ\u0007\u0013ΎΎ\u0007+đфđđ\u0014\t\u0006đфđđ\u0014\t\u0006,ݑ\u0014\u0015\u0014?旝đđđđđ\u0014ȅ\u0015đđđđđ\u0014Ȅ>Ǎ͗͗͗͗͗͗͗͗Ԁ\u0014ՁĂ\u0015đđđđđ×\u000b\u0011đđĐđđđđđđŔđđđđđđđđđĐđđđđđđŔݑ\n\u0010搙đđđđđ\u0014Ά\u0015Ǎ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗Ԁ\u0004!߿߿߻ԔфƗ\u0004\u0004\u0004\u0004\u0004ƆĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑ݊̌̌̌̌̌̌櫆櫆戀櫆"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.ROW20",
    "content": "?đđđđđ\u0014ȅ\u001c\u0006߿Ǎ͗͗͗͗͗͗ݷ?\u0014ՁĂ\u001c\f篟?đđđđđđ\u0014\u001c\u0007\u0001ϗݑ?\u0014\u001cĐĐĐĐ\u0005\u0001˝*\u0010đđđđđ\u0014ȅ\u001f\u0005ճ߿߿Ǎ͗͗͗͗͗͗Ԁ\u0017\u0004\r\u0001\u0007\u0001\n\u0013ΎΎ\u0007ۏۏۏۏۏۏ\u0017\u0004\tݾݾ\u0001߀đфđđ\u0014\t\u0005߀ݑ\u0017\u0004\t߿߿߿\u0014\u001cđф䱰̆˝\u0001\u0017\u0004\u0004\u0004翟篟đđđđđ\u0014ȅ\u001c\u0006߿Ǎ͗͗͗͗͗͗Ԁ\u0017\u0004\tϗϗ\u0014ՁĂ\u001c\f篟\u0017\u0004\u0004\u0004\u0001˝\u0002˝\u0002đđđđđđ\u0014\u001c\u0007\u0001ϗݑ\u0017\u0004\u0004\u0004\u0001\u0014\u001cĐĐĐĐ\u0005\u0001˝\u0017\u0004\u0004\u0004߯篟翟đđđđ\u0014ȅ\u001f\u0005ճ߿߿Ǎ͗͗͗͗͗͗Ԁ\u001c\u0004\u0001\nϟ߿ȟ\u0013ΎΎ\u0007ۏۏۏۏۏۏ0\u000eđфđđ\u0014\t\u0005߀ݑ\"\u0014\u001cđф䱰̆˝\u0001\"׻\u0001׻\u0001׻\u0001׻\u0001׻\u0001׻\u0001׻\u0001đđđđđ\u0014ȅ\u001c\u0006߿Ǎ͗͗͗͗͗͗Ԁ\"ݾݾݾݾݾݾݾ\u0014҂Ă\u001c\f篟\"ظظظظظظظđđđđǑđ\u0006ǧǇ\u0014\u0007\u0001ϗݑ?\u0001\u0001\u0002\u0004\u0014ĐĐĐĐ\u0005\u0001˝?đđđđđĀ\u0001\u0004Аȅ\u001f\u0005ճ߿߿Ǎ͗͗͗͗͗͗Ԁ?\u0005\fΎΎ\u0007ۏۏۏۏۏۏ?đфđđ\u0014\t\u0005߀ݑ?\u0014\u001cđф䱰̆˝\u0001怗đđđđđ\u0013ȅ\u0015đđđđđ\u0014ȅ\u001c\u0006߿Ǎ͗͗͗͗͗͗Ԁ\u0014ՁĂ\u0015\u0014ՁĂ\u001c\f篟đđŔđ×\u000b\u0011đđđđđđ\u0014\u001c\u0007\u0001ϗݑ݀\n\u0010\u0014\u001cĐĐĐĐ\u0005\u0001˝旝đđđđđ\u0014ȅ\u0015đđđđđ\u0014ȅ\u001f\u0005ճ߿߿Ǎ͗͗͗͗͗͗Ԁ\u0013ΎΎ\u0007\u0013ΎΎ\u0007ۏۏۏۏۏۏđфđđ\u0014\t\u0006đфđđ\u0014\t\u0005߀ݑ\u0014\u0015\u0014\u001cđф䱰̆˝\u0001旝đđđđđ\u0014ȅ\u0015đđđđđ\u0014Ȅ\u001c\u0006߿Ǎ͗͗͗͗͗͗Ԁ\u0014ՁĂ\u0015\n\f篟đđđđđ×\u000b\u0011đđĐđđđđđđŔđđđđ\n\u0007\u0001ϗݑ\n\u0010\nĐĐĐĐ\u0005\u0001˝搙đđđđđ\u0014Ά\u0015Ǎ͗͗͗͗͗\u0011\u0005ճ߿߿Ǎ͗͗͗͗͗͗Ԁ\u0004!߿߿߻ۏۏۏۏۏۏԔфƗ\u0004\u0004\u0004\u0004\u0004ƆĀݷݷݷݷݷݷݷݷݑ߀ݑ݊̌̌̌̌̌̌櫆櫆"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.ROW21",
    "content": "?đđđđđ\u0014ȅ\u001c߿Ǎ͗͗͗͗͗͗ݷ?\u0014ՁĂ0篟?đđđđđđ\u0014\u001c\u0001ϗݑ?\u0014\u001cՑđđđđĐĐ\u0001˝*\u0010đđđđđ\u0014ȅ\u001c\u0005ճ߿ΟǍ͗͗͗͗͗͗Ԁ\u0017\u0004\r\u0001\u0007\u0001\n\u0013ΎΎ\u0007ۏۏۏۏۏۏ\u0017\u0004\tݾݾ\u0001߀đфđđ\u0014\t\u0005߀ݑ\u0017\u0004\t߿߿߿\u0014\u001cՑđđđ񴱜͇˝\u0001　\u0017\u0004\u0004\u0004翟篟đđđđđ\u0014ȅ\u001c߿Ǎ͗͗͗͗͗͗Ԁ\u0017\u0004\tϗϗ\u0014ՁĂ0篟\u0017\u0004\u0004\u0004\u0001˝\u0002˝\u0002đđđđđđ\u0014\u001c\u0001ϗݑ\u0017\u0004\u0004\u0004\u0001\u0014\u001cՑđđđđĐĐ\u0001˝\u0017\u0004\u0004\u0004߯篟翟đđđđ\u0014ȅ\u001c\u0005ճ߿ΟǍ͗͗͗͗͗͗Ԁ\u001c\u0004\u0001\nϟ߿ȟ\u0013ΎΎ\u0007ۏۏۏۏۏۏ0\u000eđфđđ\u0014\t\u0005߀ݑ\"\u0014\u001cՑđđđ񴱜͇˝\u0001　\"׻\u0001׻\u0001׻\u0001׻\u0001׻\u0001׻\u0001׻\u0001đđđđđ\u0014ȅ\u001c߿Ǎ͗͗͗͗͗͗Ԁ\"ݾݾݾݾݾݾݾ\u0014҂Ă0篟\"ظظظظظظظđđđđǑđ\u0006ǧǇ\u0014\u0001ϗݑ?\u0001\u0001\u0002\u0004\u0014ՑđđđđĐĐ\u0001˝?đđđđđĀ\u0001\u0004Аȅ\u001c\u0005ճ߿ΟǍ͗͗͗͗͗͗Ԁ?\u0005\fΎΎ\u0007ۏۏۏۏۏۏ?đфđđ\u0014\t\u0005߀ݑ?\u0014\u001cՑđđđ񴱜͇˝\u0001　怗đđđđđ\u0013ȅ\u0015đđđđđ\u0014ȅ\u001c߿Ǎ͗͗͗͗͗͗Ԁ\u0014ՁĂ\u0015\u0014ՁĂ0篟đđŔđ×\u000b\u0011đđđđđđ\u0014\u001c\u0001ϗݑ݀\n\u0010\u0014\u001cՑđđđđĐĐ\u0001˝旝đđđđđ\u0014ȅ\u0015đđđđđ\u0014ȅ\u001c\u0005ճ߿ΟǍ͗͗͗͗͗͗Ԁ\u0013ΎΎ\u0007\u0013ΎΎ\u0007ۏۏۏۏۏۏđфđđ\u0014\t\u0006đфđđ\u0014\t\u0005߀ݑ\u0014\u0015\u0014\u001cՑđđđ񴱜͇˝\u0001　旝đđđđđ\u0014ȅ\u0015đđđđđ\u0014Ȅ\u001c߿Ǎ͗͗͗͗͗͗Ԁ\u0014ՁĂ\u0015#篟đđđđđ×\u000b\u0011đđĐđđđđđđŔđ\u000f\u0001ϗݑ\n\u0010\u000fՑđđđđĐĐ\u0001˝搙đđđđđ\u0014Ά\u0015Ǎ͗͗͗͗͗\u000f\u0005ճ߿ΟǍ͗͗͗͗͗͗Ԁ\u0004!߿߿߻ۏۏۏۏۏۏԔфƗ\u0004\u0004\u0004\u0004\u0004ƆĀݷݷݷݷݷݷݷݷݑ݀߀ݑ݊̌̌̌̌̌̌櫆櫆"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.ROW22",
    "content": "?đđđđđ7߿݀?K篟?đđđđđđ7\u0001ϗ?7ՑđđđđĐĐ\u0001˝*\u0010đđđđđ7\u0005ճ߿Ο݀\u0017\u0004\r\u0001\u0007\u0001\n!ۏۏۏۏۏۏ\u0017\u0004\tݾݾ\u0001߀đфđđ$\u0005\u0017\u0004\t߿߿߿7Ցđđđ񴱜͇˝\u0001　\u0017\u0004\u0004\u0004翟篟đđđđđ7߿݀\u0017\u0004\tϗϗK篟\u0017\u0004\u0004\u0004\u0001˝\u0002˝\u0002đđđđđđ7\u0001ϗ\u0017\u0004\u0004\u0004\u00017ՑđđđđĐĐ\u0001˝\u0017\u0004\u0004\u0004߯篟翟đđđđ7\u0005ճ߿Ο݀\u001c\u0004\u0001\nϟ߿ȟ!ۏۏۏۏۏۏ0\u000eđфđđ$\u0005\"7Ցđđđ񴱜͇˝\u0001　\"׻\u0001׻\u0001׻\u0001׻\u0001׻\u0001׻\u0001׻\u0001đđđđđ7߿݀\"ݾݾݾݾݾݾݾ\u00144篟\"ظظظظظظظđđđđǑđ\u0006\u0004\u0014\u0001ϗ?\u0001\u0001\u0002\u0004\u0014ՑđđđđĐĐ\u0001˝?đđđđđĀ\u0001\u0004А\u001f\u0005ճ߿Ο݀?\u0005\u001aۏۏۏۏۏۏ?đфđđ$\u0005?7Ցđđđ񴱜͇˝\u0001　đđđđđ\u0013ȅ\u0015đđđđđ7߿݀\u0014ՁĂ\u0015K篟đđŔđ×\u000b\u0011đđđđđđ7\u0001ϗ݀\n\u00107ՑđđđđĐĐ\u0001˝đđđđđ\u0014ȅ\u0015đđđđđ7\u0005ճ߿Ο݀\u0013ΎΎ\u0007!ۏۏۏۏۏۏđфđđ\u0014\t\u0006đфđđ$\u0005\u0014\u00157Ցđđđ񴱜͇˝\u0001　đđđđđ\u0014ȅ\u0015đđđđđ7߿݀\u0014ՁĂ\u0015#篟đđđđđ×\u000b\u0011đđĐđđđđđđŔđ\u000f\u0001ϗ\n\u0010\u000fՑđđđđĐĐ\u0001˝đđđđđ\u0014Ά\u0015Ǎ͗͗͗͗͗\u000f\u0005ճ߿Ο݀\u0004!߿߿߻ۏۏۏۏۏۏԔфƗ\u0004\u0004\u0004\u0004\u0004ƆĀݷݷݷݷݷݷݷݷݑ݀݊̌̌̌̌̌̌櫆櫆"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.ROW24",
    "content": "?đđđđđ7߿݀?K篟?đđđđđđ7\u0001ϗ?7ՑđđđđĐĐ\u0001˝*\u0010đđđđđ7\u0005ճ߿Ο݀\u0017\u0004\r\u0001\u0007\u0001\n!ۏۏۏۏۏۏ\u0017\u0004\tݾݾ\u0001߀đфđđ$\u0005߀\u0017\u0004\t߿߿߿7Ցđđđ񴱜͇˝\u0001　\u0017\u0004\u0004\u0004翟篟đđđđđ7߿݀\u0017\u0004\tϗϗK篟\u0017\u0004\u0004\u0004\u0001˝\u0002˝\u0002đđđđđđ7\u0001ϗ\u0017\u0004\u0004\u0004\u00017ՑđđđđĐĐ\u0001˝\u0017\u0004\u0004\u0004߯篟翟đđđđ7\u0005ճ߿Ο݀\u001c\u0004\u0001\nϟ߿ȟ!ۏۏۏۏۏۏ0\u000eđфđđ$\u0005߀\"7Ցđđđ񴱜͇˝\u0001　\"׻\u0001׻\u0001׻\u0001׻\u0001׻\u0001׻\u0001׻\u0001đđđđđ7߿݀\"ݾݾݾݾݾݾݾ\u00144篟\"ظظظظظظظđđđđǑđ\u0006\u0004\u0014\u0001ϗ?\u0001\u0001\u0002\u0004\u0014ՑđđđđĐĐ\u0001˝?đđđđđĀ\u0001\u0004А\u001f\u0005ճ߿Ο݀?\u0005\u001aۏۏۏۏۏۏ?đфđđ$\u0005߀?7Ցđđđ񴱜͇˝\u0001　đđđđđ\u0013ȅ\u0015đđđđđ7߿݀\u0014ՁĂ\u0015K篟đđŔđ×\u000b\u0011đđđđđđ7\u0001ϗ݀\n\u00107ՑđđđđĐĐ\u0001˝đđđđđ\u0014ȅ\u0015đđđđđ7\u0005ճ߿Ο݀\u0013ΎΎ\u0007!ۏۏۏۏۏۏđфđđ\u0014\t\u0006đфđđ$\u0005߀\u0014\u00157Ցđđđ񴱜͇˝\u0001　đđđđđ\u0014ȅ\u0015đđđđđ7߿݀\u0014ՁĂ\u0015#篟đđđđđ×\u000b\u0011đđĐđđđđđđŔđ\u000f\u0001ϗ\n\u0010\u000fՑđđđđĐĐ\u0001˝đđđđđ\u0014Ά\u0015Ǎ͗͗͗͗͗\u000f\u0005ճ߿Ο݀\u0004!߿߿߻ۏۏۏۏۏۏԔфƗ\u0004\u0004\u0004\u0004\u0004ƆĀݷݷݷݷݷݷݷݷݑQ̌̌̌̌̌̌櫆Q"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.ROW25",
    "content": "Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ7߿݀K篟Āݷݷݷݷݷݷݷݷݑݑđđđđđđ7\u0001ϗ櫆7ՑđđđđĐĐ\u0001˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ7\u0005ճ߿Ο݀!ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ$\u0005櫆7Ցđđđ񴱜͇˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ7߿݀K篟Āݷݷݷݷݷݷݷݷݑݑđđđđđđ7\u0001ϗ櫆7ՑđđđđĐĐ\u0001˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđđ7\u0005ճ߿Ο݀ȟ!ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ$\u0005櫆7Ցđđđ񴱜͇˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ7߿݀\u00144篟ĀݷݷݷݷݷݷݷݷݑݑđđđđǑđ\u0006\u0004\u0014\u0001ϗ櫆\u0001\u0001\u0002\u0004\u0014ՑđđđđĐĐ\u0001˝Ǎ͗͗͗͗͗͗͗͗ԀđđđđđĀ\u0001\u0004А\u001f\u0005ճ߿Ο݀\u0005\u001aۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ$\u0005櫆7Ցđđđ񴱜͇˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ7߿݀K篟Āݷݷݷݷݷݷݷݷݑݑđđđđđđ7\u0001ϗ櫆7ՑđđđđĐĐ\u0001˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ7\u0005ճ߿Ο݀!ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ$\u0005櫆7Ցđđđ񴱜͇˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ7߿݀K篟Āݷݷݷݷݷݷݷݷݑݑđđđđđđ7\u0001ϗ櫆7ՑđđđđĐĐ\u0001˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ7\u0005ճ߿Ο݀!ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ$\u0005櫆7Ցđđđ񴱜͇˝\u0001　"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.ROW26",
    "content": "Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ7߿݀K篟Āݷݷݷݷݷݷݷݷݑݑđđđđđđ7\u0001ϗ櫆7ՑđđđđĐĐ\u0001˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđđ7\u0005ճ߿Ο݀ȟ!ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ$\u0005櫆7Ցđđđ񴱜͇˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ7߿݀\u00144篟ĀݷݷݷݷݷݷݷݷݑݑđđđđǑđ\u0006\u0004\u0014\u0001ϗ櫆\u0001\u0001\u0002\u0004\u0014ՑđđđđĐĐ\u0001˝Ǎ͗͗͗͗͗͗͗͗ԀđđđđđĀ\u0001\u0004А\u001f\u0005ճ߿Ο݀\u0005\u001aۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ$\u0005櫆7Ցđđđ񴱜͇˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ7߿݀K篟Āݷݷݷݷݷݷݷݷݑݑđđđđđđ7\u0001ϗ櫆7Ցđđđđđđđ\u0001˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ7߿݀K篟Āݷݷݷݷݷݷݷݷݑݑđđđđđđ7\u0001ϗ櫆7ՑđđđđĐĐ\u0001˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ7\u0005ճ߿Ο݀!ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ$\u0005櫆7Ցđđđ񴱜͇˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ7߿݀K篟Āݷݷݷݷݷݷݷݷݑݑđđđđđđ7\u0001ϗ櫆7ՑđđđđĐĐ\u0001˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđđ7\u0005ճ߿Ο݀ȟ!ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ$\u0005櫆7Ցđđđ񴱜͇˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ7߿݀K篟Āݷݷݷݷݷݷݷݷݑݑđđđđđđ7\u0001ϗ櫆7ՑđđđđĐĐ\u0001˝"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.ROW3",
    "content": "?đđđđđ\u0014ȅ>Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0014ՁĂ??đđđđđđ\u0014?ݑ?\u0014??đđđđđ\u0014ȅ>Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0013ΎΎ\u0007+?đфđđ\u0014\t\u0006,ݑ?\u0014??đđđđđ\u0014ȅ>Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0014ՁĂ??đđđđđđ\u0014?ݑ?\u0014??đđđđđ\u0014ȅ>Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0013ΎΎ\u0007+?đфđđ\u0014\t\u0006,ݑ?\u0014??đđđđđ\u0014ȅ>Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0014҂Ă??đđđđǑđ\u0006ǧǇ7ݑ?\u0001\u0001\u0002\u00047?đđđđđĀ\u0001\u0004Аȅ\u0016&Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0005\fΎΎ\u0007\u0004(?đфđđ\u0014\t\u0005\u0004\b\u0005\u0003\u0017ݑ?\u0014*\u0010怗đđđđđ\u0013ȅ\u0015đđđđđ\u0014ȅ/\u000eǍ͗͗͗͗͗͗͗͗Ԁ\u0014ՁĂ\u0015\u0014ՁĂ1\rđđŔđ×\u000b\u0011đđđđđđ\u00140\rݑ݀\n\u0010\u0014+\u000f旝đđđđđ\u0014ȅ\u0015đđđđđ\u0014ȅ\u0016\b\u0005\u0014Ǎ͗͗͗͗͗͗͗͗Ԁ\u0013ΎΎ\u0007\u0013ΎΎ\u0007\u0004(đфđđ\u0014\t\u0006đфđđ\u0014\t\u0005\u0004'ݑ\u0014\u0015\u0014?旝đđđđđ\u0014ȅ\u0015đđđđđ\u0014Ȅ>Ǎ͗͗͗͗͗͗͗͗Ԁ\u0014ՁĂ\u0015đđđđđ×\u000b\u0011đđĐđđđđđđŔđđđđđđđđđĐđđđđđđŔݑ\n\u0010搙đđđđđ\u0014Ά\u0015Ǎ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗Ԁ\u0004!߿߿߻ԔфƗ\u0004\u0004\u0004\u0004\u0004ƆĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑ݊̌̌̌̌̌̌櫆櫆"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.ROW30",
    "content": "Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅ\u001c߿݀\u0014ՁĂ0篟Āݷݷݷݷݷݷݷݷݑݑđđđđđđ\u0014\u001c\u0001ϗ櫆\u0014\u001cՑđđđđĐĐ\u0001˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅ\u001c\u0005ճ߿Ο݀\u0013ΎΎ\u0007ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ\u0014\t\u0005櫆\u0014\u001cՑđđđ񴱜͇˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅ\u001c߿݀\u0014ՁĂ0篟Āݷݷݷݷݷݷݷݷݑݑđđđđđđ\u0014\u001c\u0001ϗ櫆\u0014\u001cՑđđđđĐĐ\u0001˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđđ\u0014ȅ\u001c\u0005ճ߿Ο݀ȟ\u0013ΎΎ\u0007ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ\u0014\t\u0005櫆\u0014\u001cՑđđđ񴱜͇˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅ\u001c߿݀\u0014҂Ă0篟ĀݷݷݷݷݷݷݷݷݑݑđđđđǑđ\u0006ǧǇ\u0014\u0001ϗ櫆\u0001\u0001\u0002\u0004\u0014ՑđđđđĐĐ\u0001˝Ǎ͗͗͗͗͗͗͗͗ԀđđđđđĀ\u0001\u0004Аȅ\u001c\u0005ճ߿Ο݀\u0005\fΎΎ\u0007ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ\u0014\t\u0005櫆\u0014\u001cՑđđđ񴱜͇˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅ\u001c߿݀\u0014ՁĂ0篟Āݷݷݷݷݷݷݷݷݑݑđđđđđđ\u0014\u001c\u0001ϗ櫆\u0014\u001cՑđđđđĐĐ\u0001˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅ\u001c\u0005ճ߿Ο݀\u0013ΎΎ\u0007ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ\u0014\t\u0005櫆\u0014\u001cՑđđđ񴱜͇˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014Ȅ\u001c߿݀\u0014ՁĂ0篟Āݷݷݷݷݷݷݷݷݑݑđđđđđđ\u0014\u001c\u0001ϗ櫆\u0014\u001cՑđđđđĐĐ\u0001˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅ\u001c\u0005ճ߿Ο݀\u0013ΎΎ\u0007ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ\u0014\t\u0005櫆\u0014\u001cՑđđđ񴱜͇˝\u0001　"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.ROW31",
    "content": "Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅ\u001c✇߿݀\u0014ՁĂ\u001cđđđđđđđđđ篟Āݷݷݷݷݷݷݷݷݑݑđđđđđđ\u0014\u001c\u0001ϗ櫆\u0014\u001cՑđđđđĐĐ\u0001˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅ\u001cճ߿Ο݀\u0013ΎΎ\u0007ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ\u0014\t\u0005櫆\u0014\u001cՑđđđ񴱜͇˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅ\u001c✇߿݀\u0014ՁĂ\u001cđđđđđđđđđ篟Āݷݷݷݷݷݷݷݷݑݑđđđđđđ\u0014\u001c\u0001ϗ櫆\u0014\u001cՑđđđđĐĐ\u0001˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđđ\u0014ȅ\u001cճ߿Ο݀ȟ\u0013ΎΎ\u0007ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ\u0014\t\u0005櫆\u0014\u001cՑđđđ񴱜͇˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅ\u001c✇߿݀\u0014҂Ă\u001cđđđđđđđđđ篟ĀݷݷݷݷݷݷݷݷݑݑđđđđǑđ\u0006ǧǇ\u0014\u0001ϗ櫆\u0001\u0001\u0002\u0004\u0014ՑđđđđĐĐ\u0001˝Ǎ͗͗͗͗͗͗͗͗ԀđđđđđĀ\u0001\u0004Аȅ\u001cճ߿Ο݀\u0005\fΎΎ\u0007ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ\u0014\t\u0005櫆\u0014\u001cՑđđđ񴱜͇˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅ\u001c✇߿݀\u0014ՁĂ\u001cđđđđđđđđđ篟Āݷݷݷݷݷݷݷݷݑݑđđđđđđ\u0014\u001c\u0001ϗ櫆\u0014\u001cՑđđđđĐĐ\u0001˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅ\u001cճ߿Ο݀\u0013ΎΎ\u0007ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ\u0014\t\u0005櫆\u0014\u001cՑđđđ񴱜͇˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014Ȅ\u001c✇߿݀\u0014ՁĂ\u001cđđđđđđđđđ篟Āݷݷݷݷݷݷݷݷݑݑđđđđđđ\u0014\u001c\u0001ϗ櫆\u0014\u001cՑđđđđĐĐ\u0001˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅ\u001cճ߿Ο݀\u0013ΎΎ\u0007ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ\u0014\t\u0005櫆\u0014\u001cՑđđđ񴱜͇˝\u0001　M"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.ROW33",
    "content": "Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅT\u0014ՁĂTĀݷݷݷݷݷݷݷݷݑݑđđđđđđ\u0014T櫆\u0014TǍ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅT\u0013ΎΎ\u0007Āݷݷݷݷݷݷݷݷݑݑđфđđ\u0014\t\u0005櫆\u0014\u001cՑđđđ񴱜͇˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅ\u001c✇߿݀\u0014ՁĂ\u001cđđđđđđđđđ篟Āݷݷݷݷݷݷݷݷݑݑđđđđđđ\u0014\u001c\u0001ϗ櫆\u0014\u001cՑđđđđĐĐ\u0001˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđđ\u0014ȅ\u001cճ߿Ο݀ȟ\u0013ΎΎ\u0007ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ\u0014\t\u0005櫆\u0014\u001cՑđđđ񴱜͇˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅ\u001c✇߿݀\u0014҂Ă\u001cđđđđđđđđđ篟ĀݷݷݷݷݷݷݷݷݑݑđđđđǑđ\u0006ǧǇ\u0014\u0001ϗ櫆\u0001\u0001\u0002\u0004\u0014ՑđđđđĐĐ\u0001˝Ǎ͗͗͗͗͗͗͗͗ԀđđđđđĀ\u0001\u0004Аȅ\u001cճ߿Ο݀\u0005\fΎΎ\u0007ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ\u0014\t\u0005櫆\u0014\u001cՑđđđ񴱜͇˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅ\u001c✇߿݀\u0014ՁĂ\u001cđđđđđđđđđ篟Āݷݷݷݷݷݷݷݷݑݑđđđđđđ\u0014\u001c\u0001ϗ櫆\u0014\u001cՑđđđđĐĐ\u0001˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅ\u001cճ߿Ο݀\u0013ΎΎ\u0007ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ\u0014\t\u0005櫆\u0014\u001cՑđđđ񴱜͇˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014Ȅ\u001c✇߿݀\u0014ՁĂ\u001cđđđđđđđđđ篟Āݷݷݷݷݷݷݷݷݑݑđđđđđđ\u0014\u001c\u0001ϗ櫆\u0014\u001cՑđđđđĐĐ\u0001˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅ\u001cճ߿Ο݀\u0013ΎΎ\u0007ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ\u0014\t\u0005櫆\u0014T߀Āݷݷݷݷݷݷݷݷݑݑ݀櫆櫆"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.ROW34",
    "content": "Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅT\u0014ՁĂTĀݷݷݷݷݷݷݷݷݑݑđđđđđđ\u0014T櫆\u0014TǍ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅT\u0013ΎΎ\u0007Āݷݷݷݷݷݷݷݷݑݑđфđđ\u0014\t\u0005櫆\u0014\u001cՑđđđ񴱜͇˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅ\u001c✇߿݀\u0014ՁĂ\u001cđđđđđđđđđ篟Āݷݷݷݷݷݷݷݷݑݑđđđđđđ\u0014\u001c\u0001ϗ櫆\u0014\u001cՑđđđđĐĐ\u0001˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđđ\u0014ȅ\u001cճ߿Ο݀ȟ\u0013ΎΎ\u0007ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ\u0014\t\u0005櫆\u0014\u001cՑđđđ񴱜͇˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅ\u001c✇߿݀\u0014҂Ă\u001cđđđđđđđđđ篟ĀݷݷݷݷݷݷݷݷݑݑđđđđǑđ\u0006ǧǇ\u0014\u0001ϗ櫆\u0001\u0001\u0002\u0004\u0014ՑđđđđĐĐ\u0001˝Ǎ͗͗͗͗͗͗͗͗ԀđđđđđĀ\u0001\u0004Аȅ\u001cճ߿Ο݀\u0005\fΎΎ\u0007ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ\u0014\t\u0005櫆\u0014\u001cՑđđđ񴱜͇˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅ\u001c✇߿݀\u0014ՁĂ\u001cđđđđđđđđđ篟Āݷݷݷݷݷݷݷݷݑݑđđđđđđ\u0014\u001c\u0001ϗ櫆\u0014\u001cՑđđđđĐĐ\u0001˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅ\u001cճ߿Ο݀\u0013ΎΎ\u0007ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ\u0014\t\u0005櫆\u0014\u001cՑđđđ񴱜͇˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014Ȅ\u001c✇߿݀\u0014ՁĂ\u001cđđđđđđđđđ篟Āݷݷݷݷݷݷݷݷݑݑđđđđđđ\u0014\u001c\u0001ϗ櫆\u0014\u001cՑđđđđĐĐ\u0001˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅ\u001cճ߿Ο݀\u0013ΎΎ\u0007ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđ\u0014\t\u0005櫆\u0014\u000b\u0004ٱٱٱٱٱٱٱ"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.ROW35",
    "content": "Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅT\u0014ՁĂTĀݷݷݷݷݷݷݷݷݑݑđđđđđđ\u0014T櫆\u0014TǍ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅT\u0013ΎΎ\u0007Āݷݷݷݷݷݷݷݷݑݑđфđđ\u0014\t\u0005櫆\u0014\u001cՑđđđ񴱜͇˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅ\u001c✇߿݀\u0014ՁĂ\u001cđđđđđđđđđ篟Āݷݷݷݷݷݷݷݷݑݑđđđđđđ\u0014\u001c\u0001ϗ櫆\u0014\u001cՑđđđđĐĐ\u0001˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđđ\u0014ȅ\u001cճ߿Ο݀ȟ\u0013ΎΎ\u0007ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ\u0014\t\u0005櫆\u0014\u001cՑđđđ񴱜͇˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅ\u001c✇߿݀\u0014҂Ă\u001cđđđđđđđđđ篟ĀݷݷݷݷݷݷݷݷݑݑđđđđǑđ\u0006ǧǇ\u0014\u0001ϗ櫆\u0001\u0001\u0002\u0004\u0014ՑđđđđĐĐ\u0001˝Ǎ͗͗͗͗͗͗͗͗ԀđđđđđĀ\u0001\u0004Аȅ\u001cճ߿Ο݀\u0005\fΎΎ\u0007ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ\u0014\t\u0005櫆\u0014\u001cՑđđđ񴱜͇˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅ\u001c✇߿݀\u0014ՁĂ\u001cđđđđđđđđđ篟Āݷݷݷݷݷݷݷݷݑݑđđđđđđ\u0014\u001c\u0001ϗ櫆\u0014\u001cՑđđđđĐĐ\u0001˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅ\u001cճ߿Ο݀\u0013ΎΎ\u0007ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ\u0014\t\u0005櫆\u0014\u001cՑđđđ񴱜͇˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014Ȅ\u001c✇߿݀\u0014ՁĂ\u001cđđđđđđđđđ篟Āݷݷݷݷݷݷݷݷݑݑđđđđđđ\u0014\u001c\u0001ϗ櫆\u0014\u001cՑđđđđĐĐ\u0001˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014Ά\u0017\u0004ճ߿Ο݀!߿߿ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑݔфƗ\u0004\u0004\u0004\u0004\u0004櫆̌̌̌̌̌̌ٱٱٱٱٱٱٱ"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.ROW36",
    "content": "Ǎ͗͗͗͗͗͗͗͗Ԁݗ\u0014ł-\u0005\u0005\u0005\u0005\u0004ݗ\u0013ΎΎ\u0007ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ\u0014\t\u0005櫆\u0014$ర̄˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014Ȅ.߿\u0014ՁĂ0篟Āݷݷݷݷݷݷݷݷݑݑđđđđđđ\u00140\u0001ϗ櫆\u0014-\u0001˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅ\u001cճ߿Ο݀\u0013ΎΎ\u0007ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ\u0014\t\u0005櫆\u0014$ర̄˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014Ȅ.߿\u0014ՁĂ0篟Āݷݷݷݷݷݷݷݷݑݑđđđđđđ\u00140\u0001ϗ櫆\u0014-\u0001˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅ\u001cճ߿Ο݀\u0013ΎΎ\u0007ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ\u0014\t\u0005櫆\u0014$ర̄˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014Ȅ.߿\u0014ՁĂ0篟Āݷݷݷݷݷݷݷݷݑݑđđđđđđ\u00140\u0001ϗ櫆\u0014-\u0001˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅ\u001f\u0005ճ߿Ο݀\u0013ΎΎ\u0007ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ\u0014\t\u0005櫆\u0014$ర̄˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014Ȅ.߿\u0014ՁĂ0篟Āݷݷݷݷݷݷݷݷݑݑđđđđđđ\u00140\u0001ϗ櫆\u0014-\u0001˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅ\u001f\u0005ճ߿Ο݀\u0013ΎΎ\u0007ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ\u0014\t\u0005櫆\u0014$ర̄˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014Ά.✇߿݀,\u0004\u0004ۼ篟ĀݷݷݷݷݷݷݷݷݑݑđđĐđ)\u0004\u0004⣦⣦\u0001ϗ櫆&\u0004ٱٱّ\u0001˝"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.ROW37",
    "content": "Ǎ͗͗͗͗͗͗͗͗Ԁݗ\u0014ł-\u0005\u0005\u0005\u0005\u0004ݗ\u0013ΎΎ\u0007ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ\u0014\t\u0006櫆\u0014$ర̄˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014Ȅ.߿\u0014ՁĂ0篟Āݷݷݷݷݷݷݷݷݑݑđđđđđđ\u00140\u0001ϗ櫆\u0014-\u0001˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅ\u001f\u0005ճ߿Ο݀\u0013ΎΎ\u0007ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ\u0014\t\u0006櫆\u0014$ర̄˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014Ȅ.߿\u0014ՁĂ0篟Āݷݷݷݷݷݷݷݷݑݑđđđđđđ\u00140\u0001ϗ櫆\u0014-\u0001˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅ\u001f\u0005ճ߿Ο݀\u0013ΎΎ\u0007ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ\u0014\t\u0006櫆\u0014$ర̄˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014Ȅ.߿\u0014ՁĂ0篟Āݷݷݷݷݷݷݷݷݑݑđđđđđđ\u00140\u0001ϗ櫆\u0014-\u0001˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅ\u001f\u0005ճ߿Ο݀\u0013ΎΎ\u0007ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ\u0014\t\u0006櫆\u0014$ర̄˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014Ȅ.߿\u0014ՁĂ0篟Āݷݷݷݷݷݷݷݷݑݑđđđđđđ\u00140\u0001ϗ櫆\u0014-\u0001˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅ\u0017\u0007\u0005ճ߿Ο݀\u0013ΎΎ\u0007ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ\u0014\t\u0006櫆\u0014$ర̄˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014Ά.✇߿݀,\u0004\u0004ۼ篟ĀݷݷݷݷݷݷݷݷݑݑđđĐđ)\u0004\u0004⣦⣦Ѐ\u0001ϗ櫆&\u0004ٱٱ\u0001˝"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.ROW4",
    "content": "?đđđđđ\u0014ȅ/\u000eǍ͗͗͗͗͗͗͗͗Ԁ?\u0014ՁĂ1\r?đđđđđđ\u00140\rݑ?\u0014+\u000f?đđđđđ\u0014ȅ\u0016\b\u0005\u0014Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0013ΎΎ\u0007\u0004(?đфđđ\u0014\t\u0005\u0004\b\u0005\u0003\u0017ݑ?\u0014*\u0010?đđđđđ\u0014ȅ/\u000eǍ͗͗͗͗͗͗͗͗Ԁ?\u0014ՁĂ1\r?đđđđđđ\u00140\rݑ?\u0014+\u000f?đđđđđ\u0014ȅ\u0016\b\u0005\u0014Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0013ΎΎ\u0007\u0004(?đфđđ\u0014\t\u0005\u0004\b\u0005\u0003\u0017ݑ?\u0014*\u0010?đđđđđ\u0014ȅ/\u000eǍ͗͗͗͗͗͗͗͗Ԁ?\u0014҂Ă1\r?đđđđǑđ\u0006ǧǇ(\rݑ?\u0001\u0001\u0002\u0004#\u000f?đđđđđĀ\u0001\u0004Аȅ\u0016\b\u0005\u0014Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0005\fΎΎ\u0007\u0004(?đфđđ\u0014\t\u0005\u0004\b\u0005\u0003\u0017ݑ?\u0014*\u0010怗đđđđđ\u0013ȅ\u0015đđđđđ\u0014ȅ/\u000eǍ͗͗͗͗͗͗͗͗Ԁ\u0014ՁĂ\u0015\u0014ՁĂ1\rđđŔđ×\u000b\u0011đđđđđđ\u00140\rݑ݀\n\u0010\u0014+\u000f旝đđđđđ\u0014ȅ\u0015đđđđđ\u0014ȅ\u0016\b\u0005\u0014Ǎ͗͗͗͗͗͗͗͗Ԁ\u0013ΎΎ\u0007\u0013ΎΎ\u0007\u0004(đфđđ\u0014\t\u0006đфđđ\u0014\t\u0005\u0004'ݑ\u0014\u0015\u0014?旝đđđđđ\u0014ȅ\u0015đđđđđ\u0014Ȅ>Ǎ͗͗͗͗͗͗͗͗Ԁ\u0014ՁĂ\u0015đđđđđ×\u000b\u0011đđĐđđđđđđŔđđđđđđđđđĐđđđđđđŔݑ\n\u0010搙đđđđđ\u0014Ά\u0015Ǎ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗Ԁ\u0004!߿߿߻ԔфƗ\u0004\u0004\u0004\u0004\u0004ƆĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑ݊̌̌̌̌̌̌櫆櫆"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.ROW40",
    "content": "Ǎ͗͗͗͗͗͗͗͗Ԁݗ\u0014ł-\u0005\u0005\u0005\u0005\u0004ݗ\u0013ΎΎ\u0007ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ\u0014\t\u0006櫆\u0014\u001cՑđđđ񴱜͇˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014Ȅ\u001c߿\u0014ՁĂ0篟Āݷݷݷݷݷݷݷݷݑݑđđđđđđ\u0014\u001c\u0001ϗ櫆\u0014\u001cՑđđđđĐĐ\u0001˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅ\u001c\u0005ճ߿Ο݀\u0013ΎΎ\u0007ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ\u0014\t\u0006櫆\u0014\u001cՑđđđ񴱜͇˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014Ȅ\u001c߿\u0014ՁĂ0篟Āݷݷݷݷݷݷݷݷݑݑđđđđđđ\u0014\u001c\u0001ϗ櫆\u0014\u001cՑđđđđĐĐ\u0001˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅ\u001c\u0005ճ߿Ο݀\u0013ΎΎ\u0007ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ\u0014\t\u0006櫆\u0014\u001cՑđđđ񴱜͇˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014Ȅ\u001c߿\u0014ՁĂ0篟Āݷݷݷݷݷݷݷݷݑݑđđđđđđ\u0014\u001c\u0001ϗ櫆\u0014\u001cՑđđđđĐĐ\u0001˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅ\u001c\u0005ճ߿Ο݀\u0013ΎΎ\u0007ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ\u0014\t\u0006櫆\u0014\u001cՑđđđ񴱜͇˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014Ȅ\u001c߿\u0014ՁĂ0篟Āݷݷݷݷݷݷݷݷݑݑđđđđđđ\u0014\u001c\u0001ϗ櫆\u0014\u001cՑđđđđĐĐ\u0001˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅ\u001c\u0005ճ߿Ο݀\u0013ΎΎ\u0007ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ\u0014\t\u0006櫆\u0014$ర̄˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014Ά.✇߿݀,\u0004\u0004ۼ篟ĀݷݷݷݷݷݷݷݷݑݑđđĐđ)\u0004\u0004⣦⣦Ѐ\u0001ϗ櫆&\u0004ٱٱ\u0001˝"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.ROW41",
    "content": "Ǎ͗͗͗͗͗͗͗͗ԀݗH\u0005\u0005\u0005\u0005\u0004ݗ ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ$\u0006櫆7Ցđđđ񴱜͇˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ7߿K篟Āݷݷݷݷݷݷݷݷݑݑđđđđđđ7\u0001ϗ櫆7ՑđđđđĐĐ\u0001˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ7\u0005ճ߿Ο݀ ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ$\u0006櫆7Ցđđđ񴱜͇˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ7߿K篟Āݷݷݷݷݷݷݷݷݑݑđđđđđđ7\u0001ϗ櫆7ՑđđđđĐĐ\u0001˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ7\u0005ճ߿Ο݀ ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ$\u0006櫆7Ցđđđ񴱜͇˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ7߿K篟Āݷݷݷݷݷݷݷݷݑݑđđđđđđ7\u0001ϗ櫆7ՑđđđđĐĐ\u0001˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ7\u0005ճ߿Ο݀ ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ$\u0006櫆7Ցđđđ񴱜͇˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ7߿K篟Āݷݷݷݷݷݷݷݷݑݑđđđđđđ7\u0001ϗ櫆7ՑđđđđĐĐ\u0001˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ7\u0005ճ߿Ο݀ ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ$\u0006櫆?ర̄˝\u0001　Ǎ͗͗͗͗͗͗͗͗ԀđđđđđI✇߿݀,\u0004\u0004ۼ篟ĀݷݷݷݷݷݷݷݷݑݑđđĐđ)\u0004\u0004⣦⣦Ѐ\u0001ϗ櫆&\u0004ٱٱ\u0001˝"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.ROW6",
    "content": "?đđđđđ\u0014ȅ/\u000eǍ͗͗͗͗͗͗͗͗Ԁ?\u0014ՁĂ1\r?đđđđđđ\u00140\rݑ?\u0014+\u000f?đđđđđ\u0014ȅ\u0016\b\u0005\u0014Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0013ΎΎ\u0007(?đфđđ\u0014\t\u0006\b\u0005\u0003\u0017ݑ?\u0014*\u0010?đđđđđ\u0014ȅ/\u000eǍ͗͗͗͗͗͗͗͗Ԁ?\u0014ՁĂ1\r?đđđđđđ\u00140\rݑ?\u0014+\u000f?đđđđđ\u0014ȅ\u0016\b\u0005\u0014Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0013ΎΎ\u0007(?đфđđ\u0014\t\u0006\b\u0005\u0003\u0017ݑ?\u0014*\u0010?đđđđđ\u0014ȅ/\u000eǍ͗͗͗͗͗͗͗͗Ԁ?\u0014҂Ă1\r?đđđđǑđ\u0006ǧǇ(\rݑ?\u0001\u0001\u0002\u0004#\u000f?đđđđđĀ\u0001\u0004Аȅ\u0016\b\u0005\u0014Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0005\fΎΎ\u0007\u0004(?đфđđ\u0014\t\u0005\u0004\b\u0005\u0003\u0017ݑ?\u0014*\u0010怗đđđđđ\u0013ȅ\u0015đđđđđ\u0014ȅ/\u000eǍ͗͗͗͗͗͗͗͗Ԁ\u0014ՁĂ\u0015\u0014ՁĂ1\rđđŔđ×\u000b\u0011đđđđđđ\u00140\rݑ݀\n\u0010\u0014+\u000f旝đđđđđ\u0014ȅ\u0015đđđđđ\u0014ȅ\u0016\b\u0005\u0014Ǎ͗͗͗͗͗͗͗͗Ԁ\u0013ΎΎ\u0007ή(đфđđ\u0014\t\u0006đđŕ\u0004ՑđđđđŔđđđđđđđđŔđđđđ\u0001\u0018ݑ\u0014\u0015\b\u0001\u0010旝đđđđđ\u0014ȅ\u0015ĐǍ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗Ԁ\u0014ՁĂ\u0015đđđđđ×\u000b\u0011ĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑ\n\u0010櫆櫆搙đđđđđ\u0014Ά\u0015Ǎ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗Ԁ\u0004!߿߿߻ԔфƗ\u0004\u0004\u0004\u0004\u0004ƆĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑ݊̌̌̌̌̌̌櫆櫆"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.ROW8",
    "content": "?đđđđđ\u0014ȅ/\u000b͗͗͗͗͗͗͗͗͗ݷ?\u0014ՁĂ1\n?đđđđđđ\u00140\nݑ?\u0014+\f?đđđđđ\u0014ȅ\u0016\u0007\u0005\u0011Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0013ΎΎ\u0007\u0004(?đфđđ\u0014\t\u0005\u0004\u0007\u0005\u0014ݑ?\u0014*\r?đđđđđ\u0014ȅ/\u000bǍ͗͗͗͗͗͗͗͗Ԁ?\u0014ՁĂ1\n?đđđđđđ\u00140\nݑ?\u0014+\f?đđđđđ\u0014ȅ\u0016\u0007\u0005\u0011Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0013ΎΎ\u0007\u0004(?đфđđ\u0014\t\u0005\u0004\u0007\u0005\u0014ݑ?\u0014*\r?đđđđđ\u0014ȅ/\u000bǍ͗͗͗͗͗͗͗͗Ԁ?\u0014҂Ă1\n?đđđđǑđ\u0006ǧǇ(\nݑ?\u0001\u0001\u0002\u0004#\f?đđđđđĀ\u0001\u0004Аȅ\u0016\u0007\u0005\u0011Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0005\fΎΎ\u0007\u0004(?đфđđ\u0014\t\u0005\u0004\u0007\u0005\u0014ݑ?\u0014*\r怗đđđđđ\u0013ȅ\u0015đđđđđ\u0014ȅ/\u000bǍ͗͗͗͗͗͗͗͗Ԁ\u0014ՁĂ\u0015\u0014ՁĂ1\nđđŔđ×\u000b\u0011đđđđđđ\u00140\nݑ݀\n\u0010\u0014+\f旝đđđđđ\u0014ȅ\u0015đđđđđ\u0014ȅ\u0016\u0007\u0005\u0011Ǎ͗͗͗͗͗͗͗͗Ԁ\u0013ΎΎ\u0007\u0013ΎΎ\u0007\u0004(đфđđ\u0014\t\u0006đфđđ\u0014\t\u0005\u0004\u0007\u0005\u0014ݑ\u0014\u0015\u0014?旝đđđđđ\u0014ȅ\u0015đđđđđ\u0014Ȅ?Ǎ͗͗͗͗͗͗͗͗Ԁ\u0014ՁĂ\u0015đđđđđ×\u000b\u0011đđĐđđđđđđŔđđđđđđđđđĐđđđđđđŔݑ\n\u0010搙đđđđđ\u0014Ά\u0015Ǎ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗Ԁ\u0004!߿߿߻ԔфƗ\u0004\u0004\u0004\u0004\u0004ƆĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑ݊̌̌̌̌̌̌櫆櫆"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.ROW9",
    "content": "?đđđđđ\u0014ȅ/׻\u0001͗͗͗͗͗͗͗͗͗ݷ?\u0014ՁĂ1ݾ?đđđđđđ\u00140߿ݑ?\u0014+Ǻ߯?đđđđđ\u0014ȅ\u0016\u0007ֺ̚\u0001ֺ\u0001Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0013ΎΎ\u0007\u0004(?đфđđ\u0014\t\u0005\u0004\u0007ݑ?\u0014)ఘ߯?đđđđđ\u0014ȅ/׻\u0001Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0014ՁĂ1ݾ?đđđđđđ\u00140߿ݑ?\u0014+Ǻ߯?đđđđđ\u0014ȅ\u0016\u0007ֺ̚\u0001ֺ\u0001Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0013ΎΎ\u0007\u0004(?đфđđ\u0014\t\u0005\u0004\u0007ݑ?\u0014)ఘ߯?đđđđđ\u0014ȅ/׻\u0001Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0014҂Ă1ݾ?đđđđǑđ\u0006ǧǇ(߿ݑ?\u0001\u0001\u0002\u0004#Ǻ߯?đđđđđĀ\u0001\u0004Аȅ\u0016\u0007ֺ̚\u0001ֺ\u0001Ǎ͗͗͗͗͗͗͗͗Ԁ?\u0005\fΎΎ\u0007\u0004(?đфđđ\u0014\t\u0005\u0004\u0007ݑ?\u0014)ఘ߯怗đđđđđ\u0013ȅ\u0015đđđđđ\u0014ȅ/׻\u0001Ǎ͗͗͗͗͗͗͗͗Ԁ\u0014ՁĂ\u0015\u0014ՁĂ1ݾđđŔđ×\u000b\u0011đđđđđđ\u00140߿ݑ݀\n\u0010\u0014+Ǻ߯旝đđđđđ\u0014ȅ\u0015đđđđđ\u0014ȅ\u0016\u0007ֺ̚\u0001ֺ\u0001Ǎ͗͗͗͗͗͗͗͗Ԁ\u0013ΎΎ\u0007\u0013ΎΎ\u0007\u0004(đфđđ\u0014\t\u0006đфđđ\u0014\t\u0005\u0004\u0007\u0005\u0014ݑ\u0014\u0015\u0014?旝đđđđđ\u0014ȅ\u0015đđđđđ\u0014Ȅ?Ǎ͗͗͗͗͗͗͗͗Ԁ\u0014ՁĂ\u0015đđđđđ×\u000b\u0011đđĐđđđđđđŔđđđđđđđđđĐđđđđđđŔݑ\n\u0010搙đđđđđ\u0014Ά\u0015Ǎ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗Ԁ\u0004!߿߿߻ԔфƗ\u0004\u0004\u0004\u0004\u0004ƆĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑ݊̌̌̌̌̌̌櫆櫆"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.SHADMODEL",
    "content": "111)1Հ\u0001&Հ))1\u0006\u0002\u0004ߟ\u0004\r\u0005\u0001\u0004\u0006\u0004\r\u0001\u001fՀ,Ճ\u0007\u0001ꪨ\f\t\u0006\u0003\u0001\f\u0006\u0001\rꪊ*\u0001\u0006\u0005\u001c\u0004ԅ\u0015\nǟ\u0002\u0004Հ\u0005Օ'Հ\u0001&\u0005\u0004#Հ\u0002\u000eե\u0005\u0001&\u0006\u0002\u0004ߟ\u0004\r1\u0001!ժ₃#Ճ\u0007\u0001ꪨ\fՀ\u0001')\u0001#\u0001\u0006\u0005\u001c\u0005\u0005߿\u000e)Հ$1\f\u0004\u0003\u000eՀ \u0004+\u0005\u0004\u0016\u0005\u0002\t\u000f\u0006\u00121\u0006\u0002\t\u0004\u0004\u000e0\u0007\u0005\u000e1\u0005\u0005\u0001\u0002\u000e1\u000b\u0004\u0004\u0006Հ&\u0001\u0006\b\u0018Հ\u0001(Ճ\u0003\u0007\u0006\u0005\u0005\u0017\u0015\u001a\u0004\u000e$\u0005\u0004\u0016Հ뿇)\u000b\u0002\u0007\u000eՀ!\u0006\u0005\u0007\u0017\u0005\u0001\b\u0017\u0007\u0013\u0005\u0007\u0011Հ\b\u001a\t\b\u0007\u000f\u0001蠀\u0011\u0018\u0007Ͽ\u000f*\u0006\u0004\u0001\u0004\u000f1\u000b\u0004\u0001\u0005ߏ\u000b1՟\u0005\u000e\u0012Հꏇ(՟\u0001\u0005\u0007𪪪\n\u0005\u0006\u0017\u001bԕ\u000e\u0005\u0004\u0004\u0004\u000e\u0014\u000eՀ\u0004ŕ\u0004믿\f1\nϿ\u0002ꪨ\u0004\r\u0019\u000e\u0005\b\u0001\u000b\u0007\u0004\u0004\u0011\u0004\u0001\u001b!\u000b\u0011ښ\u0010Ձ\u0004\u0004\u0005\u0004\u0006\u000fվ*\u0005\u0001\u0004\u00121ਨ\u0006\u0006\u000f1\n\tߟ\u0004\bՀ\u000b\u0004\u001c\n\u001fՀ*\u0006\u0001\u0007說\u0004\u0001\u000e1\u0004\t\u0019\u0004\n\rռ\u0004\u0005\u0005\u0001\u0004\u0001\rՀ)\u0005\n\u0015\u0015\u000f\u0019\u000e\u0005\u0001\u0004\u0006\u0004\r\u0006\u0004\u0004\u0001\u0010%1\t\u0006\u0003\u0001\f՟\u0004\b\u0004\u0011Հ𠠼\u001d\u0001\u0004\u0004\u001b\u0004ԅ\u0015\u0015\u0017\u0006\u0002\u0004\u0006\u0004\u0006Հ\u0004Օ\u0002\u0004\f\u0005\u0004#Հ\u0001&\n\u0004\u0001\u0004𪪪\u0006\u0006\u0004\u0007\u0001\f1\u0006\u0002\u0004ߟ\u0004\r\u0001\u0005\u0004\u0004\f\u0018\u0016Ռ)Ճ\u0007\u0001ꪨ\fՀ&*\u0005\u0001\u0004\u0015\u0001\u0006\u0005\u001c'\u0004\u0004\u001d\b\u0007\u0002\u0001\rՀ&Հ\u0001!\u0005\u0007\u0002\r\u000b\u0004\u000e\u0006\u0002\u0013\u0004\u0001\u0005ߗ\u0005\b\u0004訨\rՀ\u0005\u0005\u0018Հ\u0006\u0002ꨮ\u000bՁ\u0007ß\u0001\u0001\u0007\u0018\u0016+\u0001\u0004\u0005\n\f\u0004\u0004\u0004\f111\u0012\u0004\u0013"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.SKELMOD",
    "content": "111)1Հ\u0001𘌇)Հ+)1\u0006\u0004\u000e\u0005\u000e상 Հ,Ճ\t\r\f\r\b𰎆\rꪊ*\u0001\b\u0004\u001c\u0005̆\u0015\u000bܸ\u0004Հ\u0005Օ'Հ\u0001𘌇)\n#\b\u0012\u0004ե\u0005\u0001&\u0006\u0004\u000e1\u0001〘\u001eժ₃#Ճ\u0005\u0005\rՀ\u0001))\u0001#\u0001\u0004\u0004\u0004\u001c\u0007𐘜\u000e)Հ$1\u000eù೟\u000eՀ\"\u0004+\t\u001f\u0001\u0004\u0004\u000b\u0010\u0006􆃁\u0004\u00121\u0006𸐎\u000f0\tɎⱛ\u000e1\n\u0005\u0001\u0001\u000f1\f،È\u0007Հ&\u0004\t\u0018Հ\u0001*Տ\u0005\b\u0007\u0005\u0005\u0017\u0015\u001a\u0006𰘈\u000f\u001f\u0005\u0004\u0016Հ\u0001*\fؠ\u0001ߜ\u000fՀ\u0001\"\u0006\u0005\u0007\u0017\u0006༉\u0006\u001f\n\u0014\u0006ง\n\u0011Հ\b\u001a\u000b\u0010\u0001\u0011\u0014\tǏ\u0001྇\u000f*\n\u0006ȸƟ\u00101\r\u0001\f1՟\u0004\u000f\u0014Հ臁*՟\n\b\u000b\u001a\u001c\u0010\u0006༌\u0005\u000f\r\u000fՀӣΜ\u0001\u0011՟+\r㦰\u000e\u0019\u000eర𧇾\u0001\fݾ$\u0004\u0005\u001b𸎃\"\u001d\rՏ̓ϘϏ#ո,\u0006𔎇\u0004\u00121ᣦ옘ర#1\u000b\u0002픋\tՀ\r\u001c/Հ+\u000b\u0004\bÓ𸌆񜜌\u00131\u0005\u0004\u001f\u0004\u0004\u000b\u000fռ\u0005Ƈ\u0004ࠀ\rՀ*\u0006󾏎\u0017\u0017\u0010\r\t　\r\u0006\r\u0019\n\u0005\u0001\u0011%1\n𰘜綞\r՟\u000b\u0012Հ \u0004\u0004\u001b\u000e\u0004ξ\u0001\r\u0018\u0017\u0007𸘜\u0007Հ쫆\u0013՟\u0005\u001cՀ\u0001𘌇)\r\u0001\u0007జ぀\u0004Þ\r/\u0006\u0004\u000e\u0006\u0004\f\u000e\u0005\u0004\rՌ+Ճ\t\rՀ&*\u0005พ\u0004\u0018\u0001\b\u0004\u001c)Հజ\u0005\u001d\bర\u0001\u000eՀ*Հ\u0001!\u0002𜟾\u0014\u000f\u0004\u0004ࠀ\u000f\u0006\u0016\u0006򝟆\b\u0004𰘙\u000eՀ\u0007\u0018Հ\u000bθ̶\f\f\u0001\u0007\n\u000b\u000e\u0004,̄\nࠀ\r𰰰\u0006\r111\u0012\u0010"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.SKELMOD2",
    "content": "111)1Հ\u0001&Հ+)1\u0006\u0002\u0004ߟ\u0004\r\u0005\u000e상 Հ,Ճ\u0007\u0001ꪨ\f\f\r\b𰎆\rꪊ*\u0001\u0006\u0005\u001c\u0005̆\u0015\u000bܸ\u0004Հ\u0005Օ'Հ\u0001&\n#Հ\u0012\u0004ե\u0005\u0001&\u0006\u0002\u0004ߟ\u0004\r1\u0001%ժ₃#Ճ\u0007\u0001ꪨ\fՀ\u0001')\u0001#\u0001\u0006\u0005\u001c\u0005\u0005߿\u000e)Հ$1\f\u0004\u0003\u000eՀ\"\u0004+\t\u001f\u0005\u0002\t\u000f\u0006􆃁\u0004\u00121\u0006𸐎\u000f0\tɎⱛ\u000e1\n\u0005\u0001\u0001\u000f1\f،È\u0007Հ&\u0004\t\u0018Հ\u0001*Տ\b\u0007\u0005\u0005\u0017\u0015\u001a\u0006𰘈\u000f'\u0005\u0004\u0016Հ뿇)\fؠ\u0001ߜ\u000fՀ\u0001\"\u0006\u0005\u0007\u0017\u0005\u0001\b\u0017\n\u0014\u0006ง\n\u0011Հ\b\u001a\t\b\u0007\u000f\u0001\u0011\u0019\tǏ\u0001྇\u000f*\u0006\u0004\u0001\u0004\u000f1\f\u0001\f1՟\u0005\u000e\u0012Հ臁*՟\u0005\b\u000b\u0005\u0006\u0017\u001bԕ\u000e\u0006༌\u0005\u000f\u0017\u000fՀ\u0004ŕ\u0004믿\f1\r㦰\u000e\u0019\u000e\u0005\b\u0001\u000b\u0007\u0004\u0004\u0011\u0004\u0005\u001b𸎃\"\u000b\u0011ښ\u0010Ձ\u0004\u0004\u0005\u0004\u0006\u000fո,\u0006𔎇\u0004\u00121ਨ\u0006\u0006\u000f1\u000b\u0002픋\tՀ\u000b\u0004\u001c\n\u001fՀ+\u000b\u0004\b說\u0004\u0001\u000e1\u0005\u0004\u001f\u000b\u000fռ\u0004\u0005\u0005\u0001\u0004\u0001\rՀ)\u0006󾏎\u0017\u0017\u0010\u0019\u000e\u0005\u0001\u0004\u0006\u0004\r\n\u0005\u0001\u0011%1\t\u0006\u0003\u0001\f՟\u000b\u0012Հ \u0001\u0004\u0004\u001b\u0004ԅ\u0015\u0018\u0017\u0007𸘜\u0007Հ\u0004Օ\u0002\u0004\f\u0005\u0004#Հ\u0001𘌇)\r\u0001\u0007\u0006\u0004\u0007\u0001\f1\u0006\u0004\u000e\u0006\u0004\f\u0018\u0016Ռ+Ճ\t\rՀ&*\u0005พ\u0004\u0018\u0001\b\u0004\u001c)\u0004\u0004\u001d\bర\u0001\u000eՀ*Հ\u0001!\u0005\u0007\u0002\r\u000f\u0004\u0004ࠀ\u000f\u0006\u0016\u0006򝟆\b\u0004訨\rՀ\u0007\u0018Հ\tθ̶\f\f\u0001\u0007\u0018\u0016\u0004,ర\nࠀ\r𰰰\u0006\r111\u0012\u0010"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.SKELMODBK",
    "content": "111)1Հ\u0001𘌇)Հ+)1\u0006\u0004\u000e\u0005\u000e상 Հ,Ճ\t\r\f\r\b𰎆\rꪊ*\u0001\b\u0004\u001c\u0005̆\u0015\u000bܸ\u0004Հ\u0005Օ'Հ\u0001𘌇)\n#\b\u0012\u0004ե\u0005\u0001&\u0006\u0004\u000e1\u0001〘\u001eժ₃#Ճ\u0005\u0005\rՀ\u0001))\u0001#\u0001\u0004\u0004\u0004\u001c\u0007𐘜\u000e)Հ$1\u000eù೟\u000eՀ\"\u0004+\t\u001f\u0001\u0004\u0004\u000b\u0010\u0006􆃁\u0004\u00121\u0006𸐎\u000f0\tɎⱛ\u000e1\n\u0005\u0001\u0001\u000f1\f،È\u0007Հ&\u0004\t\u0018Հ\u0001*Տ\u0005\b\u0007\u0005\u0005\u0017\u0015\u001a\u0006𰘈\u000f\u001f\u0005\u0004\u0016Հ\u0001*\fؠ\u0001ߜ\u000fՀ\u0001\"\u0006\u0005\u0007\u0017\u0006༉\u0006\u001f\n\u0014\u0006ง\n\u0011Հ\b\u001a\u000b\u0010\u0001\u0011\u0014\tǏ\u0001྇\u000f*\n\u0006ȸƟ\u00101\r\u0001\f1՟\u0004\u000f\u0014Հ臁*՟\n\b\u000b\u001a\u001c\u0010\u0006༌\u0005\u000f\r\u000fՀӣΜ\u0001\u0011՟+\r㦰\u000e\u0019\u000eర𧇾\u0001\fݾ$\u0004\u0005\u001b𸎃\"\u001d\rՏ̓ϘϏ#ո,\u0006𔎇\u0004\u00121ᣦ옘ర#1\u000b\u0002픋\tՀ\r\u001c/Հ+\u000b\u0004\bÓ𸌆񜜌\u00131\u0005\u0004\u001f\u0004\u0004\u000b\u000fռ\u0005Ƈ\u0004ࠀ\rՀ*\u0006󾏎\u0017\u0017\u0010\r\t　\r\u0006\r\u0019\n\u0005\u0001\u0011%1\n𰘜綞\r՟\u000b\u0012Հ \u0004\u0004\u001b\u000e\u0004ξ\u0001\r\u0018\u0017\u0007𸘜\u0007Հ쫆\u0013՟\u0005\u001cՀ\u0001𘌇)\r\u0001\u0007జ぀\u0004Þ\r/\u0006\u0004\u000e\u0006\u0004\f\u000e\u0005\u0004\rՌ+Ճ\t\rՀ&*\u0005พ\u0004\u0018\u0001\b\u0004\u001c)Հజ\u0005\u001d\bర\u0001\u000eՀ*Հ\u0001!\u0002𜟾\u0014\u000f\u0004\u0004ࠀ\u000f\u0006\u0016\u0006򝟆\b\u0004𰘙\u000eՀ\u0007\u0018Հ\u000bθ̶\f\f\u0001\u0007\n\u000b\u000e\u0004,̄\nࠀ\r𰰰\u0006\r111\u0012\u0010"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.SKELMODEL",
    "content": "111)1Հ\u0001𘌇)Հ+)1\u0006\u0004\u000e\u0005\u000e상 Հ,Ճ\t\r\f\r\b𰎆\rꪊ*\u0001\b\u0004\u001c\u0005̆\u0015\u000bܸ\u0004Հ\u0005Օ'Հ\u0001𘌇)\n#\b\u0012\u0004ե\u0005\u0001&\u0006\u0004\u000e1\u0001〘\u001eժ₃#Ճ\u0005\u0005\rՀ\u0001))\u0001#\u0001\u0004\u0004\u0004\u001c\u0007𐘜\u000e)Հ$1\u000eù೟\u000eՀ\"\u0004+\t\u001f\u0001\u0004\u0004\u000b\u0010\u0006􆃁\u0004\u00121\u0006𸐎\u000f0\tɎⱛ\u000e1\n\u0005\u0001\u0001\u000f1\f،È\u0007Հ&\u0004\t\u0018Հ\u0001*Տ\u0005\b\u0007\u0005\u0005\u0017\u0015\u001a\u0006𰘈\u000f\u001f\u0005\u0004\u0016Հ\u0001*\fؠ\u0001ߜ\u000fՀ\u0001\"\u0006\u0005\u0007\u0017\u0006༉\u0006\u001f\n\u0014\u0006ง\n\u0011Հ\b\u001a\u000b\u0010\u0001\u0011\u0014\tǏ\u0001྇\u000f*\n\u0006ȸƟ\u00101\r\u0001\f1՟\u0004\u000f\u0014Հ臁*՟\n\b\u000b\u001a\u001c\u0010\u0006༌\u0005\u000f\r\u000fՀӣΜ\u0001\u0011՟+\r㦰\u000e\u0019\u000eర𧇾\u0001\fݾ$\u0004\u0005\u001b𸎃\"\u001d\rՏ̓ϘϏ#ո,\u0006𔎇\u0004\u00121ᣦ옘ర#1\u000b\u0002픋\tՀ\r\u001c/Հ+\u000b\u0004\bÓ𸌆񜜌\u00131\u0005\u0004\u001f\u0004\u0004\u000b\u000fռ\u0005Ƈ\u0004ࠀ\rՀ*\u0006󾏎\u0017\u0017\u0010\r\t　\r\u0006\r\u0019\n\u0005\u0001\u0011%1\n𰘜綞\r՟\u000b\u0012Հ \u0004\u0004\u001b\u000e\u0004ξ\u0001\r\u0018\u0017\u0007𸘜\u0007Հ쫆\u0013՟\u0005\u001cՀ\u0001𘌇)\r\u0001\u0007జ぀\u0004Þ\r/\u0006\u0004\u000e\u0006\u0004\f\u000e\u0005\u0004\rՌ+Ճ\t\rՀ&*\u0005พ\u0004\u0018\u0001\b\u0004\u001c)Հజ\u0005\u001d\bర\u0001\u000eՀ*Հ\u0001!\u0002𜟾\u0014\u000f\u0004\u0004ࠀ\u000f\u0006\u0016\u0006򝟆\b\u0004𰘙\u000eՀ\u0007\u0018Հ\u000bθ̶\f\f\u0001\u0007\n\u000b\u000e\u0004,̄\nࠀ\r𰰰\u0006\r111\u0012\u0010\u0012\u0010\u0010111\u0012\u001011\u0012\u001011\u0012\u001011\u0012\u0010\r111\u0012\u00101\u0012\u0010111\u0012\u0011"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.SKELPILE",
    "content": "0ođđđđđ0đđđđđo00\u0005\u0001,đđӐ\u0001󆞹\u0012\u0012đđӐ\u0001󆞹*đ\u000b懃\u0006\u0015ݮᾀ\u0013\u0012ᾀ+\u0004\u0004\u0006萐\u0015đ/đ/Ā\u00014࢈0࢈0:đđđđđ0đđđđđ0đ:ݮ0$\b\u0004'\b\u000bđđđđđ00:00\u0005\u0001𘌇.đđӐ\u0001󆞹*đӐ\u0001󆞹*đ\n\u0004\u0013ݮᾀ+ᾀ+\u0004\u0005\u0007㞼\u0013đ/Ā/\u0004\u0001\u0004$࢈04;đđđđđ0đ7;ݮ0.\b\u0004(\b\u000bđđĀ\u0001𘌇.;:\u0006\u0004\u0013\u0006*\u0005\u0001𘌇.đđđ\t\u0012đ܎󟐟!đ\n\u0004\u0013ݮ\u0001\b\u0004!\u0005\"\u0004\t\u0012đđđĐ2\u0004ܸ-\u0004\u0001\b\u0004!64:Đ9đ0Đ:\u0017\u0007\u0005\u00070\b\u000bĀđđđđđ\u0007\u0004\u0007\u0007݁J\u000f\u0007\u0007OĀܑđđđđđđ\u000f\u0007ՐT'\u0007KĀ5B\u0005\u0001𘌇)BĀܑđ\n\u0004R\u0004\tQĀ\u0004\u0001\b\u0004`5AĀܑĐy\u00190\u0004ĀđđđĐđđđđđđŔőőőőőőőőŔđđđđđđđŔЀ\u0004\u0004\u0004\u0004\u0004\u0004Ԕ\u0004\u0004\u0004\u0004\u0004憆ĀܑĐđđđđđđŔđđđđđđđđŔđđđđđđđŔĝ̝͗̌̌̌̌̌̌ŔđđđđđđđŔĝ̝͗̌̌̌̌̌̌ĝ̝͗̌̌̌̌̌̌ݍ̌̌̌̌̌Āđđđđđ\u0007\u0004\u0007\u0007݁J\u000f\u0007\u0007OĀܑđđđđđđ\u000f\u0007ՐT\u0004\u0005\t\u0004KĀđđđđĀ\u0007𰰰\u0004\u0004\u0004ࠨ\u0006B\u0012\u0005\u0005\u0001АՕBĀܑđđđđđđooĀđđđđđ\u001eP\u0012\u0005\u0005\u0001ԔAĀܑđđđđđđo\u00190\u0004ĀđđđĐđđđđđđŔőőőőőőőőŔđđđđđđđŔЀ\u0004\u0004\u0004\u0004\u0004\u0004Ԕ\u0004\u0004\u0004\u0004\u0004憆ĀܑĐđđđđđđŔđđđđđđđđŔđđđđđđđŔĝ̝͗̌̌̌̌̌̌"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.SMEAR",
    "content": "đđėãČđđđǗĜ̄\u0006đđĐ\u0006ꢢ\u0006Ĝ\u0007̌\u000eđđĐ\u000eꢢ\u000eĜ\u000f̌\u0017\u000fđđĐ\u0017ꢢޞ\u0011\u0017ع\u0017Ĝ\u0018̬\u001b\u00113"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.SMEAWR",
    "content": "đđėãČđđđǗĜ̄\u0006đđĐ\u0006ꢢ\u0006Ĝ\u0007̌\u000eđđĐ\u000eꢢ\u000eĜ\u000f̌\u0017\u000fđđĐ\u0017ꢢޞ\u0011\u0017ع\u0017Ĝ\u0018̬\u001b\u00113"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.SS",
    "content": "\u001fđđđđđ\u0014Ȅ\u001c✇߿\u0005\u001f\u0014ԀĂ\u001cđđđđđđđđđ篟\u0005Āݷݷݷݷݷݷ%đ7\u0001ϗ\u0005櫆\"7ՑđđđđĐĐ\u0001˝\u0005\u001fđđđđđ1\u0004ճ߿Ο\u0005\u001f!ۏۏۏۏۏۏ\u0005Āݷݷݷݷݷݷ\u001fđф%\u0006\u0005櫆\u001f\u001d\u001cՑđđđ񴱜͇˝\u0001　\u0005\u001fđđđđđ\u0014Ȅ\u001c✇߿\u0005\u001f\u0014ԀĂ\u001cđđđđđđđđđ篟\u0005Āݷݷݷݷݷݷ%đ7\u0001ϗ\u0005櫆\"7ՑđđđđĐĐ\u0001˝\u0005\u001fđđđđđ1\u0004ճ߿Ο\u0005\u001f!ۏۏۏۏۏۏ\u0005Āݷݷݷݷݷݷ\u001fđф%\u0006\u0005櫆\u001f\u001d\u001cՑđđđ񴱜͇˝\u0001　\u0005\u001fđđđđđ\u0014Ȅ\u001c✇߿\u0005\u001f\u0014ԀĂ\u001cđđđđđđđđđ篟\u0005Āݷݷݷݷݷݷ%đ7\u0001ϗ\u0005櫆\"7ՑđđđđĐĐ\u0001˝\u0005\u001fđđđđđ1\u0004ճ߿Ο\u0005\u001f!ۏۏۏۏۏۏ\u0005đđŔđđđđđđŔđđđ\u001fđф%\u0006\u0005\u001f@Ցđđđ񴱜͇˝\u0001　\u0005\u001fđđđđđ7߿\u0005\u001f7đđđđđđđđđđ\u0005Ā%đ7\u0005櫆\"0\u0004Ցđđđđđđđđđđđđ\u0005\u001c<\u0004\u0001\u0005\u001c<\u0004đđđđđđđđđđđĐ\u0005Āݷݷݷݷݷݷ\u001c<\u0004Ǘ\u0005櫆\u001c<\u0004ՑđđđđĐĐ⌹˝\u0005\u001cđđđđđ0\u0004ճ߿Ο\u0005\u001c!\u0004ۏۏۏۏۏۏ\u0005Āݷݷݷݷݷݷ\u001cđф%\u0006\u0005櫆\u001c\u001d\u0015\u0004Ցđđđ񴱜͇˝\u0001　\u0005\u001c\u0012Ȅ\u0015\u0004✇߿\u0005\u001c\u001cԀĂ\u0015\u0004đđđđđđđđđ篟\u0005Āݷݷݷݷݷݷ\u001c\u00050\u0004\u0001ϗ\u0005櫆\u001c0\u0004ՑđđđđĐĐ\u0001˝\u0005櫆\u001f@ԐĐĐĐ𴰜̇˜　Ǎ͗͗͗͗͗͗͗͗ԀďߟϕǕϟߏ\u0013ǧǇ\u0007͇퇭퇭Ǎݻ\u0014\b\u0004\u0001Āݷݷݷݷݷݷݷݷݑݑ݄фф\u0014\u001c⨲ݾ߿݀櫆\u0014\u001cđđđđđđđ篟΋Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014Ά\u001c࿀ϗݻ,\u0004\u0004ۼ˝ĀݷݷݷݷݷݷݷݷݑݑđđĐđ)\u0004\u0004⣦⢰Ο݀櫆&\u0004аǼ񎾼ݾаǼ񎾼ݾ"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.SS1",
    "content": "\u001fđđđđđ\u0014Ȅ\u001c✇߿\u0005\u001f\u0014ԀĂ\u001cđđđđđđđđđ篟\u0005Āݷݷݷݷݷݷ%đ7\u0001ϗ\u0005櫆\"7ՑđđđđĐĐ\u0001˝\u0005\u001fđđđđđ1\u0004ճ߿Ο\u0005\u001f!ۏۏۏۏۏۏ\u0005Āݷݷݷݷݷݷ\u001fđф%\u0006\u0005櫆\u001f\u001d\u001cՑđđđ񴱜͇˝\u0001　\u0005\u001fđđđđđ\u0014Ȅ\u001c✇߿\u0005\u001f\u0014ԀĂ\u001cđđđđđđđđđ篟\u0005Āݷݷݷݷݷݷ%đ7\u0001ϗ\u0005櫆\"7ՑđđđđĐĐ\u0001˝\u0005\u001fđđđđđ1\u0004ճ߿Ο\u0005\u001f!ۏۏۏۏۏۏ\u0005Āݷݷݷݷݷݷ\u001fđф%\u0006\u0005櫆\u001f\u001d\u001cՑđđđ񴱜͇˝\u0001　\u0005\u001fđđđđđ\u0014Ȅ\u001c✇߿\u0005\u001f\u0014ԀĂ\u001cđđđđđđđđđ篟\u0005Āݷݷݷݷݷݷ%đ7\u0001ϗ\u0005櫆\"7ՑđđđđĐĐ\u0001˝\u0005\u001fđđđđđ1\u0004ճ߿Ο\u0005\u001f!ۏۏۏۏۏۏ\u0005đđŔđđđđđđŔđđđ\u001fđф%\u0006\u0005\u001f\u001d\u0010\u000bՑđđđ񴱜͇˝\u0001　\u0005\u001fđđđđđ\u0014Ȅ\u001c琜\u0005\u001f\u0014ԀĂ\u001cՑđđđđđđđđ\u0005Ā%đ7\u0001ǀ\u0005櫆\"7đđđđđđđđĐ\u0004　\u0005b\u0005\u0001\u0005bđđđđđđđđđĀ\u0001\u0005Āݷݷݷݷݷݷbϗ\u0005櫆bՑđđđđĐĐ˝\u0005\u001fđđđđđ+\u0006ճ߿Ο\u0005\u001f!ۏۏۏۏۏۏ\u0005Āݷݷݷݷݷݷ\u001fđф%\u0006\u0005櫆\u001f\u001d\u001cՑđđđ񴱜͇˝\u0001　\u0005\u001f\u0012Ȅ\u001c✇߿\u0005\u001f\u001cԀĂ\u001cđđđđđđđđđ篟\u0005Āݷݷݷݷݷݷ\u001f\u00057\u0001ϗ\u0005櫆\"7ՑđđđđĐĐ\u0001˝\u0005"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.SS2",
    "content": "Ǎ͗͗͗͗͗͗͗͗ԀݗďߟϕǕϟߏ\u0013ǧǇ\u0007͇퇭퇭Ǎݻ\u0014\b\u0004\u0001Āݷݷݷݷݷݷݷݷݑݑݑđđđđđ\u0014ЉР\u001f\u0005࠰ݾ߿݀櫆\u0014Ձ-篟݀΋Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđđ\u00140࿀ϗݻ\u0014&˝Āݷݷݷݷݷݷݷݷݑݑݑđđđđđ\u0014ЉР.Ο݀ݷ櫆\u0014Ձ$ٲ篟珀΋Ǎ͗͗͗͗͗͗͗͗ԀďߟϕǕϟߏ\u0013ǧǇ\u0007͇퇭퇭Ǎݻ\u0014\b\u0004\u0001Āݷݷݷݷݷݷݷݷݑݑݑđđ\u0014ЉР\u001f\u0005࠰ݾ߿݀櫆\u0014Ձ-篟݀΋Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđđ\u00140࿀ϗݻ\u00140˝Āݷݷݷݷݷݷݷݷݑݑݑđđđđđ\u0014ЉР.Ο݀ݷ櫆\u0014Ձ$ٲ篟珀΋Ǎ͗͗͗͗͗͗͗͗ԀďߟϕǕϟߏ\u0013ǧǇ\u0007͇퇭퇭Ǎݻ\u0014\b\u0004\u0001Āݷݷݷݷݷݷݷݷݑݑݑđđ\u0014ЉР\u001f\u0005࠰ݾ߿݀櫆\u0014Ձ-篟݀΋đđđŐđđđđđđđđđ\u00140࿀ϗ݈\u00140˝đđŔđđđđđđŔđđđđđđđđŔđđđđđđđŔđđđđđ\u0014ЉР.Ο݀ݷ\u0014Ձ$ٲ篟珀΋ĀĀďߟϕǕϟߏ\u0013ǧǇ\u0007͇퇭퇭Ǎݻ拢\u0014\b\u0004\u0001Āݑݑݑđđ\u0014ЉР\u001f\u0005࠰ݾ߿݀櫆\u0014Ձ-篟݀΋Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđđ\u00140࿀ϗݻ\u00140˝Āݷݷݷݷݷݷݷݷݑݑݑđđđđđ\u0014ЉР.Ο݀ݷ櫆\u0014Ձ$ٲ篟珀΋Ǎ͗͗͗͗͗͗͗͗ԀďߟϕǕϟߏ\u0013ǧǇ\u0007͇퇭퇭Ǎݻ\u0014\b\u0004\u0001Āݷݷݷݷݷݷݷݷݑݑ݄фф\u0014*ݾ߿݀櫆\u0014-篟΋Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014Ά-࿀ϗݻ,\u0004\u0004ۼ˝ĀݷݷݷݷݷݷݷݷݑݑđđĐđ)\u0004\u0004⣦⢰Ο݀櫆&\u0004аǼ񎾼ݾ"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.SS3",
    "content": "Ǎ͗͗͗͗͗͗͗͗ԀݗďߟϕǕϟߏ\u0013ǧǇ\u0007͇퇭퇭Ǎݻ\u0014\b\u0004\u0001Āݷݷݷݷݷݷݷݷݑݑݑđđđđđ\u0014ЉР\u001c⨲ݾ߿݀櫆\u0014Ձ\u001cđđđđđđđ篟΋Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđđ\u0014\u001c࿀ϗݻ\u0014\u001cՑđđđđđđđđĐ˝Āݷݷݷݷݷݷݷݷݑݑݑđđđđđ\u0014ЉР\u001cΟ݀櫆\u0014Ձ\u001cٲ篟珀΋Ǎ͗͗͗͗͗͗͗͗ԀďߟϕǕϟߏ\u0013ǧǇ\u0007͇퇭퇭Ǎݻ\u0014\b\u0004\u0001Āݷݷݷݷݷݷݷݷݑݑݑđđ\u0014ЉР\u001c⨲ݾ߿݀櫆\u0014Ձ\u001cđđđđđđđ篟΋Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđđ\u0014\u001c࿀ϗݻ\u0014\u001cՑđđđđđđđđĐ˝Āݷݷݷݷݷݷݷݷݑݑݑđđđđđ\u0014ЉР\u001cΟ݀櫆\u0014Ձ\u001cٲ篟珀΋Ǎ͗͗͗͗͗͗͗͗ԀďߟϕǕϟߏ\u0013ǧǇ\u0007͇퇭퇭Ǎݻ\u0014\b\u0004\u0001Āݷݷݷݷݷݷݷݷݑݑݑđđ\u0014ЉР\u001c⨲ݾ߿݀櫆\u0014Ձ\u001cđđđđđđđ篟΋đđđŐđđđđđđđđđ\u0014\u001c࿀ϗ݈\u0014\u001cՑđđđđđđđđĐ˝đđŔđđđđđđŔđđđđđđđđŔđđđđđđđŔđđđđđ\u0014ЉР\u001cΟ݀\u0014Ձ\u001cٲ篟珀΋ĀĀďߟϕǕϟߏ\u0013ǧǇ\u0007͇퇭퇭Ǎݻ拢\u0014\b\u0004\u0001Āݑݑݑđđ\u0014ЉР\u001c⨲ݾ߿݀櫆\u0014Ձ\u001cđđđđđđđ篟΋Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđđ\u0014\u001c࿀ϗݻ\u0014\u001cՑđđđđđđđđĐ˝Āݷݷݷݷݷݷݷݷݑݑݑđđđđđ\u0014ЉР\u001cΟ݀櫆\u0014Ձ\u001cٲ篟珀΋Ǎ͗͗͗͗͗͗͗͗ԀďߟϕǕϟߏ\u0013ǧǇ\u0007͇퇭퇭Ǎݻ\u0014\b\u0004\u0001Āݷݷݷݷݷݷݷݷݑݑ݄фф\u0014\u001c⨲ݾ߿݀櫆\u0014\u001cđđđđđđđ篟΋Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014Ά\u001c࿀ϗݻ,\u0004\u0004ۼ˝ĀݷݷݷݷݷݷݷݷݑݑđđĐđ)\u0004\u0004⣦⢰Ο݀櫆&\u0004аǼ񎾼ݾ"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.SS4",
    "content": "Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđđ\u0014\u001c࿀ϗݻ\u0014\u001cՑđđđđđđđđĐ˝Āݷݷݷݷݷݷݷݷݑݑݑđđđđđ\u0014ЉР\u001cΟ݀櫆\u0014Ձ\u001cٲ篟珀΋Ǎ͗͗͗͗͗͗͗͗ԀďߟϕǕϟߏ\u0013ǧǇ\u0007͇퇭퇭Ǎݻ\u0014\b\u0004\u0001Āݷݷݷݷݷݷݷݷݑݑݑđđ\u0014ЉР\u001c⨲ݾ߿݀櫆\u0014Ձ\u001cđđđđđđđ篟΋Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđđ\u0014\u001c࿀ϗݻ\u0014\u001cՑđđđđđđđđĐ˝Āݷݷݷݷݷݷݷݷݑݑݑđđđđđ\u0014ЉР\u001cΟ݀櫆\u0014Ձ\u001cٲ篟珀΋Ǎ͗͗͗͗͗͗͗͗ԀďߟϕǕϟߏ\u0013ǧǇ\u0007͇퇭퇭Ǎݻ\u0014\b\u0004\u0001Āݷݷݷݷݷݷݷݷݑݑݑđđ\u0014ЉР\u001c⨲ݾ߿݀櫆\u0014Ձ\u001cđđđđđđđ篟΋Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđđ\u0014\u001c࿀ϗݻ\u0014\u001cՑđđđđđđđđĐ˝Āݷݷݷݷݷݷݷݷݑݑݑđđđđđ\u0014ЉР\u001cΟ݀櫆\u0014Ձ\u001cٲ篟珀΋đđđŐđđđďߟϕǕϟߏ\u0013ǧǇ\u0007͇퇭퇭Ǎ݈\u0014\b\u0004\u0001đđŔđđđđđđŔđđđđđđđđŔđđđđđđݑđđ\u0014ЉР\u001c⨲ݾ߿݀\u0014Ձ\u001cđđđđđđđ篟΋ĀĀđđđđđđ\u0014\u001c࿀ϗݻ拢\u0014\u001cՑđđđđđđđđĐ˝Āݑݑݑđđđđđ\u0014ЉР\u001cΟ݀櫆\u0014Ձ\u001cٲ篟珀΋Ǎ͗͗͗͗͗͗͗͗ԀďߟϕǕϟߏ\u0013ǧǇ\u0007͇퇭퇭Ǎݻ\u0014\b\u0004\u0001Āݷݷݷݷݷݷݷݷݑݑ݄фф\u0014\u001c⨲ݾ߿݀櫆\u0014\u001cđđđđđđđ篟΋Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014Ά\u001c࿀ϗݻ,\u0004\u0004ۼ˝ĀݷݷݷݷݷݷݷݷݑݑđđĐđ)\u0004\u0004⣦⢰Ο݀櫆&\u0004аǼ񎾼ݾ΋Ǎ͗͗͗͗͗͗͗͗Ԁ~\u0013ՁĂWĀݷݷݷݷݷݷݷݷݑݑđđĐđđ\u0013W櫆\u0013W"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.SS5",
    "content": "Ǎ͗͗͗͗͗͗͗͗ԀݗďߟϕǕϟߏ\u0013ǧǇ\u0007͇퇭퇭Ǎݻ\u0014\b\u0004\u0001Āݷݷݷݷݷݷݷݷݑݑݑđđđđđ\u0014ЉР\u001c⨲ݾ߿݀櫆\u0014Ձ\u001cđđđđđđđ篟΋Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđđ\u0014\u001c࿀ϗݻ\u0014\u001cՑđđđđđđđđĐ˝Āݷݷݷݷݷݷݷݷݑݑݑđđđđđ\u0014ЉР\u001cΟ݀櫆\u0014Ձ\u001cٲ篟珀΋Ǎ͗͗͗͗͗͗͗͗ԀďߟϕǕϟߏ\u0013ǧǇ\u0007͇퇭퇭Ǎݻ\u0014\b\u0004\u0001Āݷݷݷݷݷݷݷݷݑݑݑđđ\u0014ЉР\u001c⨲ݾ߿݀櫆\u0014Ձ\u001cđđđđđđđ篟΋Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđđ\u0014\u001c࿀ϗݻ\u0014\u001cՑđđđđđđđđĐ˝Āݷݷݷݷݷݷݷݷݑݑݑđđđđđ\u0014ЉР\u001cΟ݀櫆\u0014Ձ\u001cٲ篟珀΋Ǎ͗͗͗͗͗͗͗͗ԀďߟϕǕϟߏ\u0013ǧǇ\u0007͇퇭퇭Ǎݻ\u0014\b\u0004\u0001Āݷݷݷݷݷݷݷݷݑݑݑđđ\u0014ЉР\u001c⨲ݾ߿݀櫆\u0014Ձ\u001cđđđđđđđ篟΋đđđŐđđđđđđđđđ\u0014\u001c࿀ϗ݈\u0014\u001cՑđđđđđđđđĐ˝đđŔđđđđđđŔđđđđđđđđŔđđđđđđđŔđđđđđ\u0014ЉР\u001cΟ݀\u0014Ձ\u001cٲ篟珀΋ĀĀďߟϕǕϟߏ\u0013ǧǇ\u0007͇퇭퇭Ǎݻ拢\u0014\b\u0004\u0001Āݑݑݑđđ\u0014ЉР\u001c⨲ݾ߿݀櫆\u0014Ձ\u001cđđđđđđđ篟΋Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđđ\u0014\u001c࿀ϗݻ\u0014\u001cՑđđđđđđđđĐ˝Āݷݷݷݷݷݷݷݷݑݑݑđđđđđ\u0014ЉР\u001cΟ݀櫆\u0014Ձ\u001cٲ篟珀΋Ǎ͗͗͗͗͗͗͗͗ԀďߟϕǕϟߏ\u0013ǧǇ\u0007͇퇭퇭Ǎݻ\u0014\b\u0004\u0001Āݷݷݷݷݷݷݷݷݑݑ݄фф\u0014\u001c⨲ݾ߿݀櫆\u0014\u001cđđđđđđđ篟΋Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014Ά\u001c࿀ϗݻ,\u0004\u0004\u000e˝ĀݷݷݷݷݷݷݷݷݑݑđđĐđ)\u0004\u0004\u0010Ο݀櫆&\u0004\u0007\u0004Ǽ񎾼ݾ"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.SS6",
    "content": "Ǎ͗͗͗͗͗͗͗͗ԀݗďߟϕǕϟߏ\u0013ǧǇ\u0007͇퇭퇭Ǎݻ\u0014\b\u0004\u0001Āݷݷݷݷݷݷݷݷݑݑݑđđđđđ\u0014ЉР\u001c⨲ݾ߿݀櫆\u0014Ձ\u001cđđđđđđđ篟΋Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđđ\u0014\u001c࿀ϗݻ\u0014\u001cՑđđđđđđđđĐ˝Āݷݷݷݷݷݷݷݷݑݑݑđđđđđ\u0014ЉР\u001cΟ݀櫆\u0014Ձ\u001cٲ篟珀΋Ǎ͗͗͗͗͗͗͗͗ԀďߟϕǕϟߏ\u0013ǧǇ\u0007͇퇭퇭Ǎݻ\u0014\b\u0004\u0001Āݷݷݷݷݷݷݷݷݑݑݑđđ\u0014ЉР\u001c⨲ݾ߿݀櫆\u0014Ձ\u001cđđđđđđđ篟΋Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđđ\u0014\u001c࿀ϗݻ\u0014\u001cՑđđđđđđđđĐ˝Āݷݷݷݷݷݷݷݷݑݑݑđđđđđ\u0014ЉР\u001cΟ݀櫆\u0014Ձ\u001cٲ篟珀΋Ǎ͗͗͗͗͗͗͗͗ԀďߟϕǕϟߏ\u0013ǧǇ\u0007͇퇭퇭Ǎݻ\u0014\b\u0004\u0001Āݷݷݷݷݷݷݷݷݑݑݑđđ\u0014ЉР\u001c⨲ݾ߿݀櫆\u0014Ձ\u001cđđđđđđđ篟΋đđđŐđđđđđđđđđ\u0014\u001c࿀ϗ݈\u0014\u001cՑđđđđđđđđĐ˝đđŔđđđđđđŔđđđđđđđđŔđđđđđđđŔđđđđđ\u0014ЉР\u001cΟ݀\u0014Ձ\u001cٲ篟珀΋ĀĀďߟϕǕϟߏ\u0013ǧǇ\u0007͇퇭퇭Ǎݻ拢\u0014\b\u0004\u0001Āݑݑݑđđ\u0014ЉР\u001c⨲ݾ߿݀櫆\u0014Ձ\u001cđđđđđđđ篟΋Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđđ\u0014\u001c࿀ϗݻ\u0014\u001cՑđđđđđđđđĐ˝Āݷݷݷݷݷݷݷݷݑݑݑđđđđđ\u0014ЉР\u001cΟ݀櫆\u0014Ձ\u001cٲ篟珀΋Ǎ͗͗͗͗͗͗͗͗ԀďߟϕǕϟߏ\u0013ǧǇ\u0007͇퇭퇭Ǎݻ\u0014\b\u0004\u0001Āݷݷݷݷݷݷݷݷݑݑ݄фф\u0014\u001c⨲ݾ߿݀櫆\u0014\u001cđđđđđđđ篟΋Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014Ά\u001c࿀ϗݻ,\u0004\u0004ᄑđđđđđĐ˝ĀݷݷݷݷݷݷݷݷݑݑđđĐđ)\u0004\u0004Ο݀櫆&\u0004ٲ篟珀"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.SS7",
    "content": "Ǎ͗͗͗͗͗͗͗͗ԀݗďߟϕǕϟߏ\u0013ǧǇ\u0007͇퇭퇭Ǎݻ\u0014\b\u0004\u0001Āݷݷݷݷݷݷݷݷݑݑݑđđđđđ\u0014ЉР!⨲ݾ߿݀櫆\u0014Ձ\"đđđđ篟΋Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđđ\u0014\"࿀ϗݻ\u0014\"ՑđđđđđĐ˝Āݷݷݷݷݷݷݷݷݑݑݑđđđđđ\u0014ЉР\"Ο݀櫆\u0014Ձ\"ٲ篟珀΋Ǎ͗͗͗͗͗͗͗͗ԀďߟϕǕϟߏ\u0013ǧǇ\u0007͇퇭퇭Ǎݻ\u0014\b\u0004\u0001Āݷݷݷݷݷݷݷݷݑݑݑđđ\u0014ЉР!⨲ݾ߿݀櫆\u0014Ձ\"đđđđ篟΋Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđđ\u0014\"࿀ϗݻ\u0014\"ՑđđđđđĐ˝Āݷݷݷݷݷݷݷݷݑݑݑđđđđđ\u0014ЉР\"Ο݀櫆\u0014Ձ\"ٲ篟珀΋Ǎ͗͗͗͗͗͗͗͗ԀďߟϕǕϟߏ\u0013ǧǇ\u0007͇퇭퇭Ǎݻ\u0014\b\u0004\u0001Āݷݷݷݷݷݷݷݷݑݑݑđđ\u0014ЉР!⨲ݾ߿݀櫆\u0014Ձ\"đđđđ篟΋đđđŐđđđđđđđđđ\u0014\"࿀ϗ݈\u0014\"ՑđđđđđĐ˝đđŔđđđđđđŔđđđđđđđđŔđđđđđđđŔđđđđđ\u0014ЉР\"Ο݀\u0014Ձ\"ٲ篟珀΋ĀĀďߟϕǕϟߏ\u0013ǧǇ\u0007͇퇭퇭Ǎݻ拢\u0014\b\u0004\u0001Āݑݑݑđđ\u0014ЉР!⨲ݾ߿݀櫆\u0014Ձ\"đđđđ篟΋Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđđ\u0014\"࿀ϗݻ\u0014\"ՑđđđđđĐ˝Āݷݷݷݷݷݷݷݷݑݑݑđđđđđ\u0014ЉР\"Ο݀櫆\u0014Ձ\"ٲ篟珀΋Ǎ͗͗͗͗͗͗͗͗ԀďߟϕǕϟߏ\u0013ǧǇ\u0007͇퇭퇭Ǎݻ\u0014\b\u0004\u0001Āݷݷݷݷݷݷݷݷݑݑ݄фф\u0014\u001f⨲ݾ߿݀櫆\u0014\"đđđđ篟΋Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014Ά!࿀ϗݻ,\u0004\u0004ᆙ昁˝ĀݷݷݷݷݷݷݷݷݑݑđđĐđ)\u0004\u0004Ì̳̳̳̳̲̰Ο݀櫆&\u0004Âٲ篟珀"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.SSEX",
    "content": "\u001fđđđđđ\u0014Ȅ\u001c✇߿\u0005\u001f\u0014ԀĂ\u001cđđđđđđđđđ篟\u0005Āݷݷݷݷݷݷ%đ7\u0001ϗ\u0005櫆\"7ՑđđđđĐĐ\u0001˝\u0005\u001fđđđđđ1\u0004ճ߿Ο\u0005\u001f!ۏۏۏۏۏۏ\u0005Āݷݷݷݷݷݷ\u001fđф%\u0006\u0005櫆\u001f\u001d\u001cՑđđđ񴱜͇˝\u0001　\u0005\u001fđđđđđ\bȀ\u001cظ\u0005\u001f\bđđđđđ1\u0007\u0004\u0005Āݷݷݷݷݷݷ%đ\b!ۏ\u0005櫆\"\bđф%\u0006˝\u0005\u001fđđđđđ1\u0007\u0005ճ߿Ο\u0005\u001f!ۏۏۏۏۏۏ\u0005Āݷݷݷݷݷݷ\u001fđф%\u0006\u0005櫆\u001f\u001d\u001cՑđđđ񴱜͇˝\u0001　\u0005?ȅ\u001c✇߿\u0005?ՁĂ\u001cđđđđđđđđđ篟\u0005Āݷݷݷݷݷݷ?\u001c\u0001ϗ\u0005櫆?\u001cՑđđđđĐĐ\u0001˝\u0005\u001fđđđđđğݘݚח\u0004ճ߿Ο\u0005\u001f\u0007\u0007\u0007\u0006ʟ߿ۏۏۏۏۏۏ\u0005đđŔđđđđđđŔđđđ\u001fđфđđ#\u0006\u0005\u001f3ջ񴱜͇˝\u0001　\u0005\u001fđđđđđđ3݈ݪ߿\u0005\u001f3ջđđđđđđ\u0005Ā\u001fđđđđđđ3ݪ\u0005櫆\u001f\u0001ֺֺֺֺֺֺ\u0001đđđđđđđđđ\u0005\u001cđđđđđ\u0014\u001c\u0001\u0005\u001c\u0014ՁĂ\u001cđđđđđđđđđđđĐ\u0005Āݷݷݷݷݷݷ\u001cđđđđđđ\u0014\u001cǗ\u0005櫆\u001c\u0014\u001cՑđđđđĐĐ⌹˝\u0005\u001cđđđđđ7ճ߿Ο\u0005\u001c!\u0004ۏۏۏۏۏۏ\u0005Āݷݷݷݷݷݷ\u001cđф%\u0006\u0005櫆\u001c\u001d\u0015\u0004Ցđđđ񴱜͇˝\u0001　\u0005\u001c\u0012Ȅ\u0015\u0004✇߿\u0005\u001c\u001cԀĂ\u0015\u0004đđđđđđđđđ篟\u0005Āݷݷݷݷݷݷ\u001c\u00050\u0004\u0001ϗ\u0005櫆\u001c0\u0004ՑđđđđĐĐ\u0001˝\u0005\u0004ՑđđđđĐĐ\u0001˝\u0005\u0005"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.TEMPLATE",
    "content": "\"đđđđ0~đđđĐ2~6~Đ9Jđđđđ0~đđđĐ2~6~Đ9Jđđđđ0~đđđĐ2~6~Đ9JĀ~đđđ\u0012\u0013ĐĀ~đđđ\u0012\u0013Đd"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.TEMPO",
    "content": "đđđđđđđđđđđ旝đđđđđđđđđđđ旝đđđđđođđĐđđđđđđŔđđđđđđđŔ\u0005\u0004V\u0004Őđ\u000b\u0005V\u0004\u0001Ǎ͗͗͗͗͗͗͗͗Ԁ\u0005\u0004\u0005P\u0004\u0004\u000b\u0005W\u0004\fĀݷݷݷݷݷݷݷݷݑݑ݈\u0001\u0005\u000b\u0005\u0005\u0001АԐА4\u0004\u0004\u0001櫆Đ\u0011\u0004VǍ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0011\u0004#\u0005\u0005\u0005\u0005\u0005\u0004\u0011\u0004#ĨĨĂĨĂĨĂĨĂĨĂĀݷݷݷݷݷݷݷݷݑݑđđđđđđ\u0011\u0004#¢ň櫆\u0011\u0004#\u0004(\bǍ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0011\u0004#\u0005\u0005\u0005\u0005\u0005\u0005\u0006\u0011\u0004#ŭŃĂŭŃĂŭłĨĂĀݷݷݷݷݷݷݷݷݑݑđđđ\u0001\u0004\t\u0018ãǎ櫆\u0005\u000b\u0004\u0004\u0004\u0018)\u0004\tǍ͗͗͗͗͗͗͗͗Ԁđđđđđ<\u0005\u0005\u0005\u0005\u0005\u0005\u0006\u001e\u001dĨĂūłĨĂūłĨĂūłĀݷݷݷݷݷݷݷݷݑݑđđđđđđ\u0012\u0005\u0005\u0001\u0004ؘА\rգգãקǎ櫆<)\u0004\tǍ͗͗͗͗͗͗͗͗Ԁđđđđđr<3ĀݷݷݷݷݷݷݷݷݑݑđđđđđĐĐĐĐĐĐĐĕЀĐĐĐĐĐĐĐĕЀĐĐĐĐĐĐđĐĐĐĐĐĐĐĕЀĐĐĐĐĐĐĐĕЀĐĐĐĐĐ櫆\u0012\u0013\u0010\u0012\u0013\u000eǍ͗͗͗͗͗͗͗͗ԀĐфффĐфффĀݷݷݷݷݷݷݷݷݑݑ܀܀櫆Ǎ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗ԀĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑ݀櫆櫆櫆"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.TEST",
    "content": "ĐфффǍ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗Ԁ܀ĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑ0櫆櫆旝đđđđđđđđđđđ旝đđđđđođđĐđđđđđđŔđđđđđđđŔ\u0005\u0004V\u0004Őđ\u000b\u0005V\u0004\u0001Ǎ͗͗͗͗͗͗͗͗Ԁ\u0005\u0004\u0005P\u0004\u0004\u000b\u0005W\u0004\fĀݷݷݷݷݷݷݷݷݑݑ݈\u0001\u0005\u000b\u0005\u0005\u0001АԐА4\u0004\u0004\u0001櫆ĐoǍ͗͗͗͗͗͗͗͗Ԁđđđđđğ3ۻۻۻۻۻ߻ջ3ĀݷݷݷݷݷݷݷݷݑݑđđđđđđĀݪ3櫆ջ3Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđđ̪̪̪̪̪̪̪̪̪̪̪̪݈ݪ3ճճճճճճճճճճճճջ3ĀݷݷݷݷݷݷݷݷݑݑđđđğǓőǃ积ﯯﭭ\u0004߯痢Օ禦禥禦ݪ3櫆\u0004ֺֺֺ\u00013Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđr\u001eSĀݷݷݷݷݷݷݷݷݑݑđđđđđđ\u0012\u0005\u0005\u0001\u0004ؘАC櫆rǍ͗͗͗͗͗͗͗͗Ԁđđđđđr<3ĀݷݷݷݷݷݷݷݷݑݑđđđđđĐĐĐĐĐĐĐĕЀĐĐĐĐĐĐĐĕЀĐĐĐĐĐĐđĐĐĐĐĐĐĐĕЀĐĐĐĐĐĐĐĕЀĐĐĐĐĐ櫆\u0012\u0013\u0010\u0012\u0013\u000eǍ͗͗͗͗͗͗͗͗ԀĐфффĐфффĀݷݷݷݷݷݷݷݷݑݑ܀܀櫆Ǎ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗ԀĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑ݀櫆櫆櫆"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.TEST2",
    "content": "ĀĀĀĀܑĀܑĀܑݮ0\u0017\u0007\u0010đđđđđ0Āđđđđđ\u0007\u0004\u0007\u0007݁\u000b0\u000f\u0007\u0007\u0010đđđđđđ0Āܑđđđđđđ\u000f\u0007Ր\u0015ݮ00đđđđđĀĀđđđđđ00đđđđđ\u0012\u0013\u000bĀܑđđđđđđ0ݮ\u0017\u0007\u0010Āđđđđđ\u0007\u0004\u0007\u0007݁\u000b\u000f\u0007\u0007\u0010Đđ0Āܑđđđđđđ\u000f\u0007Ր\u0015ݮI0đđđđđđđŔőőőőőőőőŔđđđđđđđŔЀĀđđđđđ0໮0܀đđđđđđŔđđđđđđđđŔđđđđđđđŔđđđ\u0012\u0013\u000bđđđđđđ00ĀđđđĐ26Āܑđđđđđđ0Đ9\u0017\u0007OĀđđđđđ\u0007\u0004\u0007\u0007݁J\u000f\u0007\u0007OĀܑđđđđđđ\u000f\u0007ՐT\u0004\u0005\t\u0004KĀđđđđĀ\u0007𰰰\u0004\u0004\u0004ࠨ\u0006B\u0012\u0005\u0005\u0001АՕBĀܑđđđđđđooĀđđđđđ\u001eP\u0012\u0005\u0005\u0001ԔAĀܑđđđđđđo\u00190\u0004ĀđđđĐđđđđđđŔőőőőőőőőŔđđđđđđđŔЀ\u0004\u0004\u0004\u0004\u0004\u0004Ԕ\u0004\u0004\u0004\u0004\u0004憆ĀܑĐđđđđđđŔđđđđđđđđŔđđđđđđđŔĝ̝͗̌̌̌̌̌̌\u0017"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.TEXT",
    "content": "\u0004\u0004\u0005\u0019\rՀ\u0006Հ\r\u000f?\u00177Հ涞澀\u000fՀՀ?\rՀ7\u0001\u0001\u000f\u0006?\u0001\u0001\u00057Հ\u0005怀\u000fՀՀ?Հ\u0006怀\u0006Հ7\u0005漀\u000f簀瀀!\r\r\u0001 \u00067Հ\u000fՀՀ!\rՀ\rՀ\u0006\u0006Հ7瀀\u000f\u0005!\r\r쀀7Հ̀\u000fՀ䶷Հ!\rՀ\rՀ\u0005\u0004\u0004Հ7\u0005\u000f\r\u0006\r\r\rǀ7Հ\u000fՀՀ\r\r\rՀ\rՀ\u0005Հ7지\u000f\u0007\r\r\r\r\u00057Հ\u0006쀀\u000f\rՀ\r𘙘\r\rՀ\rՀ\u0006Հ7\u0005\u000f\r\r\r\r\r\r7\t၁\u000f\rԀ\r\u0006\r\rԀ\r\u0017Ԁ\u000e\u0001"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.TIN",
    "content": "ĐфффǍ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗Ԁ܀ĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑ0櫆櫆旝đđđđđđđđđđđ旝đđđđđođđĐđđđđđđŔđđđđđđđŔ\u0005\u0004V\u0004\u000b\u0005V\u0004\u0001Ǎ͗͗͗͗͗͗͗͗Ԁ\u0006\u0004\u0005P\u0004\u0004\u000b\u0005W\u0004\fĀݷݷݷݷݷݷݷݷݑݑ\u0005\u000b\u0005\u0005\u0001АԐА4\u0004\u0004\u0001櫆oǍ͗͗͗͗͗͗͗͗Ԁđđđđđ/\u0003/Āݷݷݷݷݷݷݷݷݑݑđđđđđđđ\u000b\u0012\u000b/櫆\u000b'/Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđđđ\u000b\u0001\n\r\u0005\b/\u0001\u000b\u0014\n/Āݷݷݷݷݷݷݷݷݑݑđđđđđđ/櫆\u0003/Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđr\u001eSĀݷݷݷݷݷݷݷݷݑݑđđđđđđ\u0012\u0005\u0005\u0001\u0004ؘАC櫆rǍ͗͗͗͗͗͗͗͗ԀđđĔÆ\u0007N\u0004\t\u0003\u00184ĀݷݷݷݷݷݷݷݷݑݑđđđԁА\u0004АаАаđđ\u0005đŇ#\u0004櫆1!\u0004Ǎ͗͗͗͗͗͗͗͗ԀĐđĐđĐđ1!Āݷݷݷݷݷݷݷݷݑݑ܀đф%\u0006櫆8Ǎ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗ԀĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑ݀櫆櫆櫆"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.TORCHSETS",
    "content": "đđđđđđđđđđđ旝đđđđđđđđđđđ旝đđđđđQVʢʢ\u0012VđđĐđđđđđđŔđđđđđđđŔ\u0005\u0004\u0004ӋӣK\u0004Őđ\u000b\u0005V\u0004\u0001Ǎ͗͗͗͗͗͗͗͗Ԁ\u0005\u0004\u0005P\u0004\u0004\u000b\u0005\u000bE\u0004\fĀݷݷݷݷݷݷݷݷݑݑ݈\u0001\u0005\u000bF\u0004\u0004\u0001櫆Đ\u0012ՁĂVǍ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0012#\u0005\u0005\u0005\u0005\u0005\u0004\u000eĠր\u0014ĨĨĂĨĂĨĂĨĂĨĂĀݷݷݷݷݷݷݷݷݑݑđđđđđđ\u000e\u0005\u0012¢ň櫆\u000eАЕĨА\u001f\u0004(\bǍ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0012#\u0005\u0005\u0005\u0005\u0005\u0005\u0006\u0012Ԅ#ŭŃĂŭŃĂŭłĨĂĀݷݷݷݷݷݷݷݷݑݑđđđ\u0001\u0004\t\u0018ãǎ櫆\u0005\u000b\u0018)\u0004\tǍ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0012#\u0005\u0005\u0005\u0005\u0005\u0005\u0006\u000eĠԀ\u0005\u0004\u0014ĨĂūłĨĂūłĨĂūłĀݷݷݷݷݷݷݷݷݑݑđđđđđđ\u000e\u0012գգãקǎ櫆\u000eАЕĨА\u001f)\u0004\tǍ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0012Y\u0012Մ#3ĀݷݷݷݷݷݷݷݷݑݑđđđđđĐĐĐĐĐĐĐĕЀĐĐĐĐĐĕЀĐĐĐĐĐĐđĐĐĐĐĐĐĐĕЀĐĐĐĐĐĐĐĕЀĐĐĐĐĐ櫆\u0012\u0013\u0010\u0012\u0013\u000eǍ͗͗͗͗͗͗͗͗ԀĐфффĐфффĀݷݷݷݷݷݷݷݷݑݑ܀܀櫆Ǎ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗ԀĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑ݀櫆櫆櫆ݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑ݀櫆櫆櫆"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.VIZMODEL",
    "content": "111)1Հ\u0005\u0004\u0005\u001bՀ*)1\u0006\u000b\u0002\u000b\u0001\u0004\u0005\u0005\u000bꊂ\u001fՀ,Ճ\u0005\u0005\u0001\n\u0004\u0005\u0005\u0001\u0001\n\u0005ח\b\u0005\u0005ꪊ*\u0001ࠠ\u0006\u001d\u0005ʪ\u0004\u0015\u0005޾\u0004\u0005Հ\u0005Օ'Հ\u0004\u0004\u001b\t#ՀՕ\u0010ե\u0005\u0001&\u0007\u0002\u000b1\u0001\u0004!ժ₃#Ճ\u0006ŕן\u0005\u0001\u0001\nՀ\u0001\u000e\u0019)\u0001#\u0001\u0004\u0006\u001d\u0004\n\u0006\f)Հ$1\u0004\u0005\u0005\u0004\fՀ \u0004+\u0005\u0017\b\nа\u000f\u0004\u00131Հ\u0018\f\u0004)Հ\u0004\u0001痕\u000e1ʊ\u0004\u0001\u0002\f1\u0004߿\u0005\u0001\u0004Հ&\b\u0007\u0017Հ\u0001(ՃՕ\u0004\u0004ਨ\u0004\u0005\u0005\u0017\u0015\u001a\u0004\n\f%\u0005\u0004\u0016Հ)\u0007\b\fՀ!\u0006\u0005\u0007\u0017\u0018ꪪ\u0007\u0013\u0006\u0011Հ\b\u001aՀ\u0005\r\r\u0001\u0004\t\u0018Հ\u0005\u000e*\u0005\u0006\r1\u0003\u0005\u0002\u0004\t1՟\u0005\f߇\u0011Հ(՟\u0004\u0007\u0001\u0001\b\u0005\u0006\u0017\u001c\u000e\u0004\u000b\f\u0014\u000eՀ\u0004ŕ\u0004믿\f1Հ\u0002\u0005\u0001\u000b\u0019\u000e\u0005\b\u0001\u000b\u0006\u0007\b\u0005\u0011\u0004\u0004\u001b!\u000b\u0011ښ\u0010Ձ\b\u0006\u0006\u0007վ\u0004)Հ\u00121ਨ\u0006\u0004\u0007Ѐਨ\u00071\u0005\u0004\u0002\u0006Հ\u000b\u0004\u001c\n\u001fՀ*\u0005\u0005\u0001\u0005說\u0004\u0001\u000e1\u0005\b\u0005\u001c\u0006\u000b\rռ\u0004\u0005\u0005\u0001\u0004\u0001\rՀ(Հ\u0002\u0005\u000b\u000f\u0016\u000f\u0019\u000e\u0004\u0006\"\u0001\u0005\u0006\u0001\u0001\u000e%1\u0004\u0004\u0005\u0004\u0004\n՟\u0006\t\u0005\u000fՀß\u001d\u0001\u0004\u0004\u001b\u0006\u0004\u0004\u0005\u0002\n\u0017\u0017\u0003\u0006\u0004\u0004Հ\u0004Օ\u0002\u0004\f՟\b\u0004\u001aՀ\u0001\u0006\u0005\u001a\u0005\u0005\u0005\u0004\u0006\u0004\u0007\u0001\f.\u0005\u0005\u0001\u0002\u000b\u0005\u0004\u0005\f\u0018\u0016Ռ)Ճ\u0005ŕן\u0005\u0001\nՀ&*\u0004\n\u0004\f\u0001ࠠ\u0006\u001c)\u0004\u0004\u001d\u0004\u0006\u0004\u0001\u0001\u0001\u0004\u000bՀ&Հ\u0001!\u0005\u0007\u0002\r\u0005\u0005\u0005\u0004\f\u0006\u000b\u0004\n\r\u0004\u0006\u0004訨\rՀ\t\u001fՀ\u0001\u0004ו\u0004\u0001\u0001\u0004\tՁ\u0004\u0005\u0004\u0001\u0005\u0018\u0016\u0004+\u0001\u0005\t\n\n\u0004\f111\u0012\u0004\u0011(\u0004\"1Հ,Հ.)\u0011\f111\u0012\u0004\u0011"
  },
  {
    "path": "04 Support/DRAZ/IP/PAC.WITE",
    "content": "đđđđđđđđđđ旝đđđđđđđđđđ旝đđđđđmđđĐđđđđđđŔđđđđđđđŔ\u0005VߟŐđ\u000b\u0005U\u0001Ǎ͗͗͗͗͗͗͗͗Ԁ\u0005\u0004\u0004O\u0004\u0004ߟ\u000b\u0004W\fĀݷݷݷݷݷݷݷݷݑݑ݈\u0001\u0005\t\n\u0001חՓח2\u0004\u0001櫆ĐnǍ͗͗͗͗͗͗͗͗Ԁđđđđđğ2ۻۻۻۻۻ߻ջ2ĀݷݷݷݷݷݷݷݷݑݑđđđđđđĀݪ2櫆ջ2Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđđ̪̪̪̪̪̪̪̪̪̪̪̪݈ݪ2ճճճճճճճճճճճճջ2ĀݷݷݷݷݷݷݷݷݑݑđđđğǓőǃ积ﯯﭭ\u0004߯痢Օ禦禥禦ݪ2櫆\u0004ֺֺֺ\u00012Ǎ͗͗͗͗͗͗͗͗ԀđđđđđĀq\u001c\u0003\b\u0005EĀݷݷݷݷݷݷݷݷݑݑđđđđđđ\u0010\nۙӗB櫆qǍ͗͗͗͗͗͗͗͗ԀđđđđđĀqqĀݷݷݷݷݷݷݷݷݑݑđđđđđĐĐĐĐĐĐĐĕЀĐĐĐĐĐĐĐĕЀĐĐĐĐĐĐđĐĐĐĐĐĐĐĕЀĐĐĐĐĐĐĐĕЀĐĐĐĐĐ櫆\u0012\u0013\u0010\u0012\u0013\u000eǍ͗͗͗͗͗͗͗͗ԀĐфффĐфффĀݷݷݷݷݷݷݷݷݑݑ܀܀櫆Ǎ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗ԀǍ͗͗͗͗͗͗͗͗ԀĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑĀݷݷݷݷݷݷݷݷݑݑ݀櫆櫆櫆"
  },
  {
    "path": "04 Support/DRAZ/IP/PAL1",
    "content": "ݻݻݻݻݻݻݻݻݫݫݫݫ݀Āéݻݻݻݻݻݻݻͻͻͻͻ͈̇ĈĀĀéЀͻͻͻͻͻͻͻͻ̀ͻͻͻͻ͈䆀ĀĀéĀͻͻͻͻͻͻͻͻ̀ЀЀЀЀЈćĀĀ胀éݸݸݸݸݸݸݸݸݸݺݺݺݺݺǆЀЀ菀éݺݺݺݺݺݺݺݺݺݺݺݺݺݺ͆ňĀĀéݺݺݺݺݺݺݺݺݺݫݫݫݫ݈󆀀ĈĀéݫݫݫݫݫݫݫݫ݀ݫݫݫݫ݈ĀĈфĈшĢĈĈĢĈݫݫݫݫݫݫݫݫ݀ݫݫݫݫݨĈݫݫݻݻݻݻݻéĀݻݻݻݻݻĈͣݻݻáݻݻݻݻݻݻݻݻݻݻݻݻݻݻ̇ݻݻáȀĀݻݻݻݻݻݻݻݻݻĈĈĈĈĢ䆀ݻݻ胀áĀݻݻݻݻݻݻݻݻ݀ݻݻݻݻݢćݻĈݻ쏀áĀݻݻݻݻݻݻݻݻ݀ݻݻݻݻ݂ňǆáĀݻݻݻݻݻݻݻݻ݀ݻݻݻݻݻĈ͆ĈݻṀݻèݻݻݻݻݻݻݻݻݻݻݻݻݻݻĀ橃ĈݻݻĻנĈĈĈݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻĈĀïԈԈԈԈԈԈԈԈԀͻͻͻͻ͈⼆Ĉïͻͻͻͻͻͻͻͻ̀ͻͻͻͻ͈ϣĀĀïͻͻͻͻͻͻͻͻ̀ݸݸݸݸݸ̇ĀĀ胀ïݺݺݺݺݺݺݺݺݺݺݺݺݺݺ䆀ĀĀ쏀ïݺݺݺݺݺݺݺݺݺݺݺݺݺݺćĈĀĀïݫݫݫݫ݈ǆĈ㋈ĀӪĈĀݫݫݫݫݫݫݫݫ݀ݫݫݫݫ݈Ĉ̣ĈĈ׀ĈĢĈݫݫݫݫݫݫݫݫ݀Ĉ󆀀ܻܻëĀݻݻݻݻݻݻݻݻݻݻݻݻݻݻĈۇݻݻëЀݻݻݻݻݻݻݻݻݻݻݻݻݻݻ⼆ݻݻëĀݻݻݻݻݻݻݻݻݻݻݻݻݻݢϣݻݻ臀ëĀݻݻݻݻݻݻݻݻ݀ݻݻݻݻݢ̇ݻݻ샀ëĀݻݻݻݻݻݻݻݻ݀ݻݻݻݻݨĈ䆀ݻݻëĀݻݻݻݻݻĈćĈݻ룢ݻĨ݈ǀĈݻݻݻݻݻݻݻݻݻݻݻݻݻݻΫĠݻ܈ݻĻ蝠ĈĈĈݻݻݻݻݻݻݻݻݻԈԈԈԈԈ͆ĈԀĀ󨃀ͻͻͻͻͻͻͻͻ̀ͻͻͻͻ͈󆀀ĀЀЀ󨃀ͻͻͻͻͻͻͻͻ̀ͻͻͻͻ͠ۇĀĀ󨃀ݺݺݺݺݺ⼆ĀĀ臀󨃀ݺݺݺݺݺݺݺݺݺݺݺݺݺݺϣĀĀ󨃀ݺݺݺݺݺݺݺݺݺ̇ĈĀĀ󨃀ĈѢĈѢĈѢĈѢĈѢĈѢĈѢĈѢĈрݫݫݫݫ݈䆀ĈшшĨĠѠĢĈݫݫݫݫݫݫݫݫ݀ݫݫݫݫ݈󨃀ĈĜĈĠĈĈĢĈݫݫݫݫݫݫݫݫ݀ݻݻݻݻݻĈǆݻ𐀀ݻߩĀݻݻݻݻݻݻݻݻݻݻݻݻݻݻĀ͆ݻݻߩĀݻݻݻݻݻݻݻݻݻݻݻݻݻݻ󆀀ߩĀݻݻݻݻݻݻݻݻݻǀݻݻݻݻݢۇݻݻ臀ߩݻݻݻݻݻݻݻݻ݀ݻݻݻݻݢ⼆ݻݻߩĀݻݻݻݻݻݻݻݻ݀ĈϣݻݻߩĀݻݻݻݻݻݻݻݻݻݻݻݻݻݻĈ̃ĈݻݻĠѻĈݻݻݻݻݻݻݻݻݻݻݻݻݻݻܩĀݻĈĈĈĀ❢ĈĈĈݻݻݻݻݻݻݻݻݻݻͻͻͻͻ͈ćĈĀĀǩͻͻͻͻͻͻͻͻ̀ͻͻͻͻ͈ǆĀĀǩͻͻͻͻͻͻͻͻ̀͆ĀĀǩЀЀЀЀЀЀЀЀЀݺݺݺݺݺ󆀀臀ǩݺݺݺݺݺݺݺݺݺݺݺݺݺݺۇЈĀĀǩݺݺݺݺݺݺݺݺݺĈѢĈѢĈѢĈѢĈш⼆ĈĀǩݫݫݫݫݫݫݫݫ݀ݫݫݫݫ݈ϣĈшǈшŠĈĢĈݫݫݫݫݫݫݫݫ݀ݫݫݫݫ݈ĀǩݻݻݻĈݛݻݻݻݫݫݫݫݫݫݫݫ݀ݻݻݻݻݻĈٹ䆀ݻݻĀݻݻݻݻݻݻݻݻݻݻݻݻݻݻćݻݻԀĀݻݻݻݻݻݻݻݻݻݻݻݻݻݻǢǆݻݻĀĈĈĈĈĈĈĈĈĀݻݻݻݻݢ͆ݻݻ菀Ѐݻݻݻݻݻݻݻݻ݀ݻݻݻݻݢЈ󆀀ݻݻĀݻݻݻݻݻݻݻݻ݀ݻݻݻݻݻĈۇݻݻĀݻݻݻݻݻݻݻݻݻݻݻݻݻݻĈ⼃Ĉݻ瑢ݻĈ׈ĈݻݻݻݻݻݻݻݻݻݻݻݻݻݻĀݻݻݻݻݻݻݻݻݻݻݻ"
  },
  {
    "path": "04 Support/DRAZ/IP/PROOM",
    "content": "ݻݻݻݻݻݻݻݻݻݻÃӆݻݻݻݻݻݻݻݻݻІͻͻͻͻͻͻͻͻͻ̀ІԀͻͻͻͻͻͻͻͻͻ̀ІˀݸݸݸݸݸݸݸݸݸݸϟϟǇϟϟІݺݺݺݺݺݺݺݺݺݺ۳۳Ĉ۳۳ ІߊݺݺݺݺݺݺݺݺݺݺۧۂĈۂĈĈۂĈۂĈІ迨ݫݫݫݫݫݫݫݫݫ݀ܦ۠Ĉ۠ĈĈ۠Ĉ۠ĈĈĈňĈĈĈĈĈĈīݫݫݫݫݫݫݫݫݫ݀ӆІݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻ݀ІԀݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻ݀Іݻݻݻݻݻݻݻݻݻ݀ׯ߾ׯ߾߾ׯ߾ׯ߀Іݻݻݻݻݻݻݻݻݻ݀͆ՁĈՁĈȻՁĈՁĈІߪݻݻݻݻݻݻݻݻݻ݀ĈĈĈĈĈІĈݻݻݻݻݻݻݻݻݻݻӆπĈπĈĈπĈπĈĈĈĈĈĈĈݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻцԈԈԈԈԈԈԈԈԈԀІͻͻͻͻͻͻͻͻͻ̀ІЀЎͻͻͻͻͻͻͻͻͻ̀Γȓȓȓœ苢ȓȓȓݺݺݺݺݺݺݺݺݺݺسΝٳΝ칎ĈΝٳΝٳ΀ІꃨݺݺݺݺݺݺݺݺݺݺǦĈІߪͦߛĈߛĈĈߛĈߛĈĈĈğĈĈĈĈĈīݫݫݫݫݫݫݫݫݫ݀І۠ժժ۠ժժժժ۠ժժ۠ժժĈѿĨĈѿĈĈĈѿĈĈѿĈīݫݫݫݫݫݫݫݫݫ݀цݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻ݄Іݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻ݀ІІݻݻݻݻݻݻݻݻݻݻІݻݻݻݻݻݻݻݻݻ݀޼ތĈ޼޼倀Іݻݻݻݻݻݻݻݻݻ݀ćĈĈĈĈĈІߪǆĈĈĈĈĈĀĿĨĈѿĈĿĈĿĈݻݻݻݻݻݻݻݻݻݻ߆ππππĈĿĠĿĈĈĿĈĿĈݻݻݻݻݻݻݻݻݻݻцͻͻͻͻͻͻͻͻͻ̀Іͻͻͻͻͻͻͻͻͻ̀ІЂޛޛޛޛІˀݺݺݺݺݺݺݺݺݺݺۿۿ‑ĈۿۿІݺݺݺݺݺݺݺݺݺݺ䦜ۙۙĈۙۙІĈѢĈѢĈѢĈѢĈѢĈѢĈѢĈѢĈѢĈрħߛĈߛĈĈߛĈߛĈĈѿĈĿȚѿĈĈѿĈīݫݫݫݫݫݫݫݫݫ݀׆ۀۀۀۀĈĢĈĈĈĈĈĈĈĀثݫݫݫݫݫݫݫÇހݻݻݻݻݻݻݻݻݻ݌цԀݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻ݀ІݻݻݻݻݻݻݻݻݻݻІݻݻݻݻݻݻݻݻݻݻǀЮժΪժժժΪժպ˪ΪժժժΪժժݻݻݻݻݻݻݻݻݻ݀ߎ߹ĈߎߎІݻݻݻݻݻݻݻݻݻ݀̇ĈĈĈĈĈІݻݻݻݻݻݻݻݻݻݻ䆑ĈĈĈĈĈğĢĈÈĈѿğĈğĈݻݻݻݻݻݻݻݻݻݻцππππĈĈݻĈĈĈĈĈĈĈݻݻݻݻݻݻݻݻ߀ІԀͻͻͻͻͻͻͻͻͻ̀Іͻͻͻͻͻͻͻͻͻ̀ІЀЀЀЀЀЀЀЀЀЀΝΝΝΝ쀀ІݺݺݺݺݺݺݺݺݺݺΘĈІ߀ݺݺݺݺݺݺݺݺݺݺϣۄĈۄĈĈۄĈۄĈІݫݫݫݫݫݫݫݫݫ݀ܧۡĈۡĈĈۡĈۡĈĈĈшĈĈĈīݫݫݫݫݫݫݫݫݫ݀ӆۀۀۀۀݻݻݻݻݻݻݻݻݻثݫݫݫݫݫݫݫ߀ݻݻݻݻݻݻݻݻݻ݌ІݻݻݻݻݻݻݻݻݻݻІݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻ݀ЮժΪժժժΪժպߪΪժժժΪժժĈĈĈĈĈĈĈĈĈĀʗ޼˗޼˗޼˗޼˗ހІݻݻݻݻݻݻݻݻݻ݀ǜ圠Ĝ冢Ĉĸ圠Ĝ圠ĜІ߂ݻݻݻݻݻݻݻݻݻ݀⼆φĈφĈĈφĈφĈІ࿨ݻݻݻݻݻݻݻݻݻݻϣρĈρĈĈρĈρĈĎĈĈĈĎĈĎĈݻݻݻݻݻݻݻݻݻݻӆψψψψݻݻݻݻݻݻݻݻݻƇ"
  },
  {
    "path": "04 Support/DRAZ/IP/TEST",
    "content": "ݻݻݻݻݻݻݻĀ̙˘ݻݻݻݻݻݻݻݻ͈ݻݻĀԀ̙˘ݻͻͻͻͻͻͻ͈ݻ͈ݻݻĀ꿳̙띀Ժݻͻͻͻͻͻͻ͈ݻЈݻЈĢĀ̙ۚݸݸݸݸݸݸݸݻݺݻݺݢЀ̙ݺݺݺݺݺݺݺݻݺݻݺ݂Ā̙ݺݺݺݺݺݺݺ݈ݻݻĀؚݻݫݫݫݫݫݫ݈ݻ݈ݻĈĘݻшĈĈĈĈݻݫݫݫݫݫݫ݈ĈĈݻݻĀݫݫݫݻݻժժ˘ݻĈݻĀݻ͈ݻժժ˘ݻݻݻݻݻݻݻĈݻĀݻ͈ݻժժ˘ݻݻݻݻݻݻݻĢĀݸݻժժ띀ݸݻݻݻݻݻݻݢݢЀݺݻժժۚݺݻݻݻݻݻݻݢ݂ĀݺժժݺݻݻݻݻݻݻݨĈݻĀݻ݈ݻǈݻݻݻݻݻݻݻĈĈĈݻшĈĘݻ݈ݻĈĈĈĈŀݻݻݻݻݻݻݻĈĈݻݻݻݻݻݻĀ̙띀ԈԈԈԈԈԈԈܻ͈ݻݻ̙˘кݻͻͻͻͻͻͻ͈ݻ͈ݻݻĀ̙˘кݻͻͻͻͻͻͻ͠ݻݸݻݸݢĀ̙˘ݺݺݺݺݺݺݺݻݺݻݺݢĀ̙띀ݺݺݺݺݺݺݺݻݺݺݨĀ̙ۚ窝ݻ݈ݻݻĈĨĈĈݻݫݫݫݫݫݫ݈Ĉݻ݈ݻݻݻĈĈĈĈݻݫݫݫݫݫݫݠĈĈݻĀԈܻݻۚݻݻݻݻݻݻݻĈݻݻ͈ݻݻ띀кݻݻݻݻݻݻݻĀݻĀݻ͠ݻݻ˘ݻݻݻݻݻݻݻݢĀݺݻݻ˘ݺݻݻݻݻݻݻݢݢĀݺݻݻ˘ݺݻݻݻݻݻݻݢݨĀݻݻ띀Ĉݻݻ݈ݻĈňĈݻݻݻݻݻݻݻĠĈĈрݻ֪ժժ՚ݻݠݻĈĈĈĈЈݻݻݻݻݻݻݻĈĈĀԈܻݻĀֆ̙ݻͻͻͻͻͻͻ͈ݻ͈ݻݻЀֆ̙ۚݻͻͻͻͻͻͻ͈ݻ͠ݻݻĀ̙띀ݻݺݻݺݢĀ̙˘ݺݺݺݺݺݺݺݻݺݻݺݢĀ̙˘窝ݺݺݺݺݺݺݺݻݻĀ̙˘ĈѢĈѢĈѢĈѢĈѢĈѢĈшݻ݈ݻݻݻݻшĈĈĈݻݫݫݫݫݫݫ݈ĈݻݠݻݻݻݻĈĈĈĈĐݻݫݫݫݫݫݫݢĈĈĈݻĀݻ͈ݻЀժժݻݻݻݻݻݻݻĈݻЀݻ͈ݻժժݻݻݻݻݻݻݻݻĀݻժժۚݻݻݻݻݻݻݻǢݢĀݺݻժժ띀ݺݻݻݻݻݻݻݢݢĀݺݻժժ˘ݺݻݻݻݻݻݻݢЈĀĈшݻժժ˘ĈцݻݻݻݻݻݻݻĈݻш֪ժժ՚ݻ݈ݻĈĈǈĈݻݻݻݻݻݻݻĈĈрݻĀߚݻݢĈĈĈĈĈĈňݻݻݻݻݻݻݻݻݻݻ͈ݻݻĀ֦̙ۚݻͻͻͻͻͻͻ͈ݻ͈ݻݻĀ؀ί̙Ժݻͻͻͻͻͻͻ͈ݻݻǢĀ̙ݻǀЀЀЀЀЀЀЈݻݺݻݺݢ̙ۚݺݺݺݺݺݺݺݻݺݻݺݢĀ̙띀ݺݺݺݺݺݺݺݻĈшݻĈцݻĀ̙˘ݻݫݫݫݫݫݫ݈ݻ݈ݻĀݻݻшĈĈĈݻݫݫݫݫݫݫ݈ĈݻݢĈĀ֦̙띀ݻݻݻݻݻݻݻݻݫݫݫݫݫݫݻݻĀݻ͈ݻЀݻ띀ݻݻݻݻݻݻݻĈݻĀઝݻ͈ݻݻۚܺݻݻݻݻݻݻݻݻǢĀݻǀЈݻݻЈĈĈĈĈĈĈĢݢݺݻݻݺݻݻݻݻݻݻݢݢĀݺݻݻۚݺݻݻݻݻݻݻ݂ňݻĀݻ݈ݻݻ띀ݻݻݻݻݻݻݻĈݻшĈĘݻ݈ݻĈĈĈĈĈݻݻݻݻݻݻݻĈĈрݻݻݻ˘ݻݻĈ݀ݻݻݻݻݻݻݻݻݻ"
  },
  {
    "path": "04 Support/DRAZ/IP/TEST2",
    "content": "ݻݻݻݻݻݻݻݻݻݻЈݻݻݻݻݻݻݻݻݻݻݻĀ̃ӆݛĈݢݻݻݻݻݛݛݛݛݛĀݛ̃ӆݛĠԀݢݻݻݻݻݛݛݛݛݛŀݛ̃ӆĈݢĈĈĈĈݻݻݻݻݻŀݻ̃ӆݻĈݢܻܻܻܻݻݻݻݻݻݻ̃ӆݻݨܻܻܻܻݻݻݻݻݻĀݻ̃ӆݻĈݢͻͻͻͻݻݻݻݻݻĈݻĂĈĈĈĈݻĠĈĈĈĈݢЀͻͻͻͻݻݻݻݻݻĈĈݻݻݻݻݻݻݻݻݻݻݻĀݻݻݻݻݻňӆݻĀՀݛݛݛݛݻݻݻݻݻĈݢݻӆݻŀԀݛݛݛݛݻݻݻݻݻ݂ݻӆĈŀݻݻݻݻܻܻܻܻܻĈݢܻӆܻݻݻݻݻܻܻܻܻܻĈݢܻӆܻĀݻݻݻݻܻܻܻܻܻЈܻӆͻĀݻݻݻݻͻͻͻͻͻĈݢĈĈͻЀĈĈĈĈĈͻĈĈĈĺĀݻݻݻݻͻͻͻͻͻݻ݂ĈĈͻݻݻݻݻݻݻݻݻݻݻňĨĨĨĨĨĀĨÆݛĈԀݢݻݻݻݻݛݛݛݛݛݛÆݛЀ݂݊ݻݻݻݻݛݛݛݛݛŀݛÆݻĈծբݢܻܻܻܻݻݻݻݻݻŀݻÆݻĈꕀݢܻܻܻܻݻݻݻݻݻЀݻÆݻЈܻܻܻܻݻݻݻݻݻĀݻцݻĈĈĄĈݢĀͻͻͻͻݻݻݻݻݻĻĈݻĈĈĈĈݻĈĈĈĈ݂ŀͻͻͻͻݻݻݻݻݻлĈĈݻ߆ĀĨĨĨĨܻܻܻܻܻĈݢܻ߆ݻЀݛݛݛݛݻݻݻݻݻĈݢݻ߆݊݊ݻŀݛݛݛݛݻݻݻݻݻЈݨݻ߆ծբծբܻŀݻݻݻݻܻܻܻܻܻĈݢܻ߆ꕀꕀܻЀݻݻݻݻܻܻܻܻܻĈݢܻ߆ܻĀݻݻݻݻňݢՀĈĈĈĈͻĈĈĈĺݻݻݻݻͻͻͻͻͻĈݢĈĈͻŀĈĈĈĈĈͻĈĈĈĺݻݻݻݻͻͻͻͻͻݻ݈ĈĈͻ׆ĨĈݢܻܻܻܻݛݛݛݛݛĀݛ׆ݛĈЀݢݻݻݻݻݛݛݛݛݛЀݛ׆ݛЈݨݻݻݻݻݛݛݛݛݛŀݛ׆ݻĈݢܻܻܻܻݻݻݻݻݻŀݻ׆ݻĈݢܻܻܻܻݻݻݻݻݻŀݻ׆ݻňݢĀ͎ĈĈĈĈݻĈĈďĈݢͻͻͻͻݻݻݻݻݻĈĈݻĈĈĈĈݻĈĈĈĈ݈ĀͻͻͻͻݻݻݻݻĈĈĈݻцܻĀԀݛݛݛݛݻݻݻݻݻĈݢݻцݻЀݛݛݛݛݻݻݻݻݻĈݢݻцݻŀݛݛݛݛܻܻܻܻܻňܻцܻŀݻݻݻݻܻܻܻܻܻĈݢܻцܻŀݻݻݻݻܻܻܻܻܻĠ݂ܻцĀŻŻŻŻŻĈݢŻĈĈĈĈͻĈĈĈĺĈݻݻݻݻͻͻͻͻͻĈݢĈĈͻĀĈĈĈĈĈͻĈĈĈĈĈݻݻݻݻԨͻͻͻͻܻݻݻݻͻӆݛĈԀݢݻݻݻݻݛݛݛݛݛĀݛӆݛĈݢݻݻݻݻݛݛݛݛݛŀݛӆݛňܻܻܻܻŀӆݻĈݢܻܻܻܻݻݻݻݻݻŀݻӆݻĠ݂ܻܻܻܻݻݻݻݻݻĀݻӆĈݢŻŻŻŻݻݻݻݻݻĀݻ̊ĈĈĈĈݻĈĈĈĈݢͻͻͻͻݻݻݻݻݻĺĈĈݻĈĈĈĈĈݻݻݻݻݻݻĀͻͻͻͻԨݻݻݻݻݻݻݻݻݻӆݻĀݛݛݛݛݻݻݻݻݻĈݢݻӆݻŀݛݛݛݛݻݻݻݻݻĠݢݻӆܻŀĈĈĈĈĈĈݢĈӆܻŀݻݻݻݻܻܻܻܻܻĈݢܻӆܻĀݻݻݻݻܻܻܻܻܻݨܻӆŻĀݻݻݻݻͻͻͻͻͻĈݢͻĈĈĈĈĈͻĈĈĈĺĈݻݻݻݻͻͻͻͻͻĈݢĈĈͻĀݻݻݻݻݻͻݻݻݻݻݻЈݻݻݻݻ荺ݻݻݻݻ"
  },
  {
    "path": "04 Support/DRAZ/SS/PAC.HG",
    "content": "đđđđđđđđđĀđđĀđāĀđđ\u000f(\u0001汀߷\u000fՐ(Ցđđđđđđđđđϧ\u0001\u0001\u0001đđĀđđđđđđđđđđđđđđĀ\u000fѠ(ӹ\u0001я߽ۇ؀\u000f(đđđđđđđŗƝᄾܾ­޻\u0001\u0001޻\u0001\u0001\u0001\u0001đđđđđđđđđđđđđĀđđĀđđ\u000fǂ\"χߟƝϝݶ㶀\u0010ׇ\u0017ߛϛőőŁőőőőőőőőőőőőőőőŁ\u0010\u000e\u0004ǇݿY\u0006\u0005\u0005\u000f\u000e\u0005\u0001\u000f!\u0004\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001đđĀđđđđđđđđđđđđđđĀđ\u000fł(ర߽߽؍\u000fՄ(đđđđđđđđđǞ޿ܮ\u0001޿\u0001޿đđđđđđđđđđĀđđđđđĀđđđ\u000f(ߟ߷\rֆֆ\u0005\rޛ޻\u0001\u0001\u0001۞޻\u0001\u0001޻\u0001\u0001\u0001\u0001\u0001\u0001百\u0001\u0001ĐđĀđđđđđđđđđđđđđđđĐĀ\u0010\b\f\u0001\u0004߽݀\u0007\u000f\u001c\u0006ᠠȬܾܾ\u0001쀻\u0001\u0001\u0001đđđđđāđĐđđĀđđđĀđđđ\u000fǂ(ݶ\u000fՄ(Ցđđđđđđđđ౛đđĀđđđđđđđđđđđđđđϞƗƖƏƆ\u0006\u0004(\u0005߽ʪ \u0004\u0004Ր(đđđđđđđđđđđđā\u0006솀đđđđđđđđđđĀđđđđĀāӃÇׇ\u0004(\u0005∠\t\u0005(ՑđđđđđđđđđđĐ\u0004\u0001đđĀđđđđđđđĐđāāđđđĀđ\u000fł(݀ۇ؀\u000fՄ(đđĐĐĐ扲篟ֻ\u0001đđđđđđĀđđđđĀđđǗ͝ĐŐ\u000f\u0018\bȲΖ\u0001ΖǷ㶀ʨĂ\u000e\u000b\u000f\u0001\u0005젃󏻿\u0001\u0001\u0001\u0001đđĀđđđđđđđđӧЪԔĀđ\r\u0004\u000f\u0001\u0001\u0001\u0001\u0001Ç߽؍訊ʑʑđ\u000f(đđđđđ毟珀\u0001Ⴧ˦޿\u0001޿đđđđđđđđđĐĀԠՈբՈՈբՈՈđ\u000fǂ(ďׯ߷߷\u0005ġĪĪĪī\u000fՄ(ՑđĐÃ˿\u0001\u0001\u0001\u0001đđĀđĐđđđ\u0006ȢԢՈբբ\u000f\u001a\u0005ݟ\"ߟߟߟߟߟ\u0014ߟ\u000e\u0005\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001Y\u0006\u0004\u000f\u0011Ã\u0004χ\u0001đđĀđđđđđđđĐآ\u0010\u0017\u0001ݗ\u0001đđĻ\u0010Ո#\u0005䱤\u0001\u0001\u0001\u0001쀿đđđđđđĐđĀ\u0004\u0001\u0011Т.ôݶݶ\b\u0001∁\u0011Ѐ2őđđđđđđđđđđđđđ౛\u0001\u0001\u0001\u0001đđĀĐđđđđđđ\u0004ӞđđĐ\u0012ЈР5߽߽݀耈\u0014ՐĨ8Дőđđđđđđđđđđđ\u0001޿솁Αđđđđđđđđ\u0001޿솁"
  },
  {
    "path": "04 Support/DRAZ/SS/PAC.HG1",
    "content": "đđđđđđđđđĀđđĀđāĀđđ\u000f(\u0001汀߷\u000fՐ(Ցđđđđđđđđđϧ\u0001\u0001\u0001đđĀđđđđđđđđđđđđđđĀ\u000fѠ(ӹ\u0001я߽ۇ؀\u000f(đđđđđđđŗƝᄾܾ­޻\u0001\u0001޻\u0001\u0001\u0001\u0001đđđđđđđđđđđđđĀđđĀđđ\u000fǂ\"χߟƝϝݶ㶀\u0010ׇ\u0017ߛϛőőŁőőőőőőőőőőőőőőőŁ\u0010\u000e\u0004ǇݿY\u0006\u0005\u0005\u000f\u000e\u0005\u0001\u000f!\u0004\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001đđĀđđđđđđđđđđđđđđĀđ\u000fł(ర߽߽؍\u000fՄ(đđđđđđđđđǞ޿ܮ\u0001޿\u0001޿đđđđđđđđđđĀđđđđđĀđđđ\u000f(ߟ߷\rֆֆ\u0005\rޛ޻\u0001\u0001\u0001۞޻\u0001\u0001޻\u0001\u0001\u0001\u0001\u0001\u0001百\u0001\u0001ĐđĀđđđđđđđđđđđđđđđĐĀ\u0010\b\f\u0001\u0004߽݀\u0007\u000f\u001c\u0006ᠠȬܾܾ\u0001쀻\u0001\u0001\u0001đđđđđāđĐđđĀđđđĀđđđ\u000fǂ(ݶ\u000fՄ(Ցđđđđđđđđ౛đđĀđđđđđđđđđđđđđđϞƗƖƏƆ\u0006\u0004(\u0005߽ʪ \u0004\u0004Ր(đđđđđđđđđđđđā\u0006솀đđđđđđđđđđĀđđđđĀāӃÇׇ\u0004(\u0005狣\t\u0005(ՑđđđđđđđđđđĐ\u0004\u0001đđĀđđđđđđđĐđāā\u000e\u0004\u0004ōχ ݀ۇ؀\u0004\u0002\u0004\u0006\u0004Ȉ憅 đđĐĐĐ扲篟ֻ\u0001đđđđđđĀđđđđĀđ痍\u000f\u0018\bȲΖ\u0001ΖǷ㶀ʨĂ\u000e\u000b\u000f\u0001\u0005젃󏻿\u0001\u0001\u0001\u0001đđĀđđđđđđđđӧЪԔĀđ\r\u0004\u000f\u0001\u0001\u0001\u0001\u0001Ç߽؍訊ʑʑđ\u000f(đđđđđ毟珀\u0001Ⴧ˦޿\u0001޿đđđđđđđđđĐĀԠՈբՈՈբՈՈđ\u000fǂ(ďׯ߷߷\u0005ġĪĪĪī\u000fՄ(ՑđĐÃ˿\u0001\u0001\u0001\u0001đđĀđĐđđđ\u0006ȢԢՈբբ\u000f\u001a\u0005ݟ\"ߟߟߟߟߟ\u0014ߟ\u000e\u0005\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001Y\u0006\u0004\u000f\u0011Ã\u0004χ\u0001đđĀđđđđđđđĐآ\u0010\u0017\u0001ݗ\u0001đđĻ\u0010Ո#\u0005䱤\u0001\u0001\u0001\u0001쀿đđđđđđĐđĀ\u0004\u0001\u0011Т.ôݶݶ\b\u0001∁\u0011Ѐ2őđđđđđđđđđđđđđ౛\u0001\u0001\u0001\u0001đđĀĐđđđđđđ\u0004ӞđđĐ\u0012ЈР5߽߽݀耈\u0014ՐĨ8Дőđđđđđđđđđđđ\u0001޿솁\u0001޿솁"
  },
  {
    "path": "04 Support/DRAZ/SS/PAC.HG3",
    "content": "đđđđđđđđđĀđđĀđāĀđđ\u000f(\u0001汀߷\u000fՐ(Ցđđđđđđđđđϧ\u0001\u0001\u0001đđĀđđđđđđđđđđđđđđĀ\u000fѠ(ӹ\u0001я߽ۇ؀\u000f(đđđđđđđŗƝᄾܾ­޻\u0001\u0001޻\u0001\u0001\u0001\u0001đđđđđđđđđđđđđĀđđĀđđ\u000fǂ\"χߟƝϝݶ㶀\u0010ׇ\u0017ߛϛőőŁőőőőőőőőőőőőőőőŁ\u0010\u000e\u0004ǇݿY\u0006\u0005\u0005\u000f\u000e\u0005\u0001\u000f!\u0004\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001đđĀđđđđđđđđđđđđđđĀđ\u000fł(ర߽߽؍\u000fՄ(đđđđđđđđđǞ޿ܮ\u0001޿\u0001޿đđđđđđđđđđĀđđđđđĀđđđ\u000f(ߟ߷\r׆׆\u0005\rޛ޻\u0001\u0001\u0001۞޻\u0001\u0001޻\u0001\u0001\u0001\u0001\u0001\u0001百\u0001\u0001ĐđĀđđđđđđđđđđđđđĿ\u0006\u0004\u0006\f\u0001\u0004߽݀\u0007\u0012\u0004Ը\u0014\u0006ᠠȬܾܾ\u0001쀻\u0001\u0001\u0001đđđđđāđĐđđĀđ\n(ݶ\u000fՄ(Ցđđđđđđđđ౛đđĀđđđđđđđđđđđđđđϞƗƖƏƆ\u0006\u0004(\u0005߽ʪ \u0004\u0004Ր(đđđđđđđđđđđđā\u0006솀đđđđđđđđđđĀđđđđĀāӃÇׇ\u0004(\u0005∠\t\u0005(ՑđđđđđđđđđđĐ\u0004\u0001đđĀđđđđđđđĐđāāđđđĀđ\u000fł(݀ۇ؀\u000fՄ(đđĐĐĐ扲篟ֻ\u0001đđđđđđĀđđđđĀđđǗ͝ĐŐ\u000f\u0018\bȲΖ\u0001ΖǷ㶀ʨĂ\u000e\u000b\u000f\u0001\u0005젃󏻿\u0001\u0001\u0001\u0001đđĀđđđđđđđđӧЪԔĀđ\r\u0004\u000f\u0001\u0001\u0001\u0001\u0001Ç߽؍訊ʑʑđ\u000f(đđđđđ毟珀\u0001Ⴧ˦޿\u0001޿đđđđđđđđđĐĀԠՈբՈՈբՈՈđ\u000fǂ(ďׯ߷߷\u0005ġĪĪĪī\u000fՄ(ՑđĐÃ˿\u0001\u0001\u0001\u0001đđĀđĐđđđ\u0006ȢԢՈբբ\u000f\u001a\u0005ݟ\"ߟߟߟߟߟ\u0014ߟ\u000e\u0005\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001Y\u0006\u0004\u000f\u0011Ã\u0004χ\u0001đđĀđđđđđđđĐآ\u0010\u0017\u0001ݗ\u0001đđĻ\u0010Ո#\u0005䱤\u0001\u0001\u0001\u0001쀿đđđđđđĐđĀ\u0004\u0001\u0011Т.ôݶݶ\b\u0001∁\u0011Ѐ2őđđđđđđđđđđđđđ౛\u0001\u0001\u0001\u0001đđĀĐđđđđđđ\u0004ӞđđĐ\u0012ЈР5߽߽݀耈\u0014ՐĨ8Дőđđđđđđđđđđđ\u0001޿솁"
  },
  {
    "path": "04 Support/DRAZ/SS/PAC.ROOM",
    "content": "đđđđđđđđđĀđđĀđāĀđđ\u000f(\u0001汀߷\u000fՐ(Ցđđđđđđđđđϧ\u0001\u0001\u0001đđĀđđđđđđđđđđđđđđĀ\u000fѠ(ӹ\u0001я߽ۇ؀\u000f(đđđđđđđŗƝᄾܾ­޻\u0001\u0001޻\u0001\u0001\u0001\u0001đđđđđđđđđđđđđԐđđĀđđ\u000fǂ\"χߟƝϝݶ㶀\u0010ׇ\u0017ߛϛőőŁőőőőőőőőőőőőőőŁ\u0010\u000e\u0004ǇݿY\u0006\u0005\u000f\u000e\u0005\u0001\u000f!\u0004\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001đđĀđđđđđđđđđđđđđχׇǗǇ\u000bł(ర߽߽؍\u0006\t\u0004\u001cđđđđđđđđđǞ޿ܮ\u0001޿\u0001޿đđđđđđđđđđĀđđŐф\u0006Ѐ\u001cߟ߷\rݜݜ\u000fޛ޻\u0001\u0001\u0001۞޻\u0001\u0001޻\u0001\u0001\u0001\u0001\u0001\u0001百\u0001\u0001ĐđĀđđđđđđđđđđđđđđđĐĀ\u0012\u0019\u0001\u0004߽݀\u000f\u001c\u0006ᠠȬܾܾ\u0001쀻\u0001\u0001\u0001đđđđđāđĐđđĀđđđĀđđđ\u000fǂ(ݶ\u000fՄ(Ցđđđđđđđđ౛đđĀđđđđđđđđđđđđđđđđđđ\u000f(\u0005߽\u000fՐ(đđđđđđđđđđđđā\u0006솀đđđđđđđđđđĀđđđđĀđđđĀđđđ\u000f(\u0005\u000f(ՑđđđđđđđđđđĐ\u0004\u0001đđĀđđđđđđđĐđāāĿ\u0005ߟ\u0004\u0004ǃ ݀ۇ؀\t\u0004\u0006\u0004򢢣\u0005 đđĐĐĐ扲篟ֻ\u0001đđđđđđĀđđđđĀđŐ\u000fȪ\u0018\bȲΖ\u0001ΖǷ㶀ʨĂ\u0010\u0017\u0001\u0005젃󏻿\u0001\u0001\u0001\u0001đđĀđđđđđđđđӧЪԔĀđ\rД\u000f\u0001\u0001\u0001\u0001\u0001Ç߽؍訊ʑʑđ\u000f(đđđđđ毟珀\u0001Ⴧ˦޿\u0001޿đđđđđđđđđĐđԠՈբՈՈբՈՈđ\u000fǂ(ďׯ߷߷\u0005ġĪĪĪĪ\u000fՄ(ՑđĐÃ˿\u0001\u0001\u0001\u0001đđĀđĐđđđ\u0006ȢԢՈբբբ\u000f\u001a\u0005ݟ\"ߟߟߟߟߟ\u0014ߟ\u000e\u0005\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001Y\u0006\u000f\u0011Ã\u0004χ\u0001đđĀđđđđđđđĐԅآ,\u0004\u0001ݗ\u0001Ēʲ\u0001\b\u000f\u0005đ\u0001\u0001\u0001\u0001쀿đđđđđđĐđĀĀ\u0001\u0001Ȣחߟ\u0007\rôݶݶ\u0006\u0001ȁ\t\u0010\u0004\u0007\t\u0010őđđđđđđđđđđđđđ౛\u0001\u0001\u0001\u0001đđĀĐđđđđđđ\u0004ӞđđĐ\u000b&\u0005\u0017߽߽݀耈TДőđđđđđđđđđđđ\u0001޿솁"
  },
  {
    "path": "04 Support/DRAZ/SS/PAC.ROOM2",
    "content": "đđđđđđđđđĀđđĀđāĀđđ\u000f(\u0001汀߷\u000fՐ(Ցđđđđđđđđđϧ\u0001\u0001\u0001đđĀđđđđđđđđđđđđđđĀ\u000fѠ(ӹ\u0001я߽ۇ؀\u000f(đđđđđđđŗƝᄾܾ­޻\u0001\u0001޻\u0001\u0001\u0001\u0001đđđđđđđđđđđđđԐđđĀđđ\u000fǂ\"χߟƝϝݶ㶀\u0010ׇ\u0017ߛϛőőŁőőőőőőőőőőőőőőŁ\u0010\u000e\u0004ǇݿY\u0006\u0005\u000f\u000e\u0005\u0001\u000f!\u0004\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001đđĀđđđđđđđđđđđđđχׇǗǇ\u000bł(ర߽߽؍\u0006\t\u0004\u001cđđđđđđđđđǞ޿ܮ\u0001޿\u0001޿đđđđđđđđđđĀđđőф\u0006Ѐ\u001cߟ߷\rݜݜ\u000fޛ޻\u0001\u0001\u0001۞޻\u0001\u0001޻\u0001\u0001\u0001\u0001\u0001\u0001百\u0001\u0001ĐđĀđđđđđđđđđđđđđđđĐĀ\u0012\u0019\u0001\u0004߽݀\u000f\u001c\u0006ᠠȬܾܾ\u0001쀻\u0001\u0001\u0001đđđđđāđĐđđĀđđđĀđđđ\u000fǂ(ݶ\u000fՄ(Ցđđđđđđđđ౛đđĀđđđđđđđđđđđđđđđđđđ\u000f(\u0005߽\u000fՐ(đđđđđđđđđđđđā\u0006솀đđđđđđđđđđĀđđđđĀđđđĀđđđ\u000f(\u0005\u000f(ՑđđđđđđđđđđĐ\u0004\u0001đđĀđđđđđđđĐđāāĿ\u0005ߟ\u0004\u0004ǃ ݀ۇ؀\t\u0004\u0006\u0004򢢣\u0005 đđĐĐĐ扲篟ֻ\u0001đđđđđđĀđđđđĀđŐ\u000fȪ\u0018\bȲΖ\u0001ΖǷ㶀ʨĂ\u0010\u0017\u0001\u0005젃󏻿\u0001\u0001\u0001\u0001đđĀđđđđđđđđӧЪԔĀđ\rД\u000f\u0001\u0001\u0001\u0001\u0001Ç߽؍訊ʑʑđ\u000f(đđđđđ毟珀\u0001Ⴧ˦޿\u0001޿đđđđđđđđđĐđԠՈբՈՈբՈՈđ\u000fǂ(ďׯ߷߷\u0005ġĪĪĪĪ\u000fՄ(ՑđĐÃ˿\u0001\u0001\u0001\u0001đđĀđĐđđđ\u0006ȢԢՈբբբ\u000f\u001a\u0005ݟ\"ߟߟߟߟߟ\u0014ߟ\u000e\u0005\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001Y\u0006\u000f\u0011Ã\u0004χ\u0001đđĀđđđđđđđĐԅآ,\u0004\u0001ݗ\u0001Ēʲ\u0001\b\u000f\u0005đ\u0001\u0001\u0001\u0001쀿đđđđđđĐđĀĀ\u0001\u0001Ȣחߟ\u0007\rôݶݶ\u0006\u0001ȁ\t*\u0010őđđđđđđđđđđđđđ౛\u0001\u0001\u0001\u0001đđĀĐđđđđđđ\u0004ӞđđĐ\n&\u0005\u0017߽߽݀耈TДőđđđđđđđđđđđ\u0001޿솁"
  },
  {
    "path": "04 Support/DRAZ/SS/PAC.SS0",
    "content": "đđđđđđđđđĀđđĀđāĀđđ\u000f(\u0001汀߷\u000fՐ(Ցđđđđđđđđđϧ\u0001\u0001\u0001đđĀđđđđđđđđđđđđđđĀ\u000fѠ(ӹ\u0001я߽ۇ؀\u000f(đđđđđđđŗƝᄾܾ­޻\u0001\u0001޻\u0001\u0001\u0001\u0001đđđđđđđđđđđđđԐđđĀđđ\u000fǂ\"χߟƝϝݶ㶀\u0010ׇ\u0017ߛϛőőŁőőőőőőőőőőőőőőŁ\u0010\u000e\u0004ǇݿY\u0006\u0005\u000f\u000e\u0005\u0001\u000f!\u0004\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001đđĀđđđđđđđđđđđđđχׇǗǇ\u000bł(ర߽߽؍\u0006\t\u0004\u001cđđđđđđđđđǞ޿ܮ\u0001޿\u0001޿đđđđđđđđđđĀđđŐф\u0006Ѐ\u001cߟ߷\rݜݜ\u000fޛ޻\u0001\u0001\u0001۞޻\u0001\u0001޻\u0001\u0001\u0001\u0001\u0001\u0001百\u0001\u0001ĐđĀđđđđđđđđđđđđđđđĐĀ\u0012\u0019\u0001\u0004߽݀\u000f\u001c\u0006ᠠȬܾܾ\u0001쀻\u0001\u0001\u0001đđđđđāđĐđđĀđđđĀđđđ\u000fǂ(ݶ\u000fՄ(Ցđđđđđđđđ౛đđĀđđđđđđđđđđđđđđđđđđ\u000f(\u0005߽\u000fՐ(đđđđđđđđđđđđā\u0006솀đđđđđđđđđđĀđđđđĀđđđĀđđđ\u000f(\u0005\u000f(ՑđđđđđđđđđđĐ\u0004\u0001đđĀđđđđđđđĐđāāĿ\u0005ߟ\u0004\u0004ǃ ݀ۇ؀\t\u0004\u0006\u0004򢢣\u0005 đđĐĐĐ扲篟ֻ\u0001đđđđđđĀđđđđĀđŐ\u000fȪ\u0018\bȲΖ\u0001ΖǷ㶀ʨĂ\u0010\u0017\u0001\u0005젃󏻿\u0001\u0001\u0001\u0001đđĀđđđđđđđđӧЪԔĀđ\rД\u000f\u0001\u0001\u0001\u0001\u0001Ç߽؍訊ʑʑđ\u000f(đđđđđ毟珀\u0001Ⴧ˦޿\u0001޿đđđđđđđđđĐđԠՈբՈՈբՈՈđ\u000fǂ(ďׯ߷߷\u0005ġĪĪĪĪ\u000fՄ(ՑđĐÃ˿\u0001\u0001\u0001\u0001đđĀđĐđđđ\u0006ȢԢՈբբբ\u000f\u001a\u0005ݟ\"ߟߟߟߟߟ\u0014ߟ\u000e\u0005\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001Y\u0006\u000f\u0011Ã\u0004χ\u0001đđĀđđđđđđđĐԅآ,\u0004\u0001ݗ\u0001Ēʲ\u0001\b\u000f\u0005đ\u0001\u0001\u0001\u0001쀿đđđđđđĐđĀĀ\u0001\u0001Ȣחߟ\u0007\rôݶݶ\u0006\u0001ȁ\t\u0010\u0004\u0007\t\u0010őđđđđđđđđđđđđđ౛\u0001\u0001\u0001\u0001đđĀĐđđđđđđ\u0004ӞđđĐ\u000b&\u0005\u0017߽߽݀耈TДőđđđđđđđđđđđ\u0001޿솁"
  },
  {
    "path": "04 Support/DRAZ/SS/PAC.SS1",
    "content": "Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅ\u0016\u0004ճ߿Ο݀Ϗ\u0010ΎΎ\u0007ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ\b\u0001ԔԐ櫆\u0002\u0004\u0004\u001cՑđđđ񴱜͇˝\u0001　Ǎ͗͗͗͗͗͗͗͗ԀđđđߟߎΆ\u0004ו\u0004\u0017✇߿݀𢈢\u0004\b\u0016đđđđđđđđđ篟Āݷݷݷݷݷݷݷݷݑݑđđđđđđ\u0014\u001c\u0001ϗ櫆\u0014\u001cՑđđđđĐĐ\u0001˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅ\u0016\u0004ճ߿Ο݀\u0013ΎΎ\u0007ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđф\u0014\b\u0006櫆\u001d\u001cՑđđđ񴱜͇˝\u0001　#ȅ8ȅ\u001c߿݀#ՁĂ8ՁĂ\u001cđđđđđđđđđđ#8\u001c#8\u001cՑđđđđđđđđđđđđ#Ȅ8ȅ\u001c\u0001݀\u0014ՁĂ\u001cđđđđđđđđđđđĐđŔđđđđđđđđđŔđđđđđđđŔđđ\u0014\u001cǗ݊\u0014\u001cՑđđđđĐĐ⌹˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅ\u0016\u0004ճ߿Ο݀\u0013ΎΎ\u0007ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ\u0012\u0001ԔА\u0005櫆\u0014\u001cՑđđđ񴱜͇˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅ\u001c߿݀\u0011ՁĂՀ\u0018đđđđđđđđđđĀݷݷݷݷݷݷݷݷݑݑđđđđđđ\u000f𸸺\u0001\u000e櫆\u0006\u0004\u0001\u0004\u001cՑđđđđđđđđđđđđǍ͗͗͗͗͗͗͗͗Ԁđđ\u0005Օˊ\u0016\u0001݀\u0006\u0005\u0002\u0001\u0003\u0016đđđđđđđđđđđĐĀݷݷݷݷݷݷݷݷݑݑđđđďǕ\u0003\u0005\u0004ʀ\u001cǗ櫆\u0014\u001cՑđđđđĐĐ⌹˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅ\u0016\u0004ճ߿Ο݀\u0013ΎΎ\u0007ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ\u0014\t\u0006櫆\u0014\u001cՑđđđ񴱜͇˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014Ά\u001c✇߿݀\u0004\u0004\u0004\u0004\u0004\u0004\u0004\u0005ۼ͑篟ԔĀݷݷݷݷݷݷݷݷݑݑđđĐƖ\u0004\u0004\u0004\u0004\u0004\u0004⣦⣦\u0001ϗ݊櫆̌̌̌̌̌̌ٱٱٱ\u0001ʜ\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"
  },
  {
    "path": "04 Support/DRAZ/SS/PAC.SS11",
    "content": "\u0017\u0007\u0013ĀĀđđđđđ\u0007\u0004\u0007\u0007݁\u000e\u000f\u0007\u0007\u0013ĀܑĀܑđđđđđđ\u000f\u0007Ր\u00183ĀĀđđđĐ5\u0004-ĀܑĀܑĐ\f\u0001\u0001\u0004\u0006\u0014đđđŔЀ\u0005\b\r\u0004\b\rǓǗǗǗ\ny\u0002\u000e\fo\u0005\u0005\u0005\u0005\u0005\u000fđ\u0005\bcĨĂĨĂĨĂĨĂĨĂĨĂ\u000blãǎ\u000bđ禦\u0005d)\u0004\u0012\f\u0007\u0007m\u0007\u0018đ\u0006\u0005\u0004\u0007\u0007i\u0004\u0007\u0007Ձ\u0004\u000b񱑘\u000b\u0007\u0007e\u0007\u0007\u0007\u0013Đ\b\u0004ࠠ\u0005\u0007\u000fm\u0007\u001f\u0016\u00193đđđŔфđđđđđđđđŔőőőőőőőőŔđđđđđđđŔфđđđđđđđđŔőőőőőőőőŔđđđđđđđŔ\u0004\u0016\u0004\u0004\u0004\u0004Ӣ\u0004\u0013\u0004\u0004\u0004\u0004\u0004đđđđđđđđđŔđđđđđđđđŔđđđđđđđŔđđđđđđđđđŔđđđđđđđđŔđđđđđđđŔđđđ\u0010\u0004̌̌̌<ĀĀđđđđđ\u0007\u0004\u0007\u0007݁\u000b\u000f\u0007\u0007\u0010ĀܑĀܑđđđđđđ\u000f\u0007Ր\u0015.0Āđ\u0003񀡀đđđđđĀĀܑđđđđđ\u0012\u0013\u000bđđđđđ\u0012\u0013\u000bĀĀܑĐđ0Đ9I\u0004ĀđđđđđđđŔőőőőőőőőŔđđđđđđđŔЀĀԔ໮Āܑ܀đđđđđđŔđđđđđđđđŔđđđđđđđŔđđđ\u0012\u0013\u000b"
  },
  {
    "path": "04 Support/DRAZ/SS/PAC.SS4",
    "content": "đđđđđđđđđĀđđĀđāĀđđ\u000f(\u0001汀߷\u000fՐ(Ցđđđđđđđđđϧ\u0001\u0001\u0001đđĀđđđđđđđđđđđđđđĀ\u000fѠ(ӹ\u0001я߽ۇ؀\u000f(đđđđđđđŗƝᄾܾ­޻\u0001\u0001޻\u0001\u0001\u0001\u0001đđđđđđđđđđđđđԐđđĀđđ\u000fǂ\"χߟƝϝݶ㶀\u0010ׇ\u0017ߛϛőőŁőőőőőőőőőőőőőőŁ\u0010\u000e\u0004ǇݿY\u0006\u0005\u000f\u000e\u0005\u0001\u000f!\u0004\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001đđĀđđđđđđđđđđđđđχׇǗǇ\u000bł(ర߽߽؍\b\u0007\u001cđđđđđđđđđǞ޿ܮ\u0001޿\u0001޿đđđđđđđđđđĀđđőф\u0006Ѐ\u001cߟ߷\r֖ֆ\u0005\rޛ޻\u0001\u0001\u0001۞޻\u0001\u0001޻\u0001\u0001\u0001\u0001\u0001\u0001百\u0001\u0001ĐđĀđđđđđđđđđđđđđđđĐĀ\u0010\b\f\u0001\u0004߽݀\u000f\u001c\u0006ᠠȬܾܾ\u0001쀻\u0001\u0001\u0001đđđđđāđĐđđĀđđđĀđđđ\u000fǂ(ݶ\u000fՄ(Ցđđđđđđđđ౛đđĀđđđđđđđđđđđđđđđđđđ\u000f(\u0005߽\u000fՐ(đđđđđđđđđđđđā\u0006솀đđđđđđđđđđĀđđđđĀđđđĀđđđ\u000f(\u0005\u000f(ՑđđđđđđđđđđĐ\u0004\u0001đđĀđđđđđđđĐđāāĿ\u0005ߟ\u0004\u0004ǃ ݀ۇ؀\t\u0004\u0006\u0004򢢣\u0005 đđĐĐĐ扲篟ֻ\u0001đđđđđđĀđđđđĀđŐ\u000fȪ\u0018\bȲΖ\u0001ΖǷ㶀ʨĂ\u000e\u000b\u000f\u0001\u0005젃󏻿\u0001\u0001\u0001\u0001đđĀđđđđđđđđӧЪԔĀđ\r\u0004\u000f\u0001\u0001\u0001\u0001\u0001Ç߽؍訊ʑʑđ\u000f(đđđđđ毟珀\u0001Ⴧ˦޿\u0001޿đđđđđđđđđĐđԠՈբՈՈբՈՈđ\u000fǂ(ďׯ߷߷\u0005ġĪĪĪī\u000fՄ(ՑđĐÃ˿\u0001\u0001\u0001\u0001đđĀđĐđđđ\u0006ȢԢՈբբ\u000f\u001a\u0005ݟ\"ߟߟߟߟߟ\u0014ߟ\u000e\u0005\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001Y\u0006\u0004\u000f\u0011Ã\u0004χ\u0001đđĀđđđđđđđĐՇآ\u0010\u0017\u0001ݗ\u0001đđĻ\u0010Ո#\u0005䱤\u0001\u0001\u0001\u0001쀿đđđđđđĐđĀ\u0004\u0001\u0011Т.ôݶݶ\b\u0001∁\u0011Ѐ2őđđđđđđđđđđđđđ౛\u0001\u0001\u0001\u0001đđĀĐđđđđđđ\u0004ӞđđĐ\u0012ЈР5߽߽݀耈\u0014ՐĨ8Дőđđđđđđđđđđđ\u0001޿솁"
  },
  {
    "path": "04 Support/DRAZ/SS/PAC.SS6",
    "content": "Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅ\u0016\u0004ճ߿Ο݀Ϗ\u0013ΎΎ\u0007ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđфđđ\u0014\t\u0006櫆\u0014\u001cՑđđđ񴱜͇˝\u0001　Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅ\u001c߿݀\u0014ՁĂՀ\u0018đđđđđđđđđđĀݷݷݷݷݷݷݷݷݑݑđđđđđđ\u0012\u0001\b櫆\u0014\u001cՑđđđđđđđđđđđđǍ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅ\u001c\u0001݀\u0014ՁĂ\u001cđđđđđđđđđđđĐĀݷݷݷݷݷݷݷݷݑݑđđđđđđ\u0014\u001cǗ櫆\u0014\u001cՑđđđđĐĐ⌹˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅ\u0016\u0004ճ߿Ο݀\u0013ΎΎ\u0007ۏۏۏۏۏۏĀݷݷݷݷݷݷݷݷݑݑđф\u0015\t\u0006櫆\u001d\u001cՑđđđ񴱜͇˝\u0001　#ȅ8ȅ\u001c߿݀#ՁĂ6Ё̂Д\u001ađđđđđđđđđđ#7\u001b#8\u001cՑđđđđđđđđđđđđ#ȅ8ȅ\u001c\u0001݀\f\u0014ՁĂ!\u0014ՁĂ\u001cđđđđđđđđđđđĐ\u0005đ×\u000b\u0011\u0005đđ\u0014\u001cǗݠ\n\u0010\u0014\u001cՑđđđđĐĐ⌹˝đđđđđ\u0014Ȅ\u0015đđđđđ\u0014ȅ\u0016\u0004ճ߿Ο݀\u0013ΎΎ\u0007ۏۏۏۏۏۏđфđđđđđŔđđđđđфđ\u0001\u0004\u0004\u0005ŵՀ\t\u0006\u0006\u0003뫫\u0018Ցđđđ񴱜͇˝\u0001　Ǎ͗͗͗͗͗͗͗͗ԀđđđđđĀ\u0004\u0001\u0007Ոʀ\u0019߿݀\nՀ\u0018đđđđđđđđđđĀݷݷݷݷݷݷݷݷݑݑđđđđ\u0012\u0001\u0004ؘА\b櫆\u000f\u001cՑđđđđđđđđđđđđǍ͗͗͗͗͗͗͗͗Ԁđđēđđ\r\u0004ȅ\u001c\u0001݀\u0002\u0006ՕӁĂҀ\u0016đđđđđđđđđđđĐĀݷݷݷݷݷݷݷݷݑݑđđđđđđ\u0005\u0005\u0001\u0005\u0016Ǘ櫆\u0006Հ\u0018ՑđđđđĐĐ⌹˝Ǎ͗͗͗͗͗͗͗͗Ԁđđđ\u0013ȅ\u0016\u0004ճ߿Ο݀\u0004\u0013ΎΎ\u0007ۏۏۏۏۏۏԔĀݷݷݷݷݷݷݷݷݑݑđфđđ\u0014\t\u0006݊櫆\u0014\u001cՑđđđ񴱜͇˝\u0001　"
  },
  {
    "path": "04 Support/DRAZ/SS/PAC.SS7",
    "content": "Ǎ͗͗͗͗͗͗͗͗Ԁ{ꗝϏ\u0014ՁĂՀPĀݷݷݷݷݷݷݷݷݑݑđđđđđđ\u0012\u0001АԐАD櫆\u0014TǍ͗͗͗͗͗͗͗͗Ԁđđ\rɅ\u0018\u0005\u0005\u0005\u0005\u0005\u0005\f\u0002\u0004\u0004\u0005ׇ\u0014ĨĂĨĂĨĂĨĂĨĂĨĂ\bĀݷݷݷݷݷݷݷݷݑݑđđđđđđ\u0007\u0004\u0002\u0014ãǎ\b櫆\u0001\t\u0018)\u0004\u000fǍ͗͗͗͗͗͗͗͗Ԁđđđ\u0014ȅT\u0013Ё̂ДRĀݷݷݷݷݷݷݷݷݑݑđđđđđđ\u0010ȊS櫆\u000eTǍ͗͗͗͗͗͗͗͗ԀđđĿϗÒ\u0006\u0005ȅ\u0018\u0005\u0005\u0005\u0005\u0005\u0005\fՕϪ߿\u0012ĨĂĨĂĨĂĨĂĨĂĨĂ\bĀݷݷݷݷݷݷݷݷݑݑđđđđđđ\u0002\u0004\u0005ߔ\u0001\u0013ãǎ\b櫆\u0006\u0018)\u0004\u000fǍ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅT\u0014ՁĂՀPĀݷݷݷݷݷݷݷݷݑݑđđđđđđ\u0012\u0001D櫆\u0014TǍ͗͗͗͗͗͗͗͗Ԁđđđđđğ0ۻۻ߻ջ0Āݷݷݷݷݷݷݷݷݑݑđđđđđđđݪ0櫆ջ0Ǎ͗͗͗͗͗͗͗͗ԀđđđđđđĻ̪̪̪̪̪̪̪̪̪̪̪̪݈ݪ0ճճճճճճճճճճճճջ0Āݷݷݷݷݷݷݷݷݑݑđđđđđđǆ禦禥槦槦妧榧奦榦楥禦禥禦ݪ0櫆\u0001ֺֺֺֺֺֺֺ\u00010đđđđđ\u0014ȅ\u0015đđđđđ\u0014ȅT\u0013ΎΎ\u0007\u0014ՁĂՀPđф\u0015\t\u0006đđđđđđ\u0012\u0001D\u001d\u0015\u0014T#Ȅ\u0015đđđđđ\u0014ȅT\u0014ՁĂTđŔđđđđđđđđđŔđđđđđđđđđđđ\u0014T݀\u0014TǍ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014Ά!\u0004\u0004\u0004\u0004\u0004\u0004\u0004\u0005\u0001⣦ͽͽͽͽͽԔĀݷݷݷݷݷݷݷݷݑݑđđĐƗ\u0004\u0004\u0004\u0004\u0004\u0004㍷񑓙*݊櫆̌̌̌̌̌̌ƛȉ϶̸ȉ"
  },
  {
    "path": "04 Support/DRAZ/SS/PAC.SS8",
    "content": "Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014TϏ\u0014ՁĂՀPĀݷݷݷݷݷݷݷݷݑݑđđđđđđ\u0012\u0001АԐАD櫆\u0014TǍ͗͗͗͗͗͗͗͗Ԁđđ޽ǃ\u0012ȅ\u0018\u0005\u0005\u0005\u0005\u0005\u0005\f\u0002\u0004\u0005Ձ\u0018ĨĂĨĂĨĂĨĂĨĂĨĂ\bĀݷݷݷݷݷݷݷݷݑݑđđŔđđ\u0005\b\u0018ãǎ\b櫆\u0005\u0018)\u0004\u000fǍ͗͗͗͗͗͗͗͗Ԁđđđ\u0005\u0004\tňT\u0010Ё̂ДRĀݷݷݷݷݷݷݷݷݑݑđđĐđđ\u000fS櫆\u0005\u0001\u0004TǍ͗͗͗͗͗͗͗͗ԀđđğǑĐĀ\u0005ȅ\u0018\u0005\u0005\u0005\u0005\u0005\u0005\f\u0006\u0005ł\u0018ĨĂĨĂĨĂĨĂĨĂĨĂ\bĀݷݷݷݷݷݷݷݷݑݑđđđđđđ྿\u0005ρ\u0014ãǎ\b櫆\b\u0003\u0001\u0001\u0014)\u0004\u000fǍ͗͗͗͗͗͗͗͗ԀđđđߗƩ\u0011ȅT∢\u0014ՁĂՀPĀݷݷݷݷݷݷݷݷݑݑđđđđđđ\u0012\u0001F櫆\u0014TǍ͗͗͗͗͗͗͗͗Ԁđđđđđğ0ۻۻۻۻۻ߻ջ0Āݷݷݷݷݷݷݷݷݑݑđđđđđđđݪ0櫆ջ0Ǎ͗͗͗͗͗͗͗͗ԀđđđđđđĻ̪̪̪̪̪̪̪̪̪̪̪̪݈ݪ0ճճճճճճճճճճճճջ0Āݷݷݷݷݷݷݷݷݑݑđđđđđđǆ禦禥槦槦妧榧奦榦楥禦禥槦\u0001ݪ0櫆\u0001ֺֺֺֺֺֺֺ\u00010đđđđđ\u0014ȅ\u0015đđđđđ\u0014ȅT\u0013ΎΎ\u0007\u0014ՁĂՀPđф\u0015\t\u0006đđđđđđ\u0012\u0001ԔB\u001d\u0015\u0014T#Ȅ\u0015đđđđđ\u0014ȅT\u0014ՁĂTđŔđđđđđđđđđŔđđđđđđđđđđđ\u0014T݊\u0014TǍ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014Ά!\u0004\u0004\u0004\u0004\u0004\u0004\u0004\u0005\u0001⣦ͽͽͽͽͽԔĀݷݷݷݷݷݷݷݷݑݑđđĐƗ\u0004\u0004\u0004\u0004\u0004\u0004㍷񑓙*݊櫆̌̌̌̌̌̌ƛȉ϶̸ȉ"
  },
  {
    "path": "04 Support/DRAZ/SS/PAC.SS9",
    "content": "\u001e\u0007\u0007.\u0007\u0007\u00100\u0017\u0004\u0007\u0007'\u0004\u0007\u0007\u0010đđđĐ2\u001e\u0007\u0007.\u0007\u0007\u00106\u001e\u0007\u000f&\u0007\u000f\bĐ9đđđŔЀĀ\u0005Ā\u0005Āđđđ\u0012\u0013\u000fđđđ\u0012\u0013\u000fđđđ\u0012\u0013\u000bݮĐđđđđđđŔđđđđđđđđŔđđđđđđđđđđėÑđ0Đ9␌\u0004\u0004\\ĀđđđđđĀ𸜘S\u0005SĀܑđđđ[cĀđđđđđ\u001eP\u0012\u0005\u0005\u0001АՕBĀܑđđđđđđ\u0005h\u0002\u0001׃NĀđđđ\u0005\u0003\u0007\u0002M\r\u0005ظ\u0001ԜЀFĀܑđđđđđđo\u0017\u0007OĀđđđđđ\u0007\u0004\u0007\u0007݁J\u000f\u0007\u0007OĀܑđđđđđđ\u000f\u0007ՐToĀđđđđđĀ\u0006/\u0004/Āܑđđđđđ\u0012\u0013\u0010đđđđ/\u0016\u0007\u0010ĀđđđŔ\u0007\u0004\u0007\u0007݁\u000b\u000f\u0007\u0007\u0010ĀܑĐ:Ŕđđđđ\u000f\u0007Ր\u0015݀\t\u0016\n0\u0004đŔфđđđđđđđđŔőőőőőőőőŔđđđđđđđŔфđđđđđđđđŔőőőőőőőőŔđđđđđđđĐ\u0004\u0004\u0004\u0004\u0004\u0004Ԕ\u0004\u0004\u0004\u0004\u0004\u0004đđđđđđđđŔđđđđđđđđŔđđđđđđđŔđđđđđđđđđŔđđđđđđđđŔđđđđđđđĐĕĕĝ̌̌̌̌̌̌ݻ"
  },
  {
    "path": "04 Support/DRAZ/SS/PAC.SS98",
    "content": "Ǎ͗͗͗͗͗͗͗͗Ԁ{ꗝϏ\u0014ՁĂՀPĀݷݷݷݷݷݷݷݷݑݑđđđđđđ\u0012\u0001АԐАD櫆\u0014TǍ͗͗͗͗͗͗͗͗Ԁđđ޽ǃ\u0012ȅ\u0018\u0005\u0005\u0005\u0005\u0005\u0005\f\u0002\u0004\u0005ՁĪ\u0018ĨĂĨĂĨĂĨĂĨĂĨĂ\bĀݷݷݷݷݷݷݷݷݑݑđđŔđđ\u0005\b\u0018ãǎ\b櫆\u0005\u0018)\u0004\u000fǍ͗͗͗͗͗͗͗͗Ԁđđđ\u0005\u0004\tňT\u0010Ё̂ДRĀݷݷݷݷݷݷݷݷݑݑđđĐđđ\u000fS櫆\u0005\u0001\u0004TǍ͗͗͗͗͗͗͗͗ԀđđğǑĐĀ\u0004ȅ\u0018\u0005\u0005\u0005\u0005\u0005\u0005\f\u0006\u0005ł\u0018ĨĂĨĂĨĂĨĂĨĂĨĂ\bĀݷݷݷݷݷݷݷݷݑݑđđđđđđ྿\u0005ρ\u0014ãǎ\b櫆\b\u0003\u0001\u0001\u0014)\u0004\u000fǍ͗͗͗͗͗͗͗͗ԀđđđߗƩ\u0011ȅT∢\u0014ՁĂՀPĀݷݷݷݷݷݷݷݷݑݑđđđđđđ\u0012\u0001F櫆\u0014TǍ͗͗͗͗͗͗͗͗Ԁđđđđđğ0ۻۻ߻ջ0Āݷݷݷݷݷݷݷݷݑݑđđđđđđđݪ0櫆ջ0Ǎ͗͗͗͗͗͗͗͗ԀđđđđđđĻ̪̪̪̪̪̪̪̪̪̪̪̪݈ݪ0ճճճճճճճճճճճճջ0Āݷݷݷݷݷݷݷݷݑݑđđđđđđǆ禦禥槦槦妧榧奦榦楥禦禥禦ݪ0櫆\u0001ֺֺֺֺֺֺֺ\u00010Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅT\u0016ՁĂՀPĀݷݷݷݷݷݷݷݷݑݑđđĐ\u0017\u0001ԔB櫆\u001dT#Ȅ8ȅT\u0004\u0014ՁĂTđŔđđđđđđđđđŔđđđđđđđĐđđ\u0014T݀\u0014TǍ͗͗͗͗͗͗͗͗Āđđđđđ\u0014Ά!\u0004\u0004\u0004\u0004\u0004\u0004\u0004\u0005\u0001⣦ͽͽͽͽͽԔĀݷݷݷݷݷݷݷݷݑݑđđĐƗ\u0004\u0004\u0004\u0004\u0004\u0004㍷񑓙*݊櫆̌̌̌̌̌̌ƛȉ϶̸ȉ"
  },
  {
    "path": "04 Support/DRAZ/SS/PAC.SS99",
    "content": "Ǎ͗͗͗͗͗͗͗͗Ԁ{ꗝϏ\u0014ՁĂՀPĀݷݷݷݷݷݷݷݷݑݑđđđđđđ\u0012\u0001АԐАD櫆\u0014TǍ͗͗͗͗͗͗͗͗Ԁđđ޽ǃ\u0012ȅ\u0018\u0005\u0005\u0005\u0005\u0005\u0005\f\u0002\u0004\u0005ՁĪ\u0018ĨĂĨĂĨĂĨĂĨĂĨĂ\bĀݷݷݷݷݷݷݷݷݑݑđđŔđđ\u0005\b\u0018ãǎ\b櫆\u0005\u0018)\u0004\u000fǍ͗͗͗͗͗͗͗͗Ԁđđđ\u0005\u0004\tňT\u0010Ё̂ДRĀݷݷݷݷݷݷݷݷݑݑđđĐđđ\u000fS櫆\u0005\u0001\u0004TǍ͗͗͗͗͗͗͗͗ԀđđğǑĐĀ\u0004ȅ\u0018\u0005\u0005\u0005\u0005\u0005\u0005\f\u0006\u0005ł\u0018ĨĂĨĂĨĂĨĂĨĂĨĂ\bĀݷݷݷݷݷݷݷݷݑݑđđđđđđ྿\u0005ρ\u0014ãǎ\b櫆\b\u0003\u0001\u0001\u0014)\u0004\u000fǍ͗͗͗͗͗͗͗͗ԀđđđߗƩ\u0011ȅT∢\u0014ՁĂՀPĀݷݷݷݷݷݷݷݷݑݑđđđđđđ\u0012\u0001F櫆\u0014TǍ͗͗͗͗͗͗͗͗Ԁđđđđđğ0ۻۻ߻ջ0Āݷݷݷݷݷݷݷݷݑݑđđđđđđđݪ0櫆ջ0Ǎ͗͗͗͗͗͗͗͗ԀđđđđđđĻ̪̪̪̪̪̪̪̪̪̪̪̪݈ݪ0ճճճճճճճճճճճճջ0Āݷݷݷݷݷݷݷݷݑݑđđđđđđǆ禦禥槦槦妧榧奦榦楥禦禥禦ݪ0櫆\u0001ֺֺֺֺֺֺֺ\u00010Ǎ͗͗͗͗͗͗͗͗Ԁđđđđđ\u0014ȅT\u0016ՁĂՀPĀݷݷݷݷݷݷݷݷݑݑđđĐ\u0017\u0001ԔB櫆\u001dT#Ȅ8ȅT\u0004\u0014ՁĂTđŔđđđđđđđđđŔđđđđđđđĐđđ\u0014T݀\u0014TǍ͗͗͗͗͗͗͗͗Āđđđđđ\u0014Ά!\u0004\u0004\u0004\u0004\u0004\u0004\u0004\u0005\u0001⣦ͽͽͽͽͽԔĀݷݷݷݷݷݷݷݷݑݑđđĐƗ\u0004\u0004\u0004\u0004\u0004\u0004㍷񑓙*݊櫆̌̌̌̌̌̌ƛȉ϶̸ȉ"
  },
  {
    "path": "04 Support/DRAZ/SS/PAC.WINDZ",
    "content": "đđđđđđđđđĀđđĀđāĀđđ\u000f(\u0001汀߷\u000fՐ(Ցđđđđđđđđđϧ\u0001\u0001\u0001đđĀđđđđđđđđđđđđđđĀ\u000fѠ(ӹ\u0001я߽ۇ؀\u000f(đđđđđđđŗƝᄾܾ­޻\u0001\u0001޻\u0001\u0001\u0001\u0001đđđđđđđđđđđđđĀđđĀđđ\u000fǂ\"χߟƝϝݶ㶀\u0010ׇ\u0017ߛϛőőŁőőőőőőőőőőőőőőőŁ\u0010\u000e\u0004ǇݿY\u0006\u0005\u0005\u000f\u000e\u0005\u0001\u000f!\u0004\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001đđĀđđđđđđđđđđđđđđĀđ\u000fł(ర߽߽؍\u000fՄ(đđđđđđđđđǞ޿ܮ\u0001޿\u0001޿đđđđđđđđđđĀđđđđđĀđđđ\u000f(ߟ߷\rֆֆ\u0005\rޛ޻\u0001\u0001\u0001۞޻\u0001\u0001޻\u0001\u0001\u0001\u0001\u0001\u0001百\u0001\u0001ĐđĀđđđđđđđđđđđđđđđĐĀ\u0010\b\f\u0001\u0004߽݀\u0007\u000f\u001c\u0006ᠠȬܾܾ\u0001쀻\u0001\u0001\u0001đđđđđāđĐđđĀđđđĀđđđ\u000fǂ(ݶ\u000fՄ\u000f\u0005֒ƑőŐĐđđđđ౛đđĀđđđđđđđđđđđđđđϞƗƖƏƆ\u0006\u0004\u000f\u0005߽ʪ \u0004\u0004Ր\u000f𰰰𰰰𰰰𰰰đđđđđđđđđā\u0006솀đđđđđđđđđđĀđđđđĀāӃÇׇ\u0004\u000f\u0004\u0005∠\t\u0005\u000fŨłŨłŨłŨłŨŃđđđđđđĐ\u0004\u0001đđĀđđđđđđđĐđāāđđđĀđ\u000fł\u000f\u0019Ȣ݀ۇ؀\u000fՄ(đđĐĐĐ扲篟ֻ\u0001đđđđđđĀđđđđĀđđǗ͝ĐŐ\u000f\u0018\bȲΖ\u0001ΖǷ㶀ʨĂ\u000e\u000b\u000f\u0001\u0005젃󏻿\u0001\u0001\u0001\u0001đđĀđđđđđđđđӧЪԔĀđ\r\u0004\u000f\u0001\u0001\u0001\u0001\u0001Ç߽؍訊ʑʑđ\u000f(đđđđđ毟珀\u0001Ⴧ˦޿\u0001޿đđđđđđđđđĐĀԠՈբՈՈբՈՈđ\u000fǂ(ďׯ߷߷\u0005ġĪĪĪī\u000fՄ(ՑđĐÃ˿\u0001\u0001\u0001\u0001đđĀđĐđđđ\u0006ȢԢՈբբ\u000f\u001a\u0005ݟ\"ߟߟߟߟߟ\u0014ߟ\u000e\u0005\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001Y\u0006\u0004\u000f\u0011Ã\u0004χ\u0001đđĀđđđđđđđĐآ\u0010\u0017\u0001ݗ\u0001đđĻ\u0010Ո#\u0005䱤\u0001\u0001\u0001\u0001쀿đđđđđđĐđĀ\u0004\u0001\u0011Т.ôݶݶ\b\u0001∁\u0011Ѐ2őđđđđđđđđđđđđđ౛\u0001\u0001\u0001\u0001đđĀĐđđđđđđ\u0004ӞđđĐ\u0012ЈР5߽߽݀耈\u0014ՐĨ8Дőđđđđđđđđđđđ\u0001޿솁"
  },
  {
    "path": "04 Support/DRAZ/SS/SS0",
    "content": "Ĉ݁ݿĈĀ߷Ĉ߃ѝܿĈĈĈĈՌ޻ݽۻݿ߷ؿݿĈ͈ĈĈňĈݽݻݻۻ߻ȯºĈĈĈĈňĈ޻ݻݻݿ߷ǇĈĈĈĀۻؿۻ߻σĈĈĈĈĈĈĈňĈĈ߿񃀀̿ĀĈĈĈĈĈĈňĈ߿恑Ĉ߯߾Ǣţ񨔊ǢŢՇǢѸЊݿݿݻݿĈĈݿ糑Ĉ؃쀰ݿ؁ĈĈĈĈƵݿʈժՒĈĈĠĀݿݻܻ矀Փ߈ժкĈѢĈĈňЊĀݿǇТĈĈĈĀĈĈݿĀĈĈĈĈĈĀĈߙ敘ݿܹ怈ĈĈĀĈĈĈĀĈĈݿɇЂݿݿݿň݁ۿĈۣĀ߷Ĉݱݛػݱݛػ߻ܿĈĈĈĈĈļň̈Ĉػݱݹ߳ݛؿȗՂ΂ݱݛݻݻػ߻߂ĆĈЎЀؿݹ߳݃ǇĈĈĈĈĈĈݛݿݻݻػ߻ݻԼĈĈĀĈĈĈĈňĈĈݙݿϞӧπĈĈĈĈĈĈňĀĈ݃ݿĈ߷ቑߪժպժժժռݪժתժժĈĈĈĈĈĈĈĈňĈݿݿݻݿĈĈމ监ĈЪݿĈĈĈވĈĈĈĈĈĀݿАتժԒՌĈĈĈĀݿ߀߇Ӏ՜߈ժĈĈĈĀĀߎݿӢĈĈĀĈĈݿռĈĈĈĈĈĀĀĈΟޟݿ߀ĈĈĈĈĈĈĈĀň΍ĈݿĀ遀ĈĈĈĀĈĈĀݿݿݿ݁ڿĈĈۢĀݷĈՂݷ۽޷۽ؿĈĈĈݿĈІĂň̈Āŀݽ۷۽޷藑ĈĈ̈Āݷ۽ĢĢľԋĈĈĈĈňĈݽܿݻݻÇĈĈĈĈĈŀĈĈ˃ݿݻݻӻݻѼĈĈĈĈĈĈĀňĈĈ݌ݿ֯灢Āްߛׯ߀ĈĈĈĈĈĈĈňĈĈ݁ݿֆĈĀ߷ƈ鄀ĈĈĈĈĈĈĈĈňĈݿݿݻݿėĈĈ菑Ĉ߿߿߿ݿժժժժժުժժժժՂƤ̀߿߿ǟݿԂݻܻ䏑Ԫʈǆ՜ĈĈĈ߿ݿ󏀀տ߀ԪĈĈĈĈĀĈ׃ݿÇԂĈݿм܁ĈĀĈĈĈĀĈݿ͛ĈĈĈĀĈĈЈĈݿ燗ĈĈĈĈĈĈĈĀݿݿݿܿĈĈĈĈՎͻݹ杛ܳͻٹ杻ߛܳ󀀀ؿݿĈĂĈĈňĈ杛ݳͻܳͻ߻ٹ瀀Ĉʑ߀ĀĀŀĈͻݹ禇ݻݻ杻ߛܳ󀈀񈑢ĈĈĈĈňĿݳݿݻݻͻ߻ѻĈ倀ؿߛĈĈĈĈĈĈĀňĈ݆޿Ĉ̞ߟϞ􀈀ߪժպȪժժժռݪժתժժĈĈĈĈĈĈĈĈňĈĈ݁޿ĈĀ߷ňĈĈĈĈĈĈĈĈňĈݿݿݻݿ׻ĈĈ돑ĈՍݿժĐĨՒĈĀݿ߀ݻܻȪʀĈĈĈĀݿǇբĈĈĈĈĀĈݿĈĈĈĈĈĈĀĈݿυĈĈĀĈĈĈĀĈğĈݿɇ怢ĈĀݿ瑢ĈĈĈĈĈĈĈĀ"
  },
  {
    "path": "04 Support/DRAZ/SS/SS0.OLD",
    "content": "Ĉ݁ݿĈĀ߷Ĉ򃀀䃀߃ѝܿĈĈĈĈՃ޻ݽۻݿ߷ؿݿĈĈĈψňĈݽݻݻۻ߻ȯºĈĈĈĈňĈ޻ݻݻݿ߷ǇĈĈĈĀۻؿۻ߻σĈĈĈĈĈĈĈňĈĈ߿񃀀̿ЇĀĈĈĈĈĈĈňĈ߿恑Ĉ߯߾ǢԡǢ񨔊ǢŢՇǢѸЊݿݿݻݿĈĈݿ糑Ĉ僀؃쀰ݿ؁ĈĈĈĈՇݿʈժĈĈĈĀݿݻܻ矀Փ߈ժкĈѢĈĈňԈĀݿǇТĈĈĈĀĈĈݿĀĈĈĈĈĈĀĈߙ敘ݿܹ怈ĈĈĀĈĈĈĀĈĈݿȡɇЂݿݿݿň݁ۿĈۣĀ߷Ĉ僀ݱݛػݱݛػ߻ܿĈĈĈĈĈļ߈ĈǈĈػݱݹ߳ݛؿȗݱݛݻݻػ߻߂ĆĈЎЀؿݹ߳݃ǇĈĈĈĈĈĈݛݿݻݻػ߻ݻĈĈĀĈĈĈĈňĈĈݙݿϞӧπĈĈĈĈĈĈňĀĈ݃ݿĈ߷ቑߪժպժժժռݺתժժĈĈĈĈĈĈĈĈňĈݿݿݻݿĈĈމ监ĈЪ僀ݿĈĈĈވĈĈĈĈ՗ĈĀݿАتժĈĈĈĀݿ߀߇Ӏ՜߈ժĈĈĈĀĀߎݿӢĈĈĀĈĈݿĈĈĈĈĈĀĀĈΟޟݿ߀࿀ĈĈĈĈĈĈĈĀň΍ĈݿĀ偀ĈĈĈĀĈĈĀݿݿݿ݁ڿĈĈۢĀݷĈՂ僀ݷ۽޷۽ؿĈĈĈݿĈІĂ߈Ĉǀŀݽ۷۽޷藑ĈĈĀݷ۽ĢĢľԋĈĈĈĈňĈݽܿݻݻÇĈĈĈĈĈŀĈĈ˃ݿݻݻӻݻĈĈĈĈĈĈĀňĈĈ݌ݿ֯灢Āްߛׯ߀ĈĈĈĈĈĈĈňĈĈ݁ݿֆĈĀ߷ƈ偀ĈĈĈĈĈĈĈĈňĈݿݿݻݿėĈĈ菑Ĉ߿߿߿ݿժժժժժުժժժժՇ߿߿ǟݿԂݻܻ䏑ԪʈĈĈĈ߿ݿ󏀀տ߀ԪĈĈĈĈĀĈ׃ݿÇԂĈݿмĈĀĈĈĈĀĈݿ͛ĈĈĈĀĈĈЈĈݿ燗Ĉ぀ĈĈĈĈĈĈĀݿݿݿܿĈĈĈĈͻݹ杛ܳͻٹ杻ߛܳ󀀀ؿݿĈĂĈ׈ňĈ杛ݳͻܳͻ߻ٹ瀀ĈĀĀџĀŀĈͻݹ禇ݻݻ杻ߛܳ󀈀񈑢ĈĈĈĈňĿݳݿݻݻͻ߻ѻĈ倀ؿߛмĈĈĈĈĈĈĀňĈ݆޿Ĉ̞ߟϞ􀈀ߪժպժժժռתժժĈĈĈĈĈĈĈĈňĈĈ݁޿ĈĀ߷ň僀ĈĈĈĈĈĈĈĈňĈݿݿݻݿ׻ĈĈ돑ĈՃݿժĐĤĈĈՇݿ߀ݻܻȪʀĈĈĈĀݿǇբĈĈĈĈĀĈݿĈĈĈĈĈĈĀĈݿυؼлĈĈĀĈĈĈĀĈğĈݿɇ怢ĈĀݿ瑢Ĉ䃀ĈĈĈĈĈĈĀ"
  },
  {
    "path": "04 Support/DRAZ/SS/SS1",
    "content": "ݻݻݻݻݻݻݻݻݻݻӆݻݻݻݻݻݻݻݻӆЎͻͻͻͻ͈ͻͻ̀ӆĎԎͻͻͻͻ͈ͻͻ̀ӆݸݸݸݸݸݸݸݸϟǇǇϟӆЯЎݺݺݺݺݺݺݺݺ۳Ĉ۳Ĉ۳۳ӆݺݺݺݺݺݺݺݺۧۂĈĈۂĈĈۂĈۂӆׂݫݫݫݫ݈ݫݫ݀ܦ۠ĈĈ۠ĈĈ۠Ĉ۠ĈĈĈĈĈĈĈīݫݫݫݫ݈ݫݫ݀ӆĈÆݻݻݻݻݻĈݻݻݻݻݻݻݻݻݻݻݻݻݜÆȎԎݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݜÆ╡ݻݻݻݻݢȓȻݻݻ݀ׯ߾߾߾ׯ߾ÆПݻݻݻݻݢݻݻ݀͆ՁĈȻՁĈȻՁĈ՜ÆՀݻݻݻݻݨĈݻݻ݀ĈĈĈĈĈц׀ݻݻݻݻݻĈݻݻݻ׆πĈĈπĈĈπĈπĈĈĈĈݻݻݻݻݻĢݻݻݻݻݻݻݻݻݻݻݻݻݻ߆ԈԈԈԈԈԈԈԀ߆Ԁͻͻͻͻ͈ͻͻ̀߆Ўͻͻͻͻ͠ͻͻ̀Γȓ˓ȓȓȓȓȓדݺݺݺݺݺݺݺݺسΝ칎ĈΝ칎ĈΝٳΝ쇆߆пݺݺݺݺݺݺݺݺǦĈĈ쇆߆ՀͦߛĈĈߛĈĈߛĈߛĈĈ׈ĈĈĈΈīݫݫݫݫ݈ݫݫ݀ݦ۠ժժժժ۠ժժժժ۠ժժ۠ĈѿĈĈĈѿĈѿĈĈѿīݫݫݫݫ݈шݫݫ݀׆ݻݻݻݻݻĈݻݻݻݻݻݻݻݻݻݻݻݻݍ׆ՀݻݻݻݻݻĀݻݻݻݻݻݻݻݻݻݻݻݻݍ׆ݻݻݻݻݻݻݻݻ׆סݻݻݻݻݢݻݻ݀ތĈތĈ޼ލ׆Կݻݻݻݻݢݻݻ݀ćĈĈĈĈĈ׆ՂĈǆĈĈĈĈĈƁĿӢĈĿĈĈĿݻݻݻݻݻĈݻݻݻ׆ππππĈĿĈĈĿЈĿĈĿݻݻݻݻݻݻݻݻцпͻͻͻͻ͈ͻͻ̀црпԿͻͻͻͻ͈ͻͻ̀цޛޛޛޛцݺݺݺݺݺժժݺݺݺۿ‑Ĉۿ‑Ĉۿۿц𿭎激ݺݺݺݺݺݺݺݺ䦜ۙĈۙĈۙۙцԂĈѢĈѢĈѢĈѢĈшĈѢĈѢĈрħߛĈĈߛĈĈߛĈߛĈѿ󈑢ĈѿĈĈ߈ѿīݫݫݫݫ݈ݫݫ݀цۀۀۀۀĈĈĈĈĀĈĈĊثݫݫݫ݈ňݫÇހݻݻݻݻݻݻݻݻݻ݌ӆԿݻݻݻݻݻĈݻݻݻݻݻݻݻݻݻݻݻݻ݌ӆЀԿԿݻݻݻݻݻݻݻݻӆꁀݻݻݻݻݻǢݻݻݻǀӮժΪպժպΪժժժժՊΪժպΪݻݻݻݻݢݻݻ݀߹Ĉ߹Ĉߎߌӆ𿡁ݻݻݻݻݢЈݻݻ݀̇ĈĈĈĈĈӆтݻݻݻݻݻĈݻݻݻ䆑ĈĈĈĈĈğǈĈğĀğݻݻݻݻݻĈݻݻݻٻӆππππĈĈĈĈĈňĈĈĈԨݻݻݻݻݻݻ߀ӆԟͻͻͻͻ͈ͻͻ̀ӆͻͻͻͻ͈ͻͻ̀ӆꀀЀЀЀЀЈժժЀЀЀΝΝΝΌӆނݺݺݺݺݺݺݺݺΘĈΘĈΌӆ𯁁ݺݺݺݺݺݺݺݺϣۄĈĈۄĈĈۄĈۄӆׂݫݫݫݫ݈ݫݫ݀ܧۡĈĈۡĈĈۡĈۡĈȏĈĈĈ߈īݫݫݫݫ݈ݫݫ݀ӆۀۀۀۀݻݻݻݻݻݻݻݻԨ٫ݫݫݫݨĈݫ߀ݻݻݻݻݻݻݻݻݻ̃ӆݻݻݻݻݻĈݻݻݻ̃ӆԊݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻ̃ӮժΪժպժպΪժժժժՊΪժպΪĈĈĈĈĢĈĈĀʗ޼˗޼˗޼˗޼̃ӆ؆ݻݻݻݻݢݻݻ݀ǜ冢Ĉĸ冢Ĉĸ圠Ĝ̃ӆݻݻݻݻ݂ňݻݻ݀⼆φĈĈφĈĈφĈφ̃ӆׂݻݻݻݻݻĈݻݻݻϣρĈĈρĈĈρĈρĎĈĈĎĈĎݻݻݻݻݻĨݻݻݻ݃ӆψψψψĈݻݻݻݻݻݻƇ"
  },
  {
    "path": "04 Support/DRAZ/SS/SS10",
    "content": "ͻͻͻͻӆЈݻݻݻЈݻݻݻݻݻĀꌾӆĈݢݻĈݻݻݛݛݛݛĀݛݛꌾӆāĠݢݻĠݻݻݛݛݛݛŀݛݛꌾӆĄЪĈݢĈĈĈĈݻݻݻݻŀݻݻꌂІĄĈݢܻĈܻܻݻݻݻݻݻݻꀀІĄݨܻܻܻݻݻݻݻĀݻݻꀀІĄĈݢͻĈͻͻݻݻݻݻĀݻݻĈĈĈĀĄĈĈݢͻĈрͻͻݻݻݻݻݻݻݻݻݻݻӆĀݻݻݻĀݻݻňݢꌎӆĀݛĀݛݛݻݻݻݻĈݻݻݢꌎӆꁀŀݛŀݛݛݻݻݻݻ݂ݻݻݢꌎӆŀݻŀݻݻܻܻܻܻĈՠܻܻݢꌂІݻݻݻܻܻܻܻĈׂܻܻݨꀀІĀݻĀݻݻܻܻܻܻЈܻܻݢꀀІĈݻĀݻݻͻͻͻͻĈĈĀͻͻЀݢĈꑀЀĈĈĈݻݻݻͻͻͻͻĈŀĈĈŀͻͻ̃ӆňňĨĨĨĨĀĨĨ̃ӆĈݢݻĈݻݻݛݛݛݛݛݛ̃ӆՀꀀ݂ݻݻݻݛݛݛݛŀݛݛ̃ӆЪݪĈݢܻĈܻܻݻݻݻݻŀݻݻꄂІՂĈݢܻĈܻܻݻݻݻݻЀݻݻꀀІЈܻЈܻܻݻݻݻݻĀݻݻꀀІĈݢͻĈͻͻݻݻݻݻĀĈĈݻݻĀĈĈꄀĈݻ݂ͻĈŀͻͻݻݻݻݻĈݻݻӆĀĨĀĨĨܻܻܻܻĈܻܻݢӆݛݛݛݻݻݻݻĈݻݻ݂ӆ݊ŀݛŀݛݛݻݻݻݻЈݻݻݢծӆծբŀݻŀݻݻܻܻܻܻĈܻܻݢꄀІꕀЀݻЀݻݻܻܻܻܻĈܻܻꀀІĀݻĀݻݻňĀݢĈꑢԀĈĻݻĀݻݻͻͻͻͻĈĈͻͻŀ݂ĈꁀŀĈĈлĈݻݻݻͻͻͻͻĨĀĈĈĀͻͻ꜆ÆĈݢܻĈܻܻݛݛݛݛĀݛݛ꜆ÆĈݢݻĈݻݻݛݛݛݛЀݛݛ꜆ÆĀ聀ЈݨݻЈݻݻݛݛݛݛŀݛݛ꜆цĄĈݢܻĈܻܻݻݻݻݻŀݻݻꄀІĄĈݢܻĈܻܻݻݻݻݻŀݻݻꀀІĄňݢňĀĈĈĄĈĈݢͻĈͻͻݻݻݻݻĀĈĈݻݻĈĈꀠĄĈݻ݈ĈͻĨĀͻͻݻݻݻĈĈݻݻݢꇆ߆ĀݛĀݛݛݻݻݻݻĈݻݻݢꇆ߆܀ЀݛЀݛݛݻݻݻݻĈݻݻݨꇆ߆Â胀ŀݛŀݛݛܻܻܻܻňܻܻݢꇆцŀݻŀݻݻܻܻܻܻĈܻܻݢꄀІŀݻŀݻݻܻܻܻܻĠܻܻݢꀀІĀĀŻŻŻŻĈŻŻݢĈꑢĈĈݻĀݻݻͻͻͻͻĈĈĈͻͻĀ݈ĈꀨĀĈĈĈĈݻݻݻԨͻͻͻĢĀݻݻĀͻͻꍆ׆ĈݢݻĈݻݻݛݛݛݛĀݛݛꍆ׆ĈݢݻĈݻݻݛݛݛݛŀݛݛꍆ׆ňܻňܻܻŀꍆцĈݢܻĈܻܻݻݻݻݻŀݻݻꀀІĠ݂ܻĠܻܻݻݻݻݻĀݻݻꀀІĈݢŻĈŻŻݻݻݻݻĀݻݻĈĈĈĈĈĈݢͻĈͻͻݻݻݻݻĈĈݻݻĈĈĈꀊĈĈܻݻݻͻĢĀͻͻԨݻݻݻшݻݻЈݻݻݢцĀݛĀݛݛݻݻݻݻĈݻݻݢцǂŀݛŀݛݛݻݻݻݻĠݻݻцŀŀĈĈĈĈĈĈĈݢꌂцŀݻŀݻݻܻܻܻܻĈܻܻ݂ꀀІĀݻĀݻݻܻܻܻܻܻܻݢꀀІĀݻĀݻݻͻͻͻͻĈͻͻݢĈꑂĈĺĈݻݻݻͻͻͻͻĈрĈĈЀͻͻĀݻݻݻĀݻݻݻݻݻݻшݻݻ荺ĀݻݻĀ"
  },
  {
    "path": "04 Support/DRAZ/SS/SS11",
    "content": "ͻͻͻͻĆӆЈݻݻݻЈݻݻݻݻݻĀӆĈݢݻĈݻݻݛݛݛݛĀݛݛӆāĠݢݻĠݻݻݛݛݛݛŀݛݛӆĄĈݢĈĈĈĈݻݻݻݻŀݻݻꄀІĄĈݢܻĈܻܻݻݻݻݻݻݻꀀІݨܻܻܻݻݻݻݻĀݻݻꀀІĄĈݢͻĈͻͻݻݻݻݻĀ𰆈ݻݻĈĈĈĀĄĈĈݢͻĈрͻͻݻݻݻݻ둧둧ǀݻݻݻݻݻݻӆĀݻݻݻĀݻݻňݢ꜆ÆĀݛĀݛݛݻݻݻݻĈݻݻݢ꜆ÆԻŀݛŀݛݛݻݻݻݻ݂ݻݻݢ꜆цŀݻŀݻݻܻܻܻܻĈՠܻܻݢꄀІݻݻݻܻܻܻܻĈׂܻܻݨꀀІ䃀ĀݻĀݻݻܻܻܻܻЈܻܻݢꀀІĈݻĀݻݻͻͻͻͻĈĀͻͻЀݢĈꑀЀĈĈĈݻݻݻͻͻͻͻĈŀċѣċŀͻͻ߆ňňĨĨĨĨĀĨĨꇆ߆ĈݢݻĈݻݻݛݛݛݛݛݛꇆ߆݂ݻݻݻݛݛݛݛŀݛݛꇆцĈݢܻĈܻܻݻݻݻݻŀݻݻꄀІĈݢܻĈܻܻݻݻݻݻЀݻݻꀀІăЈܻЈܻܻݻݻݻݻĀݻݻꀀІĈݢͻĈͻͻݻݻݻݻĀǎݻݻĀĈĈꄀĈݻ݂ͻĈŀͻͻݻݻݻݻѣċѣݻݻꍆ׆ĀĨĀĨĨܻܻܻܻĈܻܻݢꍆ׆ݛݛݛݻݻݻݻĈݻݻ݂ꍆ׆Հ݊ŀݛŀݛݛݻݻݻݻЈݻݻݢծꍆцЪݪծբŀݻŀݻݻܻܻܻܻĈܻܻݢꀀІՂ𿀀ꕀЀݻЀݻݻܻܻܻܻĈܻܻꀀІĀݻĀݻݻňĀݢĈꑢԀĈĻݻĀݻݻͻͻͻͻĈͻͻŀ݂ĈꁀŀĈĈлĈݻݻݻͻͻͻͻĨĀĈĈĀͻͻцĈݢܻĈܻܻݛݛݛݛĀݛݛцĈݢݻĈݻݻݛݛݛݛЀݛݛцĀЈݨݻЈݻݻݛݛݛݛŀݛݛꌂцĄĈݢܻĈܻܻݻݻݻݻŀݻݻꀀІĄĈݢܻĈܻܻݻݻݻݻŀݻݻꀀІĄňݢňĀĈĈĄĈĈݢͻĈͻͻݻݻݻݻĀǏݻݻĈĈꀠĄĈݻ݈ĈͻĨĀͻͻݻݻݻĈĈݻݻݢꌾӆĀݛĀݛݛݻݻݻݻĈݻݻݢꌾӆ܀ЀݛЀݛݛݻݻݻݻĈݻݻݨꌾӆÂŀݛŀݛݛܻܻܻܻňܻܻݢꌂІŀݻŀݻݻܻܻܻܻĈܻܻݢꀀІŀݻŀݻݻܻܻܻܻĠܻܻݢꀀІĀĀŻŻŻŻĈŻŻݢĈꑢĈĈݻĀݻݻͻͻͻͻĈ􌗧ͻͻĀ݈ĈꀨĀĈĈĈĈݻݻݻԨ»ͻͻĢĀݻݻĀͻͻꌎӆĈݢݻĈݻݻݛݛݛݛĀݛݛꌎӆĈݢݻĈݻݻݛݛݛݛŀݛݛꌎӆňܻňܻܻŀꌂІĈݢܻĈܻܻݻݻݻݻŀݻݻꀀІĠ݂ܻĠܻܻݻݻݻݻĀݻݻꀀІĈݢŻĈŻŻݻݻݻݻĀݻݻĈĈĈĈĈĈݢͻĈͻͻݻݻݻݻǈݻݻĈĈĈꀊĈĈܻݻݻͻĢĀͻͻԨݻݻݻшݻݻЈݻݻݢ̃ӆĀݛĀݛݛݻݻݻݻĈݻݻݢ̃ӆǂŀݛŀݛݛݻݻݻݻĠݻݻ̃ӆŀŀĈĈĈĈĈĈĈݢꄂІŀݻŀݻݻܻܻܻܻĈܻܻ݂ꀀІĀݻĀݻݻܻܻܻܻܻܻݢꀀІĀݻĀݻݻͻͻͻͻĈ𠦘𠆘ͻͻݢĈꑂĈĈĺĈݻݻݻͻͻͻͻĈрŎŎЀͻͻĀݻݻݻĀݻݻݻݻݻݻшݻݻЀĀݻݻĀ"
  },
  {
    "path": "04 Support/DRAZ/SS/SS12",
    "content": "ͻͻͻͻ߆ЈݻݻݻЈݻݻݻݻݻĀꇆ߆ĈݢݻĈݻݻݛݛݛݛĀݛݛꇆ߆āĠݢݻĠݻݻݛݛݛݛŀݛݛꇆ߆ĄĈݢĈĈĈĈݻݻݻݻŀݻݻꇆ߆ĄĈݢܻĈܻܻݻݻݻݻݻݻꇆєĄݨܻܻܻݻݻݻݻĀݻݻꄀІĄĈݢͻĈͻͻݻݻݻݻĀ𰆈ݻݻĈĈĈĀĄĈĈݢͻĈрͻͻݻݻݻݻ둧둧ǀݻݻݻݻݻݻ׆ĀݻݻݻĀݻݻňݢꍆ׆ĀݛĀݛݛݻݻݻݻĈݻݻݢꍆ׆ŀݛŀݛݛݻݻݻݻ݂ݻݻݢꍆ׆ŀݻŀݻݻܻܻܻܻĈՠܻܻݢꍆ׆臐ݻݻݻܻܻܻܻĈׂܻܻݨꍆцĀݻĀݻݻܻܻܻܻЈܻܻݢꀀІĈݻĀݻݻͻͻͻͻĈĀͻͻЀݢĈꑀЀĈĈĈݻݻݻͻͻͻͻĈŀċѣċŀͻͻцňňĨĨĨĨĀĨĨцĈݢݻĈݻݻݛݛݛݛݛݛцՀ݂ݻݻݻݛݛݛݛŀݛݛцЪݪĈݢܻĈܻܻݻݻݻݻŀݻݻцՂĈݢܻĈܻܻݻݻݻݻЀݻݻꌂцЈܻЈܻܻݻݻݻݻĀݻݻꀀІĈݢͻĈͻͻݻݻݻݻĀǎݻݻĀĈĈꄀĈݻ݂ͻĈŀͻͻݻݻݻݻѣċѣݻݻꌾӆĀĨĀĨĨܻܻܻܻĈܻܻݢꌾӆݛݛݛݻݻݻݻĈݻݻ݂ꌾӆ݊ŀݛŀݛݛݻݻݻݻЈݻݻݢծꌾӆծբŀݻŀݻݻܻܻܻܻĈܻܻݢꌾӆꕀЀݻЀݻݻܻܻܻܻĈܻܻꌂІĀݻĀݻݻňĀݢĈꑢԀĈĻݻĀݻݻͻͻͻͻĈͻͻŀ݂ĈꁀŀĈĈлĈݻݻݻͻͻͻͻĨĀĈĈĀͻͻꌎӆĈݢܻĈܻܻݛݛݛݛĀݛݛꌎӆĈݢݻĈݻݻݛݛݛݛЀݛݛꌎӆĀЈݨݻЈݻݻݛݛݛݛŀݛݛꌎӆĄĈݢܻĈܻܻݻݻݻݻŀݻݻꌎӆĄĈݢܻĈܻܻݻݻݻݻŀݻݻꌂІĄňݢňĀĈĈĄĈĈݢͻĈͻͻݻݻݻݻĀǏݻݻĈĈꀠĄĈݻ݈ĈͻĨĀͻͻݻݻݻĈĈݻݻݢ̃ӆĀݛĀݛݛݻݻݻݻĈݻݻݢ̃ӆ܀ЀݛЀݛݛݻݻݻݻĈݻݻݨ̃ӆÂŀݛŀݛݛܻܻܻܻňܻܻݢ̃ӆŀݻŀݻݻܻܻܻܻĈܻܻݢ̃ӆŀݻŀݻݻܻܻܻܻĠܻܻݢꄂІĀĀŻŻŻŻĈŻŻݢĈꑢĈĈݻĀݻݻͻͻͻͻĈ􌗧ͻͻĀ݈ĈꀨĀĈĈĈĈݻݻݻԨͻͻͻĢĀݻݻĀͻͻӆĈݢݻĈݻݻݛݛݛݛĀݛݛӆĈݢݻĈݻݻݛݛݛݛŀݛݛӆňܻňܻܻŀӆĈݢܻĈܻܻݻݻݻݻŀݻݻƪĠ݂ܻĠܻܻݻݻݻݻĀݻݻꄀІĈݢŻĈŻŻݻݻݻݻĀݻݻĈĈĈĈĈĈݢͻĈͻͻݻݻݻݻǈݻݻĈĈĈꀊĈĈܻݻݻͻĢĀͻͻԨݻݻݻшݻݻЈݻݻݢ꜆ÆĀݛĀݛݛݻݻݻݻĈݻݻݢ꜆ÆǂŀݛŀݛݛݻݻݻݻĠݻݻ꜆ÆŀŀĈĈĈĈĈĈĈݢ꜆ÆŀݻŀݻݻܻܻܻܻĈܻܻ݂꜆ԂĀݻĀݻݻܻܻܻܻܻܻݢꄀІĀݻĀݻݻͻͻͻͻĈ𠦘𠆘ͻͻݢĈꑂĈĈĺĈݻݻݻͻͻͻͻĈрŎŎЀͻͻĀݻݻݻĀݻݻݻݻݻݻшݻݻ荺ĀݻݻĀ"
  },
  {
    "path": "04 Support/DRAZ/SS/SS13",
    "content": "ͻͻͻͻӆЈݻݻݻЈݻݻݻݻݻĀꌎӆĈݢݻĈݻݻݛݛݛݛĀݛݛꌎӆāĠݢݻĠݻݻݛݛݛݛŀݛݛꌂІĄՊĈݢĈĈĈĈݻݻݻݻŀݻݻꀀІĄĈݢܻĈܻܻݻݻݻݻݻݻꀀІĄݨܻܻܻݻݻݻݻĀݻݻꀀІĄĈݢͻĈͻͻݻݻݻݻĀݻݻĈĈĈĀĄĈĈݢͻĈрͻͻݻݻݻݻݻݻݻݻݻݻӆĀݻݻݻĀݻݻňݢ̃ӆĀݛĀݛݛݻݻݻݻĈݻݻݢ̃ӆŀݛŀݛݛݻݻݻݻ݂ݻݻݢꄂІժŀݻŀݻݻܻܻܻܻĈՠܻܻݢꀀІ🀀ݻݻݻܻܻܻܻĈׂܻܻݨꀀІĀݻĀݻݻܻܻܻܻЈܻܻݢꀀІĈݻĀݻݻͻͻͻͻĈĈĀͻͻЀݢĈꑀЀĈĈĈݻݻݻͻͻͻͻĈŀĈĈŀͻͻӆňňĨĨĨĨĀĨĨӆĈݢݻĈݻݻݛݛݛݛݛݛӆՀ݂ݻݻݻݛݛݛݛŀݛݛꄀІЪݪĈݢܻĈܻܻݻݻݻݻŀݻݻꀀІՂ࿀ĈݢܻĈܻܻݻݻݻݻЀݻݻꀀІЈܻЈܻܻݻݻݻݻĀݻݻꀀІϿĈݢͻĈͻͻݻݻݻݻĀĈĈݻݻĀĈĈꄀĈݻ݂ͻĈŀͻͻݻݻݻݻĈݻݻ꜆ÆĀĨĀĨĨܻܻܻܻĈܻܻݢ꜆ÆݛݛݛݻݻݻݻĈݻݻ݂꜆ц݊ŀݛŀݛݛݻݻݻݻЈݻݻݢծꄀІՔŀݻŀݻݻܻܻܻܻĈܻܻݢꀀІ῕ЀݻЀݻݻܻܻܻܻĈܻܻꀀІĀݻĀݻݻňĀݢĈꑢԀ¿ĻݻĀݻݻͻͻͻͻĈĈͻͻŀ݂ĈꁀŀĈĈлĈݻݻݻͻͻͻͻĨĀĈĈĀͻͻꇆ߆ĈݢܻĈܻܻݛݛݛݛĀݛݛꇆ߆ĈݢݻĈݻݻݛݛݛݛЀݛݛꇆцĀЈݨݻЈݻݻݛݛݛݛŀݛݛꄀІĄĈݢܻĈܻܻݻݻݻݻŀݻݻꀀІĄĈݢܻĈܻܻݻݻݻݻŀݻݻꀀІĄňݢňĀĈĈĄĈĈݢͻĈͻͻݻݻݻݻĀĈĈݻݻĈĈꀠĄĈݻ݈ĈͻĨĀͻͻݻݻݻĈĈݻݻݢꍆ׆ĀݛĀݛݛݻݻݻݻĈݻݻݢꍆ׆܀ЀݛЀݛݛݻݻݻݻĈݻݻݨꍆцÂŀݛŀݛݛܻܻܻܻňܻܻݢꀀІŀݻŀݻݻܻܻܻܻĈܻܻݢꀀІŀݻŀݻݻܻܻܻܻĠܻܻݢꀀІĀĀŻŻŻŻĈŻŻݢĈꑢĜĈݻĀݻݻͻͻͻͻĈĈĈͻͻĀ݈ĈꀨĀĈĈĈĈݻݻݻԨͻͻͻĢĀݻݻĀͻͻцĈݢݻĈݻݻݛݛݛݛĀݛݛцĈݢݻĈݻݻݛݛݛݛŀݛݛꌂцňܻňܻܻŀꀀІĈݢܻĈܻܻݻݻݻݻŀݻݻꀀІĠ݂ܻĠܻܻݻݻݻݻĀݻݻꀀІĈݢŻĈŻŻݻݻݻݻĀݻݻĈĈĈĈĈĈݢͻĈͻͻݻݻݻݻĈĈݻݻĈĈĈꀊĈĈܻݻݻͻĢĀͻͻԨݻݻݻшݻݻЈݻݻݢꌾӆĀݛĀݛݛݻݻݻݻĈݻݻݢꌾӆǂŀݛŀݛݛݻݻݻݻĠݻݻꌂІꁐŀŀĈĈĈĈĈĈĈݢꀀІŀݻŀݻݻܻܻܻܻĈܻܻ݂ꀀІĀݻĀݻݻܻܻܻܻܻܻݢꀀІĀݻĀݻݻͻͻͻͻĈͻͻݢĈꑂĈĎĺĈݻݻݻͻͻͻͻĈрĈĈЀͻͻĀݻݻݻĀݻݻݻݻݻݻшݻݻ荺ĀݻݻĀ"
  },
  {
    "path": "04 Support/DRAZ/SS/SS14",
    "content": "ͻͻͻͻӆЈݻݻݻЈݻݻݻݻݻĀꌎӆĈݢݻĈݻݻݛݛݛݛĀݛݛꌂІāĠݢݻĠݻݻݛݛݛݛŀݛݛꀀІĄޓĈݢĈĈĈĈݻݻݻݻŀݻݻꀀІĄĈݢܻĈܻܻݻݻݻݻݻݻꀀІĄ🀀ݨܻܻܻݻݻݻݻĀݻݻꀀІĄĈݢͻĈͻͻݻݻݻݻĀݻݻĈĈĈĀĄĈĈݢͻĈрͻͻݻݻݻݻݻݻݻݻݻݻӆĀݻݻݻĀݻݻňݢ̃ӆĀݛĀݛݛݻݻݻݻĈݻݻݢꄂІŀݛŀݛݛݻݻݻݻ݂ݻݻݢꀀІŀݻŀݻݻܻܻܻܻĈՠܻܻݢꀀІݻݻݻܻܻܻܻĈׂܻܻݨꀀІĀݻĀݻݻܻܻܻܻЈܻܻݢꀀІĈݻĀݻݻͻͻͻͻĈĈĀͻͻЀݢĈꑀЀĈĈĈݻݻݻͻͻͻͻĈŀĈĈŀͻͻӆňňĨĨĨĨĀĨĨӆĈݢݻĈݻݻݛݛݛݛݛݛꄀІՀ݂ݻݻݻݛݛݛݛŀݛݛꀀІЪݪĈݢܻĈܻܻݻݻݻݻŀݻݻꀀІՂĈݢܻĈܻܻݻݻݻݻЀݻݻꀀІЈܻЈܻܻݻݻݻݻĀݻݻꀀІĈݢͻĈͻͻݻݻݻݻĀĈĈݻݻĀĈĈꄀĈݻ݂ͻĈŀͻͻݻݻݻݻĈݻݻ꜆ÆĀĨĀĨĨܻܻܻܻĈܻܻݢ꜆цݛݛݛݻݻݻݻĈݻݻ݂ꄀІۊŀݛŀݛݛݻݻݻݻЈݻݻݢծꀀІŀݻŀݻݻܻܻܻܻĈܻܻݢꀀІЀݻЀݻݻܻܻܻܻĈܻܻꀀІĀݻĀݻݻňĀݢĈꑢԀ܈ĻݻĀݻݻͻͻͻͻĈĈͻͻŀ݂ĈꁀŀĈĈлĈݻݻݻͻͻͻͻĨĀĈĈĀͻͻꇆ߆ĈݢܻĈܻܻݛݛݛݛĀݛݛꇆцĈݢݻĈݻݻݛݛݛݛЀݛݛꄀІĀЈݨݻЈݻݻݛݛݛݛŀݛݛꀀІĄĈݢܻĈܻܻݻݻݻݻŀݻݻꀀІĄĈݢܻĈܻܻݻݻݻݻŀݻݻꀀІĄňݢňĀĈĈĄĈĈݢͻĈͻͻݻݻݻݻĀĈĈݻݻĈĈꀠĄĈݻ݈ĈͻĨĀͻͻݻݻݻĈĈݻݻݢꍆ׆ĀݛĀݛݛݻݻݻݻĈݻݻݢꍆц܀ЀݛЀݛݛݻݻݻݻĈݻݻݨꀀІÂԓŀݛŀݛݛܻܻܻܻňܻܻݢꀀІёŀݻŀݻݻܻܻܻܻĈܻܻݢꀀІŀݻŀݻݻܻܻܻܻĠܻܻݢꀀІ߇ĀĀŻŻŻŻĈŻŻݢĈꑢƈĈݻĀݻݻͻͻͻͻĈĈĈͻͻĀ݈ĈꀨĀĈĈĈĈݻݻݻԨͻͻͻĢĀݻݻĀͻͻцĈݢݻĈݻݻݛݛݛݛĀݛݛꌂцĈݢݻĈݻݻݛݛݛݛŀݛݛꀀІԑňܻňܻܻŀꀀІĈݢܻĈܻܻݻݻݻݻŀݻݻꀀІ࿁Ġ݂ܻĠܻܻݻݻݻݻĀݻݻꀀІĈݢŻĈŻŻݻݻݻݻĀݻݻĈĈĈĈĈĈݢͻĈͻͻݻݻݻݻĈĈݻݻĈĈĈꀊĈĈܻݻݻͻĢĀͻͻԨݻݻݻшݻݻЈݻݻݢꌾӆĀݛĀݛݛݻݻݻݻĈݻݻݢꌂІǂŀݛŀݛݛݻݻݻݻĠݻݻꀀІԐŀŀĈĈĈĈĈĈĈݢꀀІŀݻŀݻݻܻܻܻܻĈܻܻ݂ꀀІ𿁀ĀݻĀݻݻܻܻܻܻܻܻݢꀀІǟĀݻĀݻݻͻͻͻͻĈͻͻݢĈꑂğĈĺĈݻݻݻͻͻͻͻĈрĈĈЀͻͻĀݻݻݻĀݻݻݻݻݻݻшݻݻ荺ĀݻݻĀ"
  },
  {
    "path": "04 Support/DRAZ/SS/SS4",
    "content": "Ĉ݁ݿĈĀ߷Ĉ򃀀䃀߃񝠀ܿĈĈĈĈŃ޻ݽۻݿ߷ؿݿĈĈĈψňĈݽݻݻۻ߻ĻºĈĈĈĈňĈ޻ݻݻݿ߷ǇĈĈĈĀۻؿۻ߻σĈĈĈĈĈĈĈňĈĈ߿񃀀̿ЇĀĈĈĈĈĈĈňĈ߿恑Ĉ߯߾ДǢѽԡǢ񨔊ǢŢՇǢѸЊݿݿݻݿĈĈݿ糑Ĉ僀؃쀰ݿ؁ĈĈĈĈŇݿĈժĈĈĈĀݿݻܻ矀߈ժкĈѢĈĈňԈĀݿǇТĈĈĈĀĈĈݿĀĈĈĈĈĈĀĈߙ敘ݿܹ怀ĈĈĀĈĈĈĀĈĈݿєȡɇЂݿݿݿň݁ۿĈۣĀ߷Ĉ僀ݱݛػݱݛػ߻ܿĈĈĈĈĈļ߈ĈǈĈػݱݹ߳ݛؿݱݛݻݻػ߻߂ĈЎЀؿݹ߳݃ǇĈĈĈĈĈĈݛݿݻݻػ߻ݻĈĈĀĈĈĈĈňĈĈݙݿϞӧπ𽀀ĈĈĈĈĈĈňĀĈ݃ݿĈ߷ቑĈߪժ꽪ժժժվֺתժժĈĈĈĈĈĈĈĈňĈݿݿݻݿĈĈމ监Ĉ僀ݿĈĈĈވĈĈĈĈ՗ĈĀݿАتժĈĈĈĀݿ߀߇Ӏ՟߈ժĈĈĈĀĀߎݿӢĈĈĀĈĈݿĈĈĈĈĈĀĀĈΟޟݿ߀࿀ĈĈĈĈĈĈĈĀň΍ĈݿĀЀ偀ĈĈĈĀĈĈĀݿݿݿ݁ڿĈĈۢĀݷĈŃݷ۽޷۽ؿĈĈĈݿĈІ∑Ă߈Ĉǀŀݽ۷۽޷菑ĈĈĀݷ۽ĢĢľԋĈĈĈĈňĈݽܿݻݻÇĈĈĈĈĈŀĈĈ˃ݿݻݻӻݻмĈĈĈĈĈĈĀňĈĈ݌ݿ֯灢Āްߛׯ߀ཀĈĈĈĈĈĈĈňĈĈ݁ݿֆĈĀ߷ƈЊ偀ĈĈĈĈĈĈĈĈňĈݿݿݻݿ䗀ĈĈ菑ĈŃ߿߿߿ݿժժժժժުժժժիՇ߿߿ǟݿݻܻďԪʈĈĈĈ߿ݿ󏀀տ߀ԪĈĈĈĈĀĈ׃ݿÇՂĈݿмĈĀĈĈĈĀĈݿ͛ཀĈĈĈĀĈĈЈĈݿ燗Ĉ぀ĈĈĈĈĈĈĀݿݿݿܿĈĈĈĈŃͻݹ杛ܳͻٹ杻ߛܳ󀀀ؿݿĈĂĈ׈ňĈ杛ݳͻܳͻ߻ٹ瀀ĈĀĀџĀŀĈͻݹ禇ݻݻ杻ߛܳ󀀀񈑢ĈĈĈĈňĿݳݿݻݻͻ߻ѻĈ倀ؿߛоĈĈĈĈĈĈĀňĈ݆޿Ĉ̞ߟϞ􀀀ߪժ꽪ժժժվתժժĈĈĈĈĈĈĈĈňĈĈ݁޿ĈĀ߷ňՀ僀ĈĈĈĈĈĈĈĈňĈݿݿݻݿ׻ĈĈ돑ĈŃݿժĐĤĈĈݿ߀ݻܻȪʀĈĈĈĀݿǇբĈĈĈĈĀĈݿĈĈĈĈĈĈĀĈݿυолĈĈĀĈĈĈĀĈğĈݿժբɇ怢ĈĀݿ瑢Ĉ䃀ĈĈĈĈĈĈĀ"
  },
  {
    "path": "04 Support/DRAZ/SS/SS5",
    "content": "ݻݻݻݻݻݻݻݻݻݻЈݻݻݻݻݻݻݻĀݻݻݻݻݻݻݻІĈݢݢĀݛݛݛݛݛݛݛІĠݢݢŀݛݛݛݛݛݛݛІĈݢݢŀݻݻݻݻݻݻݻІځĈݢݢݻݻݻݻݻݻݻІԟݨݨĀݻݻݻݻݻݻݻІ񿅀ĈݢݢĀݻݻݻݻݻݻݻĀĈ񁑢ĈňĈĈĺĈрݢĈĈĈĈĈݢݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻĀݻݻݻݻݻݻňІݢĀĈݻݻݻݻݻݻݻІĀԀݢŀݻݻݻݻݻݻݻІݢŀĈܻܻܻܻܻܻܻІВݢĈܻܻܻܻܻܻܻІԿݨĀЈܻܻܻܻܻܻܻІݢĀĈĈĈͻͻͻͻͻͻͻЀĈĈĈĈĈݢĈĈĈĈĈĺĈĈĈͻͻͻͻͻͻͻݻݻݻݻݻݻݻݻݻݻňĀĨĨĨĨĨĨĨІՀĈݢݢݛݛݛݛݛݛݛІ݂݂ŀݛݛݛݛݛݛݛІЮĈݢݢŀݻݻݻݻݻݻݻІДĈݢݢЀݻݻݻݻݻݻݻІտЈĀݻݻݻݻݻݻݻІĀĈݢĈĈĈĈĈݢĈĈݻݻݻݻݻݻݻĈĈĈĈĈĺĈŀ݂ĈĈĈĈĈ݂ĈĈݻݻݻݻݻݻݻцĀĈܻܻܻܻܻܻܻІԀݢĈݻݻݻݻݻݻݻІ݂݂ŀЈݻݻݻݻݻݻݻІՠк菀ݢŀĈܻܻܻܻܻܻܻІׂҟݢЀĈܻܻܻܻܻܻܻІ忀ĀňԀğĈĈĈݢĀĈĈĈĈĺĈĈĈͻͻͻͻͻͻͻŀĈĈĈĈĈ݂ĈĈĈĈĈĺĈĈĈͻͻͻͻͻͻͻцĈݢݢĀݛݛݛݛݛݛݛІЀĈݢݢЀݛݛݛݛݛݛݛІЈݨݨŀݛݛݛݛݛݛݛІ𱀀🀀ĈݢݢŀݻݻݻݻݻݻݻІ⿀ĈݢݢŀݻݻݻݻݻݻݻІňݢݢĀĈѯ舑ǈĈĺĈݢĈĈĈĈĈݢĈĈݻݻݻݻݻݻݻĈĈĈĈĈĺĨĀ݈ĈĈĈĈĈ݈ĈĈݻݻݻݻݻÇцݢĀĈݻݻݻݻݻݻݻІЀЀݢЀĈݻݻݻݻݻݻݻІݨŀňܻܻܻܻܻܻܻІת𿀀ݢŀĈܻܻܻܻܻܻܻІ𿀀ݢŀĠܻܻܻܻܻܻܻІݢĀĈŻŻŻŻŻŻŻĈȓĈĈݢĀĈĈĈĈĈĺĈĈĈĈͻͻͻͻͻͻͻĀĈĈĈĈĈĈ݈ĈĈĈĈĈĈĈлݻͻͻͻͻͻͻ߀цĈݢݢĀݛݛݛݛݛݛݛІЀĈݢݢŀݛݛݛݛݛݛݛІňŀІ׊ĈݢݢŀݻݻݻݻݻݻݻІؿĠ݂݂ĀݻݻݻݻݻݻݻІĈݢݢĀݻݻݻݻݻݻݻĈĈ񡐢ǈǈĈĺĈݢĈĈĈĈĈݢĈĈݻݻݻݻݻݻݻݻĈĈĈĈĈĈĢĀݻݻݻݻݻݻݻݻݻݻݻݻݻݻϟІݢĀĈݻݻݻݻݻݻݻІЀݢŀĠݻݻݻݻݻݻݻІŀĈĈĈĈĈĈĈĈІݢŀĈܻܻܻܻܻܻܻІп݂ĀܻܻܻܻܻܻܻІݢĀĈͻͻͻͻͻͻͻĈѯ葢ĈĈݢĈĈĈĈĈĺĠĈĈĈͻͻͻͻͻͻͻĀݻݻݻݻݻݻݻшݻݻݻݻݻݻݻԻݻÇހ"
  },
  {
    "path": "04 Support/DRAZ/SS/SS6",
    "content": "ݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻԀͻͻ͈ͻͻͻ̀Ԁͻͻ͈ͻͻͻ̀؂ʀݸݸݸݸݸݸݸǇǇǇ󀀎ݺݺݺݺݺݺݺ۳Ĉ۳Ĉ۳Ĉ۳ݺݺݺݺݺݺݺۂĈĈۂĈĈۂĈĈۂՀݫݫ݈ݫݫݫ݀۠ĈĈ۠ĈĈ۠ĈĈ۠ĈĈĈĈĈĈĈīݫݫ݈ݫݫݫ݀ĈݻݻݻĊݻݻݻݻݻݻݻݻݻݻݻݻݻ݀ݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݡтՎݻݻݢȓȻݻݻݻ݀߾߾߾ݻݻݢݻݻݻ݀ՁĈȻՁĈȻՁĈȻՀݻݻݨĎݻݻݻ݀ĈĈĈĈĈĈݻݻݻğݻݻݻݻπĈĈπĈĈπĈĈπĈĈĈĈݻݻݻѿĈݻݻݻݻݻݻݻݻݻݻݻݻݻݻԈԈԈԈԈԈԀͻͻ͈ͻͻͻ̀ͻͻ͠ͻͻͻ̀ȓȓȓȓȓȓȓȓݺݺݺݺݺݺݺ칎ĈΝ칎ĈΝ칎ĈΝ쀀ݺݺݺݺݺݺݺĈĈĈ쀀ߛĈĈߛĈĈߛĈĈߛĈĈĈĈĈĈīݫݫ݈ѿÈݫݫݫ݀۠ժժժժ۠ժժժժ۠ժժժժ۠ѿĈĈĈѿĈѿĈĈĈѿīݫݫݠĿݫݫݫ݀ݻݻݻĿݻݻݻݻݻݻݻݻݻݻݻݻݻ݀рݻݻݻĿݻݻݻݻݻݻݻݻݻݻݻݻݻ݀ݻݻݻݻݻݻݻիŎݻݻݢݻݻݻ݀ތĈތĈތĈހݻݻݢݻݻݻ݀ĈĈĈĈĈĈՀĎĈĈĈĈĈĈĿĔĬĿĈĈĈĿݻݻݻĿĈݻݻݻݻππππĿĈĈĿĿĈĈĿݻݻݻĀݻݻݻݻͻͻ͈ѿͻͻͻ̀ͻͻ͈ѿͻͻͻ̀࿀ޛޛޛޛիݺݺݺժժժݺݺݺݺۿ‑Ĉۿ‑Ĉۿ‑ĈۿݺݺݺݺݺݺݺۙĈۙĈۙĈۙՀĈѢĈѢĈшĈѢĈѢĈѢĈрߛĈĈߛĈĈߛĈĈߛѿ􉑜ĈĈѿĈĈĈĈѿīݫݫ݈Āݫݫݫ݀ۀۀۀۀĈĈĈĀĈĈĈĊܫݫݢĈݫݫÇހݻݻݻݻݻݻݻݻݻ݀Ѐݻݻݻğݻݻݻݻݻݻݻݻݻݻݻݻݻ݀ݻݻݻݻݻݻݻ࿀ݻݻݻǢݻݻݻݻǀժΪӪպΪժժՊЪժΪժժպժժΪݻݻݢݻݻݻ݀߹Ĉ߹Ĉ߹Ĉ߀ݻݻݢЎݻݻݻ݀ĈĈĈĈĈĈՀݻݻݻĎݻݻݻݻĈĈĈĈĈĈğľğĀĈĈğݻݻݻĈݻݻݻݻππππĈĈĈĈĈĈĈĈԨݻݻݻݻݻݻ߀ͻͻ͈ͻͻͻ̀؀ͻͻ͈ͻͻͻ̀ЀЀЈժժժЀЀЀЀΝΝΝ΀ݺݺݺݺݺݺݺΘĈΘĈΘĈ΀ݺݺݺݺݺݺݺۄĈĈۄĈĈۄĈĈۄՀݫݫ݈ݫݫݫ݀ۡĈĈۡĈĈۡĈĈۡĈĈĈĈĈĈīݫݫ݈ݫݫݫ݀ۀۀۀۀݻݻݻݻݻݻݻݻԨݫݫݻݫݫ߀ݻݻݻݻݻݻݻݻݻ݀ЀݻݻݻĊݻݻݻݻ􀀀ݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻժΪҪպΪժժՊЪժΪժժպժժΪĈĈĢĈĈĈĀ˗޼˗޼˗޼倀ݻݻݢݻݻݻ݀冢Ĉĸ冢Ĉĸ冢Ĉĸ倀ݻݻ݂Ŏݻݻݻ݀φĈĈφĈĈφĈĈφՀݻݻݻĎݻݻݻݻρĈĈρĈĈρĈĈρĎĈĎĈĈĎݻݻݻĈݻݻݻݻψψψψݻݻݻݻݻݻƇ"
  },
  {
    "path": "04 Support/DRAZ/SS/SS7",
    "content": "ݻݻݻݻݻݻݻݻݻݻӆ̙˘ݻݻݻݻݻݻݻݻݻ̪ӆ̙˘͈ͻͻͻͻͻͻ̪̀큀āāӆԀ̙띀ԀԀ͈ͻͻͻͻͻͻ̀تĄĄӆֆ̙ԀݸݸݸݸݸݸݸݸȪĄĄӆ̙ݺݺݺݺݺݺݺݺɪĄĄӆ̙Հݺݺݺݺݺݺݺݺ̪ĄĄӆֆĈښ׊݈ݫݫݫݫݫݫ݀ֆĈĘĄĄꌐĈĈĈĈĈĈĈĈ݈ݫݫݫݫݫݫ݀ӆժժ˘ꀀĈӪ͇꜆Æժժ˘ݻĈݻݻݻݻݻݻݻӪ꜆Æժժ˘ݻݻݻݻݻݻݻݻ̪큀꜆Æժժ띡ծ껷ݢȓȻݻݻݻݻݻݻ݀ت꜆Æ֦ժժ🀀껷ݢݻݻݻݻݻݻ݀Ȫ꜆ÆժժՂ껷ݨĈݻݻݻݻݻݻ݀계꜆цǈԾЂݻĈݻݻݻݻݻݻݻцĈĘĈĈĈĈĈĈĈĈĈĈݻĢѿݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻ߆̙띀ꈑԈԈԈԈԈԈԈԀΪ݅ꇆ߆̙˘Ѐ͈ͻͻͻͻͻͻ֪͇̀ꇆ߆̙˘Ѐ͠ͻͻͻͻͻͻ̀ӪꇆΓȓȒ̙˘ȓȓȓګɓݺݺݺݺݺݺݺݺ̪큀ꇆ߆̙띀🀀ݺݺݺݺݺݺݺݺتꇆ߆֦̙ՂꏗĈĈĈĈĈԑĊ݈ݫݫݫݫݫݫ݀܆ݻꄑĈĈĈĈĈĈĈĈĈ݈шĿݫݫݫݫݫݫ݀섀ꍆ׆ݻۚݻĈݻݻݻݻݻݻݻ۪ꍆ׆рݻ띀рЀݻĀݻݻݻݻݻݻݻϪ݅ꍆ׆ݻ똀ݻݻݻݻݻݻݻݻ֪͇ꍆ׆ݻ˘ݪ껷ݢݻݻݻݻݻݻ݀Ӫꍆ׆ݻ˘ߴ񇀀𿀀껷ݢݻݻݻݻݻݻ̪݀큀ꍆ׆ݻ띀ԊꀀĈ؞ƁĈĈĈĈĈȒĈĈĈݻĈݻݻݻݻݻݻݻȍ׆֪ժժ՚ĈĈĈĈĈĈĈĈĈĈݻݻݻݻݻݻݻݻцֆ̙͈ͻͻͻͻͻͻ̪̀턀цֆ̙͈ۚͻͻͻͻͻͻ۪̀ĀĀц̙Ϫ݅ĄĄц̙ҪݺݺժΪݺݺݺݺݺݺݺ֪͇ĄĄц̙˘ݺݺݺݺݺݺݺݺӪĄĄц̙˘ъĈшĈѢĈѢĈѢĈѢĈѢĈѢĈр̷⅀ݻݻĄĄꌓĈĈĈĈĈĞÈ􋑢􉑢݈ݫݫݫݫݫݫ݀цݻݻĄĄꈑĈĈĈĈĈĈĈĈĈꊔňĈݫݫݫݫݫÇހꌾӆժժݻĈݻݻݻݻݻݻݻɪ܀܀ꌾӆժժݻݻݻݻݻݻݻݻ̪턀ÂÂꌾӆ֦ժժ߀ݻǢݻݻݻݻݻݻݻǀ۪ꌾӮժժպժժժպժՊЪݾպ껷ݢݻݻݻݻݻݻ݀Ϫ݅ꌾӆժժ똀껷ݢЈݻݻݻݻݻݻ֪͇݀ꌾӆժժ˘ӊݻĈݻݻݻݻݻݻݻ󙲃֪ժժ՚ꮆĈĈĈĈĈ藢ĈĈĈݻĈݻݻݻݻݻݻݻӆߚĈĈĈĈĈĈĈĈĈĈԨݻݻݻݻݻݻݻ߀ȩꌎӆ֦̙͈ۚͻͻͻͻͻͻ̀Ȫꌎӆ̙Ԁ͈ͻͻͻͻͻͻ̀ɪꌎӆ̙ꀀЈժΪЀЀЀЀЀЀЀ̪턀ꌎӆ֦̙ȗݺݺݺݺݺݺݺݺ۪ꌎӆ̙࿅ݺݺݺݺݺݺݺݺϪ݅ꌎӆ̙˘׊݈ݫݫݫݫݫݫ݀ݻꌃĈĈĈĈĈĿψ􉑢݈ݫݫݫݫݫݫ݀ӆ֦̙띀ݻݻݻݻݻݻݻݻݻݻԨĈݫݫݫݫݫ߀큀̃ӆݻ띀ݻĈݻݻݻݻݻݻݻتǂǂ̃ӆݻۚ􀀀܀ݻݻݻݻݻݻݻݻȪ̃ӮժժպժݻպժꫪՊЪתպꈑĢĈĈĈĈĈĈĀɪ̃ӆݻ껷ݢݻݻݻݻݻݻ̪݀턀̃ӆݻ࿕껷݂ňݻݻݻݻݻݻ۪݀̃ӆݻ띀׊ݻĈݻݻݻݻݻݻݻϑۆĈĘꦂĈĈĈĈĈ迢ĈĈĈݻĨݻݻݻݻݻݻݻƃӆݻ˘ݻݻݻݻݻݻݻÇ"
  },
  {
    "path": "04 Support/DRAZ/SS/SS8",
    "content": "ݻݻݻݻݻݻݻݻݻݻӆ̙˘ݻݻݻݻݻݻݻݻݻ̪ӆԀ̙˘͈ͻͻͻͻͻͻ̪̀큀āāӆ̙띀Ԁ͈ͻͻͻͻͻͻ̀تĄĄӆֆ̙ۚݸݸݸݸݸݸݸݸȪĄĄӆ̙ݺݺݺݺݺݺݺݺɪĄĄӆ̙ݺݺݺݺݺݺݺݺ̪ĄĄӆֆĈښՀ݈ݫݫݫݫݫݫ݀ֆĈĘĄĄĈĈĈĈĈĈĈވī݈ݫݫݫݫݫݫ݀ӆժժ˘ĈӪ͇ÆЀժժ˘ݻĈݻݻݻݻݻݻݻӪÆժժ˘ݻݻݻݻݻݻݻݻ̪큀Æժժ띡ςЪݢȓȻݻݻݻݻݻݻ݀تÆ֦ժժۚݢݻݻݻݻݻݻ݀ȪÆժժݨĈݻݻݻݻݻݻ݀계цǈՀݻĈݻݻݻݻݻݻݻцĈĘĈĈĈĈĈĈĈĈňĈݻĢѿݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻݻ߆̙띀ԈԈԈԈԈԈԈԀΪ݅߆Ѐ̙˘ԀЀ͈ͻͻͻͻͻͻ֪͇̀߆̙˘Ѐ͠ͻͻͻͻͻͻ̀ӪΓȓȒ̙˘ȓ̈ȓĈݺݺݺݺݺݺݺݺ̪큀߆̙띀ݺݺݺݺݺݺݺݺت߆֦̙ۚ㏀ĈĈĈĈĈĈǈī݈ݫݫݫݫݫݫ݀܆ݻĈĈĈĈĈĈĈĈĈī݈шĿݫݫݫݫݫݫ݀섀׆ݻۚݻĈݻݻݻݻݻݻݻ۪׆рݻ띀ՀЀݻĀݻݻݻݻݻݻݻϪ݅׆ݻ˘ݻݻݻݻݻݻݻݻ֪͇׆ݻ˘ݢݻݻݻݻݻݻ݀Ӫ׆ݻ˘ݢݻݻݻݻݻݻ̪݀큀׆ݻ띀Ĉ؞ƁĈĈĈĈĈԐĈ䉑ĈݻĈݻݻݻݻݻݻݻȍ׆֪ժժ՚ĈĈĈĈĈĈĈĨĈĈݻݻݻݻݻݻݻݻц̙͈ͻͻͻͻͻͻ̪̀턀цֆ̙ۚр͈ͻͻͻͻͻͻ۪̀ĀĀц̙띀Ϫ݅ĄĄц̙˘ݺժΪݺݺݺݺݺݺݺ֪͇ĄĄц̙˘ݺݺݺݺݺݺݺݺӪĄĄц̙˘ՃĈшĈѢĈѢĈѢĈѢĈѢĈѢĈр̷⅀ݻݻĄĄĈĈĈĈĈƈĈѢī݈ݫݫݫݫݫݫ݀цݻݻĄĄĈĈĈĈĈĈĠĈĈĊ܈ňĈݫݫݫݫݫÇހӆժժݻĈݻݻݻݻݻݻݻɪ܀܀ӆժժЀݻݻݻݻݻݻݻݻ̪턀ÂÂӆ֦ժժۚݻǢݻݻݻݻݻݻݻǀ۪ӮժժպժժժպժՊժպժݢݻݻݻݻݻݻ݀Ϫ݅ӆժժ˘ݢЈݻݻݻݻݻݻ֪͇݀ӆժժ˘ՏݻĈݻݻݻݻݻݻݻ󙲃֪ժժ՚ĈĈĈĈĈĠ䈑ĈݻĈݻݻݻݻݻݻݻӆߚĈĈĈĈĈĈĈĢĈĈԨݻݻݻݻݻݻݻ߀ȩӆ֦̙͈ۚͻͻͻͻͻͻ̀Ȫӆ̙Ԁ͈ͻͻͻͻͻͻ̀ɪӆ̙ЈժΪЀЀЀЀЀЀЀ̪턀ӆ֦̙ۚ돀ݺݺݺݺݺݺݺݺ۪ӆ̙띀ݺݺݺݺݺݺݺݺϪ݅ӆ̙˘Շ݈ݫݫݫݫݫݫ݀ݻĈĈĈĈĈ߈ǈĢī݈ݫݫݫݫݫݫ݀ӆ̙띀ݻݻݻݻݻݻݻĈݻݻԨݨĈݫݫݫݫݫ߀큀̃ӆݻ띀ݻĈݻݻݻݻݻݻݻتǂǂ̃ӆݻۚ܀ݻݻݻݻݻݻݻݻȪ̃ӮժժպժݻպժժՊЪߪժպժĢĈĈĈĈĈĈĀɪ̃ӆݻݢݻݻݻݻݻݻ̪݀턀̃ӆݻ݂ۚňݻݻݻݻݻݻ۪݀̃ӆݻ띀ՁݻĈݻݻݻݻݻݻݻϑۆĈĘĈĈĈĈĈ🢄шĈݻĨݻݻݻݻݻݻݻƃӆݻ˘ݻ􊑢ݻݻݻݻݻݻݻƇ"
  },
  {
    "path": "04 Support/DRAZ/SS/SS9",
    "content": "ݻݻݻݻݻݻݻݻݻݻݻݻݻݻĀݻݻݻݻݻݻݻ׆ĈݢݢĀݛݛݛݛݛݛ׆ĠݢĀݢŀݛݛݛݛݛݛ׆Ĉݢݢŀݻݻݻݻݻݻ׆ĈݢӀݢݻݻݻݻݻݻ׆ݨ𿀀ρݨĀݻݻݻݻݻݻцĈݢݢĀݻݻݻݻݻݻĀĨĈĈĈрݢĈĈĈĈĈݢݻݻݻݻݻݻĀݻݻݻݻݻݻݻݻݻݻݻݻݻňŀцݢĀՀĈݻݻݻݻݻݻݢцݢŀݻݻݻݻݻݻ݂݂цݢŀ臀ĈܻܻܻܻܻܻݢՠцݢĈܻܻܻܻܻܻݢׂцݨĀāЈܻܻܻܻܻܻцݢĀĈͻͻͻͻͻͻݢĀĈĀݢĈĈĈĈĈĈĺĀĈŀͻͻͻͻͻͻ݂ŀݻݻݻݻݻݻݻݻݻݻňĀĨĨĨĨĨĨӆĈݢԀݢݛݛݛݛݛݛӆ݂݂݂݊ŀݛݛݛݛݛݛӆĈݢծբݢՠŀݻݻݻݻݻݻӆĈݢꕀݢׂЀݻݻݻݻݻݻӆЈĀݻݻݻݻݻݻІĀĈݢĈĈĈĐݢĀĀݻݻݻݻݻݻĢĈĀĈŀ݂ĈĈĈĈĈ݂ݻݻݻݻݻݻӆĀĈܻܻܻܻܻܻݢӆݢЀĈݻݻݻݻݻݻݢӆ݂݊ŀЈݻݻݻݻݻݻݨӆծբݢŀĈܻܻܻܻܻܻݢӆꕀݢЀĈܻܻܻܻܻܻݢӆĀňݢԈĢĈݢĀĀĈĈĈĺĈͻͻͻͻͻͻݢĈш݂ĈĈĈĈĈĈĺĨĀͻͻͻͻͻͻ݈Ā̃ӆĈݢݢĀݛݛݛݛݛݛ̃ӆĈݢЀЀݢЀݛݛݛݛݛݛ̃ӆЈݨݨŀݛݛݛݛݛݛ̃ӆĈݢݢŀݻݻݻݻݻݻ̃ӆĈݢݢŀݻݻݻݻݻݻ̃ӆňݢݢĀĊĈшĈݢĈĈĈȑݢĀݻݻݻݻݻݻĈĈĨĀ݈ĈĈĈĈĈ݈ݻݻݻݻݻݻĈӆݢĀĈݻݻݻݻݻݻݢӆݢЀЀĈݻݻݻݻݻݻݢӆݨŀňܻܻܻܻܻܻӆݢŀ߾ĈܻܻܻܻܻܻݢӆݢŀĠܻܻܻܻܻܻ݂ӆݢĀĈŻŻŻŻŻŻݢĈݢĀĈĈĈĈúĈĈͻͻͻͻͻͻݢĈň݈ĈĈĈĈĈĈĈĈԨͻͻͻͻͻͻݻĀÆĈݢݢĀݛݛݛݛݛݛÆĈݢЀݢŀݛݛݛݛݛݛÆňŀÆĈݢ˷ݢŀݻݻݻݻݻݻÆĠ݂݂ĀݻݻݻݻݻݻцĈݢݢĀݻݻݻݻݻݻĈĈňĈĈݢĈĈĈݢݻݻݻݻݻݻĈĈݻĈĈĢĀݻݻݻݻݻݻݻԨݻݻݻݻݻݻݻЈ߆ݢĀĈݻݻݻݻݻݻݢ߆ݢŀĠݻݻݻݻݻݻݢ߆ŀĈĈĈĈĈĈĈݢ߆ݢŀ׀Ĉܻܻܻܻܻܻݢ߆݂ĀܻܻܻܻܻܻݨцݢĀĈͻͻͻͻͻͻݢĈĈݢĈĈĈĈĈĺĈĈрͻͻͻͻͻͻݢЀݻݻݻݻшݻݻݻݻݻݻݻݻĀ"
  },
  {
    "path": "04 Support/DRAZ/SS/TEST",
    "content": "ݻݻݻݻݻݻݻݻݻݻЈݻݻݻݻݻݻݻݻݻݻݻĀ̃ӆݛݛĈݢݻݻݻݻݻݛݛݛݛĀݛ̃ӆݛݛĠӀݢݻݻݻݻݻݛݛݛݛŀݛ̃ӆĈݢĈĈĈĈĈݻݻݻݻŀݻ̃ӆݻݻĈݢܻܻܻܻܻݻݻݻݻݻ̃ӆݻݻݨܻܻܻܻܻݻݻݻݻĀݻ̃ӆݻݻĈݢͻͻͻͻͻݻݻݻݻĈݻĂĈĈĈĈݻݻĠĈĈĈݢЀͻͻͻͻͻݻݻݻݻĈĈĈݻݻݻݻݻݻݻݻݻݻݻĀݻݻݻݻݻňӆݻݻĀݛݛݛݛݛݻݻݻݻĈݢݻӆݻݻŀݛݛݛݛݛݻݻݻݻ݂݊ݻӆĈĈŀݻݻݻݻݻܻܻܻܻĈݢծբܻӆܻܻݻݻݻݻݻܻܻܻܻĈݢꕀܻӆܻܻĀݻݻݻݻݻܻܻܻܻЈܻӆͻͻĀݻݻݻݻݻͻͻͻͻĈݢĈĈĈͻЀĈĈĈĈĈͻͻĈĈĺĀݻݻݻݻݻͻͻͻͻݻ݂ĈĈĈͻݻݻݻݻݻݻݻݻݻݻňĨĨĨĨĀĨÆݛݛĈԀݢݻݻݻݻݻݛݛݛݛݛÆݛݛ݂ݻݻݻݻݻݛݛݛݛŀݛÆݻݻĈݢܻܻܻܻܻݻݻݻݻŀݻÆݻݻĈݢܻܻܻܻܻݻݻݻݻЀݻÆݻݻЈܻܻܻܻܻݻݻݻݻĀݻцݻݻĈĈĈݢĀͻͻͻͻͻݻݻݻݻĻĈĈݻĈĈĈĈݻݻĈĈĈ݂ŀͻͻͻͻͻݻݻݻݻлĈĈĈݻ߆ĀĨĨĨĨĨܻܻܻܻĈݢܻ߆ݻݻрՀݛݛݛݛݛݻݻݻݻĈݢݻ߆݊݊ݻݻŀݛݛݛݛݛݻݻݻݻЈݨݻ߆ծբծբܻܻŀݻݻݻݻݻܻܻܻܻĈݢܻ߆ꕀꕀܻܻЀݻݻݻݻݻܻܻܻܻĈݢܻ߆ܻܻĀݻݻݻݻݻňݢՀĈĈĈĈͻͻʈĈĺݻݻݻݻݻͻͻͻͻĈݢĈĈĈͻŀĈĈĈĈĈͻͻĈĈĺݻݻݻݻݻͻͻͻͻݻ݈ĈĈĈͻ׆ĨĨĈݢܻܻܻܻܻݛݛݛݛĀݛ׆ݛݛĈрݢݻݻݻݻݻݛݛݛݛЀݛ׆ݛݛЈݨݻݻݻݻݻݛݛݛݛŀݛ׆ݻݻĈݢܻܻܻܻܻݻݻݻݻŀݻ׆ݻݻĈ뀀ݢܻܻܻܻܻݻݻݻݻŀݻ׆ݻݻňݢĀ͎ĈĈĈĈݻݻĈĈĈݢͻͻͻͻͻݻݻݻݻĈĈĈݻĈĈĈĈݻݻĈĈĈ݈ĀͻͻͻͻͻݻݻݻĈĈĈĈݻцܻܻĀݛݛݛݛݛݻݻݻݻĈݢݻцݻݻЀЀݛݛݛݛݛݻݻݻݻĈݢݻцݻݻŀݛݛݛݛݛܻܻܻܻňܻцܻܻŀݻݻݻݻݻܻܻܻܻĈݢܻцܻܻŀ뀀ݻݻݻݻݻܻܻܻܻĠ݂ܻцĀŻŻŻŻĈݢŻĈĈĈĈͻͻ¿ĈĺĈݻݻݻݻݻͻͻͻͻĈݢĈĈĈͻĀĈĈĈĈĈͻͻĈĈĈĈݻݻݻݻݻԨͻͻͻܻݻݻݻݻͻӆݛݛĈݢݻݻݻݻݻݛݛݛݛĀݛӆݛݛĈݢݻݻݻݻݻݛݛݛݛŀݛӆݛݛňܻܻܻܻܻŀӆݻݻĈݢܻܻܻܻܻݻݻݻݻŀݻӆݻݻĠꀀ݂ܻܻܻܻܻݻݻݻݻĀݻӆĈ¿ݢŻŻŻŻŻݻݻݻݻĀݻ̊ĈĈĈĈݻݻĈĈĈݢͻͻͻͻͻݻݻݻݻĺĈĈĈݻĈĈĈĈĈݻݻݻݻݻݻĀͻͻͻͻͻԨݻݻݻݻݻݻݻݻݻӆݻݻĀݛݛݛݛݛݻݻݻݻĈݢݻӆݻݻŀ󀀀ݛݛݛݛݛݻݻݻݻĠݢݻӆܻܻŀĈĈĈĈĈݢĈӆܻܻŀݻݻݻݻݻܻܻܻܻĈݢܻӆܻܻĀݻݻݻݻݻܻܻܻܻݨܻӆŻŻݻݻݻݻݻͻͻͻͻĈݢͻĈĈĈĈĈͻͻĈĈĺĈݻݻݻݻݻͻͻͻͻĈݢĈĈĈͻĀݻݻݻݻݻͻͻݻݻݻݻЈݻݻݻݻݻ썺ݻݻݻݻݻ"
  },
  {
    "path": "04 Support/DRAZ/SS/VILL",
    "content": "Ĉ݁ݿĈĀ߷Ĉ߃ѝܿĈĈĈĈՌ޻ݽۻݿ߷ؿݿĈ͈ĈĈňĈݽݻݻۻ߻ȯºĈĈĈĈňĈ޻ݻݻݿ߷ǇĈĈĈĀۻؿۻ߻σĈĈĈĈĈĈĈňĈĈ߿񃀀̿ĀĈĈĈĈĈĈňĈ߿恑Ĉ߯߾Ǣţ񨔊ǢŢՇǢѸЊݿݿݻݿĈĈݿ糑Ĉ؃쀰ݿ؁ĈĈĈĈƵݿʈժՒĈĈĠĀݿݻܻ矀Փ߈ժкĈѢĈĈňЊĀݿǇТĈĈĈĀĈĈݿĀĈĈĈĈĈĀĈߙ敘ݿܹ怈ĈĈĀĈĈĈĀĈĈݿɇЂݿݿݿň݁ۿĈۣĀ߷Ĉݱݛػݱݛػ߻ܿĈĈĈĈĈļň̈Ĉػݱݹ߳ݛؿȗՂ΂ݱݛݻݻػ߻߂ĆĈЎЀؿݹ߳݃ǇĈĈĈĈĈĈݛݿݻݻػ߻ݻԼĈĈĀĈĈĈĈňĈĈݙݿϞӧπĈĈĈĈĈĈňĀĈ݃ݿĈ߷ቑߪժպժժժռݪժתժժĈĈĈĈĈĈĈĈňĈݿݿݻݿĈĈމ监ĈЪݿĈĈĈވĈĈĈĈĈĀݿАتժԒՌĈĈĈĀݿ߀߇Ӏ՜߈ժĈĈĈĀĀߎݿӢĈĈĀĈĈݿռĈĈĈĈĈĀĀĈΟޟݿ߀ĈĈĈĈĈĈĈĀň΍ĈݿĀ遀ĈĈĈĀĈĈĀݿݿݿ݁ڿĈĈۢĀݷĈՂݷ۽޷۽ؿĈĈĈݿĈІĂň̈Āŀݽ۷۽޷藑ĈĈ̈Āݷ۽ĢĢľԋĈĈĈĈňĈݽܿݻݻÇĈĈĈĈĈŀĈĈ˃ݿݻݻӻݻѼĈĈĈĈĈĈĀňĈĈ݌ݿ֯灢Āްߛׯ߀ĈĈĈĈĈĈĈňĈĈ݁ݿֆĈĀ߷ƈ鄀ĈĈĈĈĈĈĈĈňĈݿݿݻݿėĈĈ菑Ĉ߿߿߿ݿժժժժժުժժժժՂƤ̀߿߿ǟݿԂݻܻ䏑Ԫʈǆ՜ĈĈĈ߿ݿ󏀀տ߀ԪĈĈĈĈĀĈ׃ݿÇԂĈݿм܁ĈĀĈĈĈĀĈݿ͛ĈĈĈĀĈĈЈĈݿ燗ĈĈĈĈĈĈĈĀݿݿݿܿĈĈĈĈՎͻݹ杛ܳͻٹ杻ߛܳ󀀀ؿݿĈĂĈĈňĈ杛ݳͻܳͻ߻ٹ瀀Ĉʑ߀ĀĀŀĈͻݹ禇ݻݻ杻ߛܳ󀈀񈑢ĈĈĈĈňĿݳݿݻݻͻ߻ѻĈ倀ؿߛĈĈĈĈĈĈĀňĈ݆޿Ĉ̞ߟϞ􀈀ߪժպȪժժժռݪժתժժĈĈĈĈĈĈĈĈňĈĈ݁޿ĈĀ߷ňĈĈĈĈĈĈĈĈňĈݿݿݻݿ׻ĈĈ돑ĈՍݿժĐĨՒĈĀݿ߀ݻܻȪʀĈĈĈĀݿǇբĈĈĈĈĀĈݿĈĈĈĈĈĈĀĈݿυĈĈĀĈĈĈĀĈğĈݿɇ怢ĈĀݿ瑢ĈĈĈĈĈĈĈĀ"
  },
  {
    "path": "04 Support/MakeDisk/DRAZ/BLAST18.S",
    "content": "* draz/blast18\norg = $9200\n lst off\n*-------------------------------\nrw18 = $d000\ntemp18buf = $4000\nendtempbuf = $5200\n\nfloppyslot = 6\nfloppydrive = 2\n\nslot = $fd\nztrack = $fe\n\n dum $300\nTABLEND ds 1 ;hi byte of table end addr\nTABSTART ds 1 ;hi byte of table start addr\nTRACK ds 1 ;track #\n ds 1\nIDBYTE ds 1 ;18-sector ID byte\nOFFSET ds 1 ;sector offset (00-11)\nLen1 ds 1\nLen2 ds 1\n dend\n\n dum $f0\nobj_lo ds 1\nobj_hi ds 1\ndst_lo ds 1\ndst_hi ds 1\nlen_lo ds 1\nlen_hi ds 1\nflushflag ds 1\n dend\n*-------------------------------\n org org\n\n* In: TABSTART, TABLEND, TRACK, IDBYTE, OFFSET\n\nblast18 lda $c083\n lda $c083 ;enable RAM\n\n* set BbundID\n\n lda IDBYTE\n sta BbundID\n\n jsr rw18\n db 7\nBbundID db $a9\n\n* turn on drive and delay .5 seconds\n\n ldx #floppyslot*16\n stx slot\n ldx #floppydrive\n stx drive\n\n jsr rw18\n db 0\ndrive db 2,5\n\n* seek first track\n\n lda TRACK\n sta track\n\n jsr rw18\n db 2,1\ntrack db 0\n\n* Write out data (1-2 tracks)\n\n ldy #0\n lda TABSTART\n sty obj_lo\n sta obj_hi\n\n lda OFFSET\n clc\n adc #>temp18buf\n sty dst_lo\n sta dst_hi\n\n lda #>endtempbuf\n sec\n sbc dst_hi\n sty len_lo\n sta len_hi ;# sectors left on this track (1-18)\n\n lda TABLEND\n sec\n sbc TABSTART\n clc\n adc #1 ;total # of sectors to write (1-36)\n cmp len_hi\n bcs :ok ;write to end of track\n sta len_hi ;write portion of track\n\n:ok lda len_hi\n sta Len1\n jsr wrtrack ;write 1st track\n\n* Write out 2nd track if necessary\n\n ldy #0\n sty Len2\n sty obj_lo\n lda TABSTART\n clc\n adc Len1\n cmp TABLEND\n beq :1\n bcs :done ;it fit on 1 track\n:1 sta obj_hi\n\n lda #>temp18buf ;start at beginning of 2nd track\n sty dst_lo\n sta dst_hi\n\n lda TABLEND\n sec\n sbc obj_hi\n clc\n adc #1 ;# of sectors left to write (1-18)\n sty len_lo\n sta len_hi\n sta Len2\n\n lda TRACK\n clc\n adc #1\n sta ztrack\n jsr wrtrack ;write out second track\n\n* turn off drive\n\n:done jsr rw18\n db 1\n\n* out of here!\n\n sta $c082\n\n rts\n*-------------------------------\n*\n* write 1 track\n*\n* In: obj, dst, len\n*  (trashes these vars)\n*\n*-------------------------------\n* read in current data\n\nwrtrack\n jsr rw18\n db $83,>temp18buf\n\n:loop ldy #0\n sty flushflag\n lda (obj_lo),y\n sta (dst_lo),y\n\n inc obj_lo\n bne :1\n inc obj_hi\n\n:1 inc dst_lo\n bne :2\n inc dst_hi\n\n:2 lda len_lo\n bne :3\n dec len_hi\n:3 dec len_lo\n\n lda dst_hi\n cmp #>temp18buf+$1200\n bne :4\n jmp flush?\n\n:4 lda len_lo\n ora len_hi\n bne :loop\n\n jmp flush?\n\n*-------------------------------\nflush? lda flushflag\n bne :nodata\n\n ldy #<temp18buf\n lda #>temp18buf\n sty dst_lo\n sta dst_hi\n jsr rw18\n db $c5,>temp18buf\n\n lda len_lo\n ora len_hi\n beq :nodata\n\n jsr rw18\n db $83,>temp18buf\n\n inc flushflag\n\n:nodata rts\n*-------------------------------\neof\n sav blast18\n"
  },
  {
    "path": "04 Support/MakeDisk/DRAZ/DRAZ.S",
    "content": "* draz\norg = $800\n lst off\n*-------------------------------\n*\n*   D   R   A   Z\n*\n*   Hi-res shape table maker (ProDOS/18-sector version)\n*   Copyright 1986,1987,1988,1989 Jordan Mechner\n*\n*   Rev. 3/24/89, 4/10/89\n*\n*-------------------------------\n dum $20\n\nBASE ds 2\nADDR1 ds 2\nADDR2 ds 2\nADDR3 ds 2\nADDR ds 2\nPAC ds 2\nPIC ds 2\nstring ds 2\ntemper ds 2\n\nVCOUNT ds 1\nWIDTH ds 1\nDIGIT ds 1\nTEMP1 ds 1\n\nCURSOR ds 1\nCOLOR ds 1\nCOLRMASK ds 1\nBOXON ds 1\nUNDERBYTE ds 1\nDX ds 1\nDY ds 1\nVECT ds 1\n\nXFIX ds 1\nYFIX ds 1\nALTMASK ds 1\n\nNUMIMS ds 1\nCH ds 1\nCV ds 1\n\nTABLEND ds 2\nMEMFREE ds 2\nIMLENG ds 2\n\nIMNUM ds 1\n\nFULSCR ds 1\n\nSEQIND ds 1\nSPEED ds 1\nFREEZEF ds 1\n\nDIMLENG ds 1\n\nFLICKER ds 1\nDELTA ds 1\n\nXCSAVE ds 1\nYCSAVE ds 1\nOFSAVE ds 1\n\nKIDX ds 1\nKIDY ds 1\n\nKEY ds 1\n\nV2 ds 1\nV3 ds 1\nV4 ds 1\nV5 ds 1\nV8 ds 1\nV9 ds 1\nVA ds 1\nVB ds 1\nVC ds 1\n\nbytechek ds 2\nopac ds 1\n\neditmode ds 1\nedxfix ds 1\nedyfix ds 1\nedxco ds 1\nedyco ds 1\ntemp ds 1\n\n dend\n*-------------------------------\n  put hrtableq\n put hrparams\nhires = $8e00\n\n dum hires\ncls ds 3\nlay ds 3\ndiamond ds 3\n dend\n\nblast18 = $9200\n\nTABSTART = $6000\nbufend = $8400\n\nunused = $1D00\nANIMSEQ = $1D80\nANIMDX = $1E00\nANIMDY = $1E80\nZEROBUF = $1F00\n\nbufstart = $4000\n\nIDbyteA = $a9\nIDbyteB = $ad\n*-------------------------------\n org org\n\n jmp START\n jmp REENTRY\n*-------------------------------\nPOINT hex 81,82,84,88,90,A0,C0\nODDS hex 80,D5,AA,FF\nEVENS hex 80,AA,D5,FF\n*-------------------------------\n* Hires patches\n\nMLAY lda opac\n ora #$80\n sta OPACITY\n jmp lay\n\nLAY lda opac\n and #$7f\n sta OPACITY\n jmp lay\n\nCLS jmp cls\n\nDIAMOND jmp diamond\n\n*-------------------------------\nSPLITSC LDA #$FF\n STA FULSCR\n LDA $C053\n RTS\n*-------------------------------\n* Prepare for disk load or other upheaval\n\nPREPARE LDA #0\n STA IMLENG\n STA IMLENG+1\n JSR BOX\n JSR BASCALC\n LDA UNDERBYTE\n STA (BASE),Y\n RTS\n*-------------------------------\n* Reset hi bits\n\nRESETHI LDA #$20\n STA BASE+1\n LDY #0\n STY BASE\n:1 LDA #$80\n ORA (BASE),Y\n STA (BASE),Y\n INY\n BNE :1\n INC BASE+1\n LDA BASE+1\n AND #$1F\n BNE :1\n RTS\n*-------------------------------\n*  Color (0-3) input in X-reg:\n\nGETCOLR LDX COLOR\n\n LDA XCO\n ROR\n BCC :2\n\n LDA ODDS,X\n BMI :3\n\n:2 LDA EVENS,X\n:3 STA COLRMASK\n RTS\n*-------------------------------\nBASCALC LDY YCO\n LDA YLO,Y\n STA BASE\n LDA YHI,Y\n STA BASE+1\n LDY XCO\n RTS\n*-------------------------------\n*  EOR a box from (XFIX,YFIX) to (XCO,YCO) ... IF BOXON=1\n\nBOX LDA BOXON\n BEQ :7\n\n LDA XCO\n CMP XFIX\n BCC :7\n LDA YCO\n CMP YFIX\n BCC :7\n\n LDY YFIX\n BEQ :2 ;TOP LINE O.S.\n DEY\n LDA YLO,Y\n STA BASE\n LDA YHI,Y\n STA BASE+1\n\n LDY XFIX\n:1 LDA (BASE),Y\n EOR #$7F\n STA (BASE),Y\n\n INY\n CPY XCO\n BCC :1\n BEQ :1\n\n* NOW EDGES\n\n:2 LDX YFIX\n DEX\n CPX #191\n BCC :21\n\n:29 INX\n\n:21 LDA YLO,X\n STA BASE\n LDA YHI,X\n STA BASE+1\n\n LDY XFIX\n BEQ :22 ;LEFT EDGE O.S.\n DEY\n LDA (BASE),Y\n EOR #$40\n STA (BASE),Y\n\n:22 LDY XCO\n CPY #39\n BCS :23 ;RIGHT EDGE O.S.\n INY\n LDA (BASE),Y\n EOR #$01\n STA (BASE),Y\n\n:23 CPX YCO\n BCC :29\n BNE :25\n\n CPX #191\n BCC :29\n\n* NOW THE BOTTOM\n\n:25 LDX YCO\n CPX #191\n BEQ :7\n\n INX\n LDA YLO,X\n STA BASE\n LDA YHI,X\n STA BASE+1\n\n LDY XFIX\n:8 LDA (BASE),Y\n EOR #$7F\n STA (BASE),Y\n\n INY\n CPY XCO\n BCC :8\n BEQ :8\n\n:7 RTS\n*-------------------------------\n*   S   T   A   R   T\n\nSTART jsr ZEROSWAP\n\n jsr RESETHI\n\n LDA #1\n STA SPEED\n\n LDA #2\n sta opac\n\n LDA #0\n sta editmode\n STA IMLENG\n STA IMLENG+1\n\n JSR NEWTABLE\n LDA #$FF\n STA ANIMSEQ\n bne reenter\n\nREENTRY jsr ZEROSWAP\n\nreenter lda #0\n STA FLICKER\n STA PAGE ;Use page 1\n LDA $C050\n LDA $C052\n LDA $C054\n LDA $C057\n LDA $C010\n\n LDA #20\n STA XCO\n STA XFIX\n LDX #0\n STX OFFSET\n LDA POINT,X\n STA CURSOR\n LDA #96\n STA YCO ;Center of screen\n STA YFIX\n\n jsr SPLITSC\n\nSTART1 LDA #-1\n STA COLOR\n LDA #10\n STA VECT\n\n JSR BASCALC\n LDA (BASE),Y\n STA UNDERBYTE ;Init\n\n LDA #0\n STA BOXON ;Box off\n\n JSR HOME\n\nLOOP1 JSR DISPINFO\n*-------------------------------\n* Main keyboard-input loop\n\nLOOP LDA $C000\n BMI KEYDOWN\n\n* Blink cursor\n\nBLINK JSR BASCALC\n LDA CURSOR\n EOR (BASE),Y\n ORA #$80\n STA (BASE),Y\n\n JMP LOOP\n\n* Someone pressed a key\n\nKEYDOWN STA $C010\n\n* Handle cursor movement\n\n CMP #\"Q\n BNE :11\n LDX #-1\n LDY #-1\n JMP MOVE\n:11 CMP #\"W\n BNE :12\n LDX #0\n LDY #-1\n JMP MOVE\n:12 CMP #\"E\n BNE :13\n LDX #1\n LDY #-1\n JMP MOVE\n:13 CMP #\"A\n BNE :14\n LDX #-1\n LDY #0\n JMP MOVE\n:14 CMP #\"Z\n BNE :15\n LDX #-1\n LDY #1\n JMP MOVE\n:15 CMP #\"X\n BNE :16\n LDX #0\n LDY #1\n JMP MOVE\n:16 CMP #\"C\n BNE :17\n LDX #1\n LDY #1\n JMP MOVE\n:17 CMP #\"D\n BEQ :89\n JMP CONT\n\n:89 LDX #1\n LDY #0\n\nMOVE STX DX\n STY DY\n\n JSR BOX ;Erase box if on\n LDA VECT\n STA VCOUNT\n\n* Leave a trail behind cursor\n\n:25 JSR BASCALC\n\n LDA COLOR\n BPL :27\n LDA UNDERBYTE\n BMI :28\n\n:27 JSR GETCOLR\n AND CURSOR\n CMP #$80\n BNE :29 ;Turn pixel on\n\n LDA CURSOR\n EOR #255\n ORA COLRMASK\n AND UNDERBYTE ;Turn pixel off\n BMI :28\n\n:29 ORA UNDERBYTE\n:28 STA (BASE),Y\n\n* Move cursor\n\n:26 LDA YCO\n CLC\n ADC DY\n CMP #192\n BCC :80\n CMP #225\n BCC :81\n LDA #0\n BEQ :80\n:81 LDA #191\n:80 STA YCO\n\n LDA OFFSET\n CLC\n ADC DX\n BPL :20\n DEC XCO\n CLC\n ADC #7\n BPL :21\n\n:20 CMP #7\n BCC :21\n INC XCO\n SEC\n SBC #7\n\n:21 STA OFFSET\n\n LDA XCO\n CMP #40\n BCC :82\n CMP #100\n BCS :83\n LDA #39\n STA XCO\n LDA #6\n STA OFFSET\n BNE :82\n:83 LDA #0\n STA XCO\n STA OFFSET\n\n* Store new underbyte\n\n:82 JSR BASCALC\n LDA (BASE),Y\n STA UNDERBYTE\n\n LDX OFFSET\n LDA POINT,X\n STA CURSOR\n\n DEC VCOUNT\n BNE :25\n\n JSR PRXY\n JSR BOX\n\n JMP LOOP\n*-------------------------------\n* Other keys\n\n* Set vector length 1-10\n\nCONT CMP #\"0\n BEQ :13\n BCC :1\n\n CMP #\":\n BCS :1\n\n:11 SEC\n SBC #\"0\n BPL :12\n:13 LDA #10\n:12 STA VECT\n JMP LOOP\n*-------------------------------\n* Set color\n\n:1 CMP #$88 ;LEFT (BLUE)\n BNE :2\n LDA #2\n BNE :33\n:2 CMP #$95 ;RIGHT (RED)\n BNE :3\n LDA #1\n BNE :33\n:3 CMP #$8A ;DOWN (BLACK)\n BNE :4\n LDA #0\n BEQ :33\n:4 CMP #$8B ;UP (WHITE)\n BNE :5\n LDA #3\n BNE :33\n:5 CMP #\"S ;TRANSPARENT\n BNE :6\n LDA #-1\n:33 STA COLOR\n\n:34 JMP LOOP\n*-------------------------------\n* Fix a point\n*  (as upper left corner of a box)\n\n:6 CMP #\"[\n BNE :7\n\n JSR BOX ;Erase box if on\n\n LDA XCO\n STA XFIX\n LDA YCO\n STA YFIX\n\n LDA #1\n STA BOXON\n JSR BOX\n\n JMP LOOP\n*-------------------------------\n*  Fill box with color\n\n:7 CMP #\"F\n BNE READSH\n\nFILL LDA BOXON\n BEQ :73 ;Idiot-proofing: box must be on\n LDA COLOR\n BMI :73 ;and color must be set\n JSR BOX\n\n DEC XCO\n JSR GETCOLR\n STA ALTMASK\n INC XCO\n JSR GETCOLR\n\n LDX YCO\n\n:71 LDA YLO,X\n STA BASE\n LDA YHI,X\n STA BASE+1\n\n LDY XCO\n\n:72 LDA COLRMASK\n STA (BASE),Y\n\n PHA\n LDA ALTMASK\n STA COLRMASK\n PLA\n STA ALTMASK\n\n DEY\n BMI :74\n CPY XFIX\n BCS :72\n\n:74 CPX #0\n BEQ :75\n DEX\n CPX YFIX\n BCS :71\n\n:75 JSR BASCALC\n LDA (BASE),Y\n STA UNDERBYTE\n\n LDA #0\n STA BOXON\n:73 JMP LOOP\n*-------------------------------\n*  Read shape into buffer\n\nREADSH CMP #\"]\n BEQ :11\n JMP LAYDOWN\n:11 JSR PICKUP\n JSR HOME\n JSR TABLINFO\n JSR NEWIM\n JMP LOOP1\n\nPICKUP JSR BASCALC\n LDA UNDERBYTE\n STA (BASE),Y\n\nPICKUP1 LDA #2\n STA IMLENG\n LDA #0\n STA IMLENG+1\n\n LDA #bufstart\n STA IMAGE\n LDA #>bufstart\n STA IMAGE+1\n\n LDA XCO\n SEC\n SBC XFIX\n CLC\n ADC #1\n LDY #0\n STA (IMAGE),Y\n STA WIDTH\n sta bytechek\n\n LDA YCO\n SEC\n SBC YFIX\n CLC\n ADC #1\n INY\n STA (IMAGE),Y\n sta bytechek+1\n\n LDA IMAGE\n CLC\n ADC #2\n STA IMAGE\n BCC :0\n INC IMAGE+1\n\n:0 LDX YCO\n\n:1 LDA YLO,X\n CLC\n ADC XFIX\n STA BASE\n\n LDA YHI,X\n STA BASE+1\n\n LDY #0\n\n:2 LDA (BASE),Y\n ORA #$80\n STA (IMAGE),Y\n INY\n CPY WIDTH\n BCC :2\n\n LDA IMAGE\n CLC\n ADC WIDTH\n STA IMAGE\n BCC :21\n INC IMAGE+1\n\n:21 LDA IMLENG\n CLC\n ADC WIDTH\n STA IMLENG\n BCC :3\n INC IMLENG+1\n\n:3 CPX #0\n BEQ :4\n DEX\n CPX YFIX\n BEQ :1\n BCS :1\n\n:4 RTS\n*-------------------------------\n*  Lay down image\n\nLAYDOWN CMP #\"M MIRROR\n BEQ LAYD2\n\nLAYD1 CMP #$8D RETURN\n beq LAYD2\n\n cmp #\"P\n bne BOXOFF\n\nLAYD2 STA KEY\n\n LDA IMLENG\n ORA IMLENG+1\n BEQ :1 ;Empty image buffer\n\n JSR BOX\n JSR PLOP\n JSR BOX\n JMP LOOP\n:1 JSR BEEP\n JMP LOOP\n\nPLOP LDA #bufstart\n STA IMAGE\n LDA #>bufstart\n STA IMAGE+1\n\n ldy #0\n lda (IMAGE),y\n cmp bytechek\n bne :skip\n iny\n lda (IMAGE),y\n cmp bytechek+1\n beq :ok\n\n:skip jmp BEEP\n\n:ok LDA KEY\n CMP #\"M\n BNE :notm\n JSR MLAY\n JMP :2\n\n:notm cmp #\"P\n bne :1\n jsr DIAMOND\n jmp :2\n\n:1 JSR LAY\n\n:2 JSR BASCALC\n LDA (BASE),Y\n STA UNDERBYTE\n\n RTS\n*-------------------------------\nBOXOFF CMP #\"\\\n BNE LEFTSHIFT\n\n JSR BOX\n\n LDA #0\n STA BOXON\n\n JMP LOOP\n*-------------------------------\nLEFTSHIFT CMP #\"{\n BNE IOTAB\n LDA BOXON\n BEQ IOTAB ;Box must be on\n\n*  Shift contents of image box 1 bit left (before ])\n*  Step 1: Pick up image\n\n JSR BOX\n JSR PICKUP\n\n*  Step 2: Save old XCO and OFFSET\n\n LDA XCO\n PHA\n LDA OFFSET\n PHA\n\n*  Step 3: Shift 1 bit left\n\n LDA #6\n STA OFFSET\n LDA XFIX\n SEC\n SBC #1\n STA XCO\n\n*  Step 4: Lay down shape in new position\n\n:1 JSR PLOP\n\n*  Step 5: Restore vars\n\n PLA\n STA OFFSET\n PLA\n STA XCO\n\n JSR BOX\n JMP LOOP1\n*-------------------------------\n*  INPUT TABLE FROM DISK\n\nIOTAB CMP #\"I\n BNE IOTAB2\n\n JSR SPLITSC\n JSR DTABIN\n lda NAMEBUF\n cmp #\"@\"\n beq :skip\n\n LDA TABSTART\n STA NUMIMS\n ASL\n TAX\n INX\n LDA TABSTART,X\n STA TABLEND\n LDA TABSTART+1,X\n STA TABLEND+1\n\n lda #$ff\n sta ANIMSEQ\n lda #0\n sta editmode\n\n:skip JSR HOME\n JMP LOOP1\n*-------------------------------\n*  OUTPUT TABLE TO DISK\n\nIOTAB2 CMP #\"O\n BNE ANIMATE\n\n LDA NUMIMS\n STA TABSTART\n JSR SPLITSC\n JSR DTABOUT\n JSR HOME\n JMP LOOP1\n*-------------------------------\nANIMATE CMP #$81 ;CTRL-A\n BEQ :1\n JMP TABLE\n\n:1 LDA NUMIMS\n BNE :19\n JMP LOOP1\n\n:19 LDA ANIMSEQ\n CMP #$FF ;EMPTY SEQ TABLE\n BNE ANIMRTN\n\n*  Set default sequence (run thru all frames)\n\n LDX #1\n:80 LDA #0\n STA ANIMDX-1,X\n STA ANIMDY-1,X\n TXA\n STA ANIMSEQ-1,X\n INX\n CMP NUMIMS\n BCC :80\n LDA #$FF\n STA ANIMSEQ-1,X\n\nANIMRTN JSR SPLITSC\n JSR PRNIMS\n\n LDA #23\n STA CV\n LDX #ANIM1\n LDY #>ANIM1\n JSR PRLINE ;Sequence/X/Y adjust/Playback?\n\n:89 JSR GETCHAR\n CMP #\"S\n BNE :90\n JMP SEQUENCE\n\n:90 CMP #\"X\n BNE :77\n JMP XENTER\n:77 CMP #\"Y\n BNE :91\n JMP YENTER\n\n:91 CMP #\"P\n BNE :92\n JMP PLAYBACK\n:92 CMP #$9B ;ESC\n BEQ :93\n BNE :89\n\n:93 JSR HOME\n JMP LOOP1\n\n*  Enter frame #s in desired sequence, FF to end\n\nSEQUENCE LDX #0\n:2 STX SEQIND ;Sequence index\n JSR GETNUM\n LDX SEQIND\n STA ANIMSEQ,X\n CMP #$FF ;End-of-sequence code\n BEQ :1\n LDA #0\n STA ANIMDX,X\n STA ANIMDY,X\n INX\n BNE :2 ;255 frames max\n:1 JMP ANIMRTN\n\n*  Enter DX for each frame in seq\n\nXENTER LDX #0\n:2 STX SEQIND\n LDA ANIMSEQ,X\n CMP #$FF\n BEQ :1\n JSR GETDELT\n LDX SEQIND\n STA ANIMDX,X\n INX\n BNE :2\n:1 JMP ANIMRTN\n\nYENTER LDX #0\n:2 STX SEQIND\n LDA ANIMSEQ,X\n CMP #$FF\n BEQ :1\n JSR GETDELT\n LDX SEQIND\n STA ANIMDY,X\n INX\n BNE :2\n:1 JMP ANIMRTN\n\nPLAYBACK LDA XCO\n STA XCSAVE\n LDA YCO\n STA YCSAVE\n LDA OFFSET\n STA OFSAVE\n\n*  Get KIDX (0-255)\n\n LDA #0\n LDX XCO\n CPX #0\n BEQ :51\n:50 CLC\n ADC #7\n DEX\n BNE :50\n:51 CLC\n ADC OFFSET\n STA KIDX\n LDA YCO\n STA KIDY\n\n LDA #23\n STA CV\n LDX #ANIM3\n LDY #>ANIM3\n JSR PRLINE\n LDA #0\n STA FREEZEF\n LDA $C010\n\n*  Play back sequence\n\n:1 LDX #0\n STX SEQIND\n\n:2 LDA FREEZEF\n BNE :nextf\n\n*  GO mode only: delay loop\n\n LDX SPEED\n:21 LDY #0\n:22 DEY\n BNE :22\n DEX\n BNE :21\n\n LDA $C000\n BPL :nextf ;Next frame\n\n*  Keydown\n\n STA $C010\n CMP #$8A ;Down (Slow down)\n BNE :11\n INC SPEED\n\n:11 CMP #$8B ;Up (Speed up)\n BNE :12\n DEC SPEED\n\n:12 CMP #\"F ;Freeze-frame\n BNE :14\n LDA #1\n STA FREEZEF\n\n:14 CMP #$9B ;ESC\n BNE :15\n\n*  Escape\n\n:99 LDA XCSAVE\n STA XCO\n LDA YCSAVE\n STA YCO\n LDA OFSAVE\n STA OFFSET\n\n JSR BASCALC\n LDA (BASE),Y\n STA UNDERBYTE\n JMP ANIMRTN\n\n:15 CMP #\"X ;X:clr screen btwn frames\n BNE :nextf\n; LDA FLICKER\n; EOR #$FF\n; STA FLICKER\n\n*  Next frame\n\n:nextf LDA FREEZEF\n BEQ :3\n:13 LDA $C000\n BPL :13\n STA $C010\n CMP #\"F Frame advance\n BEQ :3\n CMP #$9B ESC\n BEQ :99\n\n*  Adjust\n\n LDX SEQIND\n DEX\n:40\n CMP #$88 LEFT\n BNE :41\n INC ANIMDX,X\n JSR BEEP\n:41 CMP #$95 RIGHT\n BNE :42\n DEC ANIMDX,X\n JSR BEEP\n:42 CMP #$8A DOWN\n BNE :43\n INC ANIMDY,X\n JSR BEEP\n:43 CMP #$8B UP\n BNE :44\n DEC ANIMDY,X\n JSR BEEP\n:44 CMP #\"G\n BNE :13\n\n LDA #0\n STA FREEZEF\n\n*  Continue\n\n:3 LDA FLICKER\n BEQ :39\n; JSR CLS\n\n:39 LDX SEQIND\n LDA ANIMSEQ,X\n CMP #$FF\n BNE :31\n LDX #0\n STX SEQIND\n\n:31 LDA ANIMSEQ,X\n ASL\n TAX\n DEX\n LDA TABSTART,X\n STA IMAGE\n LDA TABSTART+1,X\n STA IMAGE+1\n JSR CONVX\n LDA KIDY\n STA YCO\n JSR LAY ;Lay down image #SEQIND\n\n LDX SEQIND\n LDA KIDX\n SEC\n SBC ANIMDX,X\n STA KIDX\n\n LDA KIDY\n CLC\n ADC ANIMDY,X\n STA KIDY\n\n INC SEQIND\n TAX\n\n JMP :2\n*-------------------------------\n*  Put up table info\n\nTABLE CMP #\"T\n BNE :1\n\n LDA IMLENG\n ORA IMLENG+1\n BEQ :2\n\n JSR TABLINFO\n JSR CHOICES\n\n:2 JSR HOME\n JMP LOOP1\n\n:1 JMP NEWTAB\n\nTABLINFO JSR SPLITSC\n\n JSR PRNIMS\n\n LDA #21\n STA CV\n LDX #LINE2\n LDY #>LINE2\n JSR PRLINE\n\n LDA #15\n STA CH\n LDA #21\n STA CV\n LDA #>TABSTART\n JSR PRBYTE\n LDA #TABSTART\n JSR PRBYTE\n\n LDA #20\n STA CH\n LDA TABLEND+1\n JSR PRBYTE\n LDA TABLEND\n JSR PRBYTE\n\n LDA #26\n STA CH\n JSR CALCFREE\n LDA MEMFREE+1\n JSR PRBYTE\n LDA MEMFREE\n JSR PRBYTE\n\n RTS\n\nNEWIM LDA #22\n STA CV\n LDX #LINE3\n LDY #>LINE3\n JSR PRLINE\n\n LDA #19\n STA CH\n LDA #22\n STA CV\n LDA IMLENG+1\n JSR PRBYTE\n LDA IMLENG\n JMP PRBYTE\n*-------------------------------\n*  Table editing choices\n\nCHOICES JSR TABLINFO\n\n JSR NEWIM\n\n LDA #23\n STA CV\n LDX #LINE4\n LDY #>LINE4\n JSR PRLINE\n\n lda #0\n sta editmode\n\n:89 JSR GETCHAR\n\n CMP #\"A\n BNE :90\n JMP ADD\n\n:90 CMP #\"D\n BNE :91\n JSR GETNUM\n CMP #$FF\n BEQ :94\n JMP DELETE\n\n:91 CMP #\"I\n BNE :92\n JSR GETNUM\n CMP #$FF\n BEQ :94\n JMP INSERT\n\n:92 cmp #\"R\n bne :notr\n;Replace\n jsr GETNUM\n cmp #$ff\n beq :94\n jsr delete\n jmp INSERT\n\n:notr CMP #$9B ;ESC\n BEQ :93\n BNE :89\n:93 RTS\n\n:94 JMP CHOICES\n\nLINE1 asc \"   images in table@\"\nLINE2 asc \"Table takes up     .     (     free)@\"\nLINE3 asc \"New image takes up      bytes@\"\nLINE4 asc \"Add/Delete/Insert/Replace/ESCape?\",60\n asc \"@\"\nLINE5 asc \"Image number?@\"\nINFO asc \"Line 00   Byte 00   Offset 00       \"\nMNEMON asc \"STA@\"\nANIM1 asc \"Sequence/X/Y adjust/Playback/ESCape?\",60\n asc \"@\"\nANIM3 asc \"F to freeze and frame-advance, G to go@\"\nADJTXT asc \"Delta-X or Y:@\"\nEDITLINE asc \"Editing image@\"\not1 asc \"AOSE\"\not2 asc \"NRTO\"\not3 asc \"DAAR\"\n\n*  Set opacity mnemonic text\n\nsetmnem ldx opac\n lda ot1,x\n sta MNEMON\n lda ot2,x\n sta MNEMON+1\n lda ot3,x\n sta MNEMON+2\n rts\n\n*  Print x,y coordinates\n\nPRXY LDA #5\n STA CH\n LDA #23\n STA CV\n LDA YCO\n JSR PRBYTE\n\n LDA #15\n STA CH\n LDA XCO\n JSR PRBYTE\n\n LDA #27\n STA CH\n LDA OFFSET\n JMP PRBYTE\n\n*  Calculate amount of memory free\n\nCALCFREE LDA #0\n SEC\n SBC TABLEND\n STA MEMFREE\n LDA #>bufend ;end of table storage area\n SBC TABLEND+1\n STA MEMFREE+1\n\n RTS\n\nNEWTAB CMP #$8E ;Ctrl-N\n BEQ :1\n JMP FULLSC\n:1 JSR NEWTABLE\n\n JSR HOME\n JSR TABLINFO\n JMP LOOP1\n\nNEWTABLE LDA #0\n STA NUMIMS\n STA TABSTART\n LDA #TABSTART\n CLC\n ADC #3\n STA TABSTART+1\n STA TABLEND\n LDA #>TABSTART\n ADC #0\n STA TABSTART+2\n STA TABLEND+1\n\n lda #$ff\n sta ANIMSEQ\n RTS\n\n*  Print \"xx images in table\"\n\nPRNIMS LDA #20\n STA CV\n LDX #LINE1\n LDY #>LINE1\n JSR PRLINE\n LDA #0\n STA CH\n LDA #20\n STA CV\n LDA NUMIMS\n JMP PRBYTE\n\n*  Wait for a keypress\n\nGETCHAR LDA $C010\n\n:1 LDA $C000\n BPL :1\n\n STA $C010\n RTS\n\n*  Get 2-digit hex # from keyboard (1-IMNUM)\n\nGETNUM JSR HOME\n\n JSR PRNIMS\n\n:0 LDA #23\n STA CV\n LDX #LINE5\n LDY #>LINE5\n JSR PRLINE\n\n:1 LDA #13\n STA CH\n JSR GETNYB\n CMP #$FF ;ESC\n BEQ :77\n ASL\n ASL\n ASL\n ASL\n CMP NUMIMS\n BEQ :2\n BCC :2\n JSR BEEP\n JMP :1\n:2 STA IMNUM\n\n LDA DIGIT\n JSR PRCHAR\n JSR GETNYB\n CLC\n ADC IMNUM\n BEQ :3\n CMP NUMIMS\n BEQ :4\n BCS :3\n:4 STA IMNUM\n LDA DIGIT\n JSR PRCHAR\n\n LDA IMNUM\n:77 RTS\n\n:3 JSR BEEP\n JMP :0\n\n*  Get delta-X or delta-Y\n\nGETDELT JSR HOME\n:0 LDA #23\n STA CV\n LDX #ADJTXT\n LDY #>ADJTXT\n JSR PRLINE\n\n LDA #13\n STA CH\n JSR GETNYB\n ASL\n ASL\n ASL\n ASL\n STA DELTA\n\n LDA DIGIT\n JSR PRCHAR\n JSR GETNYB\n CLC\n ADC DELTA\n\n RTS\n\nGETNYB LDA #$60 ;FLASHING CURSOR\n JSR PRCHAR\n DEC CH\n:1 JSR GETCHAR\n CMP #$9B ;ESC\n BEQ :77\n CMP #\"0\n BCC :3\n CMP #\":\n BCC :2 ;0-9\n CMP #\"A\n BCC :3\n CMP #\"G\n BCS :3\n* A-F\n STA DIGIT\n SEC\n SBC #$B7 ;ASSUME SHIFTLOCK\n RTS\n* 0-9\n:2 STA DIGIT\n SEC\n SBC #\"0\n RTS\n\n:3 JSR BEEP\n JMP :1\n:77 LDA #$FF\n RTS\n*-------------------------------\n* Add image onto end of table\n* ADD is equivalent to INSERT NUMIMS+1\n\nNOROOM RTS\nADD LDA NUMIMS\n CLC\n ADC #1\n STA IMNUM\n*-------------------------------\n* Insert image into table in position #IMNUM\n* (pushing the current image\n* #IMNUM forward and making it image #IMNUM+1)\n\n* Move entire image data block ahead 2 bytes\n\nINSERT LDA NUMIMS\n CMP #127\n BCS NOROOM ;NO ROOM FOR ANOTHER IMAGE\n\n CLC\n ADC #1\n STA NUMIMS ;NUMIMS:=NUMIMS+1\n\n ASL\n ADC #1\n STA TEMP1 ;TEMP1:start of image data (2xNUMIMS +1)\n\n ADC #TABSTART\n STA ADDR1\n\n LDA #0\n ADC #>TABSTART\n STA ADDR1+1\n\n LDA TABLEND\n STA ADDR2\n LDA TABLEND+1\n STA ADDR2+1\n\n LDA ADDR2\n CLC\n ADC #2\n STA ADDR3\n\n LDA ADDR2+1\n ADC #0\n STA ADDR3+1\n\n JSR MOVE2\n\n* For Y=NUMIMS+1 to IMNUM+1 step -1:\n* TABSTART(Y) := TABSTART(Y-1) + 2 + IMLENG\n\n LDY NUMIMS ;Y is image #\n INY\n TYA\n ASL\n TAX\n DEX ;X is corresponding index (2y-1)\n\n:1 LDA TABSTART-2,X\n CLC\n ADC #2\n STA temper\n\n LDA TABSTART-1,X\n ADC #0\n STA temper+1\n\n LDA temper\n CLC\n ADC IMLENG\n STA TABSTART,X\n\n LDA temper+1\n ADC IMLENG+1\n STA TABSTART+1,X\n\n DEY\n DEX\n DEX\n CPY IMNUM\n BNE :1\n\n* For Y=IMNUM to 1 step -1: TABSTART(Y):=TABSTART(Y)+2\n\n:3 LDA TABSTART,X\n CLC\n ADC #2\n STA TABSTART,X\n\n LDA TABSTART+1,X\n ADC #0\n STA TABSTART+1,X\n\n DEX\n DEX\n DEY\n BNE :3\n\n* If this is an insert (i:e:, if IMNUM<NUMIMS), then\n* make room for new image\n\n LDA IMNUM\n ASL\n TAX\n DEX\n LDA TABSTART,X\n STA ADDR1\n LDA TABSTART+1,X\n STA ADDR1+1\n\n LDA TABLEND\n CLC\n ADC #2\n STA ADDR2\n STA TABLEND\n\n LDA TABLEND+1\n ADC #0\n STA ADDR2+1\n STA TABLEND+1\n\n* Move TABLEND pointer to where new end of table will be\n* (last byte +1)\n\n LDX TEMP1\n LDA TABLEND\n CLC\n ADC IMLENG\n STA TABLEND\n STA ADDR3\n STA TABSTART,X\n\n LDA TABLEND+1\n ADC IMLENG+1\n STA TABLEND+1\n STA ADDR3+1\n STA TABSTART+1,X\n\n LDA IMNUM\n CMP NUMIMS\n BCS :5\n JSR MOVE2\n\n:5 jsr copyimg\n\n JSR BEEP\n JSR TABLINFO\n lda #$ff\n sta ANIMSEQ\n JMP LOOP1\n*-------------------------------\n*  Copy image from buffer to table\n\ncopyimg LDA IMNUM\n ASL\n TAX\n DEX\n LDA TABSTART,X\n STA ADDR3\n LDA TABSTART+1,X\n STA ADDR3+1\n\n LDA #bufstart\n STA ADDR1\n LDA #>bufstart\n STA ADDR1+1\n\n LDA #bufstart\n CLC\n ADC IMLENG\n STA ADDR2\n\n LDA #>bufstart\n ADC IMLENG+1\n STA ADDR2+1\n\n LDA ADDR2\n SEC\n SBC #1\n STA ADDR2\n\n LDA ADDR2+1\n SBC #0\n STA ADDR2+1\n\n JMP MOVE1\n*-------------------------------\n*  ADDR3 < ADDR1.ADDR2 M\n*  (DESTROYS ADDR1-3)\n*  USE MOVE1 WHEN CLOSING A SPACE\n\nMOVE1 LDY #0\n\n:1 LDA (ADDR1),Y\n STA (ADDR3),Y\n\n LDA ADDR1+1\n CMP ADDR2+1\n BCC :11\n LDA ADDR1\n CMP ADDR2\n BCS :5\n\n:11 INC ADDR3\n BNE :2\n INC ADDR3+1\n\n:2 INC ADDR1\n BNE :3\n INC ADDR1+1\n\n:3 BNE :1\n:5 RTS\n\n*  USE MOVE2 WHEN OPENING A SPACE\n*  ADDR3 IS LAST BYTE OF DEST BLOCK\n\nMOVE2 LDY #0\n\n:1 LDA (ADDR2),Y\n STA (ADDR3),Y\n\n LDA ADDR1+1\n CMP ADDR2+1\n BCC :11\n LDA ADDR1\n CMP ADDR2\n BCS :5\n\n:11 DEC ADDR3\n LDA ADDR3\n CMP #$FF\n BNE :2\n DEC ADDR3+1\n\n:2 DEC ADDR2\n LDA ADDR2\n CMP #$FF\n BNE :3\n DEC ADDR2+1\n\n:3 BNE :1\n:5\n]rts rts\n*-------------------------------\n*  Delete image #IMNUM from table\n*  Rev. 10/2/88\n\ndelete LDX NUMIMS\n BEQ ]rts\n\n CPX IMNUM\n BEQ :2\n\n*  If IMNUM<NUMIMS, pull in chunk of table following\n*  deleted image\n*  ADDRn < ADDRn+1 . TABLEND M\n\n LDA IMNUM\n ASL\n TAX\n DEX\n\n LDA TABSTART,X\n STA ADDR3\n LDA TABSTART+1,X\n STA ADDR3+1\n\n LDA TABSTART+2,X\n STA ADDR1\n LDA TABSTART+3,X\n STA ADDR1+1\n\n LDA TABLEND\n STA ADDR2\n LDA TABLEND+1\n STA ADDR2+1\n\n JSR MOVE1\n\n*  DIMLENG := TABSTART(IMNUM+1) - TABSTART(IMNUM) + 2\n\n LDA IMNUM\n ASL\n TAX\n DEX\n\n LDA TABSTART,X\n STA ADDR1\n LDA TABSTART+1,X\n STA ADDR1+1\n\n LDA TABSTART+2,X\n SEC\n SBC ADDR1\n STA DIMLENG\n\n LDA TABSTART+3,X\n SBC ADDR1+1\n STA DIMLENG+1\n\n LDA DIMLENG\n CLC\n ADC #2\n STA DIMLENG\n\n LDA DIMLENG+1\n ADC #0\n STA DIMLENG+1\n\n*  For Y=IMNUM+1 to NUMIMS: TABSTART(Y):=TABSTART(Y+1)-DIMLENG\n\n LDY IMNUM\n INY ;Y is image #\n TYA\n ASL\n TAX\n DEX ;X is index # (2y-1)\n\n:1 LDA TABSTART+2,X\n SEC\n SBC DIMLENG\n STA TABSTART,X\n\n LDA TABSTART+3,X\n SBC DIMLENG+1\n STA TABSTART+1,X\n\n INX\n INX\n INY\n CPY NUMIMS\n BCC :1\n BEQ :1\n\n*  For Y=IMNUM to 1 step -1: TABSTART(Y) := TABSTART(Y)-2\n\n:2 LDA IMNUM\n ASL\n TAX\n DEX\n\n:3 LDA TABSTART,X\n SEC\n SBC #2\n STA TABSTART,X\n\n LDA TABSTART+1,X\n SBC #0\n STA TABSTART+1,X\n\n DEX\n DEX\n cpx #$ff\n bne :3\n\n*  TABLEND := TABSTARTnumims\n\n:4 LDA NUMIMS\n ASL\n TAX\n DEX\n LDA TABSTART,X\n STA TABLEND\n LDA TABSTART+1,X\n STA TABLEND+1\n\n DEC NUMIMS\n\n*  Move data block 2 bytes to left\n*  TABSTART(1) < TABSTART(1) + 2 : TABLEND+2 M\n\n LDA TABSTART+1\n STA ADDR3\n CLC\n ADC #2\n STA ADDR1\n\n LDA TABSTART+2\n STA ADDR3+1\n ADC #0\n STA ADDR1+1\n\n LDA TABLEND\n CLC\n ADC #2\n STA ADDR2\n\n LDA TABLEND+1\n ADC #0\n STA ADDR2+1\n\n JSR MOVE1\n\n rts\n*-------------------------------\nDELETE\n ldx NUMIMS\n beq :rts\n\n jsr delete\n\n JSR BEEP\n JSR TABLINFO\n lda #$ff\n sta ANIMSEQ\n JMP LOOP1\n\n:rts rts\n*-------------------------------\n*  Info display line across bottom of screen\n\nDISPINFO jsr setmnem\n\n LDA #23\n STA CV\n LDX #INFO\n LDY #>INFO\n JSR PRLINE\n JSR PRXY\n\n lda editmode\n beq :skip\n\n lda #22\n sta CV\n ldx #EDITLINE\n ldy #>EDITLINE\n jsr PRLINE\n\n lda #14\n sta CH\n lda #22\n sta CV\n lda IMNUM\n jsr PRBYTE\n\n:skip rts\n*-------------------------------\n*  Full screen graphics\n\nFULLSC CMP #\"H\n BNE GET\n LDA FULSCR\n EOR #$FF\n STA FULSCR\n BNE :1\n LDA $C052\n JMP LOOP\n:1 LDA $C053\n JMP LOOP\n*-------------------------------\n*  BEEP speaker\n\nBEEP LDA #$40\n JSR :1\n LDY #$C0\n:4 LDA #$0C\n JSR :1\n LDA $C030\n DEY\n BNE :4\n RTS\n:1 SEC\n:2 PHA\n:3 SBC #1\n BNE :3\n PLA\n SBC #1\n BNE :2\n RTS\n*-------------------------------\n*  GET image from table - load into buffer\n\nGET CMP #\"G\n BNE TEMP\n\n JSR SPLITSC\n LDA NUMIMS\n BEQ :81\n\n JSR GETNUM\n CMP #$FF\n BEQ :81\n\n jsr retrieve\n\n:81 JMP LOOP1\n*-------------------------------\n* Clear screen\n\nTEMP CMP #$80 ;CTRL-@\n BNE GOWAN1\n JSR CLS\n JMP START1\n*-------------------------------\n*  Copy image #IMNUM into buffer\n\nretrieve LDA IMNUM\n ASL\n TAX\n DEX\n LDA TABSTART,X\n STA ADDR1\n LDA TABSTART+1,X\n STA ADDR1+1\n\n INX\n INX\n LDA TABSTART,X\n STA ADDR2\n SEC\n SBC ADDR1\n STA IMLENG\n\n LDA TABSTART+1,X\n STA ADDR2+1\n SBC ADDR1+1\n STA IMLENG+1\n\n LDA #bufstart\n STA ADDR3\n LDA #>bufstart\n STA ADDR3+1\n\n JSR MOVE1\n\n lda bufstart\n sta bytechek\n lda bufstart+1\n sta bytechek+1\n\n rts\n*-------------------------------\n*  UNPACK\n\nGOWAN1 CMP #\"U\n BNE GOWAN2\n\n JSR PREPARE\n JSR SPLITSC\n JSR DUNPAC\n JMP START1\n*-------------------------------\n*  QUIT\n\nGOWAN2 CMP #$91 ;CTRL-Q\n BNE GOWAN3\n\n JSR ZEROSWAP\n LDA $C051\n LDA $C053\n JSR $FC58 ;HOME\n JMP $FF66 ;MON\n*-------------------------------\n*  CATALOG\n\nGOWAN3 CMP #$83 ;CTRL-C\n BNE GOWAN35\n\n LDA $C051\n JSR CATALOG\n\n LDA $C010\n:1 LDA $C000\n BPL :1\n LDA $C010\n\n LDA $C050\n\n JSR HOME\n JMP LOOP1\n*-------------------------------\n* DISK CMD\n\nGOWAN35 CMP #$84 ;CTRL-D\n BNE GOWAN4\n\n JSR PREPARE\n JSR SPLITSC\n JSR DISKCMD\n JMP START1\n*-------------------------------\n*  RESET HI BITS\n\nGOWAN4 CMP #\"R\n BNE GOWAN5\n\n JSR RESETHI\n JMP LOOP\n*-------------------------------\n*  PACK\n\nGOWAN5 CMP #$90 ;CTRL-P\n BNE GOWAN6\n\n JSR BASCALC\n LDA UNDERBYTE\n STA (BASE),Y\n\n JSR SPLITSC\n JSR DPAC\n JSR HOME\n JMP LOOP1\n*-------------------------------\n* Blast image table onto 18-sector disk in drive 2\n\nGOWAN6 cmp #$82 ;ctrl-B\n bne gowan7\n\n lda NUMIMS\n sta TABSTART\n jsr SPLITSC\n\n jsr BLAST\n\n jsr HOME\n jmp LOOP1\n*-------------------------------\n* Change opacity (0-3)\n\ngowan7 cmp #\"=\"\n bne gowan8\n\n lda opac\n cmp #3\n bne :1\n lda #-1\n:1 clc\n adc #1\n sta opac\n\n jmp LOOP1\n*-------------------------------\n* Edit an image\n\ngowan8 cmp #$85 ;ctrl-E\n beq edit\n cmp #$86 ;ctrl-F\n beq finished\n cmp #$98 ;ctrl-X\n beq exit\n jmp gowan9\n\n* Enter (or reenter) edit mode\n\nedit jsr SPLITSC\n lda NUMIMS\n beq :skip\n jsr GETNUM\n cmp #$ff\n beq :skip\n\n lda IMNUM\n asl\n tax\n dex\n lda TABSTART,x\n sta IMAGE\n lda TABSTART+1,x\n sta IMAGE+1\n\n lda #0\n sta OFFSET\n jsr lay ;lay down orig. image\n\n jsr BASCALC\n lda (BASE),y\n sta UNDERBYTE\n\n ldy #0\n lda XCO\n sta edxfix\n clc\n adc (IMAGE),y\n sec\n sbc #1\n sta edxco\n\n iny\n lda YCO\n sta edyco\n sec\n sbc (IMAGE),y\n clc\n adc #1\n sta edyfix ;get boundaries\n\n lda #$ff\n sta editmode\n\n:skip jmp LOOP1\n\n* Exit edit mode\n\nexit lda #0\n sta editmode\n jsr HOME\n jmp LOOP1\n\n* Finished editing\n\nfinished lda editmode\n beq :skip\n\n jsr BASCALC\n lda UNDERBYTE\n sta (BASE),y\n\n lda XCO\n pha\n lda YCO\n pha\n lda XFIX\n pha\n lda YFIX\n pha\n\n lda edxco\n sta XCO\n lda edyco\n sta YCO\n lda edxfix\n sta XFIX\n lda edyfix\n sta YFIX\n\n jsr PICKUP1\n\n pla\n sta YFIX\n pla\n sta XFIX\n pla\n sta YCO\n pla\n sta XCO\n\n jsr copyimg ;copy img from buffer to table\n jsr BEEP\n:done jmp exit\n\n:skip jmp LOOP1\n\n*-------------------------------\ngowan9 jmp LOOP\n*-------------------------------\n*  Convert KIDX (0-255) to XCO & OFFSET\n\nCONVX LDA KIDX\n\n LDY #0\n:3 CMP #7\n BCC :4\n SEC\n SBC #7\n INY\n BNE :3\n:4 STA OFFSET\n STY XCO\n RTS\n*===============================\nUNPACK LDA #0\n STA PAC\n LDA #$40\n STA PAC+1\n LDA #$FE\n STA V8\n LDA #0\n STA VA\n LDY #$27\n:4 LDA #$78\n STA V2\n LDA #$20\n STA V3\n:0 LDA V2\n SEC\n SBC #$28\n STA V2\n BCS :1\n DEC V3\n:1 LDA V2\n STA V4\n LDA V3\n CLC\n ADC #4\n STA V5\n:2 LDA V4\n SEC\n SBC #$80\n STA V4\n BCS :3\n DEC V5\n:3 LDA V4\n STA PIC\n LDA V5\n CLC\n ADC #$20\n STA PIC+1\n:5 LDA PIC+1\n SEC\n SBC #4\n STA PIC+1\n CLC\n BCC :6\n:13 LDA PIC+1\n CMP V5\n BNE :5\n LDA V4\n CMP V2\n BNE :2\n LDA V5\n CMP V3\n BNE :2\n LDA V2\n BNE :0\n DEY\n BPL :4\n RTS\n:6 BIT VA\n BMI :11\n LDX #0\n LDA (PAC,X)\n STA VB\n CMP V8\n BNE :10\n INC PAC\n BNE :7\n INC PAC+1\n:7 LDA (PAC,X)\n STA V9\n INC PAC\n BNE :8\n INC PAC+1\n:8 LDA (PAC,X)\n STA VB\n INC PAC\n BNE :9\n INC PAC+1\n:9 LDA #$80\n STA VA\n CLC\n BCC :11\n:10 LDA VB\n ORA #$80\n STA (PIC),Y\n INC PAC\n BNE :12\n INC PAC+1\n:12 CLC\n BCC :13\n:11 LDA VB\n ORA #$80\n STA (PIC),Y\n DEC V9\n BNE :13\n LDA #0\n STA VA\n BEQ :13\n*-------------------------------\nPACK LDA #0\n STA PAC\n LDA #$40\n STA PAC+1\n LDA #$FE\n STA V9\n LDA #$80\n STA VB\n LDA #0\n STA VC\n LDY #$27\n:1 LDA #$78\n STA V2\n LDA #$20\n STA V3\n:2 LDA V2\n SEC\n SBC #$28\n STA V2\n BCS :3\n DEC V3\n:3 LDA V2\n STA V4\n LDA V3\n CLC\n ADC #4\n STA V5\n:4 LDA V4\n SEC\n SBC #$80\n STA V4\n BCS :5\n DEC V5\n:5 LDA V4\n STA PIC\n LDA V5\n CLC\n ADC #$20\n STA PIC+1\n:6 LDA PIC+1\n SEC\n SBC #4\n STA PIC+1\n CLC\n BCC :7\n:8 LDA PIC+1\n CMP V5\n BNE :6\n LDA V4\n CMP V2\n BNE :4\n LDA V5\n CMP V3\n BNE :4\n LDA V2\n BNE :2\n DEY\n BPL :1\n LDA #$80\n STA VC\n CLC\n BCC :15\n:7 LDA (PIC),Y\n BIT VB\n BMI :15\n CMP V8\n BNE :15\n LDX VA\n CPX #$FF\n BEQ :15\n INC VA\n INX\n CPX #4\n BCS :10\n:9 CMP V9\n BEQ :10\n LDX #0\n STA (PAC,X)\n INC PAC\n BNE :10\n INC PAC+1\n:10 STA V8\n CLC\n BCC :8\n:15 TAX\n PHA\n TYA\n PHA\n TXA\n LDX #0\n CMP V9\n BNE :11\n LDY #2\n STA (PAC),Y\n INX\n:11 LDA PAC\n SEC\n SBC #3\n STA PAC\n BCS :12\n DEC PAC+1\n:12 BIT VB\n BMI :14\n LDA VA\n CMP #4\n BCS :13\n LDA V8\n CMP V9\n BNE :14\n:13 LDY #0\n LDA V9\n STA (PAC),Y\n INY\n LDA VA\n STA (PAC),Y\n:14 STX VB\n LDA PAC\n CPX #1\n CLC\n BNE :16\n ADC #6\n CLV\n BVC :17\n:16 ADC #3\n:17 STA PAC\n BCC :18\n INC PAC+1\n:18 LDA #1\n STA VA\n PLA\n TAY\n PLA\n BIT VC\n BPL :9\n RTS\n*===============================\n* Text & disk routines\n\nTYLO hex 0080008000800080\n hex 28A828A828A828A8\n hex 50D050D050D050D0\n\nTYHI hex 0404050506060707\n hex 0404050506060707\n hex 0404050506060707\n*-------------------------------\nHOME LDY #$F7\n LDA #$A0\n:2 STA $400,Y\n STA $500,Y\n STA $600,Y\n STA $700,Y\n DEY\n CPY #$80\n BNE :3\n LDY #$77\n:3 CPY #$FF\n BNE :2\n RTS\n*-------------------------------\nSETLINE LDY CV\n LDX TYLO,Y\n STX BASE\n LDX TYHI,Y\n STX BASE+1\n RTS\n*-------------------------------\nPRCHAR LDY CH\n STA (BASE),Y\n INY\n CPY #40\n BCC :1\n LDX CV\n CPX #23\n BCS :2\n INC CV\n JSR SETLINE\n:2 LDY #0\n:1 STY CH\n RTS\n*-------------------------------\nPRBYTE JSR SETLINE\n PHA\n LSR\n LSR\n LSR\n LSR\n JSR :1\n PLA\n AND #$0F\n:1 ORA #$B0\n CMP #$BA\n BCC PRCHAR\n ADC #$06\n SEC\n BCS PRCHAR\n*-------------------------------\nPRLINE STX ADDR\n STY ADDR+1\n\n JSR SETLINE\n\n LDY #0\n\n:1 LDA (ADDR),Y\n cmp #\"@\"\n beq :eol\n STA (BASE),Y\n\n INY\n CPY #40\n BCC :1\n\n:newline LDA #0\n STA CH\n\n LDA CV\n CMP #23\n BEQ :2\n\n INC CV\n\n:2 RTS\n\n:eol lda #$a0\n:loop sta (BASE),y\n iny\n cpy #40\n bcc :loop\n bcs :newline\n*-------------------------------\n*  ProDOS interface\n\nGETLN = $FD6A\nMONHOME = $FC58\nout = $200\n*-------------------------------\n* Swap zpage & ZEROBUF\n\nZEROSWAP LDX #0\n:1 LDA ZEROBUF,X\n TAY\n LDA $0,X\n STA ZEROBUF,X\n STY $0,X\n INX\n BNE :1\n RTS\n*-------------------------------\nSETWIND LDA #$FF\n STA $32 ;MASK\n\n LDA #0\n STA $20\n STA $22\n LDA #40\n STA $21\n LDA #24\n STA $23\n\n RTS\n*-------------------------------\n*  Accept a line of input\n\nGETLINE JSR SETWIND\n LDA #23\n STA $22\n JSR MONHOME\n\n LDA #\">\n STA $33 ;PROMPT\n JMP GETLN\n*-------------------------------\n*  Print catalog\n\nCATALOG JSR ZEROSWAP\n\n JSR SETWIND\n JSR MONHOME\n\n lda $bf00\n cmp #$4c\n bne :noprods\n\n ldx #0\n lda #cat\n sta string\n lda #>cat\n sta string+1\n jsr strout\n jsr crout\n\n:noprods JMP ZEROSWAP\n*-------------------------------\nUTEXT asc \"Unpacking picture from disk@\"\nPTEXT asc \"Packing picture to disk@\"\nITEXT asc \"Loading image table from disk@\"\nOTEXT asc \"Saving image table to disk@\"\nPROMPT asc \"Enter file name without extension@\"\nblasttxt asc \"Blasting image table to drive 2@\"\nblastq4 asc \"Offset?@\"\nblastq3 asc \"ID byte?@\"\nblastq2 asc \"Track (00-22)?@\"\nblastq1 asc \"Image table destination (hi byte)?@\"\ncat asc \"CAT@\"\nsaveimg1 asc \"BSAVEIMG.@\"\nsaveimg2 asc \",A$6000,L$@\"\nloadimg1 asc \"BLOADIMG.@\"\nloadimg2 asc \",A$6000@\"\nsavepac1 asc \"BSAVEPAC.@\"\nsavepac2 asc \",A$4000,L$@\"\nloadpac1 asc \"BLOADPAC.@\"\nloadpac2 asc \",A$4000@\"\nNAMEBUF ds 40\n*-------------------------------\npray jsr :prbyte\n tya\n:prbyte PHA\n LSR\n LSR\n LSR\n LSR\n JSR :prdig\n PLA\n AND #$0F\n:prdig ORA #$B0\n CMP #$BA\n BCC :prchar\n ADC #$06\n SEC\n:prchar sta out,x\n inx\n rts\n*-------------------------------\n* Add (string) to $200 GETLN buffer\n* Going in: X is GETLN index\n\nstrout ldy #0\n:loop lda (string),y\n cmp #\"@\" ;string delimiter\n beq :done\n sta out,x\n inx\n iny\n bne :loop ;255 chars max\n:done rts\n\nnameout lda #NAMEBUF\n sta string\n lda #>NAMEBUF\n sta string+1\n jmp strout\n*-------------------------------\n* <CR> and call ProDOS BI\n\ncrout lda #0\n sta $be0f\n\n lda #$8d\n sta out,x\n jsr $be03\n\n lda $be0f ;BI error code\n beq :ok\n jsr BEEP\n jsr BEEP\n:ok rts\n*-------------------------------\n* Input filename\n\nASKNAME LDA #22\n STA CV\n LDX #PROMPT\n LDY #>PROMPT\n JMP PRLINE\n\nGETNAME JSR GETLINE\n\n LDY #0\n:1 LDA $200,Y\n STA NAMEBUF,Y\n INY\n cpy #39\n beq :longnuf\n CMP #$8D\n BNE :1\n dey\n:longnuf lda #\"@\"\n sta NAMEBUF,Y\n rts\n*-------------------------------\n* DISK CMD\n\nDISKCMD JSR HOME\n LDA $C053\n\n JSR ZEROSWAP\n\n JSR GETNAME\n\n ldx #0\n jsr nameout\n jsr crout\n\n JMP ZEROSWAP\n*-------------------------------\n*  Unpack a picture from disk\n\nDUNPAC JSR HOME\n LDA $C053\n\n LDA #20\n STA CV\n LDX #UTEXT\n LDY #>UTEXT\n JSR PRLINE\n\n JSR ASKNAME\n\n JSR ZEROSWAP\n\n JSR GETNAME\n LDA NAMEBUF\n CMP #\"@\"\n BEQ :1\n\n ldx #0\n lda #loadpac1\n sta string\n lda #>loadpac1\n sta string+1\n jsr strout\n\n jsr nameout\n\n lda #loadpac2\n sta string\n lda #>loadpac2\n sta string+1\n jsr strout\n\n jsr crout\n\n lda $be0f\n bne :1 ;BI error\n\n JSR ZEROSWAP\n JMP UNPACK\n\n:1 JMP ZEROSWAP\n\n*  Pack a picture to disk\n\nDPAC JSR HOME\n LDA $C053\n\n LDA #20\n STA CV\n LDX #PTEXT\n LDY #>PTEXT\n JSR PRLINE\n\n JSR PACK\n lda PAC\n sta $300\n lda PAC+1\n sta $301 ;outside z.p.\n\n JSR ASKNAME\n\n JSR ZEROSWAP\n\n JSR GETNAME\n LDA NAMEBUF\n CMP #\"@\"\n BEQ :1\n\n ldx #0\n lda #savepac1\n sta string\n lda #>savepac1\n sta string+1\n jsr strout\n\n jsr nameout\n\n lda #savepac2\n sta string\n lda #>savepac2\n sta string+1\n jsr strout\n\n LDA $300\n CLC\n ADC #1\n tay\n LDA $301\n ADC #0\n SEC\n SBC #$40\n jsr pray\n\n jsr crout\n\n:1 JMP ZEROSWAP\n*-------------------------------\n*  Output image table to disk\n\nDTABOUT JSR HOME\n LDA $C053\n\n LDA #20\n STA CV\n LDX #OTEXT\n LDY #>OTEXT\n JSR PRLINE\n\n JSR ASKNAME\n\n LDA TABLEND\n sta $300\n LDA TABLEND+1\n sta $301\n\n JSR ZEROSWAP\n\n JSR GETNAME\n LDA NAMEBUF\n CMP #\"@\"\n BEQ :1\n\n ldx #0\n lda #saveimg1\n sta string\n lda #>saveimg1\n sta string+1\n jsr strout\n\n jsr nameout\n\n lda #saveimg2\n sta string\n lda #>saveimg2\n sta string+1\n jsr strout\n\n ldy $300\n LDA $301\n SEC\n SBC #>TABSTART\n jsr pray\n\n jsr crout\n\n:1 JMP ZEROSWAP\n*-------------------------------\n*  Input image table from disk\n\nDTABIN JSR HOME\n LDA $C053\n\n LDA #20\n STA CV\n LDX #ITEXT\n LDY #>ITEXT\n JSR PRLINE\n\n JSR ASKNAME\n\n JSR ZEROSWAP\n\n JSR GETNAME\n LDA NAMEBUF\n CMP #\"@\"\n BEQ :1\n\n ldx #0\n lda #loadimg1\n sta string\n lda #>loadimg1\n sta string+1\n jsr strout\n\n jsr nameout\n\n lda #loadimg2\n sta string\n lda #>loadimg2\n sta string+1\n jsr strout\n\n jsr crout\n\n:1 JMP ZEROSWAP\n*-------------------------------\ntrack = $302\nimdest = $303\nIDbyte = $304\noffset = $305\n\n* Blast image table onto 18-sector disk in drive 2\n\nBLAST JSR HOME\n\n LDA #20\n STA CV\n LDX #blasttxt\n LDY #>blasttxt\n JSR PRLINE\n\n jsr askblast\n cmp #$ff\n beq :skip\n sta imdest\n\n jsr relocate\n\n jsr asktrack\n cmp #$ff\n beq :undo\n\n jsr askoffset\n cmp #$ff\n beq :undo\n\n jsr askID\n cmp #$ff\n beq :undo\n sta IDbyte\n\n lda TABLEND+1\n sta $300\n lda #>TABSTART\n sta $301\n\n* In: >TABLEND ($300), >TABSTART ($301), track ($302)\n* imdest ($303), IDbyte ($304), >offset ($305)\n\n jsr blast18\n\n:undo jsr undo ;unrelocate\n\n:skip rts\n\n* get img table dest addr\n\naskblast lda #22\n sta CV\n ldx #blastq1\n ldy #>blastq1\n jsr PRLINE\n\n lda #34\n sta CH\n jmp getbyte\n\n* Get byte from kbd, return in A (ff = esc)\n\ngetbyte jsr GETNYB\n cmp #$ff ;esc\n beq :rts\n asl\n asl\n asl\n asl\n sta temp\n lda DIGIT\n jsr PRCHAR\n jsr GETNYB\n clc\n adc temp\n sta temp\n lda DIGIT\n jsr PRCHAR\n lda temp\n:rts rts\n\n* get track #\n\nasktrack lda #22\n sta CV\n ldx #blastq2\n ldy #>blastq2\n jsr PRLINE\n\n lda #14\n sta CH\n jsr getbyte\n cmp #$ff\n beq :rts\n cmp #$23\n bcc :ok\n jsr BEEP\n jmp asktrack\n:ok sta track\n lda DIGIT\n jsr PRCHAR\n lda track\n:rts rts\n\n* get offset\n\naskoffset lda #22\n sta CV\n ldx #blastq4\n ldy #>blastq4\n jsr PRLINE\n\n lda #7\n sta CH\n jsr getbyte\n cmp #$ff\n beq :rts\n cmp #$11\n bcc :ok\n jsr BEEP\n jmp askoffset\n:ok sta offset\n lda DIGIT\n jsr PRCHAR\n lda offset\n:rts rts\n\n* get ID byte\n\naskID lda #22\n sta CV\n ldx #blastq3\n ldy #>blastq3\n jsr PRLINE\n\n lda #8\n sta CH\n jsr getbyte\n cmp #$ff\n beq :rts\n cmp #IDbyteA\n beq :rts\n cmp #IDbyteB\n bne :3\n:rts rts\n:3 JSR BEEP\n jmp askID\n\n*-------------------------------\n* Relocate image table\n\nrelocate ldx TABSTART ;# of images\n inx\n txa\n asl\n tax  ;2(n+1)\n\n:loop lda TABSTART,x\n sec\n sbc #>TABSTART\n clc\n adc imdest\n sta TABSTART,x\n\n dex\n dex\n bne :loop\n rts\n\n* Unrelocate\n\nundo ldx TABSTART\n inx\n txa\n asl\n tax\n\n:loop lda TABSTART,x\n sec\n sbc imdest\n clc\n adc #>TABSTART\n sta TABSTART,x\n\n dex\n dex\n bne :loop\n rts\n*-------------------------------\n lst on\nEOF ds 1\n lst off\n sav draz\n"
  },
  {
    "path": "04 Support/MakeDisk/DRAZ/DRAZMOVER.S",
    "content": "* drazmover\norg = $6000\n lst off\n*-------------------------------\n dum $00\n\ndest ds 2\nsource ds 2\nendsourc ds 2\n\n dend\n*-------------------------------\n dum org\n\nmover ds $100\n\nrw18buf ds $500\nendrwbuf\nhiresbuf ds $1000\nendhrbuf\ndrazbuf ds $1500\nenddrbuf\nendfile dend\n*-------------------------------\nhires = $8400 ;blast18 = $9200\ndraz = $800\nrw18 = $d000\n*-------------------------------\n org org\n*-------------------------------\n* move rw18 to l.c.\n\n sta $c081 ;read ROM--write RAM\n\n lda #>rw18\n ldx #>rw18buf\n ldy #>endrwbuf\n jsr movemem\n\n* move draz and hires\n* Draz first!\n\n lda #>draz\n ldx #>drazbuf\n ldy #>enddrbuf\n jsr movemem\n\n lda #>hires\n ldx #>hiresbuf\n ldy #>endhrbuf\n jsr movemem\n\n* All done\n\n jmp draz\n*-------------------------------\nmovemem sta dest+1\n stx source+1\n sty endsourc+1\n\n ldy #0\n sty dest\n sty source\n sty endsourc\n\n:loop lda (source),y\n sta (dest),y\n\n iny\n bne :loop\n\n inc source+1\n inc dest+1\n\n lda source+1\n cmp endsourc+1\n bne :loop\n\n rts\n*-------------------------------\neof\n"
  },
  {
    "path": "04 Support/MakeDisk/DRAZ/GBLAST.S",
    "content": "* gblast\norg = $4400\n lst off\n*-------------------------------\n*\n*  General 18-sector blast routine\n*\n*  Blasts up to 2 tracks of data to 18-sector disk in drive 2\n*\n*-------------------------------\n*\n*  To use from BASIC:\n*\n*  BLOAD data into main mem\n*\n*  TrackNo   = track # (0-34)\n*  DataStart = hi byte of data start address\n*  DataEnd   = hi byte of data end address\n*  Offset    = sector offset ($00-11)\n*  Drive     = drive # (1-2)\n*\n*  poke gblast+3,TrackNo\n*  poke gblast+4,DataStart\n*  poke gblast+5,DataEnd\n*  poke gblast+6,Offset\n*  poke gblast+7,Drive\n*  call gblast\n*\n*  peek(gblast+8) = # sectors written to 1st track\n*  peek(gblast+9) = # sectors written to 2nd track\n*\n*-------------------------------\n org org\n\n jmp gblast\n\nTrackNo ds 1\nDataStart ds 1 ;hi byte\nDataEnd ds 1 ;hi byte\nOffset ds 1\nDriveNo ds 1\nLen1 ds 1\nLen2 ds 1\n\nzerosave ds $10\n\n*-------------------------------\nrw18buf = $4800 ;length $800\nendrwbuf = $5000\n\ntemp18buf = $4800 ;length $1200\nendtempbuf = $5a00\n\nrw18 = $d000\n\nfloppyslot = 6\n\nBbundID = $a9\n\nslot = $fd\nztrack = $fe\n\n*-------------------------------\n dum $f0\n\nobj_lo ds 1\nobj_hi ds 1\ndst_lo ds 1\ndst_hi ds 1\nlen_lo ds 1\nlen_hi ds 1\nflushflag ds 1\n\n dend\n\n*-------------------------------\n*\n*  G B L A S T\n*\n*-------------------------------\ngblast\n\n* save zero page vars\n\n ldx #$f\n:loop lda $f0,x\n sta zerosave,x\n dex\n bpl :loop\n\n* move rw18 to l.c.\n\n sta $c083 ;read/write RAM\n\n lda #>rw18\n ldx #>rw18buf\n ldy #>endrwbuf\n\n jsr movemem\n\n* blast data\n\n jsr blast18\n\n* Done--restore zero page vars\n\n ldx #$f\n:loop2 lda zerosave,x\n sta $f0,x\n dex\n bpl :loop2\n\n]rts rts\n\n*-------------------------------\n*\n*  B L A S T  1 8\n*\n*  In: TrackNo, DataStart, DataEnd, Offset\n*\n*-------------------------------\nblast18 lda $c083\n lda $c083 ;enable RAM\n\n* set BbundID\n\n jsr rw18\n db 7,BbundID\n\n* turn on drive and delay .5 seconds\n\n ldx #floppyslot*16\n stx slot\n\n ldx DriveNo\n cpx #1\n beq :1\n ldx #2 ;default to drive 2\n:1 stx drive\n\n jsr rw18\n db 0\ndrive db 2,5\n\n* seek first track\n\n lda TrackNo\n sta track\n\n jsr rw18\n db 2,1\ntrack db 0\n\n* Write out data (1-2 tracks)\n\n ldy #0\n lda DataStart\n sty obj_lo\n sta obj_hi\n\n lda Offset\n clc\n adc #>temp18buf\n sty dst_lo\n sta dst_hi\n\n lda #>endtempbuf\n sec\n sbc dst_hi\n sty len_lo\n sta len_hi ;# sectors left on this track (1-18)\n\n lda DataEnd\n sec\n sbc DataStart\n clc\n adc #1 ;total # of sectors to write (1-36)\n cmp len_hi\n bcs :ok ;write to end of track\n sta len_hi ;write portion of track\n\n:ok lda len_hi\n sta Len1\n jsr wrtrack ;write 1st track\n\n* Write out 2nd track if necessary\n\n ldy #0\n sty Len2\n sty obj_lo\n lda DataStart\n clc\n adc Len1\n cmp DataEnd\n beq :1\n bcs :done ;it fit on 1 track\n:1 sta obj_hi\n\n lda #>temp18buf ;start at beginning of 2nd track\n sty dst_lo\n sta dst_hi\n\n lda DataEnd\n sec\n sbc obj_hi\n clc\n adc #1 ;# of sectors left to write (1-18)\n sty len_lo\n sta len_hi\n sta Len2\n\n lda TrackNo\n clc\n adc #1\n sta ztrack\n jsr wrtrack ;write out second track\n\n* turn off drive\n\n:done jsr rw18\n db 1\n\n* out of here!\n\n sta $c082\n\n rts\n\n*-------------------------------\n*\n* write 1 track\n*\n* In: obj, dst, len\n*  (trashes these vars)\n*\n*-------------------------------\n* read in current data\n\nwrtrack\n jsr rw18\n db $83,>temp18buf\n\n:loop ldy #0\n sty flushflag\n lda (obj_lo),y\n sta (dst_lo),y\n\n inc obj_lo\n bne :1\n inc obj_hi\n\n:1 inc dst_lo\n bne :2\n inc dst_hi\n\n:2 lda len_lo\n bne :3\n dec len_hi\n:3 dec len_lo\n\n lda dst_hi\n cmp #>temp18buf+$1200\n bne :4\n jmp flush?\n\n:4 lda len_lo\n ora len_hi\n bne :loop\n\n jmp flush?\n\n*-------------------------------\nflush? lda flushflag\n bne :nodata\n\n ldy #<temp18buf\n lda #>temp18buf\n sty dst_lo\n sta dst_hi\n jsr rw18\n db $c5,>temp18buf\n\n lda len_lo\n ora len_hi\n beq :nodata\n\n jsr rw18\n db $83,>temp18buf\n\n inc flushflag\n\n:nodata rts\n\n*-------------------------------\n*\n*  Move a block of memory\n*\n*-------------------------------\n dum $f0\n\ndest ds 2\nsource ds 2\nendsourc ds 2\n\n dend\n\nmovemem sta dest+1\n stx source+1\n sty endsourc+1\n\n ldy #0\n sty dest\n sty source\n sty endsourc\n\n:loop lda (source),y\n sta (dest),y\n\n iny\n bne :loop\n\n inc source+1\n inc dest+1\n\n lda source+1\n cmp endsourc+1\n bne :loop\n\n rts\n\n*-------------------------------\n sav gblast\n"
  },
  {
    "path": "04 Support/MakeDisk/DRAZ/GBLAST2.S",
    "content": "* gblast\norg = $5600\n lst off\n*-------------------------------\n*\n*  General 18-sector blast routine\n*\n*  Blasts up to 2 tracks of data to 18-sector disk in drive 2\n*\n*-------------------------------\n*\n*  To use from BASIC:\n*\n*  BLOAD data into main mem\n*\n*  TrackNo   = track # (0-34)\n*  DataStart = hi byte of data start address\n*  DataEnd   = hi byte of data end address\n*  Offset    = sector offset ($00-11)\n*  Drive     = drive # (1-2)\n*\n*  poke gblast+3,TrackNo\n*  poke gblast+4,DataStart\n*  poke gblast+5,DataEnd\n*  poke gblast+6,Offset\n*  poke gblast+7,Drive\n*  call gblast\n*\n*  peek(gblast+8) = # sectors written to 1st track\n*  peek(gblast+9) = # sectors written to 2nd track\n*\n*-------------------------------\n org org\n\n jmp gblast\n\nTrackNo ds 1\nDataStart ds 1 ;hi byte\nDataEnd ds 1 ;hi byte\nOffset ds 1\nDriveNo ds 1\nLen1 ds 1\nLen2 ds 1\n\nzerosave ds $10\n\n*-------------------------------\nrw18buf = org+$400 ;length $800\nendrwbuf = rw18buf+$800\n\ntemp18buf = org+$400 ;length $1200\nendtempbuf = temp18buf+$1200\n\nrw18 = $d000\n\nfloppyslot = 6\n\nBbundID = $a9\n\nslot = $fd\nztrack = $fe\n\n*-------------------------------\n dum $f0\n\nobj_lo ds 1\nobj_hi ds 1\ndst_lo ds 1\ndst_hi ds 1\nlen_lo ds 1\nlen_hi ds 1\nflushflag ds 1\n\n dend\n\n*-------------------------------\n*\n*  G B L A S T\n*\n*-------------------------------\ngblast\n\n* save zero page vars\n\n ldx #$f\n:loop lda $f0,x\n sta zerosave,x\n dex\n bpl :loop\n\n* move rw18 to l.c.\n\n sta $c083 ;read/write RAM\n\n lda #>rw18\n ldx #>rw18buf\n ldy #>endrwbuf\n\n jsr movemem\n\n* blast data\n\n jsr blast18\n\n* Done--restore zero page vars\n\n ldx #$f\n:loop2 lda zerosave,x\n sta $f0,x\n dex\n bpl :loop2\n\n]rts rts\n\n*-------------------------------\n*\n*  B L A S T  1 8\n*\n*  In: TrackNo, DataStart, DataEnd, Offset\n*\n*-------------------------------\nblast18 lda $c083\n lda $c083 ;enable RAM\n\n* set BbundID\n\n jsr rw18\n db 7,BbundID\n\n* turn on drive and delay .5 seconds\n\n ldx #floppyslot*16\n stx slot\n\n ldx DriveNo\n cpx #1\n beq :1\n ldx #2 ;default to drive 2\n:1 stx drive\n\n jsr rw18\n db 0\ndrive db 2,5\n\n* seek first track\n\n lda TrackNo\n sta track\n\n jsr rw18\n db 2,1\ntrack db 0\n\n* Write out data (1-2 tracks)\n\n ldy #0\n lda DataStart\n sty obj_lo\n sta obj_hi\n\n lda Offset\n clc\n adc #>temp18buf\n sty dst_lo\n sta dst_hi\n\n lda #>endtempbuf\n sec\n sbc dst_hi\n sty len_lo\n sta len_hi ;# sectors left on this track (1-18)\n\n lda DataEnd\n sec\n sbc DataStart\n clc\n adc #1 ;total # of sectors to write (1-36)\n cmp len_hi\n bcs :ok ;write to end of track\n sta len_hi ;write portion of track\n\n:ok lda len_hi\n sta Len1\n jsr wrtrack ;write 1st track\n\n* Write out 2nd track if necessary\n\n ldy #0\n sty Len2\n sty obj_lo\n lda DataStart\n clc\n adc Len1\n cmp DataEnd\n beq :1\n bcs :done ;it fit on 1 track\n:1 sta obj_hi\n\n lda #>temp18buf ;start at beginning of 2nd track\n sty dst_lo\n sta dst_hi\n\n lda DataEnd\n sec\n sbc obj_hi\n clc\n adc #1 ;# of sectors left to write (1-18)\n sty len_lo\n sta len_hi\n sta Len2\n\n lda TrackNo\n clc\n adc #1\n sta ztrack\n jsr wrtrack ;write out second track\n\n* turn off drive\n\n:done jsr rw18\n db 1\n\n* out of here!\n\n sta $c082\n\n rts\n\n*-------------------------------\n*\n* write 1 track\n*\n* In: obj, dst, len\n*  (trashes these vars)\n*\n*-------------------------------\n* read in current data\n\nwrtrack\n jsr rw18\n db $83,>temp18buf\n\n:loop ldy #0\n sty flushflag\n lda (obj_lo),y\n sta (dst_lo),y\n\n inc obj_lo\n bne :1\n inc obj_hi\n\n:1 inc dst_lo\n bne :2\n inc dst_hi\n\n:2 lda len_lo\n bne :3\n dec len_hi\n:3 dec len_lo\n\n lda dst_hi\n cmp #>temp18buf+$1200\n bne :4\n jmp flush?\n\n:4 lda len_lo\n ora len_hi\n bne :loop\n\n jmp flush?\n\n*-------------------------------\nflush? lda flushflag\n bne :nodata\n\n ldy #<temp18buf\n lda #>temp18buf\n sty dst_lo\n sta dst_hi\n jsr rw18\n db $c5,>temp18buf\n\n lda len_lo\n ora len_hi\n beq :nodata\n\n jsr rw18\n db $83,>temp18buf\n\n inc flushflag\n\n:nodata rts\n\n*-------------------------------\n*\n*  Move a block of memory\n*\n*-------------------------------\n dum $f0\n\ndest ds 2\nsource ds 2\nendsourc ds 2\n\n dend\n\nmovemem sta dest+1\n stx source+1\n sty endsourc+1\n\n ldy #0\n sty dest\n sty source\n sty endsourc\n\n:loop lda (source),y\n sta (dest),y\n\n iny\n bne :loop\n\n inc source+1\n inc dest+1\n\n lda source+1\n cmp endsourc+1\n bne :loop\n\n rts\n\n*-------------------------------\n sav gblast\n"
  },
  {
    "path": "04 Support/MakeDisk/DRAZ/GRAB.S",
    "content": "* grab\norg = $4400\n lst off\n*-------------------------------\n*\n*  Grab hi-res screen from side 2 of game disk, tracks 22-23\n*\n*-------------------------------\n*\n*  To use from BASIC:\n*\n*  BLOAD data into main mem\n*\n*  TrackNo   = track # (0-34)\n*  DriveNo   = drive # (1-2)\n*\n*  G = 17408 ($4400)\n*  poke G+3,TrackNo\n*  poke G+4,DriveNo\n*  call G\n*\n*-------------------------------\n org org\n\n jmp grab\n\nTrackNo ds 1\nDriveNo ds 1\n\nzerosave ds $10\n\n*-------------------------------\nrw18buf = $4800 ;length $800\nendrwbuf = $5000\n\ntemp18buf = $4800 ;length $1200\nendtempbuf = $5a00\n\nrw18 = $d000\n\nfloppyslot = 6\n\nBbundID = $ad\n\nslot = $fd\nztrack = $fe\n\n*-------------------------------\n dum $f0\n\nobj_lo ds 1\nobj_hi ds 1\ndst_lo ds 1\ndst_hi ds 1\nlen_lo ds 1\nlen_hi ds 1\nflushflag ds 1\n\n dend\n\n*-------------------------------\n*\n*  G R A B\n*\n*-------------------------------\ngrab\n\n* save zero page vars\n\n ldx #$f\n:loop lda $f0,x\n sta zerosave,x\n dex\n bpl :loop\n\n* move rw18 to l.c.\n\n sta $c083 ;read/write RAM\n\n lda #>rw18\n ldx #>rw18buf\n ldy #>endrwbuf\n\n jsr movemem\n\n* grab data\n\n jsr grab18\n\n* Done--restore zero page vars\n\n ldx #$f\n:loop2 lda zerosave,x\n sta $f0,x\n dex\n bpl :loop2\n\n]rts rts\n\n*-------------------------------\n*\n*  G R A B  1 8\n*\n*  In: TrackNo, DriveNo\n*\n*-------------------------------\ngrab18 lda $c083\n lda $c083 ;enable RAM\n\n* set BbundID\n\n ldx DriveNo\n cpx #1\n beq :1\n ldx #2 ;default to drive 2\n:1 stx drive\n\n jsr rw18\n db 7,BbundID\n\n* turn on drive and delay .5 seconds\n\n ldx #floppyslot*16\n stx slot\n\n jsr rw18\n db 0\ndrive db 2,5\n\n* seek first track\n\n lda TrackNo\n sta track\n\n jsr rw18\n db 2,1\ntrack db 0\n\n* Load in 2 tracks at $2000\n\n jsr loadhr\n\n* turn off drive\n\n:done jsr rw18\n db 1\n\n* out of here!\n\n sta $c082\n\n rts\n\n*-------------------------------\n*\n* load hires scrn\n*\n*-------------------------------\nloadhr\n jsr rw18\n hex c3,20\n\n jsr rw18\n hex c4\n hex 32,33,34,35,36,37,38,39,3a\n hex 3b,3c,3d,3e,3f,00,00,00,00\n\n rts\n\n*-------------------------------\n*\n*  Move a block of memory\n*\n*-------------------------------\n dum $f0\n\ndest ds 2\nsource ds 2\nendsourc ds 2\n\n dend\n\nmovemem sta dest+1\n stx source+1\n sty endsourc+1\n\n ldy #0\n sty dest\n sty source\n sty endsourc\n\n:loop lda (source),y\n sta (dest),y\n\n iny\n bne :loop\n\n inc source+1\n inc dest+1\n\n lda source+1\n cmp endsourc+1\n bne :loop\n\n rts\n\n*-------------------------------\n sav grab\n"
  },
  {
    "path": "04 Support/MakeDisk/DRAZ/HIRES.S",
    "content": "* draz hires\norg equ $8400\n lst off\n\n org org\n\n put hrparams\n put hrtables\n*-------------------------------\n ds org+$a00-*\n\n JMP CLS\n JMP LAY\n jmp DIAMOND\n\n* Local vars\n\n dum $e0\n\nBASE ds 2\nIMSAVE ds 2\nXSAVE ds 1\nYSAVE ds 1\nWIDTH ds 1\nHEIGHT ds 1\nTOPEDGE ds 1\nOFFLEFT ds 1\nOFFRIGHT ds 1\nYREG ds 1\nCARRY ds 1\nAMASK ds 1\nBMASK ds 1\nVISWIDTH ds 1\nRMOST ds 1\n\nsaveimg ds 3\ndestheight ds 1\ntemp1 ds 1\nimgline ds 1\n\n dend\n\n*-------------------------------\n*  C L S\n*\n*  Clear screen to black2\n\nCLS LDA PAGE\n CLC\n ADC #$20\n STA BASE+1\n\n LDY #$00\n STY BASE\n\n:1 LDA #$80\n\n:2 STA (BASE),Y\n INY\n BNE :2\n\n INC BASE+1\n LDA BASE+1\n AND #$1F\n BNE :1\n\n RTS\n\n*-------------------------------\n* L A Y\n*\n* Parameters:\n*\n* PAGE      $00 = page 1, $20 = page 2\n* XCO       byte (0=left, 39=right)\n* YCO       line (0=top, 191=bottom)\n* OFFSET    # bits to shift right (0-6)\n* IMAGE     starting address of image table\n* OPACITY   Bits 0-1: 0 = AND, 1 = ORA, 2 = STA, 3 = EOR\n*           Bit 7: 0 = normal, 1 = mirror\n*\n* Image table:\n*\n* 0:    width (# bytes)\n* 1:    height (# lines)\n* 2-n:  image reading L-R, T-B\n*\n*-------------------------------\n\nLAY LDA OPACITY\n BPL :99\n\n AND #$7F\n STA OPACITY\n JMP MLAY\n\n:99 JSR PREPREP\n JSR PREPARE\n CMP #-1\n BCC :8\n JMP DONE\n\n:8 LDX OFFSET\n\n LDA SHIFTL,X\n STA :91+1\n LDA SHIFTH,X\n STA :91+2\n\n LDA CARRYL,X\n STA :90+1\n STA :92+1\n LDA CARRYH,X\n STA :90+2\n STA :92+2\n\n LDA AMASKS,X\n STA AMASK\n LDA BMASKS,X\n STA BMASK\n\n LDX OPACITY\n LDA OPCODE,X\n STA :80\n STA :81\n\n LDY YCO\n\n:0 LDA YLO,Y\n CLC\n ADC XCO\n STA BASE\n\n LDA YHI,Y\n ADC PAGE\n STA BASE+1\n\n LDY OFFLEFT\n BEQ :2\n\n*  Take CARRY from off left edge\n\n DEY\n LDA (IMAGE),Y\n TAX\n:90 LDA $FFFF,X ;CARRYn\n STA CARRY\n\n LDA IMAGE\n CLC\n ADC OFFLEFT\n STA IMAGE\n BCC :1\n INC IMAGE+1\n\n:1 LDY #0\n\n LDA VISWIDTH\n STA WIDTH\n BNE :3\n BEQ :4 ;Zero width\n\n* Start a new line at left edge\n\n:2 LDA (BASE),Y\n AND AMASK\n STA CARRY\n\n* Lay line down left-to-right fast as you can\n\n:3 LDA (IMAGE),Y\n TAX\n:91 LDA $FFFF,X ;SHIFTn\n ORA CARRY ;Combine with carryover from previous byte\n\n:80 STA (BASE),Y ;STA/ORA/AND/EOR depending on OPACITY\n STA (BASE),Y\n\n:92 LDA $FFFF,X ;CARRYn\n STA CARRY ;Carry over to next byte\n\n INY\n CPY VISWIDTH\n BCC :3\n\n*  Extra byte on right (carryover)\n\n LDA OFFRIGHT\n BNE :5 ;Rightmost byte is offscreen\n\n:4 LDA (BASE),Y\n\n AND BMASK\n ORA CARRY\n:81 STA (BASE),Y\n STA (BASE),Y\n\n*  Next line up\n\n:5 LDA WIDTH\n CLC\n ADC IMAGE\n STA IMAGE\n BCC :6\n INC IMAGE+1\n\n:6 DEC YCO\n LDY YCO\n CPY TOPEDGE\n BNE :0\n\n*  Restore parameters\n\nDONE LDA IMSAVE\n STA IMAGE\n LDA IMSAVE+1\n STA IMAGE+1\n\n LDA XSAVE\n STA XCO\n LDA YSAVE\n STA YCO\n\n RTS\n\n*-------------------------------\n*  P R E P A R E\n*\n*  Save parameters\n\nPREPREP LDA IMAGE\n STA IMSAVE\n LDA IMAGE+1\n STA IMSAVE+1\n\n LDA XCO\n STA XSAVE\n LDA YCO\n STA YSAVE\n\n*  Read first two bytes (width, height) of image table\n\n LDY #0\n LDA (IMAGE),Y\n STA WIDTH\n\n INY\n LDA (IMAGE),Y\n STA HEIGHT\n\n LDA IMAGE\n CLC\n ADC #2\n STA IMAGE\n BCC :3\n INC IMAGE+1\n\n:3 RTS\n\n*-------------------------------\n* PREPARE\n*\n*  Crop top and bottom edges\n\nPREPARE LDA YCO\n SEC\n SBC HEIGHT\n CMP #192\n BCC :4 ;Top is onscreen\n\n LDA YCO\n CMP #192\n BCS :8 ;Top and bottom o.s. - skip it\n\n LDA #-1 ;Top is offscreen\n:4 STA TOPEDGE ;(Top line -1)\n\n LDY YCO\n:41 CPY #192\n BCC :6 ;Bottom is onscreen\n\n*  Advance pointer past bottom offscreen portion\n\n LDA IMAGE\n CLC\n ADC WIDTH\n STA IMAGE\n BCC :5\n INC IMAGE+1\n\n:5 DEY\n STY YCO\n BNE :41\n\n*  Crop sides\n\n:6 LDA #0\n STA OFFLEFT\n STA OFFRIGHT\n STA RMOST\n\n LDA WIDTH\n STA VISWIDTH\n\n LDA XCO\n BPL :7 ;Left edge is onscreen\n\n*  Left edge is offscreen\n\n EOR #$FF\n CLC\n ADC #1\n STA OFFLEFT ;Width of o.s. portion\n\n LDA XCO\n CLC\n ADC WIDTH\n BCC :8 ;Entire image is o.s. - skip it\n STA VISWIDTH ;(Width of onscreen portion)\n\n LDA #0\n STA XCO\n BEQ LAYON\n\n*  Left edge OK\n\n:7 CMP #40\n BCS :8 ;Entire image is o.s. - skip it\n\n CLC\n ADC WIDTH\n CMP #40\n BCC LAYON ;Right edge OK - lay on\n\n SEC\n SBC #39\n STA OFFRIGHT ;Width of o.s. portion\n\n LDA #40\n SEC\n SBC XCO\n STA VISWIDTH\n\n LDA WIDTH\n SEC\n SBC VISWIDTH\n STA RMOST\n\n BPL LAYON\n\n:8 LDA #-1 ;Image is o.s. - skip it\n\nLAYON RTS\n\n\n*-------------------------------\n*  M I R R O R L A Y\n*\n*  Specified starting byte (XCO,YCO) is image's bottom\n*  right corner, not bottom left; bytes are read off image\n*  table R-L, T-B and mirrored before printing.\n\nMLAY JSR PREPREP\n\n LDA XCO\n SEC\n SBC WIDTH\n STA XCO\n\n JSR PREPARE\n CMP #-1\n BCC :8\n JMP DONE\n\n:8 LDX OFFSET\n\n LDA SHIFTL,X\n STA :91+1\n LDA SHIFTH,X\n STA :91+2\n\n LDA CARRYL,X\n STA :90+1\n STA :92+1\n LDA CARRYH,X\n STA :90+2\n STA :92+2\n\n LDA AMASKS,X\n STA AMASK\n LDA BMASKS,X\n STA BMASK\n\n LDX OPACITY\n LDA OPCODE,X\n STA :80\n STA :81\n\n* Lay on\n\n LDY YCO\n\n:0 LDA YLO,Y\n STA BASE\n\n LDA YHI,Y\n CLC\n ADC PAGE\n STA BASE+1\n\n LDY OFFLEFT\n BEQ :2\n\n* Take CARRY from off left edge\n\n LDY VISWIDTH\n LDA (IMAGE),Y\n TAX\n\n LDA MIRROR-$80,X\n TAX\n\n:90 LDA $FFFF,X ;CARRYn\n STA CARRY\n\n:1 DEY\n BPL :3\n BMI :4\n\n* Start a new line at left edge\n\n:2 LDY XCO\n LDA (BASE),Y\n AND AMASK\n STA CARRY\n\n LDY WIDTH\n DEY\n\n* Lay line down left-to-right fast as you can\n\n:3 STY YREG\n LDA (IMAGE),Y\n TAX\n\n LDA MIRROR-$80,X\n TAX\n\n:91 LDA $FFFF,X ;SHIFTn\n ORA CARRY ;Combine with carryover from previous byte\n\n LDY XCO\n:80 STA (BASE),Y ;STA/ORA/AND/EOR depending on OPACITY\n STA (BASE),Y\n\n:92 LDA $FFFF,X ;CARRYn\n STA CARRY ;Carry over to next byte\n\n INC BASE\n\n LDY YREG\n CPY RMOST\n BEQ :7\n\n DEY\n BPL :3\n\n*  Extra byte on right (carryover)\n\n:7 LDA OFFRIGHT\n BNE :5 ;Rightmost byte is offscreen\n\n:4 LDY XCO\n LDA (BASE),Y\n\n AND BMASK\n ORA CARRY\n:81 STA (BASE),Y\n STA (BASE),Y\n\n*  Next line up\n\n:5 LDA WIDTH\n CLC\n ADC IMAGE\n STA IMAGE\n BCC :6\n INC IMAGE+1\n\n:6 DEC YCO\n LDY YCO\n CPY TOPEDGE\n BNE :0\n\n JMP DONE\n\n*-------------------------------\n*  F A S T L A Y\n*\n* Limitations: No offset - no clipping - no mirroring -\n* STA only - trashes IMAGE.\n\nFASTLAY LDY #0\n LDA (IMAGE),Y\n STA WIDTH\n\n INY\n LDA YCO\n SEC\n SBC (IMAGE),Y\n STA TOPEDGE\n\n LDA IMAGE\n CLC\n ADC #2\n STA IMAGE\n BCC :5\n INC IMAGE+1\n\n:5 LDX YCO\n\n:0 LDA YLO,X\n CLC\n ADC XCO\n STA BASE\n\n LDA YHI,X\n ADC PAGE\n STA BASE+1\n\n LDY #0\n\n:1 LDA (IMAGE),Y\n STA (BASE),Y\n\n INY\n CPY WIDTH\n BCC :1\n\n TYA\n CLC\n ADC IMAGE\n STA IMAGE\n BCC :2\n INC IMAGE+1\n\n:2 DEX\n CPX TOPEDGE\n BNE :0\n\n RTS\n\n*-------------------------------\n*\n*   D I A M O N D\n*\n*   Works like FASTLAY, but it lays down the image\n*   at a slant.\n*\n*-------------------------------\nwidtable ;INT(7x/2) for x=0 to 40\n db 0,3,7,10,14,17,21,24,28\n db 31,35,38,42,45,49,52,56,59\n db 63,66,70,73,77,80,84,87,91\n db 94,98,101,105,108,112,115,119,122\n db 126,129,133,136,140\n*-------------------------------\n\nDIAMOND\n LDY #0\n LDA (IMAGE),Y\n STA WIDTH\n\n INY\n LDA (IMAGE),Y ;original image height\n sta HEIGHT\n\n ldx WIDTH\n clc\n adc widtable,x ;INT(7x/2)\n sta destheight\n\n LDA YCO\n SEC\n sbc destheight\n STA TOPEDGE\n\n LDA IMAGE\n CLC\n ADC #2\n STA IMAGE\n BCC :5\n INC IMAGE+1\n:5\n\n* Now lay down image (slanted)...L-R, B-T\n\n ldx YCO ;bottom line of screen dump area\n\n lda #0 ;bottom line of image\n sta imgline\n\n:loop\n LDA YLO,X\n CLC\n ADC XCO\n STA BASE\n\n LDA YHI,X\n ADC PAGE\n STA BASE+1 ;get base addr\n\n lda IMAGE\n sta saveimg\n lda IMAGE+1\n sta saveimg+1\n\n lda imgline\n sta saveimg+2\n\n LDY #0\n\n* Do a line (L-R), 2 bytes at a time\n\n:loop1\n jsr getimgbyte ;lda (IMAGE),y\n and #%00000011 ;2 leftmost bits (on this line)\n sta temp1\n\n jsr onelinedn ;move 1 line down & getimgbyte\n and #%00001100 ;next 2 bits (from line below)\n ora temp1\n sta temp1\n\n jsr onelinedn\n and #%00110000 ;next 2 bits (from 2 lines down)\n ora temp1\n sta temp1\n\n jsr onelinedn\n and #%01000000 ;rightmost bit (from 3 lines down)\n ora temp1\n ;Got it\n jsr putbyte\n\n INY\n CPY WIDTH\n bcs :eol\n\n* Next byte over on this line\n\n jsr getimgbyte\n and #%00000001 ;leftmost bit (still from 3 lines down)\n sta temp1\n\n jsr onelinedn\n and #%00000110 ;next 2 bits (from 4 lines down)\n ora temp1\n sta temp1\n\n jsr onelinedn\n and #%00011000 ;next 2 bits (from 5 lines down)\n ora temp1\n sta temp1\n\n jsr onelinedn\n and #%01100000 ;rightmost 2 bits (from 6 lines down)\n ora temp1\n\n jsr putbyte\n\n jsr onelinedn ;7 lines down (prepare for next 2 bytes)\n\n INY\n CPY WIDTH\n bcc :loop1 ;next 2 bytes in this line\n\n:eol\n\n* Done with this line\n* Up to the next line\n\n lda saveimg\n sta IMAGE\n lda saveimg+1\n sta IMAGE+1 ;reset IMAGE to point to this line\n lda saveimg+2\n sta imgline\n\n lda WIDTH\n CLC\n ADC IMAGE\n STA IMAGE\n BCC :2\n INC IMAGE+1\n:2\n inc imgline\n\n DEX\n CPX TOPEDGE\n beq :rts\n\n cpx #192\n bcs :rts ;offscreen\n\n jmp :loop\n\n:rts rts\n\n*-------------------------------\nonelinedn\n lda IMAGE\n sec\n sbc WIDTH\n sta IMAGE\n\n bcs :1\n dec IMAGE+1\n:1\n\n dec imgline\n\n jmp getimgbyte\n\n*-------------------------------\ngetimgbyte\n lda imgline\n cmp HEIGHT\n bcs :outside\n\n lda (IMAGE),y\n rts\n\n:outside lda #$80 ;blank space outside image\n rts\n*-------------------------------\nputbyte ;in: A\n cpy #40\n bcs :skip\n\n ora #$80\n sta (BASE),y\n\n:skip rts\n*-------------------------------\n lst\neof ds 1\n lst off\n*-------------------------------\n"
  },
  {
    "path": "04 Support/MakeDisk/DRAZ/HRPARAMS.S",
    "content": "* hrparams\n\n lst off\n\n dum $00\n\nPAGE ds 1\nXCO ds 1\nYCO ds 1\nOFFSET ds 1\nIMAGE ds 2\nOPACITY ds 1\n\nBUFFER ds 2\nBUFX ds 1\nBUFY ds 1\n\ntopedge ds 1\n\n dend\n"
  },
  {
    "path": "04 Support/MakeDisk/DRAZ/HRTABLEQ.S",
    "content": "* hrtableq\n\n lst off\n\nHRTABLES dum $8400\n\nYLO ds $C0\nYHI ds $C0\n\nSHIFT0 ds $80\nSHIFT1 ds $80\nSHIFT2 ds $80\nSHIFT3 ds $80\nSHIFT4 ds $80\nSHIFT5 ds $80\nSHIFT6 ds $80\n\nCARRY0 ds $80\nCARRY1 ds $80\nCARRY2 ds $80\nCARRY3 ds $80\nCARRY4 ds $80\nCARRY5 ds $80\nCARRY6 ds $80\n\nMIRROR ds $80\n\nSHIFTL dfb #SHIFT0-$80\nDSHIFTL dfb #SHIFT0\n dfb #SHIFT1\n dfb #SHIFT2\n dfb #SHIFT3\n dfb #SHIFT4\n dfb #SHIFT5\n dfb #SHIFT6\n\nSHIFTH dfb /SHIFT0-$80\nDSHIFTH dfb /SHIFT0\n dfb /SHIFT1\n dfb /SHIFT2\n dfb /SHIFT3\n dfb /SHIFT4\n dfb /SHIFT5\n dfb /SHIFT6\n\nCARRYL dfb #CARRY0-$80\nDCARRYL dfb #CARRY0\n dfb #CARRY1\n dfb #CARRY2\n dfb #CARRY3\n dfb #CARRY4\n dfb #CARRY5\n dfb #CARRY6\n\nCARRYH dfb /CARRY0-$80\nDCARRYH dfb /CARRY0\n dfb /CARRY1\n dfb /CARRY2\n dfb /CARRY3\n dfb /CARRY4\n dfb /CARRY5\n dfb /CARRY6\n\nAMASKS dfb %10000000\n dfb %10000001\n dfb %10000011\n dfb %10000111\n dfb %10001111\n dfb %10011111\n dfb %10111111\n\nBMASKS dfb %11111111\n dfb %11111110\n dfb %11111100\n dfb %11111000\n dfb %11110000\n dfb %11100000\n dfb %11000000\n\nOPCODE dfb $31 ;and (oper),Y\n dfb $11 ;ora\n dfb $91 ;sta\n dfb $51 ;eor\n\n dend\n"
  },
  {
    "path": "04 Support/MakeDisk/DRAZ/HRTABLES.S",
    "content": "* hires tables\n lst off\n\nYLO hex 00000000000000008080808080808080\n hex 00000000000000008080808080808080\n hex 00000000000000008080808080808080\n hex 00000000000000008080808080808080\n\n hex 2828282828282828A8A8A8A8A8A8A8A8\n hex 2828282828282828A8A8A8A8A8A8A8A8\n hex 2828282828282828A8A8A8A8A8A8A8A8\n hex 2828282828282828A8A8A8A8A8A8A8A8\n\n hex 5050505050505050D0D0D0D0D0D0D0D0\n hex 5050505050505050D0D0D0D0D0D0D0D0\n hex 5050505050505050D0D0D0D0D0D0D0D0\n hex 5050505050505050D0D0D0D0D0D0D0D0\n\nYHI hex 2024282C3034383C2024282C3034383C\n hex 2125292D3135393D2125292D3135393D\n hex 22262A2E32363A3E22262A2E32363A3E\n hex 23272B2F33373B3F23272B2F33373B3F\n\n hex 2024282C3034383C2024282C3034383C\n hex 2125292D3135393D2125292D3135393D\n hex 22262A2E32363A3E22262A2E32363A3E\n hex 23272B2F33373B3F23272B2F33373B3F\n\n hex 2024282C3034383C2024282C3034383C\n hex 2125292D3135393D2125292D3135393D\n hex 22262A2E32363A3E22262A2E32363A3E\n hex 23272B2F33373B3F23272B2F33373B3F\n\nSHIFT0 hex 808182838485868788898A8B8C8D8E8F\n hex 909192939495969798999A9B9C9D9E9F\n hex A0A1A2A3A4A5A6A7A8A9AAABACADAEAF\n hex B0B1B2B3B4B5B6B7B8B9BABBBCBDBEBF\n\n hex C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF\n hex D0D1D2D3D4D5D6D7D8D9DADBDCDDDEDF\n hex E0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF\n hex F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF\n\nSHIFT1 hex 80828486888A8C8E90929496989A9C9E\n hex A0A2A4A6A8AAACAEB0B2B4B6B8BABCBE\n hex C0C2C4C6C8CACCCED0D2D4D6D8DADCDE\n hex E0E2E4E6E8EAECEEF0F2F4F6F8FAFCFE\n\n hex 80828486888A8C8E90929496989A9C9E\n hex A0A2A4A6A8AAACAEB0B2B4B6B8BABCBE\n hex C0C2C4C6C8CACCCED0D2D4D6D8DADCDE\n hex E0E2E4E6E8EAECEEF0F2F4F6F8FAFCFE\n\nSHIFT2 hex 8084888C9094989CA0A4A8ACB0B4B8BC\n hex C0C4C8CCD0D4D8DCE0E4E8ECF0F4F8FC\n hex 8084888C9094989CA0A4A8ACB0B4B8BC\n hex C0C4C8CCD0D4D8DCE0E4E8ECF0F4F8FC\n\n hex 8084888C9094989CA0A4A8ACB0B4B8BC\n hex C0C4C8CCD0D4D8DCE0E4E8ECF0F4F8FC\n hex 8084888C9094989CA0A4A8ACB0B4B8BC\n hex C0C4C8CCD0D4D8DCE0E4E8ECF0F4F8FC\n\nSHIFT3 hex 80889098A0A8B0B8C0C8D0D8E0E8F0F8\n hex 80889098A0A8B0B8C0C8D0D8E0E8F0F8\n hex 80889098A0A8B0B8C0C8D0D8E0E8F0F8\n hex 80889098A0A8B0B8C0C8D0D8E0E8F0F8\n\n hex 80889098A0A8B0B8C0C8D0D8E0E8F0F8\n hex 80889098A0A8B0B8C0C8D0D8E0E8F0F8\n hex 80889098A0A8B0B8C0C8D0D8E0E8F0F8\n hex 80889098A0A8B0B8C0C8D0D8E0E8F0F8\n\nSHIFT4 hex 8090A0B0C0D0E0F08090A0B0C0D0E0F0\n hex 8090A0B0C0D0E0F08090A0B0C0D0E0F0\n hex 8090A0B0C0D0E0F08090A0B0C0D0E0F0\n hex 8090A0B0C0D0E0F08090A0B0C0D0E0F0\n\n hex 8090A0B0C0D0E0F08090A0B0C0D0E0F0\n hex 8090A0B0C0D0E0F08090A0B0C0D0E0F0\n hex 8090A0B0C0D0E0F08090A0B0C0D0E0F0\n hex 8090A0B0C0D0E0F08090A0B0C0D0E0F0\n\nSHIFT5 hex 80A0C0E080A0C0E080A0C0E080A0C0E0\n hex 80A0C0E080A0C0E080A0C0E080A0C0E0\n hex 80A0C0E080A0C0E080A0C0E080A0C0E0\n hex 80A0C0E080A0C0E080A0C0E080A0C0E0\n\n hex 80A0C0E080A0C0E080A0C0E080A0C0E0\n hex 80A0C0E080A0C0E080A0C0E080A0C0E0\n hex 80A0C0E080A0C0E080A0C0E080A0C0E0\n hex 80A0C0E080A0C0E080A0C0E080A0C0E0\n\nSHIFT6 hex 80C080C080C080C080C080C080C080C0\n hex 80C080C080C080C080C080C080C080C0\n hex 80C080C080C080C080C080C080C080C0\n hex 80C080C080C080C080C080C080C080C0\n\n hex 80C080C080C080C080C080C080C080C0\n hex 80C080C080C080C080C080C080C080C0\n hex 80C080C080C080C080C080C080C080C0\n hex 80C080C080C080C080C080C080C080C0\n\nCARRY0 hex 00000000000000000000000000000000\n hex 00000000000000000000000000000000\n hex 00000000000000000000000000000000\n hex 00000000000000000000000000000000\n\n hex 00000000000000000000000000000000\n hex 00000000000000000000000000000000\n hex 00000000000000000000000000000000\n hex 00000000000000000000000000000000\n\nCARRY1 hex 00000000000000000000000000000000\n hex 00000000000000000000000000000000\n hex 00000000000000000000000000000000\n hex 00000000000000000000000000000000\n\n hex 01010101010101010101010101010101\n hex 01010101010101010101010101010101\n hex 01010101010101010101010101010101\n hex 01010101010101010101010101010101\n\nCARRY2 hex 00000000000000000000000000000000\n hex 00000000000000000000000000000000\n hex 01010101010101010101010101010101\n hex 01010101010101010101010101010101\n\n hex 02020202020202020202020202020202\n hex 02020202020202020202020202020202\n hex 03030303030303030303030303030303\n hex 03030303030303030303030303030303\n\nCARRY3 hex 00000000000000000000000000000000\n hex 01010101010101010101010101010101\n hex 02020202020202020202020202020202\n hex 03030303030303030303030303030303\n\n hex 04040404040404040404040404040404\n hex 05050505050505050505050505050505\n hex 06060606060606060606060606060606\n hex 07070707070707070707070707070707\n\nCARRY4 hex 00000000000000000101010101010101\n hex 02020202020202020303030303030303\n hex 04040404040404040505050505050505\n hex 06060606060606060707070707070707\n\n hex 08080808080808080909090909090909\n hex 0A0A0A0A0A0A0A0A0B0B0B0B0B0B0B0B\n hex 0C0C0C0C0C0C0C0C0D0D0D0D0D0D0D0D\n hex 0E0E0E0E0E0E0E0E0F0F0F0F0F0F0F0F\n\nCARRY5 hex 00000000010101010202020203030303\n hex 04040404050505050606060607070707\n hex 08080808090909090A0A0A0A0B0B0B0B\n hex 0C0C0C0C0D0D0D0D0E0E0E0E0F0F0F0F\n\n hex 10101010111111111212121213131313\n hex 14141414151515151616161617171717\n hex 18181818191919191A1A1A1A1B1B1B1B\n hex 1C1C1C1C1D1D1D1D1E1E1E1E1F1F1F1F\n\nCARRY6 hex 00000101020203030404050506060707\n hex 080809090A0A0B0B0C0C0D0D0E0E0F0F\n hex 10101111121213131414151516161717\n hex 181819191A1A1B1B1C1C1D1D1E1E1F1F\n\n hex 20202121222223232424252526262727\n hex 282829292A2A2B2B2C2C2D2D2E2E2F2F\n hex 30303131323233333434353536363737\n hex 383839393A3A3B3B3C3C3D3D3E3E3F3F\n\nMIRROR hex 80C0A0E090D0B0F088C8A8E898D8B8F8\n hex 84C4A4E494D4B4F48CCCACEC9CDCBCFC\n hex 82C2A2E292D2B2F28ACAAAEA9ADABAFA\n hex 86C6A6E696D6B6F68ECEAEEE9EDEBEFE\n\n hex 81C1A1E191D1B1F189C9A9E999D9B9F9\n hex 85C5A5E595D5B5F58DCDADED9DDDBDFD\n hex 83C3A3E393D3B3F38BCBABEB9BDBBBFB\n hex 87C7A7E797D7B7F78FCFAFEF9FDFBFFF\n\nSHIFTL dfb #SHIFT0-$80\nDSHIFTL dfb #SHIFT0\n dfb #SHIFT1\n dfb #SHIFT2\n dfb #SHIFT3\n dfb #SHIFT4\n dfb #SHIFT5\n dfb #SHIFT6\n\nSHIFTH dfb >SHIFT0-$80\nDSHIFTH dfb >SHIFT0\n dfb >SHIFT1\n dfb >SHIFT2\n dfb >SHIFT3\n dfb >SHIFT4\n dfb >SHIFT5\n dfb >SHIFT6\n\nCARRYL dfb #CARRY0-$80\nDCARRYL dfb #CARRY0\n dfb #CARRY1\n dfb #CARRY2\n dfb #CARRY3\n dfb #CARRY4\n dfb #CARRY5\n dfb #CARRY6\n\nCARRYH dfb >CARRY0-$80\nDCARRYH dfb >CARRY0\n dfb >CARRY1\n dfb >CARRY2\n dfb >CARRY3\n dfb >CARRY4\n dfb >CARRY5\n dfb >CARRY6\n\nAMASKS dfb %10000000\n dfb %10000001\n dfb %10000011\n dfb %10000111\n dfb %10001111\n dfb %10011111\n dfb %10111111\n\nBMASKS dfb %11111111\n dfb %11111110\n dfb %11111100\n dfb %11111000\n dfb %11110000\n dfb %11100000\n dfb %11000000\n\nOPCODE dfb $31 ;and (oper),Y\n dfb $11 ;ora\n dfb $91 ;sta\n dfb $51 ;eor\n"
  },
  {
    "path": "04 Support/MakeDisk/DRAZ/MBLAST.S",
    "content": "* mblast\norg = $3000\n lst off\n*-------------------------------\n*\n*  M B L A S T\n*\n*  Blast music table to 18-sector disk\n*  in drive 1\n*\n*  Can be BRUN from Applesoft (ProDos or 3.3)\n*\n*  First BLOAD music table into main mem at TabStart\n*\n*-------------------------------\n org org\n\n jmp mblast\n\n*-------------------------------\nTrackNo = 19\nTabStart = $2000\nTablEnd = $2600\n\n*-------------------------------\nrw18buf = $3800\nendrwbuf = $4000\n\ntemp18buf = $4000\nrw18 = $d000\n\nfloppyslot = 6\nfloppydrive = 1\n\nBbundID = $a9\n\nslot = $fd\nztrack = $fe\n\n dum $300\nTABLEND ds 1 ;hi byte\nTABSTART ds 1 ;hi byte\nTRACK ds 1\n dend\n\n dum $f0\nobj_lo ds 1\nobj_hi ds 1\ndst_lo ds 1\ndst_hi ds 1\nlen_lo ds 1\nlen_hi ds 1\nflushflag ds 1\n dend\n\n*-------------------------------\n*\n*  M B L A S T\n*\n*-------------------------------\nmblast\n\n* move rw18 to l.c.\n\n sta $c083 ;read/write RAM\n\n lda #>rw18\n ldx #>rw18buf\n ldy #>endrwbuf\n\n jsr movemem\n\n* message\n\n jsr MSG\n\n* blast music\n\n lda #TrackNo\n sta TRACK\n\n lda #>TabStart\n sta TABSTART\n\n lda #>TablEnd\n sta TABLEND\n\n jsr blast18\n\n* Done\n\n jmp MSG2\n\n*-------------------------------\n*\n*  B L A S T  1 8\n*\n*  In: TABSTART, TABLEND, TRACK\n*\n*-------------------------------\nblast18 lda $c083\n lda $c083 ;enable RAM\n\n* set BbundID\n\n jsr rw18\n db 7,BbundID\n\n* turn on drive and delay .5 seconds\n\n ldx #floppyslot*16\n stx slot\n ldx #floppydrive\n stx drive\n\n jsr rw18\n db 0\ndrive db 2,5\n\n* seek first track\n\n lda TRACK\n sta track\n\n jsr rw18\n db 2,1\ntrack db 0\n\n* write out table (1-2 tracks)\n\n jsr wrtrack\n\n lda TABSTART\n clc\n adc #$12\n sta TABSTART\n\n lda TABLEND\n cmp TABSTART ;table longer than 18 sectors?\n bcc :done ;no\n\n lda TRACK\n clc\n adc #1\n sta ztrack\n jsr wrtrack ;yes--write out second track\n\n* turn off drive\n\n:done jsr rw18\n db 1\n\n* out of here!\n\n sta $c082\n\n rts\n\n*-------------------------------\nwrtrack ldy #0\n lda TABSTART\n sty obj_lo\n sta obj_hi\n\n lda #0\n sta dst_lo\n lda #0 ;offset\n clc\n adc #>temp18buf\n sta dst_hi\n\n lda #0\n sta len_lo ;1-sector chunks\n lda TABLEND\n sec\n sbc TABSTART\n clc\n adc #1\n sta len_hi\n cmp #$12\n bcc :ok ;fits on 1 track\n\n lda #$12\n sta len_hi ;write 1 track at a time\n\n:ok jsr rw18\n db $83,>temp18buf\n\n:loop ldy #0\n sty flushflag\n lda (obj_lo),y\n sta (dst_lo),y\n\n inc obj_lo\n bne :1\n inc obj_hi\n\n:1 inc dst_lo\n bne :2\n inc dst_hi\n\n:2 lda len_lo\n bne :3\n dec len_hi\n:3 dec len_lo\n\n lda dst_hi\n cmp #>temp18buf+$1200\n bne :4\n jsr flush?\n\n:4 lda len_lo\n ora len_hi\n bne :loop\n\n jsr flush?\n\n rts\n\n*-------------------------------\nflush? lda flushflag\n bne :nodata\n\n ldy #<temp18buf\n lda #>temp18buf\n sty dst_lo\n sta dst_hi\n jsr rw18\n db $c5,>temp18buf\n\n lda len_lo\n ora len_hi\n beq :nodata\n\n jsr rw18\n db $83,>temp18buf\n\n inc flushflag\n\n:nodata rts\n*-------------------------------\n dum $00\n\ndest ds 2\nsource ds 2\nendsourc ds 2\n\n dend\n*-------------------------------\nmovemem sta dest+1\n stx source+1\n sty endsourc+1\n\n ldy #0\n sty dest\n sty source\n sty endsourc\n\n:loop lda (source),y\n sta (dest),y\n\n iny\n bne :loop\n\n inc source+1\n inc dest+1\n\n lda source+1\n cmp endsourc+1\n bne :loop\n\n rts\n*-------------------------------\n dum $00\n\nbase ds 2\ntab ds 1\nline ds 1\ninverse ds 1\nbytenum ds 1\nmempage ds 1\noldpage ds 1\nstrptr ds 2\nxsave ds 1\nysave ds 1\nnextbytenum ds 1\ndirecptr ds 1\nztemp ds 1\n\n dend\n\neol = $8d ;string delimiter\n\n*-------------------------------\n* WAITLOOP\n*-------------------------------\nwaitloop\n sta $c010\n\n:loop lda $c000\n bpl :loop\n\n sta $c010\n\n rts\n\n*-------------------------------\n*  C R\n*-------------------------------\ncr\n lda #0\n sta tab\n\n inc line\n ldx line\n jmp bascalc\n\n*-------------------------------\n*\n*  P R L I N E\n*\n*  Print a line of normal text\n*\n*  In: A-X = string ptr\n*\n*-------------------------------\nprline\n sta strptr\n stx strptr+1\n:loop\n ldy #0\n lda (strptr),y\n cmp #eol\n beq :rts\n\n jsr prcharn\n\n inc strptr\n bne :loop\n inc strptr+1\n bne :loop\n\n:rts rts\n\n*-------------------------------\n*\n*  P R H E X B Y T E\n*\n*  Print a hex byte (in A)\n*\n*-------------------------------\nprhexbyte\n pha\n lsr\n lsr\n lsr\n lsr\n jsr prhexdig\n\n pla\n and #$0f\n jmp prhexdig\n\n*-------------------------------\n*\n*  P R H E X D I G\n*\n*  Print a hex digit (in A)\n*  Trashes X\n*\n*-------------------------------\nprhexdig\n tax\n lda hextoasc,x\n jmp prchar\n\n*-------------------------------\n*\n*  P R C H A R\n*\n*  Print an ASCII character (in A)\n*\n*-------------------------------\nprchar\n ldy tab\n and #%00111111\n ora inverse\n sta (base),y\n\n inc tab\n\n rts\n\nprcharn ;normal\n ldy tab\n sta (base),y\n\n inc tab\n\n rts\n\n*-------------------------------\n*\n*  H O M E\n*\n*-------------------------------\nhome\n jsr textcls\n\n lda #0\n sta tab\n\n ldx #0\n stx line\n\n jmp bascalc\n\n*-------------------------------\n*\n*  I N V E R S E / N O R M A L\n*\n*-------------------------------\nnormal\n lda #$80\n sta inverse\n rts\n\ninv\n lda #0\n sta inverse\n rts\n\ntoggle\n lda inverse\n eor #$80\n sta inverse\n rts\n\n*-------------------------------\n*\n*  S E T L I N E\n*\n*  In: X = line #\n*\n*-------------------------------\nsetline\n lda #0\n sta tab\n\n stx line\n\n*-------------------------------\n*\n*  B A S C A L C\n*\n*  In: X = line # (0-24)\n*\n*-------------------------------\nbascalc\n cpx #24\n bcs :rts\n\n lda textl,x\n sta base\n\n lda texth,x\n sta base+1\n\n:rts rts\n\n*-------------------------------\n*\n*  T E X T C L S\n*\n*  Clear text page 1 to black\n*\n*-------------------------------\ntextcls lda #$a0 ;space\n\ncls40 ldy #$f7\n:2 sta $400,y\n sta $500,y\n sta $600,y\n sta $700,y\n\n dey\n cpy #$7f\n bne :3\n\n ldy #$77\n:3 cpy #$ff\n bne :2\n\n rts\n\n*-------------------------------\n*\n*  M E S S A G E\n*\n*-------------------------------\nMSG\n jsr home\n jsr normal\n\n lda #msg\n ldx #>msg\n jsr prline\n\n jsr waitloop\n\n rts\n\nMSG2\n jsr home\n jsr normal\n\n lda #msg2\n ldx #>msg2\n jsr prline\n\n jsr waitloop\n\n*-------------------------------\n* 40-column text base addresses\n*-------------------------------\n\ntextl hex 00,80,00,80,00,80,00,80\n hex 28,a8,28,a8,28,a8,28,a8\n hex 50,d0,50,d0,50,d0,50,d0\n\ntexth hex 04,04,05,05,06,06,07,07\n hex 04,04,05,05,06,06,07,07\n hex 04,04,05,05,06,06,07,07\n\n*-------------------------------\n* Hex to ASCII\n*-------------------------------\n\nhextoasc asc \"0123456789ABCDEF\"\n\n*-------------------------------\n*\n*  S T R I N G   D A T A\n*\n*-------------------------------\nmsg asc \"Put game disk in drive 1 and hit a key\"\n db #eol\n\nmsg2 asc \"Hit control-reset to reboot\"\n db #eol\n\n*-------------------------------\n lst\neof ds 1\n lst off\n*-------------------------------\n sav mblast\n"
  },
  {
    "path": "04 Support/MakeDisk/EDSORC/BSUBS.S",
    "content": "* bsubs\norg = $7200\n lst off\n*-------------------------------\n*\n*  B U I L D E R   S U B S\n*\n*-------------------------------\n org org\n\n JMP DBLHGR\n JMP DBLDRAW\n JMP MOVEBLOK\n JMP SWSINGLE\n JMP SWDOUBLE\n\n jmp SPECIALK\n jmp BCALCBLUE\n jmp TOPEDGE\n jmp BOTEDGE\n jmp LEFTEDGE\n\n jmp RTEDGE\n jmp PRBLOKNO\n jmp PRSCRNUM\n jmp MENUSPECIAL\n jmp DRAWBETHSYM\n\n jmp INVBETHSYM\n jmp DRAWALLSYMB\n jmp STOREMENU\n jmp DoDblCls\n jmp DoDblLay\n\n jmp DoDblFast\n jmp DoDblSave\n jmp DoDblWipe\n jmp DoDblPrint\n jmp DoDblImseek\n\n jmp PAGEFLIP\n jmp INPUT\n jmp DBLPEEL\n jmp RETRIEVEMENU\n jmp MOVESTUFF\n\n jmp DoDblOra\n jmp COPYAUXSCRN\n jmp DRAWMENUSYM\n jmp UNINDEX\n jmp SUPERGUARDS\n\n jmp INITINPUT\n jmp DRAWFLASKNO\n jmp PRGDPROG\n\n*-------------------------------\n put eq\n  put buildereq\n put movedata\n\n*-------------------------------\n* Local vars\n\n dum locals\n\nrowno ds 1\nyindex ds 1\ncolno ds 1\nbitmask ds 1\ntemp ds 1\n\n dend\n\n*-------------------------------\n*  Key equates\n\nSHIFT = $20\nCTRL = $60\n\nkleft = \"h\"-CTRL\nkright = \"u\"-CTRL\nkup = \"k\"-CTRL\nkdown = \"j\"-CTRL\n\nkbtn0 = \" \"\nkbtn1 = RETURN\n\n*-------------------------------\narrow = 3\nblockn = 1\n\nbluediff = BLUETYPE-bLINDEX\n\n*-------------------------------\n* EDTABLE shapes\n\nibox1 = 1\niwipe = 4\nuparr = 5\ndnarr = 6\nlftarr = 7\nrtarr = 8\ndigits = 9\n\nkid = $13\neye = $14\nguard = $2d\n\nbethmask1 = $15\nbethmask2 = $16\n\nbethsyms hex 17,18,19,1a,1b,1c,1d,00\n hex 1e,1f,20,21,22,23,24,00\n hex 25,26,27,28,29,2a,2b,00\n\n*-------------------------------\n* initial states\n\ninitials db 0\n db 48*4 ;1: gate up\n db 0 ;2: gate down\n\n*------------------------------\n*\n*  D B L H G R\n*\n*  Clear both double hi-res pages and display page 2\n*  Also clear lo-res page 1\n*\n*-------------------------------\nDBLHGR\n STA $C00C ;80COL off\n STA $C000 ;80STORE off\n STA $C07E ;IOUDIS on\n\n lda #0\n JSR lrcls ;Clear lo-res page 1 to black\n\n LDA $C054 ;Page 1\n LDA $C052 ;MIXED off\n LDA $C056 ;HIRES off\n LDA $C050 ;TEXT off\n\n LDA #0\n STA PAGE\n\n jsr DoDblCls\n\n LDA $C057 ;HIRES on\n STA $C00D ;80COL on\n STA $C05E ;DHIRES on\n\n LDA #$20\n STA PAGE\n\n jsr DoDblCls ;Clear hires p.2\n\n jsr zeropeels ;zero peel buffers\n\n lda #0\n sta TOPCUT\n\n rts\n\n*-------------------------------\n*\n*  M O V E B L O C K\n*\n*  Move block (or pointer) from where it was 2 frames\n*  ago to where BLOCKX and BLOCKY say it is now\n*\n*-------------------------------\nMOVEBLOK\n jsr DBLPEEL ;peel off old block or pointer\n;(using peel buffer we set up 2 frames ago)\n\n jsr DZEROPEEL ;zero just-used peel buffer\n\n jsr DRAWPTR ;draw new block or pointer\n\n]rts rts\n\n*-------------------------------\n*\n*  D Z E R O P E E L\n*\n*  Zero peel buffer for whichever page we're on\n*\n*-------------------------------\nDZEROPEEL\n lda PAGE\n beq :page1\n\n lda #0\n sta peelX+maxpeel\n\n lda #dpeelbuf2\n sta PEELBUF\n lda #>dpeelbuf2\n sta PEELBUF+1\n rts\n\n:page1 sta peelX\n\n lda #dpeelbuf1\n sta PEELBUF\n lda #>dpeelbuf1\n sta PEELBUF+1\n rts\n\n*-------------------------------\n*\n*  D B L   D R A W   P T R\n*\n*  Draw block or pointer in current posn (BLOCKX,BLOCKY)\n*\n*-------------------------------\nDRAWPTR\n\n* \"AND\" blockmask\n\n LDA BLOCKX\n STA XCO\n LDA BLOCKX+1\n STA OFFSET\n\n LDA BLOCKY\n STA YCO\n\n LDA CURSOR ;1=block, 3=arrow\n CLC\n ADC #1 ;MASK\n STA IMAGE\n\n LDA #0\n STA OPACITY ;\"AND\"\n\n jsr dblsetup ;set up for dbllay\n\n* Save underlayer in peel buffer\n\n jsr DoDblSave\n\n jsr addpeel ;in grafix\n\n* Lay down image\n\n jsr DoDblLay\n\n* \"OR\" block\n\n LDA BLOCKX\n STA XCO\n LDA BLOCKX+1\n STA OFFSET\n\n LDA BLOCKY\n STA YCO\n\n LDA CURSOR\n STA IMAGE\n\n LDA #1\n STA OPACITY ;\"OR\"\n\n jsr DBLDRAW\n\n lda CURSOR\n cmp #1 ;block?\n bne ]rts\n\n LDA BLOCKX\n STA XCO\n LDA BLOCKX+1\n STA OFFSET\n LDA BLOCKY\n STA YCO\n\n jmp prblokno ;print block #\n\n*-------------------------------\n*\n*  D B L   P E E L\n*\n*  \"Peel off\" images laid down on this page\n*\n*-------------------------------\nDBLPEEL\n ldx PAGE\n beq :1\n ldx #maxpeel\n:1 stx :sm+1\n\n lda peelX,x ;# images in peel list\n beq :rts\n\n:loop pha\n\n clc\n:sm adc #0 ;0 or maxpeel\n tax\n\n lda peelIMGL,x\n sta IMAGE\n\n lda peelIMGH,x\n sta IMAGE+1\n\n lda peelX,x\n sta XCO\n\n lda peelY,x\n sta YCO\n\n lda #sta\n sta OPACITY\n\n jsr DoDblFast\n\n pla\n sec\n sbc #1\n bne :loop\n\n:rts\n]rts rts\n\n*-------------------------------\n*\n*  P R S C R N U M\n*\n*  print screen # in u.l. corner\n*  (single hi-res)\n*\n*-------------------------------\nPRSCRNUM\n lda shownums\n beq ]rts\n\n lda #10\n sta YCO\n lda #0\n sta XCO\n sta OFFSET\n\n ldx number ;1-MAXBLOX\n lda digit1,x\n jsr sprint\n\n ldx number\n lda digit2,x\n jmp sprint\n\n*-------------------------------\n* print guard prog # in lower left\n\nPRGDPROG\n lda #190\n sta YCO\n lda #0\n sta XCO\n sta OFFSET\n ldx number\n lda digit2,x\n jmp sprint\n\n*-------------------------------\n*\n*  S I N G L E   H R   P R I N T\n*\n*  Single hires print\n*  In: A = character (0-9 or space)\n*\n*-------------------------------\nsprint\n cmp #\" \"\n beq :rts\n sec\n sbc #\"0\"\n sta addr\n clc\n adc #digits\n sta IMAGE\n\n lda #0\n sta OPACITY\n jsr genmaskor\n\n ldx addr\n lda OFFSET ;advance cursor\n clc\n adc chrbits,x\n sta OFFSET\n:rts\n]rts rts\n\n*-------------------------------\n*\n*  P R I N T   B L O C K N O\n*\n*  print block # on face\n*  (double hi-res)\n*\n*-------------------------------\nPRBLOKNO\n lda shownums\n beq ]rts\n\n lda XCO\n clc\n adc #5\n sta charx\n\n lda OFFSET\n adc #0\n sta charx+1\n\n lda YCO\n clc\n adc #7\n sta chary\n\n jsr cvtx\n\n ldx number ;1-MAXBLOX\n lda digit1,x\n jsr print\n ldx number\n lda digit2,x\n jmp print\n\n*-------------------------------\ndigit2\n asc \"0123456789012345678901234\"\ndigit1\n asc \"          111111111122222\"\nchrbits\n db 6,4,6,6,6,6,6,6,6,6\n\n*-------------------------------\n*\n* D B L   S E T U P\n*\n* In: IMAGE (image #)\n* XCO/OFFSET (2-byte X-coord, 0-559)\n* YCO (0-191)\n* OPACITY (0-2)\n* (\"IXYO)\n*\n*-------------------------------\nDBLDRAW jsr dblsetup\n jmp DoDblLay\n\n*-------------------------------\ndblsetup\n lda #dblimage\n sta TABLE\n lda #>dblimage\n sta TABLE+1\n\n jsr DoDblImseek ;setup starting addr of img table\n jmp cvtx ;convert xco to byte & offset\n\n*-------------------------------\n*\n* S W   S I N G L E\n*\n* Switch from double to single hi-res\n*\n*-------------------------------\nSWSINGLE\n STA $C00C ;80COL off\n STA $C05F ;DHIRES off\n rts\n\n*-------------------------------\n*\n* S W  D O U B L E\n*\n* Switch from single to double hi-res\n*\n*-------------------------------\nSWDOUBLE\n STA $C00D ;80COL on\n STA $C05E ;DHIRES on\n]rts rts\n\n*-------------------------------\n*\n* S P E C I A L   K E Y S\n*\n* In: ASCII code in A-reg, hibit set\n*\n*-------------------------------\n\nctrl = $60\nshift = $20\n\nksoundsw = \"s\"\nknum = \"n\"\n\n* development section\n\nkrestart = \"r\"-ctrl\nkreboot = \"z\"-ctrl\n\n*-------------------------------\nSPECIALK\n lda keypress\n jsr debugkeys\n\n lda keypress\n\n cmp #krestart\n bne :0\n jmp restartbldr\n\n:0 cmp #kreboot\n bne :1\n\n  jsr saveblue ;to aux\n  jmp reboot\n\n:1\n*-------------------------------\n:cont\n cmp #ksoundsw-ctrl\n beq soundsw\n\n cmp #knum-ctrl\n beq numsw\n\n:2\n]rts rts\n\n*-------------------------------\nsoundsw ;lda sound\n;eor #$ff\n;sta sound\n jmp gtone\n\nnumsw lda shownums\n eor #1\n sta shownums\n lda #1\n sta setupflg\n]rts rts\n\n*-------------------------------\n* INIT INPUT\n\nINITINPUT\n\n lda $c010\n\n jsr setcenter\n\n jsr controller\n\n lda joyX\n beq :jok\n lda joyY\n beq :jok\n\n lda #0 ;If either jstk axis is centered,\n sta joyon ;assume a joystick is connected--\n;else default to kbd-only mode\n:jok lda #0\n sta jcount\n\n rts\n\n*-------------------------------\n*\n*  M E N U   S P E C I A L\n*\n*  Superimpose special stuff on b.g.\n*\n*  If this is menu screen, draw special symbols;\n*  if not, draw flask #s;\n*  if links are shown, draw beth rectangles\n*\n*-------------------------------\nMENUSPECIAL\n; lda inmenu\n; ora linkmode\n; beq ]rts ;neither special case\n lda SCRNUM\n jsr bcalcblue\n\n ldy #2 ;start at bottom\n\n:row sty rowno\n\n lda BlockBot+1,y\n sta loy\n\n lda Mult10,y\n sta yindex\n\n lda #0\n sta colno\n\n:loop asl\n asl\n sta XCO\n\n ldy yindex\n lda (bLinkIndex),y\n sta objspec\n\n lda (BlueType),y\n and #idmask\n sta objid\n\n jsr DRAWFLASKNO\n\n jsr DRAWALLSYMB\n\n lda inmenu\n beq :skip\n\n lda objspec\n beq :skip\n bmi :skip\n tax ;valid codes: 1-127\n\n lda loy\n sta YCO\n\n lda #0\n sta OPACITY ;don't mirror\n\n jsr DRAWMENUSYM\n:skip\n inc yindex\n inc colno\n\n lda colno\n cmp #10\n bcc :loop\n\n:nextln ldy rowno\n beq :done\n dey\n jmp :row\n\n:done rts\n\n*-------------------------------\n*\n* S U P E R   G U A R D S\n*\n* Superimpose guard figures on screen\n* for each square with secmask marked\n*\n*-------------------------------\nSUPERGUARDS\n lda SCRNUM\n jsr bcalcblue\n\n ldy #2 ;start at bottom\n\n:row sty rowno\n\n lda BlockBot+1,y\n sta loy\n\n lda Mult10,y\n sta yindex\n\n lda #0\n sta colno\n\n:loop asl\n asl\n sta XCO\n\n ldy yindex\n lda (BlueType),y\n and #secmask\n beq :skip\n\n lda loy\n sta YCO\n\n lda #0\n sta OPACITY ;don't mirror\n\n ldx #3 ;guard\n jsr DRAWMENUSYM\n:skip\n inc yindex\n inc colno\n\n lda colno\n cmp #10\n bcc :loop\n\n:nextln ldy rowno\n beq :done\n dey\n jmp :row\n\n:done rts\n\n*-------------------------------\n*\n*  B C A L C B L U E\n*\n*  In: A = screen # (1-24); NOT 0\n*\n*  Out: BlueType, BlueSpec, bLinkIndex\n*\n*-------------------------------\nBCALCBLUE\n jsr calcblue ;returns BlueType, BlueSpec\n\n* Now get bLinkIndex\n\n lda inmenu\n bne :calcmenu\n\n lda BlueType\n sec\n sbc #bluediff\n sta bLinkIndex\n\n lda BlueType+1\n sbc #>bluediff\n sta bLinkIndex+1\n\n rts\n\n:calcmenu\n lda #menubspec\n sta bLinkIndex\n\n lda #>menubspec\n sta bLinkIndex+1\n\n]rts rts\n\n]bug jmp gtone\n\n*-------------------------------\n* Draw flask # (if object is a flask)\n\nflaskbits hex 00,01,02,04,08,10,20,40\n\nDRAWFLASKNO\n lda objid\n cmp #flask\n bne ]rts\n\n lda linkmode\n bne ]rts\n lda inmenu\n bne ]rts\n\n lda (BlueSpec),y\n tax\n cpx #8\n bcs ]rts\n\n* Note--for convenience we'll use the beth routine\n\n lda #0\n sta linkbits\n sta linkbits+1\n\n lda flaskbits,x\n sta linkbits+2\n\n jmp drawallsymb1\n\n*-------------------------------\n*\n*  D R A W   A L L   S Y M B\n*\n*  Draw all symbols in a beth rectangle\n*\n*  In: XCO, YCO, objspec\n*\n*-------------------------------\nDRAWALLSYMB\n lda linkmode\n beq ]rts\n lda inmenu\n bne ]rts\n\n ldx objspec ;link index\n bmi ]rts ;ff=unlinkable object\n;index range is 0-127\n lda bLINK4,x\n bpl ]bug ;hibit should be set\n\n lda bLINK1,x\n sta linkbits\n lda bLINK2,x\n sta linkbits+1\n lda bLINK3,x\n sta linkbits+2\n\n* Three columns, L-R; take each one B-T\n\ndrawallsymb1\n lda #0\n sta bethx ;0-2\n;XCO already set\n:nextcol asl\n sta OFFSET ;0,2,4\n\n lda loy\n sta YCO\n\n lda #0\n sta bethy ;0-7\n\n lda #1\n:loop sta bitmask\n ldx bethx\n and linkbits,x\n beq  :nextsym\n\n jsr drawbethsym1\n\n:nextsym lda YCO\n sec\n sbc #8\n sta YCO\n\n inc bethy\n lda bitmask\n asl\n bne :loop ;cycle through all 8 bits\n\n inc XCO\n\n inc bethx\n lda bethx\n cmp #3\n bcc :nextcol\n\n:done lda #0\n sta OFFSET\n\n:rts rts\n\n*-------------------------------\n*\n*  D R A W   B E T H   S Y M\n*\n* Draw a symbol\n*\n* In: XCO/OFFSET, YCO, bethposn\n*\n* DRAWBETHSYM1: no layrsave\n*\n*-------------------------------\ndrawbethsym1\n jsr setupbmask\n jsr lay\n\n jmp drawbrest\n\nDRAWBETHSYM\n jsr setupbmask\n jsr layrsave\n jsr addpeel\n jsr lay\n\n jmp drawbrest\n\n*-------------------------------\nsetupbmask\n jsr seted\n\n* 1) AND mask1\n\n lda #bethmask1\n sta IMAGE\n\n lda #and\n sta OPACITY\n\n]rts rts\n\n*-------------------------------\ndrawbrest\n\n* 2) OR symbol\n\n jsr getbsym\n beq ]rts\n sta IMAGE\n\n lda #ora\n sta OPACITY\n\n jmp lay\n\n*-------------------------------\n*\n*  G E T   B E T H   S Y M\n*\n* in: bethx, bethy\n* out: A =symbol #\n*\n*-------------------------------\ngetbsym lda bethx\n asl\n asl\n asl ;x8\n clc\n adc bethy\n tax\n\n lda bethsyms,x\n rts\n\n*-------------------------------\n*\n*  I N V E R T   B E T H   S Y M\n*\n*-------------------------------\nINVBETHSYM\n jsr DRAWBETHSYM\n\n* (3) EOR mask2\n\n lda #bethmask2\n sta IMAGE\n\n lda #eor\n sta OPACITY\n\n jmp lay\n\n*-------------------------------\n*\n*  E D G E   A R R O W S\n*\n*-------------------------------\n*  IXYO: image,xco,offset,yco,[opacity]\n\nte db #uparr,19,3,7\nbe db #dnarr,19,3,191\nle db #lftarr,0,0,98\nre db #rtarr,39,0,98\n\nTOPEDGE lda #te\n ldx #>te\n bne drawej\n\nBOTEDGE lda #be\n ldx #>be\n bne drawej\n\nLEFTEDGE lda #le\n ldx #>le\n bne drawej\n\nRTEDGE lda #re\n ldx #>re\n\n*-------------------------------\n*\n*  D R A W   E J\n*\n*-------------------------------\ndrawej sta addr\n stx addr+1\n\n ldy #0\n lda (addr),y\n sta IMAGE\n\n iny\n lda (addr),y\n sta XCO\n\n iny\n lda (addr),y\n sta OFFSET\n\n iny\n lda (addr),y\n sta YCO\n\n* general mask-or  sequence\n\ngenmaskor\n jsr seted\n\n lda OPACITY\n and #$80 ;preserve hi bit\n pha\n\n ora #mask\n sta OPACITY\n jsr lay\n\n pla\n ora #ora\n sta OPACITY\n jmp lay\n\n*-------------------------------\nseted\n lda #0\n sta TOPCUT\n sta LEFTCUT\n lda #40\n sta RIGHTCUT\n lda #192\n sta BOTCUT\n\n lda #edtable\n sta TABLE\n lda #>edtable\n sta TABLE+1\n\n lda #2\n sta BANK\n rts\n*-------------------------------\n*\n*  D R A W   M E N U  S Y M\n*\n* draw menu symbol\n*\n* In: OPACITY (hi bit)\n*     XCO, YCO; x = symbol #\n* 1 = kid\n* 2 = eye\n* 3 = guard\n*\n*-------------------------------\nmsymi db 0,kid,eye,guard\nmsymx db 0,2,0,0\nmsymos db 0,4,0,2\nmsymy db 0,-10,-20,-10\n\nmsymxm db 0,5,0,7\nmsymosm db 0,0,0,4\n\nDRAWMENUSYM\n lda msymi,x\n sta IMAGE\n\n lda msymy,x\n clc\n adc YCO\n sta YCO\n\n lda OPACITY\n bmi :mirror\n\n lda msymos,x\n sta OFFSET\n\n lda msymx,x\n:1 clc\n adc XCO\n sta XCO\n\n jmp genmaskor\n\n:mirror\n lda msymosm,x\n sta OFFSET\n\n lda msymxm,x\n jmp :1\n\n*-------------------------------\n*\n*  S T O R E   M E N U\n*\n*  Draw menu screen #0 on page 2\n*  & store it in \"menuscrn\" buffer\n*  for fast retrieval later\n*\n*-------------------------------\nSTOREMENU\n lda PAGE\n pha\n lda SCRNUM\n pha\n\n jsr noneighs\n\n lda #$20\n sta PAGE\n\n lda #0\n sta SCRNUM\n\n lda #1\n sta inmenu\n\n jsr zeropeels\n jsr zerolsts\n jsr sure\n jsr drawall\n\n jsr menuspecial\n\n lda #0\n sta inmenu ;!\n;and store it\n lda #>menuscrn\n sta IMAGE+1\n lda #$40\n sta IMAGE\n jsr copy2000ma ;main to aux\n\n pla\n sta SCRNUM\n pla\n sta PAGE\n rts\n\n*-------------------------------\n*\n*  R E T R I E V E   M E N U\n*\n*  Copy onto both hires scrns\n*\n*-------------------------------\nRETRIEVEMENU\n lda #$20 ;page1\n jsr :copy\n\n lda #$40 ;page2\n:copy sta IMAGE+1\n\n lda #>menuscrn\n sta IMAGE\n\n jmp copy2000am ;aux to main\n\n*-------------------------------\n*\n*  D O   D B L   R O U T I N E S\n*\n*  Dblhires routines sit in aux l.c.\n*\n*-------------------------------\nDoDblCls\n jmp dblcls\n\nDoDblLay\n jmp dbllay\n\nDoDblFast\n jmp dblfast\n\nDoDblSave\n jmp dblsave\n\nDoDblWipe\n jmp dblwipe\n\nDoDblPrint\n jmp dblprint\n\nDoDblImseek\n jmp dblimseek\n\nDoDblOra\n jmp dblora\n\n*-------------------------------\n*\n*  P A G E F L I P\n*\n*-------------------------------\nPAGEFLIP\n lda PAGE\n bne :1\n\n lda #$20\n sta PAGE\n lda $C054 ;show page 1\n rts\n\n:1 lda #0\n sta PAGE\n lda $C055 ;show page 2\n rts\n\n*-------------------------------\n*\n*  M O V E S T U F F\n*\n*  Called from BUILDER\n*  Enter & exit w/ALTZP on\n*\n*-------------------------------\nMOVESTUFF\n\n* We need to copy HRTABLES from main l.c. to\n* aux l.c.--first copy it into loading area\n\n sta $c008 ;ALTZP off\n\n lda #$20\n ldx #$e0\n ldy #$ee\n jsr movemem\n\n sta $c009 ;ALTZP on\n\n* Now move stuff from loading area to aux l.c.\n* (MASTER couldn't do this from main l.c.)\n\n lda #$d0\n ldx #$40\n ldy #$50\n jsr movemem ;aux bank 2\n\n lda #$e0\n ldx #$20\n ldy #$40\n jmp movemem ;the rest\n\n*-------------------------------\n*\n*  I N P U T\n*\n*  Monitor keyboard and joystick for user commands\n*  and return command # in A (0 = nothing)\n*  Also return keypress, keydown\n*\n*-------------------------------\nINPUT\n lda $C000\n sta keypress\n\n lda $C010\n sta keydown\n\n lda keypress\n bpl :nocmd ;no key down\n\n jsr specialk first check for special keys\n\n* Keyboard control\n\n lda keypress\n\n cmp #kleft\n BNE :3\n lda #Cleft\n rts\n\n:3 CMP #kright\n BNE :4\n lda #Cright\n rts\n\n:4 CMP #kup\n BNE :5\n lda #Cup\n rts\n\n:5 CMP #kdown\n BNE :nomove\n lda #Cdown\n rts\n\n:nomove cmp #kbtn0\n bne :6\n lda #Cbtn0\n rts\n\n:6 cmp #kbtn1\n bne :7\n lda #Cbtn1\n rts\n\n:7\n:nocmd\n lda joyon ;joystick mode?\n bne joystick ;yes\n\n lda #0 ;no cmd\n]rts rts\n\n*-------------------------------\n*\n*  J O Y S T I C K\n*\n* Joystick input\n*\n*-------------------------------\njoystick\n jsr controller\n jsr buttons\n jsr getselect\n\n lda JSTKX\n bpl :1\n\n lda #1\n cmp jlast ;Same direction as last move?\n bne :jleft ;No--set timer & go ahead\n\n lda jcount ;Yes--is time up yet?\n beq :jleft1 ;Yes--go ahead\n dec jcount ;No--keep waiting\n lda #0\n rts\n\n:jleft jsr jmove ;set timer\n lda #Cleft\n rts\n\n:jleft1 jsr jrepeat ;set repeat timer\n lda #Cleft\n rts\n\n:1 beq :2\n\n lda #2 ;\"right\"\n cmp jlast\n bne :jright\n\n lda jcount\n beq :jright1\n dec jcount\n lda #0\n rts\n\n:jright jsr jmove\n lda #Cright\n rts\n\n:jright1 jsr jrepeat\n lda #Cright\n rts\n\n:2 lda JSTKY\n bpl :3\n\n lda #3\n cmp jlast\n bne :jup\n\n lda jcount\n beq :jup1\n dec jcount\n lda #0\n rts\n\n:jup jsr jmove\n lda #Cup\n rts\n\n:jup1 jsr jrepeat\n lda #Cup\n rts\n\n:3 beq :nomove\n\n lda #4\n cmp jlast\n bne :jdown\n\n lda jcount\n beq :jdown1\n dec jcount\n lda #0\n rts\n\n:jdown jsr jmove\n lda #Cdown\n rts\n\n:jdown1 jsr jrepeat\n lda #Cdown\n rts\n\n:nomove lda #0\n sta jlast\n\n lda BUTT0\n bpl :nobtn0\n\n lda #Cbtn0\n rts\n\n:nobtn0 lda BUTT1\n bpl :nobtn1\n\n lda #Cbtn1\n rts\n:nobtn1\n\n:nocmd lda #0\n rts\n\n*-------------------------------\n*\n* J M O V E\n*\n*-------------------------------\njmove sta jlast\n\n lda setupflg\n bne :done ;no delay (scroll's slow enough)\n\n lda CURSOR\n cmp #blockn\n beq :block ;slight delay\n\n:pointer lda #10\n bne :gotit\n\n:block lda #5\n\n:gotit sta jcount\n\n:done rts\n\n\njrepeat lda setupflg\n bne :done ;no delay\n\n lda CURSOR\n cmp #blockn\n beq :done\n\n lda #3\n sta jcount\n\n:done rts\n\n*-------------------------------\n* no neighbors (for menu)\n\nnoneighs\n lda #0\n sta scrnLeft\n sta scrnRight\n sta scrnAbove\n sta scrnBelow\n sta scrnAboveL\n sta scrnBelowL\n sta scrnAboveR\n sta scrnBelowR\n rts\n\n*-------------------------------\n*\n* C O P Y   A U X   S C R N\n*\n* Copy one aux hires page to the other\n*\n* In: PAGE = dest scrn (00/20)\n*\n*  (Use in conjunction with \"copyscrn\" in grafix\n*  to copy dblhires screen)\n*\n*-------------------------------\nCOPYAUXSCRN\n lda PAGE\n clc\n adc #$20\n sta IMAGE+1 ;dest addr\n\n eor #$60\n sta IMAGE ;org addr\n\n jmp copyaux2000\n\n\n*-------------------------------\n*\n*  C O P Y   A U X   2 0 0 0\n*\n*  Copy $2000 bytes within auxmem\n*\n*  In: IMAGE+1 = dest scrn, IMAGE = org scrn\n*      (use hi byte of actual memory address)\n*\n*-------------------------------\ncopyaux2000\n lda IMAGE+1\n sta :dst+2\n lda IMAGE\n sta :org+2\n\n ldx #$20\n\n ldy #0\n:loop\n:org lda $2000,y\n:dst sta $4000,y\n\n iny\n bne :loop\n\n inc :org+2\n inc :dst+2\n\n dex\n bne :loop\n\n]rts rts\n\n*-------------------------------\n*\n*  U N I N D E X\n*\n*  In: A = block index (0-29)\n*  Out: A = tempblockx, X = tempblocky\n*\n*-------------------------------\nUNINDEX\n ldx #0\n:loop cmp #10\n bcc ]rts\n sec\n sbc #10\n inx\n bne :loop\n;A = blockx, X = blocky\n]rts rts\n\n*-------------------------------\n lst\n ds 1\n usr $a9,23,$000,*-org\n lst off\n"
  },
  {
    "path": "04 Support/MakeDisk/EDSORC/BUILDER.S",
    "content": "* ed/builder\norg = $8400\n lst off\n*-------------------------------\n org org\n\n JMP COLDBUILD\n jmp WARMBUILD\n JMP RTNBUILD\n JMP MLEFT\n JMP MRIGHT\n\n JMP MDOWN\n JMP MUP\n JMP GETNEIGH\n jmp CALCMAT1\n jmp CLRLINKS\n\n jmp RESTARTBLDR\n\n*-------------------------------\n put eq\n put buildereq\n put movedata\n\n*-------------------------------\n* Constraints\n\nMAXBLOX = 24 ;max # of blocks per level\n\nXDIM = 32\nYDIM = 32 ;Matrix dimensions\n\n*-------------------------------\n* Screen display constants\n\nxoffset = 0\n\nSTULX = 9 ;Starting position of screen u.l.\nSTULY = 12 ;(in matrix)\n\nSTPTRX = 6 ;Starting posn of pointer\nSTPTRY = 2 ;(on screen)\n\nSTMATX = STULX+STPTRX\nSTMATY = STULY+STPTRY\n\nSTBLOKX = STMATX\nSTBLOKY = STMATY+1 ;postion of starter block\n\nDX = 40\nDY = 12\n\nPOPY = 5\nPOPX = 4*POPY\n\nARPX = 30\nARPY = 7\n\nSCANHT = 16\nSCANWID = 15 ;dimensions of screen grid\n\nLLX = POPX-DX+xoffset\nLLY = POPY-DY+195 ;coords of lower-leftmost visible block\n\nSTX = STPTRX*DX-POPX+ARPX+LLX\nSTY = STPTRY-SCANHT+1*DY+POPY+ARPY+LLY\n\nscrntop = 20\nbarby = 7\n\ntopmosty = -SCANHT+2*DY+LLY+POPY\n\n\n* Limits of pointer/block posn on screen\n\nLEFTEJ = 1\nRIGHTEJ = 13\nTOPEJ = 1 ;menu bar threshold\nBOTTOMEJ = 13\n\n\n* Limits of screen u.l. posn in matrix\n\nminulx = -1\nmaxulx = XDIM-RIGHTEJ-1\nminuly = -1\nmaxuly = YDIM-BOTTOMEJ-1\n\n\n* Menu bar data\n\nplayx = 0\nloadx = 120\nsavex = loadx+76\ndeletex = savex+76\nclearx = deletex+92\ntrashx = 500\n\nbtnimg dfb 14,15,16,17,18,1\nbtnxl dfb playx,loadx,savex,deletex,clearx,trashx\nbtnxh dfb >playx,>loadx,>savex,>deletex,>clearx,>trashx\nbtny dfb 1,1,1,1,1,0\nnumbtns = btnxh-btnxl-1\n\nc = 28\nbarlistl dfb playx+c,loadx+c,savex+c,deletex+c\n dfb clearx+c,trashx+10\nbarlisth dfb >playx+c,>loadx+c,>savex+c,>deletex+c\n dfb >clearx+c,>trashx+10\nmenulen = barlisth-barlistl-1\n\nbtnxlist dfb 0,0,1,1,2,2,3,3,4,4,4,5,5\nptrxlist dfb 1,4,6,8,10,13\n\n*-------------------------------\narrow = 3\nbblock = 1\n\n*-------------------------------\n* Special keys (development)\n\nSHIFT = $20\nCTRL = $60\n\nkcopy = \"c\"\nkdelblock = \"d\"\n\nkcreateGD1 = \"$\"\nkcreateGD2 = \"@\"\nkcreateMD = \"!\"\nkcreateDD = \"#\"\nksavegame1 = \"g\"-CTRL\nksavegame2 = \"f\"-CTRL\nkdelgame = \"d\"-CTRL\n\nkrelink = \"l\"-CTRL\n\n*-------------------------------\nPOPside1 = $a9\nPOPside2 = $ad\n\n*-------------------------------\n*\n*  C O L D   B U I L D\n*\n*  Coldstart builder\n*\n*-------------------------------\nCOLDBUILD\n sta $c009\n\n jsr movestuff\n\n jsr initbuilder\n\n jsr STARTCLR ;clear matrix\n\n jmp STARTBUILDER\n\n*-------------------------------\n* Restart builder\n\nRESTARTBLDR\n sta $c009\n\n jsr initbuilder\n\n jsr STARTCLR\n\n jmp STARTBUILDER\n\n*-------------------------------\n*\n*  W A R M B U I L D\n*\n*  Return to builder from game\n*  Like coldstart but leave matrix & blueprint intact\n*\n*-------------------------------\nWARMBUILD\n sta $c009\n\n jsr movestuff\n\n jsr initbuilder\n\n jsr reloadblue ;from backup copy in aux l.c.\n jsr reloadbinfo\n\n jsr reconstruct ;matrix from blueprint\n\n jmp STARTBUILDER\n\n*-------------------------------\ninitbuilder\n\n lda #1\n sta virgin ;nonzero\n sta menuflg\n sta shownums\n sta inbuilder\n;sta sound\n\n jsr dblhgr\n\n jsr setfastmain ;bgtable in mainmem\n\n jsr initgetlnbuf\n\n lda #0\n sta level\n sta ineditor\n sta inmenu\n\n rts\n\n*-------------------------------\nSTARTBUILDER\n jsr initinput\n\n jsr CTRPTR\n\n jsr SETUP\n\n jmp CYCLE\n\n*-------------------------------\n*\n*  C Y C L E\n*\n*-------------------------------\nCYCLE\n jsr input ;get joystick/kbd input\n;(return command in A, 0 = none)\n jsr act ;& act on it\n\n jsr spkeys ;development keys\n\n lda setupflg ;redraw entire scrn?\n beq :1 ;no\n\n jsr SETUP\n\n jmp CYCLE\n\n:1 jsr moveblok\n\n jsr pageflip\n\n jmp CYCLE\n\n*-------------------------------\n*\n*  S T A R T C L E A R\n*\n*  Start with clear matrix\n*\n*-------------------------------\nSTARTCLR\n lda #0 ;set character start posn:\n\n ldx #64\n:loop sta INFO,x\n inx\n cpx #70\n bcc :loop ;zero misc. INFO (kid, key, etc.)\n\n jsr STARTCL1 ;clear matrix\n\n jsr CLRLINKS ;zero link tables\n\n ldx #STBLOKX\n ldy #STBLOKY\n jsr :putblock\n\n ldx #STBLOKX+1\n ldy #STBLOKY\n jsr :putblock\n\n ldx #STBLOKX\n ldy #STBLOKY+1\n jsr :putblock\n\n ldx #STBLOKX+1\n ldy #STBLOKY+1\n\n:putblock\n stx MATX\n sty MATY\n jsr CALCMAT\n\n lda NUMNEXT\n ldy #0\n sta (ZTEMP),Y ;One block on screen\n sta SCRNUM\n\n tax\n lda MATX ;init blueprint room loc list\n sta INFO,x\n lda MATY\n sta INFO+MAXBLOX,x\n\n inc NUMNEXT\n\n jmp clrblock\n\nSTARTCL1\n JSR CLEARMAT\n\n LDA #1\n STA NUMNEXT ;# (1-MAXBLOX) of next block to be drawn\n\n LDA #STULX\n STA ULX\n LDA #STULY\n STA ULY\n\n rts\n\n*-------------------------------\n*\n*  I N I T   I N P U T\n*\n*-------------------------------\n;initinput\n lda $c010\n\n jsr setcenter\n\n jsr controller\n\n lda joyX\n beq :jok\n lda joyY\n beq :jok\n\n lda #0 ;If either jstk axis is centered,\n sta joyon ;assume a joystick is connected--\n;else default to kbd-only mode\n:jok lda #0\n sta jcount\n\n rts\n\n*-------------------------------\n*\n* C T R P T R\n*\n* Center pointer\n*\n*-------------------------------\nCTRPTR LDA #arrow\n STA CURSOR\n STA savecurs\n\n LDA #STMATX\n STA MATX\n LDA #STMATY\n STA MATY\n\n LDA #STPTRX\n STA PTRX\n LDA #STPTRY\n STA PTRY\n\n LDA #STX\n STA BLOCKX\n LDA #/STX\n STA BLOCKX+1\n\n LDA #STY\n STA BLOCKY\n\n lda #0\n sta menuflg\n\n]rts rts\n\n*-------------------------------\n*\n*  S P E C I A L   K E Y S\n*\n*-------------------------------\nspkeys\n lda keypress\n bpl ]rts\n\n cmp #kcopy\n beq :copy\n cmp #kcopy-SHIFT\n bne :notc\n\n:copy jmp COPY\n\n:notc cmp #kdelblock\n beq :delblock\n cmp #kdelblock-SHIFT\n bne :notd\n:delblock ;not operational yet\n rts\n\n:notd\n cmp #kcreateDD\n bne :11\n jsr setdatadisk\n:cd lda #5 ;create blank directory\n jmp dodialog\n\n:11 cmp #kcreateMD\n bne :11a\n jsr setmasterdisk\n jmp :cd\n\n:11a cmp #kcreateGD1\n bne :11b\n jsr setgamedisk1\n jmp :cd\n\n:11b cmp #kcreateGD2\n bne :2\n jsr setgamedisk2\n lda #POPside2\n sta BBundID\n jsr :cd\n lda #POPside1\n sta BBundID\n rts\n\n:2 cmp #ksavegame1\n bne :2a\n jmp bsavegame1\n\n:2a cmp #ksavegame2\n bne :3\n jmp bsavegame2\n\n:3 cmp #kdelgame\n bne :4\n jmp bdelgame\n\n:4 cmp #krelink\n bne :5\n jmp relink\n\n:5\n:rts\n]rts rts\n\n*-------------------------------\n*\n*  B S A V E  G A M E\n*\n* save level -- game portion only\n*\n*-------------------------------\nbsavegame1\n jsr setgamedisk1\n lda #POPside1\n]bsg sta BBundID\n\n lda #$20\n sta PAGE\n lda $C054 ;show page 1\n\n jsr setsetup\n\n lda #2\n jsr dodialog\n\n cpx #$ff\n beq :done\n stx level\n\n jsr makeblue\n jsr writedir\n jsr dsavelevelg\n\n:done lda #POPside1 ;for master & data disks\n sta BBundID\n rts\n\nbsavegame2\n jsr setgamedisk2\n lda #POPside2\n jmp ]bsg\n\n*-------------------------------\n*\n*  Delete a file from game disk side 2\n*\n*-------------------------------\nbdelgame\n lda #POPside2\n sta BBundID\n\n lda #3\n jsr dodialog\n\n lda #POPside1\n sta BBundID\n rts\n\n*-------------------------------\n*\n*  A C T   O N   I N P U T\n*\n*  In: A = command (0 = none)\n*\n*-------------------------------\nact\n cmp #0\n beq :rts\n\n cmp #Cleft\n BNE :3\n JMP MLEFT\n\n:3 cmp #Cright\n BNE :4\n JMP MRIGHT\n\n:4 CMP #Cup\n BNE :5\n JMP MUP\n\n:5 CMP #Cdown\n BNE :nomove\n JMP MDOWN\n\n:nomove cmp #Cbtn0\n bne :6\n\n lda menuflg\n bne menufn\n\n JMP PULLPUSH\n\n:6 cmp #Cbtn1\n bne :7\n\n lda menuflg\n bne menufn\n\n jmp ZOOM\n\n:7\n:rts rts\n\n*-------------------------------\n* reconstruct matrix from blueprint\n\nreconstruct\n jsr STARTCL1\n jsr CTRPTR\n jmp readblue\n\n*-------------------------------\n*\n*  M E N U F N\n*\n* Menu bar functions\n*\n*-------------------------------\nmenufn lda menuindx\n\n cmp #5\n bne :1 ;trashcan\n\n]TrashButton\n\n jmp TRASH\n\n:1 cmp #3 ;delete\n bne :6\n\n]DeleteButton\n\n lda #3\n jmp dodialog\n\n:6 cmp #4 ;clear\n bne :2\n\n]ClearButton\n\n jsr setsetup\n\n lda #4\n jsr dodialog\n cpx #$ff\n beq :rts\n\n JSR STARTCLR\n JSR CTRPTR\n\n JMP SETUP\n\n:2 cmp #1 ;load\n bne :3\n\n]LoadButton\n jsr setsetup\n\n lda #1\n jsr dodialog\n\n cpx #$ff\n beq :rts\n stx level\n\n jsr dloadlevel\n\n jsr reconstruct ;matrix from blueprint\n\n jmp SETUP\n\n:3 cmp #2 ;save\n bne :4\n\n]SaveButton\n\n* Note--save routine uses aux hires 1 for scratch\n* so do dialog on page 2\n\n lda #$20\n sta PAGE\n lda $C054 ;show page 1\n\n jsr setsetup\n\n jsr setmasterdisk ;data disk will do too\n\n lda #2\n jsr dodialog\n\n cpx #$ff\n beq :rts\n stx level\n\n jsr makeblue\n jsr writedir\n jsr dsavelevel\n\n jmp SETUP\n\n:4 cmp #0 ;play\n bne :5\n\n]PlayButton\n\n jmp goplay\n\n:5\n:rts rts\n\n*-------------------------------\n*\n*  M O V E   B L O C K\n*\n*-------------------------------\nMLEFT lda menuflg\n bne menuleft\n\n lda PTRX\n cmp #LEFTEJ\n bne :cont\n\n jsr scrright\n jmp setsetup\n\n:cont DEC PTRX\n DEC MATX\n\n LDA BLOCKX\n SEC\n SBC #DX\n STA BLOCKX\n BCS :1\n DEC BLOCKX+1\n\n:1 rts\n\n\nmenuleft ldx menuindx\n beq menuxset\n\n dex\n stx menuindx\n\nmenuxset lda barlistl,x\n sta BLOCKX\n lda barlisth,x\n sta BLOCKX+1\n\n rts\n\n*-------------------------------\nMRIGHT lda menuflg\n bne mnuright\n\n lda PTRX\n cmp #RIGHTEJ\n bcc :cont\n\n jsr scrleft\n jmp setsetup\n\n:cont INC PTRX\n INC MATX\n\n LDA BLOCKX\n CLC\n ADC #DX\n STA BLOCKX\n BCC :1\n INC BLOCKX+1\n\n:1 RTS\n\nmnuright ldx menuindx\n cpx #menulen\n bcs :no\n\n inx\n stx menuindx\n\n:no jmp menuxset\n\n*-------------------------------\nMDOWN\n lda ineditor\n bne :normal\n\n lda PTRY\n cmp #TOPEJ-1\n bne :normal\n\n jsr exitmenu\n\n jmp :finish\n\n:normal lda PTRY\n cmp #BOTTOMEJ\n bcc :cont\n\n jsr scrup\n jmp setsetup\n\n:cont LDA BLOCKY\n CLC\n ADC #DY\n STA BLOCKY\n\n:finish inc PTRY\n inc MATY\n\n RTS\n\n*-------------------------------\nMUP lda ineditor\n bne :normal\n\n lda PTRY\n cmp #TOPEJ\n bne :normal\n\n jsr entrmenu\n\n jmp :finish\n\n:normal lda PTRY\n cmp #TOPEJ+1\n bcs :cont\n\n jsr scrdown\n jmp setsetup\n\n:cont LDA BLOCKY\n SEC\n SBC #DY\n STA BLOCKY\n\n:finish DEC PTRY\n DEC MATY\n\n RTS\n\n*-------------------------------\n*\n*  S C R O L L\n*\n*-------------------------------\nscrright\n lda ULX\n cmp #minulx\n beq no\n\n dec ULX\n dec MATX\n rts\n\nscrleft\n lda ULX\n cmp #maxulx\n beq no\n\n inc ULX\n inc MATX\n rts\n\nscrup\n lda ULY\n cmp #maxuly\n beq no\n\n inc ULY\n inc MATY\n rts\n\nscrdown\n lda ULY\n cmp #minuly\n beq no\n\n dec ULY\n dec MATY\nno rts\n\n*-------------------------------\nsetsetup ldx #1\n stx setupflg\n rts\n\nclrptr jsr dblpeel\n jsr pageflip\n jmp dblpeel ;remove ptr from both pages\n\n*-------------------------------\n*\n* T R A S H\n*\n*-------------------------------\nTRASH lda savecurs\n cmp #arrow\n bne :cont\n:rts rts\n\n:cont lda NUMNEXT\n cmp #3\n bcc :rts ;last block can't be deleted\n\n lda #arrow\n sta savecurs\n lda saveby\n clc\n adc #ARPY\n sta saveby ;enter as block--leave as arrow\n\n* Erase block #BLOCKNUM from matrix & INFO list\n\n lda MATX\n pha\n lda MATY\n pha\n\n ldx BLOCKNUM\n lda INFO,x\n sta MATX\n lda INFO+MAXBLOX,x\n sta MATY\n jsr CALCMAT\n\n ldy #0\n lda #0 ;empty-space code\n sta (ZTEMP),y ;to matrix\n\n lda #255 ;nonexistent-block code\n sta INFO,x ;x=BLOCKNUM\n sta INFO+MAXBLOX,x\n\n* If the block we just trashed was the latest entry,\n* decrement NUMNEXT to replace it; else wait till\n* we run out of new block #s, then go back & look for gaps\n\n lda NUMNEXT\n sec\n sbc #1\n cmp BLOCKNUM\n bne :later\n sta NUMNEXT\n\n:later pla\n sta MATY\n pla\n sta MATX\n\n:done jmp gtone ;\"ok--it's done\"\n\n*-------------------------------\n*\n* E N T E R M E N U\n*\n*-------------------------------\nentrmenu lda #1\n sta menuflg\n\n lda CURSOR\n sta savecurs\n lda BLOCKY\n sta saveby\n\n lda #arrow\n sta CURSOR ;Force cursor to arrow\n lda #barby\n sta BLOCKY\n\n* Move ptr to nearest button\n\n ldy PTRX\n ldx btnxlist-1,y\n stx menuindx\n jmp menuxset\n\n*-------------------------------\n*\n* E X I T M E N U\n*\n*-------------------------------\nexitmenu lda #0\n sta menuflg\n\n lda savecurs ;Exiting menu bar\n sta CURSOR ;Return cursor to prior state\n\n lda saveby\n sta BLOCKY\n\n ldx menuindx\n lda ptrxlist,x\n sta PTRX\n\n clc\n adc ULX\n sta MATX\n\n lda #xoffset\n sta BLOCKX\n lda #0\n sta BLOCKX+1\n\n ldx PTRX\n\n:loop dex\n beq :gotit\n\n lda BLOCKX\n clc\n adc #DX\n sta BLOCKX\n\n lda BLOCKX+1\n adc #0\n sta BLOCKX+1\n\n bpl :loop\n\n:gotit lda CURSOR\n cmp #arrow\n bne :ok\n\n lda BLOCKX\n clc\n adc #ARPX\n sta BLOCKX\n\n lda BLOCKX+1\n adc #0\n sta BLOCKX+1\n\n:ok rts\n\n*-------------------------------\n*\n* C O P Y\n*\n*-------------------------------\nCOPY lda CURSOR\n cmp #arrow\n beq :ptr\n:rts rts\n\n:ptr jsr CALCMAT1\n ldy #0\n lda (MATPTR),y\n beq :rts ;no block here\n\n jsr bcalcblue\n lda BlueType\n sta ZTEMP\n lda BlueType+1\n sta ZTEMP+1 ;ZTEMP: source block\n\n lda BlueSpec\n sta ZTEMP+2\n lda BlueSpec+1\n sta ZTEMP+3\n\n jsr NEWBLOK ;clrblock sets BlueType,BlueSpec\n bmi :rts ;not OK\n\n jmp copyblok\n\n*-------------------------------\ncopyblok ldy #29\n\n:loop lda (ZTEMP),y\n sta (BlueType),y\n\n lda (ZTEMP+2),y\n sta (BlueSpec),y\n dey\n bpl :loop\n rts\n\n*-------------------------------\n*\n* P U L L / P U S H\n*\n*-------------------------------\nPULLPUSH LDA CURSOR\n CMP #arrow\n beq :ptr\n jmp PUSH ;Push block in\n\n:ptr JSR CALCMAT1\n\n LDY #0\n LDA (MATPTR),Y\n BEQ :new ;No block here--make a new one\n\n STA BLOCKNUM\n sta number\n JMP PULL ;Pull out block\n\n:new jsr NEWBLOK\n bpl PUSH\n rts  ;Not OK\n\n*-------------------------------\n*\n* P U S H\n*\n* Push block into place\n*\n*-------------------------------\nPUSH JSR CALCMAT1\n\n LDY #0\n LDA (MATPTR),Y\n BEQ :11\n\n RTS ;There's a block here already\n\n:11 LDA BLOCKNUM\n STA (MATPTR),Y\n\n tax\n lda MATX\n sta INFO,x\n lda MATY\n sta INFO+MAXBLOX,x\n\n LDA BLOCKX\n STA TEMP\n CLC\n ADC #POPX\n STA BLACKX\n\n LDA BLOCKX+1\n STA TEMP+1\n ADC #0\n STA BLACKX+1\n\n LDA BLOCKY\n STA TEMP+2\n SEC\n SBC #POPY\n STA BLACKY\n\n LDA #POPY\n STA TEMP+3\n\n:1 LDA BLOCKX\n CLC\n ADC #4\n STA BLOCKX\n LDA BLOCKX+1\n ADC #0\n STA BLOCKX+1\n\n LDA BLOCKY\n SEC\n SBC #1\n STA BLOCKY\n\n jsr pushsub\n\n DEC TEMP+3\n BNE :1\n\n jsr pushsub\n\n* Change cursor from block to pointer\n\n jsr zeropeels\n\n LDA #arrow\n STA CURSOR\n\n LDA TEMP\n CLC\n ADC #ARPX\n STA BLOCKX\n\n LDA TEMP+1\n ADC #0\n STA BLOCKX+1\n\n LDA TEMP+2\n CLC\n ADC #ARPY\n STA BLOCKY\n\n RTS\n\n*-------------------------------\npushsub\n JSR moveblok\n JSR RESTORUR\n jmp pageflip\n\n*-------------------------------\n*\n*  R E S T O R U R\n*\n* Restore neighboring blocks to U, R, and UR\n*\n*-------------------------------\nRESTORUR lda menuflg\n beq :cont\n jmp :rts\n\n* Block above (U)?\n\n:cont LDX #0\n LDY #-1\n JSR GETNEIGH\n BEQ :10\n sta number\n\n* AND UMASK / ORA U\n\n LDA #8\n STA IMAGE\n LDA BLACKX\n STA XCO\n LDA BLACKX+1\n STA OFFSET\n LDA BLACKY\n STA YCO\n LDA #0\n STA OPACITY\n JSR dbldraw\n\n LDA #5\n STA IMAGE\n LDA BLACKX\n STA XCO\n LDA BLACKX+1\n STA OFFSET\n LDA BLACKY\n STA YCO\n LDA #1\n STA OPACITY\n JSR dbldraw\n\n* print block#\n\n LDA BLACKX\n STA XCO\n LDA BLACKX+1\n STA OFFSET\n LDA BLACKY\n sec\n sbc #DY\n STA YCO\n jsr prblokno\n\n* Block to right (R)?\n\n:10 LDX #1\n LDY #0\n JSR GETNEIGH\n BEQ :11\n sta number\n\n* AND RMASK / ORA R\n\n LDA #0\n STA OPACITY\n LDA #9\n JSR XPL5\n\n LDA #1\n STA OPACITY\n LDA #6\n JSR XPL5\n\n* print block#\n\n LDA BLACKX\n clc\n adc #DX\n STA XCO\n LDA BLACKX+1\n adc #>DX\n STA OFFSET\n LDA BLACKY\n STA YCO\n jsr prblokno\n\n* Block to upper right (UR)?\n\n:11 LDX #1\n LDY #-1\n JSR GETNEIGH\n BEQ :12\n sta number\n\n* AND URMASK / ORA UR\n\n LDA #0\n STA OPACITY\n LDA #10\n JSR XPL5\n\n LDA #1\n STA OPACITY\n LDA #7\n JSR XPL5\n\n* print block#\n\n LDA BLACKX\n clc\n adc #DX\n STA XCO\n LDA BLACKX+1\n adc #>DX\n STA OFFSET\n LDA BLACKY\n sec\n sbc #DY\n STA YCO\n jsr prblokno\n\n:12 lda BLOCKNUM\n sta number\n:rts rts\n\n*-------------------------------\n*\n* P U L L\n*\n* Pull block out\n*\n*-------------------------------\nPULL LDA #0\n STA (MATPTR),Y\n\n JSR dblpeel\n JSR pageflip\n JSR dblpeel\n\n jsr zeropeels\n\n LDA #bblock\n STA CURSOR\n\n LDA BLOCKX\n SEC\n SBC #ARPX\n STA TEMP\n\n LDA BLOCKX+1\n SBC #0\n STA TEMP+1\n\n LDA BLOCKY\n SEC\n SBC #ARPY\n STA TEMP+2 ;TEMP is where block's going to end up\n\n LDA TEMP\n CLC\n ADC #POPX\n STA BLOCKX\n STA BLACKX\n\n LDA TEMP+1\n ADC #0\n STA BLOCKX+1\n STA BLACKX+1\n\n LDA TEMP+2\n SEC\n SBC #POPY\n STA BLOCKY ;BLOCKX-Y is where block's sitting now\n STA BLACKY\n\n jsr animpull\n\n:no rts\n\n*-------------------------------\n*\n* A N I M P U L L\n*\n*-------------------------------\nanimpull JSR ERASEBLOK\n\n jsr moveblok\n jsr RESTORUR\n jsr pageflip\n\n jsr ERASEBLOK\n\n LDA #POPY\n STA TEMP+3 ;Counter\n\n:1 LDA BLOCKX\n SEC\n SBC #4\n STA BLOCKX\n\n LDA BLOCKX+1\n SBC #0\n STA BLOCKX+1\n\n INC BLOCKY\n\n jsr moveblok\n jsr RESTORUR\n jsr pageflip\n\n DEC TEMP+3\n BNE :1\n\n jsr moveblok\n jsr RESTORUR\n\n* Change cursor from pointer to block\n\n LDA TEMP\n STA BLOCKX\n LDA TEMP+1\n STA BLOCKX+1\n LDA TEMP+2\n STA BLOCKY\n\n RTS\n\n*-------------------------------\n*\n* E R A S E B L O K\n*\n*-------------------------------\nERASEBLOK\n LDA #2\n STA IMAGE\n LDA BLOCKX\n STA XCO\n LDA BLOCKX+1\n STA OFFSET\n LDA BLOCKY\n STA YCO\n LDA #0\n STA OPACITY\n JSR dbldraw ;Erase existing block (\"AND\" BLOCKMASK)\n\n lda menuflg\n bne :1\n\n JSR RESTORDL\n\n JSR RESTORUR\n\n:1 RTS\n\n*-------------------------------\n*\n* R E S T O R D L\n*\n*-------------------------------\nRESTORDL LDX #-1\n LDY #1\n JSR GETNEIGH\n BEQ :10\n\n* ORA DL\n\n:15 LDA #11\n STA IMAGE\n LDA BLACKX\n STA XCO\n LDA BLACKX+1\n STA OFFSET\n LDA BLACKY\n CLC\n ADC #12\n STA YCO\n LDA #1\n STA OPACITY\n JSR dbldraw\n\n:10 LDX #-1\n LDY #0\n JSR GETNEIGH\n BEQ :11\n\n* AND LMASK / ORA L\n\n LDA #19\n STA IMAGE\n LDA BLACKX\n STA XCO\n LDA BLACKX+1\n STA OFFSET\n LDA BLACKY\n STA YCO\n LDA #0\n STA OPACITY\n JSR dbldraw\n\n LDA #12\n STA IMAGE\n LDA BLACKX\n STA XCO\n LDA BLACKX+1\n STA OFFSET\n LDA BLACKY\n STA YCO\n LDA #1\n STA OPACITY\n JSR dbldraw\n\n:11 LDX #0\n LDY #1\n JSR GETNEIGH\n BEQ :12\n\n* ORA D\n\n LDA #13\n STA IMAGE\n LDA BLACKX\n STA XCO\n LDA BLACKX+1\n STA OFFSET\n LDA BLACKY\n CLC\n ADC #12\n STA YCO\n LDA #1\n STA OPACITY\n JSR dbldraw\n\n:12 RTS\n\nzerobuf rts\n do 0\nzerobuf ldx BUFFLAG\n inx\n lda BUFADL,X\n sta IMAGE\n lda BUFADH,X\n sta IMAGE+1\n lda #0\n tay\n sta (IMAGE),y\n rts\n fin\n\n*-------------------------------\n*\n* G E T N E I G H\n*\n* Given: DX & DY (in X & Y)\n* Return: Contents of neighboring space (in A)\n*\n*-------------------------------\nGETNEIGH LDA MATX\n PHA\n LDA MATY\n PHA\n\n TXA\n CLC\n ADC MATX\n STA MATX\n bmi :no\n cmp #XDIM\n bcs :no\n\n TYA\n CLC\n ADC MATY\n STA MATY\n bmi :no\n cmp #YDIM\n bcs :no\n\n JSR CALCMAT\n\n LDY #0\n LDA (ZTEMP),Y\n tax\n\n:done pla\n sta MATY\n pla\n sta MATX\n\n txa\n rts\n\n:no ldx #0\n beq :done\n\n*-------------------------------\n*\n* C L E A R M A T\n*\n* Clear matrix (32 x 32)\n*\n*-------------------------------\nCLEARMAT LDA #MATBASE\n STA ZTEMP\n LDA #/MATBASE\n STA ZTEMP+1\n\n LDA #0\n LDY #0\n:1 STA (ZTEMP),Y\n INC ZTEMP\n BNE :1\n INC ZTEMP+1\n LDX ZTEMP+1\n CPX #/ENDMAT\n BCC :1\n\n RTS\n\n*-------------------------------\n*\n* D R A W M A T\n*\n* Put a visual depiction of matrix onscreen\n*\n* Matrix dimensions: XDIM x YDIM\n* Grid dimensions: SCANWID x SCANHT\n* Matrix coords of grid's upper-leftmost block: (ULX,ULY)\n* Screen coords of grid's lower-leftmost block: (LLX,LLY)\n*\n*-------------------------------\nDRAWMAT LDA MATX\n PHA\n LDA MATY\n PHA\n LDA BLOCKX\n PHA\n LDA BLOCKX+1\n PHA\n LDA BLOCKY\n PHA\n\n lda #scrntop\n sta TOPCUT ;leave margin for menu bar\n\n* Scan screen L-R, B-T\n\n LDA #SCANHT-1\n CLC\n ADC ULY\n STA MATY\n\n LDA #SCANWID\n CLC\n ADC ULX\n STA RMARGIN\n\n LDA #LLY\n STA BLOCKY\n\n* Do a line\n\n:4 LDA #LLX\n STA BLOCKX\n LDA #/LLX\n STA BLOCKX+1\n\n lda #0\n sta MATX\n jsr CALCMAT\n\n LDA ULX\n STA MATX\n\n:3 JSR LAYBLOK ;Lay down block if it's there\n\n LDA BLOCKX\n CLC\n ADC #DX\n STA BLOCKX\n\n LDA BLOCKX+1\n ADC #/DX\n STA BLOCKX+1\n\n INC MATX\n LDA MATX\n CMP RMARGIN\n BNE :3\n\n* Next line up\n\n LDA BLOCKY\n SEC\n SBC #DY\n STA BLOCKY\n\n DEC MATY\n\n LDA MATY\n BMI :done\n CMP ULY\n BCS :4\n LDA ULY\n BMI :4\n\n:done PLA\n STA BLOCKY\n PLA\n STA BLOCKX+1\n PLA\n STA BLOCKX\n PLA\n STA MATY\n PLA\n STA MATX\n\n lda #0\n sta TOPCUT\n\n lda BLOCKNUM\n sta number\n RTS\n\n*-------------------------------\n*\n*  L A Y  B L O K\n*\n*  Lay down a block (if it's there)\n*\n*-------------------------------\nLAYBLOK ldy MATX\n bmi :no\n cpy #XDIM\n bcs :no\n\n lda MATY\n bmi :no\n cmp #YDIM\n bcs :no\n\n lda (ZTEMP),Y\n beq :no\n sta number\n\n LDA #2\n STA IMAGE\n LDA BLOCKX\n STA XCO\n LDA BLOCKX+1\n STA OFFSET\n LDA BLOCKY\n STA YCO\n LDA #0\n STA OPACITY\n JSR dbldraw\n\n LDA #1\n STA IMAGE\n LDA BLOCKX\n STA XCO\n LDA BLOCKX+1\n STA OFFSET\n LDA BLOCKY\n STA YCO\n LDA #1\n STA OPACITY\n jsr dbldraw\n\n LDA BLOCKX\n STA XCO\n LDA BLOCKX+1\n STA OFFSET\n LDA BLOCKY\n STA YCO\n jmp prblokno\n\n:no RTS\n\n*-------------------------------\n*\n*  X P L 5\n*\n*-------------------------------\nXPL5 STA IMAGE\n LDA BLACKX\n CLC\n ADC #35\n STA XCO\n LDA BLACKX+1\n ADC #0\n STA OFFSET\n LDA BLACKY\n STA YCO\n JMP dbldraw\n\n*-------------------------------\n*\n* N E W B L O K\n*\n*-------------------------------\nNEWBLOK LDA NUMNEXT\n CMP #MAXBLOX+1\n beq :recycle ;out of fresh blocks\n\n sta BLOCKNUM\n sta number\n CLC\n ADC #1\n STA NUMNEXT\n\n:cont lda BLOCKX\n sec\n sbc #ARPX\n sta BLOCKX\n\n lda BLOCKX+1\n sbc #0\n sta BLOCKX+1\n\n lda BLOCKY\n sec\n sbc #ARPY\n sta BLOCKY\n\n lda #bblock\n sta CURSOR\n\n lda BLOCKNUM\n sta SCRNUM\n\n jsr clrblock\n\n lda #0 ;\"OK\"\n rts\n\n* we're out of fresh blocks -- now go back & look for\n* discarded ones we can reuse\n\n:recycle\n ldx #1 ;block #\n:loop lda INFO,x\n bmi :got_one ;255 = discarded-block code\n inx\n cpx #MAXBLOX+1\n bcc :loop\n;all blocks in use\n:braap jsr gtone\n lda #-1 ;\"NO\"\n rts\n\n:got_one stx BLOCKNUM\n stx number\n bne :cont\n\n*-------------------------------\n*\n* Z O O M\n*\n* Zoom in on this block\n*\n*-------------------------------\nZOOM JSR CALCMAT1\n\n LDY #0\n LDA (MATPTR),Y\n BEQ NOBLOK ;No block here\n\n STA SCRNUM\n\n* Cut to large-scale view of block's contents (single hi-res)\n\n lda $c054\n lda $c056 ;lores p1\n jsr swsingle\n jsr storemenu\n\n lda #1\n sta ineditor\n\n jmp edstart\n\n*-------------------------------\n* R T N B U I L D : return to builder from editor\n* or from reboot\n\nRTNBUILD sta $c009\n\n lda #0\n sta ineditor\n jsr swsingle\n lda $c054\n lda $c056 ;show lores p. 1 (black)\n JSR SETUP\n\nNOBLOK JMP CYCLE\n\n*-------------------------------\n*\n* S E T U P\n*\n* Set up builder screen on both pages (double hi-res)\n*\n*-------------------------------\nSETUP jsr zeropeels\n\n lda #0\n sta setupflg\n\n jsr dodblcls\n jsr DRAWMAT\n jsr MENUBAR\n\n lda $c057\n jsr swdouble ;set dblhires\n jsr pageflip ;draw & show 1 page\n\n jsr copyscrn\n jsr copyauxscrn ;copy to other page\n\n jsr moveblok\n\n jsr pageflip\n\n rts\n\n*-------------------------------\n*\n*  M E N U B A R\n*\n*  Draw menu bar across top of screen\n*\n*-------------------------------\nMENUBAR\n lda #0\n sta TOPCUT\n\n ldx #numbtns\n\n dex ;for now (will be trash)\n\n:loop stx TEMP\n\n lda #ora\n jsr drawicon\n\n ldx TEMP\n dex\n bpl :loop\n\n rts\n\ndrawicon\n sta OPACITY\n\n lda btnimg,x\n sta IMAGE\n\n lda btnxl,x\n sta XCO\n lda btnxh,x\n sta OFFSET\n\n lda btny,x\n sta YCO\n\n jmp dbldraw\n\n*-------------------------------\n*\n* C A L C M A T\n*\n* Given: MATX & MATY (0-31)\n* Return: ZTEMP = 32*MATY + MATX\n*\n*-------------------------------\nCALCMAT LDA MATY\n STA ZTEMP\n LDA #0\n STA ZTEMP+1\n\n ASL ZTEMP\n ROL ZTEMP+1\n ASL ZTEMP\n ROL ZTEMP+1\n ASL ZTEMP\n ROL ZTEMP+1\n ASL ZTEMP\n ROL ZTEMP+1\n ASL ZTEMP\n ROL ZTEMP+1\n\n LDA MATX\n CLC\n ADC ZTEMP\n STA ZTEMP\n\n LDA #/MATBASE\n ADC ZTEMP+1\n STA ZTEMP+1\n\n RTS\n\nCALCMAT1 JSR CALCMAT\n\n LDA ZTEMP\n STA MATPTR\n LDA ZTEMP+1\n STA MATPTR+1\n\n RTS\n\n*-------------------------------\n*\n* R E A D B L U E\n*\n* read blueprint\n*\n* Use blueprint room loc list (INFO[0-63])\n* to map blocks into 32x32 matrix\n*\n* In: blank matrix; blueprint just loaded from disk\n*\n*-------------------------------\nreadblue lda MATX\n pha\n lda MATY\n pha\n\n lda INFO ;next available block #\n sta NUMNEXT\n\n ldx #1\n ldy #0\n\n:loop jsr getinfo\n bmi :skip ;255 = nonexistent block\n jsr CALCMAT\n txa\n sta (ZTEMP),y\n\n:skip inx\n cpx NUMNEXT\n bcc :loop\n\n:done pla\n sta MATY\n pla\n sta MATX\n rts\n\ngetinfo lda INFO,x\n sta MATX\n lda INFO+MAXBLOX,x\n sta MATY\n]rts rts\n\n*-------------------------------\n*\n*  G O P L A Y\n*\n*  Play level\n*\n*-------------------------------\ngoplay\n jsr setmasterdisk\n\n lda #0\n jsr dodialog\n\n cpx #$ff\n beq ]rts\n\n jsr makeblue\n\n jsr savebinfo\n jsr saveblue ;in aux l.c\n\n jsr gr ;show black lores\n jmp gogame\n\n*-------------------------------\n*\n*  D O   D I A L O G\n*\n*  do dialog\n*\n*-------------------------------\ndodialog\n pha\n\n jsr clrptr\n\n pla\n jsr dialog ;(show hidden page, do dialog on it,\n;hide it again)\n\n* Level # is returned in x-reg; ff if failure\n\n cpx #$ff\n beq :fix\n\n lda setupflg ;will we be redrawing both screens from scratch?\n bne ]rts ;yes\n;no--better fix them now\n:fix txa\n pha\n\n jsr copyscrn\n jsr copyauxscrn ;copy shown page to hidden page\n\n lda #0\n sta setupflg\n\n pla\n tax\n rts\n\n*-------------------------------\n*\n*  C L R  L I N K S\n*\n* Zero bLINK tables\n* (no links assigned yet)\n*\n*-------------------------------\nCLRLINKS ldx #0\n txa\n:loop sta bLINK1,x ;covers bLINK2\n sta bLINK3,x ;covers bLINK4\n inx\n bne :loop\n rts\n\n*===============================\n*\n*    M  A  K  E    B  L  U  E  P  R  I  N  T\n*\n*-------------------------------\n dum locals\n\nglinkptr ds 1\ncyindex ds 1\nbitmask ds 1\ntempscrn ds 1\nctypead ds 2\ncGspecad ds 2\ncBspecad ds 2\ntempby ds 1\nctrlflag ds 1\nctrlindex ds 1\nctrlbyte ds 1\npptimer ds 1\nsymbtype ds 1\n\n dend\n\n*-------------------------------\nmakeblue\n lda SCRNUM\n pha\n\n jsr buildmap\n jsr assemblinks\n\n pla\n sta SCRNUM\n rts\n\n*-------------------------------\n* Build map from INFO\n\nbuildmap\n lda MATX\n pha\n lda MATY\n pha\n\n lda NUMNEXT\n sta INFO\n\n ldx #1 ;start w/ block #1\n\n:loop stx TEMP+1\n jsr getinfo\n bmi :skip ;255 = nonexistent block\n\n txa\n asl\n asl\n sta TEMP\n\n ldx #-1\n ldy #0\n jsr GETNEIGH\n ldy TEMP\n sta MAP-4,y ;left\n\n ldx #1\n ldy #0\n jsr GETNEIGH\n ldy TEMP\n sta MAP-3,y ;right\n\n ldx #0\n ldy #-1\n JSR GETNEIGH\n ldy TEMP\n sta MAP-2,y ;up\n\n ldx #0\n ldy #1\n JSR GETNEIGH\n ldy TEMP\n sta MAP-1,y ;down\n\n:skip ldx TEMP+1\n inx\n cpx NUMNEXT\n bcc :loop\n\n:done pla\n sta MATY\n pla\n sta MATX\n rts\n\n*-------------------------------\n*\n*  A S S E M B L E   L I N K   T A B L E S\n*\n* Use the raw linkage data in BUILDERINFO to\n* build the LINKLOC/LINKMAP tables in BLUEPRINT.\n*\n* BLUESPEC:\n* For controllers: pointer (0-255) to first LINKLOC entry\n*  for this controller\n* For gadgets: gadget's current state\n*\n* LINKLOC:\n*  Bits 0-4: screen posn (0-29)\n*  Bits 5-6: low 2 bits of screen # (1-24)\n*  Bit 7: 1 = this is last entry, 0 = more to come\n*\n* LINKMAP:\n*  Bits 0-4 (first entry only): pressplate timer (0-31)\n*  Bits 5-7: high 3 bits of screen #\n*\n*-------------------------------\n* Assemble link table for this entire level\n\nassemblinks\n lda #0\n sta glinkptr ;to first free byte in LINKLOC\n\n lda NUMNEXT\n sec\n sbc #1\n sta SCRNUM\n\n:loop jsr assemble1\n\n dec SCRNUM\n bne :loop\n rts\n\n*-------------------------------\n* Assemble link table for every controller on this screen\n\nassemble1\n lda SCRNUM\n jsr bcalcblue ;returns BLUETYPE in BlueType\n;   \"    BLUESPEC in BlueSpec\n ;   \"    bLINDEX in bLinkIndex\n lda BlueType\n sta ctypead\n lda BlueType+1\n sta ctypead+1 ;bluetype of controller screen\n\n lda bLinkIndex\n sta cBspecad\n lda bLinkIndex+1\n sta cBspecad+1 ;link index of controller screen\n\n lda BlueSpec\n sta cGspecad\n lda BlueSpec+1\n sta cGspecad+1 ;game bluespec of controller screen\n\n ldy #29 ;block #\n:loop sty cyindex\n\n lda (ctypead),y\n and #idmask\n cmp #pressplate\n beq :pp\n cmp #upressplate\n bne :skip ;not a controller\n:pp\n lda (cBspecad),y ;link index\n sta ctrlindex\n bpl :ok\n\n jsr gtone ;braap!\n lda ctrlindex\n jsr showpage\n jmp :skip ;unlinked controller--shouldn't happen\n\n:ok tax ;x = link index\n\n jsr addlist\n\n:skip ldy cyindex\n dey\n bpl :loop\n\n rts\n\n*-------------------------------\n*\n*  A D D   L I S T\n*\n* Make list of gadgets controlled by this controller\n* and add it to LINKLOC/LINKMAP\n* (Do one byte at a time)\n*\n* In: y = cyindex (controller block #)\n*\n*-------------------------------\naddlist\n lda glinkptr\n sta (cGspecad),y ;y = controller block #\n\n lda #0\n sta ctrlflag ;no matches yet\n\n lda #bLINK1\n sta sm1+1\n sta sm2+1\n lda #>bLINK1\n sta sm1+2\n sta sm2+2\n\n lda #0 ;global\n jsr dobyte ;byte 1\n\n lda #bLINK2\n sta sm1+1\n sta sm2+1\n lda #>bLINK2\n sta sm1+2\n sta sm2+2\n\n lda #0 ;global\n jsr dobyte ;byte 2\n\n lda #bLINK3\n sta sm1+1\n sta sm2+1\n lda #>bLINK3\n sta sm1+2\n sta sm2+2\n\n lda #1 ;local\n jsr dobyte ;byte 3\n\n ldx glinkptr ;to next free byte in LINKLOC\n\n lda ctrlflag\n beq :nomatches ;still zero...\n\n* There's been at least one match.\n* Set hibit of last LINKLOC entry.\n\n:continue\n dex\n lda LINKLOC,x\n ora #$80 ;set hibit\n sta LINKLOC,x\n rts\n\n* This \"controller\" controls nothing.  Signify this by\n* setting LINKLOC to $FF (an otherwise unattainable value)\n* and LINKMAP to initial value of pp timer\n\n:nomatches\n lda #$ff\n sta LINKLOC,x\n\n lda #0 ;initial pptimer value\n sta LINKMAP,x\n\n inc glinkptr\n rts\n\n*-------------------------------\n* In: A = symbol type (0 = global, 1 = local)\n\ndobyte\n sta symbtype\n\n ldx ctrlindex\nsm2 lda bLINK1,x ;self-modifying code\n ;(can be bLINK1,2 or 3)\n sta ctrlbyte ;controller bLINKbyte\n\n* Do one bit at a time\n\n lda #1\n:loop sta bitmask\n and ctrlbyte\n beq :skipbit ;this bit is clear\n\n jsr dobit\n\n:skipbit lda bitmask\n asl ;next bit\n bpl :loop\n;hi bit is unused\n rts\n\n*-------------------------------\ndobit\n lda symbtype\n bne :local\n\n* Global symbol --\n* Test every object on every screen in this level\n* to see if this bit is set\n\n lda NUMNEXT ;#+1 of screens in this level\n sec\n sbc #1\n sta tempscrn\n\n:nextscrn\n jsr doscrn\n\n dec tempscrn\n bne :nextscrn ;next screen\n rts\n\n* Local symbol -- do this scrn only\n\n:local lda SCRNUM\n sta tempscrn\n\n jmp doscrn\n\n*-------------------------------\n* do a screen\n* In: tempscrn\n\ndoscrn\n lda tempscrn\n jsr bcalcblue ;returns BlueType,Bluespec,bLinkIndex\n\n ldy #29 ;block #\n:loop jsr testobj\n dey\n bpl :loop ;next block\n\n rts\n\n*-------------------------------\n* If object is a gadget, test it for this bit;\n* if bit is set, add object to list\n\n* In: BlueType, bLinkIndex\n* In & out: y = block #\n\ntestobj\n lda (bLinkIndex),y\n bmi :rts ;ff means object is unlinked\n\n tax ;x = link index (0-127)\n\n lda (BlueType),y\n and #idmask ;objid\n;is it a controllable gadget?\n cmp #gate\n beq yes\n\n cmp #exit\n beq yes\n\n* NOTE--insert other controllable gadgets here\n* as we implement them\n\n:rts rts\n\nyes\nsm1 lda bLINK1,x ;self-modifying code\n ;(can be BLINK1,2 or 3)\n and bitmask\n beq :rts ;bit is clear\n;bit is set\n\n* We have a match -- add this gadget to LINKlist\n\n lda #1\n sta ctrlflag ;so we know there's at least one\n ;gadget in list\n\n ldx glinkptr ;to first free byte in LINKLOC\n\n sty tempby ;gadget block # (0-29)\n\n lda tempscrn ;gadget screen # (1-24)\n and #%00000011 ;2 low bits\n asl\n asl\n asl\n asl\n asl ;bits 5-6: 2 low bits of screen#\n ora tempby ;bits 0-4: block#\n sta LINKLOC,x ;bit 7 clear (for now)\n\n lda tempscrn\n and #%00011100 ;3 high bits\n asl\n asl\n asl ;bits 5-7: 3 high bits of screen#\n\n ora #0 ;bits 0-4: init value of timer\n\n sta LINKMAP,x\n\n inc glinkptr ;but not past 255\n\n:rts rts\n\n*-------------------------------\n lst\n ds 1\n usr $a9,24,$0000,*-org\n lst off\n"
  },
  {
    "path": "04 Support/MakeDisk/EDSORC/BUILDEREQ.S",
    "content": "* buildereq\n lst off\n*-------------------------------\n*\n*  B U I L D E R   E Q U A T E S\n*\n*-------------------------------mainmem\nbgtable = $6000\nedtable = $ae00\n\ndblimage = $d000\ntextset = $d800\n\n*-------------------------------auxmem\nmenuscrn = $2000 ;length = $2000\n\ndialoger = $6000\ndirectory = $7000\nbsubs = $7200\nbuilder = $8400\neditor = $9600\n\nMATBASE = $8000 ;length = $400 = 32x32\nENDMAT = MATBASE+$400\n\nbuilderinfo = $a600 ;length = $600\n\n*-------------------------------aux l.c.\neddebugs = $ea00\ndblhires = $ee00\ndcarrybuf = $f700\ndpeelbuf1 = $fa00\ndpeelbuf2 = $fd00\n\n*-------------------------------\n*\n*  J U M P   T A B L E S\n*\n*-------------------------------\n dum eddebugs\n\nshowpage ds 3\ndebugkeys ds 3\nmoveauxlc ds 3\ntitlescreen ds 3\n\n dum builderinfo\n\nbINFO ds 256 ;unused\nbLINK1 ds 128\nbLINK2 ds 128\nbLINK3 ds 128\nbLINK4 ds 128\nbLINDEX ds 24*30\n\n dum dblhires\n\ndblcls ds 3\ndbllay ds 3\ndblfast ds 3\ndblsave ds 3\ndblwipe ds 3\n\ndblprint ds 3\ndblimseek ds 3\ndblora ds 3\n\n dum editor\n\nedstart ds 3\nclrblock ds 3\nrelink ds 3\n ds 3\n ds 3\n\n dum bsubs\n\ndblhgr ds 3\ndbldraw ds 3\nmoveblok ds 3\nswsingle ds 3\nswdouble ds 3\n\nspecialk ds 3\nbcalcblue ds 3\ntopedge ds 3\nbotedge ds 3\nleftedge ds 3\n\nrtedge ds 3\nprblokno ds 3\nprscrnum ds 3\nmenuspecial ds 3\ndrawbethsym ds 3\n\ninvbethsym ds 3\ndrawallsymb ds 3\nstoremenu ds 3\ndodblcls ds 3\ndodbllay ds 3\n\ndodblfast ds 3\ndodblsave ds 3\ndodblwipe ds 3\ndodblprint ds 3\ndodblimseek ds 3\n\npageflip ds 3\ninput ds 3\ndblpeel ds 3\nretrievemenu ds 3\nmovestuff ds 3\n\ndodblora ds 3\ncopyauxscrn ds 3\ndrawmenusym ds 3\nunindex ds 3\nsuperguards ds 3\n\ninitinput ds 3\ndrawflaskno ds 3\nprgdprog ds 3\n\n dum dialoger\n\nprint ds 3\ndialog ds 3\nsetmasterdisk ds 3\nsetdatadisk ds 3\nreaddisk ds 3\n\ndloadlevel ds 3\ndsavelevel ds 3\ninitgetlnbuf ds 3\ndsavelevelg ds 3\nsetgamedisk1 ds 3\nsetgamedisk2 ds 3\n\n dum builder\n\ncoldbuild ds 3\nwarmbuild ds 3\nrtnbuild ds 3\nmleft ds 3\nmright ds 3\n\nmdown ds 3\nmup ds 3\ngetneigh ds 3\ncalcmat1 ds 3\nclrlinks ds 3\n\nrestartbldr ds 3\n\n*-------------------------------\n*\n*  Z E R O   P A G E\n*\n*-------------------------------\n*  $00-17: Hires params\n*  $18-3f: Common globals\n*  $e0-fc: Locals\n*  $fd-ff: RW18\n*-------------------------------\nlocals = $e0\n\n*-------------------------------\n*  $40-df: Builder globals\n*-------------------------------\n dum $40\n\nMATPTR ds 2\nZTEMP ds 6\nULX ds 1\nULY ds 1\n\ncharx ds 2\nchary ds 1\nglobtemp ds 2\nstringptr ds 2\n\nlinkmode ds 1\nnumber ds 1\n\nbLinkIndex ds 2\nnextlink ds 1\n\nlinkindex ds 1\nbethx ds 1\nbethy ds 1\nbethstatus ds 1\ngspecad ds 2\n\nheldspec ds 1\n\nytemp ds 1\ngetlnptr ds 1\nchartemp ds 1\nlinenum ds 1\ndirecptr ds 1\n\ndiskid ds 1\ntopolist ds 1\nokcancel ds 1\n\nsaveim ds 2\nobjspec ds 1\nlinkbits ds 3\naddr ds 2\nysave ds 1\nblockthresh ds 1\ngateposn ds 1\n\nBLOCKX ds 2\nBLOCKY ds 1\nBLACKX ds 2\nBLACKY ds 1\n\nMATX ds 1\nMATY ds 1\n\nPTRX ds 1\nPTRY ds 1\n\nBUFFLAG ds 1\nBUFFX ds 2\nBUFFY ds 2\n\nTEMP ds 4\n\nCURSOR ds 1\nRMARGIN ds 1\nBLOCKNUM ds 1\nNUMNEXT ds 1\n\nsetupflg ds 1\nsavecurs ds 1\nsaveby ds 1\nmenuindx ds 1\nmenuflg ds 1\n\njcount ds 1\njlast ds 1\nobjid ds 1\n\nTHIRD ds 1\nHELD ds 1\nPOINTX ds 1\nPOINTY ds 1\n\nantcount ds 1\nsavescrn ds 1\nsavepx ds 1\nsavepy ds 1\nnextscrn ds 1\n\nsize ds 1\ndright ds 1\ndup ds 1\n\nvirgin ds 1\n\nbarx ds 1\nbary ds 1\n\nshownums ds 1\nidcompare ds 1\nspecial ds 1\nloy ds 1\nmaxfiles ds 1\n\n dend\n*-------------------------------\n*  Command list\n\nCleft = 1\nCright = 2\nCup = 3\nCdown = 4\nCbtn0 = 5\nCbtn1 = 6\n\n*-------------------------------\nRETURN = $8d\n\nrawbtn0 = $c061\nrawbtn1 = $c062\n"
  },
  {
    "path": "04 Support/MakeDisk/EDSORC/DBLHIRES.S",
    "content": "* ed/dblhires\norg = $ee00\n lst off\n*-------------------------------\n*\n*  D B L   H I R E S\n*\n*  Sits in aux l.c.\n*  Expects dblhires image tables to be in auxmem\n*  (We use aux l.c. bank 2)\n*  Carrybuf & dpeelbufs must also be in auxmem\n*\n*  Assume going in that aux l.c. & bank 2 are switched in\n*\n*-------------------------------\n put hrparams\n\nCARRYBUF = $f700\n\ndblimage = $d000 ;aux l.c. bank 2\ntextset = $d800\n\n*-------------------------------\n org org\n\n JMP DBLCLS\n JMP DBLLAY\n JMP DBLFAST\n JMP DBLSAVE\n jmp DBLWIPE\n\n jmp DBLPRINT\n jmp DBLIMSEEK\n jmp DBLORA\n\n*-------------------------------\n* Local vars\n\nlocals = $f0\nlocals2 = $18\n\n dum locals\n\nBASE ds 2\nIMSAVE ds 2\nXSAVE ds 1\nYSAVE ds 1\nWIDTH ds 1\nHEIGHT ds 1\n\nINDEX ds 1\nRAM ds 1\nSCREEN ds 1\nAMASK ds 1\nBMASK ds 1\n\ndcolor ds 2 ;address of 4-byte color table\ncolortemp ds 1\n\n dum locals2\n\nbits ds 1\nbytes ds 1\ntemp ds 1\n\n dend\n\n*-------------------------------\n*\n* D B L C L S\n*\n* Clear screen\n*\n*-------------------------------\nDBLCLS STA $C004 ;RAMWRT main\n JSR CLS\n\n STA $C005 ;RAMWRT aux\n\nCLS LDA PAGE\n CLC\n ADC #$20\n STA BASE+1\n\n LDY #0\n STY BASE\n\n:1 LDA #$80 ;black\n\n:2 STA (BASE),Y\n INY\n BNE :2\n\n INC BASE+1\n LDA BASE+1\n AND #$1F\n BNE :1\n\n RTS\n\n*-------------------------------\n*\n*  D B L L A Y\n*\n*  Same I/O structure as single-hires LAY except:\n*  1. Image table is listed by columns (T-B, L-R)\n*  2. XCO range is 0-79\n*  3. No mirroring\n*\n*-------------------------------\nDBLLAY\n lda OPACITY\n cmp #4 ;4=MASK\n bne :notmask\n jmp DBLMASK\n\n:notmask jsr PREP\n\n LDA XCO ;0-79\n AND #1\n EOR #1\n STA RAM ;0=main, 1=aux\n\n*  Divide XCO by two\n\n LDA XCO\n BPL :15\n\n EOR #$FF\n LSR\n EOR #$FF\n STA XCO ;negative XCO\n\n JMP :1\n\n:15 LSR XCO ;0-39\n\n*  Self-mod code depending on OFFSET and OPACITY\n\n:1 LDX OFFSET ;0-6\n\n LDA SHIFTL,X\n STA :91+1\n LDA SHIFTH,X\n STA :91+2\n\n LDA CARRYL,X\n STA :92+1\n LDA CARRYH,X\n STA :92+2\n\n LDA AMASKS,X\n STA AMASK\n\n LDA BMASKS,X\n STA BMASK\n\n LDX OPACITY ;0=AND, 1=ORA, 2=STA, 3=EOR\n LDA OPCODE,X\n STA :81\n STA :82\n\n JSR INITCARRY\n\n* Start new column at top edge of image (YCO)\n\n:2 LDX YSAVE\n\n LDA #0\n STA INDEX ;Index to image table\n\n LDY RAM ;0=main, 1=aux\n STA $C004,Y ;RAMWRT main/aux\n\n* Lay column down top-to-bottom\n\n:loop sta $c003 ;RAMRD aux (where img table is)\n\n LDA YLO,X\n STA BASE\n\n LDA YHI,X\n CLC\n ADC PAGE\n STA BASE+1\n\n STX YCO\n\n LDY INDEX ;Indexed from top line of image\n LDA (IMAGE),Y ;Assume MSB is off\n ora #$80 ;turn on MSB\n TAX\n:91 LDA $FFFF,X ;SHIFTn\n ORA CARRYBUF,Y\n\n STA SCREEN\n\n:92 LDA $FFFF,X ;CARRYn\n STA CARRYBUF,Y\n\n LDX YCO\n cpx TOPCUT\n bcc :5\n CPX #192\n BCS :5 ;Off top or bottom\n\n LDY XCO\n CPY #40\n BCS :5 ;Off left or right\n\n lda RAM\n bne :10\n sta $c002 ;mustn't trash y\n\n:10 LDA SCREEN\n:81 STA (BASE),Y ;STA/ORA/AND according to OPACITY\n STA (BASE),Y\n \n:5 INX\n INC INDEX\n\n LDA INDEX\n CMP HEIGHT\n BCC :loop ;Next line down\n\n*  Next column over\n\n LDA IMAGE\n CLC\n ADC HEIGHT\n STA IMAGE\n BCC :6\n INC IMAGE+1\n\n:6 LDA RAM\n EOR #1\n STA RAM\n BEQ :7\n INC XCO\n\n:7 DEC WIDTH\n BNE :2\n\n* Extra column on right (carryover)\n\n LDX YSAVE\n\n LDA #0\n STA INDEX ;Index to image table\n\n LDY RAM ;0=main, 1=aux\n STA $C004,Y ;RAMWRT\n STA $C002,Y ;RAMRD\n\n* Lay column down top-to-bottom\n\n:30 LDA YLO,X\n STA BASE\n\n LDA YHI,X\n CLC\n ADC PAGE\n STA BASE+1\n\n STX YCO\n\n LDY INDEX ;Indexed from top line of image\n \n LDA CARRYBUF,Y\n STA SCREEN\n\n LDX YCO\n cpx TOPCUT\n bcc :50\n CPX #192\n BCS :50 ;Off top or bottom\n\n LDY XCO\n CPY #40\n BCS :50 ;Off left or right\n\n LDA (BASE),Y\n\n AND BMASK\n ORA SCREEN\n:82 STA (BASE),Y ;STA/ORA/AND according to OPACITY\n STA (BASE),Y\n \n:50 INX\n INC INDEX\n\n LDA INDEX\n CMP HEIGHT\n BCC :30 ;Next line down\n\nDONE\n STA $C003\n STA $C005 ;RAMWRT and RAMRD aux\n\n LDA IMSAVE\n STA IMAGE\n LDA IMSAVE+1\n STA IMAGE+1\n\n LDA XSAVE\n STA XCO\n LDA YSAVE\n STA YCO\n\n RTS\n\n*-------------------------------\n*\n* D B L M A S K\n*\n*-------------------------------\nDBLMASK jsr PREP\n\n LDA XCO ;0-79\n AND #1\n EOR #1\n STA RAM ;0=main, 1=aux\n\n*  Divide XCO by two\n \n LDA XCO\n BPL :15\n\n EOR #$FF\n LSR\n EOR #$FF\n STA XCO ;negative XCO\n\n JMP :1\n \n:15 LSR XCO ;0-39\n\n*  Self-mod code depending on OFFSET and OPACITY\n\n:1 LDX OFFSET ;0-6\n\n LDA SHIFTL,X\n STA :91+1\n LDA SHIFTH,X\n STA :91+2\n\n LDA CARRYL,X\n STA :92+1\n LDA CARRYH,X\n STA :92+2\n\n LDA AMASKS,X\n STA AMASK\n\n LDA BMASKS,X\n STA BMASK\n\n JSR INITCARRY\n\n* Start new column at top edge of image (YCO)\n\n:2 LDX YSAVE\n\n LDA #0\n STA INDEX ;Index to image table\n\n LDY RAM ;0=main, 1=aux\n STA $C004,Y\n\n* Lay column down top-to-bottom\n\n:loop sta $c003 ;RAMRD aux\n\n LDA YLO,X\n STA BASE\n\n LDA YHI,X\n CLC\n ADC PAGE\n STA BASE+1\n\n STX YCO\n\n LDY INDEX ;Indexed from top line of image\n\n LDA (IMAGE),Y ;Assume MSB is off\n TAX\n lda   masktabl,x\n ora #$80 ;turn on MSB\n tax\n\n:91 LDA $FFFF,X ;SHIFTn\n ORA CARRYBUF,Y\n\n STA SCREEN\n\n:92 LDA $FFFF,X ;CARRYn\n STA CARRYBUF,Y\n \n LDX YCO\n cpx TOPCUT\n bcc :5\n CPX #192\n BCS :5 ;Off top or bottom\n\n LDY XCO ;ironic, isn't it?\n CPY #40\n BCS :5 ;Off left or right\n \n lda RAM\n bne :10\n sta $c002 ;mustn't trash y\n\n:10 LDA SCREEN\n:81 AND (BASE),Y ;STA/ORA/AND according to OPACITY\n STA (BASE),Y\n\n:5 INX\n INC INDEX\n\n LDA INDEX\n CMP HEIGHT\n BCC :loop ;Next line down\n \n*  Next column over\n \n LDA IMAGE\n CLC\n ADC HEIGHT\n STA IMAGE\n BCC :6\n INC IMAGE+1\n\n:6 LDA RAM\n EOR #1\n STA RAM\n BEQ :7\n INC XCO\n \n:7 DEC WIDTH\n BNE :2\n\n* Extra column on right (carryover)\n \n LDX YSAVE\n \n LDA #0\n STA INDEX ;Index to image table\n \n LDY RAM ;0=main, 1=aux\n STA $C004,Y\n STA $C002,Y\n\n* Lay column down top-to-bottom\n\n:30 LDA YLO,X\n STA BASE\n\n LDA YHI,X\n CLC\n ADC PAGE\n STA BASE+1\n\n STX YCO\n\n LDY INDEX ;Indexed from top line of image\n\n LDA CARRYBUF,Y\n STA SCREEN\n\n LDX YCO\n cpx TOPCUT\n bcc :50\n CPX #192\n BCS :50 ;Off top or bottom\n \n LDY XCO\n CPY #40\n BCS :50 ;Off left or right\n\n LDA (BASE),Y\n \n AND BMASK\n ORA SCREEN\n:82 AND (BASE),Y ;STA/ORA/AND according to OPACITY\n STA (BASE),Y\n\n:50 INX\n INC INDEX\n\n LDA INDEX\n CMP HEIGHT\n BCC :30 ;Next line down\n\n JMP DONE\n\n*-------------------------------\n*\n* P R E P A R E\n*\n*-------------------------------\nPREP LDA IMAGE\n STA IMSAVE\n LDA IMAGE+1\n STA IMSAVE+1\n \n LDA XCO\n STA XSAVE\n LDA YCO\n STA YSAVE\n\n LDY #0\n LDA (IMAGE),Y\n STA WIDTH\n \n INY\n LDA (IMAGE),Y\n STA HEIGHT\n\n LDA IMAGE\n CLC\n ADC #2\n STA IMAGE\n BCC :1\n INC IMAGE+1\n \n:1 RTS\n\n*-------------------------------\n*\n* I N I T C A R R Y\n*\n* Initialize carry buffer\n*\n*-------------------------------\nINITCARRY\n LDY RAM\n STA $C004,Y\n STA $C002,Y\n\n LDX #0\n \n LDY XCO\n BPL ZZYK\n\n* Take black from offscreen\n \n LDY HEIGHT\n \n LDA #0\n:1 STA CARRYBUF,Y\n DEY\n BNE :1\n STA CARRYBUF\n\n JMP DUN\n \nZZYK STX INDEX\n \n LDX YCO\n\n LDA YLO,X\n STA BASE\n \n LDA YHI,X\n CLC\n ADC PAGE\n STA BASE+1\n \n INC YCO\n\n LDA (BASE),Y\n AND AMASK\n \n LDX INDEX\n STA CARRYBUF,X\n \n INX\n CPX HEIGHT\n BCC ZZYK\n\nDUN STA $C002\n STA $C004\n \n RTS\n\n*-------------------------------\n*\n* D B L F A S T\n*\n* No offset - no clipping - no mirroring - STA only -\n* trashes vars\n*\n*-------------------------------\nDBLFAST JSR PREP\n \n LDA XCO\n AND #1\n EOR #1\n STA RAM\n\n LSR XCO\n\n:2 LDX YSAVE\n\n LDA #0\n STA INDEX\n \n LDY RAM\n STA $C004,Y ;RAMWRT main/aux\n\n:3 LDA YLO,X\n STA BASE\n\n LDA YHI,X\n CLC\n ADC PAGE\n STA BASE+1\n \n LDY INDEX\n LDA (IMAGE),Y\n \n LDY XCO\n STA (BASE),Y\n\n INX\n INC INDEX\n \n LDA INDEX\n CMP HEIGHT\n BCC :3\n \n LDA IMAGE\n CLC\n ADC HEIGHT\n STA IMAGE\n BCC :6\n INC IMAGE+1\n \n:6 LDA RAM\n EOR #1\n STA RAM\n BEQ :7\n INC XCO\n\n:7 DEC WIDTH\n BNE :2\n \n sta $c003\n sta $c005\n\n RTS\n\n*-------------------------------\n*\n* D B L O R A\n*\n* Same as DBLWIPE except 1 image table byte\n* is ORed with screen (e.g. to draw a vertical line)\n*\n*-------------------------------\nDBLORA\n jsr PREP\n \n ldy #0\n lda (IMAGE),y\n sta dcolor\n\n LDA XCO\n AND #1\n EOR #1\n STA RAM\n\n LSR XCO\n\n:2 LDX YSAVE\n\n LDA #0\n STA INDEX\n\n LDY RAM\n sta $c002,y\n STA $C004,Y ;RAMRD/WRT main/aux\n\n lda XCO\n and #1\n asl\n ora RAM\n eor #1\n tay\n\n:3 LDA YLO,X\n STA BASE\n\n LDA YHI,X\n CLC\n ADC PAGE\n STA BASE+1\n \n LDY XCO\n\n lda dcolor\n ora (BASE),y\n sta (BASE),y\n\n INX\n INC INDEX\n\n LDA INDEX\n CMP HEIGHT\n BCC :3\n\n LDA RAM\n EOR #1\n STA RAM\n BEQ :7\n INC XCO\n\n:7 DEC WIDTH\n BNE :2\n\n STA $C003\n STA $C005\n\n RTS\n\n*-------------------------------\n*\n* D B L W I P E\n*\n* Same as DBLFAST except only 1st byte of image table\n* is used (to represent color: 0-15)\n*\n*-------------------------------\nDBLWIPE\n jsr PREP\n \n ldy #0\n lda (IMAGE),y\n and #$0f ;color: 0-15\n asl\n asl\n clc\n adc #colortab\n sta dcolor\n lda #0\n adc #>colortab\n sta dcolor+1 ;address of 4-byte color pattern\n\n LDA XCO\n AND #1\n EOR #1\n STA RAM\n\n LSR XCO\n\n:2 LDX YSAVE\n\n LDA #0\n STA INDEX\n\n LDY RAM\n STA $C004,Y ;RAMWRT main/aux\n\n lda XCO\n and #1\n asl\n ora RAM\n eor #1\n tay\n lda (dcolor),y\n sta colortemp\n\n:3 LDA YLO,X\n STA BASE\n\n LDA YHI,X\n CLC\n ADC PAGE\n STA BASE+1\n \n lda colortemp\n LDY XCO\n STA (BASE),Y\n\n INX\n INC INDEX\n\n LDA INDEX\n CMP HEIGHT\n BCC :3\n\n LDA RAM\n EOR #1\n STA RAM\n BEQ :7\n INC XCO\n\n:7 DEC WIDTH\n BNE :2\n\n STA $C003\n STA $C005\n\n RTS\n\n*-------------------------------\n*\n* D B L S A V E\n*\n* Save underlayer in BUFFER (replace with DBLFAST)\n*\n* PEELBUF is permanent 2-byte ptr to first available byte\n* in peel buffer for each page.\n*\n* In: params set for LAY\n* Out: PEELIMG (2b), PEELXCO, PEELYCO, PEELBUF (2b)\n*   PEELIMG+1 = 0 means no image has been stored\n*\n*-------------------------------\nDBLSAVE JSR PREP\n\n LDY #0\n \n LDA OFFSET\n BEQ :1\n LDA #1 ;To cover carryover\n\n:1 CLC\n ADC WIDTH\n STA WIDTH\n STA (PEELBUF),Y\n\n INY\n LDA HEIGHT\n STA (PEELBUF),Y\n\n LDA YCO\n STA PEELYCO\n LDA XCO\n STA PEELXCO\n\n lda PEELBUF+1\n sta PEELIMG+1\n\n lda PEELBUF\n sta PEELIMG\n\n CLC\n ADC #2\n STA PEELBUF\n\n bcc :ok\n inc PEELBUF+1\n:ok\n\n* Buffer's set up; now fill it\n \n LDA XCO\n AND #1\n EOR #1\n STA RAM\n\n LSR XCO\n\n:2 LDX YSAVE\n\n LDA #0\n STA INDEX\n \n LDY RAM\n STA $C002,Y ;RAMRD\n\n:3 LDA YLO,X\n STA BASE\n\n LDA YHI,X\n CLC\n ADC PAGE\n STA BASE+1\n\n LDY XCO\n LDA (BASE),Y\n\n LDY INDEX\n STA (PEELBUF),Y\n\n INX\n INC INDEX\n \n LDA INDEX\n CMP HEIGHT\n BCC :3\n\n LDA PEELBUF\n CLC\n ADC HEIGHT\n STA PEELBUF\n BCC :6\n INC PEELBUF+1\n\n:6 LDA RAM\n EOR #1\n STA RAM\n BEQ :7\n INC XCO\n\n:7 DEC WIDTH\n BNE :2\n \n JMP DONE\n\nSKIPIT LDA #0\n sta PEELIMG+1 ;no image saved\n\n JMP DONE\n\n*-------------------------------\n*\n* D B L P R I N T\n*\n* print a dblhires character\n* In: XCO/OFFSET = x; YCO = y; IMAGE = textset index\n* Out: XCO/OFFSET = space to next char\n*\n*-------------------------------\nDBLPRINT\n\n* get start of image table\n\n lda IMAGE\n asl\n sec\n sbc #1\n tay\n lda textset,y\n sta IMAGE\n lda textset+1,y\n sta IMAGE+1\n\n* swallow first 2 bytes\n\n ldy #0\n lda (IMAGE),y ;width in bytes & bits\n pha\n and #$0f\n sta bits\n pla\n lsr\n lsr\n lsr\n lsr\n sta bytes\n\n iny\n lda (IMAGE),y ;y-offset\n clc\n adc YCO\n sta YCO\n\n lda IMAGE\n clc\n adc #2\n sta IMAGE\n lda IMAGE+1\n adc #0\n sta IMAGE+1 ;advance 2 bytes\n\n* dump image to screen\n\n lda #4\n sta OPACITY ;\"MASK\"\n jsr DBLLAY\n\n lda #1\n sta OPACITY ;\"OR\"\n jsr DBLLAY\n\n* return char shift\n\n lda bits\n sta OFFSET\n lda bytes\n sta XCO\n\n rts\n\n*-------------------------------\n*\n* D B L I M S E E K\n*\n* In: TABLE = image table start addr\n*     IMAGE = image #\n*\n* Out: IMAGE (2 bytes) = image start addr\n*\n*-------------------------------\nDBLIMSEEK\n lda IMAGE\n asl\n tay\n dey\n\n lda (TABLE),y\n sta IMAGE\n\n iny\n lda (TABLE),y\n sta IMAGE+1\n\n rts\n\n*-------------------------------\n*\n*  C O L O R T A B\n*\n* 4-byte color patterns for 16 dblhires colors\n*\n*-------------------------------\ncolortab hex 00,00,00,00\n hex 08,11,22,44\n hex 44,08,11,22\n hex 4c,19,33,66\n\n hex 22,44,08,11\n hex 2a,55,2a,55\n hex 66,4c,19,33\n hex 6e,5d,3b,77\n\n hex 11,22,44,08\n hex 19,33,66,4c\n hex 55,2a,55,2a\n hex 5d,3b,77,6e\n\n hex 33,66,4c,19\n hex 3b,77,6e,5d\n hex 77,6e,5d,3b\n hex 7f,7f,7f,7f\n\n*-------------------------------\n*\n*  M A S K T A B\n*\n*-------------------------------\nmasktabl\n hex 7F706060404040400000000000000000\n         hex  01000000000000000000000000000000\n         hex  03000000000000000000000000000000\n         hex  01000000000000000000000000000000\n         hex  07000000000000000000000000000000\n         hex  01000000000000000000000000000000\n         hex  03000000000000000000000000000000\n         hex  01000000000000000000000000000000\n\n do 0\nmasktabh\n hex 7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F\n hex 7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7F\n hex 7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C\n hex 7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C\n hex 78787878787878787878787878787878\n hex 78787878787878787878787878787878\n  hex 78787878787878787878787878787878\n hex 78787878787878787878787878787878\n\n fin\n\n*-------------------------------\n lst\neof ds 1\n usr $a9,27,$0000,*-org\n lst off\n"
  },
  {
    "path": "04 Support/MakeDisk/EDSORC/DBLIMAGE.S",
    "content": "* ed/dblimage\norg = $d000\n lst off\n\n*-------------------------------\n org org\n\n dfb datastart-tabstart/2-1\n\ntabstart da BLOCK\n da BLOCKMASK\n\n da ARROW\n da ARROWMASK\n\n da UPATCH\n da RPATCH\n da URPATCH\n\n da UMASK\n da RMASK\n da URMASK\n\n da DLPATCH\n da LPATCH\n da DPATCH\n\n da PLAY\n da LOAD\n da SAVE\n da DELETE\n da CLEAR\n\n da LMASK\n\n da END\n\ndatastart\n\nBLOCKMASK hex 0810\n hex 7F7F7F0F000000000000000000000000\n hex 7F1F0100000000000000000000000000\n hex 03000000000000000000000000000000\n hex 00000000000000000000000000000000\n hex 00000000000000000000000000000000\n hex 00000000000000000000000000000060\n hex 00000000000000000000000000407C7F\n hex 000000000000000000000000787F7F7F\n\nARROW hex 0309\n hex 007070707000000000\n hex 0000073F0F0E1C3800\n hex 000000000000000000\n\nARROWMASK hex 0309\n hex 0373737373037F7F7F\n hex 7E70073F0F4E1C3903\n hex 7F7F7F7E7E7F7F7E7E\n\nUMASK hex 0804\n hex 00000000\n hex 00000000\n hex 00000000\n hex 00000000\n hex 00000000\n hex 00000060\n hex 00407C7F\n hex 787F7F7F\n\nRMASK hex 0310\n hex 7F7F7F7F1F1F1F1F1F1F1F1F1F1F1F1F\n hex 7F7F3F03000000000000000000000000\n hex 7F070000000000000000000000000000\n\nURMASK hex 0304\n hex 1F1F1F1F\n hex 00000000\n hex 00000000\n\nLMASK hex 0310\n hex 0000000000000000000000000000707F\n hex 000000000000000000000000607E7F7F\n hex 7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F\n\nPLAY HEX 0A0E\n HEX 7E0E0E0E0E0E0E0E0E0E0E0E0E7E\n HEX 7F1111111111111111111111117F\n HEX 7F22227F47477F2727272222227F\n HEX 7F4444616363616464644444447F\n HEX 7F0808090969096171610808087F\n HEX 7F111111111F383F383F1111117F\n HEX 7F222222221C1C1C1C78227A227F\n HEX 7F444444444E4E4E4E4F4E47447F\n HEX 7F0808080808080808080808087F\n HEX 0707070707070707070707070707\n\nLOAD HEX 0B0E\n HEX 7F1717171717171717171717177F\n HEX 7F2222020202020202022222227F\n HEX 7F44444747474747477F4444447F\n HEX 7F0808080860707070610808087F\n HEX 7F111111111F3838381F1111117F\n HEX 7F222222227800781C782222227F\n HEX 7F44444444070E0F0E0F4444447F\n HEX 7F080840407E4747477E0808087F\n HEX 7F1111131313131313131111117F\n HEX 7F6262626262626262626262627F\n HEX 0101010101010101010101010101\n\nSAVE HEX 0B0E\n HEX 7F1717171717171717171717177F\n HEX 7F2222020202222202022222227F\n HEX 7F44447E474F7C60477E4444447F\n HEX 7F0808090B40084363410808087F\n HEX 7F111111113F717F717F1111117F\n HEX 7F2222222238383838782222227F\n HEX 7F444444441C1C0E07074444447F\n HEX 7F080808087C0E7E0E7C0808087F\n HEX 7F1111111113171711131111117F\n HEX 7F6262626262626262626262627F\n HEX 0101010101010101010101010101\n\nDELETE HEX 0D0E\n HEX 7F1717171717171717171717177F\n HEX 7F2222020202020202022222227F\n HEX 7F44447F47474747477F4444447F\n HEX 7F0808090B43636363410808087F\n HEX 7F111111113F717F113F1111117F\n HEX 7F2222383838383838382222227F\n HEX 7F44444444781C7C5C784444447F\n HEX 7F080808080F0E0F080F0808087F\n HEX 7F11111C1C7F1C1C1C781111117F\n HEX 7F2222222270387838702222227F\n HEX 7F444444444F5C5F444F4444447F\n HEX 7F0808080808080808080808087F\n HEX 0707070707070707070707070707\n\nCLEAR HEX 0B0E\n HEX 7F1717171717171717171717177F\n HEX 7F2222220202020202222222227F\n HEX 7F44447C47474747477C4444447F\n HEX 7F0808616360606063610808087F\n HEX 7F1111111161717171611111117F\n HEX 7F222222223F383F223F2222227F\n HEX 7F444444447804781C784444447F\n HEX 7F080808080F0E0F0E0F0808087F\n HEX 7F11111111671F1717171111117F\n HEX 7F2222222223222222222222227F\n HEX 1F1C1C1C1C1C1C1C1C1C1C1C1C1F\n\nBLOCK HEX 0810\n HEX 000000606E0808080808080808080808\n HEX 00405C5D5D1111111111111111111111\n HEX 383B3B3B3B2222222222222222222222\n HEX 77777777774444444444444444444444\n HEX 6E6E6E6E6E0808080808080808080808\n HEX 5D5D5D1D191919191919191919191919\n HEX 3B3B3333333333333333333333330300\n HEX 67666666666666666666666606000000\n\nUPATCH HEX 0804\n HEX 08080808\n HEX 11111111\n HEX 22222222\n HEX 44444444\n HEX 08080808\n HEX 19191919\n HEX 33330300\n HEX 06000000\n\nRPATCH HEX 0310\n HEX 00000000400000000000000000000000\n HEX 000000383B2222222222222222222222\n HEX 00707777774444444444444444444444\n\nURPATCH HEX 0304\n HEX 00000000\n HEX 22222222\n HEX 44444444\n\nDLPATCH HEX 0304\n HEX 6E6E4E4C\n HEX 1D191919\n HEX 03030303\n\nLPATCH HEX 0310\n HEX 6E6E4E4C4C4C4C4C4C4C4C4C4C4C0C00\n HEX 1D191919191919191919191919010000\n HEX 03030303030303030303030300000000\n\nDPATCH HEX 0804\n HEX 00000060\n HEX 00405C5D\n HEX 383B3B3B\n HEX 77777777\n HEX 6E6E6E6E\n HEX 5D5D5D1D\n HEX 3B3B3333\n HEX 67666666\n\nEND\n*-------------------------------\n lst\n ds 1\n usr $a9,28,$0000,*-org\n lst off\n"
  },
  {
    "path": "04 Support/MakeDisk/EDSORC/DEBUGS.S",
    "content": "* debugs\nEditorDisk = 0\norg = $fc00\nload = $4c00\n lst off\n*-------------------------------\n*\n*  \" D E B U G S \"\n*\n*  Sits in aux language card--called from auxmem\n*\n*-------------------------------\n org org\n\n jmp _SHOWPAGE\n jmp DEBUGKEYS\n\n clc\n bcc MOVEAUXLC ;must be relocatable\n\n jmp _TITLESCREEN\n\n*-------------------------------\n*\n*  M O V E A U X L C\n*  (Move to auxiliary language card)\n*\n*  This code is loaded into mainmem, where MASTER calls it\n*  to move itself & all other aux l.c. stuff to aux l.c.\n*\n*  WARNING--once in aux l.c. this code is useless!\n*\n*  Returns control to main l.c. bank 1\n*\n*-------------------------------\nMOVEAUXLC\n sta $c009 ;ALTZP on (aux l.c.)\n\n bit $c083\n bit $c083 ;bank 2\n\n lda #$d0\n ldx #$20\n ldy #$50\n jsr Tmovemem\n\n bit $c08b\n bit $c08b ;bank 1\n\n do EditorDisk\n else\n\n lda #$d0\n ldx #$50\n ldy #$60\n jsr Tmovemem\n\n fin\n\n sta $c008 ;ALTZP off (main l.c.)\n rts\n\n*-------------------------------\n* \"MOVEMEM\"\n\n dum $00\n]dest ds 2\n]source ds 2\n]endsourc ds 2\n dend\n\nmovemem sta ]dest+1\n stx ]source+1\n sty ]endsourc+1\n\n ldy #0\n sty ]dest\n sty ]source\n sty ]endsourc\n\n:loop lda (]source),y\n sta (]dest),y\n\n iny\n bne :loop\n\n inc ]source+1\n inc ]dest+1\n\n lda ]source+1\n cmp ]endsourc+1\n bne :loop\n rts\n\nTmovemem = movemem-$fc00+$4c00\n\n*-------------------------------\nlastpage ds 1\n\n_SHOWPAGE jsr pre\n jsr SHOWPAGE\n jmp post\n\n_TITLESCREEN jsr pre\n jsr TITLESCREEN\n jmp post\n\n*-------------------------------\npre\n pha\n\n jsr saveregs\n jsr mainmem\n jsr savezero\n\n pla\n]rts rts\n\npost\n jsr loadzero\n jsr auxmem\n jmp loadregs\n\n*-------------------------------\nmainmem\n sta $c004\n sta $c002\n rts\n\n*-------------------------------\nauxmem\n sta $c005\n sta $c003\n]rts rts\n\n*-------------------------------\nregs ds 3\n*-------------------------------\n dum $00\n\nbase ds 2\ntab ds 1\nline ds 1\ninverse ds 1\nbytenum ds 1\nmempage ds 1\noldpage ds 1\nstrptr ds 2\nxsave ds 1\nysave ds 1\nnextbytenum ds 1\ndirecptr ds 1\nztemp ds 1\nold80col ds 1\n\n dend\n\nzerodump = $fa00 ;mainmem\npagedump = $fb00 ;mainmem\n\neol = $8d ;string delimiter\n\n*-------------------------------\n* Keys within routines\n\nkesc = $9b\nkpageup = $8b\nkpagedown = $8a\nk4kup = $95\nk4kdown = $88\nkhires = \"H\"\n\n*-------------------------------\n*\n*  D E B U G   K E Y S\n*\n*  In:  A = kbd value\n*\n*-------------------------------\nkshowzero = \"=\nkshowpage3 = \"\\\nkshowlastpage = \"-\n\nDEBUGKEYS\n cmp #kshowzero\n bne :1\n\n lda #0\n jmp _SHOWPAGE\n\n:1 cmp #kshowpage3\n bne :4\n\n lda #3\n jmp _SHOWPAGE\n:4\n cmp #kshowlastpage\n bne ]rts\n\n lda lastpage\n jmp _SHOWPAGE\n\n*-------------------------------\n*\n*  S H O W P A G E\n*\n*  Show page on text page 1; any key to exit\n*  Keys 0-9 to change page #\n*\n*  In: A = initial page #\n*\n*-------------------------------\nSHOWPAGE\n pha\n jsr pretext\n pla\n\nnewdump  ;A = page #\n jsr  PageDump ;dump a page of memory\n jsr RegsDump ;dump registers\n\n:loop jsr waitloop\n\n cmp #\"0\n bcc :1\n cmp #\":\n bcs :1\n\n sec\n sbc #\"0\n jmp newdump ;dump new page\n\n:1 cmp #kpageup\n bne :2\n lda #-1\n jmp chgpg ;change page\n\n:2 cmp #kpagedown\n bne :3\n lda #1\n jmp chgpg\n\n:3 cmp #k4kup\n bne :4\n lda #$10\n jmp chgpg\n\n:4 cmp #k4kdown\n bne :5\n lda #$f0\n jmp chgpg\n\n:5 cmp #khires\n bne :6\n\n jsr showhires\n jsr waitloop\n jsr showtext\n jmp :loop\n\n:6\n:exit\n jmp posttext\n\n*-------------------------------\n* Change page\n*\n* In: A = increment\n*\n* Lock out pages C0-CF\n*-------------------------------\nchgpg\n sta ztemp\n\n lda mempage\n:loop clc\n adc ztemp\n\n cmp #$c0\n bcc :ok\n cmp #$d0\n bcc :loop\n\n:ok sta mempage\n\n jmp newdump\n\n*-------------------------------\n*\n*  P R E T E X T / P O S T T E X T\n*\n*-------------------------------\npretext\n lda $c01f ;read 80COL\n sta old80col\n\n lda $c01c ;read PAGE2\n sta oldpage\n\n jsr textcls\n\nshowtext\n lda $c054 ;page 1\n lda $c051 ;text\n sta $c00c ;40-column\n\n rts\n\n*-------------------------------\nposttext\n lda mempage\n sta lastpage ;for next time\n\n jsr showhires\n\n lda #$00 ;black\n jmp cls40\n\n*-------------------------------\n* Show orig. hires page\n\nshowhires\n lda oldpage ;original page\n bpl :1 ;page 1\n lda $c055 ;page 2\n:1\n lda old80col\n bpl :2\n sta $c00d ;80-col on\n:2\n lda $c050 ;graphics\n rts\n\n*-------------------------------\n*\n*  P A G E D U M P\n*\n*  In: A = page # (auxmem)\n*\n*  Locks out $c0-cf\n*\n*-------------------------------\nPageDump\n sta mempage\n\n cmp #$c0\n bcc :ok\n cmp #$d0\n bcs :ok\n rts  ;lock out $c0-cf\n:ok\n jsr copypage ;to mainmem\n\n jsr home\n jsr normal\n\n lda #STRpage\n ldx #>STRpage\n jsr prline ;\"Page \"\n\n lda mempage\n jsr prhexbyte\n\n jsr inv\n\n lda #0\n sta bytenum\n\n lda #8\n sta tab\n\n:rulerloop\n lda #\" \"\n jsr prchar\n\n lda bytenum\n jsr prhexdig\n\n jsr toggle\n\n inc bytenum\n\n lda bytenum\n cmp #$10\n bne :rulerloop\n\n jsr cr\n jsr cr\n\n lda #0\n sta bytenum\n:nextline\n jsr normal\n lda #\"$\"\n jsr prchar\n\n lda mempage\n jsr prhexbyte\n\n lda bytenum\n jsr prhexbyte\n\n lda #\":\"\n jsr prchar\n\n lda #8\n sta tab\n\n* Print next 16 byte values\n\n lda bytenum\n tax\n clc\n adc #$10\n sta nextbytenum\n\n:loop stx xsave\n\n jsr toggle\n\n lda pagedump,x\n jsr prhexbyte\n\n ldx xsave\n inx\n cpx nextbytenum\n bne :loop\n\n* Next line\n\n cpx #0\n beq :rts\n stx bytenum\n\n jsr cr\n\n jmp :nextline\n\n:rts rts\n\n*-------------------------------\n*\n*  R E G S D U M P\n*\n*-------------------------------\nRegsDump\n jsr normal\n\n ldx #19\n jsr setline\n\n ldx #0\n lda #\"A\"\n jsr printreg\n\n ldx #1\n lda #\"X\"\n jsr printreg\n\n ldx #2\n lda #\"Y\"\n jsr printreg\n\n rts\n\n*-------------------------------\nprintreg\n stx xsave\n\n jsr prchar\n inc tab\n\n lda #\"=\"\n jsr prchar\n inc tab\n\n ldx xsave\n lda regs,x\n jsr prhexbyte\n\n lda tab\n clc\n adc #5\n sta tab\n rts\n\n*-------------------------------\n*\n*  W A I T L O O P\n*\n*  Wait for keypress (return in A, hibit set)\n*\n*-------------------------------\nwaitloop\n sta $c010\n\n:loop lda $c000\n bpl :loop\n\n rts\n\n*-------------------------------\n*  C R\n*-------------------------------\ncr\n lda #0\n sta tab\n\n inc line\n ldx line\n jmp bascalc\n\n*-------------------------------\n*\n*  P R L I N E\n*\n*  Print a line of normal text\n*\n*  In: A-X = string ptr\n*\n*-------------------------------\nprline\n sta strptr\n stx strptr+1\n:loop\n ldy #0\n lda (strptr),y\n cmp #eol\n beq :rts\n\n jsr prcharn\n\n inc strptr\n bne :loop\n inc strptr+1\n bne :loop\n\n:rts rts\n\n*-------------------------------\n*\n*  P R H E X B Y T E\n*\n*  Print a hex byte (in A)\n*\n*-------------------------------\nprhexbyte\n pha\n lsr\n lsr\n lsr\n lsr\n jsr prhexdig\n\n pla\n and #$0f\n jmp prhexdig\n\n*-------------------------------\n*\n*  P R H E X D I G\n*\n*  Print a hex digit (in A)\n*  Trashes X\n*\n*-------------------------------\nprhexdig\n tax\n lda hextoasc,x\n jmp prchar\n\n*-------------------------------\n*\n*  P R C H A R\n*\n*  Print an ASCII character (in A)\n*\n*-------------------------------\nprchar\n ldy tab\n and #%00111111\n ora inverse\n sta (base),y\n\n inc tab\n\n rts\n\nprcharn ;normal\n ldy tab\n sta (base),y\n\n inc tab\n\n rts\n\n*-------------------------------\n*\n*  H O M E\n*\n*-------------------------------\nhome\n lda #0\n sta tab\n\n ldx #0\n stx line\n\n jmp bascalc\n\n*-------------------------------\n*\n*  I N V E R S E / N O R M A L\n*\n*-------------------------------\nnormal\n lda #$80\n sta inverse\n rts\n\ninv\n lda #0\n sta inverse\n rts\n\ntoggle\n lda inverse\n eor #$80\n sta inverse\n rts\n\n*-------------------------------\n*\n*  S E T L I N E\n*\n*  In: X = line #\n*\n*-------------------------------\nsetline\n lda #0\n sta tab\n\n stx line\n\n*-------------------------------\n*\n*  B A S C A L C\n*\n*  In: X = line # (0-24)\n*\n*-------------------------------\nbascalc\n cpx #24\n bcs :rts\n\n lda textl,x\n sta base\n\n lda texth,x\n sta base+1\n\n:rts rts\n\n*-------------------------------\n*\n*  T E X T C L S\n*\n*  Clear text page 1 to black\n*\n*-------------------------------\ntextcls lda #$a0 ;space\n\ncls40 ldy #$f7\n:2 sta $400,y\n sta $500,y\n sta $600,y\n sta $700,y\n\n dey\n cpy #$7f\n bne :3\n\n ldy #$77\n:3 cpy #$ff\n bne :2\n\n rts\n\n*-------------------------------\n*  S A V E / L O A D  R E G S\n*-------------------------------\nsaveregs sta regs\n stx regs+1\n sty regs+2\n rts\n\nloadregs lda regs\n ldx regs+1\n ldy regs+2\n rts\n\n*-------------------------------\n*  S A V E Z E R O\n*-------------------------------\nsavezero\n ldx #0\n\n:loop lda $00,x\n sta zerodump,x\n\n inx\n bne :loop\n rts\n\n*-------------------------------\n*  L O A D Z E R O\n*-------------------------------\nloadzero\n ldx #0\n\n:loop lda zerodump,x\n sta $00,x\n\n inx\n bne :loop\n rts\n\n*-------------------------------\n*  C O P Y P A G E\n*\n*  Copy desired auxmem page to \"pagedump\" in mainmem\n*\n*  In: A = page #\n*-------------------------------\ncopypage\n tax\n beq :pagezero\n\n sta :loop+2 ;self-mod\n\n sta $c003 ;read auxmem\n\n ldx #0\n\n:loop lda $300,x\n sta pagedump,x\n\n inx\n bne :loop\n\n sta $c002 ;read mainmem\n\n rts\n\n* Read original page 0 from pagedump, not the current page 0\n\n:pagezero\n ldx #0\n:loop0 lda zerodump,x\n sta pagedump,x\n inx\n bne :loop0\n rts\n\n*-------------------------------\n* 40-column text base addresses\n*-------------------------------\n\ntextl hex 00,80,00,80,00,80,00,80\n hex 28,a8,28,a8,28,a8,28,a8\n hex 50,d0,50,d0,50,d0,50,d0\n\ntexth hex 04,04,05,05,06,06,07,07\n hex 04,04,05,05,06,06,07,07\n hex 04,04,05,05,06,06,07,07\n\n*-------------------------------\n* Hex to ASCII\n*-------------------------------\n\nhextoasc asc \"0123456789ABCDEF\"\n\n*-------------------------------\nTITLESCREEN\n jsr pretext\n jsr textcls\n\n jsr home\n jsr normal\n\n lda #title\n ldx #>title\n jsr prline\n\n ldx #3\n jsr setline\n lda #date\n ldx #>date\n jsr prline\n\n ldx #11\n jsr setline\n lda #please\n ldx #>please\n jsr prline\n\n ldx #23\n jsr setline\n lda #copyr\n ldx #>copyr\n jsr prline\n\n:loop lda $c061\n ora $c062\n bpl :loop\n sta $c010\n rts\n\n*-------------------------------\n*\n*  S T R I N G   D A T A\n*\n*-------------------------------\nSTRpage asc \"Page \"\n db #eol\n\ntitle asc \"PRINCE OF PERSIA Level Editor\"\n db #eol\ndate asc \"Working Copy\"\n db #eol\nplease asc \"PLEASE DO NOT COPY!!\"\n db #eol\ncopyr asc \"Copyright 1989 Jordan Mechner\"\n db #eol\n\n*-------------------------------\n lst\neof ds 1\n usr $a9,21,$e00,*-org\n lst off\n"
  },
  {
    "path": "04 Support/MakeDisk/EDSORC/DIALOGER.S",
    "content": "* ed/dialoger\norg = $6000\n lst off\n*-------------------------------\n*\n*  D I A L O G E R\n*\n*-------------------------------\n org org\n\n jmp PRINT\n jmp DIALOG\n jmp SETMASTERDISK\n jmp SETDATADISK\n jmp READDISK\n\n jmp DLOADLEVEL\n jmp DSAVELEVEL\n jmp INITGETLNBUF\n jmp DSAVELEVELG\n jmp SETGAMEDISK1\n jmp SETGAMEDISK2\n\n*-------------------------------\ngetlnbuf ds $10\nfilelist ds $20\n\n*-------------------------------\n put eq\n put buildereq\n\n dum locals\n\nsavechr ds 3\nnumfiles ds 1\nlistptr ds 1\n\n dend\n\n*-------------------------------\n*\n* DIRECTORY FORMAT:\n*\n* $200 bytes: 32 fields, 16 bytes each\n*\n* diroffset,x is directory offset for field #x (0-21)\n*\n* Fields #0-29 (max 30 files):\n*   Bytes 0-11: file name (12 chars max)\n*   Byte 12: blueprint track #\n*   Byte 13: blueprint region (0-1)\n*   Byte 14: binfo track #\n*   Byte 15: binfo region (0-2)\n*\n* Field #30:\n*   Bytes 0-11: disk title\n*\n* Field #31:\n*   Byte 0: disk ID\n*\n*-------------------------------\ndirofflo hex 00,10,20,30,40,50,60,70,80,90,a0,b0,c0,d0,e0,f0\n hex 00,10,20,30,40,50,60,70,80,90,a0,b0,c0,d0,e0,f0\n\ndiroffhi hex 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\n hex 01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01\n\nmaxfilesDD = 30 ;max # of files on data disk\nmaxfilesMD = 6 ;& on master disk\nmaxfilesGD1 = 4 ;& on game disk side 1\nmaxfilesGD2 = 20 ;& on game disk side 2\n\nfieldleng = 16\nfnameleng = 12\n\ntitlefield = 30\nidfield = 31\n\n*-------------------------------\n* RW18 ID bytes (intrinsic to disk)\n\nIDside1 = $a9 ;game disk side 1\nIDside2 = $ad ;game disk side 2\n\n* $f5-f6 also available\n\n* NOTE--master & data disks use $a9 (for now)\n\n*-------------------------------\n* Builder ID bytes (stored as 31st byte of directory track)\n\ngamedisk1id = $77\ngamedisk2id = $99\n\ndatadiskid = $dd\nmasterdiskid = $11\n\n*-------------------------------\n*\n* DISK FORMAT:\n*\n* Directory on track 34 ($200 bytes)\n*\n* Master disk stores 6 levels as follows:\n*  BLUEPRINT ($900 bytes) on tracks 30-33 (2 levels/track)\n*  BINFO ($600 bytes) on tracks 29-30 (3 levels/track)\n*\n* Data disk follows same pattern, repeated 5 times,\n* to make space for 30 levels on 25 tracks.\n*\n* Game disk stores only BLUEPRINT, 2 levels/track:\n*  Side 1: 4 levels on tracks 32-33\n*  Side 2: 20 levels on tracks 24-33\n*\n*-------------------------------\n* Blueprint & binfo TRACK & REGION indexed by level # (0-n)\n\n* game disk\n\ngameTRKlst\n db 33,33,32,32,31,31\n db 30,30,29,29,28,28\n db 27,27,26,26,25,25\n db 24,24\n\ngameREGlst\n\n* master & data disk\n\nbluepREGlst\n db 0,1,0,1,0,1\n db 0,1,0,1,0,1\n db 0,1,0,1,0,1\n db 0,1,0,1,0,1\n db 0,1,0,1,0,1\n\nbluepTRKlst\n db 33,33,32,32,31,31\n db 28,28,27,27,26,26\n db 23,23,22,22,21,21\n db 18,18,17,17,16,16\n db 13,13,12,12,11,11\n\nbinfoTRKlst\n db 30,30,30,29,29,29\n db 25,25,25,24,24,24\n db 20,20,20,19,19,19\n db 15,15,15,14,14,14\n db 10,10,10,9,9,9\n\nbinfoREGlst\n db 0,1,2,0,1,2\n db 0,1,2,0,1,2\n db 0,1,2,0,1,2\n db 0,1,2,0,1,2\n db 0,1,2,0,1,2\n\n*-------------------------------\nkDELETE = $ff\nkESC = $9b\n\n*-------------------------------\n* Useful background colors:\n\nblack = 0\nmagenta = 1\nbrown = 2\ndkgreen = 4\ndkblue = 8\n\n*-------------------------------\n*\n* Format for box data:\n*  Width (80)\n*  Height (192)\n*  Color (16)\n*  XCO (80)\n*  YCO (192)\n*\n*-------------------------------\nfnlength = 12 ;including <CR>... max = 16\n\nnumnames = 5 ;# of names in box\n\nboxmarg = 5\nboxwid = 80-boxmarg-boxmarg\nboxrt = 79-boxmarg\nboxtop = 33\ntopline = 36\nfirstname = 49\nlinespace = 10\nboxheight = 65\nboxbottom = boxtop+boxheight\nboxcolor = dkblue\nokx = 425\noky = firstname+30\n\nfnwid = 52\nokwid = boxwid-fnwid\nokleft = boxmarg+fnwid\n\nmsgline = 53\n\nfnamey db firstname,firstname+10,firstname+20\n db firstname+30,firstname+40\n\nloadbox db boxwid,boxheight-1,boxcolor,boxmarg,boxtop+1\nloadbord1 db boxwid,1,15,boxmarg,boxtop\nloadbord2 db boxwid,1,15,boxmarg,boxtop+13\nloadbord3 db boxwid,1,15,boxmarg,boxbottom\nloadbordL db 1,boxheight+1,$f0,boxmarg-1,boxtop\nloadbordM db 1,boxheight-14,$0f,okleft,boxtop+14\nloadbordR db 1,boxheight+1,$0f,boxrt+1,boxtop\n\nokfix db 1,11,$0f,okleft,oky\n\nmsgbox db boxwid,boxheight-1,boxcolor,boxmarg,boxtop+1\nmsgbord1 db boxwid,1,15,boxmarg,boxtop\nmsgbord3 db boxwid,1,15,boxmarg,boxbottom\nmsgbordL db 1,boxheight+1,$f0,boxmarg-1,boxtop\nmsgbordM db 1,boxheight-1,$0f,okleft,boxtop+1\nmsgbordR db 1,boxheight+1,$0f,boxrt+1,boxtop\n\nlistwipe1 db 46,38,boxcolor,10,firstname+10\nlistwipe2 db 46,38,boxcolor,10,firstname\n\nfnwipe db fnwid,11,black,5,firstname\nfnunwipe db fnwid,11,boxcolor,5,firstname\n\nokwipe db okwid,11,black,okleft,oky\nokunwipe db okwid,11,boxcolor,okleft,oky\n\nlinewipe db 35,9,boxcolor,40,topline\n\n*-------------------------------\nloadwhat asc 'Load level named: ',8d\nsavewhat asc 'Save level named: ',8d\ndeletewhat asc 'Delete level named: ',8d\nokmsg asc 'OK',8d\ncancelmsg asc 'Cancel',8d\naskMD asc 'Put master disk in drive 1',8d\naskGD asc 'Put game disk in drive 1',8d\naskDD asc 'Put data disk in drive 1',8d\ncreatewarn asc 'WARNING!  Directory track',8d\ncreatewarn2 asc 'will be erased',8d\n\n*-------------------------------\n*\n* I N I T  G E T L N  B U F\n*\n*-------------------------------\nINITGETLNBUF\n lda #$8d ;RETURN\n sta getlnbuf\n rts\n\n*-------------------------------\n*\n*   P R I N T\n*\n*   Print a character & advance cursor\n*\n*   In:  charx (560), chary (192)\n*        A = ASCII value of character\n*   Out: new charx\n*\n*-------------------------------\nPRINT\n\n* convert ASCII to textset index\n* Text set covers ASCII 32-122\n\n and #$7f\n cmp #32\n bcc :braap\n cmp #123\n bcs :braap\n\n sec\n sbc #31\n\n* call dblhires print routine\n\n sta IMAGE\n\n lda chary\n sta YCO\n lda charx\n sta XCO\n lda charx+1\n sta OFFSET\n jsr cvtx\n\n jsr dodblprint\n\n* advance cursor\n\n ldx XCO\n lda Mult7,x\n clc\n adc OFFSET ;convert bits & bytes to 560-res\n clc\n adc #3 ;fudge factor\n clc\n adc charx\n sta charx\n\n lda #0\n adc charx+1\n sta charx+1\n\n lda #0 ;pl = \"ok\"\n rts\n\n:braap lda #$ff ;mi = \"braap\"\n rts\n*-------------------------------\n*\n* D I A L O G\n*\n* Dialog box # passed in accumulator:\n*  0 = PLAY LEVEL, 1 = LOAD LEVEL, 2 = SAVE LEVEL,\n*  3 = DELETE LEVEL, 4 = CLEAR LEVEL, 5 = CREATE DISK\n*\n* Steps:\n*  (1) Draw dialog box on hidden page\n*  (2) Page-flip to show dialog box\n*  (3) Have the dialog on visible page\n*  (4) Page-flip to hide dialog box\n*\n*-------------------------------\nDIALOG\n cmp #0\n bne :1\n jsr diaplay\n jmp return\n\n:1 cmp #1\n bne :2\n jsr diaload\n jmp return\n\n:2 cmp #2\n bne :3\n jsr diasave\n jmp return\n\n:3 cmp #3\n bne :4\n jsr diadelete\n jmp return\n\n:4 cmp #4\n bne :5\n jsr diaclear\n jmp return\n\n:5 cmp #5\n bne :6\n jsr diacreate\n jmp return\n\n:6 rts\n*-------------------------------\nreturn\n sta $c010\n rts\n*-------------------------------\n*\n*  Set idcompare (disk we expect to be in drive)\n*  & corresponding maxfiles value\n*\n*-------------------------------\nSETDATADISK\n lda #datadiskid\n ldx #maxfilesDD\n]si sta idcompare\n stx maxfiles\n rts\n\nSETMASTERDISK\n lda #masterdiskid\n ldx #maxfilesMD\n bne ]si\n\nSETGAMEDISK1\n lda #gamedisk1id\n ldx #maxfilesGD1\n bne ]si\n\nSETGAMEDISK2\n lda #gamedisk2id\n ldx #maxfilesGD2\n bne ]si\n\n*-------------------------------\ndmsgbox\n ldx #msgbox\n ldy #>msgbox\n jsr drawbox\n ldx #msgbord1\n ldy #>msgbord1\n jsr drawbox\n ldx #msgbord3\n ldy #>msgbord3\n jsr drawbox\n\n ldx #msgbordL\n ldy #>msgbordL\n jsr drawline\n ldx #msgbordM\n ldy #>msgbordM\n jsr drawline\n ldx #msgbordR\n ldy #>msgbordR\n jsr drawline\n\n jsr okcan\n jmp flipshow\n\ndloadbox\n ldx #loadbox\n ldy #>loadbox\n jsr drawbox\n ldx #loadbord1\n\n ldy #>loadbord1\n jsr drawbox\n ldx #loadbord2\n ldy #>loadbord2\n jsr drawbox\n ldx #loadbord3\n ldy #>loadbord3\n jsr drawbox\n\n ldx #loadbordL\n ldy #>loadbordL\n jsr drawline\n ldx #loadbordM\n ldy #>loadbordM\n jsr drawline\n ldx #loadbordR\n ldy #>loadbordR\n jsr drawline\n\n jsr okcan\n jmp flipshow\n\nokcan ;OK/cancel\n lda #okx\n sta charx\n lda #>okx\n sta charx+1\n lda #oky\n sta chary\n\n lda #okmsg\n sta stringptr\n lda #>okmsg\n sta stringptr+1\n jsr printline\n\n lda #okx\n sta charx\n lda #>okx\n sta charx+1\n\n jsr nextline\n\n lda #cancelmsg\n sta stringptr\n lda #>cancelmsg\n sta stringptr+1\n jmp printline\n\n*-------------------------------\n* dialog: wrong disk is in drive--ask for right one\n\naskfordisk\n lda idcompare\n cmp #gamedisk1id\n beq askforgame\n cmp #gamedisk2id\n beq askforgame\n cmp #masterdiskid\n beq askformaster\n bne askfordata\n\n]t1 jsr dmsgbox\n jmp setmsg\n\naskfordata\n jsr ]t1\n lda #askDD\n ldx #>askDD\n]t2 sta stringptr\n stx stringptr+1\n jsr printline\n jsr canok\n ldx okcancel\n]rts rts\n\naskforgame\n jsr ]t1\n lda #askGD\n ldx #>askGD\n bne ]t2\n\naskformaster\n jsr ]t1\n lda #askMD\n ldx #>askMD\n bne ]t2\n\n*-------------------------------\n* d i a l o g : p l a y\n\ndiaplay\n jsr setmasterdisk ;we want master disk\n\n* is it the right disk?\n\n jsr readdisk\n beq ]rts ;yes--no dialog necessary\n\n* no-- print switch-disks msg\n\n:again\n jsr askformaster\n cpx #$ff\n beq :done ;cancelled--no need to check disk\n\n* now is it the right disk?\n\n jsr readdisk\n bne :again\n\n:done jsr fliphide\n ldx okcancel\n rts\n\n*-------------------------------\n* d i a l o g : l o a d\n*\n* only from data & master disks\n*-------------------------------\ndiaload\n jsr dloadbox\n\n* print prompt message\n\n jsr setprompt\n lda #loadwhat\n sta stringptr\n lda #>loadwhat\n sta stringptr+1\n jsr printline\n\n* print directory\n\n jsr readanydisk\n\n lda idcompare\n cmp #datadiskid\n beq :ok\n cmp #masterdiskid\n bne :notadatadisk\n\n:ok jsr makelist\n jsr listfiles\n\n* get filename\n\n jsr setcursor\n jsr setbar\n\n lda #$8d\n sta getlnbuf\n jsr printbuf\n\n jsr getline\n ldx okcancel ;1/-1\n bmi :done\n\n* search for filename\n\n jsr searchfile\n\n:done jsr clrbuf ;clear getlnbuf if x=ff\n jsr fliphide\n rts ;with file# or ff in x-reg\n\n* err--not a data disk\n\n:notadatadisk\n jsr askfordata ;or master\n ldx okcancel\n bpl :tryagain\n rts ;cancelled\n\n:tryagain jmp diaload\n\n*-------------------------------\n* d i a l o g : s a v e\n*\n* In: idcompare\n*-------------------------------\ndiasave\n jsr dloadbox\n\n* print prompt message\n\n jsr setprompt\n lda #savewhat\n sta stringptr\n lda #>savewhat\n sta stringptr+1\n jsr printline\n\n* print directory\n\n jsr readdisk\n bpl :rightdisk ;Disk must match idcompare\n\n lda idcompare\n cmp #masterdiskid\n bne :wrongdisk\n jsr GETIDBYTE\n cmp #datadiskid\n bne :wrongdisk ;Exception:\n  jsr setdatadisk ;Data disk can sub for master disk\n\n:rightdisk\n jsr makelist\n jsr listfiles\n\n* get filename\n\n jsr setcursor\n jsr setbar\n\n jsr printbuf ;current file name in buffer\n jsr getline\n\n lda getlnptr\n bne :cont ;fname must be at least 1 char\n\n lda #-1\n sta okcancel\n:cont\n ldx okcancel\n bmi :done ;cancel\n\n* search for filename\n\n jsr searchfile\n cpx #$ff\n bne :done ;save level as file #x\n\n jsr namefile\n\n:done jsr clrbuf\n jsr fliphide\n rts\n\n* err: wrong disk\n\n:wrongdisk\n jsr askfordisk\n ldx okcancel\n cpx #-1\n bne :tryagain\n rts ;cancelled\n\n:tryagain jmp diasave\n\n*-------------------------------\n* d i a l o g : d e l e t e\n\ndiadelete\n jsr dloadbox\n\n* print prompt message\n\n jsr setprompt\n lda #deletewhat\n sta stringptr\n lda #>deletewhat\n sta stringptr+1\n jsr printline\n\n* print directory\n\n jsr readanydisk\n bmi :notadatadisk\n\n jsr makelist\n jsr listfiles\n\n* get filename\n\n jsr setcursor\n jsr setbar\n\n lda #$8d\n sta getlnbuf\n jsr printbuf\n\n jsr getline\n\n ldx okcancel\n bmi :done ;cancel\n\n* search for filename\n\n jsr searchfile\n\n jsr clrbuf ;clear getlnbuf if x=ff\n jsr deletefile ;delete file if x<>ff\n\n:done lda #$8d\n sta getlnbuf\n\n jsr fliphide\n rts\n\n* err--not a data disk\n\n:notadatadisk\n jsr askfordata\n ldx okcancel\n cpx #-1\n bne :tryagain\n rts ;cancelled\n\n:tryagain jmp diadelete\n*-------------------------------\n* d i a l o g : c l e a r\n\ndiaclear\n ldx #0 ;not $ff\n rts\n\n*-------------------------------\n*\n* d i a l o g : c r e a t e\n*\n* (i.e., zero directory)\n*\n* In: idcompare = desired disk id\n*\n*-------------------------------\ndiacreate\n jsr dmsgbox\n jsr setmsg\n\n* game disk, data disk or master disk?\n\n lda idcompare\n cmp #datadiskid\n beq :dd\n cmp #gamedisk1id\n beq :gd\n cmp #gamedisk2id\n beq :gd\n cmp #masterdiskid\n bne :done\n\n:md lda #askMD\n ldx #>askMD\n]ask sta stringptr\n stx stringptr+1\n jsr printline\n jmp :cont\n\n:gd lda #askGD\n ldx #>askGD\n bne ]ask\n\n:dd lda #askDD\n ldx #>askDD\n bne ]ask\n\n* print warning message\n\n:cont jsr nextline\n jsr setleftej\n\n lda #createwarn\n sta stringptr\n lda #>createwarn\n sta stringptr+1\n jsr printline\n\n jsr nextline\n jsr setleftej\n\n lda #createwarn2\n sta stringptr\n lda #>createwarn2\n sta stringptr+1\n jsr printline\n\n* OK/cancel\n\n jsr canok\n ldx okcancel\n cpx #-1\n beq :done\n\n* zero directory\n\n jsr ZERODIR\n\n* set id byte to \"idcompare\"\n\n jsr GETIDBYTE\n lda idcompare\n sta (stringptr),y\n\n* write out directory\n\n jsr writedir\n\n:done jsr fliphide\n rts ;with file# or ff in x-reg\n\n*===============================\nGETIDBYTE\n ldx #idfield ;disk id field\n\ngetfield ;X = field # (0-31)\n lda #directory\n clc\n adc dirofflo,x\n sta stringptr\n\n lda #>directory\n adc diroffhi,x\n sta stringptr+1 ;set stringptr\n\n ldy #0 ;first char\n lda (stringptr),y\n rts\n*-------------------------------\n* delete file #x if x <> ff\n\ndeletefile\n cpx #$ff\n beq :skip\n\n jsr getfield\n\n lda #$ff\n sta (stringptr),y ;first char of filename\n\n jsr writedir\n\n:skip rts\n*-------------------------------\n* clear getln buffer\n\nclrbuf cpx #$ff\n bne :rts\n lda #$8d\n sta getlnbuf\n:rts rts\n*-------------------------------\n* p r i n t b u f\n\n* print current contents of getln buffer\n* return getlnptr\n\nprintbuf\n ldx #0\n:loop lda getlnbuf,x\n cmp #$8d\n beq :done\n inx\n cpx #fnlength\n bcc :loop\n jsr gtone\n\n:done stx getlnptr\n cpx #0\n beq :rts\n\n lda #getlnbuf\n sta stringptr\n lda #>getlnbuf\n sta stringptr+1\n\n jsr printline\n\n:rts rts\n*-------------------------------\n* n a m e f i l e\n\n* In: filename in getln buffer\n* Search directory for blank space, and name it\n* Return in x: # (0-19); if direc full, return #$ff\n\nnamefile\n lda #directory\n sta stringptr\n\n lda #>directory\n sta stringptr+1 ;set stringptr\n\n ldx #0 ;file # (0-19)\n\n:nextfile\n ldy #0\n lda (stringptr),y\n cmp #$ff ;empty code\n beq :foundblank\n\n lda stringptr\n clc\n adc #fieldleng\n sta stringptr\n\n lda stringptr+1\n adc #0\n sta stringptr+1 ;next direc entry\n\n inx\n cpx maxfiles\n bcc :nextfile\n\n:dirfull jsr gtone\n\n ldx #$ff\n rts\n\n* name blank file with getlnbuf\n\n:foundblank\n ldy #0\n:nextchar lda getlnbuf,y\n sta (stringptr),y\n iny\n cpy #fnameleng\n bcc :nextchar\n\n* add track & region data bytes\n\n lda bluepTRKlst,x\n sta (stringptr),y\n\n iny\n lda bluepREGlst,x\n sta (stringptr),y\n\n iny\n lda binfoTRKlst,x\n sta (stringptr),y\n\n iny\n lda binfoREGlst,x\n sta (stringptr),y\n\n rts ;with level # in x-reg.\n\n*-------------------------------\n* s e a r c h f i l e\n\n* In: filename in getln buffer\n* Search directory for this filename\n* Return in x: # (0-19); if not found, return #$ff\n\nsearchfile\n lda #directory\n sta stringptr\n\n lda #>directory\n sta stringptr+1 ;set stringptr\n\n ldx #0 ;file # (0-19)\n\n:nextfile\n ldy #0\n:nextchar\n lda (stringptr),y ;next char of filename\n cmp getlnbuf,y\n bne :miss\n cmp #$8d ;return\n beq :match\n\n iny\n cpy #fnameleng\n bcc :nextchar\n jsr gtone ;kludge errcheck\n\n:miss lda stringptr\n clc\n adc #fieldleng\n sta stringptr\n\n lda stringptr+1\n adc #0\n sta stringptr+1 ;next direc entry\n\n inx\n cpx maxfiles\n bcc :nextfile\n\n:notfound ldx #$ff\n rts\n\n:match rts\n*-------------------------------\n*\n* R E A D  D I S K\n*\n* Read directory\n*\n* READANYDISK: change idcompare to match disk in drive--\n*  return 0\n*\n* READDISK: look for desired idcompare--return 0 if disk\n*   matches, ff if it doesn't\n*\n*-------------------------------\nREADANYDISK\nreadanydisk\n lda #0\n sta idcompare\nREADDISK\n jsr readdir ;read directory from disk\n\n lda idcompare\n bne :mustmatch\n\n jsr GETIDBYTE\n sta idcompare\n\n cmp #datadiskid\n bne :1\n jsr setdatadisk\n jmp :ok\n\n:1 cmp #masterdiskid\n bne :2\n jsr setmasterdisk\n jmp :ok\n\n:2 cmp #gamedisk1id\n bne :3\n jsr setgamedisk1\n jmp :ok\n\n:3 cmp #gamedisk2id\n bne :notok\n jsr setgamedisk2\n jmp :ok\n\n:mustmatch\n jsr GETIDBYTE\n cmp idcompare\n bne :notok\n\n:ok lda #0\n rts\n\n:notok lda #$ff\n rts\n\n*-------------------------------\n* m a k e l i s t\n\n* Transfer file numbers (0-29) from directory to\n* file list, leaving out \"empty\" files\n\nmakelist\n\n:ok jsr zerofilelist ;set every slot to ff\n\n ldx #0\n stx direcptr\n jsr getfield\n\n ldx #0 ;filelist index\n\n ldy #0\n\n:loop lda (stringptr),y ;first char\n cmp #$ff ;\"empty\" code\n beq :skip\n\n lda direcptr\n sta filelist,x\n inx\n\n:skip inc direcptr\n lda direcptr\n cmp maxfiles\n bcs :done\n\n lda stringptr\n clc\n adc #fieldleng\n sta stringptr\n\n lda stringptr+1\n adc #0\n sta stringptr+1 ;next direc entry\n bne :loop\n\n:done stx numfiles ;# of files in filelist (0-20)\n\n lda #0\n sta topolist ;start with 1st file in dir\n rts\n\n*-------------------------------\n* l i s t f i l e s\n\n* Starting with file #topolist,\n* print names of next five files in file list\n\nlistfiles\n lda topolist\n sta listptr ;list ptr (0-19)\n\n lda #1\n sta linenum\n\n jsr setlist ;set cursor to top of list area\n\n:nextfile\n ldx listptr\n cpx maxfiles\n bcs :rts ;out of files\n\n lda filelist,x ;get direcptr\n bmi :rts ;out of files\n\n tax\n jsr getfield ;get stringptr\n\n jsr printfname\n\n jsr nextline ;next line down\n\n inc linenum\n inc listptr\n\n lda linenum\n cmp #numnames+1\n bcc :nextfile\n\n:rts rts\n*-------------------------------\n* zero filelist\n* (put ff in every slot)\n\nzerofilelist\n ldx #0\n lda #$ff ;\"no file\" code\n:loop sta filelist,x\n inx\n cpx maxfiles\n bne :loop\n rts\n*-------------------------------\n* print filename\n*\n* In: stringptr, chary\n\nprintfname\n ldy #0\n lda (stringptr),y ;first char of filename\n cmp #$ff ;\"empty\" code\n beq :rts\n\n jsr setleftej\n jsr printline\n:rts rts\n\n*-------------------------------\n* wipe filename\n*\n* In: chary\n\nwipefname\n ldx #fnwipe\n ldy #>fnwipe\nwipe1 jsr setupbox\n\n lda chary\n sec\n sbc #2\n sta YCO\n jmp dodblwipe\n\nunwipefname\n ldx #fnunwipe\n ldy #>fnunwipe\n jmp wipe1\n\nwipe2 jsr setupbox\n\n lda chary\n sec\n sbc #2\n sta YCO\n jmp dodblora\n\n*-------------------------------\n* wipe ok/cursor\n\nwipeok\n ldx #okwipe\n ldy #>okwipe\n jsr wipe1\n\n ldx #okfix\n ldy #>okfix\n jmp wipe2\n\nunwipeok\n ldx #okunwipe\n ldy #>okunwipe\n jsr wipe1\n\n ldx #okfix\n ldy #>okfix\n jmp wipe2\n\n*-------------------------------\n* Set cursor to beginning of entry field\n\nsetcursor lda #280\n sta charx\n lda #>280\n sta charx+1\n lda #topline\n sta chary\n rts\n*-------------------------------\n* Set bar to top of filename list\n\n* bary: 0 = top, 4 = bottom\n* barx: 0 = left (filenames), 1 = right (OK/cancel)\n\nsetbar\n lda #0\n sta bary\n sta barx\n sta okcancel\n\n lda numfiles\n beq setbarok ;no files in list\n\n:rts rts\n\n*-------------------------------\n* Set bar to \"OK\"\n\nsetbarok\n lda #3\n sta bary\n lda #1\n sta barx\n\n lda #0\n sta okcancel ;1 = ok, -1 = cancel, 0 = waiting\n rts\n*-------------------------------\nsetprompt lda #78\n sta charx\n lda #0\n sta charx+1\n lda #topline\n sta chary\n rts\n*-------------------------------\nsetmsg lda #78\n sta charx\n lda #0\n sta charx+1\n lda #msgline\n sta chary\n rts\n*-------------------------------\nsetlist lda #firstname\n sta chary\nsetleftej\n lda #78\n sta charx\n lda #0\n sta charx+1\n rts\n*-------------------------------\nnextline lda chary\n clc\n adc #linespace\n sta chary\n rts\n*-------------------------------\nflipshow lda $c055\n lda PAGE\n bne :rts\n lda $c054\n:rts rts\n\nfliphide lda $c054\n lda PAGE\n bne :rts\n lda $c055\n:rts rts\n*-------------------------------\n* print line of text\n\nprintline\n ldy #0\n:loop sty ytemp\n lda (stringptr),y\n jsr print\n bmi :rts ;\"braap\"\n ldy ytemp\n iny\n bne :loop\n:rts rts\n*-------------------------------\nsavechrs lda charx\n sta savechr\n lda charx+1\n sta savechr+1\n lda chary\n sta savechr+2 ;save current charx/chary\n rts\n\nretrievechrs lda savechr+2\n sta chary\n lda savechr+1\n sta charx+1\n lda savechr\n sta charx ;retrieve charx/chary\n rts\n*-------------------------------\n* get cancel/OK\n*\n* Return okcancel: 1 = OK, ff = cancel\n\ncanok\n jsr setbarok\n jsr drawbar\n\n:loop jsr input ;get kbd or jstk cmd (in A)\n\n cmp #Cdown\n bne :1\n jsr bardown\n jmp :loop\n\n:1 cmp #Cup\n bne :2\n jsr barup\n jmp :loop\n\n:2 cmp #Cbtn0\n bne :3\n jmp select\n\n:3 cmp #Cbtn1\n bne :4\n jmp select\n:4\n jmp :loop\n\n*-------------------------------\n* Get line of input\n\n* In: getlnptr (0=beginning)\n\n* Out: A = okcancel = 1 (OK) or -1 (cancel)\n\ngetline\n jsr savechrs\n jsr drawbar\n jsr retrievechrs\n\n lda $c010\n\n:loop jsr savechrs\n jsr ctrlbar ;while we're waiting for user to\n;type in a line, he can use jstk\n;or kbd to control hilite bar\n jsr retrievechrs\n\n lda okcancel\n bne :eol ;OK/cancel was selected\n\n lda $c000\n bpl :loop\n sta chartemp\n\n cmp #kDELETE\n beq :bkspace\n\n ldx getlnptr\n cpx #fnlength-1\n bcs :rtncheck\n\n jsr print\n bmi :rtncheck ;braap--nogood char\n\n ldx getlnptr\n lda chartemp\n sta getlnbuf,x\n inc getlnptr\n\n:rtncheck lda chartemp\n cmp #$8d ;return\n bne :loop\n\n lda #1\n sta okcancel ;<CR> means OK\n\n* Detected a <CR> or OK/cancel\n\n:eol lda #$8d\n ldx getlnptr\n sta getlnbuf,x ;put <CR> at end of fname\n\n lda okcancel ;-1 = cancel, 1 = OK\n rts\n\n:bkspace ldx getlnptr\n beq :loop ;buffer empty--nothing to delete\n\n dec getlnptr\n\n jsr redoline ;wipe & reprint entire line\n jmp :loop\n\n*-------------------------------\n*\n*  C O N T R O L   H I L I T E   B A R\n*  with jstk or kbd\n*\n*-------------------------------\nctrlbar\n jsr input ;get kbd or jstk cmd (in A)\n\n cmp #Cdown\n bne :1\n jmp bardown\n\n:1 cmp #Cup\n bne :2\n jmp barup\n\n:2 cmp #Cbtn0\n bne :3\n jmp select\n\n:3 cmp #Cbtn1\n bne :4\n jmp select\n\n:4 cmp #Cright\n bne :5\n jmp barright\n\n:5 cmp #Cleft\n bne :6\n jmp barleft\n\n:6\n:rts rts\n*-------------------------------\nbarleft lda barx\n beq :rts\n\n lda numfiles ;no files in list\n beq :rts ;--limit bar to OK/cancel\n\n jsr erasebar\n\n lda numfiles\n sec\n sbc topolist\n sbc #1 ;bary of bottommost file\n\n cmp bary\n bcs :ok\n\n sta bary ;move bar to bottommost file\n:ok\n dec barx\n jmp drawbar\n\n:rts rts\n*-------------------------------\nbarright lda barx\n bne :rts\n\n jsr erasebar\n inc barx\n\n lda bary ;Filename column has 5 choices (bary = 0-4)\n cmp #4\n beq :can\n lda #3 ;OK/cancel column has only 2 choices:\n sta bary ;bary = 3 (OK) or 4 (cancel)\n:can\n jmp drawbar\n\n:rts rts\n*-------------------------------\nbardown lda barx\n beq :fn\n\n:ok lda bary\n cmp #4\n bcc :movebar\n rts\n\n:movebar jsr erasebar\n inc bary\n jmp drawbar\n\n:fn lda bary\n cmp #4\n bcs :offbot\n\n clc\n adc topolist\n clc\n adc #1 ;# of next file\n cmp numfiles\n bcc :movebar\n rts ;no more files\n\n* move bar off bottom\n\n:offbot lda topolist\n clc\n adc #5 ;# of next offscreen file\n cmp numfiles\n bcs :rts ;no more files\n\n inc topolist\n\n jsr drawbar\n\n ldx #listwipe2\n ldy #>listwipe2\n jsr drawbox\n\n jsr listfiles\n\n:rts rts\n*-------------------------------\nbarup lda barx\n beq :fn\n\n:ok lda bary\n cmp #4\n bcs :movebar\n rts\n\n:movebar jsr erasebar\n dec bary\n jmp drawbar\n\n:fn lda bary\n bne :movebar\n\n* move bar off top\n\n:offtop lda topolist\n beq :rts ;no more files\n\n dec topolist\n\n jsr drawbar\n\n ldx #listwipe1\n ldy #>listwipe1\n jsr drawbox\n\n jsr listfiles\n\n:rts rts\n*-------------------------------\n*\n*  Select what's highlighted\n*\n*-------------------------------\nselect\n lda barx\n beq selectfn ;select filename\n bne selectok ;select OK/cancel\n\n*-------------------------------\n* select filename\n\nselectfn\n\n* copy hilited filename into getlnbuf\n\n jsr setupfnwipe\n jsr copyfname\n\n* print filename in entry field\n\n jsr redoline\n\n jmp savechrs\n*-------------------------------\n* select OK/cancel\n\nselectok\n lda bary\n cmp #3\n beq :ok\n\n:cancel lda #-1\n sta okcancel\n rts\n\n:ok lda #1\n sta okcancel\n rts\n*-------------------------------\n* read filename under hilite & copy into getlnbuf\n* In: stringptr\n\ncopyfname\n ldy #0\n:loop lda (stringptr),y\n sta getlnbuf,y\n cmp #$8d\n beq :done\n\n iny\n cpy #fnameleng\n bcc :loop\n jsr gtone\n\n:done sty getlnptr\n rts\n\n*-------------------------------\nredoline\n ldx #linewipe\n ldy #>linewipe\n jsr drawbox\n\n lda #getlnbuf\n sta stringptr\n lda #>getlnbuf\n sta stringptr+1\n\n ldx getlnptr\n lda #$8d ;return\n sta getlnbuf,x\n\n jsr setcursor\n jsr printline\n\n rts\n*-------------------------------\n* Draw a blank dialog box\n* In: x = addr lo, y = addr hi\n\nsetupbox\n stx IMAGE\n sty IMAGE+1\n\n ldy #3\n lda (IMAGE),y\n sta XCO\n iny\n lda (IMAGE),y\n sta YCO\n lda #0\n sta OFFSET\n lda #2 sta\n sta OPACITY\n\n rts\n\ndrawbox jsr setupbox\n jmp dodblwipe\n\ndrawline jsr setupbox\n jmp dodblora\n\n*-------------------------------\n* zero directory (development routine)\n\nZERODIR ldy #0\n ldx maxfiles\n dex\n:loop jsr getfield\n lda #$ff\n sta (stringptr),y\n dex\n bpl :loop\n rts\n*-------------------------------\n* erase hilite bar\n* In: barx, bary\n\nerasebar lda barx\n bne :okcan\n\n jmp unhilitename\n\n:okcan jmp unhiliteok\n*-------------------------------\n* draw hilite bar\n* In: barx, bary\n\ndrawbar lda barx\n bne :okcan\n\n jmp hilitename\n\n:okcan jmp hiliteok\n*-------------------------------\nhilitename\n lda numfiles\n beq :rts\n\n jsr setupfnwipe\n jsr wipefname\n jmp printfname\n\n:rts rts\n\nunhilitename\n jsr setupfnwipe\n jsr unwipefname\n jmp printfname\n\n:rts rts\n\nsetupfnwipe\n lda topolist ;filelist # of top filename in window\n clc\n adc bary\n tax ;filelist # of hilited filename\n lda filelist,x\n tax ;direcptr\n\n jsr getfield ;get stringptr\n\n ldx bary\n lda fnamey,x\n sta chary ;get screen y-cooord\n\n rts\n*-------------------------------\nhiliteok\n jsr setupokwipe\n jsr wipeok\n jmp printline\n\nunhiliteok\n jsr setupokwipe\n jsr unwipeok\n jmp printline\n\nsetupokwipe\n lda #oky\n sta chary\n\n lda #okx\n sta charx\n lda #>okx\n sta charx+1\n\n lda bary ;0=ok, 1=cancel\n cmp #4\n beq :can\n\n lda #okmsg\n sta stringptr\n lda #>okmsg\n sta stringptr+1\n rts\n\n:can jsr nextline\n\n lda #cancelmsg\n sta stringptr\n lda #>cancelmsg\n sta stringptr+1\n rts\n\n*===============================\n*\n*\n*    D   I   S   K\n*\n*\n*-------------------------------\n*\n*  S A V E   L E V E L\n*\n*  In: level (0-n)\n*\n*-------------------------------\nDSAVELEVEL\n jsr setlevel\n\n jmp savelevel ;in master\n\n*-------------------------------\n*\n*  Save level to game disk\n*\n*-------------------------------\nDSAVELEVELG\n jsr setlevelg\n\n jmp savelevelg ;in master\n\n*-------------------------------\n*\n*  L O A D   L E V E L\n*\n*  In: level (0-n)\n*\n*-------------------------------\nDLOADLEVEL\n jsr setlevel\n\n jmp loadlevel\n\n*-------------------------------\n* Set level (for master & data disk)\n\nsetlevel\n ldx level\n\n lda bluepTRKlst,x\n sta bluepTRK\n lda bluepREGlst,x\n sta bluepREG\n\n lda binfoTRKlst,x\n sta binfoTRK\n lda binfoREGlst,x\n sta binfoREG\n\n rts\n\n*-------------------------------\n* Set level (for game disk)\n\nsetlevelg\n ldx level\n\n lda gameTRKlst,x\n sta bluepTRK\n lda gameREGlst,x\n sta bluepREG\n\n rts\n\n*-------------------------------\n lst\neof ds 1\n usr $a9,22,$00,*-org\n lst off\n"
  },
  {
    "path": "04 Support/MakeDisk/EDSORC/EDDATA.S",
    "content": "* eddata\n lst off\n*-------------------------------\n*                           5\n* sizes:  1  22  333  4444  5\n*\n*                           1\n* posns:  0  01  012  0123  0\n*\n* base: id # of lower-leftmost section in composite object\n*\n* link: ff = end, fe = requires floorpiece above, # = obj id\n*\n*-------------------------------\n* Obj id #:     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f\n*              10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f\n\nsizelist hex 01,01,01,01,01,00,01,01,05,05,01,01,01,01,01,01\n hex 02,02,01,01,01,01,01,02,02,01,01,01,02,02\n\nbaselist hex 00,01,02,03,04,00,06,07,08,08,0a,0b,0c,0d,0e,0f\n hex 10,10,12,13,14,15,16,17,17,19,1a,1b,1c,1c\n\nposnlist hex 00,00,00,00,00,00,00,00,00,01,00,00,00,00,00,00\n hex 00,01,00,00,00,00,00,00,01,00,00,00,00,01\n\nlinklist hex ff,ff,ff,fe,ff,00,ff,fe,09,fe,ff,ff,fe,fe,ff,ff\n hex 11,ff,fe,ff,fe,ff,ff,18,ff,ff,ff,ff,1d,ff\n\n*-------------------------------\n* Linkable? 00 = no, 01 = controller, 02 = gadget\n\nlinkable hex 00,00,00,00,02,00,01,00,00,00,00,00,00,00,00,01\n hex 02,00,00,00,00,00,00,00,00,00,00,00,00,00\n\n*-------------------------------\n"
  },
  {
    "path": "04 Support/MakeDisk/EDSORC/EDDEBUGS.S",
    "content": "* eddebugs\norg = $ea00\n lst off\n*-------------------------------\n*\n*  \" D E B U G S \"\n*\n*  Special version to sit at end of hrtables (for builder)\n*  Replaces UNPACK\n*\n*-------------------------------\n org org\n\n jmp _SHOWPAGE\n jmp DEBUGKEYS\n\n clc\n bcc MOVEAUXLC ;must be relocatable\n\n jmp _TITLESCREEN\n\n*-------------------------------\n*\n*  M O V E A U X L C\n*  (Move to auxiliary language card)\n*\n*  This code is loaded into mainmem, where MASTER calls it\n*  to move itself & all other aux l.c. stuff to aux l.c.\n*\n*  WARNING--once in aux l.c. this code is useless!\n*\n*-------------------------------\n dum $00\n\n]dest ds 2\n]source ds 2\n]endsourc ds 2\n\n dend\n\nMOVEAUXLC\n sta $c009 ;ALTZP on (aux l.c.)\n\n lda $c083\n lda $c083 ;bank 2\n\n lda #$d0\n ldx #$20\n ldy #$50\n\n* \"MOVEMEM\"\n\n sta ]dest+1\n stx ]source+1\n sty ]endsourc+1\n\n ldy #0\n sty ]dest\n sty ]source\n sty ]endsourc\n\n:loop lda (]source),y\n sta (]dest),y\n\n iny\n bne :loop\n\n inc ]source+1\n inc ]dest+1\n\n lda ]source+1\n cmp ]endsourc+1\n bne :loop\n\n* Switch back to bank 1 before returning to MASTER\n\n lda $c08b\n lda $c08b ;bank 1\n\n sta $c008 ;ALTZP off (main l.c.)\n\n rts\n\n*-------------------------------\nlastpage ds 1\n\n_SHOWPAGE jsr pre\n jsr SHOWPAGE\n jmp post\n\n_TITLESCREEN jsr pre\n jsr TITLESCREEN\n jmp post\n\n*-------------------------------\npre\n pha\n\n jsr saveregs\n jsr mainmem\n jsr savezero\n\n pla\n]rts rts\n\npost\n jsr loadzero\n jsr auxmem\n jmp loadregs\n\n*-------------------------------\nmainmem\n sta $c004\n sta $c002\n rts\n\n*-------------------------------\nauxmem\n sta $c005\n sta $c003\n]rts rts\n\n*-------------------------------\nregs ds 3\n*-------------------------------\n dum $00\n\nbase ds 2\ntab ds 1\nline ds 1\ninverse ds 1\nbytenum ds 1\nmempage ds 1\noldpage ds 1\nstrptr ds 2\nxsave ds 1\nysave ds 1\nnextbytenum ds 1\ndirecptr ds 1\nztemp ds 1\nold80col ds 1\n\n dend\n\nzerodump = $1f00 ;mainmem\npagedump = $1e00 ;mainmem\n\neol = $8d ;string delimiter\n\n*-------------------------------\n* Keys within routines\n\nkesc = $9b\nkpageup = $8b\nkpagedown = $8a\nk4kup = $95\nk4kdown = $88\nkhires = \"H\"\n\n*-------------------------------\n*\n*  D E B U G   K E Y S\n*\n*  In:  A = kbd value\n*\n*-------------------------------\nkshowzero = \"=\nkshowpage3 = \"\\\nkshowlastpage = \"-\n\nDEBUGKEYS\n cmp #kshowzero\n bne :1\n\n lda #0\n jmp _SHOWPAGE\n\n:1 cmp #kshowpage3\n bne :4\n\n lda #3\n jmp _SHOWPAGE\n:4\n cmp #kshowlastpage\n bne ]rts\n\n lda lastpage\n jmp _SHOWPAGE\n\n*-------------------------------\n*\n*  S H O W P A G E\n*\n*  Show page on text page 1; any key to exit\n*  Keys 0-9 to change page #\n*\n*  In: A = initial page #\n*\n*-------------------------------\nSHOWPAGE\n pha\n jsr pretext\n pla\n\nnewdump  ;A = page #\n jsr  PageDump ;dump a page of memory\n jsr RegsDump ;dump registers\n\n:loop jsr waitloop\n\n cmp #\"0\n bcc :1\n cmp #\":\n bcs :1\n\n sec\n sbc #\"0\n jmp newdump ;dump new page\n\n:1 cmp #kpageup\n bne :2\n lda #-1\n jmp chgpg ;change page\n\n:2 cmp #kpagedown\n bne :3\n lda #1\n jmp chgpg\n\n:3 cmp #k4kup\n bne :4\n lda #$10\n jmp chgpg\n\n:4 cmp #k4kdown\n bne :5\n lda #$f0\n jmp chgpg\n\n:5 cmp #khires\n bne :6\n\n jsr showhires\n jsr waitloop\n jsr showtext\n jmp :loop\n\n:6\n:exit\n jmp posttext\n\n*-------------------------------\n* Change page\n*\n* In: A = increment\n*\n* Lock out pages C0-CF\n*-------------------------------\nchgpg\n sta ztemp\n\n lda mempage\n:loop clc\n adc ztemp\n\n cmp #$c0\n bcc :ok\n cmp #$d0\n bcc :loop\n\n:ok sta mempage\n\n jmp newdump\n\n*-------------------------------\n*\n*  P R E T E X T / P O S T T E X T\n*\n*-------------------------------\npretext\n lda $c01f ;read 80COL\n sta old80col\n\n lda $c01c ;read PAGE2\n sta oldpage\n\n jsr textcls\n\nshowtext\n lda $c054 ;page 1\n lda $c051 ;text\n sta $c00c ;40-column\n\n rts\n\n*-------------------------------\nposttext\n lda mempage\n sta lastpage ;for next time\n\n jsr showhires\n\n lda #$00 ;black\n jmp cls40\n\n*-------------------------------\n* Show orig. hires page\n\nshowhires\n lda oldpage ;original page\n bpl :1 ;page 1\n lda $c055 ;page 2\n:1\n lda old80col\n bpl :2\n sta $c00d ;80-col on\n:2\n lda $c050 ;graphics\n rts\n\n*-------------------------------\n*\n*  P A G E D U M P\n*\n*  In: A = page # (auxmem)\n*\n*  Locks out $c0-cf\n*\n*-------------------------------\nPageDump\n sta mempage\n\n cmp #$c0\n bcc :ok\n cmp #$d0\n bcs :ok\n rts  ;lock out $c0-cf\n:ok\n jsr copypage ;to mainmem\n\n jsr home\n jsr normal\n\n lda #STRpage\n ldx #>STRpage\n jsr prline ;\"Page \"\n\n lda mempage\n jsr prhexbyte\n\n jsr inv\n\n lda #0\n sta bytenum\n\n lda #8\n sta tab\n\n:rulerloop\n lda #\" \"\n jsr prchar\n\n lda bytenum\n jsr prhexdig\n\n jsr toggle\n\n inc bytenum\n\n lda bytenum\n cmp #$10\n bne :rulerloop\n\n jsr cr\n jsr cr\n\n lda #0\n sta bytenum\n:nextline\n jsr normal\n lda #\"$\"\n jsr prchar\n\n lda mempage\n jsr prhexbyte\n\n lda bytenum\n jsr prhexbyte\n\n lda #\":\"\n jsr prchar\n\n lda #8\n sta tab\n\n* Print next 16 byte values\n\n lda bytenum\n tax\n clc\n adc #$10\n sta nextbytenum\n\n:loop stx xsave\n\n jsr toggle\n\n lda pagedump,x\n jsr prhexbyte\n\n ldx xsave\n inx\n cpx nextbytenum\n bne :loop\n\n* Next line\n\n cpx #0\n beq :rts\n stx bytenum\n\n jsr cr\n\n jmp :nextline\n\n:rts rts\n\n*-------------------------------\n*\n*  R E G S D U M P\n*\n*-------------------------------\nRegsDump\n jsr normal\n\n ldx #19\n jsr setline\n\n ldx #0\n lda #\"A\"\n jsr printreg\n\n ldx #1\n lda #\"X\"\n jsr printreg\n\n ldx #2\n lda #\"Y\"\n jsr printreg\n\n rts\n\n*-------------------------------\nprintreg\n stx xsave\n\n jsr prchar\n inc tab\n\n lda #\"=\"\n jsr prchar\n inc tab\n\n ldx xsave\n lda regs,x\n jsr prhexbyte\n\n lda tab\n clc\n adc #5\n sta tab\n rts\n\n*-------------------------------\n*\n*  W A I T L O O P\n*\n*  Wait for keypress (return in A, hibit set)\n*\n*-------------------------------\nwaitloop\n sta $c010\n\n:loop lda $c000\n bpl :loop\n\n rts\n\n*-------------------------------\n*  C R\n*-------------------------------\ncr\n lda #0\n sta tab\n\n inc line\n ldx line\n jmp bascalc\n\n*-------------------------------\n*\n*  P R L I N E\n*\n*  Print a line of normal text\n*\n*  In: A-X = string ptr\n*\n*-------------------------------\nprline\n sta strptr\n stx strptr+1\n:loop\n ldy #0\n lda (strptr),y\n cmp #eol\n beq :rts\n\n jsr prcharn\n\n inc strptr\n bne :loop\n inc strptr+1\n bne :loop\n\n:rts rts\n\n*-------------------------------\n*\n*  P R H E X B Y T E\n*\n*  Print a hex byte (in A)\n*\n*-------------------------------\nprhexbyte\n pha\n lsr\n lsr\n lsr\n lsr\n jsr prhexdig\n\n pla\n and #$0f\n jmp prhexdig\n\n*-------------------------------\n*\n*  P R H E X D I G\n*\n*  Print a hex digit (in A)\n*  Trashes X\n*\n*-------------------------------\nprhexdig\n tax\n lda hextoasc,x\n jmp prchar\n\n*-------------------------------\n*\n*  P R C H A R\n*\n*  Print an ASCII character (in A)\n*\n*-------------------------------\nprchar\n ldy tab\n and #%00111111\n ora inverse\n sta (base),y\n\n inc tab\n\n rts\n\nprcharn ;normal\n ldy tab\n sta (base),y\n\n inc tab\n\n rts\n\n*-------------------------------\n*\n*  H O M E\n*\n*-------------------------------\nhome\n lda #0\n sta tab\n\n ldx #0\n stx line\n\n jmp bascalc\n\n*-------------------------------\n*\n*  I N V E R S E / N O R M A L\n*\n*-------------------------------\nnormal\n lda #$80\n sta inverse\n rts\n\ninv\n lda #0\n sta inverse\n rts\n\ntoggle\n lda inverse\n eor #$80\n sta inverse\n rts\n\n*-------------------------------\n*\n*  S E T L I N E\n*\n*  In: X = line #\n*\n*-------------------------------\nsetline\n lda #0\n sta tab\n\n stx line\n\n*-------------------------------\n*\n*  B A S C A L C\n*\n*  In: X = line # (0-24)\n*\n*-------------------------------\nbascalc\n cpx #24\n bcs :rts\n\n lda textl,x\n sta base\n\n lda texth,x\n sta base+1\n\n:rts rts\n\n*-------------------------------\n*\n*  T E X T C L S\n*\n*  Clear text page 1 to black\n*\n*-------------------------------\ntextcls lda #$a0 ;space\n\ncls40 ldy #$f7\n:2 sta $400,y\n sta $500,y\n sta $600,y\n sta $700,y\n\n dey\n cpy #$7f\n bne :3\n\n ldy #$77\n:3 cpy #$ff\n bne :2\n\n rts\n\n*-------------------------------\n*  S A V E / L O A D  R E G S\n*-------------------------------\nsaveregs sta regs\n stx regs+1\n sty regs+2\n rts\n\nloadregs lda regs\n ldx regs+1\n ldy regs+2\n rts\n\n*-------------------------------\n*  S A V E Z E R O\n*-------------------------------\nsavezero\n ldx #0\n\n:loop lda $00,x\n sta zerodump,x\n\n inx\n bne :loop\n rts\n\n*-------------------------------\n*  L O A D Z E R O\n*-------------------------------\nloadzero\n ldx #0\n\n:loop lda zerodump,x\n sta $00,x\n\n inx\n bne :loop\n rts\n\n*-------------------------------\n*  C O P Y P A G E\n*\n*  Copy desired auxmem page to \"pagedump\" in mainmem\n*\n*  In: A = page #\n*-------------------------------\ncopypage\n tax\n beq :pagezero\n\n sta :loop+2 ;self-mod\n\n sta $c003 ;read auxmem\n\n ldx #0\n\n:loop lda $300,x\n sta pagedump,x\n\n inx\n bne :loop\n\n sta $c002 ;read mainmem\n\n rts\n\n* Read original page 0 from pagedump, not the current page 0\n\n:pagezero\n ldx #0\n:loop0 lda zerodump,x\n sta pagedump,x\n inx\n bne :loop0\n rts\n\n*-------------------------------\n* 40-column text base addresses\n*-------------------------------\n\ntextl hex 00,80,00,80,00,80,00,80\n hex 28,a8,28,a8,28,a8,28,a8\n hex 50,d0,50,d0,50,d0,50,d0\n\ntexth hex 04,04,05,05,06,06,07,07\n hex 04,04,05,05,06,06,07,07\n hex 04,04,05,05,06,06,07,07\n\n*-------------------------------\n* Hex to ASCII\n*-------------------------------\n\nhextoasc asc \"0123456789ABCDEF\"\n\n*-------------------------------\n*\n*  S T R I N G   D A T A\n*\n*-------------------------------\nSTRpage asc \"Page \"\n db #eol\n\ntitle asc \"PRINCE OF PERSIA Dungeon Builder\"\n db #eol\ndate asc \"7/8/89  Master Copy\"\n db #eol\nplease asc \"PLEASE DO NOT COPY!!\"\n db #eol\ncopyr asc \"Copyright 1989 Jordan Mechner\"\n db #eol\n\n*-------------------------------\nTITLESCREEN\n jsr pretext\n jsr textcls\n\n jsr home\n jsr normal\n\n lda #title\n ldx #>title\n jsr prline\n\n ldx #3\n jsr setline\n lda #date\n ldx #>date\n jsr prline\n\n ldx #11\n jsr setline\n lda #please\n ldx #>please\n jsr prline\n\n ldx #23\n jsr setline\n lda #copyr\n ldx #>copyr\n jsr prline\n\n jsr waitloop\n sta $c010\n rts\n\n*-------------------------------\n lst\neof ds 1\n usr $a9,2,$a00,*-org\n lst off\n"
  },
  {
    "path": "04 Support/MakeDisk/EDSORC/EDITOR.S",
    "content": "* ed/editor\nDunjDisk = 1 ;0 for palace\norg = $9600\n lst off\n*-------------------------------\n*\n*  E D I T O R\n*\n*-------------------------------\n org org\n\n jmp EDSTART\n JMP CLRBLOCK\n jmp RELINK\n ds 3\n ds 3\n\n*-------------------------------\n* MENU DATA\n do DunjDisk\nmenuType ;(BlueType)\n hex 0d,12,02,0b,06,0f,04,10,11,0e\n hex 01,00,14,00,03,13,00,00,0c,09\n hex 00,00,00,00,0a,15,16,0c,0c,08\n\nmenuSpec  ;(BlueSpec)\n hex 00,00,00,00,00,00,02,00,02,00\n hex 00,00,00,00,00,00,02,01,01,00\n hex 00,00,00,03,00,00,00,02,00,00\n else\n\nmenuType ;(BlueType)\n hex 0d,12,02,0b,06,0f,04,10,00,0e\n hex 01,00,14,1c,03,13,00,00,0c,09\n hex 00,00,00,0a,19,1a,1b,0c,0c,08\n\nmenuSpec  ;(BlueSpec)\n hex 00,00,00,00,00,00,02,00,03,00\n hex 00,00,00,00,00,00,02,01,01,00\n hex 00,00,00,00,00,00,00,02,00,00\n fin\n\nmenubSpec ;(bLinkIndex)\n hex 00,00,00,00,00,00,00,00,00,00\n hex 00,00,00,00,00,00,00,00,00,00\n hex 02,03,01,00,00,00,00,00,00,00\n\n*-------------------------------\n* \"menubSpec\" is index # of special symbol to\n* appear in this space:\n*\n* 1 = kid\n* 2 = eye\n* 3 = guard\n*\n* \"menuSpec\": for gadgets, initial bluespec value\n*\n* 1 = \"up\"\n* 2 = \"down\"\n*\n* for panels, panel pattern (0,1,2...)\n*\n*-------------------------------\n put eq\n put buildereq\n put movedata\n put eddata\n\n*-------------------------------\n* Local vars\n\n dum locals\n\nTEMPX ds 1\nTEMPY ds 1\nTEMPMX ds 1\nTEMPMY ds 1\nTEMPULX ds 1\nTEMPULY ds 1\nTEMPBX ds 2\nTEMPBY ds 1\nTEMPPX ds 1\nTEMPPY ds 1\nandwhat ds 1\norigscrn ds 1\ntempid ds 1\npropose ds 1\nexistobj ds 1\nexistspec ds 1\ntempdata ds 6\n\n dend\n\nkspeed = 8 ;determine marquee speeds\njspeed = 20 ;in kbd & jstk modes\n\nbkspeed = 15\nbjspeed = 50 ;beth blink speed\n\nboxtimer = 90 ;cursor repeat-move speeds\nbethtimer = 120 ;(higher = slower)\n\nunreqmask = %11011111\n\nbethxco db 0,1,2\nbethoffset db 0,2,4\nbethyco hex 00,08,10,18,20,28,30,38\n\nbethbits hex 01,02,04,08,10,20,40,80\n\n* size:        00,01,02,03,04,05\nrtlist hex 01,01,02,03,04,01\nuplist hex 01,01,01,01,01,02\n\n* special menu symbols\n\nsstartkid = 1\nseye = 2\nsstartguard = 3\n\n*-------------------------------\nctrl = $60\nshift = $20\n\nkleft = $88\nkright = $95\nkup = $8b\nkdown = $8a ;arrows\nkbtn0 = \" \"\nkbtn1 = $8d ;return\n\nkunreq = \"q\"-ctrl\n\n*-------------------------------\n*\n*  NOTE: Editor uses image lists, redraw buffers, etc.\n*  in the approved way -- but only for the background.\n*  The cursor, flashing arrows, and other misc. stuff\n*  (mostly from EDTABLE) are superimposed manually.\n*\n*-------------------------------\nEDSTART jsr INITPOINT\n\n lda #0\n sta THIRD\n sta inmenu\n sta linkmode\n sta blackflag\n\n jsr zerolsts\n jsr zeropeel\n\n lda #1\n sta antcount\n\n jsr getneighs\n\n jsr DoCleanCut\n\n jmp inploop\n\n*-------------------------------\n*\n* Clear scrn & redraw entire b.g.\n*\n*-------------------------------\nDoSure\n jsr sure\n\n jsr zeropeels\n jsr zerored\n\n jsr drawall\n jsr zerolsts\n\n jsr menuspecial\n\n jsr specialsyms\n\n jmp edges\n\n*-------------------------------\n*\n*  I N P U T   L O O P\n*\n*-------------------------------\ninploop\n lda $c000\n sta keypress\n\n lda $c010\n sta keydown\n\n lda keypress\n bpl :j\n\n jsr edkeys ;Always check special keys\n\n jsr actkey\n jmp :cont\n\n:j jsr actjoy\n\n:cont jsr marquee\n jmp inploop\n\n*-------------------------------\n*\n*  E D I T O R   K E Y S\n*\n*-------------------------------\nedkeys lda keypress\n jsr specialk\n\n lda keypress\n cmp #$9b ;esc\n bne :1\n jmp EXIT\n\n:1 cmp #kunreq\n bne :2\n jsr gtone\n jmp UnRequire\n\n:2 cmp #\"0\" ;0-9 set guard prog\n bcc :nonn\n cmp #\"9\"+1\n bcs :nonn\n sec\n sbc #\"0\"\n jmp setguardprog\n\n:nonn\n:rts rts\n\n*-------------------------------\n*\n*  A C T   O N   K E Y P R E S S\n*\n*-------------------------------\nactkey LDY #kspeed\n:0 LDX #0\n:1 DEX\n bne :2\n DEY\n BNE :0\n jmp PMOVE ;Run ant tracks\n\n:2 lda keypress\n BPL :1\n\n CMP #kleft\n BNE :3\n JMP PLEFT\n\n:3 CMP #kright\n BNE :4\n JMP PRIGHT\n\n:4 CMP #kup\n BNE :5\n JMP PUP\n\n:5 CMP #kdown\n BNE :6\n JMP PDOWN\n\n:6 CMP #kbtn1\n BNE :9\n jmp butt1\n\n:9 CMP #kbtn0\n BNE :10\n jmp butt0\n\n:10 RTS\n\n*-------------------------------\n*\n*  A C T   O N   J O Y S T I C K\n*\n*-------------------------------\nactjoy jsr controller\n jsr buttons\n jsr getselect\n\n lda JSTKX\n bpl :1\n\n lda #1\n cmp jlast\n bne :jleft\n\n lda jcount\n beq :jleft1\n dec jcount\n rts\n\n:jleft jsr jmove\n jmp PLEFT\n\n:jleft1 jsr jrepeat\n jmp PLEFT\n\n*-------------------------------\n:1 beq :2\n\n lda #2\n cmp jlast\n bne :jright\n\n lda jcount\n beq :jright1\n dec jcount\n rts\n\n:jright jsr jmove\n jmp PRIGHT\n\n:jright1 jsr jrepeat\n jmp PRIGHT\n\n*-------------------------------\n:2 lda JSTKY\n bpl :3\n\n lda #3\n cmp jlast\n bne :jup\n\n lda jcount\n beq :jup1\n dec jcount\n rts\n\n:jup jsr jmove\n jmp PUP\n\n:jup1 jsr jrepeat\n jmp PUP\n\n*-------------------------------\n:3 beq :nomove\n\n lda #4\n cmp jlast\n bne :jdown\n\n lda jcount\n beq :jdown1\n dec jcount\n rts\n\n:jdown jsr jmove\n jmp PDOWN\n\n:jdown1 jsr jrepeat\n jmp PDOWN\n\n*-------------------------------\n:nomove lda #0\n sta jlast\n\n lda BUTT0\n bpl :nobtn0\n jmp butt0\n\n:nobtn0 lda BUTT1\n bpl :rts\n jmp butt1\n\n:rts rts\n\n*-------------------------------\n*\n*  M A R Q U E E\n*\n*  run marquee\n*\n*-------------------------------\nmarquee dec antcount\n bne :ant1\n\n lda #jspeed\n sta antcount\n\n jmp PMOVE\n\n:ant1 rts\n\n*-------------------------------\n*\n*  J M O V E\n*\n*-------------------------------\njmove sta jlast\n\n lda #boxtimer\n sta jcount\n rts\n\nbmove sta jlast\n\n lda #bethtimer\n sta jcount\n rts\n\njrepeat lda #1\n sta jcount\n rts\n\n*-------------------------------\n*\n*  B U T T O N   0\n*\n*-------------------------------\nbutt0\n\n* In editor: put down/delete piece\n* In editor with links shown: change links\n* In menu: pick up piece & exit menu\n\n lda inmenu\n beq :1\n jmp PICKUP\n\n:1 lda linkmode ;links shown?\n beq :2 ;no\n jmp chglinks\n\n:2 jmp PUT\n\n*-------------------------------\n*\n*  B U T T O N   1\n*\n*-------------------------------\nbutt1\n\n* In editor: go to menu\n* In menu: return to builder\n\n lda inmenu\n beq :1\n jmp EXIT\n\n:1 jmp MENU\n\n*-------------------------------\n* Temp development feature: Remove \"required\" mark from a block\n\nUnRequire\n lda inmenu\n bne :rts\n\n jsr GET\n and #unreqmask\n jmp putblock\n\n:rts\n]rts rts\n\n*-------------------------------\n*\n* C U T\n*\n* Cut to new screen\n*\n*-------------------------------\nCUT lda inmenu\n bne ]rts\n\n jsr calcmat1\n\n LDY #0\n LDA (MATPTR),Y\n BEQ CANTCUT ;Screen 0 doesn't exist (officially)\n\n STA SCRNUM\n\n jsr getneighs\n\n jmp DoCleanCut\n\nCANTCUT jmp rstorptr\n\n*-------------------------------\nCutToMenu\n jsr gr\n\n jsr retrievemenu\n\n jsr zeropeels\n\n jsr PMOVE\n\n lda $c057\n\n rts\n\n*-------------------------------\nDoCleanCut\n jsr gr\n\n lda #$20\n sta PAGE\n jsr DoSure\n\n lda #0\n sta PAGE\n jsr copyscrn\n\n jsr PMOVE\n lda $c057\n\n rts\n\n*-------------------------------\n* DoCut2: no blackout\n\nDoCut2\n jsr DoSure\n\n jsr pageflip\n\n jsr copyscrn\n\n jmp PMOVE\n\n*-------------------------------\n*\n* G E T N E I G H S\n*\n* Get neighboring screen #s\n*\n*-------------------------------\ngetneighs\n ldx #-1\n ldy #0\n jsr getneigh\n sta scrnLeft\n\n ldx #1\n ldy #0\n jsr getneigh\n sta scrnRight\n\n ldx #0\n ldy #-1\n jsr getneigh\n sta scrnAbove\n\n ldx #0\n ldy #1\n jsr getneigh\n sta scrnBelow\n\n* & diagonals\n\n ldx #-1\n ldy #-1\n jsr getneigh\n sta scrnAboveL\n\n ldx #-1\n ldy #1\n jsr getneigh\n sta scrnBelowL\n\n ldx #1\n ldy #-1\n jsr getneigh\n sta scrnAboveR\n\n ldx #1\n ldy #1\n jsr getneigh\n sta scrnBelowR\n\n rts\n\n*-------------------------------\n*\n* I N I T P O I N T\n*\n* initial placement of pointer\n*\n*-------------------------------\nINITPOINT lda virgin ;first time in editor?\n beq :rts ;no\n lda #0\n sta virgin\n\n* Put \"pointer\" (i.e., box) somewhere\n* (X = 0-9, Y = 0-2)\n\n LDA #0\n STA POINTX\n LDA #1\n STA POINTY\n\n LDA #1 ;floor\n STA HELD ;Image id# of object in hand\n lda #0\n sta heldspec\n\n* Put menu pointer in u.l. of menu screen 0\n\n lda #0\n sta savescrn\n sta savepx\n lda #1\n sta savepy\n\n:rts lda #1\n sta size\n jsr gdist\n\n ldx HELD\n lda sizelist,x\n sta size\n rts\n\n*-------------------------------\n*\n* P O I N T E R   L E F T / R I G H T / U P / D O W N\n*\n*-------------------------------\nPLEFT jsr saveptr\n\n LDA POINTX\n SEC\n SBC #1\n BMI :1\n STA POINTX\n\n jsr getsize\n JMP PMOVE\n\n:1 LDA #9\n STA POINTX\n\n jsr getsize\n jmp MLEFT\n\n*-------------------------------\nPRIGHT jsr saveptr\n jsr getdist\n\n LDA POINTX\n CLC\n ADC dright\n CMP #10\n BCS :1\n STA POINTX\n\n jsr getsize\n JMP PMOVE\n\n:1 LDA #0\n STA POINTX\n\n jsr getsize\n jmp MRIGHT\n\n*-------------------------------\nPUP jsr saveptr\n jsr getdist\n\n LDA POINTY\n SEC\n SBC dup\n BMI :1\n STA POINTY\n\n jsr getsize\n JMP PMOVE\n\n:1 LDA #2\n STA POINTY\n\n jsr getsize\n JSR MUP\n jmp CUT\n\n*-------------------------------\nPDOWN jsr saveptr\n\n LDA POINTY\n CLC\n ADC #1\n CMP #3\n BCS :1\n STA POINTY\n\n jsr getsize\n JMP PMOVE\n\n:1 LDA #0\n STA POINTY\n\n jsr getsize\n JSR MDOWN\n jmp CUT\n\n*-------------------------------\n*\n*  S A V E / R E S T O R E   P O I N T E R   P O S N\n*\n*-------------------------------\nsaveptr lda POINTX\n sta TEMPX\n lda POINTY\n sta TEMPY\n\n lda MATX\n sta TEMPMX\n lda MATY\n sta TEMPMY\n\n lda ULX\n sta TEMPULX\n lda ULY\n sta TEMPULY\n\n lda BLOCKX\n sta TEMPBX\n lda BLOCKX+1\n sta TEMPBX+1\n lda BLOCKY\n sta TEMPBY\n\n lda PTRX\n sta TEMPPX\n lda PTRY\n sta TEMPPY\n\n rts\n\n*-------------------------------\nrstorptr lda TEMPX\n sta POINTX\n lda TEMPY\n sta POINTY\n\n lda TEMPMX\n sta MATX\n lda TEMPMY\n sta MATY\n\n lda TEMPULX\n sta ULX\n lda TEMPULY\n sta ULY\n\n lda TEMPBX\n sta BLOCKX\n lda TEMPBX+1\n sta BLOCKX+1\n lda TEMPBY\n sta BLOCKY\n\n lda TEMPPX\n sta PTRX\n lda TEMPPY\n sta PTRY\n\n rts\n\n*-------------------------------\n*\n*  P O I N T E R M O V E\n*\n*-------------------------------\nPMOVE\n jsr sngpeel ;peel off old pointer\n\n jsr zeropeel ;zero just-used peelbuf\n\n DEC THIRD\n BPL :1\n LDA #2\n STA THIRD\n:1\n LDA POINTX\n ASL\n ASL\n STA XCO\n\n LDA #0\n STA OFFSET\n\n LDY POINTY\n LDA BlockBot+1,Y\n STA YCO\n\n LDA #ora\n STA OPACITY\n\n LDA #1\n CLC\n ADC THIRD\n STA IMAGE\n\n jsr seted ;use edtable\n\n jsr layrsave\n jsr addpeel\n\n jsr lay\n\n* Done\n\n jmp pageflip\n\n*-------------------------------\n*\n*  G E T   S I Z E\n*\n*  size cursor to fit object it's holding\n*  (only in menu)\n*\n*-------------------------------\n]rts rts\n\ngetsize lda inmenu\n beq ]rts\n\n jmp gsize\n\n*-------------------------------\n*\n*  G S I Z E\n*\n*  Get size of object under cursor\n*  & move cursor to base piece\n*\n*-------------------------------\ngsize jsr GET ;obj id#\n and #idmask\n sta tempid\n\n tax\n lda sizelist,x\n sta size\n\n lda baselist,x ;is cursor on base piece (l.l)?\n cmp tempid\n beq :rts ;yes--we're OK\n\n* no--move cursor to base piece\n\n sta tempid\n\n lda size\n cmp #5\n bcc :wide\n\n:tall lda POINTY\n clc\n adc posnlist,x\n sta POINTY\n cmp #3\n bcc :rts\n jmp cutdown\n\n:wide lda POINTX\n sec\n sbc posnlist,x\n sta POINTX\n bpl :rts\n jmp cutleft\n\n* Assume that in menu, pieces never\n* overlap screen edges\n\n:rts rts\n\n\n*-------------------------------\ngetdist lda inmenu\n beq :rts\n jmp gdist\n:rts rts\n\ngdist ldx size\n lda uplist,x\n sta dup\n lda rtlist,x\n sta dright\n rts\n\n*-------------------------------\n*\n*  G E T\n*\n*  Return contents of (SCRNUM: POINTX,POINTY) in A\n*  (Sets BlueType, BlueSpec, bLinkIndex and Y)\n*\n*-------------------------------\nGET LDA SCRNUM\n jsr bcalcblue\n\n LDY POINTY\n LDA Mult10,Y\n\n CLC\n ADC POINTX\n\n TAY\n\n LDA (BlueType),Y\n\n RTS\n\n*-------------------------------\n*\n* P I C K U P\n* (in menu)\n*\n*-------------------------------\nPICKUP jsr GET\n and #idmask\n sta HELD\n\n lda (bLinkIndex),y\n sta special ;1=kid, 2=eye, etc.\n\n lda (BlueSpec),y\n sta heldspec\n\n jsr getsize\n\n lda #1\n sta dup\n sta dright\n\n* picked up a special symbol?\n\n lda special\n beq :go\n\n cmp #seye\n bne :2\n\n lda #1\n sta linkmode ;show links\n jmp :go\n\n:2\n\n:go jsr leavem\n jmp CUT\n\n*-------------------------------\n*\n*  C L E A R   M A T\n*\n*  Put object #objid on screen at (POINTX,POINTY)\n*  Pass 1 (clearmat): clear away underlying objects\n*\n*  Return X = 0 if we can do it, -1 if we can't\n*\n*-------------------------------\nclearmat lda SCRNUM\n sta origscrn\n\n lda objid\n pha\n lda POINTX\n pha\n lda POINTY\n pha\n lda MATX\n pha\n lda MATY\n pha\n\n:loop jsr clearsec ;clear this section\n\n ldx objid\n lda linklist,x ;pointer to next section\n bmi :done ;ff is \"end-of-list\" code\n\n sta objid\n jsr getnext ;get position (up or right 1)\n jmp :loop ;& clear next section\n\n:done ldx #0 ;can-do code\n\n lda SCRNUM\n bne :ok\n\n* we ended up on screen 0--can't do it\n\n jsr gtone\n ldx #-1 ;can't-do-it code\n\n:ok lda origscrn\n sta SCRNUM\n\n pla\n sta MATY\n pla\n sta MATX\n pla\n sta POINTY\n pla\n sta POINTX\n pla\n sta objid\n rts\n\n*-------------------------------\n*\n*  P L A C E   M A T\n*\n*  Pass 2: place new object\n*\n*-------------------------------\nplacemat lda SCRNUM\n sta origscrn\n\n lda objid\n pha\n lda POINTX\n pha\n lda POINTY\n pha\n lda MATX\n pha\n lda MATY\n pha\n\n:loop jsr placesec\n\n ldx objid\n lda linklist,x ;pointer to next section\n bmi :end ;ff is \"end-of-list\" code\n\n sta objid\n jsr getnext ;get next section (up or right 1)\n jmp :loop\n\n* Done -- but does this object need floorpiece above?\n\n:end cmp #$fe ;requires floorpiece on top?\n bne :done ;no\n jsr getabove\n\n lda andwhat\n bne :placing\n\n* Removing object -- so unmark extra floorpiece\n* (it's no longer required)\n\n jsr GET\n and #unreqmask ;turn off \"required\" flag\n jsr putblock\n jmp :done\n\n* Placing object -- so mark floorpiece above it\n* (or put a floorpiece there if there isn't one)\n\n:placing jsr GET\n and #idmask\n bne :1\n\n jsr addsqr ;to redraw list\n jsr GET\n lda #1 ;floorpiece\n\n:1 ora #reqmask\n jsr putblock\n\n:done lda origscrn\n sta SCRNUM\n\n pla\n sta MATY\n pla\n sta MATX\n pla\n sta POINTY\n pla\n sta POINTX\n pla\n sta objid\n rts\n\n*-------------------------------\n*\n*  C L E A R   S E C\n*\n*  Clear section; delete links\n*  (If section is part of a composite object, remove\n*  the whole thing)\n*\n*-------------------------------\nclearsec\n lda size\n pha\n lda SCRNUM\n pha\n lda objid\n pha\n lda POINTX\n pha\n lda POINTY\n pha\n lda MATX\n pha\n lda MATY\n pha\n\n jsr gsize ;Get size--move POINTX,Y to base\n\n jsr GET ;base section\n\n jsr deletelink\n\n lda tempid\n sta objid\n\n:loop lda #0\n sta propose ;what we want\n jsr GET\n jsr reqchek ;what we'll settle for\n jsr putblock\n jsr addsqr\n\n ldx objid\n lda linklist,x ;pointer to next section\n bmi :end ;ff is \"end-of-list\" code\n\n sta objid\n jsr getnext ;get next section (up or right 1)\n jmp :loop\n\n:end cmp #$fe ;requires floorpiece on top or at right?\n bne :done ;no\n\n jsr getabove\n jsr GET\n and #unreqmask\n jsr putblock\n\n:done pla\n sta MATY\n pla\n sta MATX\n pla\n sta POINTY\n pla\n sta POINTX\n pla\n sta objid\n pla\n sta SCRNUM\n pla\n sta size\n\n:rts rts\n\n*-------------------------------\n*\n*  P L A C E   S E C\n*\n*-------------------------------\nplacesec lda objid\n and andwhat ;placing or removing?\n sta propose\n jsr GET\n jsr reqchek\n jsr putblock\n\n lda heldspec\n sta (BlueSpec),y ;initial state of gadget\n\n jsr addsqr ;add square to list\n]rts rts\n\n*-------------------------------\n* put A in (BlueType),Y\n* In: A,Y ... trashes X\n\nputblock ldx SCRNUM\n beq ]rts ;not scrn 0\n sta (BlueType),y\n]rts rts\n\n*-------------------------------\n*\n*  A D D   S Q R\n*\n* add this square to redraw buffer\n*\n* In: Y = block index\n*\n*-------------------------------\naddsqr lda SCRNUM\n cmp origscrn\n bne ]rts\naddsqr1\n jsr redsqr ;redraw this square\n\n iny ;& the one to right\n jsr redsqr\n\n tya\n sec\n sbc #10\n tay ;& the one to u.r.\n jsr redsqr\n\n dey ;& the one above\n jsr redsqr\n\n]rts rts\n\n*-------------------------------\nredsqr cpy #30\n bcs ]rts\n\n lda #2\n sta redbuf,y\n sta wipebuf,y\n sta fredbuf,y\n\n lda #63 ;block height\n sta whitebuf,y\n\n rts\n\n*-------------------------------\n*\n*  R E Q  C H E K\n*\n*  In:  A = id # of object currently occupying this space\n*       propose = id # of object we'd like to put here\n*\n*-------------------------------\nreqchek and #reqmask\n bne :requird\n lda propose ;carte blanche\n rts\n\n:requird lda propose\n bne :ok\n lda #1 ;no--make it a floorboard instead\n:ok ora #reqmask ;and mark it\n rts\n\n*-------------------------------\ngetnext lda size\n cmp #5\n bcs tall\n\n:wide inc POINTX\n lda POINTX\n cmp #10\n bcs cutrt\n rts\n\ngetabove\ntall dec POINTY\n bmi cutup\n rts\n\n*-------------------------------\ngetscrn jsr getscrn1\n sta SCRNUM\n rts\n\ngetscrn1 lda MATX\n bmi :1\n cmp #31\n bcs :1\n lda MATY\n bmi :1\n cmp #31\n bcs :1 ;off edge?\n jsr calcmat1\n ldy #0\n lda (MATPTR),y\n rts\n:1 lda #0\n rts\n\ncutleft lda POINTX\n clc\n adc #10\n sta POINTX\n dec MATX\n jmp getscrn\n\ncutdown lda POINTY\n sec\n sbc #3\n sta POINTY\n inc MATY\n jmp getscrn\n\ncutrt lda #0\n sta POINTX\n inc MATX\n jmp getscrn\n\ncutup lda #2\n sta POINTY\n dec MATY\n jmp getscrn\n\n*-------------------------------\n* set kid starting block\n\nsetstart\n lda KidStartScrn\n cmp SCRNUM ;this screen?\n bne :cont\n\n ldy KidStartBlock\n jsr addsqr1 ;for redraw\n:cont\n jsr GET\n cpy KidStartBlock ;kid already here?\n bne :1 ;no\n;yes--toggle face\n lda KidStartFace\n eor #$ff\n sta KidStartFace\n jmp :2\n\n:1 lda #-1\n sta KidStartFace\n\n sty KidStartBlock\n\n lda SCRNUM\n sta KidStartScrn\n\n:2 jmp addsqr1 ;& redraw this block\n\n*-------------------------------\n* set guard starting block\n* repeat clicks change guard position & delete guard\n\nsetguard\n ldx SCRNUM\n lda GdStartBlock-1,x ;previous starting posn for this scrn\n cmp #30\n bcs :cont ;none\n\n tay\n jsr addsqr1 ;redraw this square too\n\n:cont\n jsr GET\n tya\n\n ldx SCRNUM\n cmp GdStartBlock-1,x\n bne :1\n\n lda GdStartFace-1,x\n bmi :3\n;3rd press--delete guard\n lda #30 ;o.s.\n bne :4\n\n:3 eor #$ff\n sta GdStartFace-1,x\n jmp :2\n\n:1 lda #-1\n sta GdStartFace-1,x\n\n tya\n:4 sta GdStartBlock-1,x\n\n:2 jmp addsqr1 ;& redraw this block\n\n*-------------------------------\n*\n* P U T\n*\n* Put down a copy of the piece you're holding\n* (If this space already contains a piece identical to the one\n* you're holding, then instead of placing it, remove it)\n*\n* Complication: if object partially overlaps a large-sized\n* object, we have to delete the whole object, not just those\n* portions overlapped by the new one.\n*\n* Also, if object is potentially linkable, assign it a\n* link table index; if deleting or replacing a linkable\n* object, remove its existing link table entry\n*\n*-------------------------------\nSaveSpec ds 1\n\nPUT\n lda heldspec\n sta SaveSpec\n\n lda special\n cmp #sstartkid\n bne :1\n\n jsr setstart ;set starting block\n jmp Cont1\n\n:1 cmp #sstartguard\n bne :2\n\n jsr setguard\n jmp Cont1\n\n:2\n lda #$ff\n sta andwhat ;ff if placing, 00 if removing\n\n jsr GET\n and #idmask\n sta existobj ;existing objid\n lda (BlueSpec),y\n sta existspec ;existing spec\n\n lda HELD\n sta objid\n\n cmp #panelwof\n beq SpPanel ;special handling for panels\n\n do DunjDisk\n else\n cmp #block\n beq SpBlock ;& blocks\n fin\n\n cmp #floor\n bne :11\n jmp SpFloor ;& for floorpieces placed on panels\n:11\n cmp #gate\n bne :12\n jmp SpGate ;& for gates\n:12\n cmp #flask\n bne :10\n jmp SpFlask ;& for flasks\n:10\n cmp #space\n bne :15\n jmp SpSpace ;& for back panels\n\n:15 cmp #exit\n bne :16\n jmp SpExit\n:16\n\n* Everything else: just place or remove\n\nContinue lda existobj\n cmp objid\n bne Place\n\n]remove lda #0\n sta andwhat\n\nPlace jsr clearmat ;update matrix (and keep track of which\n  ;squares will need to be redrawn)\n cpx #-1\n beq Cont1 ;can't do it\n\n jsr placemat\n\n jsr assignlink\n\nCont1 lda SaveSpec\n sta heldspec\n\n jmp UpdateBG\n\n*-------------------------------\n* Placing gate on gate?\n\nSpGate\n lda existobj\n cmp #gate\n bne Continue\n;Yes--just change state\n lda existspec\n eor #3 ;toggle 1/2\n;(Preserve existing links)\n sta (BlueSpec),y\n\n jsr addsqr1\n]cont1 jmp Cont1\n]cont jmp Continue\n]place jmp Place\n*-------------------------------\n*  Placing a block\n\nSpBlock\n lda existobj\n cmp #block\n bne ]cont\n\n lda existspec ;existing pattern\n bne ]remove\n lda #1\n sta heldspec\n bne ]place\n\n*-------------------------------\n*  Placing a panel\n\nSpPanel\n lda existobj\n cmp #panelwof\n beq :ispanel\n cmp #panelwif\n beq :ispanel\n\n* put panel on top of something else\n\n cmp #floor\n bne ]place ;panelwof\n\n lda #panelwif\n sta objid\n bne ]place ;panelwif\n\n* put panel on top of panel\n\n:ispanel lda heldspec ;desired pattern\n cmp existspec ;existing pattern\n beq :rempanel\n\n* change only pattern\n\n lda existobj\n sta objid\n bne ]place\n\n* remove panel\n\n:rempanel lda existobj\n cmp #panelwof\n beq ]remove\n\n lda #floor\n sta objid\n bne ]place ;but leave floorpiece\n\n* putting floor on top of panel\n\nSpFloor\n lda existobj\n cmp #panelwof\n beq :addfloor\n cmp #panelwif\n beq :remfloor\n\n bne ]cont ;continue as usual\n\n:addfloor lda #panelwif\n sta objid\n lda existspec\n sta heldspec\n jmp ]place\n\n:remfloor lda #panelwof\n sta objid\n lda existspec\n sta heldspec\n jmp ]place\n\n*-------------------------------\n* Placing a flask\n\nSpFlask\n lda existobj\n cmp #flask\n beq :y\n\n lda #0\n sta existspec\n jmp ]cont\n:y ;Yes--just change state\n lda existspec\n clc\n adc #1\n\n cmp #8\n bcc :07\n lda #0\n\n:07 sta (BlueSpec),y\n\n lda #1\n sta blackflag ;redraw entire screen\n\n jmp ]cont1\n\n]cont jmp Continue\n]place jmp Place\n*-------------------------------\n* Placing a back wall pattern on space or floor\n\nSpSpace\n lda existobj\n cmp #space\n beq :1\n cmp #floor\n bne ]cont\n:1\n ldx heldspec ;desired pattern\n beq ]cont\n sta objid\n cpx existspec ;existing pattern\n bne ]place ;add pattern\n lda #0\n sta heldspec\n beq ]place ;remove pattern\n\n*-------------------------------\n* Exit on exit-->window\n\nSpExit\n lda existobj\n cmp #exit\n bne ]cont\n lda #window\n sta objid\n bne ]cont\n\n*-------------------------------\n*\n* U P D A T E   B G\n*\n* We've added or deleted or changed an object --\n* redraw as much of the screen as we have to\n*\n*-------------------------------\nUpdateBG\n lda blackflag\n beq :1\n\n lda #0\n sta blackflag\n;if blackflag set,\n jmp DoCut2 ;redraw entire scrn\n\n:1\n jsr sngpeel ;peel off cursor\n jsr zeropeel\n jsr upscrn ;update screen squares listed in table\n\n jsr pageflip\n\n jsr sngpeel\n jsr zeropeel\n jsr upscrn ;other page too\n\n jsr PMOVE\n jmp PMOVE ;put cursor back on both scrns\n\n*-------------------------------\nupscrn jsr fast\n jsr drawall\n\n jsr zerolsts\n\n jsr specialsyms ;add special symbols\n\n jmp edges ;add edge arrows\n\n*-------------------------------\n*\n*  A S S I G N   L I N K   I N D E X\n*\n* In: objid\n*     Results of GET\n* Out: X = link index\n*\n* Link table setup is different in editor than in game.\n* Each controller (e.g. pressplate) and each gadget\n* (e.g. portcullis) gets 4 bytes in link tables:\n*\n* L1 ... bLINK1,x     (where x=link index, 0-127)\n* L2 ... bLINK2,x\n* L3 ... bLINK3,x\n* L4 ... bLINK4,x\n*\n* 21 bits of L1-L3 indicate whether each of the 21\n* symbols is on or off (0=off) for this piece.\n* Bit 7 of L4 indicates whether this link index has been\n* assigned (0=free).\n* Bits 1-6 of L4, and bit 7 of L1,L2 & L3, are unused for now.\n*\n*-------------------------------\nassignlink\n\n* First delete existing link index for this space (if any)\n\n jsr GET\n jsr deletelink\n\n* Then create new link if appropriate\n\n sty ysave\n\n lda objid\n and andwhat\n tax\n lda linkable,x ;in eddata\n beq :rts ;object unlinkable\n\n* Search thru link table to find first empty space\n\n ldx #0\n:loop lda bLINK4,x\n bpl :gotit\n inx\n bpl :loop\n\n* x=128 -- link table full\n\n jmp gtone\n\n:gotit lda bLINK4,x\n ora #$80 ;set L4 hibit\n sta bLINK4,x\n\n lda #0\n sta bLINK1,x\n sta bLINK2,x\n sta bLINK3,x ;zero L1-3\n\n txa\n ldy ysave\n sta (bLinkIndex),y ;link index\n\n* Link complete\n\n:rts rts\n\n*-------------------------------\n*\n*  D E L E T E   L I N K\n*\n*-------------------------------\ndeletelink\n lda (bLinkIndex),y\n bmi :rts ;unlinked\n\n tax ;link index\n\n lda #$7f\n and bLINK4,x ;clear hibit of bLINK4\n sta bLINK4,x ;to clear entry in linktable\n\n lda #$ff\n sta (bLinkIndex),y ;and unlink object\n\n:rts rts\n\n*-------------------------------\n*\n*  C L E A R   B L O C K\n*\n*  In: SCRNUM\n*\n*-------------------------------\nCLRBLOCK lda SCRNUM\n jsr bcalcblue ;get bLinkIndex too (bBLUESPEC)\n\n LDY #29\n\n:1 lda #0 ;initialize 30 spaces\n sta (BlueType),Y ;with linkless blanks\n\n lda #$ff\n sta (bLinkIndex),y\n sta (BlueSpec),y\n\n DEY\n BPL :1\n\n* clr guard start posn\n\n ldx SCRNUM\n lda #30\n sta GdStartBlock-1,x\n lda #1\n sta GdStartProg-1,x\n\n]rts RTS\n\n*-------------------------------\n* Set guard program #\n* In: A = prog # (0-9)\n\nsetguardprog\n ldx SCRNUM\n sta GdStartProg-1,x\n lda #1\n sta blackflag ;redraw entire scrn\n jmp UpdateBG\n\n*-------------------------------\n*\n*  M O V E   L / R / U / D\n*\n* Move from one screen to another\n*\n*-------------------------------\nMLEFT lda inmenu\n bne :1\n jsr mleft\n jmp CUT\n:1 rts\n\nMRIGHT lda inmenu\n bne :1\n jsr mright\n jmp CUT\n:1 rts\n\nMUP lda inmenu\n bne :1\n jmp mup\n:1 jmp menuup\n\nMDOWN lda inmenu\n bne :1\n jmp mdown\n:1 jmp menudown\n\n*-------------------------------\nmenuup lda SCRNUM\n sec\n sbc #1\n sta nextscrn\n rts\n\nmenudown lda SCRNUM\n clc\n adc #1\n sta nextscrn\n rts\n\n*-------------------------------\n*\n* M E N U\n*\n* Cut to menu screen\n*\n*-------------------------------\nMENU lda #1\n sta inmenu\n lda #0\n sta linkmode\n\n jsr switchem\n\n lda SCRNUM\n sta nextscrn\n\n jsr bcalcblue\n\n jmp CutToMenu\n\n*-------------------------------\nswitchem ldx savescrn\n lda SCRNUM\n sta savescrn\n stx SCRNUM\n\n ldx savepx\n lda POINTX\n sta savepx\n stx POINTX\n\n ldx savepy\n lda POINTY\n sta savepy\n stx POINTY\n\n rts\n\n*-------------------------------\n*\n* L E A V E M\n*\n* Leave menu\n* (pass object id# in HELD)\n*\n*-------------------------------\nleavem jsr switchem\n\n lda #0\n sta inmenu\n rts\n\n*-------------------------------\n*\n* E X I T\n*\n* Back to builder (make sure we're out of menu first)\n*\n*-------------------------------\nEXIT lda inmenu\n beq :1\n jsr leavem\n\n:1 jmp rtnbuild\n\n*-------------------------------\n*\n*  E D G E S\n*\n*-------------------------------\nedges\n lda inmenu\n bne :rts\n\n lda SCRNUM\n sta number\n jsr prscrnum ;print screen # at u.l.\n\n ldx SCRNUM\n lda GdStartBlock-1,x\n cmp #30\n bcs :99 ;no guard on this screen\n lda GdStartProg-1,x\n cmp #10\n bcc :ok ;correct screens created w/earlier versions\n lda #1 ;of editor--default to 1\n sta GdStartProg-1,x\n:ok sta number\n jsr prgdprog ;print guard prog # in l.l.\n\n:99 lda SCRNUM\n jsr getneighs\n\n lda scrnRight\n beq :1\n jsr rtedge\n\n:1 lda scrnLeft\n beq :2\n jsr leftedge\n\n:2 lda scrnBelow\n beq :3\n jsr botedge\n\n:3 lda scrnAbove\n beq :4\n jsr topedge\n:4\n\n:rts\n]rts rts\n\n*-------------------------------\n*\n* S P E C I A L   S Y M S\n*\n* Add special symbols (kid, guard, etc.)\n* not covered by FRAMEADV\n*\n*-------------------------------\nspecialsyms\n jsr AddKid\n jsr AddGuard\n rts\n\n*-------------------------------\nAddKid\n lda KidStartScrn\n cmp SCRNUM ;this screen?\n bne ]rts\n\n lda KidStartBlock\n jsr getxy\n\n lda KidStartFace\n eor #$ff\n sta OPACITY\n\n ldx #sstartkid\n jmp drawmenusym\n\nAddGuard\n ldx SCRNUM\n lda GdStartBlock-1,x\n cmp #30\n bcs ]rts\n\n jsr getxy\n\n ldx SCRNUM\n lda GdStartFace-1,x\n eor #$ff\n sta OPACITY\n\n ldx #sstartguard\n jmp drawmenusym\n\n*-------------------------------\n* In: A = block # (0-29)\n* Out: XCO, YCO\n\ngetxy\n jsr unindex\n\n asl\n asl\n sta XCO\n\n lda BlockBot+1,x\n sta YCO\n rts\n\n*-------------------------------\n*\n* C H A N G E   L I N K S\n*\n*-------------------------------\nchglinks\n jsr GET\n and #idmask\n sta objid\n lda (bLinkIndex),y\n ;sta objspec\n bmi :skipit ;unlinkable object\n sta linkindex\n\n jmp bethmode\n\n:skipit rts\n\n*-------------------------------\n*\n*  B E T H   M O D E\n*\n* Within the selected block:\n*  Jstk moves blinking square (Beth) U-D, L-R\n*  btn 0 adds/removes symbol\n*  btn 1 exits link change mode\n*\n*-------------------------------\nbethmode\n jsr initbeth ;start in l.r\n\n:input lda $c000\n sta keypress\n bpl :nokey\n\n jsr edkeys ;always!\n\n:nokey lda joyon\n beq :k\n\n:j jsr bethjoy\n jsr blinkbeth\n\n lda BUTT1\n bpl :input\n bmi exitbeth ;exit link change mode\n\n:k jsr bethkbd\n\n lda BUTT1\n bpl :input\n bmi exitbeth ;exit link change mode\n\n*-------------------------------\nexitbeth jsr sngpeel\n jsr pageflip\n jsr sngpeel ;take off beth\n\n jsr zeropeels\n\n jsr PMOVE\n jmp PMOVE ;put cursor back\n\n*-------------------------------\ninitbeth\n lda #0 ;start in l.r.\n sta bethx ;0-2\n sta bethy ;0-6\n lda #1\n sta bethstatus ;on\n sta antcount\n rts\n\n*-------------------------------\nblinkbeth\n dec antcount\n bne :ant1\n\n lda #bjspeed\n sta antcount\n\n lda bethstatus\n eor #1\n sta bethstatus ;1/0\n\n jmp movebeth\n:ant1 rts\n\n*-------------------------------\nbethkbd ;someday\n\n*-------------------------------\nbethjoy jsr controller\n jsr buttons\n jsr getselect\n\n lda JSTKX\n bpl :1\n\n lda #1\n cmp jlast\n bne :jleft\n\n lda jcount\n beq :jleft1\n dec jcount\n rts\n\n:jleft jsr bmove\n jmp bethl\n\n:jleft1 jsr jrepeat\n jmp bethl\n\n*-------------------------------\n:1 beq :2\n\n lda #2\n cmp jlast\n bne :jright\n\n lda jcount\n beq :jright1\n dec jcount\n rts\n\n:jright jsr bmove\n jmp bethr\n\n:jright1 jsr jrepeat\n jmp bethr\n\n*-------------------------------\n:2 lda JSTKY\n bpl :3\n\n lda #3\n cmp jlast\n bne :jup\n\n lda jcount\n beq :jup1\n dec jcount\n rts\n\n:jup jsr bmove\n jmp bethu\n\n:jup1 jsr jrepeat\n jmp bethu\n\n*-------------------------------\n:3 beq :nomove\n\n lda #4\n cmp jlast\n bne :jdown\n\n lda jcount\n beq :jdown1\n dec jcount\n rts\n\n:jdown jsr bmove\n jmp bethd\n\n:jdown1 jsr jrepeat\n jmp bethd\n\n*-------------------------------\n:nomove lda #0\n sta jlast\n\n lda BUTT0\n bmi bethbtn0\n\n rts\n\n*-------------------------------\n* Turn this symbol on/off\n\nbethbtn0\n jsr togglebit\n\n ldy POINTY\n lda POINTX\n clc\n adc Mult10,y\n tay ;block index\n jsr redsqr\n\n lda SCRNUM\n jsr bcalcblue\n\n lda (bLinkIndex),y\n sta objspec\n\n* update both scrns\n\n jsr sngpeel ;peel off cursor\n jsr zeropeel\n jsr upscrn ;update screen squares listed in table\n\n jsr redrawbeth\n\n jsr pageflip\n\n jsr sngpeel\n jsr zeropeel\n jsr upscrn ;other page too\n\n jsr redrawbeth\n\n* put back beth cursor\n\n jsr movebeth\n jmp movebeth\n\n*-------------------------------\ntogglebit\n ldx bethy\n lda bethbits,x ;bitmask--changing bit = 1, others 0\n ldx linkindex\n\n ldy bethx\n beq :L1\n cpy #1\n beq :L2\n\n:L3 eor bLINK3,x\n sta bLINK3,x\n rts\n\n:L1 eor bLINK1,x\n sta bLINK1,x\n rts\n\n:L2 eor bLINK2,x\n sta bLINK2,x\n:rts rts\n\n*-------------------------------\n* beth l,r,u,d\n\nbethl lda bethx\n beq :rts\n dec bethx\n\n:rts jmp movebeth\n\nbethr lda bethx\n cmp #2\n bcs :rts\n inc bethx\n\n:rts jmp movebeth\n\nbethu lda bethy\n cmp #6\n bcs :rts\n inc bethy\n:rts jmp movebeth\n\nbethd lda bethy\n beq :rts\n dec bethy\n:rts jmp movebeth\n\n*-------------------------------\nmovebeth\n jsr sngpeel ;peel off old beth\n jsr zeropeel\n\n lda POINTX\n asl\n asl\n ldx bethx\n clc\n adc bethxco,x\n sta XCO\n\n lda bethoffset,x\n sta OFFSET\n\n ldx POINTY\n lda BlockBot+1,x\n ldx bethy\n sec\n sbc bethyco,x\n sta YCO\n\n lda bethstatus\n beq :bethoff\n\n* Beth on: draw symbol normal or inverse depending\n* on what's underneath\n\n jsr getbit\n beq :norm\n\n:inv jsr invbethsym\n jmp pageflip\n\n:norm jsr drawbethsym\n\n* Beth off: invisible\n\n:bethoff jmp pageflip\n\n*-------------------------------\n* Get bit -- 0 or nonzero\n\ngetbit ldx bethy\n lda bethbits,x\n ldx linkindex\n ldy bethx\n beq :L1\n dey\n beq :L2\n:L3 and bLINK3,x\n rts\n:L1 and bLINK1,x\n rts\n:L2 and bLINK2,x\n rts\n\n*-------------------------------\nseted\n jsr zerocrop\n\n lda #edtable\n sta TABLE\n lda #>edtable\n sta TABLE+1\n rts\n\n*-------------------------------\nzerocrop\n lda #0\n sta TOPCUT\n sta LEFTCUT\n\n lda #40\n sta RIGHTCUT\n rts\n\n*-------------------------------\n*\n*  R E D R A W   B E T H\n*\n* In: POINTY (0-2)\n*     POINTX (0-9)\n*     objspec\n*\n*-------------------------------\nredrawbeth\n lda bethx\n pha\n lda bethy\n pha\n\n lda POINTX\n asl\n asl\n sta XCO\n\n lda #0\n sta OFFSET\n\n lda POINTY\n tay\n lda BlockBot+1,y\n sta loy\n\n jsr drawallsymb\n\n:done pla\n sta bethy\n pla\n sta bethx\n\n rts\n\n*-------------------------------\n*\n*  R E L I N K\n*\n*  Emergency measure should link data get messed up\n*  Erases all links\n*\n*-------------------------------\nRELINK\n; jsr showpage\n\n* Step 1: clear link tables\n\n jsr clrlinks\n\n* Step 2: go through every object in every screen\n* and assign a new link index to every linkable object\n\n lda #0 ;running counter (points to\n sta linkindex ;first available link index)\n\n lda SCRNUM\n pha\n\n lda NUMNEXT\n sec\n sbc #1\n sta SCRNUM\n\n:loop jsr RelinkScrn ;do a screen\n\n dec SCRNUM\n bne :loop\n\n pla\n sta SCRNUM\n rts\n\n*-------------------------------\nRelinkScrn\n lda SCRNUM\n jsr bcalcblue\n\n ldy #29\n\n:loop lda (BlueType),y\n and #idmask ;objid\n tax\n lda linkable,x ;in eddata\n beq :nolink ;object unlinkable\n\n lda linkindex\n bmi :nolink ;only space for 128 links\n\n sta (bLinkIndex),y ;link index\n tax\n\n lda #$80 ;set hibit\n sta bLINK4,x ;of bLINK4\n\n inc linkindex\n bne :next\n\n:nolink lda #$ff ;no link\n sta (bLinkIndex),y\n:next\n dey\n bpl :loop\n\n]rts rts\n\n*-------------------------------\n lst\neof ds 1\n usr $a9,25,$0000,*-org\n lst off\n"
  },
  {
    "path": "04 Support/MakeDisk/EDSORC/EDMASTER.S",
    "content": "* edmaster\nedfirst = 1\norg = $f900\n lst off\n*-------------------------------\n*\n*   M  A  S  T  E  R\n*\n*   (version for editor disk)\n*\n*-------------------------------\n org org\n\n jmp FIRSTBOOT\n jmp LOADLEVEL\n jmp RELOAD1\n jmp RELOAD2\n jmp RELOAD3 ;1st 5 entry points are same as in game version\n\n jmp REBOOT\n jmp GOBUILD\n jmp GOGAME\n jmp WRITEDIR\n jmp READDIR\n\n jmp SAVELEVEL\n jmp SAVELEVELG\n jmp SCREENDUMP\n\n*-------------------------------\n put eq\n\ndevelopment = 1\n\n*-------------------------------\n* File equates\n\ntopctrl = $2000\nbuilder = $8400\nMdebugs = $4c00 ;mainmem, destined for $fc00 aux\n\ncoldgame = topctrl\nwarmgame = coldgame+3\n\ncoldbuild = builder\nwarmbuild = coldbuild+3\n\n dum Mdebugs\nshowpage ds 3\ndebugkeys ds 3\nmoveauxlc ds 3\n dend\n\nBbundID = BBundID\n\nPOPside1 = $a9\nPOPside2 = $ad ;game\n\n*-------------------------------\nbreak = $fa59\n\nrealreset = $300\n\n*-------------------------------\n* RW18 zero page vars\n\nslot = $fd\ntrack = $fe\nlastrack = $ff\n\n*-------------------------------\n* local vars\n\nlocals = $f0\n\n dum locals\n\n]dest ds 2\n]source ds 2\n]endsourc ds 2\n\n dend\n\nparams = $3f0\n\n*-------------------------------\n* Coordinates of default load-in level\n\nfirstlevel db 33,0,30,0\n\n*-------------------------------\n*\n* Notes:\n*\n* Game & builder code sits in auxmem & aux l.c. and uses\n* aux z.p.\n*\n* Routines in main l.c. (including MASTER and HIRES)\n* are called via intermediary routines in GRAFIX (in auxmem).\n*\n* RW18 sits in bank 1 of main language card;\n* driveon switches it in, driveoff switches it out.\n*\n*-------------------------------\n*\n*  F I R S T B O O T\n*\n*-------------------------------\nFIRSTBOOT\n jsr setaux\n jsr setreset ;in auxmem\n\n jsr setmain\n jsr setreset ;in maimmem\n\nboot\n jsr setaux\n\n lda #$a9 ;side 1\n sta BbundID\n\n jsr loadcommon1 ;tracks 2-3 (2 tracks)\n\n* boot builder\n\n jsr bootbuilder\n jsr xtitle\n jmp coldbuild\n\n*-------------------------------\n* coldstart builder\n\nbootbuilder\n jsr loadbuild1 ;tracks 4-6 (3 tracks)\n jsr loadcommon2 ;tracks 11-12 (chtable3; 2 tracks)\n jsr loadbuild2 ;tracks 22-28 (7 tracks)\n jsr loadgame4\n\n jmp driveoff\n\n*-------------------------------\n*\n*  G O   B U I L D\n*\n*-------------------------------\nGOBUILD\n jsr driveon\n\n jsr copybgmain ;copy bgtable to mainmem\n\n jsr loadbuild2 ;tracks 22-28 (7 tracks)\n\n jsr driveoff\n\n jmp warmbuild\n\n*-------------------------------\n*\n*  G O   G A M E\n*\n*-------------------------------\nGOGAME\n jsr driveon\n\n jsr copybgaux ;copy bgtable to auxmem\n\n jsr loadgame1a\n jsr xfergame\n jsr loadgame3\n jsr loadgame4\n\n jsr driveoff\n\nColdstartGame\n lda #1\n jmp coldgame\n\n*-------------------------------\n*\n*  R E B O O T\n*\n*-------------------------------\nREBOOT jsr driveon\n\n jsr bootbuilder\n jmp warmbuild\n\n*-------------------------------\n*\n*   Q U I C K   R E L O A D S\n*\n*   (for game development)\n*\n*-------------------------------\n*   Reload 1: reload images\n\nRELOAD1\n jsr driveon\n\n jsr loadgame2\n\n jmp driveoff\n\n*-------------------------------\n*   Reload 2: reload code\n\nRELOAD2\n jsr driveon\n\n jsr loadgame1\n jsr loadgame3\n jsr loadgame4\n\n jmp driveoff\n\n*-------------------------------\n*   Reload 3: reload everything but blueprint\n*   (& restart level)\n\nRELOAD3\n jsr driveon\n\n jsr loadgame1\n jsr loadgame2\n jsr loadgame3\n jsr loadgame4\n\n jsr driveoff\n jmp warmgame\n\n*-------------------------------\n*\n* L O A D   C O M M O N\n*\n*-------------------------------\n* load common 1: tracks 1-3 (code)\n\nloadcommon1\n jsr setmain\n\n lda #1\n sta track\n\n jsr rw18\n hex c3,ee\n\n jsr rw18\n hex c4\n hex e0,e1,e2,e3,e4,e5,e6,e7,e8\n hex e9,ea,eb,ec,ed,00,00,00,00\n\n jsr setaux\n\n jsr rw18\n hex c3,0e\n\n rts\n\n*-------------------------------\n* load common 2: tracks 11-12 (chtable3)\n\nloadcommon2\n lda #11\n sta track\n\n jsr setmain\n\n jsr rw18\n hex c3,08\n\n jsr rw18\n hex c4\n hex 1a,1b,1c,1d,1e,1f,00,00,00\n hex 00,00,00,00,00,00,00,00,00\n\n rts\n\n*-------------------------------\n*\n*  L O A D   G A M E\n*\n*-------------------------------\n* load game 1: tracks 3 & 4 (code)\n\nloadgame1\n lda #3\n sta track\n\n jsr setaux\n\n jsr rw18\n hex c3,0e\n\n*-------------------------------\n* load game 1a: track 4 (code)\n\nloadgame1a\n lda #4\n sta track\n\n jsr setaux\n\n jsr rw18\n hex c4\n hex 04,05,06,07,08,09,0a,0b,0c\n hex 0d,20,21,22,23,24,25,26,27\n\n rts\n\n*-------------------------------\n* load game 2: tracks 5-13 (all image tables)\n\nloadgame2\n lda #5\n sta track\n\n jsr setaux\n\n jsr rw18\n hex c3,60\n\n jsr rw18\n hex c3,72\n ;bgtable goes in aux\n jsr setmain\n\n jsr rw18\n hex c3,60\n\n jsr rw18\n hex c3,72\n\n jsr rw18\n hex c3,84\n\n jsr rw18\n hex c3,96\n\n jsr rw18\n hex c3,08\n\n jsr rw18\n hex c4\n hex 1a,1b,1c,1d,1e,1f,a8,a9,aa\n hex ab,ac,ad,ae,af,b0,b1,b2,b3\n\n jsr rw18\n hex c4\n hex b4,b5,b6,b7,b8,b9,ba,bb,bc\n hex bd,be,bf,00,00,00,00,00,00\n\n rts\n\n*-------------------------------\n* load game 3: tracks 13-18 (aux code, chtab4, bgtab2)\n\nloadgame3\n jsr setaux\n\n lda #13\n sta track\n\n jsr rw18\n hex c4\n hex 00,00,00,00,00,00,00,00,00\n hex 00,00,00,96,97,98,99,9a,9b\n jsr rw18\n hex c3,9c ;chtable4.gd\n\n jsr rw18\n hex c3,28\n\n jsr rw18\n hex c3,3a\n\n jsr rw18\n  hex c3,4c\n\n jsr rw18\n hex c3,84 ;bgtable2\n\n rts\n\n*-------------------------------\n* load game 4: tracks 19-21 (aux l.c. bank 2)\n*\n* We can't reach aux l.c. from here, so load code\n* into mainmem hires area\n\nloadgame4\n jsr setmain\n\n lda #19\n sta track\n\n jsr rw18\n hex c4\n hex 00,00,20,21,22,23,24,25,26\n hex 27,28,29,2a,2b,2c,2d,2e,2f\n\n jsr rw18\n hex c4\n hex 00,00,00,00,30,31,32,33,34\n hex 35,36,37,38,39,3a,3b,3c,3d\n\n jsr rw18\n hex c3,3e\n\n* Now have it move itself to aux l.c.\n\n jmp moveauxlc ;still in mainmem\n\n*-------------------------------\n* xfer game:\n* load tracks 7-10 & 12-13 (chtables 1,2 & 5)\n\nxfergame\n lda #7\n sta track\n\n jsr setmain\n\n jsr rw18\n hex c3,60\n\n jsr rw18\n hex c3,72\n\n jsr rw18\n hex c3,84\n\n jsr rw18\n hex c3,96\n\n lda #12\n sta track\n\n jsr rw18\n hex c4\n hex 1a,1b,1c,1d,1e,1f,a8,a9,aa\n hex ab,ac,ad,ae,af,b0,b1,b2,b3\n\n jsr rw18\n hex c4\n hex b4,b5,b6,b7,b8,b9,ba,bb,bc\n hex bd,be,bf,00,00,00,00,00,00\n\n rts\n\n*-------------------------------\n*\n*  L O A D   B U I L D E R\n*\n*-------------------------------\n* load builder 1: tracks 4-6 (common code & bgtable)\n\nloadbuild1\n lda #4\n sta track\n\n jsr setaux\n\n jsr rw18\n hex c4\n hex 04,05,06,07,08,09,0a,0b,0c\n hex 0d,00,00,00,00,00,00,00,00\n\n jsr setmain\n\n jsr rw18\n hex c3,60\n\n jsr rw18\n hex c3,72\n;bgtable goes in main, not aux\n\n lda #18\n sta track\n\n jsr rw18\n hex c3,84 ;bgtable2\n\n rts\n\n*-------------------------------\n* load builder 2: tracks 22-28\n\nloadbuild2\n lda #22\n sta track\n\n jsr setaux\n\n jsr rw18\n hex c3,60\n\n jsr rw18\n hex c3,72\n\n jsr rw18\n hex c3,84\n\n jsr rw18\n hex c3,96\n\n jsr setmain\n\n jsr rw18\n hex c3,ae\n\n jsr setaux\n\n jsr rw18\n hex c4\n hex 2e,2f,30,31,32,33,34,35,36\n hex 00,00,00,00,00,00,00,00,00\n\n jsr rw18\n hex c4\n hex 40,41,42,43,44,45,46,47,48\n hex 49,4a,4b,4c,4d,4e,4f,00,00\n\n rts\n\n*===============================\n*\n*  C O P Y   B G   T A B L E\n*\n*  BGTABLE is loaded into $6000-$9600\n*  Mainmem for builder, aux for game\n*\n*-------------------------------\ncopybgmain\n sta $c003\n sta $c004 ;read aux, write main\ncopybg\n lda #$60\n ldx #$60\n ldy #$96\n jmp MOVEMEM\n\ncopybgaux\n sta $c002\n sta $c005 ;read main, write aux\n\n jmp copybg\n\n*-------------------------------\nsetaux sta $c003\n sta $c005 ;rd/write aux\n rts\n\nsetmain sta $c002\n sta $c004 ;rd/write main\n rts\n\n*-------------------------------\n*\n*  S E T   R E S E T   V E C T O R\n*\n*-------------------------------\nsetreset\n ldx #0\n:loop lda resetroutine,x\n sta realreset,x\n inx\n bne :loop ;move reset routine\n\n lda #realreset\n sta $3f2\n\n lda #>realreset\n sta $3f3 ;reset vector\n;(for development)\n eor #$a5\n sta $3f4 ;power-up byte\n\n lda #break\n sta $3f0\n\n lda #>break\n sta $3f1\n\n rts\n\n*-------------------------------\nresetroutine\n sta $c004 ;RAMWRT off\n sta $c002 ;RAMRD off\n\n lda #break\n sta $3f2\n\n lda #>break\n sta $3f3 ;$fa59: monitor break routine\n\n eor #$a5\n sta $3f4\n\n jmp $fa62 ;reset\n\n*-------------------------------\n*\n*  D R I V E   O N\n*\n*-------------------------------\ndriveon\n\n jsr setaux\n\n* switch in bank 1 (RW18)\n\n bit $c08b\n bit $c08b ;1st 4k bank\n\n* set Bbund ID\n\n lda BbundID\n sta :idbyte\n\n jsr rw18\n hex 07\n:idbyte hex a9\n\n* turn on drive 1\n\n jsr rw18\n hex 00\ndrive hex 01\ndelay hex 00\n rts\n\n*-------------------------------\n*\n*  D R I V E   O F F\n*\n*-------------------------------\ndriveoff jsr rw18\n hex 01\n\n* switch in bank 2\n\n  bit $c083\n bit $c083 ;2nd 4k bank\n\n jmp setaux ;& set auxmem\n\n*-------------------------------\n*\n*  R E A D / W R I T E   D I R E C T O R Y\n*\n*-------------------------------\nREADDIR lda #0\n sta delay\n\n jsr driveon\n\n lda #34\n sta track\n\n jsr rw18\n hex 84 ;readgroup\n hex 70,71,00,00,00,00,00,00,00\n hex 00,00,00,00,00,00,00,00,00\n\n jmp driveoff\n\n*-------------------------------\nWRITEDIR lda #10\n sta delay\n\n jsr driveon\n\n lda #34\n sta track\n\n jsr rw18\n hex 84 ;read unused regions into scratch buffer\n hex 00,00,20,21,22,23,24,25,26\n hex 27,28,29,2a,2b,2c,2d,2e,2f\n\n jsr rw18\n hex 86 ;then write it all out\n hex 70,71,20,21,22,23,24,25,26\n hex 27,28,29,2a,2b,2c,2d,2e,2f\n\n jmp driveoff\n\n*-------------------------------\n*\n*  S E T   1 s t   L E V E L\n*\n*-------------------------------\nset1stlevel\n\n ldx #3\n:loop lda firstlevel,x\n sta params,x\n dex\n bpl :loop\n\n rts\n\n*-------------------------------\n*\n* L O A D / S A V E   L E V E L\n*\n* 2 routines: loadlevel & savelevel\n*\n* These in turn call 4 routines:\n*   rdbluep & wrtbluep (load & save 9-sector blueprint)\n*   rdbinfo & wrtbinfo (load & save 6-sector binfo)\n*\n* In: bluepTRK, bluepREG, binfoTRK, binfoREG\n*\n*   TRK = track # (1-33)\n*   REG = region on track (0-1 for blueprint, 0-2 for binfo)\n*\n* Use $2000 auxmem as scratchpad\n*\n* Load level into \"working blueprint\" buffer in auxmem;\n* game code will make a \"backup copy\" into aux l.c.\n* (which we can't reach from here).\n*\n*-------------------------------\nLOADLEVEL\n lda #0\n sta delay\n jsr driveon\n\n jsr rdbluep\n jsr rdbinfo\n\n jmp driveoff\n\n]sl lda #10\n sta delay\n jsr driveon\n\n jmp wrtbluep\n\nSAVELEVEL\n jsr ]sl\n jsr wrtbinfo\n\n jmp driveoff\n\nSAVELEVELG\n jsr ]sl\n jmp driveoff\n\n*-------------------------------\n* read blueprint\n*-------------------------------\nrdbluep\n jsr setbluep\n bne :reg1\n\n:reg0 jsr rw18\n hex 84\n hex b7,b8,b9,ba,bb,bc,bd,be,bf\n hex 00,00,00,00,00,00,00,00,00\n rts\n\n:reg1 jsr rw18\n hex 84\n hex 00,00,00,00,00,00,00,00,00\n hex b7,b8,b9,ba,bb,bc,bd,be,bf\n rts\n\n*-------------------------------\n* write blueprint\n*-------------------------------\nwrtbluep\n jsr setbluep\n bne :reg1\n\n:reg0 jsr rw18\n hex 84 ;read unused regions into scratch buffer\n hex 00,00,00,00,00,00,00,00,00\n hex 24,25,26,27,28,29,2a,2b,2c\n\n jsr rw18\n hex 86 ;then write it all out\n hex b7,b8,b9,ba,bb,bc,bd,be,bf ;new data\n hex 24,25,26,27,28,29,2a,2b,2c ;old data\n rts\n\n:reg1 jsr rw18\n hex 84\n hex 24,25,26,27,28,29,2a,2b,2c\n hex 00,00,00,00,00,00,00,00,00\n\n jsr rw18\n hex 86\n hex 24,25,26,27,28,29,2a,2b,2c ;old data\n hex b7,b8,b9,ba,bb,bc,bd,be,bf ;new data\n rts\n\n*-------------------------------\nsetbluep\n lda bluepTRK\n sta :track\n\n jsr rw18 ;seek track\n db 2,1\n:track db 34\n\n lda bluepREG\n rts\n\n*-------------------------------\n* read binfo\n*-------------------------------\nrdbinfo\n lda binfoTRK\n sta track ;assume rdbluep has already sought it\n\n lda binfoREG\n beq :reg0\n\n cmp #1\n beq :reg1\n\n:reg2 jsr rw18\n hex 84\n hex 00,00,00,00,00,00\n hex 00,00,00,00,00,00\n hex a6,a7,a8,a9,aa,ab\n rts\n\n:reg1 jsr rw18\n hex 84\n hex 00,00,00,00,00,00\n hex a6,a7,a8,a9,aa,ab\n hex 00,00,00,00,00,00\n rts\n\n:reg0 jsr rw18\n hex 84\n hex a6,a7,a8,a9,aa,ab\n hex 00,00,00,00,00,00\n hex 00,00,00,00,00,00\n rts\n\n*-------------------------------\n* write binfo\n*-------------------------------\nwrtbinfo\n lda binfoTRK\n sta track ;assume rdbluep has already sought it\n\n lda binfoREG\n beq :reg0\n\n cmp #1\n beq :reg1\n\n:reg2 jsr rw18\n hex 84 ;first read into scratchpad...\n hex 24,25,26,27,28,29\n hex 2a,2b,2c,2d,2e,2f\n hex 00,00,00,00,00,00\n\n jsr rw18\n hex 86 ;...then write it all out\n hex 24,25,26,27,28,29\n hex 2a,2b,2c,2d,2e,2f\n hex a6,a7,a8,a9,aa,ab\n rts\n\n:reg1 jsr rw18\n hex 84 ;first read into scratchpad...\n hex 24,25,26,27,28,29\n hex 00,00,00,00,00,00\n hex 2a,2b,2c,2d,2e,2f\n\n jsr rw18\n hex 86 ;...then write it all out\n hex 24,25,26,27,28,29\n hex a6,a7,a8,a9,aa,ab\n hex 2a,2b,2c,2d,2e,2f\n rts\n\n:reg0 jsr rw18\n hex 84 ;first read into scratchpad...\n hex 00,00,00,00,00,00\n hex 24,25,26,27,28,29\n hex 2a,2b,2c,2d,2e,2f\n\n jsr rw18\n hex 86 ;...then write it all out\n hex a6,a7,a8,a9,aa,ab\n hex 24,25,26,27,28,29\n hex 2a,2b,2c,2d,2e,2f\n rts\n\n*-------------------------------\n*\n*  M O V E M E M\n*\n*-------------------------------\nMOVEMEM\n sta ]dest+1\n stx ]source+1\n sty ]endsourc+1\n\n ldy #0\n sty ]dest\n sty ]source\n sty ]endsourc\n\n:loop lda (]source),y\n sta (]dest),y\n\n iny\n bne :loop\n\n inc ]source+1\n inc ]dest+1\n\n lda ]source+1\n cmp ]endsourc+1\n bne :loop\n\n rts\n\n*-------------------------------\n*\n*  T O N E\n*\n*-------------------------------\n dum locals\n]dur ds 1\n dend\n\n]setdur = 10\n]setpitch = 20\n\nTONE\n lda #]setdur\n sta ]dur\n:outloop lda $c030\n ldx #]setpitch\n:midloop ldy #64\n:inloop dey\n bne :inloop\n dex\n bne :midloop\n dec ]dur\n bne :outloop\n rts\n\n*-------------------------------\n* Hires screen dump\n*\n* Dump hires screen to tracks 22-23\n* In: A = page # (00/20)\n*-------------------------------\nSCREENDUMP\n clc\n adc #$20\n sta :sm1\n adc #$12\n sta :sm2\n\n lda BBundID\n pha\n lda #POPside2\n sta BBundID\n\n jsr driveon\n jsr setmain\n\n lda #22\n sta track\n jsr checkdisk\n\n jsr rw18\n hex c5\n:sm1 hex 20\n jsr rw18\n hex c5\n:sm2 hex 32\n\n jsr driveoff\n pla\n sta BBundID\n rts\n\n*-------------------------------\n* check track to make sure it's the right disk\n*-------------------------------\ncheckdisk\n jsr rw18\n hex 84 ;don't advance\n hex 05,00,00,00,00,00,00,00,00\n hex 00,00,00,00,00,00,00,00,00\n rts\n\n*-------------------------------\n\n lst\neof ds 1\n usr $a9,1,$b00,*-org\n lst off\n"
  },
  {
    "path": "04 Support/MakeDisk/EDSORC/MENUDATA.S",
    "content": "* menudata\norg = $c00\n lst off\n*-------------------------------\n org org\nmenuType ;(BlueType)\n hex 0d,12,02,0b,06,0f,04,10,11,0e\n hex 01,00,14,14,03,13,00,00,0c,09\n hex 00,00,00,0a,0a,15,16,0c,0c,08\n\nmenuSpec  ;(BlueSpec)\n hex 00,00,00,00,00,00,02,00,02,00\n hex 00,00,00,01,00,00,02,01,01,00\n hex 00,00,00,00,00,00,00,02,00,00\n\nmenubSpec ;(bLinkIndex)\n hex 00,00,00,00,00,00,00,00,00,00\n hex 00,00,00,00,00,00,00,00,00,00\n hex 02,03,01,00,00,00,00,00,00,00\n\n*-------------------------------\n* \"menubSpec\" is index # of special symbol to\n* appear in this space:\n*\n* 1 = kid\n* 2 = eye\n* 3 = guard\n*\n* \"menuSpec\": for gadgets, initial bluespec value\n*\n* 1 = \"up\"\n* 2 = \"down\"\n*\n* for panels, panel pattern (0,1,2...)\n*\n*-------------------------------\n\nREDBUF ds 30\nFREDBUF ds 30\nFLOORBUF ds 30\nWIPEBUF ds 30\nMOVEBUF ds 30\nOBJBUF ds 30\nWHITEBUF ds 30\nTOPBUF ds 10\nFTOPBUF ds 10\n\n*-------------------------------\n lst\n usr $a9,4,$800,*-org\n lst off\n"
  },
  {
    "path": "04 Support/MakeDisk/EDSORC/TEXTSET.S",
    "content": "* ed/textset\norg = $d800\n lst off\n*-------------------------------\n* Text Set Shapes\n* courtesy of Robert Cook 1/7/88\n*-------------------------------\n org org\n\n dfb datastart-tabstart/2-1\n\ntabstart\n dw Space\n dw ExcPoint\n dw DblQuote\n dw PoundSign\n dw DollarSign\n dw PercentSgn\n dw Ampersand\n dw Apostrophe\n dw LeftPar\n dw RightPar\n dw Asterisk\n dw PlusSign\n dw Comma\n dw MinusSign\n dw Period\n dw Slash\n dw Char0\n dw Char1\n dw Char2\n dw Char3\n dw Char4\n dw Char5\n dw Char6\n dw Char7\n dw Char8\n dw Char9\n dw Colon\n dw SemiColon\n dw LeftCaret\n dw EqualSign\n dw RightCaret\n dw Question\n dw AtSign\n dw CharA\n dw CharB\n dw CharC\n dw CharD\n dw CharE\n dw CharF\n dw CharG\n dw CharH\n dw CharI\n dw CharJ\n dw CharK\n dw CharL\n dw CharM\n dw CharN\n dw CharO\n dw CharP\n dw CharQ\n dw CharR\n dw CharS\n dw CharT\n dw CharU\n dw CharV\n dw CharW\n dw CharX\n dw CharY\n dw CharZ\n dw LeftBkt\n dw BackSlash\n dw RightBkt\n dw PowerSign\n dw UnderLine\n dw Accent\n dw CharLcA\n dw CharLcB\n dw CharLcC\n dw CharLcD\n dw CharLcE\n dw CharLcF\n dw CharLcG\n dw CharLcH\n dw CharLcI\n dw CharLcJ\n dw CharLcK\n dw CharLcL\n dw CharLcM\n dw CharLcN\n dw CharLcO\n dw CharLcP\n dw CharLcQ\n dw CharLcR\n dw CharLcS\n dw CharLcT\n dw CharLcU\n dw CharLcV\n dw CharLcW\n dw CharLcX\n dw CharLcY\n dw CharLcZ\n\n*-------------------------------\n* Data format:\n*   Width (hi nibble = bytes, lo nibble = bits)\n*   Space above character (in lines)\n*   Shape data (width, height, bytes)\n*-------------------------------\ndatastart\n\nSpace hex 0400\n hex 0101\n hex 00\n\nExcPoint hex 0300\n hex 0207\n hex 1C1C1C1C1C001C\n hex 00000000000000\n\nDblQuote hex 1100\n hex 0203\n hex 1C1C1C\n hex 070707\n\nPoundSign hex 2301\n hex 0306\n hex 407C60607E70\n hex 637F71717F38\n hex 010F00000700\n\nDollarSign hex 1500\n hex 0307\n hex 00781C78007800\n hex 033F033F733F03\n hex 00000000000000\n\nPercentSgn hex     1600\n      hex     0307\n          hex     3C663C40607038\n           hex     1C0E07033D663C\n           hex     00000000000000\n\nAmpersand  hex     1400\n           hex     0307\n           hex     781C1C781C1C78\n           hex     070E0000381C0F\n           hex     00000000000000\n\nApostrophe hex     0300\n           hex     0203\n           hex     1C1C1C\n           hex     000000\n\nLeftPar    hex     0500\n           hex     0207\n           hex     70381C1C1C3870\n           hex     00000000000000\n\nRightPar   hex     0500\n           hex     0207\n           hex     1C38707070381C\n           hex     00000000000000\n\nAsterisk   hex     1401\n           hex     0305\n           hex     404C704C40\n           hex     03330F3303\n           hex     0000000000\n\nPlusSign   hex     1201\n           hex     0205\n           hex     60607C6060\n           hex     01010F0101\n\nComma      hex     0405\n           hex     0204\n           hex     1C1C180E\n           hex     00000000\n\nMinusSign  hex     1103\n           hex     0201\n           hex     7C\n           hex     07\n\nPeriod     hex     0305\n           hex     0202\n           hex     1C1C\n           hex     0000\n\nSlash      hex     1200\n           hex     0207\n           hex     0000406070381C\n           hex     0E070301000000\n\nChar0      hex     1200\n           hex     0207\n           hex     70381C1C1C3870\n           hex     03070E0E0E0703\n\nChar1      hex     0500\n           hex     0207\n           hex     707C7070707070\n           hex     00000000000000\n\nChar2      hex     1100\n           hex     0207\n           hex     780C0060381C7C\n           hex     03070701000007\n\nChar3      hex     1100\n           hex     0207\n           hex     7C004070000C78\n           hex     07030103070703\n\nChar4      hex     1400\n           hex     0207\n           hex     406070381C7C00\n           hex     0F0F0E0E0E1F0E\n\nChar5      hex     1100\n           hex     0207\n           hex     7C1C1C7C000C78\n           hex     07000003070703\n\nChar6      hex     1200\n           hex     0207\n           hex     70381C7C1C1C78\n           hex     070000070E0E07\n\nChar7      hex     1100\n           hex     0207\n           hex     7C000040606060\n           hex     07070703010101\n\nChar8      hex     1200\n           hex     0207\n           hex     781C1C781C1C78\n           hex     070E0E070E0E07\n\nChar9      hex     1200\n           hex     0207\n           hex     781C1C78000078\n           hex     070E0E0F0E0703\n\nColon      hex     0301\n           hex     0205\n           hex     3838003838\n           hex     0000000000\n\nSemiColon  hex     0401\n           hex     0207\n           hex     3838003838301C\n           hex     00000000000000\n\nLeftCaret  hex     1001\n           hex     0205\n           hex     40701C7040\n           hex     0300000003\n\nEqualSign  hex     1102\n           hex     0203\n           hex     7C007C\n           hex     070007\n\nRightCaret hex     1001\n           hex     0205\n           hex     1C7040701C\n           hex     0000030000\n\nQuestion   hex     1200\n           hex     0207\n           hex     781C0060600060\n           hex     070E0701010001\n\nAtSign     hex     2300\n           hex     0308\n           hex     60381C1C1C1C3860\n           hex     7F007E73735E007F\n           hex     030E1C1C1C070003\n\nCharA      hex     1200\n           hex     0207\n           hex     781C1C7C1C1C1C\n           hex     070E0E0F0E0E0E\n\nCharB      hex     1200\n           hex     0207\n           hex     7C1C1C7C1C1C7C\n           hex     070E0E030E0E07\n\nCharC      hex     1200\n           hex     0207\n           hex     781C1C1C1C1C78\n           hex     070E0000000E07\n\nCharD      hex     1200\n           hex     0207\n           hex     7C1C1C1C1C1C7C\n           hex     070E0E0E0E0E07\n\nCharE      hex     1100\n           hex     0207\n           hex     7C1C1C7C1C1C7C\n           hex     07000001000007\n\nCharF      hex     1100\n           hex     0207\n           hex     7C1C1C7C1C1C1C\n           hex     07000001000000\n\nCharG      hex     1200\n           hex     0207\n           hex     781C1C1C1C1C78\n           hex     070E000F0E0E07\n\nCharH      hex     1200\n           hex     0207\n           hex     1C1C1C7C1C1C1C\n           hex     0E0E0E0F0E0E0E\n\nCharI      hex     0300\n           hex     0207\n           hex     1C1C1C1C1C1C1C\n           hex     00000000000000\n\nCharJ      hex     1200\n           hex     0207\n           hex     000000001C1C78\n           hex     0E0E0E0E0E0E07\n\nCharK      hex     1300\n           hex     0207\n           hex     1C1C1C7C1C1C1C\n           hex     1C0E0703070E1C\n\nCharL      hex     1100\n           hex     0207\n           hex     1C1C1C1C1C1C7C\n           hex     00000000000007\n\nCharM      hex     1600\n           hex     0307\n           hex     3C7C7C5C1C1C1C\n           hex     70787D6F676060\n           hex     01010101010101\n\nCharN      hex     1400\n           hex     0307\n           hex     3C7C7C5C1C1C1C\n           hex     3838393B3F3E3C\n           hex     00000000000000\n\nCharO      hex     1200\n           hex     0207\n           hex     781C1C1C1C1C78\n           hex     070E0E0E0E0E07\n\nCharP      hex     1200\n           hex     0207\n           hex     7C1C1C7C1C1C1C\n           hex     070E0E07000000\n\nCharQ      hex     1200\n           hex     0208\n           hex     781C1C1C1C1C7800\n           hex     070E0E0E0E0E030F\n\nCharR      hex     1200\n           hex     0207\n           hex     7C1C1C7C1C1C1C\n           hex     070E0E030E0E0E\n\nCharS      hex     1200\n           hex     0207\n           hex     781C3C70001C78\n           hex     070E00030F0E07\n\nCharT      hex     1200\n           hex     0207\n           hex     7C606060606060\n           hex     0F010101010101\n\nCharU      hex     1200\n           hex     0207\n           hex     1C1C1C1C1C1C70\n           hex     0E0E0E0E0E0E03\n\nCharV      hex     1200\n           hex     0207\n           hex     1C1C1C1C1C5C7C\n           hex     0E0E0E0E070301\n\nCharW      hex     2100\n           hex     0307\n           hex     1C1C1C1C1C1C7C\n           hex     0E0E0E0E0E4E7F\n           hex     07070707070300\n\nCharX      hex     1200\n           hex     0207\n           hex     1C1C1C701C1C1C\n           hex     0E0E0E030E0E0E\n\nCharY      hex     1200\n           hex     0207\n           hex     1C1C1C78606060\n           hex     0E0E0E07010101\n\nCharZ      hex     1200\n           hex     0207\n           hex     7C000060381C7C\n           hex     0F0E070100000F\n\nLeftBkt    hex     1000\n           hex     0207\n           hex     7C1C1C1C1C1C7C\n           hex     03000000000003\n\nBackSlash  hex     1200\n           hex     0207\n           hex     1C387060400000\n           hex     0000000103070E\n\nRightBkt   hex     1000\n           hex     0207\n           hex     7C40404040407C\n           hex     03030303030303\n\nPowerSign  hex     1300\n           hex     0203\n           hex     40701C\n           hex     01071C\n\nUnderLine  hex     1506\n           hex     0201\n           hex     7F\n           hex     1F\n\nAccent     hex     0500\n           hex     0203\n           hex     70381C\n           hex     000000\n\nCharLcA    hex     1202\n           hex     0205\n           hex     7800781C78\n           hex     070E0F0E0F\n\nCharLcB    hex     1200\n           hex     0207\n           hex     1C1C7C1C1C1C7C\n           hex     0000070E0E0E07\n\nCharLcC    hex     1202\n           hex     0205\n           hex     781C1C1C78\n           hex     070E000E07\n\nCharLcD    hex     1200\n           hex     0207\n           hex     0000781C1C1C78\n           hex     0E0E0F0E0E0E0F\n\nCharLcE    hex     1202\n           hex     0205\n           hex     781C7C1C78\n           hex     070E0F0007\n\nCharLcF    hex     1100\n           hex     0207\n           hex     60707C70707070\n           hex     07000300000000\n\nCharLcG    hex     1202\n           hex     0207\n           hex     781C1C1C780078\n           hex     0F0E0E0E0F0E07\n\nCharLcH    hex     1200\n           hex     0207\n           hex     1C1C7C1C1C1C1C\n           hex     0000070E0E0E0E\n\nCharLcI    hex     0300\n           hex     0207\n           hex     1C001C1C1C1C1C\n           hex     00000000000000\n\nCharLcJ    hex     0600\n           hex     0209\n           hex     38003838383838381F\n           hex     000000000000000000\n\nCharLcK    hex     0900\n           hex     0207\n           hex     1C1C1C1C7C1C1C\n           hex     00000E0703070E\n\nCharLcL    hex     0300\n           hex     0207\n           hex     1C1C1C1C1C1C1C\n           hex     00000000000000\n\nCharLcM    hex     2102\n           hex     0305\n           hex     7C1C1C1C1C\n           hex     7F0E0E0E0E\n           hex     0307070707\n\nCharLcN    hex     1202\n           hex     0205\n           hex     7C1C1C1C1C\n           hex     070E0E0E0E\n\nCharLcO    hex     1202\n           hex     0205\n           hex     781C1C1C78\n           hex     070E0E0E07\n\nCharLcP    hex     1202\n           hex     0207\n           hex     7C1C1C1C7C1C1C\n           hex     070E0E0E070000\n\nCharLcQ    hex     1202\n           hex     0207\n           hex     781C1C1C780000\n           hex     070E0E0E0F0E0E\n\nCharLcR    hex     1102\n           hex     0205\n           hex     1C7C1C1C1C\n           hex     0700000000\n\nCharLcS    hex     1102\n           hex     0205\n           hex     781C70007C\n           hex     0300010703\n\nCharLcT    hex     1000\n           hex     0207\n           hex     70707C70707060\n           hex     00000300000003\n\nCharLcU    hex     1202\n           hex     0205\n           hex     1C1C1C1C78\n           hex     0E0E0E0E0F\n\nCharLcV    hex     1202\n           hex     0205\n           hex     1C1C1C5C7C\n           hex     0E0E070301\n\nCharLcW    hex     2102\n           hex     0305\n           hex     1C1C1C1C7C\n           hex     0E0E0E4E7F\n           hex     0707070301\n\nCharLcX    hex     1202\n           hex     0205\n           hex     1C1C701C1C\n           hex     0E0E030E0E\n\nCharLcY    hex     1202\n           hex     0207\n           hex     1C1C1C1C780078\n           hex     0E0E0E0E0F0E07\n\nCharLcZ    hex     1202\n           hex     0205\n           hex     7C0060387C\n           hex     0F0701000F\n*-------------------------------\n lst\n usr $a9,28,$800,*-org\n lst off\n"
  },
  {
    "path": "04 Support/MakeDisk/FORMAT18.S",
    "content": " lst off\norg = $300\n*\n* Format an 18 sector disk\n*\n* Call from applesoft:\n*\n* CALL FO,<slot>,<drive>,<BbundID>,\n*         <start track>,<end track>\n*\n* (Writes out whatever happens to be sitting\n*  at $2000.31FF, so do HGR for better results)\n*\nerr_code = 0\n\nget8bit = $E74C\n\nbuffer = $2000\nrw18 = $6900\nslot = $FD\ntrack = $FE\nlastrack = $FF\n\n*-------------------------------\n org org\n*-------------------------------\n\n jsr get8bit\n txa\n asl\n asl\n asl\n asl\n sta slot\n\n jsr get8bit\n stx drive\n\n jsr get8bit\n stx BbundID\n\n jsr get8bit\n txa\n pha\n\n jsr get8bit\n inx\n stx end_track\n\n jsr rw18\n db 7\nBbundID db $11\n\n jsr rw18\n db 0 ;drive on\ndrive db 1,5\n\n lda #$80\n sta lastrack\n jsr rw18\n db 2,0,0 ;recal!\n\n pla\n sta track\n\nloop jsr rw18\n db $05,>buffer ;write\n bcs wp_error\n\n jsr rw18\n db $44 ;verify\n ds 18,0\n bcs vr_error\n\n lda track\n eor #$11\nend_track = *-1\n bne loop\n\n hex 2C\nwp_error lda #1\n hex 2C\nvr_error lda #2\n sta err_code\n\n jsr rw18\n db 1 ;drive off\n rts\n"
  },
  {
    "path": "04 Support/MakeDisk/INSTALL18.S",
    "content": " lst off\n\norg = $1000\nuserbuf = org+$100\nrw18buf = org+$200\n\nrw18 = $6900\nuser = $300\n\nusrads = $B6DA\n\ndevnum = $BF30\ndevcnt = $BF31\ndevlst = $BF32\n\n*-------------------------------\n org org\n*-------------------------------\n*\n* 2/5/87 by Roland Gustafsson\n*\n* Initialize 18 sector user routines!\n*\nstart ldx #$4C\n ldy #<user\n lda #>user\n stx usrads\n sty usrads+1\n sta usrads+2\n\n* Move user routine to both banks\n\n ldy userbuf\n:0 lda userbuf,y\n sta $C004 ;main mem\n sta user-1,y\n sta $C005 ;aux mem\n sta user-1,y\n dey\n bne :0\n\n* Move RW18 to aux mem\n\n ldx #5\n:1 lda rw18buf,y\n:2 sta rw18,y\n dey\n bne :1\n sta $C004\n inc :1+2\n inc :2+2\n sta $C005\n dex\n bne :1\n\n sta $C004\n*\n* Disconnect /RAM\n*\n ldy #0\n:3 lda devlst,Y\n and #$F0\n cmp #$B0\n beq :4\n iny\n cpy devcnt\n beq :3\n blt :3\n bge :9\n*\n:4 lda devlst+1,Y\n sta devlst,Y\n iny\n cpy devcnt\n beq :4\n blt :4\n dec devcnt\n lda devnum\n bne :9\n ldy devcnt\n lda devlst,Y\n sta devnum\n:9 rts\n\n*------------------------------- end of this file\n sav install18\n"
  },
  {
    "path": "04 Support/MakeDisk/S/AUTO.S",
    "content": "* auto\nDemoDisk = 0\norg = $5400\n tr on\n lst off\n*-------------------------------\n*\n*  PRINCE OF PERSIA\n*  Copyright 1989 Jordan Mechner\n*\n*-------------------------------\n org org\n\n jmp AUTOCTRL\n jmp CHECKSTRIKE\n jmp CHECKSTAB\n jmp AUTOPLAYBACK\n jmp CUTCHECK\n\n jmp CUTGUARD\n jmp ADDGUARD\n jmp CUT\n\n*-------------------------------\n lst\n put eq\n lst\n put gameeq\n lst\n put seqdata\n lst\n put soundnames\n lst\n put movedata\n lst off\n\n dum $f0\nztemp ds 1\nprob ds 1\n]cutdir ds 1\nProgStart ds 2\n dend\n\nplus1 db -1,1\nminus1 db 1,-1\n\n* Thresholds for cut to new screen\n\nTopCutEdgePl = ScrnTop+10\nTopCutEdgeMi = ScrnTop-16\nBotCutEdge = ScrnBottom+24\n\nLeftCutEdge = ScrnLeft-4\nRightCutEdge = ScrnRight+4\n\n*-------------------------------\n* Locations of special objects\n\nflaskscrn = 24\nflaskx = 3\nflasky = 0\n\nmirscrn = 4\nmirx = 4\nmiry = 0\n\nswordscrn = 15\nswordx = 1\nswordy = 0\n\nmousetimer = 150 ;from topctrl\n\n*-------------------------------\n* Strike/block ranges\n\nstrikerange1 = 12\nstrikerange2 = 29\nblockrange1 = 0\nblockrange2 = 29 ;from TestStrike\n\n*-------------------------------\n* Other constants:\n\nswordthres = 90\nengardethres = 60\nstrikethres1 = strikerange1\nstrikethres2 = strikerange2\nblockthres1 = 10\nblockthres2 = blockrange2\ntooclose = strikethres1\ntoofar = strikethres2+6 ;min dist at which you can advance safely\noffguardthres = 8\njumpthres = 50\nrunthres = 40\nblocktime = 4\n\n*-------------------------------\n*\n* Fighter params (indexed by guardprog #)\n*\n* strikeprob = probability x255 of striking from ready posn\n* restrikeprob = prob x 255 of restriking after blocking\n* blockprob  = prob x255 of blocking opponent's strike\n* advprob = of advancing to within striking range\n* refractimer = length of refractory period after being hit\n*\n*               0   1   2   3   4   5   6   7   8   9   10  11\n\nstrikeprob\n db 075,100,075,075,075,050,100,220,000,060,040,060\nrestrikeprob\n db 000,000,000,005,005,175,020,010,000,255,255,150\nblockprob\n db 000,150,150,200,200,255,200,250,000,255,255,255\nimpblockprob\n db 000,075,075,100,100,145,100,250,000,145,255,175\nadvprob\n db 255,200,200,200,255,255,200,000,000,255,100,100\nrefractimer\n db 020,020,020,020,010,010,010,010,000,010,000,000\nspecialcolor\n db 000,000,000,001,000,001,001,000,000,000,000,001\nextrastrength\n db 000,000,000,000,001,000,000,000,000,000,000,000\n\nnumprogs = 12\n\n*-------------------------------\n* Basic guard strength & uniform color (indexed by level #)\n\nbasicstrength\n db 4,3,3,3,3,4,5 ;levels 0-6\n db 4,4,5,5,5,4,6 ;levels 7-13\n\nbasiccolor\n db 1,0,0,0,1,1,1 ;0 = blue, 1 = red\n db 0,0,0,1,1,0,0\n\nshadstrength = 4\n\n*-------------------------------\n*\n* 10: kid (demo)\n* 11: enemy (demo)\n*\n*-------------------------------\n*\n*  Automatic enemy control routine\n*\n*  In: Char vars reflect position in PRECEDING frame;\n*      Op vars reflect position in UPCOMING frame\n*      guardprog = program #\n*\n*  (Exception: When used by kid fighting in demo, both\n*  Char & Op vars reflect preceding frame.)\n*\n*-------------------------------\n]rts rts\n\nAUTOCTRL\n jsr DoRelease\n\n lda CharID\n beq :5 ;control kid in demo\n\n lda justblocked\n beq :jb0\n dec justblocked\n\n:jb0 lda gdtimer\n beq :gt0\n dec gdtimer\n:gt0\n lda refract ;refractory period after being hit\n beq :2\n dec refract\n:2\n lda CharID\n cmp #24 ;mouse?\n beq :6\n cmp #4 ;skel?\n beq :3\n cmp #2 ;guard?\n bcc :1\n lda level\n cmp #13 ;vizier?\n beq :4\n jmp GuardProg\n:1 jmp ShadowProg\n:3 jmp SkelProg\n:4 jmp VizierProg\n:5 jmp KidProg\n:6 jmp MouseProg\n\n*-------------------------------\n*  M O U S E\n*-------------------------------\nMouseProg\n lda CharFace\n cmp #86\n beq ]rts\n lda CharAction\n beq :1 ;already stopped\n lda CharX\n cmp #166\n bcs ]rts\n lda #Mleave\n jsr jumpseq\n jmp animchar ;sets CharAction = 0\n\n:1 lda CharX\n cmp #200\n bcc ]rts\n jmp VanishChar\n\n*-------------------------------\n*  S H A D O W M A N\n*-------------------------------\n do DemoDisk\nShadowProg\nSkelProg\nVizierProg\n brk\n\n else\nShadowProg\n lda level\n cmp #4\n bne :0\n jmp ShadLevel4\n\n:0 cmp #5\n bne :1\n jmp ShadLevel5\n\n:1 cmp #6\n bne :2\n jmp ShadLevel6\n\n:2 cmp #12\n bne :3\n jmp FinalShad\n:3\n]rts rts\n\n*-------------------------------\n* Level-specific code for:\n* Level 6 (plunge)\n*-------------------------------\nShadLevel6\n lda CharScrn\n cmp #1\n beq Shad6a\n rts\n\n* Level 6, screen 1\n* When kid jumps chasm, step on plate\n\nShad6a\n lda KidPosn\n cmp #43\n bne ]rts\n lda KidX\n cmp #$80\n bcs ]rts\n jsr DoPress\n jmp DoFwd ;step fwd\n\n*-------------------------------\n* Level 5 (THIEF)\n*-------------------------------\nShadLevel5\n lda CharScrn\n cmp #flaskscrn\n beq Shad5\n]rts rts\n\n* Level 5, screen 24\n* When gate opens, steal potion\n\nShad5\n lda PlayCount\n bne :1 ;continue playback\n\n lda #flaskscrn\n ldx #1 ;x\n ldy #0 ;y\n jsr rdblock ;gate\n lda (BlueSpec),y\n cmp #20\n bcc ]rts\n;begin playback\n lda #0\n sta PreRecPtr\n\n:1 lda #ShadProg5\n ldx #>ShadProg5\n jsr AutoPlayback\n\n lda CharX\n cmp #15\n bcs ]rts\n jmp VanishChar\n\n*-------------------------------\n* Level 4 (mirror)\n*-------------------------------\nShadLevel4\n lda CharScrn\n cmp #4\n bne ]rts\n lda CharX\n cmp #80\n bcc :gone\n jmp DoFwd ;run o.s.\n:gone jmp VanishChar\n\n*-------------------------------\n* Level 12 (final battle)\n*-------------------------------\nFinalShad\n\n* Screen 15: Jump on top of kid\n\n lda CharScrn\n cmp #swordscrn\n bne :cont\n lda shadowaction\n bne :cont ;already did it\n lda OpX\n cmp #150\n bcs :hold ;hold shad at top until kid arrives\n\n lda #1\n sta shadowaction\n bne :cont\n\n:hold lda #shadpos12\n ldx #>shadpos12\n jmp csps\n]rts rts\n\n* Continue\n\n:cont lda CharSword\n cmp #2\n bcs :fight\n lda OpSword\n cmp #2\n bcs :hostile\n lda offguard\n bne :face\n:hostile\n lda EnemyAlert\n cmp #2\n bcc :2\n jsr getopdist\n cmp #swordthres\n bcs :2 ;wait until kid gets close\n\n lda CharPosn\n cmp #15\n bne ]rts\n jmp DoEngarde ;draw on kid\n\n* turn to face kid\n\n:2 jsr getopdist\n bpl ]rts\n jmp DoBack\n\n* Normal fighting\n\n:fight\n lda offguard\n beq :1 ;has kid put up sword?\n lda refract\n bne :1 ;yes--wait a moment--\n jmp DoDown ;--then lower your guard\n\n:1 jmp EnGarde ;normal fighting\n\n* Face to face--swords down\n\n:face jsr getopdist\n bmi :merge ;whammo!\n\n lda EnemyAlert\n cmp #2\n bne :wait\n lda OpPosn\n cmp #3\n bcc :wait\n cmp #15\n bcc :go\n cmp #127\n bcc :wait\n cmp #133\n bcs :wait\n\n* If kid starts moving towards you, reciprocate\n* (Accept startrun & stepfwd)\n\n:go jmp DoFwd\n\n* Kid & shadow reunite\n\n:merge\n lda #$ff ;white\n sta lightcolor\n lda #10\n sta lightning\n\n jsr boostmeter\n\n lda #s_Rejoin\n ldx #85\n jsr cuesong\n\n lda #42\n sta mergetimer\n\n lda #0\n sta CharID\n jsr SaveKid ;shadow turns into kid\n jmp VanishChar\n:wait\n]rts rts\n\n*-------------------------------\n* S K E L E T O N\n*-------------------------------\nSkelProg\n lda #2\n sta CharSword\n jmp GuardProg\n\n*-------------------------------\n* V I Z I E R\n*-------------------------------\nVizierProg\n jmp GuardProg\n\n fin ;DemoDisk\n\n*-------------------------------\n* K I D (in demo)\n*-------------------------------\nKidProg\n jmp GuardProg\n\n*-------------------------------\n* G U A R D\n*-------------------------------\nGuardProg\n lda CharSword\n cmp #2 ;Are you already en garde?\n bcc Alert ;no\n jmp EnGarde ;yes\n]rts rts\n\n*-------------------------------\n*\n* Alert (not en garde)\n*\n*-------------------------------\nAlert\n lda KidLife\n bpl ]rts ;kid's dead--relax\n\n* If kid is behind you, turn to face him\n\n jsr getopdist\n ldx OpBlockY\n cpx CharBlockY\n bne :difflevel\n cmp #-8 ;if kid is right on top of you, go en garde!\n bcs :eng\n:difflevel\n ldx alertguard\n beq :ok ;otherwise wait for a sound to alert you\n ldx #0\n stx alertguard\n:alert\n cmp #128\n bcc :eng\n cmp #-4\n bcs :ok ;overlapping--stand still\n jmp DoTurn ;turn around\n\n* If you can see kid, go en garde\n\n:ok cmp #128\n bcs ]rts ;kid is behind you\n\n:eng lda EnemyAlert\n beq ]rts\n\n lda level\n cmp #13\n bne :1 ;Vizier only: wait for music to finish\n lda SongCue\n bne ]rts\n\n:1 jmp DoEngarde\n]rts rts\n\n*-------------------------------\n*\n* En garde\n*\n*-------------------------------\nEnGarde\n lda CharPosn\n cmp #166\n beq ]rts\n cmp #150\n bcc ]rts ;wait till you're ready\n\n lda EnemyAlert\n cmp #2\n bcs :ea2\n cmp #1 ;EnemyAlert = 1: Kid is in sight, but a\n beq ]rts ;gap or barrier separates you--stay put\n\n* Kid is out of sight (EnemyAlert = 0)\n* If kid has \"dropped out\" of fight, follow him down\n\n lda droppedout ;flag set by CHECKFLOOR\n beq :1\n jmp FollowKid\n\n* else return to alert position\n\n:1 lda CharID\n cmp #4\n beq ]rts ;(except skeleton)\n jmp DoDropguard\n\n* EnemyAlert = 2: Clear stretch of floor to player\n\n* If kid is stunned, let him recover...\n\n:ea2 jsr getopdist\n bmi :norec\n cmp #12\n bcc :norec ;unless he's right on top of you\n lda OpPosn\n cmp #102\n bcc :norec\n cmp #118\n bcs :norec\n lda OpAction\n cmp #5\n beq ]rts\n:norec\n\n* Advance to closest safe distance\n\n jsr getopdist\n cmp #toofar\n bcs :outofrange\n\n ldx CharSword\n cpx #2\n bcc :offg\n\n cmp #tooclose\n bcc :tooclose\n jmp InRange\n\n:offg cmp #offguardthres\n bcc :tooclose\n jmp InRange\n]rts rts\n\n* Out of range\n\n:outofrange\n lda refract\n bne ]rts\n\n lda CharFace\n cmp OpFace\n beq :nojump ;chase him\n\n lda OpPosn\n cmp #7\n bcc :norun\n cmp #15\n bcc :runwait\n:norun\n cmp #34\n bcc :nojump\n cmp #44\n bcc :jumpwait ;If kid is running towards you, stay put\n:nojump\n jsr getinfront\n jsr cmpspace ;Don't advance unless solid floor\n beq :gap\n jsr get2infront\n jsr cmpspace\n bne :solid\n\n:gap jmp DoRetreat\n:solid jmp DoAdvance\n\n* Kid is trying to get past you--cut him down!\n\n:jumpwait\n jsr getopdist\n cmp #jumpthres\n bcs ]rts ;wait\n jmp DoStrike\n\n:runwait\n jsr getopdist\n cmp #runthres\n bcs ]rts\n:strike jmp DoStrike\n\n* Too close to hit him\n\n:tooclose\n lda CharFace\n cmp OpFace\n beq :ret\n jmp DoAdvance\n:ret jmp DoRetreat\n\n*-------------------------------\n*\n*  Kid has \"dropped out\" of fight\n*  Advance until you run out of floor--\n*  then decide whether to jump down after him\n*\n*-------------------------------\nFollowKid\n lda OpAction\n cmp #2\n beq :hanging\n cmp #6\n beq :hanging ;wait--kid is hanging on ledge\n\n jsr getinfront\n sta ztemp\n jsr cmpbarr\n bne :stopped\n lda ztemp\n jsr cmpspace\n beq :atedge\n jmp DoAdvance\n\n* At edge of floor.  Follow kid down ONLY if:\n* (1) it's a 1-story drop to solid floor\n* (2) kid is still down there\n\n:atedge\n jsr getinfront\n inc tempblocky\n jsr rdblock1\n sta ztemp ;is it safe?\n cmp #spikes\n beq :stopped\n cmp #loose\n beq :stopped\n jsr cmpbarr\n bne :stopped\n lda ztemp\n jsr cmpspace\n beq :stopped\n\n lda CharBlockY\n clc\n adc #1\n cmp OpBlockY\n bne :stopped ;kid's not down there\n\n* It looks safe--follow him down\n\n jmp DoAdvance\n\n:stopped lda #0\n sta droppedout\n jmp DoRetreat ;so you can kill him if he climbs up\n:hanging\n]rts rts\n\n*-------------------------------\n*\n*  In range\n*\n*-------------------------------\nInRange\n lda OpSword ;is opponent armed & en garde?\n cmp #2\n beq :fight ;yes\n\n* Opponent is unarmed or off guard--maul him!\n\n lda refract\n bne ]rts\n\n jsr getopdist\n cmp #strikethres2\n bcc :1\n jmp DoAdvance ;advance until within range...\n:1 jmp DoStrike ;then strike\n\n* Opponent is en garde--use strategy\n\n:fight\n jmp GenFight\n\n*-------------------------------\n*\n* General Fighting Routine\n*\n* (Fighters are en garde, face to face, and too close to\n* advance safely)\n*\n*-------------------------------\nGenFight\n jsr getopdist\n cmp #blockthres1\n bcc :outofrange\n cmp #blockthres2\n bcs :outofrange\n\n jsr MaybeBlock ;block opponent's strike?\n\n lda refract\n bne ]rts\n\n jsr getopdist\n cmp #strikethres1\n bcc :outofrange\n cmp #strikethres2\n bcs :outofrange\n\n jmp MaybeStrike ;strike?\n\n:outofrange\n jmp MaybeAdvance ;advance to within strike range?\n]rts rts\n\n*-------------------------------\n*\n* Advance to within strike range?\n* (Only consider it if gdtimer = 0)\n*\n*-------------------------------\nMaybeAdvance\n lda guardprog\n beq :dumb ;Guard #0 is too dumb to care\n lda gdtimer\n bne ]rts\n\n:dumb jsr rndp\n cmp advprob,x\n bcs ]rts\n\n jmp DoAdvance\n\n*-------------------------------\n*\n* Block opponent's strike?\n*\n*-------------------------------\nMaybeBlock\n lda OpPosn\n cmp #152 ;guy4\n beq :99\n cmp #153 ;guy5\n beq :99\n cmp #162 ;guy22 (block to strike)\n bne ]rts\n\n:99 lda justblocked\n bne :impaired\n jsr rndp\n cmp blockprob,x\n bcc :block\n]rts rts\n\n:impaired\n jsr rndp\n cmp impblockprob,x\n bcs ]rts\n:block jmp DoBlock\n\n*-------------------------------\n*\n* Strike?\n*\n*-------------------------------\nMaybeStrike\n ldx OpPosn\n cpx #169\n beq ]rts\n cpx #151 ;opponent starting to strike?\n beq ]rts ;yes--don't strike\n\n ldx CharPosn\n cpx #161 ;have I just blocked?\n beq :restrike\n cpx #150\n beq :restrike ;yes--restrike?\n\n jsr rndp\n cmp strikeprob,x\n bcs ]rts\n jmp DoStrike\n\n:restrike\n jsr rndp\n cmp restrikeprob,x\n bcs ]rts\n jmp DoStrike\n\n*-------------------------------\nDoRelease\n lda #0\n sta clrF\n sta clrB\n sta clrU\n sta clrD\n sta clrbtn\n sta JSTKX\n sta JSTKY\n sta btn\n rts\n\nDoAdvance\nDoFwd\n lda #-1\n sta clrF\n sta JSTKX\n rts\n\nDoRetreat\nDoBack\n lda #-1\n sta clrB\n lda #1\n sta JSTKX\n rts\n\nDoBlock\nDoUp lda #-1\n sta clrU\n sta JSTKY\n rts\n\nDoTurn\nDoDown lda #-1\n sta clrD\n lda #1\n sta JSTKY\n rts\n\nDoStandup\n lda #-1\n sta clrU\n jmp DoBack\n\nDoDropguard\nDoRunaway\n lda #-1\n sta clrD\n jmp DoBack\n\nDoEngarde\n lda #-1\n sta clrD\n jmp DoFwd\n\nDoStrike\nDoPress\n lda #-1\n sta clrbtn\n sta btn\n rts\n\nDoRelBtn\n lda #0\n sta btn\n]rts rts\n\n*-------------------------------\n*\n*  R N D P\n*\n*  Return X = guardprog, A = rnd #\n*\n*-------------------------------\nrndp\n ldx guardprog\n jmp rnd\n\n*-------------------------------\n*\n*  C H E C K   S T R I K E\n*\n*  Check for sword contact\n*\n*  Going in: Kid & Shad vars represent position in\n*   UPCOMING frame\n*\n*  Out: Kid & Shad vars\n*  (Return Action = 99 if stabbed)\n*\n*-------------------------------\nCHECKSTRIKE\n lda KidPosn\n beq ]rts\n cmp #219\n bcc :noclimb\n cmp #229\n bcc ]rts ;on staircase\n:noclimb\n jsr LoadShadwOp\n jsr TestStrike\n jsr SaveShadwOp\n\n jsr LoadKidwOp\n jsr TestStrike\n jsr SaveKidwOp\n\n]rts rts\n\n*-------------------------------\nTestStrike\n\n lda CharSword\n cmp #2 ;in fighting mode?\n bne ]rts ;no\n\n lda CharBlockY\n cmp OpBlockY\n bne ]rts\n\n* Am I on a test (strike) frame?\n\n lda CharPosn\n cmp #153 ;guy5 (frame before full ext.)\n beq :test\n cmp #154 ;guy6 (full ext.)\n bne ]rts\n\n* I'm striking--is opponent blocking?\n\n:test\n jsr getopdist\n cmp #blockrange1\n bcc :nobloc\n\n cmp #blockrange2\n bcs :nobloc\n\n lda OpPosn\n cmp #161\n beq :11\n cmp #150 ;blocking?\n bne  :nobloc ;no\n\n* Yes -- opponent blocks my strike\n\n:1 lda #161\n sta OpPosn ;change opp to \"successful block\"\n\n:11 lda CharID\n beq :12 ;am I a guard?\n lda #blocktime ;yes--impair my blocking ability for a while\n sta justblocked\n\n:12 lda #blockedstrike\n jsr jumpseq\n jmp animchar\n\n* Skewer opponent?\n\n:nobloc\n lda CharPosn\n cmp #154 ;full ext\n bne ]rts\n\n jsr getopdist\n\n ldx OpSword\n cpx #2\n bcs :ong\n cmp #offguardthres\n bcs :cont1\n rts\n:ong cmp #strikerange1\n bcc ]rts\n\n:cont1 cmp #strikerange2\n bcs ]rts\n\n lda #99 \"stabbed\"\n sta OpAction\n]rts rts\n\n*-------------------------------\n*  C H E C K   S T A B\n*-------------------------------\nCHECKSTAB\n lda ShadAction\n cmp #99\n bne :1\n\n lda KidAction\n cmp #99\n beq :doublestab\n:2\n jsr LoadShad\n jsr StabChar\n jsr SaveShad\n\n jsr rndp\n lda refractimer,x\n sta refract\n\n:1 lda KidAction\n cmp #99\n bne ]rts\n\n jsr LoadKid\n jsr StabChar\n jmp SaveKid\n\n* Both chars finish lunge simultaneously\n\n:doublestab\n lda #1\n sta KidAction\n bne :2 ;player wins a tie\n]rts rts\n\n*-------------------------------\n* Change shadowman posn\n* In: A-X = shadpos L-H\n* Out: Char data\n*-------------------------------\nchgshadposn\n sta ztemp\n stx ztemp+1\n ldy #6\n:loop lda (ztemp),y\n sta Char,y\n dey\n bpl :loop\n\n ldy #7\n lda (ztemp),y\n jsr jumpseq\n\n lda #1\n sta CharID\n\n lda #0\n sta PlayCount ;zero playback counter\n rts\n\n* ... & save\n\ncsps jsr chgshadposn\n\n lda #3\n sta guardprog\n\n lda #shadstrength\n sta MaxOppStr\n sta OppStrength\n\n jmp SaveShad\n\n*-------------------------------\n* (Posn, X, Y, Face, BlockX, BlockY, Action)\n*               0  1  2  3  4  5  6\n\nshadpos6a hex 0f,51,76,00,00,01,00\n db stand\n\nshadpos5 hex 0f,37,37,00,ff,00,00\n db stand ;just o.s. to L\n\nshadpos12 hex 0f,51,f0,00,00,00,00\n db stepfall\n\n*-------------------------------\nEndProg = -2\nEndDemo = -1\nCtr = 0\nFwd = 1\nBack = 2\nUp = 3\nDown = 4\nUpfwd = 5\nPress = 6\nRelease = 7\n\n* Commands:\n*\n* -2 - end of programmed sequence\n* -1 - end of demo\n*  0 - center jstk & release btn\n*  1 - jstk fwd\n*  2 - jstk back\n*  3 - jstk up\n*  4 - jstk down\n*  5 - jstk up & fwd\n*  6 - press & hold btn\n*  7 - release btn\n\n*-------------------------------\n*\n* Prerecorded sequence format:\n*\n*  1.  Frame # (1 byte)\n*  2.  Command (1 byte)\n*\n* 255 frames = approx. 25-30 seconds\n*\n*-------------------------------\n* Level 5 (THIEF): Steal potion\n\nShadProg5\n db 0,Ctr\n db 1,Fwd\n db 14,Ctr\n db 18,Press\n db 29,Release\n db 45,Back\n db 49,Fwd\n db 255,EndProg\n\n*-------------------------------\n*\n*  Play back prerecorded movement sequence\n*\n*  In: A-X = program start addr\n*      PlayCount = frame #\n*      PreRecPtr = pointer to next command\n*\n*-------------------------------\nAUTOPLAYBACK\n sta ProgStart\n stx ProgStart+1\n\n* Inc frame counter\n\n lda PlayCount\n cmp #254\n bcs :rts\n inc PlayCount\n\n* Look up time of next command\n\n ldy PreRecPtr\n\n lda PlayCount\n cmp (ProgStart),y\n bcs :next\n\n* Not there yet--repeat last command\n\n dey\n lda (ProgStart),y\n jmp :ex\n\n* We're there--\n\n:next iny\n lda (ProgStart),y ;command\n iny\n sty PreRecPtr\n\n* Execute command\n\n:ex cmp #-1\n beq :enddemo\n cmp #0\n beq :ctr\n cmp #1\n beq :fwd\n cmp #2\n beq :back\n cmp #3\n beq :up\n cmp #4\n beq :down\n cmp #5\n beq :upfwd\n cmp #6\n beq :press\n cmp #7\n beq :release\n:rts\n]rts rts\n\n* Commands\n\n:ctr jmp DoRelease\n:fwd jmp DoFwd\n:back jmp DoBack\n:up jmp DoUp\n:down jmp DoDown\n:upfwd jsr DoUp\n jmp DoFwd\n:press jmp DoPress\n:release jmp DoRelBtn\n\n:enddemo ; lda autopilot\n; bne :endpb\n jmp attractmode ;Game: end demo\n:endpb ; lda #0 ;Editor: end playback\n; sta autopilot\n; rts\n\n*-------------------------------\n*\n*  C U T   C H E C K\n*\n*  Cut with kid\n*\n*-------------------------------\nCUTCHECK\n lda CUTTIMER\n beq :ok\n\n dec CUTTIMER\n]rts rts\n\n:ok\n jsr LoadKid\n jsr setupchar\n jsr getedges\n jsr cutchar ;cut with character\n bmi ]rts ;no cut\n sta ]cutdir\n\n jsr SaveKid\n\n lda CharScrn\n sta cutscrn\n\n lda ShadFace\n cmp #86 ;is there a guard on old screen?\n beq ]rts ;no\n\n* What to do with guard?  Two choices:\n*\n*  (1) UPDATE -- leave guard behind on old screen (& update\n*      his coords so he'll still be there when we come back)\n*  (2) TRANSFER -- transfer guard to new screen (& delete his\n*      coords from old screen)\n\n lda ShadLife\n bpl :update ;dead guard on old screen--leave him behind\n\n lda ShadSword\n cmp #2\n bne :update\n\n* Is there a live guard on new screen?\n\n ldx KidScrn\n lda GdStartBlock-1,x\n cmp #30\n bcs :nonew ;no\n\n lda GdStartSeqH-1,x\n beq :update ;yes\n\n* If guard is too far o.s., leave him behind\n\n:nonew\n lda ]cutdir\n beq :left\n cmp #1\n beq :right\n cmp #2\n beq :up\n\n:down lda ShadBlockY\n cmp #3\n bcs :transfer\n bcc :update\n\n:up lda ShadBlockY\n bmi :transfer\n bpl :update\n\n:right lda ShadX\n cmp #ScrnWidth+25 ;25 is safety factor\n bcc :update\n bcs :transfer\n\n:left lda ShadX\n cmp #256-ScrnWidth-25\n bcs :update\n\n* Take him with us\n\n:transfer jmp transferguard\n\n* Leave him behind\n\n:update jmp updateguard\n\n*-------------------------------\n*\n* Transfer guard from old screen to new screen\n* (Also remove any dead guards from new scrn)\n*\n*-------------------------------\ntransferguard\n lda #-1\n ldx KidScrn ;new scrn\n sta GdStartBlock-1,x\n ldx ShadScrn ;old scrn\n sta GdStartBlock-1,x\n\n jsr LoadShad\n\n lda ]cutdir\n jsr cut\n\n jmp SaveShad\n\n]rts rts\n\n*-------------------------------\n*\n* Leaving guard behind on old screen--\n* update guard coords\n*\n*-------------------------------\n\nupdateguard\n lda ShadFace\n cmp #86\n beq ]rts ;no guard\n lda ShadID\n cmp #1\n beq ]rts ;not for shadman\n cmp #24\n beq ]rts ;or mouse\n:gd\n lda #0 ;arbitrary--ADDGUARD will reconstruct\n sta tempblockx ;CharBlockX from CharX\n lda ShadBlockY\n sta tempblocky\n jsr indexblock\n tya\n ldx ShadScrn\n sta GdStartBlock-1,x\n\n lda ShadX\n sta GdStartX-1,x\n\n lda ShadFace\n sta GdStartFace-1,x\n\n lda guardprog\n sta GdStartProg-1,x\n\n lda ShadLife\n bpl :ok\n lda #0\n sta GdStartSeqH-1,x\n beq :cont\n\n:ok lda ShadSeq\n sta GdStartSeqL-1,x\n lda ShadSeq+1\n sta GdStartSeqH-1,x\n\n* and deactivate enemy char\n\n:cont lda #86\n sta ShadFace\n\n lda #0\n sta OppStrength\n]rts rts\n\n*-------------------------------\n*\n* If enemy has fallen to screen below, catch him before\n* he wraps around to top of VisScrn\n*\n*-------------------------------\nCUTGUARD\n lda ShadFace\n cmp #86\n beq ]rts\n\n lda ShadY\n cmp #BotCutEdge\n bcc ]rts\n\n* If guard, remove him altogether\n\n lda ShadID\n cmp #4\n beq :skel\n cmp #1\n beq :shad\n\n]RemoveGd\n jsr deadenemy ;music, etc.\n\n ldx VisScrn\n lda #-1\n sta GdStartBlock-1,x\n lda #86\n sta ShadFace\n lda #0\n sta OppStrength\n lda #-1\n sta ChgOppStr\n]rts rts\n\n* If shad, vanish him\n\n:shad lda ShadAction\n cmp #4\n bne ]rts\n jsr LoadShad\n jsr VanishChar\n jmp SaveShad\n\n* If skel, change scrn\n\n:skel lda ShadScrn\n jsr getdown\n sta ShadScrn\n cmp #3\n bne ]RemoveGd\n\n* Skel lands on scrn 3\n\n lda #Splat\n jsr addsound\n lda #$85\n sta ShadX\n lda #1\n sta ShadBlockY\n lda #0\n sta ShadFace\n lda #-1\n sta ShadLife\n jmp updateguard\n\n*-------------------------------\n*\n*  C U T   C H A R\n*\n*  Is character passing o.s.?  If so, cut with him to next scrn\n*\n*  Change CharX,Y,BlockY,Scrn to reflect posn on new scrn\n*\n*  Return A = direction of cut, -1 if no cut\n*\n*-------------------------------\ncutchar\n lda CharY\n\n ldx CharAction\n cpx #5\n beq :notup\n cpx #4\n beq :notup ;In freefall--cut only down\n cpx #3\n beq :notup\n\n*  Cut up/down?\n\n cmp #TopCutEdgePl\n bcc :CUTUP\n\n cmp #TopCutEdgeMi\n bcs :CUTUP\n:notup\n cmp #BotCutEdge\n bcs :CUTDOWN\n\n*  Cut left/right?\n\n ldx CharPosn\n cpx #135\n bcc :nocu\n cpx #150\n bcc :nocut ;don't cut L/R on climbup\n:nocu cpx #110\n bcc :nosu\n cpx #120\n bcc :nocut ;or on standup\n:nosu cpx #150\n bcc :nost\n cpx #163\n bcc :nocut\n cpx #166\n bcc :nost\n cpx #169\n bcc :nocut ;or on strike/block\n:nost lda CharAction\n cmp #7\n beq :nocut ;or on turning\n\n ldx CharFace ;-1=left, 0=right\n beq :faceR\n;facing left\n lda leftej\n cmp #LeftCutEdge\n bcc :CUTLEFT\n beq :CUTLEFT\n\n cmp #ScrnRight+1\n bcs :CUTRIGHT\n bcc :nocut\n\n:faceR\n lda CharScrn\n ldx #9\n ldy CharBlockY\n jsr rdblock\n\n cmp #panelwif\n beq :nocutr\n cmp #panelwof\n beq :nocutr ;don't cut R if a panel blocks view\n\n lda rightej\n cmp #RightCutEdge\n bcs :CUTRIGHT\n\n:nocutr lda rightej\n cmp #ScrnLeft-1\n bcc :CUTLEFT\n beq :CUTLEFT\n\n:nocut lda #-1\n rts\n\n:CUTLEFT jsr mirrmusic\n jsr milestone3\n lda #0\n bpl :cut\n\n:CUTRIGHT jsr stealsword\n jsr jaffmusic\n lda #1\n bpl :cut\n\n:CUTUP lda #2\n bpl :cut\n\n* Level 6 (\"Plunge\"): Kid falls off screen 1 into next level\n\n:CUTDOWN\n jsr infinity\n\n lda level\n cmp #6\n bne :no6\n lda CharScrn\n cmp #1\n beq :nocut\n:no6\n lda #3\n:cut pha\n jsr cut\n pla\n]rts rts\n\n*-------------------------------\n* Level 12--fall off into infinity\n*-------------------------------\ninfinity rts\n\n*-------------------------------\n* Passed Level 3 milestone?\n*-------------------------------\nmilestone3\n lda level\n cmp #3\n bne ]rts\n lda #7 ;scrn to R of gate\n]mcheck cmp CharScrn\n bne ]rts\n lda #1\n sta milestone\n lda MaxKidStr\n sta origstrength\n rts\n\n*-------------------------------\n* Level 12: Shadow steals sword\n*-------------------------------\nstealsword\n lda level\n cmp #12\n bne ]rts\n lda CharScrn\n cmp #18 ;scrn below swordscrn\n bne ]rts\n lda #swordscrn\n ldx #swordx\n ldy #swordy\n jsr rdblock\n lda #floor\n sta (BlueType),y\n rts\n\n*-------------------------------\n* Level 13: Play Jaffar's Theme\n*-------------------------------\njaffmusic\n lda level\n cmp #13\n bne ]rts\n lda exitopen\n bne ]rts\n lda CharScrn\n cmp #3\n bne ]rts\n lda #s_Jaffar\n ldx #25\n jmp cuesong\n\n*-------------------------------\n* Level 4 (\"Mirror\"): Play danger theme for mirror\n*-------------------------------\nmirrmusic\n lda exitopen\n beq :no4\n cmp #77\n beq :no4\n lda level\n cmp #4\n bne :no4\n lda CharBlockY\n cmp #miry\n bne :no4\n lda CharScrn\n cmp #11 ;scrn to R of mirscrn\n bne :no4\n lda #s_Danger\n ldx #50\n jsr cuesong\n lda #77\n sta exitopen ;so we don't repeat theme\n:no4\n]rts rts\n\n*-------------------------------\n*\n*  C U T\n*\n*  Move char from CharScrn to adjacent screen\n*\n*  In: A = cut dir: 0 = left, 1 = right, 2 = up, 3 = down\n*\n*-------------------------------\nCUT\n cmp #3\n beq Cdown\n cmp #1\n beq Cright\n cmp #2\n beq Cup\n\nCleft\n lda CharScrn\n jsr getleft ;get new screen #\n sta CharScrn\n\n lda #140\n clc\n adc CharX\n sta CharX\n\n ldx #1 ;new FromDir\n rts\n\nCright\n lda CharScrn\n jsr getright\n sta CharScrn\n\n lda CharX\n sec\n sbc #140\n sta CharX\n\n ldx #0\n rts\n\nCup\n lda CharScrn\n jsr getup\n sta CharScrn\n\n lda CharBlockY\n clc\n adc #3\n sta CharBlockY\n\n lda CharY\n clc\n adc #189\n sta CharY\n\n ldx #3\n rts\n\nCdown\n lda CharScrn\n jsr getdown\n sta CharScrn\n\n lda CharBlockY\n sec\n sbc #3\n sta CharBlockY\n\n lda CharY\n sec\n sbc #189\n sta CharY\n\n ldx #2\n]rts rts\n\n*-------------------------------\n*\n* A D D  G U A R D\n*\n* On cut to new screen--if guard is there, bring him to life\n* Also handles hard-wired shadowman appearances\n*\n* In: VisScrn\n*\n*-------------------------------\nADDGUARD\n lda #0\n sta offguard\n\n* Level 12\n\n lda level\n cmp #12\n bne :not12\n lda exitopen ;set when shadow drops\n bne ]rts\n lda mergetimer\n bne :1 ;shadow has been reabsorbed\n lda VisScrn\n cmp #swordscrn\n:1 bne ]rts\n sta CharScrn\n\n ldx #swordx\n ldy #swordy\n jsr rdblock\n cmp #sword\n beq ]rts ;sword is still there\n lda #0\n sta shadowaction\n lda #1\n sta exitopen\n lda #shadpos12\n ldx #>shadpos12\n jmp csps\n\n* Level 6 (Plunge)\n\n:not12\n lda level\n cmp #6 ;plunge\n bne :not6\n\n lda VisScrn\n sta CharScrn\n cmp #1\n bne AddNormalGd\n\n lda exitopen\n cmp #77\n beq :norepeat\n lda #s_Danger\n ldx #50\n jsr cuesong\n lda #77\n sta exitopen\n:norepeat\n lda #shadpos6a\n ldx #>shadpos6a\n jmp csps\n\n* Level 5 (Thief)\n\n:not6 lda level\n cmp #5 ;thief\n bne :not5\n\n lda VisScrn\n sta CharScrn\n cmp #flaskscrn\n bne AddNormalGd\n\n ldx #flaskx\n ldy #flasky\n jsr rdblock\n cmp #flask\n bne ]rts ;potion is gone\n\n lda #shadpos5\n ldx #>shadpos5\n jmp csps\n]rts rts\n:not5\n\n*-------------------------------\nAddNormalGd\n ldx VisScrn\n lda GdStartBlock-1,x\n cmp #30\n bcs ]rts ;no guard on this scrn\n\n* Bring guard to life (or death)\n\n stx CharScrn\n\n jsr unindex ;return A = blockx, X = blocky\n stx CharBlockY\n\n lda FloorY+1,x\n sta CharY\n\n ldx VisScrn\n lda GdStartX-1,x\n sta CharX\n jsr getblockxp\n sta CharBlockX\n\n ldx VisScrn\n lda GdStartFace-1,x\n sta CharFace\n\n lda level\n cmp #3\n bne :3\n\n lda #4 ;skel\n bne :4\n:3 lda #2 ;guard\n:4 sta CharID\n\n lda GdStartSeqH-1,x\n bne :1 ;0 is code for fresh start\n\n lda CharID\n cmp #4\n bne :5\n lda #2\n sta CharSword\n lda #landengarde ;skel (ready)\n bne :6\n:5 lda #0\n sta CharSword\n lda #alertstand ;guard\n:6 jsr jumpseq\n jmp :2\n\n:1 sta CharSeq+1\n lda GdStartSeqL-1,x\n sta CharSeq\n\n:2 jsr animchar\n\n lda CharPosn\n cmp #185 ;killed\n beq :dead\n cmp #177 ;impaled\n beq :dead\n cmp #178 ;halved\n beq :dead\n\n* Live guard\n\n lda #-1\n sta CharLife\n\n lda #0\n sta alertguard\n sta refract\n sta justblocked\n\n jsr getgdstrength\n jmp :cont\n\n* Dead guard\n\n:dead lda #1\n sta CharLife\n lda #0\n sta OppStrength\n\n* Continue\n\n:cont lda #0\n sta CharXVel\n sta CharYVel\n lda #1\n sta CharAction\n\n ldx VisScrn\n lda GdStartProg-1,x\n cmp #numprogs\n bcc :ok\n lda #3 ;default\n:ok sta guardprog\n\n ldx level\n lda basiccolor,x\n ldx guardprog\n eor specialcolor,x ;0 = normal, 1 = special\n sta GuardColor  ;0 = blue, 1 = red\n\n jmp SaveShad ;save ShadVars\n\n*-------------------------------\n* Get guard fighting strength\n*-------------------------------\ngetgdstrength\n ldx level\n lda basicstrength,x\n ldx guardprog\n clc\n adc extrastrength,x\n sta MaxOppStr\n sta OppStrength\n]rts rts\n\n*-------------------------------\n lst\n ds 1\n usr $a9,17,$800,*-org\n lst off\n"
  },
  {
    "path": "04 Support/MakeDisk/S/BGDATA.S",
    "content": "* bgdata\n tr on\n*-------------------------------\n* Indexed by PIECE ID#:\n\nspace = 0\nfloor = 1\nspikes = 2\nposts = 3\ngate = 4\ndpressplate = 5 ;down\npressplate = 6 ;up\npanelwif = 7 ;w/floor\npillarbottom = 8\npillartop = 9\nflask = 10\nloose = 11\npanelwof = 12 ;w/o floor\nmirror = 13\nrubble = 14\nupressplate = 15\nexit = 16\nexit2 = 17\nslicer = 18\ntorch = 19\nblock = 20\nbones = 21\nsword = 22\nwindow = 23\nwindow2 = 24\narchbot = 25\narchtop1 = 26\narchtop2 = 27\narchtop3 = 28\narchtop4 = 29\n\n*-------------------------------\n* A & B sections have l.l. of (X = BlockLeft, Y = BlockBot-3)\n* C & D sections have l.l. of (X = BlockLeft, Y = BlockBot)\n* All x & y offsets are relative to these values\n* (Front pieces are relative to A)\n\n*-------------------------------\n*               0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15\n*              16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31\n\nmaska hex 00,03,03,03,03,03,03,03,03,00,03,03,00,03,03,03\n hex 03,00,00,03,00,03,00,03,00,03,00,00,00,00\n\npiecea hex 00,01,05,07,0a,01,01,0a,10,00,01,00,00,14,20,4b\n hex 01,00,00,01,00,97,00,01,00,a7,a9,aa,ac,ad\n\npieceay hex 00,00,00,00,00,01,00,00,00,00,00,00,00,00,00,00\n dfb 00,00,00,00,00,00,00,00,00,00,00,-4,-4,-4\n\nmaskb hex 00,04,04,04,04,04,04,00,04,00,04,00,00,04,04,04\n hex 00,04,04,04,04,04,04,00,04,04,00,00,00,00\n\npieceb hex 00,02,06,08,0b,1b,02,9e,1a,1c,02,00,9e,4a,21,1b\n hex 4d,4e,02,51,84,98,02,91,92,02,00,00,00,00\n\npieceby dfb 00,00,00,00,00,01,00,03,00,03,00,00,03,00,00,-1\n dfb 00,00,00,-1,02,00,00,00,00,00,00,00,00,00\n\nbstripe hex 00,47,47,00,00,47,47,00,00,00,47,47,00,00,47,47\n hex 00,00,47,00,00,00,47,00,00,47,00,00,00,00\n\n*               0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15\n*              16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31\n\npiecec hex 00,00,00,09,0c,00,00,9f,00,1d,00,00,9f,00,00,00\n hex 4f,50,00,00,85,00,00,93,94,00,00,00,00,00\n\npieced hex 00,15,15,15,15,18,19,16,15,00,15,00,17,15,2e,4c\n hex 15,15,15,15,86,15,15,15,15,15,ab,00,00,00\n\nfronti hex 00,00,00,45,46,00,00,46,48,49,87,00,46,0f,13,00\n hex 00,00,00,00,83,00,00,00,00,a8,00,ae,ae,ae\n\nfronty dfb 00,00,00,-1,00,00,00,00,-1,03,-3,00,00,-1,00,00\n dfb 00,00,00,00,00,00,00,00,00,-1,0,-36,-36,-36\n\nfrontx hex 00,00,00,01,03,00,00,03,01,01,02,00,03,01,00,00\n hex 00,00,00,00,00,00,00,00,00,01,00,00,00,00\n\n*-------------------------------\n* special pieces\n\ngatebotSTA = $43\ngatebotORA = $44\ngateB1 = $37\ngatecmask = $0d\n\ngate8c hex 2f,30,31,32,33,34,35,36\ngate8b hex 3e,3d,3c,3b,3a,39,38,37\n\n*-------------------------------\n* Climbup masking\n\nCUmask = $11\nCUpiece = $12\nCUpost = $0e\n\n*-------------------------------\n* Exit\n\nstairs = $6b\ndoor = $6c\ndoormask = $6d\ntoprepair = $6e\n\narchtop3sp = $a1\n\n*-------------------------------\n* Spike animation frames\n*               0  1  2  3  4  5  6  7  8  9 10 11\n\nspikea hex 00,22,24,26,28,2a,28,24,22,00\nspikeb hex 00,23,25,27,29,2b,29,25,23,00\n\nspikeExt = 5 ;\nspikeRet = 9 ;must match MOVEDATA\n\n*-------------------------------\n* Slicer animation frames\n*               0  1  2  3  4  5  6  7  8  9 10 11\n\nslicerseq dfb 04,03,01,02,05,04,04\n\nslicerExt = 2\nslicerRet = 6 ;must match MOVEDATA\n\nslicertop hex 00,58,5a,5c,5e\nslicerbot hex 57,59,5b,5d,5f\nslicerbot2 hex 8e,8f,90,5d,5f ;smeared\nslicergap dfb 00,38,46,53,55\nslicerfrnt hex 65,66,67,68,69\n\n*-------------------------------\n* Loose floor\n*               0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15\n\nlooseb = $1b\n\nloosea hex 01,1e,01,1f,1f,01,01,01,1f,1f,1f\nlooseby dfb 00,01,00,-1,-1,00,00,00,-1,-1,-1\nloosed hex 15,2c,15,2d,2d,15,15,15,2d,2d,2d\n\nFfalling = 10 ;1st \"falling\" frame\n;must match MOVEDATA\n\n*-------------------------------\nspecialflask = $95\n\nswordgleam1 = $b3\nswordgleam0 = $99\n\n*-------------------------------\n* panels\n\npanelb0 = $9e\npanelc0 = $9f\nnumpans = 3\n\npanelb hex 9e,9a,81\npanelc hex 9f,9b,82\n\narchpanel = $a1\n\n*-------------------------------\n* back wall panels for space & floor\n\nnumbpans = 3\n\nspaceb hex 00,a3,a5,a6\nspaceby dfb 0,-20,-20,0\n\nfloorb hex 02,a2,a4,a4\nfloorby dfb 00,00,00,00\n\n*-------------------------------\n* solid blocks\n\nnumblox = 2\n\nblockb hex 84,6f\nblockc hex 85,85\nblockd hex 86,86\nblockfr hex 83,83\n\n*-------------------------------\n* moveparams\n\ngmaxval = 47*4\ngminval = 0\n\n*-------------------------------\neof\n"
  },
  {
    "path": "04 Support/MakeDisk/S/BOOT.S",
    "content": "*  boot\norg = $800\n lst off\n*-------------------------------\n* $800 TS (0,0) boot sector\n\nSLOT = $2b\nsector = $50\n\ntext = $fb2f\nhome = $fc58\nvtab = $FB5B\ncout = $FDF0\nnormal = $fe84\npr0 = $fe93\nin0 = $fe89\n\n*-------------------------------\n org org\n\n hex 01\n\nentry lda #$60\n sta entry\n\n lda #$ff\n sta $4fb\n sta $3f3\n sta $3f4\n sta $c000 ;80store off\n sta $c002 ;RAMRD main\n sta $c004 ;RAMWRT main\n sta $c00c ;80col off\n sta $c00e ;Altcharset off\n sta $c081 ;write RAM, read ROM (2nd 4k bank)\n jsr text\n jsr home\n jsr normal\n jsr pr0\n jsr in0\n\n ldx SLOT\n txa\n lsr\n lsr\n lsr\n lsr\n ora #$c0\n sta :rdsect+2\n lda #$0f\n sta sector\n\n:0 ldy sector\n lda skewtbl,y\n sta $3d\n lda sectaddr,y\n beq :1\n sta $27\n:rdsect jsr $005c\n:1 dec sector\n bne :0\n\n lda SLOT\n jmp $900\n\nskewtbl hex 00,0d,0b,09,07,05,03,01\n hex 0e,0c,0a,08,06,04,02,0f\n\nsectaddr hex 00,09,00,00,00,00,00,00\n hex 30,31,32,33,34,00,00,00\n\n*===============================\n*  boot stage 2\n\nrw18 = $d000\n\nslot = $fd\ntrack = $fe\nlastrack = $ff\n\n dum $00\n\ndest ds 2\nsource ds 2\nendsourc ds 2\n\n dend\n*-------------------------------\n ds $900-*\n\nstage2 stx slot\n\n jsr check128k ;check for 128K memory\n\n jsr moverw18 ;& move RW18 to D000\n\n lda #0\n sta lastrack\n sta $3f3\n sta $3f4 ;zero reset vector\n\n jsr rw18\n hex 07,a9 ;Bbund ID byte\n\n jsr rw18\n hex 00,01,00 ;drive 1 on\n\n jsr rw18 ;seek track 1\n hex 02,00,01\n\n* load & run stage 3 boot\n* from drive 1\n\n jsr rw18\n hex c3,ee\n\n jmp $ee00\n\n*-------------------------------------------------\n* Check for AUX memory routine\n\nCHECKER lda #$EE\n sta $C005\n sta $C003\n sta $0800\n lda $0C00\n cmp #$EE\n bne :0\n asl $0C00\n lda $0800\n cmp $0C00\n beq :1\n:0 clc\n:1 sta $C004\n sta $C002\n rts\n\nCHECKEND = *-CHECKER\n\n*-------------------------------------------------\n*\n* Check to make sure //c or //e\n* with 128k\n*\n*-------------------------------\ncheck128k\n sta $c081\n\n lda $FBB3 ;Apple // family ID byte\n cmp #6\n bne NOT128K ;Must be e/c/GS\n\n bit $C017\n bmi NOT128K\n\n ldx #CHECKEND\n:0 lda CHECKER,X\n sta $180,X\n dex\n bpl :0\n\n jsr $180\n bcs NOT128K\n\n rts\n\n*-------------------------------\n* Turn off drive and display message\n\nNOT128K ldx SLOT\n lda $C088,X\n\n jsr text\n jsr home\n lda #8\n jsr vtab\n\n ldy #0\n:0 lda MEMTEXT,Y\n beq *\n jsr cout\n cmp #$8D\n bne :1\n lda #4\n sta $24\n:1 iny\n bne :0\n\nMEMTEXT hex 8D\n asc \"REQUIRES A //C OR //E WITH 128K\"\n hex 00\n\n*-------------------------------\n* Move RW18\n* d0 < 30.40\n*-------------------------------\nmoverw18\n bit $c08b\n bit $c08b ;rd/wrt RAM, 1st 4k bank\n\n lda #$d0\n ldx #$30\n ldy #$40\n\n* a < x.y\n* 20 < 40.60 means 2000 < 4000.5fffm\n* WARNING: If x >= y, routine will wipe out 64k\n\nmovemem sta dest+1\n stx source+1\n sty endsourc+1\n\n ldy #0\n sty dest\n sty source\n sty endsourc\n\n:loop lda (source),y\n sta (dest),y\n\n iny\n bne :loop\n\n inc source+1\n inc dest+1\n\n lda source+1\n cmp endsourc+1\n bne :loop\n\n rts\n\n*-------------------------------\n sav boot\n"
  },
  {
    "path": "04 Support/MakeDisk/S/CHARCOMMENTS.S",
    "content": "*-------------------------------\n*\n* Character animation comments\n*\n*-------------------------------\n*\n* For each character, we maintain a 16-byte block of data\n* (referred to as \"character data\" or \"character vars\")\n* that describes the character's current position & what\n* he is doing.  The 16 bytes are allocated as follows:\n*\n* CharPosn\n*\n*   Frame # of the character's current position.  E.g.,\n*   CharPosn = 15 refers to frame #15 of the frame list, or\n*   \"standing still.\"\n*\n* CharX\n* CharY\n*\n*   Character X & Y coords, based on a 140 x 192 screen.\n*   (Upper left corner is X = 58, Y = 0)\n*\n* CharFace\n*\n*   Direction character is facing: 0 = right, -1 = left\n*\n* CharBlockX\n* CharBlockY\n*\n*   Coords of character's current block (X = 0-9, Y = 0-2).\n*   (0,0) is upper left block.\n*\n* CharAction\n*\n*   Code containing information about character's current\n*   action.  E.g., CharAction = 4 means \"falling.\"  This\n*   variable is used in a variety of different ways in\n*   different situations\n*\n* CharXVel\n* CharYVel\n*\n*   X & Y components of character's velocity (during\n*   freefall).  Every frame, CharXVel is added to CharX and\n*   CharYVel is added to CharY.\n*\n* CharSeq (2 bytes)\n*\n*   Pointer to current address in the sequence table.\n*\n* CharScrn\n*\n*   Screen # of character's current screen.  (0 for null\n*   screen.)\n*\n* CharRepeat\n*\n*   When character stands at the edge of a chasm & takes a\n*   cautious step forward, the first time he tries it he only\n*   \"tests\" with his foot.  This causes CharRepeat (usually\n*   a non-0 value) to be set to 0.  The next time he tries a\n*   cautious step, he will step right off the edge.\n*\n* CharID\n*\n*   Identifies character:\n*   0 = kid\n*   1 = shadow man\n*   2 = guards, vizier\n*   4 = skeleton\n*   5 = princess (in princess scenes)\n*   6 = vizier (in princess scenes)\n*   24 = mouse\n*\n* CharSword\n*\n*   2: sword drawn\n*   0: sword sheathed\n*\n* CharLife\n*\n*   -1: alive\n*   0-127: dead\n*\n*-------------------------------\n*\n*  Two permanent sets of CharData are maintained: KidData\n*  (for the kid) and ShadData (for his opponent).  Note\n*  that the opponent data is always referred to by the\n*  prefix \"Shad\" although the character may be the shadow\n*  man, skeleton, Vizier, etc.\n*\n*  CharData itself is used as temporary storage for whichever\n*  character we want to deal with.  Typically, we will call\n*  LoadKid to \"load\" the kid as our current character (i.e.,\n*  load the 16 bytes of KidData into the CharData space),\n*  then call the control routines that change CharData, then\n*  when we're done call SaveKid to \"save\" the modified\n*  CharData back into KidVars.  This way we can use the\n*  same control routines for both the kid & his opponent.\n*\n*  There is a second data set used for temporary storage\n*  OppData.  OppData always contains the \"other\" character\n*  than CharData -- e.g., when we call LoadKid, we load\n*  KidData into CharData and ShadData into OppData.\n*\n*-------------------------------\n"
  },
  {
    "path": "04 Support/MakeDisk/S/COLL.S",
    "content": "* coll\norg = $4500\n tr on\n lst off\n*-------------------------------\n*\n*  PRINCE OF PERSIA\n*  Copyright 1989 Jordan Mechner\n*\n*-------------------------------\n org org\n\n jmp CHECKBARR\n jmp COLLISIONS\n jmp GETFWDDIST\n jmp CHECKCOLL\n jmp ANIMCHAR\n\n jmp CHECKSLICE\n jmp CHECKSLICE2\n jmp markmeters ;temp\n jmp CHECKGATE\n jmp firstguard ;temp\n\n jmp ENEMYCOLL\n\n*-------------------------------\n lst\n put eq\n lst\n put gameeq\n lst\n put seqdata\n lst\n put soundnames\n lst\n put movedata\n lst off\n\n dum $f0\nztemp ds 1\nCollFace ds 1\ntempobjid ds 1\ntempstate ds 1\n dend\n\n*-------------------------------\n*  Distance in pixels from either edge of block to barrier\n*  BarL + BarR + BarWidth == 14\n*\n*  Indexed by barrier code:\n*  0 = clear, 1 = panel/gate, 2 = flask, 3 = mirror/slicer\n*  4 = block\n\nBarL db 0,12,2,0,0\nBarR db 0,0,9,11,0\n\n*-------------------------------\nDeathVelocity = 33\nOofVelocity = 22\n\ngatemargin = 6 ;higher = more generous\n\n]rts rts\n*-------------------------------\n*\n*  C H E C K  B A R R I E R\n*\n*  Check for collisions with vertical barriers\n*\n*-------------------------------\nCHECKBARR\n lda #-1 ;\"no-collision\" flag\n sta collideL\n sta collideR\n\n* Check for situations where character is temporarily\n* \"collision-proof\"\n\n lda CharAction\n cmp #7 ;turning?\n beq ]rts\n\n* Initialize CD/SN buffers\n* (Copy \"lastframe\" data from \"thisframe\", \"above\", or \"below\";\n* init \"thisframe\" with FF)\n\n lda CharBlockY\n sta BlockYthis\n\n jsr initCDbufs\n\n lda BlockYthis\n sta BlockYlast\n\n* Get beginning & end of range\n\n lda CDRightEj\n jsr getblockxp\n clc\n adc #2\n cmp #11\n bcc :ok\n lda #11\n  ;Last (rightmost) block in range +1\n:ok sta endrange\n\n lda CDLeftEj\n jsr getblockxp\n tax\n dex ;First (leftmost) block in range\n stx begrange\n\n* Get CD & SN data for every block in range [begrange..endrange]\n* on this level (BlockYthis) and on levels below & above\n\n* This level...\n\n lda BlockYthis\n sta blocky\n\n lda #SNthisframe\n ldx #CDthisframe\n jsr getCData\n\n* Level below...\n\n lda BlockYthis\n clc\n adc #1\n sta blocky\n\n lda #SNbelow\n ldx #CDbelow\n jsr getCData\n\n* ...and level above\n\n lda BlockYthis\n sec\n sbc #1\n sta blocky\n\n lda #SNabove\n ldx #CDabove\n jsr getCData\n\n* Got new data... now compare thisframe with lastframe\n* If a nybble has changed from 0 to 1, we have a collision.\n\n ldx #9\n:loop2\n lda SNthisframe,x\n bmi :no ;ff = no data for this frame\n cmp SNlastframe,x\n bne :no ;no corresponding data for last frame\n\n lda CDlastframe,x\n and #$0f ;low nybble first (L edge of barr)\n bne :noL\n\n lda CDthisframe,x\n and #$0f\n beq :noL\n\n stx collideL ;We have collision w/ L edge\n;x = block # (0-9)\n\n:noL lda CDlastframe,x\n and #$f0 ;hi nybble (R edge of barr)\n bne :noR\n\n lda CDthisframe,x\n and #$f0\n beq :noR\n\n stx collideR ;collision w/ R edge\n:noR\n:no dex\n bpl :loop2\n\n ldx collideL\n ldy collideR\n\n]rts rts\n\n*-------------------------------\n*\n*  G E T  C D A T A\n*\n*  Get \"thisframe\" data for specified blocky\n*\n*-------------------------------\ngetCData\n sta :smodSN+1\n stx :smodCD+1\n\n lda begrange\n jsr getblockej ;left edge of block\n clc\n adc #angle ;perspective\n sta blockedge\n\n ldx begrange\n:loop stx bufindex\n\n* First compare L edge of barr with R edge of char\n\n lda CharScrn\n ldx bufindex\n ldy blocky\n jsr getleftbar ;Get left edge of barrier\n\n cmp CDRightEj\n bcc :RofL\n ;= means L of L\n:LofL lda #0\n beq :cont1\n\n:RofL lda #$f\n:cont1 sta ztemp\n\n* Now compare R edge of barr with L edge of char\n\n lda CharScrn\n ldx bufindex\n ldy blocky\n jsr getrightbar ;Get right edge of barrier\n\n cmp CDLeftEj\n bcc :RofR\n beq :RofR ;= means R of R\n\n:LofR lda #$f0\n bne :cont2\n\n:RofR lda #0\n:cont2 ora ztemp\n\n ldx tempblockx ;guaranteed 0-9 by rdblock\n:smodCD sta CDthisframe,x\n\n lda tempscrn\n:smodSN sta SNthisframe,x ;screen #\n\n lda blockedge\n clc\n adc #14\n sta blockedge\n\n ldx bufindex\n inx\n cpx endrange\n bne :loop\n\n]rts rts\n\n*-------------------------------\n*\n*  I N I T   C D B U F S\n*\n*  Initialize SN and CD buffers\n*  (Take \"lastframe\" data from \"thisframe\", \"above\", or \"below\";\n*  init \"thisframe\" with FF)\n*\n*-------------------------------\ninitCDbufs\n lda BlockYthis\n cmp BlockYlast ;same BlockY as last frame?\n beq :usethis ;yes--copy data from \"thisframe\"\n\n clc\n adc #3\n cmp BlockYlast\n beq :usethis\n\n sec\n sbc #6\n cmp BlockYlast\n beq :usethis\n\n* BlockY has changed--copy data from \"above\" or \"below\"\n\n lda BlockYthis\n clc\n adc #1\n cmp BlockYlast\n beq :useabove\n sec\n sbc #3\n cmp BlockYlast\n beq :useabove\n\n:usebelow\n lda #SNbelow\n ldx #CDbelow\n jmp :cont\n\n:useabove lda #SNabove\n ldx #CDabove\n jmp :cont\n\n:usethis lda #SNthisframe\n ldx #CDthisframe\n\n:cont sta :smodSN+1\n stx :smodCD+1\n\n* Copy contents of appropriate SN & CD buffers (thisframe,\n* below, or above) into lastframe buffers...\n* and initialize SN buffers with $ff\n\n ldx #9\n:zloop\n:smodSN lda SNbelow,x\n sta SNlastframe,x\n\n:smodCD lda CDbelow,x\n sta CDlastframe,x\n\n lda #$ff\n sta SNthisframe,x\n sta SNabove,x\n sta SNbelow,x\n\n dex\n bpl :zloop\n\n]rts rts\n\n*-------------------------------\n*\n*  G E T   L E F T   B A R\n*\n*  Get X-coord of left edge of barrier\n*\n*  In:  X/Y/A = blockx/blocky/scrn\n*       blockedge\n*\n*  Out: A = screen X-coord (140)\n*       Return A = 255 if this block is no barrier\n*\n*-------------------------------\ngetleftbar\n jsr rdblock ;get block ID\n\n jsr cmpbarr ;return A = barrier code #\n beq :clear ;or -1 if clear\n tay\n\n lda blockedge\n clc\n adc BarL,y ;barr dist from L edge of block\n sec\n rts\n\n:clear lda #255\n clc\n rts\n\n*-------------------------------\n*\n*  G E T   R I G H T   B A R\n*\n*  Get right edge of barrier, 0 if clear\n*\n*-------------------------------\ngetrightbar\n jsr rdblock\n\n jsr cmpbarr\n beq :clear\n tay\n\n lda blockedge\n clc\n adc #13\n sec\n sbc BarR,y ;barr dist from R edge of block\n sec\n rts\n\n:clear lda #0\n clc\n]rts rts\n\n*-------------------------------\n*\n*  C O L L I S I O N S\n*\n*  If a collision was detected, act on it\n*\n*  In: collideL/R: - if no coll, 0-9 refers to block in\n*      which collision occurred\n*\n*  (CollideL is collision with LEFT EDGE of barrier\n*  CollideR is collision with RIGHT EDGE of barrier)\n*\n*-------------------------------\nCOLLISIONS\n lda AMtimer ;antimatter timer\n beq :cont\n lda $c030\n dec AMtimer\n rts\n:cont\n\n* Check for situations where we let character\n* pass thru barrier (e.g., climbing up onto ledge)\n\n lda CharAction\n cmp #2 ;hanging?\n beq ]rts\n cmp #6 ;hanging?\n beq ]rts\n lda CharPosn\n cmp #135\n bcc :cont2\n cmp #149\n bcc ]rts ;climbing?\n\n:cont2\n ldx collideL\n bmi :noL\n stx collX\n jmp leftcoll\n\n:noL ldx collideR\n bmi :noR\n stx collX\n jmp rightcoll\n:noR\n]rts rts\n\n*-------------------------------\n*\n*  R I G H T   C O L L I S I O N\n*\n*-------------------------------\nrightcoll\n lda CharSword\n cmp #2 ;if in fighting mode,\n beq :1 ;waive front-facing requirement\n\n lda CharFace\n bpl ]rts\n:1\n jsr checkcoll1\n bcc ]rts\n\n lda tempscrn\n ldx tempblockx\n ldy tempblocky\n\n jsr getrightbar ;edge of barr\n sec\n sbc CDLeftEj ;dist to char\n\n ldx #0 ;right\n jmp collide\n\n*-------------------------------\n*\n*  L E F T   C O L L I S I O N\n*\n*-------------------------------\nleftcoll\n lda CharSword\n cmp #2\n beq :1\n\n lda CharFace\n bne ]rts\n:1\n jsr checkcoll1\n bcc ]rts\n\n lda tempscrn\n ldx tempblockx\n ldy tempblocky\n jsr getleftbar\n sec\n sbc CDRightEj ;- dist to char\n\n ldx #-1 ;left\n jmp collide\n\n*-------------------------------\n*\n* Call CHECKCOLL for block #X\n*\n* In: CD data; X = blockx\n*\n*-------------------------------\ncheckcoll1\n stx tempblockx\n\n lda CharBlockY\n bpl :2\n clc\n adc #3\n bne :1\n\n:2 cmp #3\n bcc :1\n sec\n sbc #3\n:1 sta tempblocky\n\n lda SNthisframe,x\n sta tempscrn\n\n jsr rdblock1\n\n jmp CHECKCOLL\n\n*-------------------------------\n*\n*  C H E C K   C O L L\n*\n*  In: RDBLOCK results (A = objid)\n*\n*  Out: tempblockx,tempblocky,tempscrn\n*       cs if collision, cc if not\n*\n*-------------------------------\nCHECKCOLL\n cmp #flask\n beq :no ;flask is not really a barrier\n\n cmp #gate\n beq :gate\n\n cmp #slicer\n beq :slicer\n\n cmp #mirror\n beq :mirror\n bne :c1\n\n* You can pass thru mirror from R only if you take a\n* running jump\n\n:mirror\n lda CharID\n bne :c1 ;must be kid\n lda CharPosn\n cmp #39\n bcc :c1\n cmp #44\n bcs :c1\n lda CharFace\n bpl :c1\n\n jsr smashmirror\n lda #$ff\n sta createshad ;set flag\n\n clc\n rts\n\n* Is slicer closed?\n\n:slicer lda (BlueSpec),y\n cmp #slicerExt\n bne :no ;no--pass thru\n beq :c1\n\n* Is gate low enough to bar you?\n\n:gate jsr gatebarr? ;return cc if gate bars you\n bcc :c1\n\n* no collision--pass thru barrier\n\n:no clc\n rts\n\n* Yes, collision--get blockedge & return cs\n\n:c1\n lda tempblockx\n jsr getblockej\n jsr AdjustScrn\n clc\n adc #angle\n sta blockedge\n:yes sec\n]rts rts\n\n*-------------------------------\n*\n* AdjustScrn\n*\n* In:  tempscrn, VisScrn\n*      scrnLeft/Right/BelowL/BelowR\n*      A = X-coord on tempscrn\n*\n* Out: A = X=coord on VisScrn\n*\n*-------------------------------\nAdjustScrn\n ldx tempscrn\n cpx VisScrn\n beq ]rts\n cpx scrnLeft\n beq :osL\n cpx scrnBelowL\n beq :osL\n cpx scrnRight\n beq :osR\n cpx scrnBelowR\n beq :osR\n rts\n:osR clc\n adc #ScrnWidth\n rts\n:osL sec\n sbc #ScrnWidth\n]rts rts\n\n*-------------------------------\n*\n*  C O L L I D E\n*\n*  In: A = distance from barrier to character\n*      X = coll direction (-1 = left, 0 = right)\n*      tempblockx,y,scrn set for collision block\n*\n*-------------------------------\ncollide\n stx CollFace ;temp var\n\n ldx CharLife ;dead?\n bpl ]rts ;yes--let him finish falling (or whatever)\n\n ldx CharPosn\n cpx #177 ;impaled?\n beq ]rts ;yes--ignore collision\n\n clc\n adc CharX\n sta CharX\n\n* In midair or on the ground?\n\n jsr rdblock1\n\n ldx CollFace\n bpl :faceL\n\n cmp #block ;If this block has no floor,\n beq :2 ;use the one in front of it\n bne :1\n\n:2 dec tempblockx\n jmp :3\n\n:faceL cmp #panelwof ;Panelwof is only a problem\n beq :4 ;when facing L\n cmp #panelwif\n beq :4\n cmp #block\n bne :1\n\n:4 inc tempblockx\n lda tempscrn\n bne :3\n lda tempblockx\n cmp #10\n bne :3\n lda CharScrn\n sta tempscrn\n lda #0\n sta tempblockx ;screen 0 block 10 = CharScrn block 0\n\n:3 jsr rdblock1\n\n:1 jsr cmpspace\n bne GroundBump\n\n*-------------------------------\n* Bump into barrier w/o floor\n\nAirBump\n lda #-4\n jsr addcharx\n sta CharX\n\n lda CharAction\n cmp #4 ;already falling?\n bne :3\n;yes--just rebound off wall\n lda #0\n sta CharXVel\n beq :smackwall\n\n:3 lda #bumpfall\n jsr jumpseq\n jsr animchar\n\n:smackwall\n\nBumpSound\n lda #1\n sta alertguard\n lda #SmackWall\n jmp addsound\n\n*-------------------------------\n* Bump into barrier w/floor\n\nGroundBump\n ldx CharBlockY\n\n lda CharSword\n cmp #2\n beq :skipair ;no airbump if en garde\n\n lda FloorY+1,x\n sec\n sbc CharY\n cmp #15 ;constant\n bcs AirBump\n:skipair\n lda FloorY+1,x\n sta CharY\n\n lda CharYVel\n cmp #OofVelocity\n bcc :okvel\n lda #-5\n jsr addcharx\n sta CharX\n rts ;let checkfloor take care of it\n\n:okvel lda #0\n sta CharYVel\n\n lda CharLife\n beq :deadbump\n\n* Is he en garde?\n\n lda CharSword\n cmp #2\n beq :CollideEng ;yes--collide en garde\n\n* Should it be a hard or a soft bump?\n\n:normal\n ldx CharPosn ;last frame\n\n cpx #24\n beq :hard\n cpx #25\n beq :hard ;standjump-->hard\n\n cpx #40\n bcc :1\n cpx #43\n bcc :hard ;runjump-->hard\n\n:1 cpx #102\n bcc :2\n cpx #107\n bcc :hard ;freefall-->hard\n\n:2\n\n:soft lda #bump\n jsr jumpseq\n jsr BumpSound ;soft bump sound?\n jmp animchar\n\n:hard lda #hardbump\n:doit jsr jumpseq\n jsr animchar\n\n jmp BumpSound\n\n* dead when he hits the wall\n\n:deadbump\n]rts rts\n\n*-------------------------------\n* Collide en garde\n\n:CollideEng\n lda CollFace\n cmp CharFace\n beq :collback\n\n lda #bumpengfwd\n bne :doit\n\n* Char is en garde & trying to back into barrier\n\n:collback\n lda #bumpengback\n jsr jumpseq\n jsr animchar ;get new frame\n\n lda #1\n jsr addcharx\n sta CharX\n rts\n\n*-------------------------------\n*\n*  G E T   F W D   D I S T\n*\n*  In: Char data\n*\n*  Out: A = size of \"careful step\" forward (0-14 pixels)\n*       X = what you're stepping up to\n*           (0 = edge, 1 = barrier, 2 = clear)\n*       RDBLOCK results for that block\n*\n*-------------------------------\nGETFWDDIST\n\n* Get edges\n\n jsr GetBaseBlock\n jsr setupchar\n jsr getedges\n\n* If this block contains barrier, get distance\n\n jsr getunderft ;read block underfoot\n sta tempobjid\n\n jsr cmpbarr\n beq :nextb ;This block is clear\n\n lda CharBlockX\n sta tempblockx\n jsr DBarr ;returns A = dist to barrier\n tax\n bpl :tobarr\n\n* If next block contains barrier, get distance\n\n:nextb\n jsr getinfront\n sta tempobjid\n cmp #panelwof\n bne :99 ;Panelwof is special case\n ldx CharFace ;if you're facing R\n bpl :toEOB\n\n:99 jsr cmpbarr\n beq :nobarr\n\n lda infrontx\n sta tempblockx\n jsr DBarr\n tax\n bpl :tobarr\n\n* If next block is dangerous (e.g., empty space)\n* or sword or potion, step to end of this block\n\n:nobarr\n jsr getinfront ;read block in front\n sta tempobjid\n\n  cmp #loose\n beq :toEOB ;step to end of block\n\n cmp #pressplate\n beq :toEOB1\n\n cmp #sword\n beq :toEOB1\n cmp #flask\n beq :toEOB1\n\n jsr cmpspace\n beq :toEOB\n\n* All clear--take a full step forward\n\n:fullstep lda #11 ;natural step size\n\n ldx #2 ;clear\n bne :done\n\n* Step to end of block (no \"testfoot\")\n\n:toEOB1 jsr getdist\n beq :fullstep\n ldx #0\n beq :done\n\n* Step to end of block\n\n:toEOB jsr getdist ;returns # pixels to end of block (0-13)\n\n ldx #0 ;edge\n\n:done ldy tempobjid\n]rts rts\n\n* Step up to barrier\n\n:tobarr\n cmp #14\n bcs :fullstep\n\n ldx #1 ;barrier\n bne :done\n\n*-------------------------------\n*\n* Get distance to barrier\n*\n* In: rdblock results; tempobjid\n*     Must have called setupchar/getedges\n* Out: A = distance to barrier (- if barr is behind char)\n*\n*-------------------------------\nDBarr\n lda tempobjid\n cmp #gate\n bne :ok\n;treat gate as barrier only if down\n jsr gatebarr? ;returns cs if open\n bcs :clr\n\n:ok lda tempblockx\n jsr getblockej\n clc\n adc #angle\n sta blockedge ;L edge of this block\n\n lda CharFace\n bmi :checkL\n\n* Char facing R -- get distance to barrier\n\n:checkR\n lda tempobjid ;block ID\n\n jsr cmpbarr ;return A = barrier code #\n beq :clr\n tay\n\n lda blockedge\n clc\n adc BarL,y\n sta ztemp ;left edge of barr\n\n sec\n sbc CDRightEj\n rts ;If -, barr is behind char\n\n:clr lda #-1\n rts\n\n* Char facing L -- get distance to barr\n\n:checkL\n lda tempobjid\n\n jsr cmpbarr\n beq :clr\n tay\n\n lda blockedge\n clc\n adc #13\n sec\n sbc BarR,y\n sta ztemp ;R edge of barr\n\n lda CDLeftEj\n sec\n sbc ztemp\n\n]rts rts\n\n*-------------------------------\n*\n*  A N I M   C H A R\n*\n*  Get next frame from sequence table;\n*  update char data accordingly.\n*  We're now ready to draw this frame.\n*\n*-------------------------------\nANIMCHAR\n\n:next jsr getseq ;get next byte from seqtab\n ;& increment CharSeq\n\n cmp #chx ;\"change x\" instruction?\n bne :no1\n\n jsr getseq ;next byte is delta-x\n\n jsr addcharx\n sta CharX\n\n jmp :next\n\n*-------------------------------\n:no1 cmp #chy\n bne :no2\n\n jsr getseq\n\n clc\n adc CharY\n sta CharY\n\n jmp :next\n\n*-------------------------------\n:no2 cmp #aboutface\n bne :no3\n\n lda CharFace\n eor #$ff\n sta CharFace\n\n jmp :next\n\n*-------------------------------\n:no3 cmp #goto\n bne :no4\n\n:goto jsr getseq ;low byte of address\n pha\n\n jsr getseq ;high byte\n\n sta CharSeq+1\n pla\n sta CharSeq\n\n jmp :next\n\n*-------------------------------\n:no4 cmp #up\n bne :no5\n\n dec CharBlockY\n\n jsr addslicers\n\n jmp :next\n\n*-------------------------------\n:no5 cmp #down\n bne :no6\n\n inc CharBlockY\n\n jsr addslicers\n\n jmp :next\n\n*-------------------------------\n:no6 cmp #act\n bne :no7\n\n jsr getseq\n sta CharAction\n\n jmp :next\n\n:no7 cmp #setfall\n bne :no8\n\n jsr getseq\n sta CharXVel\n\n jsr getseq\n sta CharYVel\n\n jmp :next\n\n:no8 cmp #ifwtless\n bne :no9\n\n lda weightless ;weightless?\n bne :goto ;yes--branch\n\n jsr getseq\n jsr getseq ;skip 2 bytes\n jmp :next ;& continue\n\n:no9 cmp #die\n bne :no10\n jmp :next\n\n:no10 cmp #jaru\n bne :no11\n\n lda #1\n sta jarabove ;jar floorboards above\n jmp :next\n\n:no11 cmp #jard\n bne :no12\n\n lda #-1\n sta jarabove ;jar floorboards below\n jmp :next\n\n*-------------------------------\n:no12 cmp #tap\n bne :no13\n\n jsr getseq ;sound #\n cmp #0 ;0: alert guard\n beq :0\n\n cmp #1 ;1: footstep\n bne :1\n lda #Footstep\n:tap jsr addsound\n:0 lda #1\n sta alertguard\n jmp :next\n\n:1 cmp #2 ;2: smack wall\n bne :2\n lda #SmackWall\n bne :tap\n:2 jmp :next\n\n:no13 cmp #nextlevel\n bne :no14\n\n jsr GoneUpstairs\n jmp :next\n\n:no14 cmp #effect\n bne :no15\n\n jsr getseq ;effect #\n cmp #1\n bne :fx0\n\n jsr potioneffect\n:fx0 jmp :next\n\n:no15\n*-------------------------------\n sta CharPosn ;frame #\n\n]rts rts\n\n*-------------------------------\n* Char has gone upstairs\n* What do we do?\n*-------------------------------\nGoneUpstairs\n lda level\n cmp #13\n beq :ok ;no music for level 13\n cmp #4\n bne :1 ;mirror level is special\n:3 lda #s_Shadow\n bne :2\n\n:1 lda #s_Upstairs\n:2 ldx #25\n jsr cuesong\n\n:ok inc NextLevel\n rts\n\n*-------------------------------\n*\n*  Sliced by slicer? (Does CD buf show char overlapping\n*  with a closed slicer?)\n*\n*  In: Char data, CD data\n*\n*-------------------------------\nCHECKSLICE\n lda CharBlockY\n sta tempblocky\n\n ldx #9\n\n:loop stx tempblockx\n\n lda CDthisframe,x\n cmp #$ff ;char overlapping barr?\n bne :ok ;no\n\n* Yes--is it a slicer?\n\n lda SNthisframe,x\n sta tempscrn\n\n jsr rdblock1\n cmp #slicer\n bne :ok\n\n lda (BlueSpec),y\n and #$7f\n cmp #slicerExt ;slicer closed?\n beq :slice ;yes--slice!\n\n* No--keep checking\n\n:ok ldx tempblockx\n dex\n bpl :loop\n]rts rts\n\n* Slice!\n* In: rdblock results for slicer block\n\n:slice\n]slice\n lda (BlueSpec),y\n ora #$80\n sta (BlueSpec),y ;set hibit (smear)\n\n:cont lda CharPosn\n cmp #178 ;if already cut in half (e.g. by another slicer),\n beq ]rts ;leave him alone\n\n lda tempblockx\n jsr getblockej ;edge of slicer block\n clc\n adc #7\n sta CharX\n\n lda #8\n jsr addcharx\n sta CharX ;align char w/slicer\n\n ldx CharBlockY\n inx\n lda FloorY,x\n sta CharY ;align char w/floor\n\n lda #100\n jsr decstr\n\n lda #Splat\n jsr addsound\n\n lda #halve\n jsr jumpseq\n jmp animchar\n\n*-------------------------------\n*\n*  Sliced by slicer?\n*\n*  (Use this routine for enemy, who has no CD data)\n*\n*  In: Char data; GETEDGES results\n*\n*-------------------------------\nCHECKSLICE2\n jsr getunderft\n jsr :slice? ;return cs if sliced\n bcs ]rts\n\n inc tempblockx\n jsr rdblock1\n\n:slice?\n cmp #slicer\n bne :safe\n lda (BlueSpec),y\n and #$7f\n cmp #slicerExt\n bne :safe ;slicer open\n\n lda tempblockx\n jsr getblockej\n clc\n adc #angle\n sta blockedge\n\n lda tempscrn\n ldx tempblockx\n ldy tempblocky\n jsr getleftbar\n cmp CDRightEj\n bcs :safe\n\n lda tempscrn\n ldx tempblockx\n ldy tempblocky\n jsr getrightbar\n cmp CDLeftEj\n bcc :safe\n beq :safe\n\n jsr rdblock1\n jsr ]slice\n sec\n rts\n\n:safe clc\n]rts rts\n\n*-------------------------------\n*\n* Special situation: If char is standing directly under closing\n* gate, it knocks him aside when it shuts.\n*\n* In: Char data, CD data\n*\n*-------------------------------\nCHECKGATE\n lda CharAction\n cmp #7 ;turning\n beq :1\n lda CharPosn\n cmp #15 ;standing?\n beq :1\n cmp #108\n bcc ]rts\n cmp #111 ;crouching?\n bcs ]rts\n:1\n jsr getunderft\n cmp #gate\n beq :check\n\n dec tempblockx\n jsr rdblock1\n cmp #gate\n bne ]rts\n:check\n ldx tempblockx\n lda CDthisframe,x\n and CDlastframe,x\n cmp #$ff\n bne ]rts\n\n jsr gatebarr?\n bcs ]rts\n\n jsr BumpSound\n\n* bump him left or right?\n\n lda tempblockx\n sta collX\n jsr getunderft\n lda tempblockx\n cmp collX\n beq :left\n bcs :right\n\n:left lda #-5\n bne :10\n:right lda #5\n:10 clc\n adc CharX\n sta CharX\n]rts rts\n\n*-------------------------------\n*\n* Return cc if gate bars you, cs if clear\n*\n*-------------------------------\ngatebarr?\n lda (BlueSpec),y\n lsr\n lsr\n clc\n adc #gatemargin\n cmp imheight\n]rts rts\n\n*-------------------------------\n*\n* Limited collision detection for enemies\n* (backing into wall or gate while fighting)\n*\n*-------------------------------\nENEMYCOLL\n lda AMtimer ;antimatter timer\n bne ]rts\n\n lda CharAction\n cmp #1\n bne ]rts ;must be on ground\n lda CharLife\n bpl ]rts ;& alive\n lda CharSword\n cmp #2\n bcc ]rts ;& en garde\n\n jsr getunderft\n cmp #block\n beq :collide\n cmp #panelwif\n beq :collide\n cmp #gate\n bne :1\n jsr gatebarr?\n bcc :collide\n\n* If facing R, check block behind too\n\n:1 lda CharFace\n bmi ]rts\n dec tempblockx\n jsr rdblock1\n cmp #panelwif\n beq :collide\n cmp #gate\n bne ]rts\n jsr gatebarr?\n bcc :collide\n]rts rts\n\n* Char is en garde & trying to back into barrier\n* Put him right at edge\n\n:collide\n jsr setupchar\n jsr getedges ;get edges\n\n lda tempscrn\n ldx tempblockx\n ldy tempblocky\n jsr rdblock\n sta tempobjid\n jsr checkcoll\n bcc ]rts\n\n jsr DBarr2 ;get A = dist to barrier\n tax\n bpl ]rts\n eor #$ff\n clc\n adc #1\n jsr addcharx\n sta CharX\n\n lda #bumpengback\n jsr jumpseq\n jsr animchar ;get new frame\n jmp rereadblocks\n\n*-------------------------------\n*\n* Special version of DBarr for enemy collisions\n*\n* In: checkcoll results; tempobjid\n*     Must have called setupchar/getedges\n* Out: A = distance to barrier (- if barr is behind char)\n*\n*-------------------------------\nDBarr2\n lda CharFace\n bpl :checkL ;Note: reversed from DBarr\n\n* Char's back facing R -- get distance to barrier\n\n:checkR\n lda tempobjid ;block ID\n\n jsr cmpbarr ;return A = barrier code #\n beq :clr\n tay\n\n lda blockedge\n clc\n adc BarL,y\n sta ztemp ;left edge of barr\n\n sec\n sbc CDRightEj\n rts ;If -, barr is behind char\n\n:clr lda #-1\n rts\n\n* Char facing L -- get distance to barr\n\n:checkL\n lda tempobjid\n\n jsr cmpbarr\n beq :clr\n tay\n\n lda blockedge\n clc\n adc #13\n sec\n sbc BarR,y\n sta ztemp ;R edge of barr\n\n lda CDLeftEj\n sec\n sbc ztemp\n\n]rts rts\n\n*-------------------------------\n lst\n ds 1\n usr $a9,16,$b00,*-org\n lst off\n"
  },
  {
    "path": "04 Support/MakeDisk/S/COMMENTS.S",
    "content": "* comments\n*-------------------------------\n*\n* M  O  V  E  R\n*\n*-------------------------------\n*\n* Routines to keep track of moving objects are contained\n* in the file MOVER.\n*\n* There are 2 types of moving objects: Transitional objects\n* (TROBs) and mobile objects (MOBs).\n*\n* TROBs (e.g. gate, spikes, pressplate, torch) can have moving\n* parts & change appearance, but remain in a fixed location.\n*\n* MOBs (falling floor) can move all over the place, including\n* between screens.\n*\n*-------------------------------\n*\n* TROBs are kept track of in a data structure called\n* the \"trans list\" as follows:\n*\n* numtrans = # of active TROBs\n*\n* For x = 1 to numtrans:\n*\n*  trloc,x = block location (0-29)\n*  trscrn,x = screen # (1-24)\n*  trdirec,x = direction of motion (means something different\n*   for different kinds of objects)\n*\n* When an object stops moving, we set its trdirec = -1, then\n* remove the object from trans list on the next cycle.\n*\n*-------------------------------\n*\n* MOBs are kept track of in a similar data structure called\n* the \"MOB list\":\n*\n* nummob = # of active MOBs\n*\n* For x = 1 to nummob:\n*\n*  mobx,x = byte (0-39)\n*  moby,x = y-coord\n*  mobscrn,x = screen #\n*  mobvel,x = velocity\n*  mobtype,x = type\n*    0: falling floor\n*    (No other MOB types defined at present)\n*  moblevel,x = level (0-2)\n*\n*-------------------------------\n*\n*  The basic routine in MOVER is ANIMTRANS.  This\n*  routine, which is called once per cycle, advances\n*  all active TROBs to their next phase (this includes\n*  deleting TROBs that become inactive) and marks the\n*  appropriate redraw buffers for each TROB.\n*\n*  Other routines such as TRIGSPIKES, PUSHPP, BREAKLOOSE,\n*  etc. are called to add new TROBs to the trans list (when,\n*  for example, a character jumps over spikes or steps on\n*  a pressure plate or loose floor).\n*\n*  The routine ANIMMOBS performs the same function for\n*  the MOB list that ANIMTRANS does for the trans list.\n*  It advances all active MOBs to the position they will\n*  occupy in the next frame.\n*\n*  Example: When a character steps on a loose floor, the\n*  control routine senses this & puts in a call to\n*  BREAKLOOSE (which adds the loose floor to the trans\n*  list).  For the next 10 frames or so, the loose floor\n*  wiggles (under the control of ANIMTRANS) until ANIMTRANS\n*  decides it's time for it to fall.  At that point, the\n*  loose floor is deleted from the trans list, the block\n*  is replaced by \"empty space\", and a new MOB is\n*  created to take its place.  Under the control of\n*  ANIMMOBS, the MOB then falls until it hits the ground,\n*  at which point ANIMMOBS deletes the falling floor from\n*  the MOB list and changes the objid of the block it landed\n*  on to \"rubble.\"\n*\n*-------------------------------\n*\n*  F  R  A  M  E  A  D  V\n*\n*-------------------------------\n*\n*  IMAGE LISTS\n*\n*  FRAMEADV never calls hires routines directly.  Instead,\n*  parameters of images to be drawn are stored in \"image lists.\"\n*\n*  There are 6 separate image lists:\n*\n*  bg:   Images in background plane (drawn first)\n*        X, Y, IMG, OP\n*\n*  wipe: Solid-color wipes (drawn with b.g. plane)\n*        X, Y, H, W, COL\n*\n*  fg:   Images in foreground plane (drawn last)\n*        X, Y, IMG, OP\n*\n*  mid:  Images between b.g. and f.g. planes\n*        X, OFF, Y, IMG, OP, TYP, CU, CD, CL, CR\n*\n*  msg:  Images in message plane (drawn last of all)\n*        X, OFF, Y, IMG, OP\n*\n*  gen:  General instructions (e.g. clear screen)\n*\n*\n*  Explanation of parameters:\n*\n*  X    = X-coord (in bytes)\n*  OFF  = X-offset (0-6)\n*  Y    = Y-coord\n*  IMG  = image # in table (1-n)\n*  OP   = opacity\n*  TYP  = image type (for mid only)\n*  CU   = top cutoff\n*  CD   = bottom cutoff\n*  CL   = left cutoff\n*  CR   = right cutoff\n*  H    = height\n*  W    = width (in bytes)\n*  COL  = color (for wipe only)\n*\n*  NOTE--bg, fg, and wipe calls assume offset=0\n*\n*\n*  There is also an \"object list\" with params similar to\n*  mid list:\n*\n*        X, OFF, Y, IMG, FACE, TYP, CU, CD, CL, CR\n*\n*  Note that obj list has 2 additional params:\n*\n*  objFACE = left/right\n*  objTYP  = object type (Not to be confused with midTYP)\n*\n*  The object list has one entry for each object to be\n*  drawn (e.g., \"kid,\" \"falling floor\").  FRAMEADV uses\n*  the object list to build the actual mid list\n*  of images to be drawn.  E.g., the single object \"falling\n*  floor\" might translate into 3 separate images:\n*  A-section, B-section, and D-section.\n*\n*-------------------------------\n*\n*  REDRAW BUFFERS\n*\n*  Each redraw buffer contains 30 counters, one for each\n*  block on screen: 0 = skip, non-0 = redraw and decrement.\n*\n*  REDBUF:\n*  The most general-purpose buffer.  Marking REDBUF for a\n*  block will cause all sections of the block to be redrawn.\n*\n*  WIPEBUF:\n*  Wipe square (usually to black).  WHITEBUF contains\n*  wipe height, in lines.\n*\n*  Marking both REDBUF and WIPEBUF for a block will cause\n*  the entire block to be erased & redrawn.  This is the\n*  safest way to redraw a block.\n*\n*  MOVEBUF:\n*  Refers only to movable portion of object (e.g. lowering\n*  gate).  Superseded by REDBUF.\n*\n*  FREDBUF:\n*  Refers only to foreground plane.  Marked when character\n*  goes behind a post or other object with a frontpiece.\n*  Superseded by REDBUF.\n*\n*  FLOORBUF:\n*  Refers to floorpieces.  Marked to the right of a\n*  falling or hanging character.  FLOORBUF causes floorpiece\n*  to be drawn in the mid plane (where it will cover up\n*  character if appropriate).\n*\n*  HALFBUF:\n*  Like FLOORBUF, but redraws a triangular section of\n*  the floorpiece instead of the whole thing.  Used when\n*  a character climbs up on the left side of a floorpiece\n*  and we want to mask out his lower body while letting his\n*  upper body show.  (Superseded by FLOORBUF.)\n*\n*  OBJBUF:\n*  Marked whenever objects need to be drawn in a given block.\n*  (Objects are always the last mid elements drawn in\n*  a block.  Objects are assigned to blocks based on\n*  their lower left x-y coords.  Characters are considered\n*  objects.  There can be multiple objects in a given block.)\n*\n*  TOPBUF:\n*  10-byte buffer for row of D-sections across top of screen\n*  (from screen above).\n*\n*  Note that TOPBUF is a 10-byte buffer while the others are\n*  all 30 bytes.\n*\n*-------------------------------\n*\n*  The specific routines called by SURE (in FRAMEADV) for\n*  each of these buffers are:\n*\n*  REDBUF: redblock (drawc, drawb, drawmb, drawd, drawmd,\n*     drawa, drawma, drawfrnt)\n*\n*  WIPEBUF: wipesq\n*\n*  MOVEBUF: drawc, drawmc, drawmb, drawma\n*\n*  FREDBUF: drawfrnt\n*\n*  FLOORBUF: drawfloor\n*\n*  HALFBUF: drawhalf\n*\n*  OBJBUF: drawobjs\n*\n*  TOPBUF: drawc, drawb, redrawd, drawmd, drawfrnt\n*\n*-------------------------------\n*\n*  B  L  U  E  P  R  I  N  T\n*\n*-------------------------------\n*\n*  LEVEL BLUEPRINT ($900 bytes)\n*\n*               Start      Length\n*               -----      ------\n*  BlueType     B700       720\n*  BlueSpec     B9D0       720\n*  LinkLoc      BCA0       256\n*  LinkMap      BDA0       256\n*  Map          BEA0       96\n*  Info         BF00       256\n*\n*  TOTAL: 2304 bytes\n*\n*-------------------------------\n*\n* BLUETYPE\n*\n* Bytes 0-29 describe screen #1\n* Bytes 30-59   \"     screen #2\n* etc.\n* 24 screens total.\n*\n* Each BLUETYPE byte corresponds to one block.\n* (30 blocks per screen.)  Blocks are mapped\n* into BLUETYPE left-right, top-bottom.\n*\n* AND with #$1F to get the \"objid,\" or object\n* identification number (0-31), of each block.\n*\n*-------------------------------\n*\n* BLUESPEC\n*\n* (Screen blocks mapped the same way as in BLUETYPE.)\n*\n* Taken together, each pair of corresponding bytes in\n* BLUETYPE and BLUESPEC contains all the information\n* about an object.  The BLUETYPE byte always contains\n* the object id.  The BLUESPEC byte functions differently\n* depending on what the object is.\n*\n* For movable objects (gates, spikes, torches, etc.)\n* BLUESPEC specifies the object's \"state\" (e.g. is it\n* open, closed, somewhere in between?)\n*\n* For static objects (floor, space, solid block, etc.)\n* BLUESPEC specifies the object's \"pattern\" (e.g. which\n* design appears on the wall behind it?)\n*\n* For pressure plates, the BLUESPEC byte tells which\n* gates the pressure plate controls.  Specifically, the\n* BLUESPEC byte is a pointer (0-255) to the first entry\n* in the link list for this pressure plate.\n*\n*-------------------------------\n*\n* Link list (LINKLOC/LINKMAP)\n*\n* Contains a list of the gates controlled by each pressure\n* plate.  Each pair of bytes specifies one plate-to-gate\n* linkage.  There can be up to 256 such linkages in a level.\n*\n* LINKLOC:\n*  Bits 0-4: gate screen posn (0-29)\n*  Bits 5-6: low 2 bits of gate screen # (1-24)\n*  Bit 7: 1 = this is last entry, 0 = more gates to come\n*\n* LINKMAP:\n*  Bits 0-4: pressplate timer (0-31)\n*  Bits 5-7: high 3 bits of gate screen #\n*\n* If a pressplate controls nothing, LINKLOC = FF; LINKMAP\n* still functions as pressplate timer.\n*\n*-------------------------------\n*\n* MAP\n*\n* Specifies how the 24 screens of the level are connected.\n*\n* Each screen gets 4 bytes corresponding to the screen #s\n* of the 4 adjacent screens.\n*\n* Bytes 0-3 = screen #1\n* Bytes 4-7 = screen #2\n* etc.\n*\n* For each screen:\n* Byte #1 = screen to left\n* Byte #2 = screen to right\n* Byte #3 = screen above\n* Byte #4 = screen below\n*\n*-------------------------------\n*\n*  INFO\n*\n*  Bytes 0-63: reserved for editor\n*\n*  Bytes 64-255: Information about starting positions\n*  of player & other characters on this level.\n*  (See GAMEEQ for details.)\n*\n*-------------------------------\n*\n*  S  E  Q  T  A  B  L  E\n*\n*-------------------------------\n*\n*  Frame def list:\n*\n*  1200 bytes allocated -- 240 frames, 5 bytes each\n*  (241-255 reserved as commands)\n*\n*  Frame definition consists of:\n*\n*  (1) Fimage\n*\n*     Bit 7 = chtable # (0-7), bit 2\n*\n*     Bits 0-6 = image # (0-127)\n*\n*     SUMMARY:\n*       $00 + x: chtable 1,2,3,4\n*       $80 + x: chtable 5,6,7,8\n*\n*  (2) Fsword\n*\n*     Bits 6-7 = chtable # (0-7), bits 0-1\n*\n*     Bits 0-5 = pointer to SWORDTAB frame (0-63)\n*\n*     SUMMARY:\n*       $00 + x: chtable 1,5\n*       $40 + x: chtable 2,6\n*       $80 + x: chtable 3,7\n*       $c0 + x: chtable 4,8\n*\n*  (3) Fdx\n*\n*     X-shift in pixels (+ = fwd, - = bkwd)\n*     (NOTE -- horizontal resolution is 140 pixels)\n*\n*  (4) Fdy\n*\n*     Y-shift in pixels (+ = down, - = up)\n*     (Frame #15 is defined as unshifted)\n*\n*  (5) Fcheck\n*\n*     Bit 7 = odd/even pixel\n*\n*     Bit 6 = 1 if floor check is required (i.e., if weight\n*       is on floor)\n*\n*     Bit 5 = 1 to \"thin\" this frame for collision detection\n*\n*     Bits 0-4 = number of pixels (0-31) from left edge of\n*       image block to base x-coord\n*       (usually center of foot bearing character's weight)\n*\n*     SUMMARY:\n*       $c0 + x: check, odd\n*       $40 + x: check, even\n*       $80 + x: no check, odd\n*       $00 + x: no check, even\n*\n*     + $20 to set bit 5\n*\n*-------------------------------\n*\n*  SEQPOINT is 2-byte pointer to character's current\n*  position in sequence table.\n*\n*  Seq pointer is incremented by 1 with each frame-advance.\n*\n*  CTRL can jump seq pointer around at will (e.g., in response\n*  to joystick command)\n*\n*  POSITIVE seq table values represent frame numbers.\n*  NEGATIVE values are instruction codes.\n*\n*  Sequence table instructions:\n*\n*   goto NN    jump seq pointer to NN (low byte first)\n*   aboutface  change KIDFACE direction\n*   up         up one floor\n*   down       down one floor\n*   chx N      KIDX := KIDX + N (BEFORE we draw next frame)\n*   chy N      KIDY := KIDY + N (ditto)\n*   act N      change action code to N\n*   setfall X,Y  set initial x,y velocity for freefall\n*\n*  Action codes:\n*\n*  -1 = dead\n*   0 = standing still\n*   1 = running, jumping, other actions\n*       that require a floor beneath your feet\n*   2 = hanging, climbing, and all other actions that\n*       require holding onto a ledge\n*   3 = in midair (briefly)\n*   4 = in freefall\n*   5 = being bumped\n*   6 = hanging straight\n*   7 = turning\n*\n*  Screen resolution is 140 x 192.\n*\n*-------------------------------\n*\n*  NOTE: Frame table offsets are TEMPORARY; sequence table\n*  offsets are PERMANENT.\n*\n*  CTRL draws each frame at [KIDX + Fdx, KIDY + Fdy],\n*  but leaves KIDX & KIDY unchanged for the next frame.\n*  \"Chx\" and \"Chy\" instructions in sequence table, however,\n*  change KIDX & KIDY permanently.\n*\n*  For JUMPHANG, CLIMBUP, etc., the idea is for KIDX, KIDY &\n*  KIDLEVEL to keep the kid where he started -- at the end\n*  of the block behind & below the one he's hanging from --\n*  and use only the frame list x & y offsets, until he's back\n*  on the ground.  This way, we can branch into either HANGDROP\n*  or CLIMBUP from any point in HANG.\n*\n*  The first 4 frames of STARTRUN also use only the frame list\n*  offsets.  This lets us switch easily to, say, FULLSTEP\n*  or STANDJUMP.\n*\n*-------------------------------\n*\n*  M  I  S  C\n*\n*-------------------------------\n*\n* Potion IDs\n*\n* 0  Empty\n* 1  Regular healing\n* 2  Boost strength\n* 3  Weightless\n* 4  Upside down\n* 5  Poison\n*\n*-------------------------------\n*\n* Character IDs\n*\n* 0  Kid\n* 1  Shadow\n* 2  Guard\n* 3  Vizier (in game)\n* 4  Skeleton\n* 5  Princess (in princess cuts)\n* 6  Vizier (in princess cuts)\n*\n*-------------------------------\n lst off\n"
  },
  {
    "path": "04 Support/MakeDisk/S/CTRL.S",
    "content": "* ctrl\norg = $3a00\n tr on\n lst off\n*-------------------------------\n org org\n\n jmp PLAYERCTRL\n jmp CHECKFLOOR\n jmp SHADCTRL\n jmp REREADBLOCKS\n jmp CHECKPRESS\n\n jmp DOIMPALE\n jmp GENCTRL\n jmp CHECKIMPALE\n\n*-------------------------------\n lst\n put eq\n lst\n put gameeq\n lst\n put seqdata\n lst\n put soundnames\n lst\n put movedata\n lst off\n\n dum $f0\nztemp ds 1\njxtemp ds 1\njytemp ds 1\njbtemp ds 1\natemp ds 1\n dend\n\n*-------------------------------\n*  Misc. changeable parameters\n\nDeathVelocity = 33\nOofVelocity = 22\n\ngrabreach = -8\ngrabspeed = 32 ;max Y-vel to grab ledge\ngrablead = 25 ;increase to grab ledge earlier\nstuntime = 12\n\njumpupreach = 0\njumpupangle = -6\n\nJumpBackThres = 6\nStepOffFwd = 3\nStepOffBack = 8\n\nswordthres = 90 ;to go en garde (facing fwd)\nswordthresN = -10 ;\" \" (behind you)\nblockthres = 32\ngraceperiod = 9\ngdpatience = 15\n\ngclimbthres = 6\n\nstairthres = 30\n\nplus1 db -1,1\nminus1 db 1,-1\n\n*-------------------------------\n*\n*  If he's passed thru floor plane, change CharBlockY\n*  If floor is solid, stop him\n*\n*-------------------------------\nfalling\n lda CharY\n\n ldx CharBlockY\n inx\n cmp FloorY,x\n bcs :1\n\n jmp fallon ;Hasn't reached floor yet\n\n* Character is passing thru floor plane\n\n:1 jsr getunderft ;Check if there's\n ;solid floor underfoot\n cmp #block\n bne :2 ;Solid block is special case--\n jsr InsideBlock ;reset him to either side of block\n\n:2 jsr cmpspace\n bne hitflr\n\n inc CharBlockY ;Fall thru floor plane\n\n]rts rts\n*-------------------------------\n*\n*  C H E C K  F L O O R\n*\n*-------------------------------\n\nCHECKFLOOR\n lda CharAction\n cmp #6 ;hanging?\n beq ]rts\n\n cmp #5 ;bumped?\n bne :2\n lda CharPosn\n cmp #109 ;crouched (e.g. on loose floor)\n beq :ong\n cmp #185 ;dead\n bne ]rts\n:ong jmp onground\n\n:2 cmp #4 ;freefall\n beq falling\n cmp #3\n bne :1\n lda CharPosn\n cmp #102\n bcc ]rts\n cmp #106\n bcs ]rts\n jmp fallon\n\n:1 cmp #2 ;hanging\n beq ]rts\n jmp onground ;7, 0, or 1: on the ground\n\n*-------------------------------\n*\n*  Floor stops him -- Choose appropriate landing\n*\n*-------------------------------\nhitflr\n ldx CharBlockY\n inx\n lda FloorY,x\n sta CharY ;align char w/floor\n\n jsr getunderft\n cmp #spikes\n beq :hitspikes\n\n* Has he landed too close to edge?\n\n jsr getinfront\n jsr cmpspace\n bne :cont ;no\n\n jsr getdist ;# pixels to edge\n cmp #4 ;was 2\n bcs :cont\n;Yes--move him back a little\n lda #-3\n jsr addcharx\n sta CharX\n\n:cont jsr addslicers ;trigger slicers on this level\n\n lda CharLife\n bpl :hardland ;dead before he hits the ground\n\n jsr getdist\n cmp #12\n bcc :nc\n jsr getbehind\n cmp #spikes\n beq :hitspikes ;check block behind if dist>=12\n\n:nc jsr getunderft ;what has he landed on?\n cmp #spikes\n bne :notspikes\n\n:hitspikes\n jsr getspikes ;are spikes lethal?\n bne :impale ;yes\n\n:notspikes\n lda CharYVel\n cmp #OofVelocity\n bcc :softland\n\n cmp #DeathVelocity\n bcc :medland\n\n:hardland\n lda #100\n jsr decstr\n:hdland1\n lda #Splat\n jsr addsound\n\n lda #hardland\n bne :doland\n\n:medland\n lda CharID\n cmp #1\n beq :softland ;shad lands easy\n cmp #2\n bcs :hardland ;guards can't survive 2 stories\n\n lda #1\n jsr decstr\n beq :hdland1\n\n lda #Splat\n jsr addsound\n\n lda #medland\n bne :doland\n\n:softland\n lda CharID\n cmp #2\n bcs :gd ;guard always lands en garde\n lda CharSword\n cmp #2\n bne :1\n:gd lda #2\n sta CharSword\n lda #landengarde\n bne :doland\n\n:1 lda #softland\n bne :doland\n\n:impale jmp DoImpale\n\n:doland jsr jumpseq\n jsr animchar\n\n lda #0\n sta CharYVel\n]rts rts\n\n*-------------------------------\n*\n*  Hasn't hit floor yet -- can he grab edge above?\n*\n*-------------------------------\nfallon\n lda btn ;is button down?\n and CharLife ;& is he alive?\n bpl ]rts\n ;yes--can he grab edge?\n lda CharYVel\n cmp #grabspeed\n bcs ]rts ;no--falling too fast\n\n lda CharY\n clc\n adc #grablead\n ldx CharBlockY\n inx\n cmp FloorY,x\n bcc ]rts  ;not within grabbing range yet\n\n*  Char is within vertical range, and button is down\n*  Is there a ledge within reach?\n\n lda CharX\n sta savekidx\n lda #grabreach\n jsr addcharx\n sta CharX\n jsr rereadblocks\n\n jsr :test ;can you grab ledge?\n bne :ok ;yes--do it\n lda savekidx\n sta CharX\n jmp rereadblocks\n:ok ;do it!\n\n* Align char with block\n\n jsr getdist\n\n jsr addcharx\n sta CharX\n\n ldx CharBlockY\n inx\n lda FloorY,x\n sta CharY\n\n lda #0\n sta CharYVel\n\n lda #fallhang\n jsr jumpseq\n jsr animchar\n\n lda #stuntime\n sta stunned\n]rts rts\n\n:test jsr getabove\n sta blockid\n jsr getaboveinf\n jmp checkledge\n\n*-------------------------------\n*  Is there floor underfoot?  If not, start to fall\n\nonground\n lda Fcheck\n and #fcheckmark\n beq ]rts ;0--no need to check\n\n jsr getunderft\n cmp #block\n bne :1\n jsr InsideBlock ;If \"inside\" block, bump him outside\n:1\n jsr cmpspace\n bne ]rts\n\n* Level 12: Phantom bridge\n\n lda level\n cmp #12\n bne :no\n lda mergetimer\n bpl :no\n lda CharBlockY\n bne :no\n lda CharScrn\n cmp #2\n beq :yes\n cmp #13\n bne :no\n lda tempblockx\n cmp #6\n bcc :no\n;Create floorboards on the fly\n:yes lda #floor\n sta (BlueType),y\n jsr indexblock\n lda #2\n jsr :sub\n iny\n:sub jsr markwipe\n jmp markred\n:no\n*-------------------------------\n*  No floor underfoot--commence falling\n\nstartfall\n lda #0\n sta rjumpflag\n sta CharSword ;so you can grab on\n\n inc CharBlockY ;# of floor just below your feet\n jsr addslicers\n\n lda CharPosn ;upcoming frame\n;(the one we're about to replace\n;with first frame of falling seq)\n sta rjumpflag\n\n cmp #9 ;run-12\n beq :stepfall\n cmp #13 ;run-16\n beq :stepfall2\n cmp #26 ;standjump-19\n beq :jumpfall\n cmp #44 ;runjump-11\n beq :rjumpfall\n cmp #81\n bcc :2\n cmp #86\n bcc :hdropfall\n:2 cmp #150\n bcc :1\n cmp #180\n bcc :fightfall ;from fighting stance\n:1\n\n:stepfall lda #stepfall\n bne :doit\n\n:stepfall2 lda #stepfall2\n bne :doit\n\n:jumpfall lda #jumpfall\n bne :doit\n\n:rjumpfall lda #rjumpfall\n bne :doit\n\n:hdropfall\n lda #5\n jsr addcharx\n sta CharX\n jsr rereadblocks\n jmp :stepfall2\n]rts rts\n\n:fightfall lda CharID\n cmp #2\n bcc :player\n lda CharXVel\n bmi :fb ;did gd step off fwd or bkwd?\n lda #0\n sta droppedout\n lda #efightfallfwd\n bne :doit\n:fb lda #efightfall\n bne :doit\n:player lda #1\n sta droppedout ;for guard's benefit\n lda #fightfall\n bne :doit\n\n*-------------------------------\n:doit jsr jumpseq\n jsr animchar ;advance 1 frame into fall\n\n jsr rereadblocks\n jsr getunderft\n jsr cmpwall\n beq :bump\n jsr getinfront\n jsr cmpwall\n bne ]rts\n jmp CDpatch\n\n:bump jmp InsideBlock ;If \"inside\" block, bump him outside\n\nCDpatch\n lda rjumpflag\n cmp #44 ;running jump?\n bne :patchX\n\n jsr getdist\n cmp #6\n bcs :patchX ;dist >= 6...we're OK\n\n lda #patchfall\n jsr jumpseq\n jsr animchar\n jmp rereadblocks\n\n:patchX lda #-1\n:1 jsr addcharx\n sta CharX\n jmp rereadblocks\n\n*-------------------------------\n*\n* Char is \"inside\" a block--bump him outside\n* (hopefully the same side from which he entered)\n*\n* Change Char X & return rdblock results\n*\n*-------------------------------\nInsideBlock\n jsr getdist ;to EOB\n cmp #8\n bcs :bumpback\n\n:bumpfwd\n jsr getinfront\n cmp #block\n beq :bumpback\n\n jsr getdist ;to EOB\n clc\n adc #4\n:reland\n jsr addcharx\n sta CharX\n jsr rereadblocks ;reposition char\n jmp getunderft\n\n:bumpback\n jsr getbehind\n cmp #block\n bne :1\n  ;we're screwed\n;bump 2 back (what the hell)\n jsr getdist\n clc\n adc #14\n eor #$ff\n clc\n adc #8\n jmp :reland\n:1\n jsr getdist\n eor #$ff\n clc\n adc #8\n jmp :reland\n\n*-------------------------------\n*\n*  S H A D O W   C O N T R O L\n*\n*-------------------------------\nSHADCTRL\n lda CharID\n cmp #24 ;mouse?\n bne :1\n jmp AutoCtrl\n\n:1 lda CharLife\n bpl :dead\n;Has char's life run out?\n lda OppStrength\n bne :cont\n lda #0\n sta CharLife\n jsr deadenemy\n\n:dead lda CharID\n cmp #1 ;shadow man?\n bne :cont\n jmp VanishChar\n\n:cont lda ManCtrl\n bne :manualctrl\n\n jsr AutoCtrl\n\n jmp GenCtrl\n\n* Manual ctrl: enemy controlled by deselected device\n\n:manualctrl\n jsr LoadDesel\n\n jsr getdesel\n\n jsr clrjstk\n\n jsr UserCtrl\n\n jmp SaveDesel\n\n*-------------------------------\n*\n*  P L A Y E R   C O N T R O L\n*\n*-------------------------------\nPLAYERCTRL\n lda CharLife\n bpl :cont1 ;dead\n lda KidStrength\n bne :cont1\n lda #0\n sta CharLife\n:cont1\n lda stunned\n beq :cont\n dec stunned\n\n:cont lda level\n bne :game\n:demo jsr DemoCtrl\n jmp GenCtrl\n\n* Character controlled by selected device\n\n:game jsr LoadSelect ;load jstk-push flags for selected device\n\n jsr getselect ;get current input from selected device\n\n jsr clrjstk ;clear appropriate jstk-push flags\n\n lda #2\n jsr UserCtrl\n\n jmp SaveSelect ;save updated jstk-push flags\n\n*-------------------------------\n* Player ctrl in demo\n\nDemoCtrl\n lda milestone\n bne :finish\n lda CharSword\n beq :preprog\n\n lda #10\n sta guardprog\n jsr AutoCtrl\n lda #11\n sta guardprog\n rts\n\n:preprog jmp demo\n\n:finish jsr clrall\n sta clrbtn\n lda #-1\n sta clrF\n sta JSTKX ;run o.s.\n]rts rts\n\n*-------------------------------\nUserCtrl\n lda CharFace\n bpl :faceL\n\n jmp GenCtrl\n\n* If char is facing right, reverse JSTK & clrF/clrB\n\n:faceL jsr facejstk\n\n jsr GenCtrl\n\n jmp facejstk\n\n*-------------------------------\nclrall\n lda #0\n sta clrB\n sta clrF\n sta clrU\n sta clrD\n lda #1\n]rts rts\n\n*-------------------------------\n*\n*  G E N E R A L   C O N T R O L\n*\n*  In: Raw input\n*        JSTKX (- fwd, + back, 0 center)\n*        JSTKY (- up, + down, 0 center)\n*        btn (- down, + up)\n*      Smart input\n*        clrF-B-U-D-btn (- = fresh press)\n*\n*  Set clr = 1 after using a press\n*\n*-------------------------------\nGENCTRL\n lda CharLife\n bmi :alive\n\n* Dead character (If he's standing, collapse)\n\n:dead lda CharPosn\n cmp #15\n beq :drop\n cmp #166\n beq :drop\n cmp #158\n beq :drop\n cmp #171\n bne ]rts\n:drop lda #dropdead\n jmp jumpseq\n\n* Live character\n\n:alive lda CharAction\n cmp #5 ;is char in mid-bump?\n beq :clr\n cmp #4 ;or falling?\n beq :clr\n bne :underctrl\n:clr\n]clr jmp clrall\n\n:underctrl\n lda CharSword\n cmp #2 ;in fighting mode?\n beq FightCtrl ;yes\n\n lda CharID\n cmp #2 ;kid or shadowman?\n bcc :cont\n jmp GuardCtrl ;no\n\n* First question: what is char doing now?\n\n:cont ldx CharPosn ;previous frame #\n\n cpx #15\n beq :standing\n\n cpx #48\n beq :turning\n\n cpx #50\n bcc :0\n cpx #53\n bcc :standing ;turn7-8-9/crouch\n:0\n cpx #4\n bcc :starting ;run4-5-6\n\n cpx #67\n bcc :4\n cpx #70\n bcc :stjumpup ;starting to jump up\n\n:4 cpx #15\n bcs :2\n jmp :running ;run8-17\n\n:2 cpx #87\n bcc :1\n cpx #100\n bcs :1\n jmp :hanging ;jumphang22-34\n\n:1 cpx #109 ;crouching?\n beq :crouching\n:3\n]rts rts\n\n:standing jmp standing\n:starting jmp starting\n:stjumpup jmp stjumpup\n:running jmp arunning\n:hanging jmp hanging\n:turning jmp turning\n:crouching jmp crouching\n\n*-------------------------------\n* Similar routine for guard\n\nGuardCtrl\n ldx CharPosn\n cpx #166 ;standing?\n beq :alert\n]rts rts\n\n:alert\n lda clrD\n bpl ]rts\n lda clrF\n bmi :engarde\n bpl :turn\n\n:engarde jmp DoEngarde\n\n:turn lda #1\n sta clrD\n lda #alertturn\n jmp jumpseq\n\n*-------------------------------\n* Char is en garde (CharSword = 2)\n\nFightCtrl\n lda CharAction\n cmp #2\n bcs ]rts ;Must be on level ground (Action = 1)\n\n* If Enemy Alert is over, put away your sword\n\n jsr getunderft\n cmp #loose\n beq :skip ;unless you're standing on loose floor\n\n lda EnemyAlert\n cmp #2\n bcc :dropgd\n\n* If opponent is behind you, turn to face him\n\n:skip jsr getopdist ;fwd distance to opponent\n cmp #swordthres\n bcc :onalert\n cmp #128\n bcc :dropgd\n cmp #-4\n bcs :onalert ;overlapping\n jmp DoTurnEng\n\n* Enemy out of range--drop your guard\n* (kid & shadman only)\n\n:dropgd lda CharID\n bne :1\n sta heroic\n beq :2\n:1 cmp #2\n bcs :onalert ;guard: remain en garde\n:2\n ldx CharPosn\n cpx #171 ;wait for ready posn\n bne ]rts\n\n lda #0\n sta CharSword\n\n lda #resheathe\n jmp jumpseq\n]rts rts\n\n*-------------------------------\n* Remain en garde\n\n:onalert\n ldx CharPosn ;prev frame #\n cpx #161 ;successful block?\n bne :nobloc\n lda clrbtn ;yes--restrike or retreat?\n bmi :bts\n lda #retreat\n jmp jumpseq\n\n* Fresh button press to strike\n\n:nobloc lda clrbtn\n bpl :10\n:bts\n lda CharID\n bne :11\n lda #gdpatience\n sta gdtimer\n\n:11 jsr DoStrike\n\n lda clrbtn\n cmp #1\n beq ]rts ;struck\n:10 ;else didn't strike\n\n* Down to lower your sword\n\n lda clrD\n bpl :nodrop\n\n ldx CharPosn\n cpx #158 ;ready\n beq :ready1\n cpx #170\n beq :ready1\n cpx #171\n bne ]rts\n:ready1\n lda #1\n sta clrD\n\n lda #0\n sta CharSword\n\n lda CharID\n beq :drop ;for kid\n cmp #1\n beq :sstand ;for shadman\n\n:alert lda #goalertstand\n jmp jumpseq ;for guard\n\n:drop lda #1\n sta offguard\n lda #graceperiod\n sta refract\n lda #0\n sta heroic\n lda #fastsheathe\n jmp jumpseq\n\n:sstand lda #resheathe\n jmp jumpseq\n\n* Fwd to advance, up to block, back to retreat\n\n:nodrop\n lda clrU\n bmi :up\n lda clrF\n bmi :fwd\n lda clrB\n bmi :back\n\n]rts rts\n\n:fwd jmp DoAdvance\n:up jmp DoBlock\n:back jmp DoRetreat\n\n*-------------------------------\nDoTurnEng\n lda #turnengarde\n jmp jumpseq\n\n*-------------------------------\nDoBlock\n ldx CharPosn\n cpx #158 ;ready\n beq :2\n cpx #170\n beq :2\n cpx #171\n beq :2\n cpx #168 ;guy-2\n beq :2\n\n cpx #165 ;adv\n beq :2\n cpx #167 ;blocked strike\n beq :3\n\n]rts rts\n\n* From ready position: Block if appropriate\n\n:2 jsr getopdist\n cmp #blockthres\n bcs :blockmiss ;too far\n\n lda #readyblock\n ldx CharID\n beq :kid\n ldx OpPosn ;enemy sees kid 1 frame ahead\n cpx #152 ;guy4\n beq :doit\n]rts rts\n\n:kid ldx OpPosn\n cpx #168 ;1 frame too early?\n beq ]rts  ;yes--wait 1 frame\n\n cpx #151 ;guy3\n beq :doit\n cpx #152 ;guy4\n beq :doit\n cpx #162 ;guy22\n beq :doit\n\n cpx #153 ;1 frame too late?\n bne :blockmiss\n  ;yes--skip 1 frame\n jsr :doit\n jmp animchar\n\n* Strike-to-block\n\n:3 lda #strikeblock\n:doit ldx #1\n stx clrU\n jmp jumpseq\n:blockmiss\n lda CharID\n bne DoRetreat ;enemy doesn't waste blocks\n lda #readyblock\n bne :doit\n\n*-------------------------------\nDoStrike\n cpx #157\n beq :1\n cpx #158\n beq :1\n cpx #170\n beq :1\n cpx #171\n beq :1 ;strike from ready posn\n cpx #165\n beq :1 ;from advance\n cpx #150\n beq :2 ;from missed block\n cpx #161\n beq :2 ;from successful block\n\n]rts rts\n\n:1 lda CharID\n bne :slo ;kid is fast, others slow\n\n lda #faststrike\n bne :dostr\n\n:slo lda #strike\n:dostr ldx #1\n stx clrbtn\n jmp jumpseq\n\n:2 lda #blocktostrike\n bne :dostr\n\n*-------------------------------\nDoRetreat\n ldx CharPosn\n cpx #158\n beq :1 ;strike from ready posn\n cpx #170\n beq :1\n cpx #171\n beq :1\n]rts rts\n\n:1 lda #retreat\n ldx #1\n stx clrB\n jmp jumpseq\n\n*-------------------------------\nDoAdvance\n ldx CharPosn\n cpx #158\n beq :1\n cpx #170\n beq :1\n cpx #171\n beq :1\n]rts rts\n\n:1 lda CharID\n bne :slo ;kid is faster\n lda #fastadvance\n bne :doit\n:slo lda #advance\n:doit ldx #1\n stx clrF\n jmp jumpseq\n\n*-------------------------------\n*\n*  S T A N D I N G\n*\n*-------------------------------\nstanding\n\n* Fresh button click: pick up object?\n\n lda clrbtn\n bpl :noclick\n lda btn\n bpl :noclick\n jsr TryPickup\n bne ]rts ;yes\n:noclick\n\n* Shadman only: down & fwd to go en garde\n\n lda CharID\n beq :kid\n lda clrD\n bpl :1\n lda clrF\n bpl :1\n jmp DoEngarde\n\n* If opponent is within range, go en garde\n* (For kid only)\n\n:kid lda gotsword\n beq :1 ;no sword\n\n lda offguard\n beq :notoffg\n lda btn ;off guard--push btn to draw sword\n bpl :btnup\n:notoffg\n lda EnemyAlert\n cmp #2\n bcc :safe\n jsr getopdist ;fwd distance to opponent\n cmp #swordthresN\n bcs :danger\n cmp #swordthres\n bcs :safe\n\n:danger ldx #1\n stx heroic\n cmp #-6\n bcs :behindyou\n\n lda OpID\n cmp #1\n bne :engarde\n lda OpAction\n cmp #3\n beq :safe\n lda OpPosn\n cmp #107\n bcc :engarde\n cmp #118\n bcc :safe ;let shadow land\n:engarde jmp DoEngarde\n\n:behindyou jmp DoTurn\n\n:safe lda #0\n sta offguard\n\n:1 lda btn\n bpl :btnup\n\n*-------------------------------\n* Standing, button down\n\n:2 lda clrB\n bmi :backB\n\n lda clrU\n bmi :up\n\n lda clrD\n bmi :down\n\n lda JSTKX\n bpl :rts\n\n lda clrF\n bmi :fwdB\n:rts\n]rts rts\n\n*-------------------------------\n* Standing, button up\n\n:btnup\n lda clrF\n bmi :fwd\n lda clrB\n bmi :back\n lda clrU\n bmi :up\n lda clrD\n bmi :down\n\n lda JSTKX\n bmi :fwd\n\n]rts rts\n\n:fwd jmp DoStartrun\n:fwdB jmp DoStepfwd\n\n:back jmp DoTurn\n:backB jmp DoTurn\n\n:fwdup jmp DoStandjump\n\n*-------------------------------\n* Standing, joystick up\n\n:up\n\n* In front of open stairs?\n\n jsr getunderft\n cmp #exit\n beq :stairs\n jsr getbehind\n cmp #exit\n beq :stairs\n jsr getinfront\n cmp #exit\n bne :nostairs\n\n:stairs lda (BlueSpec),y\n lsr\n lsr\n cmp #stairthres\n bcc :nostairs\n\n jmp Stairs\n\n* No -- normal control\n\n:nostairs\n lda JSTKX\n bmi :fwdup\n\n* Straight up...jump up & grab ledge if you can\n\n jmp DoJumpup\n\n*-------------------------------\n* Standing, joystick down\n\n:down\n lda #1\n sta clrD\n\n* If you're standing w/back to edge, down\n* means \"climb down & hang from ledge\"\n\n* If facing edge, \"down\" means \"step off\"\n\n jsr getinfront\n jsr cmpspace\n bne :notfwd ;no cliff in front of you\n\n jsr getdist\n cmp #StepOffFwd\n bcs :notfwd ;not close enough to edge\n lda #5\n jsr addcharx\n sta CharX\n jmp rereadblocks ;move fwd\n\n:notfwd jsr getbehind\n jsr cmpspace\n bne :no ;no cliff behind you\n\n jsr getdist\n cmp #StepOffBack\n bcc :no ;not close enough to edge\n\n* Climb down & hang from ledge\n\n jsr getbehind\n sta blockid\n jsr getunderft\n jsr checkledge\n beq :no\n\n ldx CharFace\n bpl :succeed\n jsr getunderft\n cmp #gate\n bne :succeed\n\n lda (BlueSpec),y\n lsr\n lsr\n cmp #gclimbthres\n bcc :no\n\n:succeed jsr getdist\n sec\n sbc #9\n\n jsr addcharx\n sta CharX\n\n lda #climbdown\n jmp jumpseq\n\n* Otherwise \"down\" means \"crouch\"\n\n:no jmp DoCrouch\n\n*-------------------------------\n* Climb stairs\n\nStairs\n lda tempblockx ;stairs block\n jsr getblockej\n clc\n adc #10\n sta CharX\n lda #-1\n sta CharFace\n\n lda #climbstairs\n jmp jumpseq\n\n]rts rts\n\n*-------------------------------\n*\n*  C R O U C H I N G\n*\n*-------------------------------\ncrouching\n\n* Fresh button click?\n\n lda clrbtn\n bpl :noclick\n\n jsr TryPickup\n bne ]rts\n\n* Still crouching?\n\n:noclick\n lda JSTKY\n cmp #1\n beq :1\n lda #standup\n jmp jumpseq\n\n:1 lda clrF\n bpl ]rts\n lda #1\n sta clrF\n lda #crawl\n jmp jumpseq\n\n*-------------------------------\n*\n*  S T A R T I N G\n*\n*  First few frames of \"startrun\"\n*\n*-------------------------------\nstarting\n lda JSTKY\n bmi :jump\n]rts rts\n\n:jump\n lda JSTKX\n bpl ]rts\n\n jmp DoStandjump\n\n*-------------------------------\n* First few frames of \"jumpup\"\n\nstjumpup\n lda JSTKX\n bmi :fwd\n lda clrF\n bmi :fwd\n]rts rts\n:fwd jmp DoStandjump\n\n*-------------------------------\n*\n* T U R N I N G\n*\n*-------------------------------\nturning\n lda btn\n bmi ]rts\n\n lda JSTKX\n bpl ]rts\n\n lda JSTKY\n bmi ]rts\n\n* Jstk still fwd--convert turn to turnrun\n\n lda #turnrun\n jmp jumpseq\n\n*-------------------------------\n*\n*  R U N N I N G\n*\n*-------------------------------\narunning\n lda JSTKX\n beq :runstop ;jstk centered...stop running\n bpl :runturn ;jstk back...turn around\n\n* Jstk is forward... keep running\n* & wait for signal to runjump or diveroll\n\n lda JSTKY\n bmi :runjump ;jstk up... take a running jump\n\n lda clrD\n bmi :diveroll ;jstk down... running dive & roll\n\n]rts rts\n\n*  Running dive & roll\n\n:diveroll lda #1\n sta clrD\n\n lda #rdiveroll\n jmp jumpseq\n\n*  Running jump\n\n:runjump\n lda clrU\n bpl ]rts\n\n jmp DoRunjump\n\n*  Stop running\n\n:runstop lda CharPosn\n cmp #7 ;run-10\n beq :rs\n cmp #11 ;run-14\n bne ]rts\n\n:rs jsr ]clr\n sta clrF\n\n lda #runstop\n jmp jumpseq\n\n*  Turn around & run the other way\n\n:runturn\n jsr ]clr\n sta clrB\n\n lda #runturn\n jmp jumpseq\n\n*-------------------------------\n*\n*  H A N G I N G\n*\n*-------------------------------\nhanging\n lda stunned\n bne :9 ;can't climb up\n\n lda JSTKY\n bmi :climbup ;jstk up-->climb up\n:9\n lda btn\n bpl :drop\n\n* If hanging on right-hand side of a panel\n* or either side of block,\n* switch to \"hangstraight\"\n\n lda CharAction\n cmp #6\n beq :cont ;already hanging straight\n\n jsr getunderft\n cmp #block\n beq :hangstrt\n\n ldx CharFace\n cpx #-1 ;left\n bne :cont\n\n cmp #panelwif\n beq :hangstrt\n cmp #panelwof\n beq :hangstrt\n\n* If ledge crumbles away, fall with it\n\n:cont\n jsr getabove\n\n jsr cmpspace ;still there?\n beq :drop ;no\n\n* just keep swinging\n\n:rts\n]rts rts\n\n:hangstrt lda #hangstraight\n jmp jumpseq\n\n*-------------------------------\n* climb up (if you can)\n\n:climbup\n jsr ]clr\n sta clrU\n sta clrbtn\n\n jsr getabove\n\n cmp #mirror\n beq :10\n cmp #slicer\n bne :1\n\n:10 ldx CharFace\n beq :fail\n bne :succeed ;can only mount mirror facing L\n\n:1 cmp #gate\n bne :2\n\n ldx CharFace\n beq :succeed\n;can only mount closed gate facing R\n lda (BlueSpec),y\n lsr\n lsr\n cmp #gclimbthres\n bcc :fail\n bcs :succeed\n\n:2\n:succeed lda #climbup\n jmp jumpseq\n\n:fail lda #climbfail\n jmp jumpseq\n\n\n*-------------------------------\n:drop\n jsr ]clr\n sta clrD ;clrD = 1, all others = 0\n\n jsr getbehind\n jsr cmpspace\n bne :hangdrop\n\n jsr getunderft\n jsr cmpspace\n beq :hangfall\n\n:hangdrop\n jsr getunderft\n cmp #block\n beq :sheer\n\n ldx CharFace\n bpl :clear\n cmp #panelwof\n beq :sheer\n cmp #panelwif\n bne :clear\n\n:sheer lda #-7\n jsr addcharx\n sta CharX\n\n:clear lda #hangdrop\n jmp jumpseq\n\n:hangfall\n lda #hangfall\n jmp jumpseq\n]rts rts\n\n*-------------------------------\n*\n*  D o  S t a r t r u n\n*\n*-------------------------------\nDoStartrun\n\n* If very close to a barrier, do a Stepfwd instead\n* (Exceptions: slicer & open gate)\n\n jsr getfwddist\n cpx #1 ;barrier?\n bne :startrun ;no\n\n cpy #slicer\n beq :startrun\n\n:solidbarr\n jsr getfwddist\n cmp #8\n bcs :startrun\n\n lda clrF\n bpl ]rts\n\n jmp DoStepfwd\n\n:startrun\n lda #startrun\n jmp jumpseq ;...start running\n\nDoTurn jsr ]clr\n sta clrB\n;if enemy is behind you, draw as you turn\n lda gotsword\n beq :1\n lda EnemyAlert\n cmp #2\n bcc :1\n jsr getopdist\n bpl :1\n jsr getdist ;to EOB\n cmp #2\n bcc :1\n\n lda #2\n sta CharSword ;en garde\n lda #0\n sta offguard\n lda #turndraw\n bne :2\n:1 lda #turn\n:2 jmp jumpseq ;...turn around\n\nDoStandjump lda #1\n sta clrU\n sta clrF\n\n lda #standjump\n jmp jumpseq ;...standing jump\n\nDoSdiveroll lda #1\n sta clrD\n\n lda #sdiveroll\n jmp jumpseq ;...standing dive & roll\n\nDoCrouch\n lda #stoop\n jsr jumpseq\n\n jsr ]clr\n sta clrD\n rts\n\nDoEngarde\n jsr ]clr\n sta clrF\n sta clrbtn\n\n lda #2\n sta CharSword ;en garde\n\n lda CharID\n beq :1\n cmp #1\n beq :3 ;shad\n lda #guardengarde\n bne :2\n:1 lda #0\n sta offguard\n:3 lda #engarde\n:2 jmp jumpseq\n\n*-------------------------------\n*\n*  D o  J u m p u p\n*\n*  & grab ledge if you can\n*\n*-------------------------------\nDoJumpup\n jsr ]clr\n sta clrU\n\n jsr getabove\n sta blockid\n\n jsr getaboveinf\n\n jsr checkledge ;Can you jump up & grab ledge?\n ;Returns 1 if you can, 0 if you can't\n bne  DoJumphang ;yes--do it\n\n jsr getabovebeh\n sta blockid\n\n jsr getabove\n\n jsr checkledge ;could you do it if you were 1 space back?\n bne :jumpback ;yes--move back & do it\n\n:jumphi jmp DoJumphigh\n\n*-------------------------------\n* Jump up & back to grab block directly overhead\n\n:jumpback\n jsr getdist ;dist to front of block\n cmp #JumpBackThres\n bcc :jumphi ;too far to fudge\n\n jsr getbehind\n jsr cmpspace ;floor behind you?\n beq DoJumpedge ;no\n\n* \"Jump back\" to block behind you & then proceed as usual\n\n jsr getdist\n sec\n sbc #14\n jsr addcharx\n sta CharX\n\n jsr rereadblocks\n\n jmp DoJumphang\n\n*-------------------------------\n* Your back is to ledge -- so do a \"jumpbackhang\"\n\nDoJumpedge\n jsr getabove\n\n* Get all the way back on this block\n\n jsr getdist\n sec\n sbc #10\n\n jsr addcharx\n sta CharX\n\n* now jump\n\n lda #jumpbackhang\n jmp jumpseq\n\n*-------------------------------\nDoJumphang\n jsr getaboveinf\n\n*  Choose the jumphang sequence (Long/Med) that\n*  will bring us closest to edge, then fudge the X-coord\n*  to make it come out exactly\n\n jsr getdist ;get distance to front of block\n sta atemp ;# pixels (0-13) returned in A\n\n cmp #4\n bcc :Med\n\n:Long lda atemp\n sec ;\"Long\" will add 4 to CharX\n sbc #4\n jsr addcharx\n sta CharX\n\n lda #jumphangLong\n jmp jumpseq\n:Med\n jsr getfwddist\n cmp #4\n bcs :okMed\n\n cpx #1 ;close to wall?\n beq :Long ;yes--step back & do Long\n\n:okMed lda atemp\n jsr addcharx\n sta CharX\n\n lda #jumphangMed\n jmp jumpseq\n\n]rts rts\n\n*-------------------------------\n*\n*  D o  R u n  J u m p\n*\n*  Calibrate jump so that foot will push off at edge.\n*\n*-------------------------------\nRJChange = 4 ;projected change in CharX\nRJLookahead = 1 ;# blocks you can look ahead\nRJLeadDist = 14 ;required leading distance in pixels\nRJMaxFujBak = 8 ;# pixels we're willing to fudge back\nRJMaxFujFwd = 2 ;and forward\n\nDoRunjump\n lda CharPosn\n cmp #7\n bcc ]rts ;must be in full run\n\n* Count # of blocks to edge\n* (Use actual CharX)\n\n lda #0\n sta bufindex ;block counter\n\n lda #RJChange\n jsr addcharx\n sta ztemp ;projected CharX\n\n jsr getblockxp\n sta blockx\n\n:loop lda blockx\n ldx CharFace\n inx\n clc\n adc plus1,x\n sta blockx\n\n tax\n ldy CharBlockY\n lda CharScrn\n jsr rdblock\n\n cmp #spikes\n beq :done\n\n jsr cmpspace\n beq :done\n\n inc bufindex\n\n lda bufindex\n cmp #RJLookahead+1\n bcc :loop\n bcs :noedge ;no edge in sight--jump anyway\n:done\n\n* Calculate # of pixels to end of floor\n\n lda ztemp\n jsr getdist1 ;# pixels to end of block\n\n ldx bufindex ;# of blocks to end of floor\n clc\n adc Mult7,x\n clc\n adc Mult7,x ;# of pixels to end of floor\n\n sec\n sbc #RJLeadDist\n;A = difference between actual dist to edge\n;and distance covered by RunJump\n cmp #-RJMaxFujBak\n bcs :ok ;move back a little & jump\n\n cmp #RJMaxFujFwd\n bcc  :ok ;move fwd a little & jump\n\n cmp #$80\n bcc ]rts ;still too far away--wait till next frame\n\n lda #-3 ;He jumped too late; he'll miss edge\n;But let's make it look good anyway\n:ok clc\n adc #RJChange\n\n jsr addcharx\n sta CharX\n\n* No edge in sight -- just do any old long jump\n\n:noedge\n jsr ]clr\n sta clrU\n\n lda #runjump\n jmp jumpseq\n\n]rts rts\n\n*-------------------------------\n*\n*  D o  S t e p  F o r w a r d\n*\n*-------------------------------\n\nDoStepfwd\n lda #1\n sta clrF\n sta clrbtn\n\n jsr getfwddist ;returns A = distance to step (0-13)\n\n cmp #0\n beq :1\n\n:2 sta CharRepeat ;non-0 value\n\n clc\n adc #stepfwd1-1\n jmp jumpseq\n\n:1 cpx #1\n beq :thru ;If barrier, step thru\n\n cmp CharRepeat\n bne :3 ;First time, test w/foot\n\n:thru lda #11\n bne :2 ;Second time, step off edge\n\n:3 sta CharRepeat ;0\n\n lda #testfoot\n jmp jumpseq\n\n*-------------------------------\n*\n*  D o  J u m p  H i g h\n*\n*-------------------------------\nDoJumphigh\n jsr ]clr\n sta clrU\n\n jsr getfwddist\n cmp #4\n bcs :ok\n cpx #1 ;barrier?\n bne :ok ;no\n\n sec\n sbc #3\n jsr addcharx\n sta CharX\n:ok\n lda #jumpupreach\n jsr facedx\n sta ztemp\n\n jsr getbasex ;assume char standing still\n clc\n adc #jumpupangle\n clc\n adc ztemp ;get X-coord at which hand touches ceiling\n\n jsr getblockx\n tax\n\n ldy CharBlockY\n dey\n\n lda CharScrn\n jsr rdblock ;read this block\n\n cmp #block\n beq :jumpup\n jsr cmpspace\n bne :jumpup\n\n lda #highjump\n jmp jumpseq ;no ceiling above\n\n:jumpup lda #jumpup\n jsr jumpseq ;touch ceiling\n]rts rts ;& don't forget to crop top\n\n*-------------------------------\n*  reread blocks\n*-------------------------------\nREREADBLOCKS\n jsr GetFrameInfo\n jmp GetBaseBlock\n\n*-------------------------------\n*\n*  Is character stepping on a pressure plate?\n*  or on loose floor?\n*\n*-------------------------------\nCHECKPRESS\n lda CharPosn\n cmp #87\n bcc :1\n cmp #100\n bcc :hanging ;87-99: jumphang22-34\n cmp #135\n bcc :1\n cmp #141\n bcc :hanging ;135-140: climb up/down\n:1\n lda CharAction\n cmp #7\n beq :ground ;turning\n cmp #5\n beq :ground ;bumped\n cmp #2\n bcs ]rts\n\n* Action code 7, 0 or 1: on the ground\n\n:ground\n lda CharPosn\n cmp #79 ;jumpup/touch ceiling\n beq :touchceil\n\n lda Fcheck\n and #fcheckmark\n beq ]rts ;foot isn't touching floor\n\n*  Standing on a pressplate?\n\n jsr getunderft\n:checkit\n cmp #upressplate\n beq :PP\n cmp #pressplate\n bne :notPP\n\n:PP lda CharLife\n bmi :push\n jmp jampp ;dead weight\n:push jmp pushpp\n\n:notPP cmp #loose\n bne ]rts\n\n lda #1\n sta alertguard\n jmp breakloose\n\n*  Hanging on a pressplate?\n\n:hanging\n jsr getabove\n jmp :checkit\n]rts rts\n\n* Jumping up to touch ceiling?\n\n:touchceil\n jsr getabove\n\n cmp #loose\n bne ]rts\n\n jmp breakloose\n\n*-------------------------------\n*\n*  C H E C K   I M P A L E\n*\n*  Impalement by running or jumping onto spikes\n*  (Impalement by landing on spikes is covered by\n*  CHECKFLOOR:falling)\n*\n*-------------------------------\nCHECKIMPALE\n ldx CharBlockX\n ldy CharBlockY\n lda CharScrn\n jsr rdblock\n cmp #spikes\n bne ]rts ;not spikes\n\n ldx CharPosn\n\n cpx #7\n bcc ]rts\n\n cpx #15\n bcs :2\n jmp :running\n\n:2 cpx #43 ;runjump-10\n beq :jumpland\n\n cpx #26 ;standjump-19\n beq :jumpland\n\n]rts rts\n\n:running\n jsr getspikes\n cmp #2\n bcc ]rts ;must be springing\n bcs :impale\n\n:jumpland\n jsr getspikes ;are spikes lethal?\n beq ]rts ;no\n\n:impale jmp DoImpale\n\n*-------------------------------\n* Impale char on spikes\n*\n* In: rdblock results\n*-------------------------------\nDOIMPALE\n jsr jamspikes\n\n ldx CharBlockY\n inx\n lda FloorY,x\n sta CharY ;align char w/floor\n\n lda tempblockx\n jsr getblockej ;edge of spikes\n clc\n adc #10\n sta CharX\n lda #8\n jsr addcharx\n sta CharX ;center char on spikes\n\n lda #0\n sta CharYVel\n\n lda #Impaled\n jsr addsound\n\n lda #100\n jsr decstr\n\n lda #impale\n jsr jumpseq\n jmp animchar\n\n*-------------------------------\n*\n*  Pick up object\n*  Return 0 if no result\n*\n*-------------------------------\nTryPickup\n jsr getunderft\n cmp #flask\n beq :2\n cmp #sword\n bne :1\n:2 jsr getbehind\n jsr cmpspace\n beq :no\n lda CharX\n lda #-14\n jsr addcharx\n sta CharX ;move char 1 block back\n jsr rereadblocks\n:1 jsr getinfront\n cmp #flask\n beq :pickup\n cmp #sword\n beq :pickup\n:no lda #0\n rts\n\n:pickup jsr PickItUp\n lda #1\n rts\n\n*-------------------------------\n*\n* Pick something up\n*\n* In: rdblock results for object block (\"infront\")\n*\n*-------------------------------\nPickItUp\n ldx CharPosn\n cpx #109 ;crouch first, then pick up obj\n beq :ok\n jsr getfwddist\n cpx #2\n beq :0 ;right at edge\n jsr addcharx\n sta CharX\n:0 lda CharFace\n bmi :1\n lda #-2\n jsr addcharx\n sta CharX ;put char within reach of obj\n:1 jmp DoCrouch\n\n:ok cmp #sword\n beq :PickupSword\n\n lda (BlueSpec),y\n lsr\n lsr\n lsr\n lsr\n lsr ;potion # (0-7)\n jsr RemoveObj\n\n lda #drinkpotion ;pick up & drink potion\n jmp jumpseq\n\n:PickupSword\n lda #-1 ;sword\n jsr RemoveObj\n\n lda #pickupsword\n jmp jumpseq ;pick up, brandish & sheathe sword\n\n*-------------------------------\n lst\n ds 1\n usr $a9,16,$00,*-org\n lst off\n"
  },
  {
    "path": "04 Support/MakeDisk/S/CTRLSUBS.S",
    "content": "* ctrlsubs\norg = $d000\n tr on\n lst off\n*-------------------------------\n*\n*  PRINCE OF PERSIA\n*  Copyright 1989 Jordan Mechner\n*\n*-------------------------------\n*\n*   Misc. subroutines relating to character control & movement\n*\n*-------------------------------\n org org\n\n jmp GETFRAME\n jmp GETSEQ\n jmp GETBASEX\n jmp GETBLOCKX\n jmp GETBLOCKXP\n\n jmp GETBLOCKY\n jmp GETBLOCKEJ\n jmp ADDCHARX\n jmp GETDIST\n jmp GETDIST1\n\n jmp GETABOVEBEH\n jmp RDBLOCK\n jmp RDBLOCK1\n jmp SETUPSWORD\n jmp GETSCRNS\n\n jmp ADDGUARDOBJ\n jmp OPJUMPSEQ\n jmp GETEDGES\n jmp INDEXCHAR\n jmp QUICKFG\n\n jmp CROPCHAR\n jmp GETLEFT\n jmp GETRIGHT\n jmp GETUP\n jmp GETDOWN\n\n jmp CMPSPACE\n jmp CMPBARR\n jmp ADDKIDOBJ\n jmp ADDSHADOBJ\n jmp ADDREFLOBJ\n\n jmp LOADKID\n jmp LOADSHAD\n jmp SAVEKID\n jmp SAVESHAD\n jmp SETUPCHAR\n\n jmp GETFRAMEINFO\n jmp INDEXBLOCK\n jmp MARKRED\n jmp MARKFRED\n jmp MARKWIPE\n\n jmp MARKMOVE\n jmp MARKFLOOR\n jmp UNINDEX\n jmp QUICKFLOOR\n jmp UNEVENFLOOR\n\n jmp MARKHALF\n jmp ADDSWORDOBJ\n jmp GETBLOCKYP\n jmp CHECKLEDGE\n jmp GET2INFRONT\n\n jmp CHECKSPIKES\n jmp RECHARGEMETER\n jmp ADDFCHARX\n jmp FACEDX\n jmp JUMPSEQ\n\n jmp GETBASEBLOCK\n jmp LOADKIDWOP\n jmp SAVEKIDWOP\n jmp GETOPDIST\n jmp LOADSHADWOP\n\n jmp SAVESHADWOP\n jmp BOOSTMETER\n jmp GETUNDERFT\n jmp GETINFRONT\n jmp GETBEHIND\n\n jmp GETABOVE\n jmp GETABOVEINF\n jmp CMPWALL\n\n*-------------------------------\n lst\n put eq\n lst\n put gameeq\n lst\n put movedata\n lst\n put seqdata\n lst\n put soundnames\n lst off\n\n*-------------------------------\n dum locals\n\ntempright ds 1\nztemp ds 2\ntempstate ds 1\n]cutdir ds 1\n\n dend\n\n*-------------------------------\n*  Misc. data\n\nplus1 db -1,1\nminus1 db 1,-1\n\nmaxmaxstr = 10 ;strength meter maximum\n\nthinner = 3\n\n*-------------------------------\n*\n*  R E A D   B L O C K\n*\n*  In:  A = screen #\n*       X = block x (0-9 onscreen)\n*       Y = block y (0-2 onscreen)\n*\n*  Out: A,X = objid\n*       Y = block # (0-29)\n*       BlueType, BlueSpec set\n*       tempscrn,tempblockx,tempblocky = onscreen block coords\n*\n*  - Offscreen block values are traced to their home screen\n*  - Screen 0 is treated as a solid mass\n*\n*-------------------------------\nRDBLOCK\n sta tempscrn\n stx tempblockx\n sty tempblocky\n\nRDBLOCK1\n jsr handler ;handle offscreen references\n\n lda tempscrn\n beq :nullscrn ;screen 0\n jsr calcblue ;returns BlueType/Spec\n\n ldy tempblocky\n lda Mult10,y\n clc\n adc tempblockx\n tay\n lda (BlueType),y\n and #idmask\n tax ;return result in X & A\n rts\n\n:nullscrn lda #block\n tax\n rts\n\n*-------------------------------\n*  Handle offscreen block references (recursive)\n\nhandler lda tempblockx\n bpl :1\n jsr offleft\n jmp handler\n\n:1 cmp #10\n bcc :2\n jsr offrt\n jmp handler\n\n:2 lda tempblocky\n bpl :3\n jsr offtop\n jmp handler\n\n:3 cmp #3\n bcc :rts\n jsr offbot\n jmp handler\n\n:rts rts\n\nofftop clc\n adc #3\n sta tempblocky\n\n lda tempscrn\n jsr GETUP\n sta tempscrn\n rts\n\noffbot sec\n sbc #3\n sta tempblocky\n\n lda tempscrn\n jsr GETDOWN\n sta tempscrn\n rts\n\noffleft clc\n adc #10\n sta tempblockx\n\n lda tempscrn\n jsr GETLEFT\n sta tempscrn\n rts\n\noffrt sec\n sbc #10\n sta tempblockx\n\n lda tempscrn\n jsr GETRIGHT\n sta tempscrn\n]rts rts\n\n*-------------------------------\n*\n*  Get adjacent screen numbers\n*\n*  In:  A = original screen #\n*  Out: A = adjacent screen #\n*\n*-------------------------------\nGETLEFT\n beq ]rts\n asl\n asl\n tax\n lda MAP-4,x\n]rts rts\n\nGETRIGHT\n beq ]rts\n asl\n asl\n tax\n lda MAP-3,x\n rts\n\nGETUP\n beq ]rts\n asl\n asl\n tax\n lda MAP-2,x\n rts\n\nGETDOWN\n beq ]rts\n asl\n asl\n tax\n lda MAP-1,x\n rts\n\n*-------------------------------\n*\n*  G E T   S C R E E N S\n*\n*  Get VisScrn's 8 surrounding screens from map\n*  (Store in scrnAbove, scrnBelow, etc.)\n*\n*-------------------------------\nGETSCRNS\n lda VisScrn\n jsr GETLEFT\n sta scrnLeft\n\n lda VisScrn\n jsr GETRIGHT\n sta scrnRight\n\n lda VisScrn\n jsr GETUP\n sta scrnAbove\n\n lda VisScrn\n jsr GETDOWN\n sta scrnBelow\n\n* and diagonals\n\n lda scrnBelow\n jsr GETLEFT\n sta scrnBelowL\n\n lda scrnBelow\n jsr GETRIGHT\n sta scrnBelowR\n\n lda scrnAbove\n jsr GETLEFT\n sta scrnAboveL\n\n lda scrnAbove\n jsr GETRIGHT\n sta scrnAboveR\n]rts rts\n\n*-------------------------------\n*\n*  G E T   B A S E   X\n*\n*  In: Char data; frame data\n*\n*  Out: A = character's base X-coord\n*\n*-------------------------------\nGETBASEX\n lda Fcheck\n and #Ffootmark\n  ;# pixels to count in from left edge of image\n eor #$ff\n clc\n adc #1 ;- Fcheck\n\n clc\n adc Fdx ;Fdx (+ = fwd, - = bkwd)\n\n jmp ADDCHARX ;Add to CharX in direction char is facing\n\n*-------------------------------\n*\n*  Add A to CharX in direction char is facing\n*\n*  In: A = # pixels to add (+ = fwd, - = bkwd)\n*      CharX = original char X-coord\n*      CharFace = direction char is facing\n*\n*  Out: A = new char X-coord\n*\n*-------------------------------\nADDCHARX\n bit CharFace ;-1 = left (normal)\n bpl :right ;0 = right (mirrored)\n\n eor #$ff\n clc\n adc #1 ;A := -A\n\n:right clc\n adc CharX\n rts\n\n*-------------------------------\n*\n* Add A to FCharX\n* (A range: -127 to 127)\n*\n* In: A; FChar data\n* Out: FCharX\n*\n*-------------------------------\nADDFCHARX\n sta ztemp\n bpl :1 ;hibit clr\n\n lda #0\n sec\n sbc ztemp\n sta ztemp ;make it posititve\n\n lda #$ff ;hibit set\n:1 eor FCharFace\n bmi :left\n\n lda ztemp\n clc\n adc FCharX\n sta FCharX\n\n lda FCharX+1\n adc #0\n sta FCharX+1\n rts\n\n:left lda FCharX\n sec\n sbc ztemp\n sta FCharX\n\n lda FCharX+1\n sbc #0\n sta FCharX+1\n rts\n\n*-------------------------------\n*\n* In: CharFace,CharBlockX,CharBlockY,CharScrn\n*\n* Out: Results of RDBLOCK for block underfoot/in front/etc.\n*\n*-------------------------------\nGETUNDERFT\n ldx CharBlockX\n ldy CharBlockY\n lda CharScrn\n jmp RDBLOCK\n\nGETINFRONT\n ldx CharFace\n inx\n lda CharBlockX\n clc\n adc plus1,x\n sta infrontx\n tax\n\n ldy CharBlockY\n lda CharScrn\n jmp RDBLOCK\n\nGET2INFRONT\n ldx CharFace\n inx\n lda CharBlockX\n clc\n adc plus1,x\n clc\n adc plus1,x\n tax\n\n ldy CharBlockY\n lda CharScrn\n jmp RDBLOCK\n\nGETBEHIND\n ldx CharFace\n inx\n lda CharBlockX\n clc\n adc minus1,x\n sta behindx\n tax\n\n ldy CharBlockY\n lda CharScrn\n jmp RDBLOCK\n\nGETABOVE\n ldy CharBlockY\n dey\n sty abovey\n\n ldx CharBlockX\n lda CharScrn\n jmp RDBLOCK\n\nGETABOVEINF\n ldx CharFace\n inx\n lda CharBlockX\n clc\n adc plus1,x\n sta infrontx\n tax\n\n ldy CharBlockY\n dey\n sty abovey\n\n lda CharScrn\n jmp RDBLOCK\n\nGETABOVEBEH\n ldx CharFace\n inx\n lda CharBlockX\n clc\n adc minus1,x\n sta behindx\n tax\n\n ldy CharBlockY\n dey\n sty abovey\n\n lda CharScrn\n jmp RDBLOCK\n\n*-------------------------------\n*\n*  G E T   D I S T A N C E\n*\n*  In: Char data\n*\n*  Out: A = # of pixels (0-13) to add to CharX to move\n*       char base X-coord to end of current block\n*\n*-------------------------------\nGETDIST\n jsr GETBASEX ;returns A = base X-coord\n\nGETDIST1\n jsr GETBLOCKXP ;returns A = block #, OFFSET = pixel #\n\n lda CharFace ;0=right, -1=left\n beq :facingright\n\n:facingleft\n lda OFFSET\n rts\n\n:facingright\n lda #13\n sec\n sbc OFFSET\n rts\n\n*-------------------------------\n*\n*  G E T   B L O C K   E D G E\n*\n*  In:  A = block # (-5 to 14)\n*  Out: A = screen X-coord of left edge\n*\n*-------------------------------\nGETBLOCKEJ\n clc\n adc #5\n tax\n lda BlockEdge,x\n rts\n\n*-------------------------------\n*\n*  G E T   B L O C K   X\n*\n*  In:  A = X-coord\n*\n*  Out: A = # of the 14-pixel-wide block within which\n*           this pixel falls (0-9 onscreen)\n*\n*       OFFSET = pixel within this block\n*\n*  - Use GETBLOCKXP for objects on center plane\n*  - Use GETBLOCKX for absolute X-coords & foreground plane\n*\n*-------------------------------\nGETBLOCKXP\n sec\n sbc #angle\n\nGETBLOCKX\n tay\n\n lda PixelTable,y\n sta OFFSET\n\n lda BlockTable,y\n rts\n\n*-------------------------------\n*\n*  G E T   B L O C K   Y\n*\n*  In: A = screen Y-coord (0-255)\n*\n*  Out: A = block y (3 = o.s.)\n*\n*  - Use GETBLOCKYP for objects on center plane\n*  - Use GETBLOCKY for absolute Y-coords & foreground plane\n*\n*-------------------------------\nGETBLOCKY\n ldx #3\n:loop cmp BlockTop+1,x\n bcs :gotY\n dex\n bpl :loop\n:gotY txa\n rts\n\n\nGETBLOCKYP\n ldx #3\n:loop cmp FloorY+1,x\n bcs :gotY\n dex\n bpl :loop\n:gotY txa\n]rts rts\n\n*-------------------------------\n*\n*  I N D E X   B L O C K\n*\n*  Index (tempblockx,tempblocky)\n*\n*  Return y = block # (0-29) and cc if block is onscreen\n*         y = 0 to 9 and cs if block is on screen above\n*         y = 30 and cs if block is o.s.\n*\n*-------------------------------\nINDEXBLOCK\n ldy tempblocky\n bmi :above\n cpy #3\n bcs :os\n\n lda tempblockx\n cmp #10\n bcs :os ;0 <= tempblockx <= 9\n\n clc\n adc Mult10,y\n\n tay ;return y = block #\n clc ;and carry clr\n rts\n\n:os ldy #30\n sec ;and carry set\n rts\n\n:above ldy tempblockx\n sec\n]rts rts\n\n*-------------------------------\n*\n*  U N I N D E X\n*\n*  In: A = block index (0-29)\n*  Out: A = blockx, X = blocky\n*\n*-------------------------------\nUNINDEX\n ldx #0\n:loop cmp #10\n bcc ]rts\n sec\n sbc #10\n inx\n bne :loop\n]rts rts\n\n*-------------------------------\n*\n*  G E T   B A S E   B L O C K\n*\n*  In: Char data\n*  Out: CharBlockX\n*\n*-------------------------------\nGETBASEBLOCK\n jsr getbasex\n jsr getblockxp\n sta CharBlockX\n]rts rts\n\n*-------------------------------\n*\n*  F A C E   D X\n*\n*  In: CharFace; A = DX\n*\n*  Out: DX if char is facing right, -DX if facing left\n*\n*-------------------------------\nFACEDX\n bit CharFace\n bmi ]rts\n\n eor #$ff\n clc\n adc #1 ;negate\n\n]rts rts\n\n*-------------------------------\n*\n*  J U M P S E Q\n*\n*  Jump to some other point in sequence table\n*\n*  In: A = sequence # (1-127)\n*\n*-------------------------------\nJUMPSEQ\n sec\n sbc #1\n asl\n tax ;x = 2(a-1)\n\n lda seqtab,x\n sta CharSeq\n\n lda seqtab+1,x\n sta CharSeq+1\n]rts rts\n\n*-------------------------------\n*\n*  Similar routine for Opponent\n*\n*-------------------------------\nOPJUMPSEQ\n sec\n sbc #1\n asl\n tax ;x = 2(a-1)\n\n lda seqtab,x\n sta OpSeq\n\n lda seqtab+1,x\n sta OpSeq+1\n]rts rts\n\n*-------------------------------\n*\n*  I N D E X   C H A R\n*\n*  In: Char data; GETEDGES results\n*\n*  Out: FCharIndex = character block index\n*\n*-------------------------------\nINDEXCHAR\n lda CharAction\n cmp #1\n bne :4\n;If CharAction = 1 (on solid ground)\n;use leftblock/bottomblock\n lda bottomblock\n sta tempblocky\n\n lda leftblock\n:1 sta tempblockx\n\n lda CharPosn\n cmp #135\n bcc :2\n cmp #149\n bcc :climbup\n\n:2 cmp #2\n beq :fall\n cmp #3\n beq :fall\n cmp #4\n beq :fall\n cmp #6\n bne :3\n:fall\n:climbup dec tempblockx  ;if falling or climbing up\n\n:3 jsr indexblock\n sty FCharIndex\n rts\n\n* else use CharBlockX/Y\n\n:4 lda CharBlockY\n sta tempblocky\n\n lda CharBlockX\n jmp :1\n\n*-------------------------------\n*\n*  S E T   U P   C H A R\n*\n*  Set up character for FRAMEADV\n*\n*  In: Char data\n*  Out: FChar data\n*\n*  Translate char data into the form \"addchar\" expects\n*  (Decode image #; get actual 280 x 192 screen coords)\n*\n*-------------------------------\nSETUPCHAR\n jsr zerocrop ;(can call cropchar later)\n\n jsr GETFRAMEINFO\n\n lda CharFace\n sta FCharFace\n\n jsr decodeim ;get FCharImage & Table from\n ;encoded Fimage & Fsword data\n lda #0\n sta FCharX+1\n\n lda Fdx\n jsr addcharx ;A := CharX + Fdx\n sec\n sbc #ScrnLeft ;different coord system\n sta FCharX\n\n asl FCharX\n rol FCharX+1\n beq :pos\n\n lda FCharX\n cmp #$f0\n bcc :pos\n lda #$ff\n sta FCharX+1\n:pos  ;X := 2X\n lda Fdy\n clc\n adc CharY\n sec\n sbc #ScrnTop\n sta FCharY\n\n lda Fcheck\n eor FCharFace ;Look only at the hibits\n bmi :ok ;They don't match-->even X-coord\n;They match-->odd X-coord\n lda FCharX\n clc\n adc #1\n sta FCharX\n bcc :ok\n inc FCharX+1\n:ok\n]rts rts\n\n*-------------------------------\n*\n*  S E T   U P   S W O R D\n*\n*  In: Char & FChar data\n*\n*  If character's sword is visible, add it to obj table\n*\n*-------------------------------\nSETUPSWORD\n lda CharID\n cmp #2\n bne :3\n lda CharLife\n bmi :2 ;live guard's sword is always visible\n\n:3 lda CharPosn\n cmp #229\n bcc :1\n cmp #238\n bcc :2 ;sheathing\n:1 lda CharSword\n beq ]rts\n:2\n lda Fsword\n and #$3f ;frame #\n beq ]rts ;no sword for this frame\n\n jsr getswordframe\n\n ldy #0\n lda (framepoint),y\n beq ]rts\n\n jsr decodeswim ;get FCharImage & Table\n\n iny\n lda (framepoint),y\n sta Fdx\n\n iny\n lda (framepoint),y\n sta Fdy\n\n lda Fdx\n jsr ADDFCHARX ;A := FCharX + Fdx\n\n lda Fdy\n clc\n adc FCharY\n sta FCharY\n\n jmp ADDSWORDOBJ\n\n*-------------------------------\n*\n*  G E T   F R A M E\n*\n*  In: A = frame # (1-192)\n*  Out: framepoint = 2-byte pointer to frame def table\n*\n*-------------------------------\nGETFRAME ;Kid uses main char set\n jsr getfindex\n lda framepoint\n clc\n adc #Fdef\n sta framepoint\n lda framepoint+1\n adc #>Fdef\n sta framepoint+1\n rts\n\n*-------------------------------\ngetaltframe1 ;Enemy uses alt set 1\n jsr getfindex\n lda framepoint\n clc\n adc #altset1\n sta framepoint\n lda framepoint+1\n adc #>altset1\n sta framepoint+1\n rts\n\n*-------------------------------\ngetaltframe2 ;Princess & Vizier use alt set 2\n jsr getfindex\n lda framepoint\n clc\n adc #altset2\n sta framepoint\n lda framepoint+1\n adc #>altset2\n sta framepoint+1\n rts\n\n*-------------------------------\ngetfindex\n sec\n sbc #1\n sta ztemp\n sta framepoint\n\n lda #0\n sta ztemp+1\n sta framepoint+1\n\n asl framepoint\n rol framepoint+1\n asl framepoint\n rol framepoint+1 ;2-byte multiply by 4\n\n lda framepoint\n clc\n adc ztemp\n sta framepoint\n\n lda framepoint+1\n adc ztemp+1\n sta framepoint+1 ;make it x5\n rts\n\n*-------------------------------\n*\n* getswordframe\n*\n* In: A = frame #\n* Out: framepoint\n*\n*-------------------------------\ngetswordframe\n sec\n sbc #1\n sta ztemp\n sta framepoint\n\n lda #0\n sta ztemp+1\n sta framepoint+1\n\n asl framepoint\n rol framepoint+1 ;x2\n\n lda framepoint\n clc\n adc ztemp\n sta framepoint\n\n lda framepoint+1\n adc ztemp+1\n sta framepoint+1 ;+1 is 3\n\n lda framepoint\n clc\n adc #swordtab\n sta framepoint\n\n lda framepoint+1\n adc #>swordtab\n sta framepoint+1\n\n rts\n\n*-------------------------------\n*\n* Decode char image\n*\n* In:  Fimage, Fsword (encoded)\n*\n* Out: FCharImage (image #, 0-127)\n*      FCharTable (table #, 0-7)\n*\n*-------------------------------\ndecodeim\n lda Fimage\n and #%10000000 ;bit 2 of table #\n sta ztemp\n\n lda Fsword\n and #%11000000 ;bits 0-1 of table #\n\n lsr\n adc ztemp\n lsr\n lsr\n lsr\n lsr\n lsr\n sta FCharTable\n\n lda Fimage\n and #$7f\n ora timebomb ;must be 0!\n sta FCharImage\n\n rts\n\n*-------------------------------\n*\n* Decode sword image\n*\n* In: A = image #\n*\n* Out: FCharImage, FCharTable\n*\n*-------------------------------\ndecodeswim\n sta FCharImage ;image #\n\n lda #2 ;chtable3\n sta FCharTable\n rts\n\n*-------------------------------\n*\n*  G E T   E D G E S\n*\n*  Get edges of character image\n*\n*  In: FChar data as set by \"setframe\"\n*\n*  Out: leftej/rightej/topej = boundaries of image (140-res)\n*       leftblock, rightblock, topblock, bottomblock\n*       CDLeftEj, CDRightEj (for coll detection)\n*       imheight, imwidth\n*\n*-------------------------------\nGETEDGES\n lda FCharImage\n ldx FCharTable\n jsr dimchar ;return A = image width, x = height\n stx imheight\n\n tax ;image width in bytes\n lda Mult7,x ;in 1/2 pixels\n clc\n adc #1 ;add 1/2 pixel\n lsr ;and divide by 2\n sta imwidth ;to get width in pixels\n\n lda FCharX+1\n lsr\n lda FCharX\n ror\n clc\n adc #ScrnLeft ;convert back to 140-res\n\n* (If facing LEFT, X-coord is leftmost pixel of LEFTMOST byte\n* of image; if facing RIGHT, leftmost pixel of RIGHTMOST byte.)\n\n ldx CharFace\n bmi :ok ;facing L\n;facing R\n sec\n sbc imwidth\n\n:ok sta leftej\n clc\n adc imwidth\n sta rightej\n\n lda FCharY\n sec\n sbc imheight\n clc\n adc #1\n\n cmp #192\n bcc :ok2\n lda #0\n\n:ok2 sta topej\n\n jsr getblocky\n\n cmp #3\n bne :1\n lda #-1 ;if o.s., call it -1\n\n:1 sta topblock\n\n lda FCharY\n jsr getblocky ;if o.s., call it 3\n sta bottomblock\n\n lda leftej\n jsr getblockx ;leftmost affected block\n sta leftblock\n\n lda rightej\n jsr getblockx ;rightmost affected block\n sta rightblock\n\n* get leading edge (for collision detection)\n\n lda #0\n sta ztemp\n\n lda Fcheck\n and #Fthinmark\n beq :nothin\n\n lda #thinner ;make character 3 bits thinner\n sta ztemp ;on both sides\n\n:nothin lda leftej\n clc\n adc ztemp\n sta CDLeftEj\n\n lda rightej\n sec\n sbc ztemp\n sta CDRightEj\n\n]rts rts\n\n*===============================\n*\n*  Q U I C K   F L O O R\n*\n*  Mark for redraw whatever floorpieces character might be\n*  impinging on\n*\n*  In: CharData; GETEDGES results\n*\n*-------------------------------\nQUICKFLOOR\n lda CharPosn\n cmp #135\n bcc :2\n cmp #149\n bcc :climbup\n\n:2 lda CharAction\n cmp #1\n bne :1\n\n lda CharPosn\n cmp #78\n bcc ]rts\n cmp #80\n bcc :fall\n]rts rts\n\n:1 cmp #2\n beq :fall\n cmp #3\n beq :fall\n cmp #4\n beq :fall\n cmp #6\n bne ]rts\n\n:fall lda #markfloor\n ldx #>markfloor\n bne :cont1\n\n:climbup\n lda #markhalf\n ldx #>markhalf\n\n* Mark floorbuf/halfbuf for up to 6 affected blocks\n* Start with rightblock, work left to leftblock\n\n:cont1\n sta marksm1+1\n sta marksm2+1\n stx marksm1+2\n stx marksm2+2\n\n lda rightblock\n:loop sta tempblockx\n\n jsr markul\n\n lda tempblockx\n cmp leftblock\n beq ]rts\n sec\n sbc #1\n bpl :loop\n\n]rts rts\n\n* mark upper & lower blocks for this blockx\n\nmarkul\n lda bottomblock\n sta tempblocky\n\n jsr indexblock ;lower block\n lda #2\nmarksm1 jsr markhalf\n\n lda topblock\n cmp bottomblock\n beq ]rts\n sta tempblocky\n\n jsr indexblock ;upper block\n lda #2\nmarksm2 jmp markhalf\n\n*-------------------------------\n*\n*  Q U I C K  F G\n*\n*  Mark for redraw any f.g. elements char (or his sword)\n*  might be impinging on\n*\n*  In: Char data; left/right/top/bottomblock\n*\n*-------------------------------\nQUICKFG\n\n* Quick fix to cover sword\n\n lda CharSword\n cmp #2\n bcc :cont\n\n lda CharFace\n bpl :faceR\n dec leftblock\n jmp :cont\n\n:faceR inc rightblock\n\n* Continue\n\n:cont lda bottomblock\n:outloop\n sta tempblocky\n\n lda rightblock\n:loop sta tempblockx\n\n jsr indexblock\n lda #3\n jsr MARKFRED\n\n lda tempblockx\n cmp leftblock\n beq :end\n sec\n sbc #1\n bpl :loop\n:end\n lda tempblocky\n cmp topblock\n beq ]rts\n sec\n sbc #1\n bpl :outloop\n rts\n\n]bug jmp showpage\n\n*-------------------------------\n*\n*  C R O P   C H A R A C T E R\n*\n*  In: FChar data as set by \"setframe\"\n*      leftej,rightej, etc. as set by \"getedges\"\n*\n*  Out: FCharCL/CR/CU/CD\n*\n*-------------------------------\nCROPCHAR\n\n* If char is climbing stairs, mask door\n\n lda CharPosn\n cmp #224\n bcc :nost\n cmp #229\n bcs :nost\n lda doortop ;set by drawexitb\n clc\n adc #2\n cmp FCharY\n bcs :bug ;temp!\n sta FCharCU\n]rts rts\n:bug ldy #$F0\n jsr showpage\n:nost\n\n* If char is under solid (a&b) floor, crop top\n\n ldx leftblock\n ldy topblock\n lda CharScrn\n jsr rdblock\n cmp #block\n beq :1\n jsr cmpspace\n beq :not\n\n* Special case (more lenient): if char is jumping\n* up to touch ceiling\n\n:1 lda CharAction\n bne :10\n lda CharPosn\n cmp #79\n beq :2\n cmp #81\n bne :10\n beq :2\n\n* Otherwise, both left & right topblocks must be solid\n\n:10 ldx rightblock\n ldy topblock\n lda CharScrn\n jsr rdblock\n cmp #block\n beq :2\n jsr cmpspace\n beq  :not\n\n:2 ldx CharBlockY\n inx\n cpx #1\n beq :ok\n\n lda BlockTop,x\n cmp FCharY\n bcs :not\n\n sec\n sbc #floorheight\n cmp topej\n bcs :not\n\n:ok lda BlockTop,x\n sta FCharCU\n sta topej\n:not\n\n* If char is standing left of a panel, crop R\n* Char is considered \"left\" if CDLeftEj falls within\n* panel block\n\n lda CDLeftEj\n jsr getblockx\n sta blockx\n\n tax\n ldy CharBlockY\n lda CharScrn\n jsr rdblock\n\n cmp #panelwof\n beq :r\n cmp #panelwif\n bne :nor\n\n* Char's foot is within panel block\n* Special case: If character is hanging R, we don't\n* need to check his head\n\n:r lda CharFace\n bmi :cont\n\n lda CharAction\n cmp #2\n beq :r2 ;yes--hanging R\n\n* Check block to right of char's head\n\n:cont\n ldx blockx\n ldy topblock\n lda CharScrn\n jsr rdblock\n\n cmp #block\n beq :r2\n cmp #panelwof\n beq :r2\n cmp #panelwif\n bne :nor\n\n* Also a panel -- make a wall\n\n:r2 lda tempblockx\n asl\n asl\n clc\n adc #4\n sta FCharCR\n rts\n\n* Is char standing to L of solid block?\n* (i.e. does CDRightEj fall within block?)\n\n:nor\n lda CDRightEj\n jsr getblockx\n sta blockx\n\n tax\n ldy CharBlockY\n lda CharScrn\n jsr rdblock\n\n cmp #block\n bne :nob\n\n* Foot is under block--what about head?\n\n ldx blockx\n ldy topblock\n lda CharScrn\n jsr rdblock\n\n cmp #block\n bne :nob\n\n* Also a panel -- make a wall\n\n:yescrop\n lda tempscrn\n cmp CharScrn\n bne :nob\n\n lda tempblockx\n asl\n asl\n sta FCharCR\n:nob\n rts\n\n*-------------------------------\n*\n*  Z E R O   C R O P\n*\n*-------------------------------\nzerocrop\n lda #0\n sta FCharCU\n sta FCharCL\n lda #40\n sta FCharCR\n lda #192\n sta FCharCD\n rts\n\n*===============================\n*\n*  C O M P A R E   S P A C E\n*\n*  Is it a space (can you pass thru)?\n*  NOTE: Solid block is considered a space (it has no floor)\n*\n*  In: A = objid\n*  Out: 0 = space, 1 = floor\n*\n*-------------------------------\nCMPSPACE\n cmp #space\n beq :space\n cmp #pillartop\n beq :space\n cmp #panelwof\n beq :space\n cmp #block\n beq :space\n cmp #archtop1\n bcs :space\n\n lda #1\n rts\n\n:space lda #0\n rts\n\n*-------------------------------\n*\n*  C O M P A R E   B A R R I E R\n*\n*  Is it a barrier?\n*\n*  Return A = 0 if clear, else A = barrier code #\n*\n*-------------------------------\nCMPBARR\n cmp #panelwif\n beq :b1\n cmp #panelwof\n beq :b1\n cmp #gate\n bne :2\n\n:b1 lda #1 ;panel/gate\n rts\n\n:2 cmp #mirror\n beq :yes3\n\n cmp #slicer\n bne :3\n\n:yes3 lda #3 ;mirror/slicer\n rts\n\n:3 cmp #block\n bne :4\n\n lda #4 ;block\n rts\n:4\n:clear lda #0\n:rts rts\n\n:barr lda #1\n]rts rts\n\n*-------------------------------\n*\n* Is it a wall? Return 0 if yes, 1 if no\n* (Solid block, or panel if you're facing L)\n*\n*-------------------------------\nCMPWALL\n cmp #block\n beq :yes\n ldx CharFace\n bpl :no\n cmp #panelwif\n beq :yes\n cmp #panelwof\n beq :yes\n:no lda #1\n rts\n:yes lda #0\n rts\n\n*-------------------------------\n*\n*  Add kid/reflection/shadowman/guard to object table\n*\n*  In: FChar data\n*\n*-------------------------------\nADDKIDOBJ\n lda #TypeKid\n jmp addcharobj\n\n*-------------------------------\nADDREFLOBJ\n lda #TypeReflect\n jmp addcharobj\n\n*-------------------------------\nADDSHADOBJ\n lda #TypeShad\n jmp addcharobj\n\n*-------------------------------\nADDGUARDOBJ\n lda #TypeGd\n jmp addcharobj\n\n*-------------------------------\n*\n* Add sword to object table\n* In: FChar data for character holding sword\n*\n*-------------------------------\nADDSWORDOBJ\n lda #TypeSword\n jmp addcharobj\n\n*-------------------------------\n*\n*  G E T   S E Q\n*\n*  Get next byte from seqtable & advance CharSeq\n*  (2-byte pointer to sequence table)\n*\n*-------------------------------\nGETSEQ\n ldy #0\n lda (CharSeq),y\n pha\n\n inc CharSeq\n bne :done\n inc CharSeq+1\n\n:done pla\n rts\n\n*-------------------------------\n*\n*  G E T   F R A M E   I N F O\n*\n*  Get frame info for char (based on CharPosn)\n*\n*-------------------------------\nGETFRAMEINFO\n lda CharPosn\n jsr GETFRAME ;set framepoint\n\n jsr usealtsets ;if appropriate\n\n ldy #0\n lda (framepoint),y\n sta Fimage\n\n iny\n lda (framepoint),y\n sta Fsword\n\n iny\n lda (framepoint),y\n sta Fdx\n\n iny\n lda (framepoint),y\n sta Fdy\n\n iny\n lda (framepoint),y\n sta Fcheck\n\n]rts rts\n\n*-------------------------------\n*\n* Use alternate character image sets\n* (if appropriate)\n*\n* In: Char data; framepoint\n* Out: framepoint\n*\n*-------------------------------\nusealtsets\n ldx CharID\n beq ]rts ;kid uses main set, enemy uses alt set 1\n cpx #24\n beq ]rts ;mouse uses main set\n cpx #5\n bcs :usealt2 ;princess & vizier use alt set 2\n\n lda CharPosn\n cpx #2\n bcc :1\n cmp #102\n bcc ]rts\n cmp #107\n bcs :1\n ;frames 102-106 (falling): substitute 172-176 altset\n clc\n adc #70\n\n:1 cmp #150\n bcc ]rts\n cmp #190\n bcs ]rts\n;frames 150-189: use altset\n sec\n sbc #149\n jmp getaltframe1\n\n:usealt2\n lda CharPosn\n jmp getaltframe2\n\n*===============================\n*\n*  M A R K\n*\n*  In: A = mark value (usually 2)\n*      Results of INDEXBLOCK:\n*      Y = block #; carry set or clear\n*\n*  Out: Preserve A, Y, carry\n*\n*-------------------------------\n]os cpy #10 ;top line from scrn above?\n bcs ]rts ;no\n sta topbuf,y\n sec ;preserve cs\n]rts rts\n\nMARKRED\n bcs ]os\n sta redbuf,y\n rts\n\nMARKFRED\n bcs ]rts\n sta fredbuf,y\n rts\n\nMARKWIPE\n bcs ]rts\n pha\n lda wipebuf,y\n beq :2\n lda height\n cmp whitebuf,y ;if wipebuf is already marked,\n bcc :1 ;use larger of 2 whitebuf values\n:2 lda height\n sta whitebuf,y\n:1 pla\n sta wipebuf,y\n clc ;return with cc\n rts\n\nMARKMOVE\n bcs ]os\n sta movebuf,y\n rts\n\nMARKFLOOR\n bcs ]os\n sta floorbuf,y\n rts\n\nMARKHALF\n bcs ]os\n sta halfbuf,y\n rts\n\n*-------------------------------\n*\n*  Z E R O   R E D\n*\n*  zero redraw buffers\n*\n*-------------------------------\nZERORED\n lda #0\n\n ldy #29\n\n:loop sta redbuf,y\n sta fredbuf,y\n sta floorbuf,y\n sta wipebuf,y\n sta movebuf,y\n sta objbuf,y\n sta halfbuf,y\n\n dey\n bpl :loop\n\n ldy #9\n:dloop sta topbuf,y\n dey\n bpl :dloop\n\n rts\n\n*-------------------------------\n*\n*  C H E C K L E D G E\n*\n*  In: blockid = block that must be clear;\n*      A = RDBLOCK results for block that must be ledge\n*\n*  Out: A = 1 if grabbable, 0 if not\n*\n*-------------------------------\nCHECKLEDGE\n sta ztemp\n\n lda (BlueSpec),y\n sta tempstate\n\n lda blockid ;must be clear\n\n cmp #block\n beq :no\n\n cmp #panelwof ;CMPSPACE considers panel w/o floor\n  bne :cont ;to be clear--\n\n bit CharFace ;but it isn't if char wants to grab\n bpl :no ;floorpiece to right\n:cont\n jsr cmpspace\n bne :no\n\n* Clear above -- is there a ledge in front?\n\n lda ztemp ;must be a solid floorpiece\n;with exposed ledge\n cmp #loose\n bne :notloose\n\n bit tempstate\n bne :no ;floor is already loose\n\n:notloose\n cmp #panelwif\n bne :cont2 ;panel w/floor can be grabbed\n;only if facing right\n bit CharFace\n bmi :no\n\n:cont2 jsr cmpspace\n beq :no\n\n:yes lda #1\n rts\n\n:no lda #0\n]rts rts\n\n*-------------------------------\n*\n*  C H E C K   S P I K E S\n*\n*  Spikes spring out when char passes over them (at any\n*  height).\n*\n*-------------------------------\nCHECKSPIKES\n lda rightej\n jsr getblockxp\n bmi ]rts\n sta tempright\n\n* for blockx = leftblock to rightblock\n\n lda leftej\n jsr getblockxp\n:loop sta blockx\n\n jsr sub\n\n lda blockx\n cmp tempright\n beq ]rts\n clc\n adc #1\n jmp :loop\n\nsub sta tempblockx\n lda CharBlockY\n sta tempblocky\n lda CharScrn\n sta tempscrn\n:loop jsr rdblock1\n\n cmp #spikes\n bne :again\n jmp trigspikes\n\n:again jsr cmpspace\n bne ]rts\n\n lda tempscrn\n beq ]rts ;null scrn\n cmp CharScrn\n bne ]rts ;wait till he's on same screen\n\n inc tempblocky\n jmp :loop ;check 1 level below\n\n*===============================\n*\n*  Load/save kid/shad vars\n*\n*-------------------------------\nnumvars = 16\n\nLOADKID\n ldx #numvars-1\n\n:loop lda Kid,x\n sta Char,x\n\n dex\n bpl :loop\n]rts rts\n\nSAVEKID\n ldx #numvars-1\n\n:loop lda Char,x\n sta Kid,x\n\n dex\n bpl :loop\n]rts rts\n\nLOADSHAD\n ldx #numvars-1\n\n:loop lda Shad,x\n sta Char,x\n\n dex\n bpl :loop\n]rts rts\n\n\nSAVESHAD\n ldx #numvars-1\n\n:loop lda Char,x\n sta Shad,x\n\n dex\n bpl :loop\n rts\n\n*  Load kid w/ opponent\n\nLOADKIDWOP\n ldx #numvars-1\n\n:loop lda Kid,x\n sta Char,x\n\n lda Shad,x\n sta Op,x\n\n dex\n bpl :loop\n rts\n\nSAVEKIDWOP\n ldx #numvars-1\n\n:loop lda Char,x\n sta Kid,x\n\n lda Op,x\n sta Shad,x\n\n dex\n bpl :loop\n rts\n\n* Load shadowman w/ opponent\n\nLOADSHADWOP\n ldx #numvars-1\n\n:loop lda Shad,x\n sta Char,x\n\n lda Kid,x\n sta Op,x\n\n dex\n bpl :loop\n rts\n\nSAVESHADWOP\n ldx #numvars-1\n\n:loop lda Char,x\n sta Shad,x\n\n lda Op,x\n sta Kid,x\n\n dex\n bpl :loop\n rts\n\n*-------------------------------\n*\n* Recharge strength meter to max\n*\n*-------------------------------\nRECHARGEMETER\n lda MaxKidStr\n sec\n sbc KidStrength\n sta ChgKidStr\n]rts rts\n\n*-------------------------------\n*\n* Boost strength meter max by 1 and recharge\n*\n*-------------------------------\nBOOSTMETER\n lda MaxKidStr\n cmp #maxmaxstr\n bcs :1\n\n clc\n adc #1\n sta MaxKidStr\n\n:1 jmp RECHARGEMETER\n\n*-------------------------------\n*\n* Get distance between char & opponent\n* (# pixels char must move fwd to reach opponent)\n* If dist is greater than 127, return 127 (+ or -)\n*\n*-------------------------------\nestwidth = 13 ;rough est of char width\n\nGETOPDIST\n lda CharScrn\n cmp OpScrn\n bne :safe\n\n* First, get A = OpX-CharX (abs. value <= 127)\n\n lda OpX\n cmp CharX\n bcc :neg\n sec\n sbc CharX\n bpl :got\n lda #127\n bpl :got\n\n:neg lda CharX\n sec\n sbc OpX\n bpl :1\n lda #127\n:1 eor #$ff\n clc\n adc #1 ;negate\n\n* If CharFace = left, negate\n\n:got ldx CharFace\n bpl :cont\n eor #$ff\n clc\n adc #1\n\n* If chars are facing in opposite directions,\n* adjust by estimate of width of figure\n\n:cont tax\n lda CharFace\n eor OpFace\n bpl :done\n txa\n cmp #127-estwidth\n bcs :done2\n clc\n adc #estwidth\n:done2 tax\n rts\n\n:safe ldx #127 ;arbitrary large dist.\n:done txa ;return value in A\n]rts rts\n\n*-------------------------------\n*\n*  Adjust CharY for uneven floor\n*\n*-------------------------------\nUNEVENFLOOR\n jsr getunderft\n cmp #dpressplate\n bne ]rts\n inc CharY\n]rts rts\n\n*-------------------------------\n lst\n ds 1\n usr $a9,19,$200,*-org\n lst off\n"
  },
  {
    "path": "04 Support/MakeDisk/S/DEBUGS.S",
    "content": "* debugs\nEditorDisk = 0\norg = $fc00\nload = $4c00\n lst off\n*-------------------------------\n*\n*  \" D E B U G S \"\n*\n*  Sits in aux language card--called from auxmem\n*\n*-------------------------------\n org org\n\n jmp _SHOWPAGE\n jmp DEBUGKEYS\n\n clc\n bcc MOVEAUXLC ;must be relocatable\n\n jmp _TITLESCREEN\n\n*-------------------------------\n*\n*  M O V E A U X L C\n*  (Move to auxiliary language card)\n*\n*  This code is loaded into mainmem, where MASTER calls it\n*  to move itself & all other aux l.c. stuff to aux l.c.\n*\n*  WARNING--once in aux l.c. this code is useless!\n*\n*  Returns control to main l.c. bank 1\n*\n*-------------------------------\nMOVEAUXLC\n sta $c009 ;ALTZP on (aux l.c.)\n\n bit $c083\n bit $c083 ;bank 2\n\n lda #$d0\n ldx #$20\n ldy #$50\n jsr Tmovemem\n\n bit $c08b\n bit $c08b ;bank 1\n\n do EditorDisk\n else\n\n lda #$d0\n ldx #$50\n ldy #$60\n jsr Tmovemem\n\n fin\n\n sta $c008 ;ALTZP off (main l.c.)\n rts\n\n*-------------------------------\n* \"MOVEMEM\"\n\n dum $00\n]dest ds 2\n]source ds 2\n]endsourc ds 2\n dend\n\nmovemem sta ]dest+1\n stx ]source+1\n sty ]endsourc+1\n\n ldy #0\n sty ]dest\n sty ]source\n sty ]endsourc\n\n:loop lda (]source),y\n sta (]dest),y\n\n iny\n bne :loop\n\n inc ]source+1\n inc ]dest+1\n\n lda ]source+1\n cmp ]endsourc+1\n bne :loop\n rts\n\nTmovemem = movemem-$fc00+$4c00\n\n*-------------------------------\nlastpage ds 1\n\n_SHOWPAGE jsr pre\n jsr SHOWPAGE\n jmp post\n\n_TITLESCREEN jsr pre\n jsr TITLESCREEN\n jmp post\n\n*-------------------------------\npre\n pha\n\n jsr saveregs\n jsr mainmem\n jsr savezero\n\n pla\n]rts rts\n\npost\n jsr loadzero\n jsr auxmem\n jmp loadregs\n\n*-------------------------------\nmainmem\n sta $c004\n sta $c002\n rts\n\n*-------------------------------\nauxmem\n sta $c005\n sta $c003\n]rts rts\n\n*-------------------------------\nregs ds 3\n*-------------------------------\n dum $00\n\nbase ds 2\ntab ds 1\nline ds 1\ninverse ds 1\nbytenum ds 1\nmempage ds 1\noldpage ds 1\nstrptr ds 2\nxsave ds 1\nysave ds 1\nnextbytenum ds 1\ndirecptr ds 1\nztemp ds 1\nold80col ds 1\n\n dend\n\nzerodump = $fa00 ;mainmem\npagedump = $fb00 ;mainmem\n\neol = $8d ;string delimiter\n\n*-------------------------------\n* Keys within routines\n\nkesc = $9b\nkpageup = $8b\nkpagedown = $8a\nk4kup = $95\nk4kdown = $88\nkhires = \"H\"\n\n*-------------------------------\n*\n*  D E B U G   K E Y S\n*\n*  In:  A = kbd value\n*\n*-------------------------------\nkshowzero = \"=\nkshowpage3 = \"\\\nkshowlastpage = \"-\n\nDEBUGKEYS\n cmp #kshowzero\n bne :1\n\n lda #0\n jmp _SHOWPAGE\n\n:1 cmp #kshowpage3\n bne :4\n\n lda #3\n jmp _SHOWPAGE\n:4\n cmp #kshowlastpage\n bne ]rts\n\n lda lastpage\n jmp _SHOWPAGE\n\n*-------------------------------\n*\n*  S H O W P A G E\n*\n*  Show page on text page 1; any key to exit\n*  Keys 0-9 to change page #\n*\n*  In: A = initial page #\n*\n*-------------------------------\nSHOWPAGE\n pha\n jsr pretext\n pla\n\nnewdump  ;A = page #\n jsr  PageDump ;dump a page of memory\n jsr RegsDump ;dump registers\n\n:loop jsr waitloop\n\n cmp #\"0\n bcc :1\n cmp #\":\n bcs :1\n\n sec\n sbc #\"0\n jmp newdump ;dump new page\n\n:1 cmp #kpageup\n bne :2\n lda #-1\n jmp chgpg ;change page\n\n:2 cmp #kpagedown\n bne :3\n lda #1\n jmp chgpg\n\n:3 cmp #k4kup\n bne :4\n lda #$10\n jmp chgpg\n\n:4 cmp #k4kdown\n bne :5\n lda #$f0\n jmp chgpg\n\n:5 cmp #khires\n bne :6\n\n jsr showhires\n jsr waitloop\n jsr showtext\n jmp :loop\n\n:6\n:exit\n jmp posttext\n\n*-------------------------------\n* Change page\n*\n* In: A = increment\n*\n* Lock out pages C0-CF\n*-------------------------------\nchgpg\n sta ztemp\n\n lda mempage\n:loop clc\n adc ztemp\n\n cmp #$c0\n bcc :ok\n cmp #$d0\n bcc :loop\n\n:ok sta mempage\n\n jmp newdump\n\n*-------------------------------\n*\n*  P R E T E X T / P O S T T E X T\n*\n*-------------------------------\npretext\n lda $c01f ;read 80COL\n sta old80col\n\n lda $c01c ;read PAGE2\n sta oldpage\n\n jsr textcls\n\nshowtext\n lda $c054 ;page 1\n lda $c051 ;text\n sta $c00c ;40-column\n\n rts\n\n*-------------------------------\nposttext\n lda mempage\n sta lastpage ;for next time\n\n jsr showhires\n\n lda #\" \" ;black\n jmp cls40\n\n*-------------------------------\n* Show orig. hires page\n\nshowhires\n lda oldpage ;original page\n bpl :1 ;page 1\n lda $c055 ;page 2\n:1\n lda old80col\n bpl :2\n sta $c00d ;80-col on\n:2\n lda $c050 ;graphics\n rts\n\n*-------------------------------\n*\n*  P A G E D U M P\n*\n*  In: A = page # (auxmem)\n*\n*  Locks out $c0-cf\n*\n*-------------------------------\nPageDump\n sta mempage\n\n cmp #$c0\n bcc :ok\n cmp #$d0\n bcs :ok\n rts  ;lock out $c0-cf\n:ok\n jsr copypage ;to mainmem\n\n jsr home\n jsr normal\n\n lda #STRpage\n ldx #>STRpage\n jsr prline ;\"Page \"\n\n lda mempage\n jsr prhexbyte\n\n jsr inv\n\n lda #0\n sta bytenum\n\n lda #8\n sta tab\n\n:rulerloop\n lda #\" \"\n jsr prchar\n\n lda bytenum\n jsr prhexdig\n\n jsr toggle\n\n inc bytenum\n\n lda bytenum\n cmp #$10\n bne :rulerloop\n\n jsr cr\n jsr cr\n\n lda #0\n sta bytenum\n:nextline\n jsr normal\n lda #\"$\"\n jsr prchar\n\n lda mempage\n jsr prhexbyte\n\n lda bytenum\n jsr prhexbyte\n\n lda #\":\"\n jsr prchar\n\n lda #8\n sta tab\n\n* Print next 16 byte values\n\n lda bytenum\n tax\n clc\n adc #$10\n sta nextbytenum\n\n:loop stx xsave\n\n jsr toggle\n\n lda pagedump,x\n jsr prhexbyte\n\n ldx xsave\n inx\n cpx nextbytenum\n bne :loop\n\n* Next line\n\n cpx #0\n beq :rts\n stx bytenum\n\n jsr cr\n\n jmp :nextline\n\n:rts rts\n\n*-------------------------------\n*\n*  R E G S D U M P\n*\n*-------------------------------\nRegsDump\n jsr normal\n\n ldx #19\n jsr setline\n\n ldx #0\n lda #\"A\"\n jsr printreg\n\n ldx #1\n lda #\"X\"\n jsr printreg\n\n ldx #2\n lda #\"Y\"\n jsr printreg\n\n rts\n\n*-------------------------------\nprintreg\n stx xsave\n\n jsr prchar\n inc tab\n\n lda #\"=\"\n jsr prchar\n inc tab\n\n ldx xsave\n lda regs,x\n jsr prhexbyte\n\n lda tab\n clc\n adc #5\n sta tab\n rts\n\n*-------------------------------\n*\n*  W A I T L O O P\n*\n*  Wait for keypress (return in A, hibit set)\n*\n*-------------------------------\nwaitloop\n sta $c010\n\n:loop lda $c000\n bpl :loop\n\n rts\n\n*-------------------------------\n*  C R\n*-------------------------------\ncr\n lda #0\n sta tab\n\n inc line\n ldx line\n jmp bascalc\n\n*-------------------------------\n*\n*  P R L I N E\n*\n*  Print a line of normal text\n*\n*  In: A-X = string ptr\n*\n*-------------------------------\nprline\n sta strptr\n stx strptr+1\n:loop\n ldy #0\n lda (strptr),y\n cmp #eol\n beq :rts\n\n jsr prcharn\n\n inc strptr\n bne :loop\n inc strptr+1\n bne :loop\n\n:rts rts\n\n*-------------------------------\n*\n*  P R H E X B Y T E\n*\n*  Print a hex byte (in A)\n*\n*-------------------------------\nprhexbyte\n pha\n lsr\n lsr\n lsr\n lsr\n jsr prhexdig\n\n pla\n and #$0f\n jmp prhexdig\n\n*-------------------------------\n*\n*  P R H E X D I G\n*\n*  Print a hex digit (in A)\n*  Trashes X\n*\n*-------------------------------\nprhexdig\n tax\n lda hextoasc,x\n jmp prchar\n\n*-------------------------------\n*\n*  P R C H A R\n*\n*  Print an ASCII character (in A)\n*\n*-------------------------------\nprchar\n ldy tab\n and #%00111111\n ora inverse\n sta (base),y\n\n inc tab\n\n rts\n\nprcharn ;normal\n ldy tab\n sta (base),y\n\n inc tab\n\n rts\n\n*-------------------------------\n*\n*  H O M E\n*\n*-------------------------------\nhome\n lda #0\n sta tab\n\n ldx #0\n stx line\n\n jmp bascalc\n\n*-------------------------------\n*\n*  I N V E R S E / N O R M A L\n*\n*-------------------------------\nnormal\n lda #$80\n sta inverse\n rts\n\ninv\n lda #0\n sta inverse\n rts\n\ntoggle\n lda inverse\n eor #$80\n sta inverse\n rts\n\n*-------------------------------\n*\n*  S E T L I N E\n*\n*  In: X = line #\n*\n*-------------------------------\nsetline\n lda #0\n sta tab\n\n stx line\n\n*-------------------------------\n*\n*  B A S C A L C\n*\n*  In: X = line # (0-24)\n*\n*-------------------------------\nbascalc\n cpx #24\n bcs :rts\n\n lda textl,x\n sta base\n\n lda texth,x\n sta base+1\n\n:rts rts\n\n*-------------------------------\n*\n*  T E X T C L S\n*\n*  Clear text page 1 to black\n*\n*-------------------------------\ntextcls lda #$a0 ;space\n\ncls40 ldy #$f7\n:2 sta $400,y\n sta $500,y\n sta $600,y\n sta $700,y\n\n dey\n cpy #$7f\n bne :3\n\n ldy #$77\n:3 cpy #$ff\n bne :2\n\n rts\n\n*-------------------------------\n*  S A V E / L O A D  R E G S\n*-------------------------------\nsaveregs sta regs\n stx regs+1\n sty regs+2\n rts\n\nloadregs lda regs\n ldx regs+1\n ldy regs+2\n rts\n\n*-------------------------------\n*  S A V E Z E R O\n*-------------------------------\nsavezero\n ldx #0\n\n:loop lda $00,x\n sta zerodump,x\n\n inx\n bne :loop\n rts\n\n*-------------------------------\n*  L O A D Z E R O\n*-------------------------------\nloadzero\n ldx #0\n\n:loop lda zerodump,x\n sta $00,x\n\n inx\n bne :loop\n rts\n\n*-------------------------------\n*  C O P Y P A G E\n*\n*  Copy desired auxmem page to \"pagedump\" in mainmem\n*\n*  In: A = page #\n*-------------------------------\ncopypage\n tax\n beq :pagezero\n\n sta :loop+2 ;self-mod\n\n sta $c003 ;read auxmem\n\n ldx #0\n\n:loop lda $300,x\n sta pagedump,x\n\n inx\n bne :loop\n\n sta $c002 ;read mainmem\n\n rts\n\n* Read original page 0 from pagedump, not the current page 0\n\n:pagezero\n ldx #0\n:loop0 lda zerodump,x\n sta pagedump,x\n inx\n bne :loop0\n rts\n\n*-------------------------------\n* 40-column text base addresses\n*-------------------------------\n\ntextl hex 00,80,00,80,00,80,00,80\n hex 28,a8,28,a8,28,a8,28,a8\n hex 50,d0,50,d0,50,d0,50,d0\n\ntexth hex 04,04,05,05,06,06,07,07\n hex 04,04,05,05,06,06,07,07\n hex 04,04,05,05,06,06,07,07\n\n*-------------------------------\n* Hex to ASCII\n*-------------------------------\n\nhextoasc asc \"0123456789ABCDEF\"\n\n*-------------------------------\nTITLESCREEN\n jsr pretext\n jsr textcls\n\n jsr home\n jsr normal\n\n lda #title\n ldx #>title\n jsr prline\n\n ldx #3\n jsr setline\n lda #date\n ldx #>date\n jsr prline\n\n ldx #11\n jsr setline\n lda #please\n ldx #>please\n jsr prline\n\n ldx #23\n jsr setline\n lda #copyr\n ldx #>copyr\n jsr prline\n\n:loop lda $c061\n ora $c062\n bpl :loop\n sta $c010\n rts\n\n*-------------------------------\n*\n*  S T R I N G   D A T A\n*\n*-------------------------------\nSTRpage asc \"Page \"\n db #eol\n\ntitle asc \"PRINCE OF PERSIA Level Editor\"\n db #eol\ndate asc \"Working Copy\"\n db #eol\nplease asc \"PLEASE DO NOT COPY!!\"\n db #eol\ncopyr asc \"Copyright 1989 Jordan Mechner\"\n db #eol\n\n*-------------------------------\n lst\neof ds 1\n usr $a9,21,$e00,*-org\n lst off\n"
  },
  {
    "path": "04 Support/MakeDisk/S/EQ.S",
    "content": " tr on\n lst off\n* eq\n*-------------------------------\n*\n*  Equates\n*\n*-------------------------------\n*  Main l.c.\n\nrw18 = $d000\npeelbuf1 = $d000\npeelbuf2 = $d800\nhrtables = $e000\nunpack = $ea00 ;game only\nhires = $ee00\nmaster = $f880\n\n*  Auxmem\n\ngrafix = $400\ntables = $e00\nframeadv = $1290\nredbufs = $5e00\nmenudata = $960f ;ed only\nimlists = $ac00\nendimspace = $b600\nblueprnt = $b700\n\n*  Aux l.c.\n\nbluecopy = $d000 ;bank 1\n\n*-------------------------------\n*\n*  Jump tables\n*\n*-------------------------------\n dum master\n\n_firstboot ds 3\n_loadlevel ds 3\n_reload ds 3\n_loadstage2 ds 3\n ds 3\n\n_attractmode ds 3\n_cutprincess ds 3\n_savegame ds 3\n_loadgame ds 3\n_dostartgame ds 3\n\n_epilog ds 3\n_loadaltset ds 3\n ds 3 ;_screendump\n\n dum master ;ed\n\n ds 15\n\n_edreboot ds 3\n_gobuild ds 3\n_gogame ds 3\n_writedir ds 3\n_readdir ds 3\n\n_savelevel ds 3\n_savelevelg ds 3\n_screendump ds 3\n\n dum hrtables\n\nYLO ds $c0\nYHI ds $c0\n\n dum hires\n\n_boot3 ds 3\n_cls ds 3\n_lay ds 3\n_fastlay ds 3\n_layrsave ds 3\n\n_lrcls ds 3\n_fastmask ds 3\n_fastblack ds 3\n_peel ds 3\n_getwidth ds 3\n\n_copy2000 ds 3\n_copy2000aux ds 3\n_setfastaux ds 3\n_setfastmain ds 3\n_copy2000ma ds 3\n\n_copy2000am ds 3\n\n\n dum unpack\n\nSngExpand ds 3\nDblExpand ds 3\nDeltaExpPop ds 3\n_inverty ds 3\nDeltaExpWipe ds 3\n\npurple ds 3\nprompt ds 3\nblackout ds 3\nclr ds 3\ntext ds 3\n\nsetdhires ds 3\nfadein ds 3\nloadsuper ds 3\nfadeout ds 3\n\n dum grafix\n\ngr ds 3\ndrawall ds 3\ncontroller ds 3\n ds 3\nsaveblue ds 3\n\nreloadblue ds 3\nmovemem ds 3\nbuttons ds 3\ngtone ds 3\nsetcenter ds 3\n\ndimchar ds 3\ncvtx ds 3\nzeropeel ds 3\nzeropeels ds 3\npread ds 3\n\naddpeel ds 3\ncopyscrn ds 3\nsngpeel ds 3\nrnd ds 3\ncls ds 3\n\nlay ds 3\nfastlay ds 3\nlayrsave ds 3\nlrcls ds 3\nfastmask ds 3\n\nfastblack ds 3\npeel ds 3\ngetwidth ds 3\ncopy2000 ds 3\ncopy2000ma ds 3\n\nsetfastaux ds 3\nsetfastmain ds 3\nloadlevel ds 3\nattractmode ds 3\nxminit ds 3\n\nxmplay ds 3\ncutprincess ds 3\nxtitle ds 3\ncopy2000am ds 3\nreload ds 3\n\nloadstage2 ds 3\n ds 3\ngetselect ds 3\ngetdesel ds 3\nedreboot ds 3 ;ed\n\ngobuild ds 3 ;ed\ngogame ds 3 ;ed\nwritedir ds 3 ;ed\nreaddir ds 3 ;ed\nsavelevel ds 3 ;ed\n\nsavelevelg ds 3 ;ed\naddback ds 3\naddfore ds 3\naddmid ds 3\naddmidez ds 3\n\naddwipe ds 3\naddmsg ds 3\nsavegame ds 3\nloadgame ds 3\nzerolsts ds 3\n\nscreendump ds 3\nminit ds 3\nmplay ds 3\nsavebinfo ds 3\nreloadbinfo ds 3\n\ninverty ds 3\nnormspeed ds 3\naddmidezo ds 3\ncalcblue ds 3\nzerored ds 3\n\nxplaycut ds 3\ncheckIIGS ds 3\nfastspeed ds 3\nmusickeys ds 3\ndostartgame ds 3\n\nepilog ds 3\nloadaltset ds 3\nxmovemusic ds 3\nwhoop ds 3\nvblank ds 3\n\nvbli ds 3\n\n dum redbufs\n\n ds 60 ;unused\nhalfbuf ds 30\nredbuf ds 30\nfredbuf ds 30\nfloorbuf ds 30\nwipebuf ds 30\nmovebuf ds 30\nobjbuf ds 30\nwhitebuf ds 30\ntopbuf ds 10\n\n dum menudata ;ed only\n\nmenutype ds 30\nmenuspec ds 30\nmenubspec ds 30\n\n dum frameadv\n\nsure ds 3\nfast ds 3\ngetinitobj ds 3\n\n dum tables\n\nByteTable ds $100\nOffsetTable ds $100\nBlockTable ds $100\nPixelTable ds $100\nMult10 ds $10\nMult7 ds $10\nMult30 ds $40\nBlockEdge ds 20\nBlockTop ds 5\nBlockBot ds 5\nFloorY ds 5\nBlockAy ds 5\n\n dum blueprnt\n\nBLUETYPE ds 24*30\nBLUESPEC ds 24*30\nLINKLOC ds 256\nLINKMAP ds 256\nMAP ds 24*4\nINFO ds 256\n\n*-------------------------------\n*\n*  Blueprint info\n*\n*-------------------------------\n dum INFO\n\n ds 64\nKidStartScrn ds 1\nKidStartBlock ds 1\nKidStartFace ds 1\n ds 1\nSwStartScrn ds 1\nSwStartBlock ds 1\n ds 1\nGdStartBlock ds 24\nGdStartFace ds 24\nGdStartX ds 24\nGdStartSeqL ds 24\nGdStartProg ds 24\nGdStartSeqH ds 24\n\n*-------------------------------\n*\n*  Image lists\n*\n*-------------------------------\nmaxback = 200 ;x4\nmaxfore = 100 ;x4\nmaxwipe = 20 ;x5\nmaxpeel = 46 ;x4\nmaxmid = 46 ;x11\nmaxobj = 20 ;x12\nmaxmsg = 32 ;x5\n\n dum imlists\n\ngenCLS ds 1\n\nbgX ds maxback\nbgY ds maxback\nbgIMG ds maxback\nbgOP ds maxback\n\nfgX ds maxfore\nfgY ds maxfore\nfgIMG ds maxfore\nfgOP ds maxfore\n\nwipeX ds maxwipe\nwipeY ds maxwipe\nwipeH ds maxwipe\nwipeW ds maxwipe\nwipeCOL ds maxwipe\n\npeelX ds maxpeel*2\npeelY ds maxpeel*2\npeelIMGL ds maxpeel*2\npeelIMGH ds maxpeel*2\n\nmidX ds maxmid\nmidOFF ds maxmid\nmidY ds maxmid\nmidIMG ds maxmid\nmidOP ds maxmid\nmidTYP ds maxmid\nmidCU ds maxmid\nmidCD ds maxmid\nmidCL ds maxmid\nmidCR ds maxmid\nmidTAB ds maxmid\n\nobjINDX ds maxobj\nobjX ds maxobj\nobjOFF ds maxobj\nobjY ds maxobj\nobjIMG ds maxobj\nobjFACE ds maxobj\nobjTYP ds maxobj\nobjCU ds maxobj\nobjCD ds maxobj\nobjCL ds maxobj\nobjCR ds maxobj\nobjTAB ds maxobj\n\nmsgX ds maxmsg\nmsgOFF ds maxmsg\nmsgY ds maxmsg\nmsgIMG ds maxmsg\nmsgOP ds maxmsg\n\n*-------------------------------\n*\n*  Zero page\n*\n*-------------------------------\n*  $00-17: Hires parameters\n*-------------------------------\n dum $00\n\nPAGE ds 1\nXCO ds 1\nYCO ds 1\nOFFSET ds 1\nIMAGE ds 2\nOPACITY ds 1\nTABLE ds 2\nPEELBUF ds 2\nPEELIMG ds 2\nPEELXCO ds 1\nPEELYCO ds 1\nTOPCUT ds 1\nLEFTCUT ds 1\nRIGHTCUT ds 1\nBANK ds 1\nBOTCUT ds 1\n\nheight = IMAGE\nwidth = IMAGE+1\n\n*-------------------------------\n*  $18-3f: Global vars\n*-------------------------------\n dum $18\n\nJSTKX ds 1\nJSTKY ds 1\nBTN0 ds 1\nBTN1 ds 1\nBUTT0 ds 1\nBUTT1 ds 1\nJSTKUP ds 1\nb0down ds 1\nb1down ds 1\nSINGSTEP ds 1\nblackflag ds 1\nSCRNUM ds 1\nBlueType ds 2\nBlueSpec ds 2\nCUTTIMER ds 1\nPRECED ds 1\nspreced ds 1\nPREV ds 3\nsprev ds 3\nscrnLeft ds 1\nscrnRight ds 1\nscrnAbove ds 1\nscrnBelow ds 1\nscrnBelowL ds 1\nscrnAboveL ds 1\nscrnAboveR ds 1\nscrnBelowR ds 1\nkbdX ds 1\nkbdY ds 1\njoyX ds 1\njoyY ds 1\nbtn ds 1\nbutt ds 1\n\n*-------------------------------\n*\n*  Pages 2-3\n*\n*-------------------------------\n dum $200\n\ninmenu ds 1\ninbuilder ds 1\nineditor ds 1\nsoundon ds 1\njctr ds 2\njthres1x ds 1\njthres1y ds 1\njthres2x ds 1\njthres2y ds 1\njvert ds 1\njhoriz ds 1\njbtns ds 1\njoyon ds 1\ndevelment ds 1\nkeypress ds 1\nkeydown ds 1\nIIGS ds 1\n\n dum $3c0\n\nsortX ds $10\nBELOW ds $10\nSBELOW ds $10\n\n dum $3f0\n\nbluepTRK ds 1\nbluepREG ds 1\nbinfoTRK ds 1\nbinfoREG ds 1\nlevel ds 1\nBBundID ds 1\nredherring2 ds 1\npausetemp ds 1\nrecheck0 ds 1\n\n dend\n\n*-------------------------------\n*\n*  Misc. constants\n*\n*-------------------------------\nScrnWidth = 140\nScrnHeight = 192\n\nScrnLeft = 58\nScrnRight = ScrnLeft+ScrnWidth-1\nScrnTop = 0\nScrnBottom = ScrnTop+ScrnHeight-1\n\nsecmask = %11000000\nreqmask = %00100000\nidmask = %00011111\n\nand = 0\nora = 1\nsta = 2\neor = 3\nmask = 4\n\n lst off\n"
  },
  {
    "path": "04 Support/MakeDisk/S/FRAMEADV.S",
    "content": "* frameadv\nEditorDisk = 0 ;1 = dunj, 2 = palace\norg = $1290\n lst off\n tr on\n*-------------------------------\n org org\n\n jmp SURE\n jmp FAST\n jmp GETINITOBJ\n\n*-------------------------------\n lst\n put eq\n lst\n put gameeq\n lst off\n put bgdata\n lst off\n\ninitsettings\n db gmaxval,gminval\n\n dum locals\nindex ds 1\nrowno ds 1\ncolno ds 1\nyindex ds 1\nobjid ds 1\nstate ds 1\nAy ds 1\nDy ds 1\ngateposn ds 1\ngatebot ds 1\nxsave ds 1\nblockxco ds 1\nswitches ds 1\nobj1 ds 1\nobj2 ds 1\nblockthr ds 1\n dend\n\n*-------------------------------\n*\n*  Draw entire 10 x 3 screen from scratch\n*\n*-------------------------------\nSURE\n lda #1\n sta genCLS ;clear screen\n\n jsr setback ;draw on bg plane\n\n jsr getprev ;get 3 rightmost blocks of screen to left\n\n lda SCRNUM\n jsr calcblue ;get blueprint base addr\n\n*  Draw 3 rows of 10 blocks (L-R, T-B)\n\n ldy #2\n:row sty rowno ;0 = top row, 2 = bottom row\n\n lda BlockBot+1,y\n sta Dy ;get Y-coord for bottom of D-section\n sec\n sbc #3\n sta Ay ;& A-section\n\n lda Mult10,y\n sta yindex ;block # (0-29)\n\n lda PREV,y\n sta PRECED\n lda sprev,y\n sta spreced ;get objid & state of preceding block\n\n jsr getbelow ;get 10 topmost blocks of screen below\n\n lda #0\n sta colno ;0 = leftmost column, 9 = rightmost\n:loop asl\n asl\n sta XCO\n sta blockxco ;get X-coord for A-section\n\n ldy yindex\n jsr getobjid\n sta objid ;get object id# of current block\n\n jsr RedBlockSure ;Redraw entire block\n\n lda objid\n sta PRECED\n lda state\n sta spreced ;Move on to next block\n\n inc yindex\n inc colno\n\n lda colno\n cmp #10\n bcc :loop ;...until we've done 10 blocks\n\n:nextln ldy rowno\n beq :done\n dey\n jmp :row ;...and 3 rows\n\n* Now draw bottom row of screen above (D-sections only)\n\n:done ldy #2 ;bottom row of scrn above\n sty rowno\n\n lda #2\n sta Dy\n lda #-1\n sta Ay ;get screen Y-coords\n\n lda Mult10,y\n sta yindex\n\n lda #0\n sta PRECED\n\n lda scrnBelow\n pha\n lda scrnBelowL\n pha ;save current values on stack\n\n lda SCRNUM\n sta scrnBelow\n lda scrnLeft\n sta scrnBelowL ;& pretend we're on screen above\n\n* Draw 10 blocks, L-R\n\n jsr getbelow\n\n lda scrnAbove\n jsr calcblue\n\n lda #0\n sta colno\n:dloop\n asl\n asl\n sta XCO\n sta blockxco\n\n lda scrnAbove\n bne :1\n lda #floor ;If screen above is null screen,\n bne :2 ;draw a row of solid floorpieces\n\n:1 ldy yindex\n jsr getobjid1\n:2 sta objid\n\n jsr RedDSure ;Draw D-section\n\n lda objid\n sta PRECED\n lda state\n sta spreced\n\n inc yindex\n inc colno\n\n lda colno\n cmp #10\n bcc :dloop\n\n pla ;Restore original screen values\n sta scrnBelowL\n pla\n sta scrnBelow\n]rts rts\n\n*-------------------------------\n*\n*  Fast screen redraw\n*\n*  Same general structure as SURE, but redraws only those\n*  blocks specified by redraw buffers.\n*\n*-------------------------------\nFAST\n jsr getprev\n\n lda SCRNUM\n jsr calcblue\n\n lda #0\n ldy #20\n jsr metbufs3 ;If strength meter is in danger of\n sta redkidmeter ;being overwritten, mark it for redraw\n\n lda #0\n ldy #28\n jsr metbufs2\n sta redoppmeter ;opponent meter too\n\n lda #30\n sta yindex\n jsr drawobjs ;Draw o.s. characters first\n\n*  Draw 3 rows of 10 blocks (L-R, T-B)\n\n ldy #2\n:row sty rowno\n\n lda BlockBot+1,y\n sta Dy\n sec\n sbc #3\n sta Ay\n\n lda Mult10,y\n sta yindex\n\n lda PREV,y\n sta PRECED\n lda sprev,y\n sta spreced\n\n jsr getbelow\n\n lda #0\n sta colno\n\n:loop asl\n asl\n sta XCO\n sta blockxco\n\n ldy yindex\n jsr getobjid\n sta objid\n\n jsr RedBlockFast\n\n lda objid\n sta PRECED\n lda state\n sta spreced\n\n inc yindex\n inc colno\n\n lda colno\n cmp #10\n bcs :nextln\n jmp :loop\n\n:nextln ldy rowno\n beq :cont\n dey\n jmp :row\n\n* Now draw bottom row of screen above (D-sections only)\n\n:cont jsr setback\n\n ldy #2\n sty rowno\n\n lda #2\n sta Dy\n lda #-1\n sta Ay\n\n lda Mult10,y\n sta yindex\n\n lda #0\n sta PRECED\n\n lda scrnBelow\n pha\n lda scrnBelowL\n pha\n\n lda SCRNUM\n sta scrnBelow\n lda scrnLeft\n sta scrnBelowL\n\n jsr getbelow\n\n lda scrnAbove\n beq :done\n jsr calcblue\n\n lda #0\n sta colno\n:dloop\n asl\n asl\n sta blockxco\n sta XCO\n\n ldy yindex\n jsr getobjid1\n sta objid\n\n jsr RedDFast\n\n lda objid\n sta PRECED\n lda state\n sta spreced\n\n inc yindex\n inc colno\n\n lda colno\n cmp #10\n bcc :dloop\n\n:done\n pla\n sta scrnBelowL\n pla\n sta scrnBelow\n\n* Now draw comix (impact stars) & strength meters\n\n lda #$ff\n sta yindex\n jsr drawobjs ;draw comix (index = -1)\n\n do EditorDisk\n lda inbuilder\n bne ]rts\n fin\n\n jmp updatemeters\n\n*-------------------------------\n*\n*  Redraw entire block\n*\n*-------------------------------\nRedBlockSure\n jsr drawc ;C-section of piece below & to left\n jsr drawmc\n\n jsr drawb ;B-section of piece to left\n jsr drawmb\n\n jsr drawd ;D-section\n jsr drawmd\n\n jsr drawa ;A-section\n jsr drawma\n\n jmp drawfrnt ;A-section frontpiece\n;(Note: This is necessary in case we do a\n;layersave before we get to f.g. plane)\n\n*-------------------------------\n*\n* Redraw entire D-section\n*\n*-------------------------------\nRedDSure\n jsr drawc\n jsr drawmc\n jsr drawb\n jsr drawd\n jsr drawmd\n jmp drawfrnt\n\n*-------------------------------\n*\n*  Partial block redraw (as specified by redraw buffers)\n*\n*-------------------------------\nRedBlockFast\n lda wipebuf,y ;is wipebuf marked?\n beq :skipwipe ;no--skip it\n sec\n sbc #1\n sta wipebuf,y ;decrement wipebuf\n\n jsr wipesq ;& wipe this block!\n\n ldy yindex\n\n:skipwipe\n lda redbuf,y\n beq :skipred\n sec\n sbc #1\n sta redbuf,y\n\n jsr setback\n jsr RedBlockSure\n\n ldy yindex\n bpl :skipmove\n\n:skipred\n lda movebuf,y\n beq :skipmove\n sec\n sbc #1\n sta movebuf,y\n\n jsr setback\n jsr drawmc\n jsr drawmb\n jsr drawma\n\n ldy yindex\n\n:skipmove\n lda floorbuf,y\n beq :skipfloor\n sec\n sbc #1\n sta floorbuf,y\n\n jsr setmid\n jsr drawfloor\n\n ldy yindex\n bpl :skiphalf\n\n:skipfloor\n lda halfbuf,y\n beq :skiphalf\n sec\n sbc #1\n sta halfbuf,y\n\n jsr setmid\n jsr drawhalf\n\n ldy yindex\n\n:skiphalf\n lda objbuf,y\n beq :skipobj\n\n lda #0\n sta objbuf,y\n\n jsr drawobjs ;draw all objects in this block\n\n lda blockxco\n sta XCO\n\n ldy yindex\n\n:skipobj\n lda fredbuf,y\n beq :skipfred\n sec\n sbc #1\n sta fredbuf,y\n\n jsr drawfrnt\n\n ldy yindex\n\n:skipfred\n]rts rts\n\n*-------------------------------\n*\n*  Partial D-section redraw\n*\n*-------------------------------\nRedDFast\n ldy colno\n lda topbuf,y ;is topbuf marked?\n beq :skip ;no--skip it\n sec\n sbc #1\n sta topbuf,y\n\n jsr wiped\n jsr drawc\n jsr drawmc\n jsr drawb\n jsr redrawd ;(both bg and fg)\n jsr drawmd\n jsr drawfrnt\n:skip\n]rts rts\n\n*-------------------------------\n*\n*  Draw objects\n*\n*  Draw object/s with index # = yindex\n*  (Add appropriate images to mid list)\n*\n*-------------------------------\ndrawobjs\n\n* Go through obj list looking for objINDX = yindex\n\n lda objX\n beq :rts\n\n ldy #0 ;y = sort list index\n ldx #1 ;x = object list index\n\n:loop lda objINDX,x\n cmp yindex\n bne :next\n;Found a match--add object to sort list\n txa\n iny\n sta sortX,y\n\n:next inx\n cpx objX\n bcc :loop\n beq :loop\n\n cpy #0\n beq :rts\n sty sortX ;# of objects in sort list\n\n* Sort them into back-to-front order\n\n jsr sortlist\n\n* Transfer sorted objects from obj list to mid list\n\n ldx #1\n:loop2\n stx xsave\n\n lda sortX,x\n tax ;obj list index\n\n jsr drawobjx ;draw object #x\n\n ldx xsave\n inx\n cpx sortX\n bcc :loop2\n beq :loop2\n;Done\n:rts rts\n\n*-------------------------------\n*\n*  Get objids & states of 3 rightmost blocks\n*  of left-neighboring screen\n*\n*  Out: PREV/sprev [0-2]\n*\n*-------------------------------\ngetprev lda SCRNUM\n beq :null\n\n lda scrnLeft\n beq :blackscrn\n\n:cont jsr calcblue ;screen to left\n\n ldy #9\n jsr getobjid1\n sta PREV\n lda state\n sta sprev\n\n ldy #19\n jsr getobjid1\n sta PREV+1\n lda state\n sta sprev+1\n\n ldy #29\n jsr getobjid1\n sta PREV+2\n lda state\n sta sprev+2\n\n rts\n\n:null ;this scrn is null screen\n lda scrnLeft\n bne :cont\n\n:blackscrn ;screen to left is null scrn\n lda #block\n sta PREV\n sta PREV+1\n sta PREV+2\n lda #0\n sta sprev\n sta sprev+1\n sta sprev+2\n rts\n\n*-------------------------------\n*\n*  Get objids & states of 10 blocks in row below,\n*  1 block to left\n*\n*  In:  rowno\n*  Out: BELOW/SBELOW [0-9]\n*\n*  Use getbelow1 to look at screens other than scrnBelow\n*  (In: A = scrn #)\n*\n*-------------------------------\ngetbelow\n ldx rowno\n cpx #2\n bcc :onscr\n\n* Looking below bottom row\n\n lda scrnBelow\n beq :belowblack ;screen below is black\n jsr calcblue\n\n ldy #8 ;skip rmost\n:loop\n jsr getobjid\n\n sta BELOW+1,y\n lda state\n sta SBELOW+1,y\n dey\n bpl :loop\n:cont1\n lda scrnBelowL\n beq :llblack ;screen to l.l. is black\n jsr calcblue\n\n ldy #9 ;u.r. block\n jsr getobjid\n sta BELOW\n lda state\n sta SBELOW\n:done\n lda SCRNUM\n jsr calcblue ;restore SCRNUM\n rts\n\n* \"ONSCREEN\": Looking below top or middle row\n\n:onscr lda PREV+1,x\n sta BELOW\n lda sprev+1,x\n sta SBELOW\n\n lda yindex\n clc\n adc #10\n tay\n\n ldx #1\n\n:loop1 stx xsave\n jsr getobjid\n ldx xsave\n\n sta BELOW,x\n\n lda state\n sta SBELOW,x\n\n iny\n inx\n cpx #10\n bcc :loop1\n\n rts\n\n* Look below null screen\n\n:belowblack\n lda #1\n tax\n:loop2 sta BELOW,x\n inx\n cpx #10\n bcc :loop2\n bcs :cont1\n\n:llblack\n lda level\n cmp #12\n beq :2 ;sorry Lance!\n lda #block\n:1 sta BELOW\n bpl :done\n:2 lda #space\n bpl :1\n\n*-------------------------------\n*\n*  L O A D   O B J E C T\n*\n*  Load vars with object data\n*\n*  In:  x = object table index\n*       X, OFF, Y, IMG, FACE, TYP, CU, CD, CL, CR, TAB\n*\n*  Out: XCO, OFFSET, YCO, IMAGE, TABLE\n*       FCharFace, FCharCU-CD-CL-CR\n*       A = objTYP\n*\n*-------------------------------\nloadobj\n lda objX,x\n sta FCharX\n sta XCO\n\n lda objOFF,x\n sta OFFSET\n\n lda objY,x\n sta FCharY\n sta YCO\n\n lda objIMG,x\n sta IMAGE\n\n lda objTAB,x\n sta TABLE\n\n lda objFACE,x\n sta FCharFace\n\n lda objCU,x\n sta FCharCU\n lda objCD,x\n sta FCharCD\n lda objCL,x\n sta FCharCL\n lda objCR,x\n sta FCharCR\n\n lda objTYP,x\n]rts rts\n\n*-------------------------------\n*\n*  D R A W   F R O N T\n*\n*-------------------------------\ndrawfrnt\n ldx PRECED\n cpx #gate\n bne :a\n jsr DrawGateBF? ;special case\n\n:a ldx objid\n cpx #slicer\n bne :11\n jmp drawslicerf\n:11 cpx #flask\n bne :1\n lda state\n and #%11100000\n cmp #%10100000 ;5\n beq :1\n cmp #%01000000 ;2\n bcc :1\n lda #specialflask\n bne :12\n\n:1 ldx objid\n lda fronti,x\n beq ]rts\n:12 sta IMAGE\n\n lda Ay\n clc\n adc fronty,x\n sta YCO\n\n lda blockxco\n clc\n adc frontx,x\n sta XCO\n\n cpx #archtop2\n bcs :sta\n\n do EditorDisk\n lda #EditorDisk\n cmp #2\n beq :ndunj\n fin\n\n lda BGset1\n cmp #1 ;pal\n beq :ndunj\n\n cpx #posts\n beq :sta ;for dungeon bg set\n:ndunj cpx #block\n beq :block\n\n jmp maddfore\n\n* Special handling for block\n\n:block ldy state\n cpy #numblox\n bcc :2\n ldy #0\n:2 lda blockfr,y\n sta IMAGE\n\n* Pieces that go to byte boundaries can be STA'd w/o masking\n\n:sta ldx #sta\n stx OPACITY\n jmp addfore\n\n*-------------------------------\n* Draw Gate B Front?\n* (only if kid is to the left of bars)\n*-------------------------------\nDrawGateBF?\n lda rowno\n cmp KidBlockY\n bne ]rts\n\n ldx colno\n dex\n cpx KidBlockX ;is kid in gate block?\n bne ]rts\n lda scrnRight\n cmp KidScrn\n beq ]rts\n\n jmp drawgatebf ;draw gate bars over char\n\n*-------------------------------\n*\n*  D R A W   M O V A B L E   ' B '\n*\n*-------------------------------\ndrawmb\n lda PRECED\n\n cmp #gate ;check for special cases\n bne :1\n jmp drawgateb ;draw B-section of moving gate\n\n:1 cmp #spikes\n bne :2\n jmp drawspikeb\n\n:2 cmp #loose\n bne :3\n jmp drawlooseb\n\n:3 cmp #torch\n bne :4\n jmp drawtorchb\n:4\n:5 cmp #exit\n bne :6\n jmp drawexitb\n\n:6\n]rts rts\n\n*-------------------------------\n*\n*  D R A W  M O V A B L E  ' C '\n*\n*-------------------------------\ndrawmc\n lda objid ;is there a piece here?\n cmp #space\n beq :ok\n cmp #panelwof\n beq :ok\n cmp #pillartop\n beq :ok\n\n bne ]rts ;if yes, its A-section will cover up\n;the C-section of the piece below\n:ok\n ldx colno\n lda BELOW,x ;objid of piece below & to left\n\n cmp #gate\n bne ]rts\n\n ;That piece is a gate--\n jmp drawgatec ;special case (movable c)\n\n*-------------------------------\n*\n*  Draw C-section (if visible)\n*\n*-------------------------------\ndrawc\n jsr checkc\n bcc ]rts\n jsr dodrawc ;OR C-section of piece below & to left\n jmp domaskb ;Mask B-section of piece to left\n\n*-------------------------------\n*\n*  Return cs if C-section is visible, cc if hidden\n*\n*-------------------------------\ncheckc\n lda objid ;Does this space contain solid floorpiece?\n beq :vis\n cmp #pillartop\n beq :vis\n cmp #panelwof\n beq :vis\n cmp #archtop1\n bcs :vis\n bcc ]rts ;C-section is hidden\n:vis sec ;C-section is visible\n]rts rts\n\n*-------------------------------\n*\n*  Draw C-section of piece below & to left\n*\n*-------------------------------\ndodrawc\n ldx colno\n lda BELOW,x ;objid of piece below & to left\n tax\n cpx #block\n beq :block\n lda piecec,x\n beq ]rts ;piece has no c-section\n cmp #panelc0\n beq :panel ;special panel handling\n:cont sta IMAGE\n lda blockxco\n sta XCO\n lda Dy\n sta YCO\n lda #ora\n sta OPACITY\n jmp add\n\n* Special panel handling\n\n:panel ldx colno\n lda SBELOW,x\n tay\n cpy #numpans ;# of different panels\n bcs ]rts\n lda panelc,y\n bne :cont\n rts\n\n:block ldx colno\n lda SBELOW,x\n tay\n cpy #numblox\n bcc :1\n ldy #0\n:1 lda blockc,y\n bne :cont\n]rts rts\n\n*-------------------------------\n*\n*  Mask B-section of piece to left\n*\n*-------------------------------\ndomaskb\n ldx PRECED\n lda maskb,x\n beq ]rts\n sta IMAGE\n\n lda Dy\n sta YCO\n lda #and\n sta OPACITY\n jmp add\n\n*-------------------------------\n*\n*  Draw B-section of piece to left\n*\n*-------------------------------\ndrawb\n lda objid\n cmp #block\n beq ]rts ;B-section hidden by solid block\n\n ldx PRECED\n cpx #space\n beq :space\n cpx #floor\n beq :floor\n cpx #block\n beq :block\n lda pieceb,x\n beq :stripe\n cmp #panelb0\n beq :panel ;special panel handling\n\n* draw regular B-section\n\n jsr :cont1\n\n* Add stripe (palace bg set only)\n\n:stripe do EditorDisk\n lda #EditorDisk\n cmp #2\n beq :stripe\n fin\n\n lda BGset1\n cmp #1 ;pal\n bne ]rts\n\n:str1 ldx PRECED\n lda bstripe,x\n beq ]rts\n sta IMAGE\n lda Ay\n sec\n sbc #32\n jmp :cont2\n\n* Special panel handling\n\n:panel ldy spreced\n cpy #numpans\n bcs ]rts\n lda panelb,y\n bne :cont1\n]rts rts\n\n:block ldy spreced\n cpy #numblox\n bcc :1\n ldy #0\n:1 lda blockb,y\n bne :cont1\n\n:floor ldy spreced\n cpy #numbpans+1\n bcc :3\n ldy #0\n:3 lda floorb,y\n beq ]rts\n sta IMAGE\n lda floorby,y\n jmp :cont\n\n:space ldy spreced\n cpy #numbpans+1\n bcs ]rts\n lda spaceb,y\n beq ]rts\n sta IMAGE\n lda spaceby,y\n jmp :cont\n\n* Draw regular B-section\n\n:cont1 sta IMAGE\n lda pieceby,x\n:cont clc\n adc Ay\n:cont2 sta YCO\n lda blockxco\n sta XCO\n lda #ora\n sta OPACITY\n jmp add\n\n*-------------------------------\n*\n*  Draw D-section\n*\n*-------------------------------\nredrawd jsr drawd\n beq ]rts\n jmp addfore\n\ndrawd lda #sta\n sta OPACITY\n ldx objid\n cpx #block\n beq :block\n cpx #panelwof ;Do we need to mask this D-section?\n bne :cont ;no\n:mask lda #ora\n sta OPACITY\n:cont lda pieced,x\n beq ]rts\n:cont1 sta IMAGE\n lda blockxco\n sta XCO\n lda Dy\n sta YCO\n jsr add\n lda #$ff\n]rts rts\n\n* Block handling\n\n:block ldy state\n cpy #numblox\n bcc :1\n ldy #0\n:1 lda blockd,y\n bne :cont1\n\n*-------------------------------\n*\n*  D R A W   ' A '\n*\n*  (1) If piece to left has intrusive B-section (e.g., panel):\n*      MASK A-section\n*  (2) OR A-section\n*\n*-------------------------------\ndrawa\n lda PRECED\n cmp #archtop1\n beq :special\n cmp #panelwif\n beq :needmask\n cmp #panelwof\n beq :needmask\n cmp #pillartop\n beq :needmask\n cmp #block\n bne :nomask\n\n:needmask jsr addamask\n\n:nomask jmp adda\n\n:special ldx objid\n cpx #panelwof\n bne :nomask\n lda #archpanel ;arch ends to L of panel\n jmp adda1\n\n*-------------------------------\naddmidezfast\n lda #UseFastlay\n jmp addmidez\nadd\n]add jmp addback ;self-mod\n\nsetback lda #addback\n sta ]add+1\n lda #>addback\n sta ]add+2\n rts\n\nsetmid lda #addmidezfast\n sta ]add+1\n lda #>addmidezfast\n sta ]add+2\n]rts rts\n\nmaddfore ldx #mask\n stx OPACITY\n jsr addfore\n ldx #ora\n stx OPACITY\n jmp addfore\n\naddamask ldx objid\n lda maska,x\n beq ]rts\n sta IMAGE\n lda blockxco\n sta XCO\n lda Ay\n sta YCO\n lda #and\n sta OPACITY\n jmp add\n\nadda ldx objid\n jsr getpiecea\n beq ]rts ;nothing here\nadda1 sta IMAGE\n lda blockxco\n sta XCO\n lda Ay\n clc\n adc pieceay,x\n sta YCO\n lda #ora\n sta OPACITY\n jmp add\n\n*-------------------------------\n*\n*  D R A W   M O V A B L E   ' A '\n*\n*-------------------------------\ndrawma\n lda objid\n cmp #spikes\n bne :2\n jmp drawspikea\n\n:2 cmp #slicer\n bne :3\n jmp drawslicera\n\n:3 cmp #flask\n bne :4\n jmp drawflaska\n\n:4 cmp #sword\n bne :5\n jmp drawsworda\n:5\n]rts rts\n\n*-------------------------------\n*\n* D R A W   M O V A B L E  ' D '\n*\n*-------------------------------\ndrawmd\n lda objid\n cmp #loose\n bne :1\n jmp drawloosed\n\n:1\n]rts rts\n*-------------------------------\n*\n*  D R A W   F L O O R\n*\n*-------------------------------\ndrawfloor\n lda PRECED ;empty space to left?\n bne ]rts\n]drawflr\n jsr addamask\n jsr adda\n jsr drawma\n jmp drawd\n\n*-------------------------------\n*\n*  D R A W   H A L F\n*\n*  Special version of \"drawfloor\" for climbup\n*\n*-------------------------------\ndrawhalf\n lda PRECED\n bne ]rts\n\n* empty space to left -- mask & draw \"A\" section\n\n ldx objid\n cpx #floor\n beq :flr\n cpx #torch\n beq :flr\n cpx #dpressplate\n beq :flr\n cpx #exit\n beq :flr\n\n lda BGset1\n cmp #1 ;pal?\n bne ]drawflr ;if there's no halfpiece for this objid,\n;redraw full floorpiece\n cpx #posts\n beq :post\n cpx #archbot\n bne ]drawflr\n\n:post jsr :sub\n lda #CUpost\n bne :cont\n\n:flr jsr :sub\n lda #CUpiece\n:cont sta IMAGE\n lda #ora\n sta OPACITY\n jsr add\n jmp drawd\n\n:sub lda #CUmask\n sta IMAGE\n lda blockxco\n sta XCO\n lda Ay\n sta YCO\n ldx objid\n cpx #dpressplate\n bne :1\n inc YCO ;quick trick for dpressplate\n:1 lda #and\n sta OPACITY\n jmp add\n\n*-------------------------------\n*\n*  S H O R T   W I P E\n*\n*  In: Y = buffer index\n*\n*-------------------------------\nwipesq\n lda whitebuf,y\n]wipe sta height\n\n lda #4\n sta width\n\n lda blockxco\n sta XCO\n\n lda Dy\n sta YCO\n\n lda #$80\n jmp addwipe\n]rts rts\n\n*-------------------------------\n*\n* Wipe D-section\n*\n*-------------------------------\nwiped\n lda objid\n cmp #pillartop\n beq ]rts\n cmp #panelwif\n beq ]rts\n cmp #panelwof\n beq ]rts\n cmp #block\n beq ]rts\n\n lda #3\n jmp ]wipe\n\n*-------------------------------\n*  D R A W  L O O S E  F L O O R  \" D \"\n*-------------------------------\ndrawloosed\n lda state\n jsr getloosey\n\n lda loosed,y\n beq :rts\n sta IMAGE\n\n lda blockxco\n sta XCO\n lda Dy\n sta YCO\n\n lda #sta\n sta OPACITY\n\n jmp add\n]rts\n:rts rts\n\n*-------------------------------\n*  D R A W  L O O S E  F L O O R  \" B \"\n*-------------------------------\ndrawlooseb\n lda spreced\n jsr getloosey\n\n lda #looseb\n sta IMAGE\n\n lda Ay\n clc\n adc looseby,y\n sta YCO\n\n lda #ora\n sta OPACITY\n\n jmp add\n\n*-------------------------------\n*\n* Get piece \"A\"\n*\n* In: state; X = objid\n* Out: A = A-section image #\n*\n*-------------------------------\ngetpiecea\n cpx #loose\n beq :loose\n\n lda piecea,x\n]rts rts\n\n:loose lda state\n jsr getloosey\n lda loosea,y\n rts\n\n*-------------------------------\n*\n* Get loose floor index\n*\n* In: A = state\n* Out: Y = index\n*\n*-------------------------------\ngetloosey\n do EditorDisk\n ldy inbuilder\n beq :1\n ldy #1\n rts\n fin\n\n:1 tay ;state\n bpl ]rts\n and #$7f\n cmp #Ffalling+1\n bcc :ok\n lda #1\n:ok tay\n]rts rts\n\n*-------------------------------\n*  Draw spikes A\n*-------------------------------\ndrawspikea\n ldx state\n bpl :1 ;hibit clear --> frame #\n ldx #spikeExt ;hibit set --> spikes extended\n:1 lda spikea,x\n beq ]rts\n sta IMAGE\n lda blockxco\n sta XCO\n lda Ay\n sec\n sbc #1\n sta YCO\n lda #ora\n sta OPACITY\n jmp add\n\n*-------------------------------\n*  Draw spikes B\n*-------------------------------\ndrawspikeb\n ldx spreced\n bpl :1 ;hibit clear --> frame #\n ldx #spikeExt ;hibit set --> spikes extended\n:1 lda spikeb,x\n beq ]rts\n sta IMAGE\n lda blockxco\n sta XCO\n lda Ay\n sec\n sbc #1\n sta YCO\n lda #ora\n sta OPACITY\n jmp add\n\n*-------------------------------\n*  Draw torch B (flame)\n*-------------------------------\ndrawtorchb\n do EditorDisk\n lda inbuilder\n bne ]rts\n fin\n\n lda blockxco\n beq ]rts ;no flame on leftmost torch\n sta XCO\n lda Ay\n sta YCO\n ldx spreced\n jsr setupflame ;in gamebg\n jmp addback\n]rts rts\n\n*-------------------------------\n*  Draw flask A (bubbles)\n*-------------------------------\ndrawflaska\n do EditorDisk\n lda inbuilder\n bne ]rts\n fin\n\n lda blockxco\n sta XCO\n lda Ay\n sta YCO\n ldx state\n jsr setupflask\n lda #UseLay\n jmp addmidezo\n\n*-------------------------------\n*  Draw sword A\n*-------------------------------\ndrawsworda\n lda #swordgleam0\n ldx state\n cpx #1\n bne :0\n lda #swordgleam1\n:0 sta IMAGE\n lda blockxco\n sta XCO\n lda Ay\n sta YCO\n lda #sta\n sta OPACITY\n jmp add\n\n*-------------------------------\n*  Draw slicer A\n*-------------------------------\ndrawslicera\n lda state\n and #$7f\n tax\n cpx #slicerRet\n bcc :1\n ldx #slicerRet ;fully retracted\n:1 lda slicerseq,x\n tax\n dex\n stx xsave\n\n lda blockxco\n sta XCO\n lda Ay\n sta YCO\n lda state ;hibit set = smeared\n bpl :clean\n lda slicerbot2,x\n bne :3\n:clean lda slicerbot,x\n beq :2\n:3 sta IMAGE\n lda #ora\n sta OPACITY\n jsr add\n ldx xsave\n\n:2 lda slicertop,x\n beq ]rts\n sta IMAGE\n lda Ay\n sec\n sbc slicergap,x\n sta YCO\n lda #ora\n sta OPACITY\n jmp add\n\n*-------------------------------\n* Draw slicer front\n*-------------------------------\ndrawslicerf\n lda state\n and #$7f\n tax\n cpx #slicerRet\n bcc :1\n ldx #slicerRet ;fully retracted\n:1 lda slicerseq,x\n tax\n dex\n stx xsave\n\n lda blockxco\n sta XCO\n lda Ay\n sta YCO\n lda slicerfrnt,x\n beq :2\n sta IMAGE\n jmp maddfore\n:2\n]rts rts\n\n*-------------------------------\n* Draw exit \"b\" (stairs)\n*-------------------------------\ndrawexitb\n lda #stairs\n sta IMAGE\n\n lda Ay\n sec\n sbc #12\n sta YCO\n\n lda blockxco\n cmp #36\n bcs ]rts ;can't protrude off R\n clc\n adc #1\n sta XCO\n\n lda #sta\n sta OPACITY\n\n lda SCRNUM\n cmp KidStartScrn\n beq :nostairs ;assume it's an entrance\n jsr add\n:nostairs\n\n* draw door, bottom to top\n\n lda Dy\n sec\n sbc #67\n cmp #192\n bcs ]rts\n sta blockthr ;topmost usable line\n\n lda spreced\n lsr\n lsr\n sta gateposn ;gateposn := spreced/4\n\n lda Ay\n sec\n sbc #14\n sbc gateposn\n sta doortop ;for CROPCHAR\n:loop sta YCO\n\n lda #doormask\n sta IMAGE\n lda #and\n sta OPACITY\n jsr add\n\n lda #door\n sta IMAGE\n lda #ora\n sta OPACITY\n jsr add\n\n lda YCO\n sec\n sbc #4\n cmp blockthr\n bcs :loop\n\n* repair top\n\n lda Ay\n sec\n sbc #64 ;Technically part of C-section\n cmp #192 ;but who cares\n bcs ]rts\n\n sta YCO\n\n lda #toprepair\n sta IMAGE\n lda #sta\n sta OPACITY\n jmp add\n\n]rts rts\n\n*-------------------------------\n*  D R A W   G A T E   \" C \"\n*-------------------------------\ndrawgatec\n lda Dy\n sta YCO\n lda #gatecmask\n sta IMAGE\n lda #and\n sta OPACITY\n jsr add ;mask out triangular area\n\n ldx colno\n lda SBELOW,x ;gate state\n cmp #gmaxval\n bcc :1\n lda #gmaxval\n:1 lsr\n lsr\n sta gateposn\n and #$f8\n eor #$ff\n clc\n adc #1\n clc\n adc gateposn\n tay ;Y:= (state/4) mod 8\n lda gate8c,y\n sta IMAGE\n\n lda #ora\n sta OPACITY\n jmp add\n\n*-------------------------------\n*\n*  D R A W   G A T E   \" B \"\n*\n*  Lay down (STA) the gate in sections, bottom\n*  to top.  The bottom piece has two blank lines that\n*  erase its trail as the gate rises.\n*  Topmost section has 8 separate shapes, 1-8 pixels high.\n*\n*-------------------------------\nsetupdgb\n lda Dy\n sec\n sbc #62\n sta blockthr ;topmost line of B-section\n\n lda spreced\n cmp #gmaxval\n bcc :1\n lda #gmaxval\n:1 lsr\n lsr\n clc\n adc #1\n sta gateposn ;gateposn:= state/4 + 1\n;(gatebottom height off floor)\n lda Ay\n sec\n sbc gateposn\n sta gatebot ;gatebottom YCO\n]rts rts\n\n*-------------------------------\ndrawgatebf\n jsr setupdgb\n\n* Gate bottom\n\n lda #ora\n sta OPACITY\n\n lda gatebot\n sec\n sbc #2\n sta YCO ;no 2 blank lines at bottom\n\n lda #gatebotORA\n sta IMAGE\n\n jsr addfore\n\n* Middle pieces\n\n:cont\n lda #gateB1\n sta IMAGE\n\n lda gatebot\n sec\n sbc #12\n\n:loop sta YCO\n cmp #192\n bcs ]rts\n\n sec\n sbc #7 ;grill mid piece is 8 lines high--\n bcc :done ;will it stick up out of block area?\n cmp blockthr\n bcc :done\n;no, we're still safe--keep going\n jsr addfore\n\n lda YCO\n sec\n sbc #8\n bne :loop\n:done\n ;Skip top piece to save a little time\n]rts rts\n\n*-------------------------------\ndrawgateb\n jsr setupdgb\n\n*  First, draw bottom piece\n\n clc\n adc #12\n cmp Ay ;over floor/wall boundary?\n bcc :storit\n\n* Bottom piece is partly below floor line -- STA won't work.\n* We need to redraw b.g., then OR gate bottom on top.\n\n:orit\n jsr restorebot\n\n lda gatebot\n sec\n sbc #2\n sta YCO ;no 2 blank lines at bottom\n\n lda #gatebotORA\n sta IMAGE\n\n lda #ora\n sta OPACITY\n\n jsr addback\n\n jmp :cont\n\n*  Gate is above floor line -- STA it\n\n:storit lda gatebot\n sta YCO\n\n lda #gatebotSTA\n sta IMAGE\n\n lda #sta\n sta OPACITY\n\n jsr addback\n\n*  Next, draw as many middle pieces as we need to make\n*  up rest of grill\n\n:cont\n lda #sta\n sta OPACITY\n\n lda #gateB1\n sta IMAGE\n\n lda gatebot\n sec\n sbc #12\n\n:loop sta YCO\n cmp #192\n bcs :rts\n\n sec\n sbc #7 ;grill mid piece is 8 lines high--\n bcc :done ;will it stick up out of block area?\n cmp blockthr\n bcc :done\n;no, we're still safe--keep going\n jsr addback\n\n lda YCO\n sec\n sbc #8\n bne :loop\n\n* now add final piece at top\n\n:done lda YCO\n sec\n sbc blockthr\n clc\n adc #1 ;desired height (0-8 pixels)\n\n beq :rts\n cmp #9\n bcs :rts\n\n tay\n lda gate8b-1,y\n sta IMAGE\n\n jsr addback\n\n:rts rts\n\n*-------------------------------\nrestorebot\n ldx #gate\n lda pieceb,x\n sta IMAGE\n lda pieceby,x\n clc\n adc Ay\n sta YCO\n lda blockxco\n sta XCO\n lda #sta\n sta OPACITY\n jsr add\n\n jsr checkc\n bcc :1\n jsr dodrawc\n:1 jmp drawa\n\n*-------------------------------\n*\n*  Draw object #x\n*  (Add appropriate images to mid table)\n*\n*  In: x = object table index\n*\n*-------------------------------\ndrawobjx\n jsr loadobj ;Load vars with object data\n;A = object type\n cmp #TypeKid\n beq :kid\n cmp #TypeReflect\n bne :1\n:kid jmp DrawKid\n\n:1 cmp #TypeShad\n bne :2\n jmp DrawShad\n\n:2 cmp #TypeFF\n bne :3\n jmp DrawFF\n\n:3 cmp #TypeSword\n beq :5\n cmp #TypeComix\n bne :4\n:5 jmp DrawSword\n\n:4 cmp #TypeGd\n bne :6\n jmp DrawGuard\n:6\n]rts rts\n\n*-------------------------------\n* Draw Falling Floor\n*-------------------------------\nDrawFF\n lda #-1 ;normal\n sta FCharFace\n\n lda IMAGE ;mobframe #\n sta FCharImage ;use as temp store\n\n* A-section\n\n lda FCharY\n sec\n sbc #3\n sta YCO\n ldx #floor\n lda maska,x\n sta IMAGE\n lda #and\n sta OPACITY\n lda #UseLayrsave\n jsr addmid\n\n ldx FCharImage\n lda loosea,x\n sta IMAGE\n lda #ora\n sta OPACITY\n lda #UseLay\n jsr addmid\n\n* D-section\n\n ldx FCharImage\n lda loosed,x\n sta IMAGE\n lda FCharY\n sta YCO\n lda #sta\n sta OPACITY\n lda #UseLayrsave\n jsr addmid\n\n* B-section\n\n lda FCharX\n clc\n adc #4\n sta XCO\n\n lda FCharY\n sec\n sbc #4\n sta YCO\n\n lda #looseb\n sta IMAGE\n lda #ora\n sta OPACITY\n lda #UseLayrsave\n jmp addmid\n\n*-------------------------------\n*\n*  Get objid & state\n*\n*  In: BlueType/Spec,Y\n*\n*  Out: A = objid\n*       state = state\n*\n*  Preserves X & Y\n*\n*-------------------------------\ngetobjid\n lda SCRNUM\n beq GOnull ;null scrn has no blueprint\n\n* Use getobjid1 for screen #s other than SCRNUM\n\ngetobjid1\n do EditorDisk\n lda inbuilder\n bne getobjbldr\n fin\n\n lda (BlueSpec),y\n sta state\n\n lda (BlueType),y\n and #idmask\n\n cmp #pressplate\n beq :plate\n\n cmp #upressplate\n beq :upp\n\n rts\n\n* Handle depressed pressplate\n\n:plate lda state ;LINKLOC index\n tax\n lda LINKMAP,x\n\n and #%00011111 ;bits 0-4\n cmp #2\n bcc :up\n\n lda #dpressplate ;plate depressed\n rts\n\n:up lda #pressplate ;plate up\n rts\n\n* Handle depressed upressplate\n\n:upp lda state\n tax\n lda LINKMAP,x\n and #%00011111\n cmp #2\n bcc :up1\n\n lda #0\n sta state\n lda #floor ;depressed upp looks just like floor\n rts\n\n:up1 lda #upressplate\n rts\n\n* Null screen is black\n\nGOnull\n do EditorDisk\n lda inmenu\n bne getobjbldr\n fin\n\n lda #space\n rts\n\n*-------------------------------\n*\n* In builder: BlueSpec contains initial gadget settings\n*\n*-------------------------------\n do EditorDisk\ngetobjbldr\n lda (BlueType),y\n and #idmask\n pha\n jsr getinitobj1\n bcs :ok\n lda (BlueSpec),y\n:ok sta state\n pla\n rts\n fin\n\n*-------------------------------\n*\n*  Sort objects in sort list into back-to-front order\n*  (Foremost object should be at bottom of list)\n*\n*-------------------------------\nsortlist\n\n:newpass\n lda #0\n sta switches ;no switches yet this pass\n\n ldx sortX ;start at bottom of list\n\n:loop cpx #1 ;at top of list?\n beq :attop ;yes--pass complated\n\n stx xsave\n\n jsr compare ;Is obj[X] in front of obj[X-1]?\n\n ldx xsave\n\n bcc :ok ;Yes--continue\n;No--switch objects\n lda sortX,x\n pha\n lda sortX-1,x\n sta sortX,x\n pla\n sta sortX-1,x ;switch [X] with [X-1]\n\n:ok dex\n bne :loop ;move up in list\n\n* At top of list--pass completed\n\n:attop\n lda switches ;Any switches this pass?\n bne :newpass ;Yes--do it again\n\n* No switches made--objects are in order\n\n:rts rts\n\n*-------------------------------\n*\n*  Compare object [xsave] with object [xsave-1]\n*\n*  If X is IN FRONT OF X-1, or if it doesn't matter, return cc;\n*  If X is BEHIND X-1, return cs (switch 'em).\n*\n*-------------------------------\ncompare\n lda sortX,x\n sta obj1 ;obj index [X]\n lda sortX-1,x\n sta obj2 ;obj index [X-1]\n\n ldx obj1\n ldy obj2\n\n lda objTYP,x\n cmp #TypeShad\n beq :xinfront ;enemy is always in front\n\n lda objY,x\n cmp objY,y\n beq :same\n bcc :xinfront\n bcs :yinfront\n\n:same\n:xinfront clc\n rts\n\n:yinfront sec\n rts\n\n*-------------------------------\n*\n*  Get initial state of object\n*\n*  In: BlueType, BlueSpec, Y\n*\n*  Return cs if it matters, else cc\n*\n*-------------------------------\nGETINITOBJ\n lda (BlueType),y\n and #idmask ;get objid\n\ngetinitobj1\n cmp #gate\n beq :okgate\n cmp #loose\n beq :okloose\n cmp #flask\n beq :okflask\n bne :skip ;if it isn't a gadget, leave it alone\n\n:okgate lda (BlueSpec),y ;1=gate up, 2=gate down, etc.\n tax\n lda initsettings-1,x\n sec\n rts\n\n:okloose lda #0 ;loose floor\n rts\n\n:okflask lda (BlueSpec),y\n asl\n asl\n asl\n asl\n asl ;5x\n sec\n rts\n\n:skip clc\n]rts rts\n\n*-------------------------------\nmetbufs3 jsr mbsub\n iny\nmetbufs2 jsr mbsub\n iny\nmbsub ora redbuf,y\n ora floorbuf,y\n ora halfbuf,y\n ora fredbuf,y\n ora wipebuf,y\n rts\n\n*-------------------------------\n lst\n ds 1\n usr $a9,3,$490,*-org\n lst off\n"
  },
  {
    "path": "04 Support/MakeDisk/S/FRAMEDEF.S",
    "content": "* framedef\nbof = $2800\n tr on ;TABS 15,20,40\n lst off\n lstdo off\n\n*-------------------------------\n dum bof\n\norg ds 1200\naltset1 ds 200\naltset2 ds 450\nswordtab ds 192\n\n dend\n\n*-------------------------------\n org org\nFdef\n\n*  Fimage, Fsword, Fdx, Fdy, Fcheck\n\n:1 db $01,0,1,0,$c0+4 ;run-4\n:2 db $02,0,1,0,$40+4 ;run-5\n:3 db $03,0,3,0,$40+7 ;run-6\n:4 db $04,0,4,0,$40+8 ;run-7\n:5 db $05,0,0,0,$c0+$20+6 ;run-8\n:6 db $06,0,0,0,$40+9 ;run-9\n:7 db $07,0,0,0,$40+10 ;run-10\n:8 db $08,0,0,0,$c0+5 ;run-11\n:9 db $09,0,0,0,$40+4 ;run-12\n:10 db $0a,0,0,0,$40+7 ;run-13\n:11 db $0b,0,0,0,$40+11 ;run-14\n:12 db $0c,0,0,0,$40+3 ;run-15\n:13 db $0d,0,0,0,$c0+3 ;run-16\n:14 db $0e,0,0,0,$40+7 ;run-17\n:15 db $0f,9,0,0,$40+3 ;stand\n:16 db $10,0,0,0,$c0+3 ;standjump-9\n:17 db $11,0,0,0,$40+4 ;standjump-10\n:18 db $12,0,0,0,$40+6 ;standjump-11\n:19 db $13,0,0,0,$40+8 ;standjump-12\n:20 db $14,0,0,0,$80+9 ;standjump-13\n:21 db $15,0,0,0,$00+11 ;standjump-14\n:22 db $16,0,0,0,$80+11 ;standjump-15\n:23 db $17,0,0,0,$00+17 ;standjump-16\n:24 db $18,0,0,0,$00+7 ;standjump-17\n:25 db $19,0,0,0,$00+5 ;standjump-18\n:26 db $1a,0,0,0,$c0+1 ;standjump-19\n:27 db $1b,0,0,0,$c0+6 ;standjump-20\n:28 db $1c,0,0,0,$40+3 ;standjump-21\n:29 db $1d,0,0,0,$40+8 ;standjump-22\n:30 db $1e,0,0,0,$40+2 ;standjump-23\n:31 db $1f,0,0,0,$40+2 ;standjump-24\n:32 db $20,0,0,0,$c0+2 ;standjump-25\n:33 db $21,0,0,0,$c0+2 ;standjump-26\n:34 db $22,0,0,0,$40+3 ;runjump-1\n:35 db $23,0,0,0,$40+8 ;runjump-2\n:36 db $24,0,0,0,$c0+14 ;runjump-3\n:37 db $25,0,0,0,$c0+1 ;runjump-4\n:38 db $26,0,0,0,$40+5 ;runjump-5\n:39 db $27,0,0,0,$80+14 ;runjump-6\n:40 db $28,0,0,0,$00+11 ;runjump-7\n:41 db $29,0,0,0,$80+11 ;runjump-8\n:42 db $2a,0,0,0,$80+10 ;runjump-9\n:43 db $2b,0,0,0,$00+1 ;runjump-10\n:44 db $2c,0,0,0,$c0+4 ;runjump-11\n:45 db $2d,0,0,0,$c0+3 ;turn-2\n:46 db $2e,0,0,0,$c0+3 ;turn-3\n:47 db $2f,0,0,0,$80+$20+5 ;turn-4\n:48 db $30,0,0,0,$80+$20+4 ;turn-5\n:49 db $31,0,0,0,$40+$20+6 ;turn-6\n:50 db $32,0,4,0,$40+$20+7 ;turn-7\n:51 db $33,0,3,0,$40+$20+6 ;turn-8\n:52 db $34,0,1,0,$40+4 ;turn-10\n:53 db $01,$40,0,0,$c0+2 ;runturn-8\n:54 db $02,$40,0,0,$40+1 ;runturn-9\n:55 db $03,$40,0,0,$40+2 ;runturn-10\n:56 db $04,$40,0,0,$00 ;runturn-11\n:57 db $05,$40,0,0,$00 ;runturn-12\n:58 db $06,$40,0,0,$80 ;runturn-13\n:59 db $07,$40,0,0,$00 ;runturn-14\n:60 db $08,$40,0,0,$80 ;runturn-15\n:61 db $09,$40,0,0,$00 ;runturn-16\n:62 db $0a,$40,0,0,$80 ;runturn-17\n:63 db $0b,$40,0,0,$00 ;runturn-18\n:64 db $0c,$40,0,0,$00 ;runturn-19\n:65 db $0d,$40,0,0,$80 ;runturn-20\n:66 db 0,0,0,0,0\n:67 db $11,$40,-2,0,$40+1 ;jumphang-2\n:68 db $12,$40,-2,0,$40+1 ;jumphang-3\n:69 db $13,$40,-1,0,$c0+2 ;jumphang-4\n:70 db $14,$40,-2,0,$40+2 ;jumphang-5\n:71 db $15,$40,-2,0,$40+1 ;jumphang-6\n:72 db $16,$40,-2,0,$40+1 ;jumphang-7\n:73 db $17,$40,-2,0,$40+1 ;jumphang-8\n:74 db $18,$40,-1,0,$00+7 ;jumphang-9\n:75 db $19,$40,-1,0,$00+5 ;jumphang-10\n:76 db $1a,$40,2,0,$00+7 ;jumphang-11\n:77 db $1b,$40,2,0,$00+7 ;jumphang-12\n:78 db $1c,$40,2,-3,$00 ;jumphang-13\n:79 db $1d,$40,2,-10,$00 ;jumphang-14\n:80 db $1e,$40,2,-11,$80 ;jumphang-15\n:81 db $1f,$40,3,-2,$40+3 ;hangdrop-4\n:82 db $20,$40,3,0,$c0+3 ;hangdrop-5\n:83 db $21,$40,3,0,$c0+3 ;hangdrop-6\n:84 db $22,$40,3,0,$40+$20+3 ;hangdrop-7\n:85 db $23,$40,4,0,$c0+$20+3 ;hangdrop-8\n:86 db $1d,0,0,0,$00  ;test w/foot\n:87 db $25,$40,7,-14,$80 ;jumphang-22\n:88 db $26,$40,7,-12,$80 ;jumphang-23\n:89 db $27,$40,4,-12,$00 ;jumphang-24\n:90 db $28,$40,3,-10,$80 ;jumphang-25\n:91 db $29,$40,2,-10,$80 ;jumphang-26\n:92 db $2a,$40,1,-10,$80 ;jumphang-27\n:93 db $2b,$40,0,-11,$00 ;jumphang-28\n:94 db $2c,$40,-1,-12,$00 ;jumphang-29\n:95 db $2d,$40,-1,-14,$00 ;jumphang-30\n:96 db $2e,$40,-1,-14,$00 ;jumphang-31\n:97 db $2f,$40,-1,-15,$80 ;jumphang-32\n:98 db $30,$40,-1,-15,$80 ;jumphang-33\n:99 db $31,$40,0,-15,$00 ;jumphang-34\n:100 db 0,0,0,0,0\n:101 db 0,0,0,0,0\n:102 db $32,$40,0,0,$c0+6 ;jumpfall-2\n:103 db $33,$40,0,0,$40+6 ;jumpfall-3\n:104 db $34,$40,0,0,$c0+5 ;jumpfall-4\n:105 db $35,$40,0,0,$40+5 ;jumpfall-5\n:106 db $36,$40,0,0,$c0+2 ;jumpfall-6\n:107 db $37,$40,0,0,$c0+4 ;jumpfall-7\n:108 db $38,$40,0,0,$c0+5 ;jumpfall-8\n:109 db $39,$40,0,0,$40+6 ;jumpfall-9\n:110 db $3a,$40,0,0,$40+7 ;jumpfall-10\n:111 db $3b,$40,0,0,$40+7 ;jumpfall-11\n:112 db $3c,$40,0,0,$40+9 ;jumpfall-12\n:113 db $3d,$40,0,0,$c0+8 ;jumpfall-13\n:114 db $3e,$40,0,0,$c0+9 ;jumpfall-14\n:115 db $3f,$40,0,0,$40+9 ;jumpfall-15\n:116 db $40,$40,0,0,$40+5 ;jumpfall-16\n:117 db $41,$40,2,0,$40+5 ;jumpfall-17\n:118 db $42,$40,2,0,$c0+5 ;jumpfall-18\n:119 db $43,$40,0,0,$c0+3 ;jumpfall-19\n:120 db 0,0,0,0,0\n:121 db $01,$80,0,0,$40+3 ;stepfwd-1\n:122 db $02,$80,0,0,$c0+4 ;stepfwd-2\n:123 db $03,$80,0,0,$c0+5 ;stepfwd-3\n:124 db $04,$80,0,0,$40+8 ;stepfwd-4\n:125 db $05,$80,0,0,$40+$20+12 ;stepfwd-5\n:126 db $06,$80,0,0,$c0+$20+15 ;stepfwd-6\n:127 db $07,$80,0,0,$40+$20+3 ;stepfwd-7\n:128 db $08,$80,0,0,$c0+3 ;stepfwd-8\n:129 db $09,$80,0,0,$40+3 ;stepfwd-9\n:130 db $0a,$80,0,0,$40+3 ;stepfwd-10\n:131 db $0b,$80,0,0,$40+4 ;stepfwd-11\n:132 db $0c,$80,0,0,$40+4 ;stepfwd-12\n:133 db $3e,$80,00,1,$c0+1 ;sheathe34\n:134 db $3f,$80,00,1,$c0+7 ;sheathe37\n:135 db $0d,$80,-5+5,51-63,$00+1 ;climbup-int1\n:136 db $0e,$80,-5+5,42-63,$00 ;climbup-int2\n:137 db $0f,$80,-4+5,37-63,$80 ;climbup-8\n:138 db $10,$80,-1+5,31-63,$80 ;climbup-10\n:139 db $11,$80,1+5,27-63,$80+1 ;climbup-14\n:140 db $12,$80,2+5,22-63,$80+2 ;climbup-16\n:141 db $13,$80,2,17,$40+2 ;climbup-22\n:142 db $14,$80,4,9,$c0+4 ;climbup-28\n:143 db $15,$80,4,5,$c0+9 ;climbup-30\n:144 db $16,$80,4,4,$c0+8 ;climbup-32\n:145 db $17,$80,5,0,$40+$20+9 ;climbup-34\n:146 db $18,$80,5,0,$c0+$20+9 ;climbup-35\n:147 db $19,$80,5,0,$c0+$20+8 ;climbup-36\n:148 db $1a,$80,5,0,$40+$20+9 ;climbup-37\n:149 db $1b,$80,5,0,$40+$20+9 ;climbup-38\n:150 db $8b,16,0,2,$80 ;missed block\n:151 db $81,26,0,2,$80\n:152 db $82,18,3,2,$00 ;guy4/rob20\n:153 db $83,22,7,2,$c0+4\n:154 db $84,21,10,2,$00 ;full ext.\n:155 db $85,23,7,2,$80 ;guy-7\n:156 db $86,25,4,2,$80 ;guy-8\n:157 db $87,24,0,2,$c0+14 ;guy-9\n:158 db $88,15,0,2,$c0+13 ;guy10/rob15 (ready)\n:159 db $89,20,3,2,$00 ;guy19/rob22\n:160 db $8a,31,3,2,$00 ;guy20/rob23\n:161 db $8b,16,0,2,$80 ;guy21/rob18 (blocking)\n:162 db $8c,17,0,2,$80 ;guy22/rob19 (block-to-strike)\n:163 db $8d,32,0,2,$00 ;guy-31 (advance)\n:164 db $8e,33,0,2,$80 ;guy-32\n:165 db $8f,34,2,2,$c0+3 ;guy-33\n:166 db $0f,0,0,0,$40+3 ;stand\n:167 db $91,19,7,2,$80 ;guy18/rob21 (blocked)\n:168 db $92,14,1,2,$80 ;pre-strike\n:169 db $93,27,0,2,$80 ;rob17 (begin block)\n:170 db $88,15,0,2,$c0+13 ;guy10/rob15 (ready)\n:171 db $88,15,0,2,$c0+13 ;guy10/rob15 (ready)\n:172 db $32,$40+43,0,0,$c0+6 ;jumpfall-2\n:173 db $33,$40+44,0,0,$40+6 ;jumpfall-3\n:174 db $34,$40+45,0,0,$c0+5 ;jumpfall-4\n:175 db $35,$40+46,0,0,$40+5 ;jumpfall-5\n:176 db $34,$40,0,0,$c0+5\n:177 db $0f,$40,0,3,$80+10 ;impaled\n:178 db $0e,$40,4,3,$80+7 ;halves\n:179 db $a8,0,0,1,$40+4 ;collapse15\n:180 db $a9,0,0,1,$40+4 ;collapse16\n:181 db $aa,0,0,1,$40+4 ;collapse17\n:182 db $ab,0,0,1,$40+7 ;collapse18\n:183 db $ac,0,0,7,$40+11 ;collapse19\n:184 db 0,0,0,0,0\n:185 db $10,$40,4,7,$40+9 ;dead\n:186 db $44,$40,0,0,$40+4 ;mouse-1\n:187 db $45,$40,0,0,$40+4 ;mouse-2\n:188 db $46,$40,0,2,$40+4 ;mouse crouch\n:189 db 0,0,0,0,0\n:190 db 0,0,0,0,0\n:191 db $94,0,0,0,$00 ;drink4\n:192 db $95,0,0,1,$00 ;drink5\n:193 db $96,0,0,0,$80 ;drink6\n:194 db $97,0,0,0,$00 ;drink7\n:195 db $98,0,-1,0,$00 ;drink8\n:196 db $99,0,-1,0,$00 ;drink9\n:197 db $9a,0,-1,0,$00 ;drink10\n:198 db $9b,0,-4,0,$00 ;drink11\n:199 db $9c,0,-4,0,$80 ;drink12\n:200 db $9d,0,-4,0,$00 ;drink13\n:201 db $9e,0,-4,0,$00 ;drink14\n:202 db $9f,0,-4,0,$00 ;drink15\n:203 db $a0,0,-4,0,$00 ;drink16\n:204 db $a1,0,-5,0,$00 ;drink17\n:205 db $a2,0,-5,0,$00 ;drink18\n:206 db $a3,0,0,0,0 ;unused\n:207 db $a4,0,0,1,$40+6 ;draw5\n:208 db $a5,0,0,1,$c0+6 ;draw6\n:209 db $a6,0,0,1,$c0+8 ;draw7\n:210 db $a7,0,0,1,$40+10 ;draw8\n:211 db 0,0,0,0,$00\n:212 db 0,0,0,0,$00\n:213 db 0,0,0,0,$00\n:214 db 0,0,0,0,$00\n:215 db 0,0,0,0,$00\n:216 db 0,0,0,0,$00\n:217 db $35,0,0,0,$80 ;climbst2\n:218 db $36,0,0,0,$00 ;climbst3\n:219 db $37,0,0,0,$00 ;climbst4\n:220 db $38,0,0,0,$00 ;climbst5\n:221 db $39,0,0,0,$80 ;climbst6\n:222 db $3a,0,0,0,$00 ;climbst7\n:223 db $3b,0,0,0,$00 ;climbst8\n:224 db $3c,0,0,0,$00 ;climbst9\n:225 db $3d,0,0,0,$80 ;climbst10\n:226 db $3e,0,0,0,$00 ;climbst11\n:227 db $3f,0,0,0,$80 ;climbst12\n:228 db $40,0,0,0,$00 ;climbst13\n:229 db $32,$80+35,1,1,$c0+3 ;sheathe22\n:230 db $33,$80+36,0,1,$40+9 ;sheathe23\n:231 db $34,$80+37,0,1,$c0+3 ;sheathe24\n:232 db $35,$80+38,0,1,$40+9 ;sheathe25\n:233 db $36,$80+39,0,1,$c0+3 ;sheathe26\n:234 db $37,$80+40,1,1,$40+9 ;sheathe27\n:235 db $38,$80+41,1,1,$40+3 ;sheathe28\n:236 db $39,$80+42,1,1,$c0+9 ;sheathe29\n:237 db $3a,$80,4,1,$c0+6 ;sheathe30\n:238 db $3b,$80,3,1,$c0+10 ;sheathe31\n:239 db $3c,$80,1,1,$40+3 ;sheathe32\n:240 db $3d,$80,1,1,$c0+8 ;sheathe33 (-->133)\n\n*-------------------------------\n*\n*  Alternate character set 1 (chtable4)\n*\n*  200 bytes allocated -- 40 frames (150-189)\n*\n*  Frame def list shows kid, sword in RIGHT hand\n*  Altset1 shows enemy, sword in LEFT hand (to be mirrored)\n*  (Image tables always show character facing LEFT)\n*\n*-------------------------------\n ds altset1-*\n\nALTSET1\n\n:150 db $0b,$c0+13,2,1,$00 ;missed block\n:151 db $01,$c0+1,3,1,$00 ;guy-3\n:152 db $02,$c0+2,4,1,$00 ;guy-4\n:153 db $03,$c0+3,7,1,$40+4 ;guy-5\n:154 db $04,$c0+4,10,1,$00 ;guy-6 (full ext)\n:155 db $05,$c0+5,7,1,$80 ;guy-7\n:156 db $06,$c0+6,4,1,$80 ;guy-8\n:157 db $07,$c0+7,0,1,$80 ;guy-9\n:158 db $08,$c0+8,0,1,$c0+13 ;guy-10 (ready)\n:159 db $09,$c0+11,7,1,$80 ;guy-19\n:160 db $0a,$c0+12,3,1,$00 ;guy-20\n:161 db $0b,$c0+13,2,1,$00 ;guy-21 (blocking)\n:162 db $0c,$c0,2,1,$00 ;guy-22\n:163 db $0d,$c0+28,0,1,$00 ;guy-31 (advance)\n:164 db $0e,$c0+29,0,1,$80 ;guy-32\n:165 db $0f,$c0+30,2,1,$c0+3 ;guy-33\n:166 db $10,$c0+9,-1,1,$40+8 ;alertstand\n:167 db $11,$c0+10,7,1,$80 ;guy-18 (blocked)\n:168 db $12,$c0+14,3,1,$80 ;guy-15\n:169 db $08,$c0+8,0,1,$80 ;?? (ready-->block)\n:170 db $13,$c0+8,0,1,$c0+13 ;guy-11/12 (ready)\n:171 db $14,$c0+8,0,1,$c0+13 ;guy-13/14 (ready)\n:172 db $15,$c0+47,0,0,$c0+6 ;jumpfall-2 (stabbed)\n:173 db $16,$c0+48,0,0,$40+6 ;jumpfall-3\n:174 db $17,$c0+49,0,0,$c0+5 ;jumpfall-4\n:175 db $17,$c0+49,0,0,$c0+5 ;for jumpfall-5\n:176 db $17,$c0+49,0,0,$c0+5 ;for jumpfall-6\n:177 db $19,$c0,0,3,$80+10 ;impaled\n:178 db $1a,$c0,4,4,$80+7 ;halves\n:179 db $1b,$c0,-2,1,$40+4 ;collapse15\n:180 db $1c,$c0,-2,1,$40+4 ;collapse16\n:181 db $1d,$c0,-2,1,$40+4 ;collapse17\n:182 db $1e,$c0,-2,2,$40+7 ;collapse18\n:183 db $1f,$c0,-2,2,$40+10 ;collapse19\n:184 db 0,0,0,0,0\n:185 db $20,$c0,3,4,$c0+9 ;dead\n:186 db 0,0,0,0,0\n:187 db 0,0,0,0,0\n:188 db 0,0,0,0,0\n:189 db 0,0,0,0,0\n\n*-------------------------------\n*\n*  Alternate character set 2 (chtable6)\n*\n*  (450 bytes allocated -- 90 frames)\n*\n*-------------------------------\n ds altset2-*\n\nALTSET2\n\n:1 db $8a,$40,0,0,$00 ;pslump-1\n:2 db $9a,$40,0,0,$80 ;pturn-4\n:3 db $9b,$40,0,0,$80 ;pturn-5\n:4 db $9c,$40,0,0,$80 ;pturn-6\n:5 db $9d,$40,-1,0,$00 ;pturn-7\n:6 db $9e,$40,2,0,$80 ;pturn-8\n:7 db $9f,$40,2,0,$00 ;pturn-9\n:8 db $a0,$40,0,0,$80 ;pturn-10\n:9 db $a1,$40,1,0,$80 ;pturn-11\n:10 db $a2,$40,2,0,$80 ;unused\n:11 db $99,$40,0,0,$80 ;pturn-15 (stand)\n:12 db $a3,$40,0,0,$80 ;pback-3\n:13 db $a4,$40,0,0,$00 ;pback-5\n:14 db $a5,$40,0,0,$80 ;pback-7\n:15 db $a6,$40,0,0,$80 ;pback-9\n:16 db $a7,$40,0,0,$80 ;pback-11\n:17 db $a8,$40,0,0,$00 ;pback-13 (stand)\n:18 db $8b,$40,0,0,$00 ;pslump-1\n:19 db $a9,$40,0,0,$00 ;plie\n:20 db $ad,$40,0,0,$00 ;embrace-1\n:21 db $ae,$40,0,0,$00 ;embrace-2\n:22 db $af,$40,0,0,$80 ;embrace-3\n:23 db $b0,$40,0,0,$00 ;embrace-4\n:24 db $b1,$40,0,0,$80 ;embrace-5\n:25 db $b2,$40,0,0,$80 ;embrace-6\n:26 db $b3,$40,0,0,$00 ;embrace-7\n:27 db $b4,$40,0,0,$00 ;embrace-8\n:28 db $b5,$40,0,0,$00 ;embrace-9\n:29 db $b6,$40,0,0,$00 ;embrace-10\n:30 db $b7,$40,0,0,$00 ;embrace-11\n:31 db $b8,$40,0,0,$00 ;embrace-12\n:32 db $b9,$40,0,0,$00 ;embrace-13\n:33 db $ba,$40,0,0,$00 ;embrace-14\n:34 db $bb,$40,0,0,$00 ;prise-1\n:35 db $bc,$40,0,0,$00 ;prise-2\n:36 db $bd,$40,0,0,$00 ;prise-3\n:37 db $be,$40,0,0,$00 ;prise-4\n:38 db $bf,$40,0,0,$80 ;prise-5\n:39 db $bf,$40,0,0,$80 ;prise-6\n:40 db $c1,$40,1,0,$00 ;prise-7\n:41 db $c2,$40,-1,0,$00 ;prise-8\n:42 db $c3,$40,2,0,$00 ;prise-9\n:43 db $c4,$40,1,0,$80 ;prise-10\n:44 db $c5,$40,0,0,$80 ;prise-11\n:45 db $c6,$40,0,0,$80 ;prise-12\n:46 db $c7,$40,0,0,$80 ;prise-13\n:47 db $c8,$40,-1,0,$00 ;prise-14\n:48 db $ca,$40,0,0,$80 ;vwalk-8\n:49 db $cb,$40,0,0,$80 ;vwalk-9\n:50 db $cc,$40,0,0,$80 ;vwalk-10\n:51 db $cd,$40,0,0,$00 ;vwalk-11\n:52 db $ce,$40,0,0,$00 ;vwalk-12\n:53 db $cf,$40,0,0,$80 ;vwalk-13\n:54 db $d0,$40,0,0,$80 ;vstand-3\n:55 db $d1,$40,0,0,$80 ;vstand-2\n:56 db $d2,$40,0,0,$80 ;vstand-1\n:57 db $d3,$40,0,0,$80 ;vturn-5\n:58 db $d4,$40,0,0,$80 ;vturn-6\n:59 db $d5,$40,0,0,$80 ;vturn-7\n:60 db $d6,$40,0,0,$80 ;vturn-8\n:61 db $d7,$40,0,0,$00 ;vturn-9\n:62 db $d8,$40,0,0,$80 ;vturn-10\n:63 db $d9,$40,0,0,$00 ;vturn-11\n:64 db $da,$40,0,0,$00 ;vturn-12\n:65 db $db,$40,0,0,$80 ;vturn-13\n:66 db $dc,$40,0,0,$00 ;vturn-14\n:67 db $dd,$40,3,0,$00 ;vcast-2\n:68 db $de,$40,3,0,$00 ;vcast-3\n:69 db $df,$40,3,0,$00 ;vcast-4\n:70 db $e0,$40,2,0,$00 ;vcast-5\n:71 db $e1,$40,3,0,$80 ;vcast-6\n:72 db $e2,$40,5,0,$00 ;vcast-7\n:73 db $e3,$40,5,0,$00 ;vcast-8\n:74 db $e4,$40,1,0,$80 ;vcast-9\n:75 db $e5,$40,2,0,$80 ;vcast-10\n:76 db $e6,$40,2,0,$80 ;vcast-11 (held)\n:77 db $e7,$40,1,0,$80 ;vcast-13\n:78 db $81,$80,1,0,$00 ;vcast-14\n:79 db $82,$80,2,0,$00 ;vcast-15\n:80 db $83,$80,3,0,$00 ;vcast-16\n:81 db $84,$80,3,0,$00 ;vcast-17\n:82 db $85,$80,0,0,$80 ;vcast-18\n:83 db $86,$80,2,0,$80 ;vcast-10a\n:84 db $87,$80,2,0,$80 ;vcast-10b\n:85 db $88,$80,1,0,$00 ;vcast-1\n\n\n*-------------------------------\n*\n*  S W O R D   T A B L E\n*\n*  (192 bytes allocated -- 64 swords)\n*\n*  Sword images are taken from chtable3\n*\n*-------------------------------\n ds swordtab-*\n\nSWORDTAB\n\n* (Image, DX, DY)\n\n:1 db $1d,0,-9\n:2 db $22,-9,-29\n:3 db $1e,7,-25\n:4 db $1f,17,-26\n:5 db $23,7,-14\n:6 db $24,0,-5\n:7 db $20,17,-16\n:8 db $21,16,-19\n:9 db $4b,12,-9 ;alertstand\n:10 db $26,13,-34\n:11 db $27,7,-25\n:12 db $28,10,-16\n:13 db $29,10,-11\n:14 db $2a,22,-21\n:15 db $2b,28,-23\n:16 db $2c,13,-35\n:17 db $2d,0,-38\n:18 db $2e,0,-29\n:19 db $2f,21,-19\n:20 db $30,14,-23\n:21 db $31,21,-22\n:22 db $31,22,-23\n:23 db $2f,7,-13\n:24 db $2f,15,-18 ;$20,17,-19 for flash\n:25 db $24,0,-8\n:26 db $1e,7,-27\n:27 db $48,14,-28\n:28 db $26,7,-27\n:29 db $21,6,-23\n:30 db $21,9,-21\n:31 db $28,11,-18\n:32 db $2b,24,-23\n:33 db $2b,19,-23\n:34 db $2b,21,-23\n;sheathing\n:35 db $40,7,-32\n:36 db $41,14,-32\n:37 db $42,14,-31\n:38 db $43,14,-29\n:39 db $44,28,-28\n:40 db $45,28,-28\n:41 db $46,21,-25\n:42 db $47,14,-22\n\n:43 db 0,14,-25 ;43-46: kid stabbed\n:44 db 0,21,-25\n:45 db $4a,0,-16\n:46 db $26,8,-37\n:47 db $4c,14,-24 ;47-50: enemy stabbed\n:48 db $4d,14,-24\n:49 db $4e,7,-14\n:50 db $26,8,-37\n\n*-------------------------------\n lst\n ds 1\n usr $a9,15,$00,*-org\n lst off\n"
  },
  {
    "path": "04 Support/MakeDisk/S/GAMEBG.S",
    "content": "* gamebg\nThreeFive = 1\nEditorDisk = 0\norg = $4c00\n tr on\n lst off\n lstdo off\n*-------------------------------\n*\n*  PRINCE OF PERSIA\n*  Copyright 1989 Jordan Mechner\n*\n*-------------------------------\n org org\n\n jmp UPDATEMETERS\n jmp DRAWKIDMETER\n jmp DRAWSWORD\n jmp DRAWKID\n jmp DRAWSHAD\n\n jmp SETUPFLAME\n jmp CONTINUEMSG\n jmp ADDCHAROBJ\n jmp SETOBJINDX\n jmp PRINTLEVEL\n\n jmp DRAWOPPMETER\n jmp FLIPDISKMSG\n jmp TIMELEFTMSG\n jmp DRAWGUARD\n jmp DRAWGUARD\n\n jmp SETUPFLASK\n jmp SETUPCOMIX\n jmp PSETUPFLAME\n jmp DRAWPOST\n jmp DRAWGLASS\n\n jmp INITLAY\n jmp TWINKLE\n jmp FLOW\n jmp PMASK\n jmp YELLOW\n\n jmp SETRECHECK0\n jmp RECHECKYEL\n ds 3\n ds 3\n ds 3\n\n*-------------------------------\n lst\n put eq\n lst\n put gameeq\n lst off\n\n*-------------------------------\n*\n* 2nd level copy protection\n* signature check routine\n*\n*-------------------------------\n do ThreeFive\nYELLOW lda #$80\n sta yellowflag\n rts\n\n else\n put ryellow1\n fin\n\n*-------------------------------\n lst\n put movedata\n lst off\n\n*-------------------------------\n dum locals\n\nxsave ds 1\naddr ds 2\ntemp ds 1\n\n dend\n\ntempsave ds $10\n\n*-------------------------------\n* Strength meters\n\nKidStrX db 00,01,02,03,04,05,06,08,09,10,11,12\nKidStrOFF db 00,01,02,03,04,05,06,00,01,02,03,04\n\nOppStrX db 39,38,37,36,35,34,32,31,30,29,28,27\nOppStrOFF db 05,04,03,02,01,00,06,05,04,03,02,01\n\nbullet = $88 ;in bgtable2\nblank = $8c\nbline hex 89,8a,8b\n\n*-------------------------------\n* Post in Princess's room\n\npostx = 31\nposty = 152\npostimg = $c ;chtable6\n\n*-------------------------------\n* Stars outside Princess's window\n\nstarx = 2\nstary hex 62,65,6d,72\nstari hex 2a,2b,2b,2a ;chtable6\n\n*-------------------------------\n* Hourglass\n\nglassx = 19\nglassy = 151\nglassimg hex 15,0d,0e,0f,10,11,12,13,14 ;chtable6\nsandht db 0,1,2,3,4,5,6,7\n\nflowx = glassx+1\nflowy = glassy-2\nflowimg hex 16,17,18 ;chtable6\n\n*-------------------------------\n* Masks for Princess's face & hair\n\npmaskdx hex 00,00\npmaskdy db -4,-33\npmaski hex 2c,22\n\n*-------------------------------\n* Comix\n\nstarimage = $41\nstartable = 0 ;chtable1\n\n*-------------------------------\n* Torch animation frames\n*               0  1  2  3  4  5  6  7  8  9 10 11\n*              12 13 14 15 16 17\n\ntorchflame hex 52,53,54,55,56,61,62,63,64,52,54,56\n hex 63,61,55,53,64,62\n\nptorchflame db 1,2,3,4,5,6,7,8,9,3,5,7,1,4,9,2,8,6\n\n*-------------------------------\n* Bubbling flask frames\n*               0  1  2  3  4  5  6  7  8  9 10 11\n\nbubble hex b2,af,b0,b1,b0,af,b1,b0,af\n\n*-------------------------------\n* Message data: YCO, XCO, OFFSET, IMAGE\n\nmy = 90\nlowmy = 153\nhiconty = 73\nlowconty = 168\n\ncontbox db hiconty,13,0,$7c ;Press button to continue\nmsgbox db my,15,0,$7b ;Empty message box\nlevelmsg db my-5,16,3,$7a ;\"Level\"\nflipbox db my-1,13,0,$7e ;Turn disk over\ntimeleft db my,11,0,$7d ;Minutes left\nseconds db my-5,14,0,$7f ;\"Seconds\"\n\n*-------------------------------\n* Numbers (0-12)\n\ndigit1 hex 00,00,00,00,00,00,00,00,00,00\n hex 71,71,71\n\ndigit2 hex 70,71,72,73,74,75,76,77,78,79\n hex 70,71,72\n\n*-------------------------------\n* Print \"XX Minutes Left\"\n*-------------------------------\n]rts rts\n\nTIMELEFTMSG\n lda #timeleft\n ldx #>timeleft\n jsr setupimage\n\n lda MinLeft\n cmp #2\n bcs :ok\n lda KidAction\n cmp #3\n beq :ok\n cmp #4\n beq :ok ;falling\n lda KidBlockY\n cmp #1\n bne :ok\n lda #lowmy\n sta YCO ;keep msg box out of kid's way\n:ok jsr superim1\n\n lda YCO\n sec\n sbc #5\n sta YCO\n\n lda XCO\n clc\n adc #1\n sta XCO\n lda #0\n sta OPACITY\n\n lda #ora\n sta OPACITY\n\n jsr getminleft\n\n lda MinLeft ;BCD byte (e.g., $55 = 55 minutes)\n cmp #2\n bcs :1\n lda SecLeft\n:1 sta temp\n lsr\n lsr\n lsr\n lsr\n beq :skip1st\n tax\n lda digit2,x ;1st digit\n sta IMAGE\n\n jsr addmsg\n\n:skip1st lda XCO\n clc\n adc #1\n sta XCO\n\n lda temp\n and #$f\n tax\n lda digit2,x ;2nd digit\n sta IMAGE\n\n jsr addmsg\n\n* Minutes or seconds?\n\n lda MinLeft\n cmp #2\n bcs ]rts\n\n lda YCO\n pha\n lda #seconds\n ldx #>seconds\n jsr setupimage\n pla\n sta YCO\n lda #sta\n sta OPACITY\n jmp addmsg ;replace \"minutes\" with \"seconds\"\n\n*-------------------------------\n* Print \"Level XX\"\n*-------------------------------\n]rts rts\n\nPRINTLEVEL\n lda #msgbox\n ldx #>msgbox\n jsr superimage\n\n lda #levelmsg\n ldx #>levelmsg\n jsr setupimage\n\n jsr getlevelno\n cpx #10\n bcc :1\n lda #0\n sta OFFSET\n:1\n lda #ora\n sta OPACITY\n jsr addmsg\n\n lda XCO\n clc\n adc #6\n sta XCO\n\n jsr getlevelno ;X = level # (0-12)\n lda digit1,x ;1st digit\n beq :skip1st\n sta IMAGE\n\n lda #ora\n sta OPACITY\n jsr addmsg\n\n lda XCO\n clc\n adc #1\n sta XCO\n\n jsr getlevelno\n:skip1st lda digit2,x ;2nd digit\n sta IMAGE\n\n lda #ora\n sta OPACITY\n jmp addmsg\n\n*-------------------------------\ngetlevelno\n ldx level\n cpx #13\n bcc :ok\n ldx #12\n:ok\n]rts rts\n\n*-------------------------------\n* Superimpose \"Press button to continue\" message\n*-------------------------------\nCONTINUEMSG\n lda #contbox\n ldx #>contbox\n jsr setupimage\n\n lda KidBlockX\n and #1\n bne :1\n lda #lowconty\n sta YCO\n:1 jmp superim1\n\n*-------------------------------\n* Superimpose \"Turn disk over\" message\n*-------------------------------\nFLIPDISKMSG\n lda #flipbox\n ldx #>flipbox\n jmp superimage\n\n*-------------------------------\n* Superimpose image (using layrsave)\n*-------------------------------\nsuperimage\n jsr setupimage\nsuperim1\n lda #sta.$40\n sta OPACITY\n jmp addmsg\n\n*-------------------------------\n* Set up image\n*\n* In: A-X = image data addr\n* Out: XCO, YCO, IMAGE\n*-------------------------------\nsetupimage\n sta addr\n stx addr+1\n\n ldy #0\n lda (addr),y\n sta YCO\n iny\n lda (addr),y\n sta XCO\n iny\n lda (addr),y\n sta OFFSET\n iny\n lda (addr),y\n sta IMAGE\n]rts\n:rts rts\n\n*-------------------------------\n* Draw Kid\n*-------------------------------\nDRAWKID\n lda backtolife\n beq :2\n lda PAGE\n beq ]rts ;flash when coming back to life\n\n:2 lda mergetimer\n bmi :1\n and #1\n beq :1\n jmp DrawEored ;flash between kid & shadowman\n\n:1 jmp DrawNormal\n\n*-------------------------------\n* Draw Sword\n*-------------------------------\nDRAWSWORD\n jmp DrawNormal\n\n*-------------------------------\n* Draw Shadowman\n*-------------------------------\nDRAWSHAD\n jmp DrawEored\n\n*-------------------------------\n* Draw Guard\n*-------------------------------\nDRAWGUARD\n do EditorDisk\n lda #EditorDisk\n cmp #2\n beq DrawNormal\n fin\n\n lda GuardColor ;set by \"ADDGUARD\" in AUTO\n beq DrawNormal\n bne DrawShifted\n\n*-------------------------------\nDrawNormal\n lda #mask\n sta OPACITY\n\n lda #UseLayrsave.$80\n jmp addmid\n\n]rts rts\n\n*-------------------------------\nDrawShifted\n lda #1\n jsr chgoffset\n\n lda #mask\n sta OPACITY\n\n lda #UseLayrsave.$80\n jmp addmid\n\n*-------------------------------\nDrawEored\n lda #eor\n sta OPACITY\n\n lda #UseLayrsave.$80\n jmp addmid\n\n*-------------------------------\nchgoffset\n clc\n adc OFFSET\n cmp #7\n bcc :1\n\n inc XCO\n sec\n sbc #7\n\n:1 sta OFFSET\n rts\n\n*-------------------------------\n*\n* Update strength meters\n*\n*-------------------------------\nUPDATEMETERS\n lda redkidmeter\n beq :1\n\n jsr DrawKidMeter\n\n:1 lda redoppmeter\n beq ]rts\n\n jmp DrawOppMeter\n]rts rts\n\n*-------------------------------\n*\n* Draw kid's strength meter at lower left\n*\n*-------------------------------\nDRAWKIDMETER\n lda inbuilder\n bne ]rts\n\n lda #191\n sta YCO\n lda #sta\n sta OPACITY\n\n ldx #0\n stx xsave ;# of bullets drawn so far\n\n:loop lda KidStrength\n sec\n sbc xsave ;# of bullets left to draw\n beq :darkpart\n cmp #4\n bcs :draw3\n cmp #3\n bcs :draw2\n cmp #2\n bcc :drawlast\n;Draw 1 bullet\n:draw1 ldy #1\n bne :drline\n ;Draw 2 bullets\n:draw2 ldy #2\n bne :drline\n;Draw 3 bullets\n:draw3 ldy #3\n bne :drline\n\n:drawlast lda KidStrength\n cmp #2\n bcs :steady\n lda PAGE\n beq :skip ;flashes when down to 1\n:steady lda #bullet\n ldy #1\n jsr :draw\n:skip jmp :darkpart\n\n* Draw line of 1-3 bullets\n\n:drline lda bline-1,y ;image #\n jsr :draw\n jmp :loop\n\n:draw sta IMAGE\n ldx xsave\n tya\n clc\n adc xsave\n sta xsave\n\n* In: IMAGE; x = unit # (0 = leftmost)\n\n:drawimg lda KidStrX,x\n sta XCO\n lda KidStrOFF,x\n sta OFFSET\n jmp addmsg\n\n* Draw blanks to limit of MaxKidStr\n\n:darkpart\n lda #and\n sta OPACITY\n lda #blank\n sta IMAGE\n:dloop ldx xsave\n cpx MaxKidStr\n bcs ]rts\n jsr :drawimg\n inc xsave\n bne :dloop\n]rts rts\n\n*-------------------------------\n*\n* Draw opp's strength meter at lower right\n*\n*-------------------------------\nDRAWOPPMETER\n lda inbuilder\n bne ]rts\n\n lda OppStrength\n beq ]rts\n\n lda ShadID\n cmp #24 ;mouse\n beq ]rts\n cmp #4 ;skel\n beq ]rts\n cmp #1 ;shadow\n bne :1\n lda level\n cmp #12\n bne ]rts ;shad strength shows only on level 12\n:1\n lda #191\n sta YCO\n lda #sta.$80 ;mirror\n sta OPACITY\n\n ldx #0\n stx xsave ;# of bullets drawn so far\n\n:loop lda OppStrength\n sec\n sbc xsave ;# of bullets left to draw\n beq :darkpart\n cmp #4\n bcs :draw3\n cmp #3\n bcs :draw2\n cmp #2\n bcc :drawlast\n;Draw 1 bullet\n:draw1 ldy #1\n bne :drline\n ;Draw 2 bullets\n:draw2 ldy #2\n bne :drline\n;Draw 3 bullets\n:draw3 ldy #3\n bne :drline\n\n:drawlast lda OppStrength\n cmp #2\n bcs :steady\n lda PAGE\n beq :darkpart ;flashes when down to 1\n:steady lda #bullet\n ldy #1\n jmp :draw\n\n* Draw line of 1-3 bullets\n\n:drline lda bline-1,y ;image #\n jsr :draw\n jmp :loop\n\n:draw sta IMAGE\n ldx xsave\n tya\n clc\n adc xsave\n sta xsave\n\n:drawimg lda OppStrX,x\n sta XCO\n lda OppStrOFF,x\n sta OFFSET\n jmp addmsg\n\n:darkpart\n lda #and.$80\n sta OPACITY\n lda #blank\n sta IMAGE\n ldx xsave\n jmp :drawimg\n\n*-------------------------------\n*\n* Set up to draw bubbling flask\n*\n* In/out: same as SETUPFLAME\n*\n*-------------------------------\nEmptyPot = 0\nRefreshPot = %00100000\nBoostPot = %01000000\nMystPot = %01100000\n\nboffset = 2\n\nSETUPFLASK\n lda #boffset\n sta OFFSET\n\n txa\n and #%11100000\n cmp #EmptyPot\n beq :0\n cmp #BoostPot\n beq :tall ;special flask (taller)\n bcc :cont\n\n inc OFFSET ;mystery potion (blue)\n\n:tall lda YCO\n sec\n sbc #4\n sta YCO\n\n:cont txa\n and #%00011111\n tax\n cpx #bubbLast+1\n bcc :ok\n ldx #0\n:ok lda bubble,x\n sta IMAGE\n\n inc XCO\n inc XCO\n\n lda YCO\n sec\n sbc #14\n sta YCO\n\n lda #sta\n sta OPACITY\n\n lda #bgtable2\n sta TABLE\n lda #>bgtable2\n sta TABLE+1\n\n]rts rts\n\n:0 ldx #0\n beq :ok\n\n*-------------------------------\n*\n* Setup to draw flame\n*\n* In: XCO = blockxco\n*     YCO = Ay\n*     X   = spreced\n*\n* Out: ready to call ADDBACK (or FASTLAY)\n*\n*-------------------------------\nSETUPFLAME\n cpx #torchLast+1\n bcs ]rts\n\n lda torchflame,x\n sta IMAGE\n\n inc XCO\n\n lda YCO\n sec\n sbc #43\n sta YCO\n\n lda #sta\n sta OPACITY\n\n lda #bgtable1\n sta TABLE\n lda #>bgtable1\n sta TABLE+1\n\n]rts rts\n\n*-------------------------------\n*\n* Setup to draw flame (Princess's room)\n*\n* In: XCO, YCO; X = frame #\n* Out: Ready to call ADDMID or LAY\n*\n*-------------------------------\nPSETUPFLAME\n cpx #torchLast+1\n bcs ]rts\n\n lda ptorchflame,x\n sta IMAGE\n\n lda #sta\n sta OPACITY\n\n jsr initlay\n\n]setch6 lda #chtable6\n sta TABLE\n lda #>chtable6\n sta TABLE+1\n\n]rts rts\n\n*-------------------------------\n*\n* Twinkle one of the stars outside Princess's window\n* (Update it directly on both screens)\n*\n* In: X = star # (0-3)\n*\n*-------------------------------\nTWINKLE\n lda #starx\n sta XCO\n lda stary,x\n sta YCO\n lda stari,x\n sta IMAGE\n lda #eor\n sta OPACITY\n jsr ]setch6\n jsr fastlay ;<--DIRECT HIRES CALL\n lda PAGE\n eor #$20\n sta PAGE ;& on other page\n jsr fastlay\n lda PAGE\n eor #$20\n sta PAGE\n rts\n\n*-------------------------------\n*\n* Draw big white post in Princess's room\n*\n*-------------------------------\nDRAWPOST\n lda #postx\n sta XCO\n lda #posty\n sta YCO\n lda #postimg\n sta IMAGE\n lda #ora\n sta OPACITY\n jsr ]setch6\n jmp addfore\n\n*-------------------------------\n*\n* Draw hourglass in Princess's room\n*\n* In: X = glass state (0-8, 0 = full)\n*\n*-------------------------------\nDRAWGLASS\n lda #glassx\n sta XCO\n lda #glassy\n sta YCO\n lda glassimg,x\n sta IMAGE\n lda #sta\n sta OPACITY\n jsr ]setch6\n jmp addback\n\n*-------------------------------\n*\n* Mask princess's face & hair for certain CharPosns\n*\n* (Called after ADDCHAROBJ)\n*\n*-------------------------------\nPMASK\n ldx CharPosn\n cpx #19 ;plie\n bne :1\n ldx #0\n bpl :mask\n:1 cpx #1 ;pslump-1\n beq :m1\n cpx #18 ;pslump-2\n bne :2\n:m1 ldx #1\n bpl :mask\n:2\n\n]rts rts\n\n:mask\n lda FCharY\n clc\n adc pmaskdy,x\n sta YCO\n\n lda XCO\n clc\n adc pmaskdx,x\n sta XCO\n\n lda pmaski,x\n sta IMAGE\n\n lda #5 ;chtable6\n sta TABLE\n\n lda #and\n sta OPACITY\n lda #UseLayrsave.$80\n jmp addmid\n\n*-------------------------------\n* If failed copy prot check due to disk not in drive, recheck\n* In: a = 0 (Call after setrecheck0)\n*-------------------------------\nRECHECKYEL\n sta tempblockx\n sta tempblocky\n jsr indexblock ;set y = 0\n lda (locals),y ;All of this just to hide \"lda recheck0\"!\n beq ]rts\n ldx #5\n jsr yellow\n lda #$ff\n rts\n\n*-------------------------------\n*\n* Draw sand flowing through hourglass\n*\n* In: X = frame # (0-3)\n*     Y = hourglass state (0-8)\n*\n*-------------------------------\nFLOW\n cpy #8\n bcs ]rts ;glass is empty\n jsr initlay\n lda #glassy\n sec\n sbc sandht,y\n sta BOTCUT\n lda flowimg,x\n sta IMAGE\n lda #flowx\n sta XCO\n lda #0\n sta OFFSET\n lda #flowy\n sta YCO\n lda #sta\n sta OPACITY\n jsr ]setch6\n jmp lay ;<---DIRECT HIRES CALL\n\n*-------------------------------\n* Save/restore FCharVars\n\nsaveFChar\n ldx #$f\n:loop lda FCharVars,x\n sta tempsave,x\n dex\n bpl :loop\n rts\n\nrestoreFChar\n ldx #$f\n:loop lda tempsave,x\n sta FCharVars,x\n dex\n bpl :loop\n]rts rts\n\n*-------------------------------\n*\n* Draw \"comix\" star\n*\n* In: Char data\n*\n*-------------------------------\nSETUPCOMIX\n jsr saveFChar\n jsr :sub\n jmp restoreFChar\n\n:sub lda #$ff\n sta FCharIndex\n\n* Get y-coord\n\n lda CharPosn\n cmp #185 ;dead\n beq :low\n cmp #177 ;impaled\n beq :imp\n cmp #106\n bcc :80\n cmp #111 ;crouching\n bcc :low\n:80 cmp #178 ;halved\n beq ]rts\n\n lda #-15\n ldx CharID\n beq :3\n lda #-11 ;kid strikes lower than opponent\n:3 clc\n adc FCharY\n sta FCharY\n jmp :8\n\n:low lda #4\n clc\n adc FCharY\n sta FCharY\n jmp :8\n\n* Get x-coord\n\n:imp lda #-5 impaled\n bne :9\n:8 lda #5\n:9 jsr addfcharx\n\n* Get color (kid red, opps blue)\n\n lda CharID\n beq :2 ;kid: 0\n lda #1 ;opponents: 1\n:2\n eor FCharX\n eor FCharFace\n and #1 ;look only at low bits\n bne :1\n inc FCharX\n bne :1\n inc FCharX+1\n:1\n lda #starimage\n sta FCharImage\n lda #startable\n sta FCharTable\n\n lda #0\n sta FCharCU\n sta FCharCL\n lda #40\n sta FCharCR\n lda #192\n sta FCharCD\n\n lda #TypeComix\n jmp addcharobj\n]rts rts\n\n*-------------------------------\n*\n*  A D D   C H A R   O B J\n*\n*  Add a character to object table\n*\n*  In: FCharVars\n*      A = object type\n*\n*-------------------------------\nADDCHAROBJ\n ldx objX ;# objects already in list\n inx\n cpx #maxobj\n bcs ]rts ;list full (shouldn't happen)\n stx objX\n\n sta objTYP,x\n\n lda FCharX\n sta XCO\n lda FCharX+1\n sta OFFSET\n\n txa\n pha\n jsr cvtx ;from 280-res to byte/offset\n pla\n tax\n\n lda XCO\n sta objX,x\n lda OFFSET\n sta objOFF,x\n\n lda FCharY\n sta objY,x\n\n lda FCharCU\n sta objCU,x\n lda FCharCL\n sta objCL,x\n lda FCharCR\n sta objCR,x\n lda FCharCD\n sta objCD,x\n\n lda FCharImage\n sta objIMG,x\n\n lda FCharTable\n sta objTAB,x\n\n lda FCharFace\n sta objFACE,x\n\n jmp SETOBJINDX\n\n*-------------------------------\n*\n*  S E T  O B J  I N D X\n*\n*  Set object index\n*\n*-------------------------------\nSETOBJINDX\n lda FCharIndex\n sta objINDX,x\n\n cmp #30\n bcs :os\n\n tax\n\n lda #1\n sta objbuf,x\n:os\n rts\n\n*-------------------------------\n*\n* Text routines\n*\n* NOTE: These routines bypass normal data structures\n* & write directly to hi-res page.\n*\n* Call at end of DRAWALL to make sure text goes on top\n* of everything else.\n*\n*-------------------------------\n*\n* Call once before using other text routines\n*\n*-------------------------------\npretext\n jsr initlay\n\n lda #bgtable2\n sta TABLE\n lda #>bgtable2\n sta TABLE+1\n rts\n\n*-------------------------------\n* Part of \"Yellow\" copy-protection\n\nSETRECHECK0\n lda #recheck0\n sta locals\n lda #>recheck0\n sta locals+1 ;fall thru (& return A = 0)\n\n*-------------------------------\nINITLAY\n lda #3 ;auxmem\n sta BANK\n\n lda #40\n sta RIGHTCUT\n lda #192\n sta BOTCUT ;use full screen\n lda #0\n sta LEFTCUT\n sta TOPCUT\n rts\n\n*-------------------------------\n*\n* Print character\n*\n* In: PAGE, XCO/OFFSET, YCO\n*     a = ASCII value of character\n* Out: XCO/OFFSET (modified)\n*\n*-------------------------------\nprchar\n sec\n sbc #\"/\" ;\"0\" = 1\n sta IMAGE\n\n lda #ora\n sta OPACITY\n\n jsr lay\n\n inc XCO\n rts\n\n*-------------------------------\n lst\n ds 1\n usr $a9,17,$00,*-org\n lst off\n"
  },
  {
    "path": "04 Support/MakeDisk/S/GAMEEQ.S",
    "content": " tr on\n lst off\n* gameeq\n*-------------------------------\n*\n*  Equates\n*\n*-------------------------------\nchtable1 = $6000\nchtable2 = $8400\nchtable3 = $0800\nchtable4 = $9600\nchtable5 = $a800\nchtable6 = $6000\nchtable7 = $9f00\n\nbgtable1 = $6000\nbgtable2 = $8400\n\ntopctrl = $2000\nseqtable = $2800\nseqtab = $3000\nctrl = $3a00\ncoll = $4500\ngamebg = $4c00\nauto = $5400\n\nmobtables = $b600\nsavedgame = $b6f0\n\nmsys = $d400\nctrlsubs = $d000\nspecialk = $d900\ntextline = $dfd8\nsubs = $e000\nsound = $ea00\nmover = $ee00\nmisc = $f900\ndebugs = $fc00\n\n*-------------------------------\n*\n*  Jump tables\n*\n*-------------------------------\n dum mobtables\n\ntrobspace = $20\nmobspace = $10\nmaxsfx = $20\n\ntrloc ds trobspace\ntrscrn ds trobspace\ntrdirec ds trobspace\n\nmobx ds mobspace\nmoby ds mobspace\nmobscrn ds mobspace\nmobvel ds mobspace\nmobtype ds mobspace\nmoblevel ds mobspace\n\nsoundtable ds maxsfx\n\ntrobcount ds 1\n\n dum savedgame\n\nSavLevel ds 1\nSavStrength ds 1\nSavMaxed ds 1\nSavTimer ds 2\n ds 1\nSavNextMsg ds 1\n\n dum topctrl\n\nstart ds 3\nrestart ds 3\nstartresume ds 3\ninitsystem ds 3\n ds 3\n\ndocrosscut ds 3\ngoattract ds 3\n\n dum ctrl\n\nPlayerCtrl ds 3\ncheckfloor ds 3\nShadCtrl ds 3\nrereadblocks ds 3\ncheckpress ds 3\n\nDoImpale ds 3\nGenCtrl ds 3\ncheckimpale ds 3\n\n dum auto\n\nAutoCtrl ds 3\ncheckstrike ds 3\ncheckstab ds 3\nAutoPlayback ds 3\ncutcheck ds 3\n\ncutguard ds 3\naddguard ds 3\ncut ds 3\n\n dum coll\n\ncheckbarr ds 3\ncollisions ds 3\ngetfwddist ds 3\ncheckcoll ds 3\nanimchar ds 3\n\ncheckslice ds 3\ncheckslice2 ds 3\n ds 3\ncheckgate ds 3\n ds 3\n\nenemycoll ds 3\n\n dum gamebg\n\nupdatemeters ds 3\nDrawKidMeter ds 3\nDrawSword ds 3\nDrawKid ds 3\nDrawShad ds 3\n\nsetupflame ds 3\ncontinuemsg ds 3\naddcharobj ds 3\nsetobjindx ds 3\nprintlevel ds 3\n\nDrawOppMeter ds 3\nflipdiskmsg ds 3\ntimeleftmsg ds 3\nDrawGuard ds 3\nDrawGuard2 ds 3\n\nsetupflask ds 3\nsetupcomix ds 3\npsetupflame ds 3\ndrawpost ds 3\ndrawglass ds 3\n\ninitlay ds 3\ntwinkle ds 3\nflow ds 3\npmask ds 3\nyellow ds 3\n\nsetrecheck0 ds 3\nrecheckyel ds 3\n\n dum specialk\n\nkeys ds 3\nclrjstk ds 3\nzerosound ds 3\naddsound ds 3\nfacejstk ds 3\n\nSaveSelect ds 3\nLoadSelect ds 3\nSaveDesel ds 3\nLoadDesel ds 3\ninitinput ds 3\n\ndemokeys ds 3\nlisttorches ds 3\nburn ds 3\ngetminleft ds 3\nkeeptime ds 3\n\nshortentime ds 3\ncuesong ds 3\n ds 3\n ds 3\n ds 3\n\ndloop ds 3\nstrobe ds 3\n\n dum mover\n\nanimtrans ds 3\ntrigspikes ds 3\npushpp ds 3\nbreakloose1 ds 3\nbreakloose ds 3\n\nanimmobs ds 3\naddmobs ds 3\ncloseexit ds 3\ngetspikes ds 3\nshakem ds 3\n\ntrigslicer ds 3\ntrigtorch ds 3\ngetflameframe ds 3\nsmashmirror ds 3\njamspikes ds 3\n\ntrigflask ds 3\ngetflaskframe ds 3\ntrigsword ds 3\njampp ds 3\n\n dum ctrlsubs\n\ngetframe ds 3\ngetseq ds 3\ngetbasex ds 3\ngetblockx ds 3\ngetblockxp ds 3\n\ngetblocky ds 3\ngetblockej ds 3\naddcharx ds 3\ngetdist ds 3\ngetdist1 ds 3\n\ngetabovebeh ds 3\nrdblock ds 3\nrdblock1 ds 3\nsetupsword ds 3\ngetscrns ds 3\n\naddguardobj ds 3\nopjumpseq ds 3\ngetedges ds 3\nindexchar ds 3\nquickfg ds 3\n\ncropchar ds 3\ngetleft ds 3\ngetright ds 3\ngetup ds 3\ngetdown ds 3\n\ncmpspace ds 3\ncmpbarr ds 3\naddkidobj ds 3\naddshadobj ds 3\naddreflobj ds 3\n\nLoadKid ds 3\nLoadShad ds 3\nSaveKid ds 3\nSaveShad ds 3\nsetupchar ds 3\n\nGetFrameInfo ds 3\nindexblock ds 3\nmarkred ds 3\nmarkfred ds 3\nmarkwipe ds 3\n\nmarkmove ds 3\nmarkfloor ds 3\nunindex ds 3\nquickfloor ds 3\nunevenfloor ds 3\n\nmarkhalf ds 3\naddswordobj ds 3\ngetblocky1 ds 3\ncheckledge ds 3\nget2infront ds 3\n\ncheckspikes ds 3\nrechargemeter ds 3\naddfcharx ds 3\nfacedx ds 3\njumpseq ds 3\n\nGetBaseBlock ds 3\nLoadKidwOp ds 3\nSaveKidwOp ds 3\ngetopdist ds 3\nLoadShadwOp ds 3\n\nSaveShadwOp ds 3\nboostmeter ds 3\ngetunderft ds 3\ngetinfront ds 3\ngetbehind ds 3\n\ngetabove ds 3\ngetaboveinf ds 3\ncmpwall ds 3\n\n dum subs\n\naddtorches ds 3\ndoflashon ds 3\nPageFlip ds 3\ndemo ds 3\nshowtime ds 3\n\ndoflashoff ds 3\nlrclse ds 3\n ds 3\n ds 3\n ds 3\n\naddslicers ds 3\npause ds 3\n ds 3\ndeadenemy ds 3\nplaycut ds 3\n\naddlowersound ds 3\nRemoveObj ds 3\naddfall ds 3\nsetinitials ds 3\nstartkid ds 3\n\nstartkid1 ds 3\ngravity ds 3\ninitialguards ds 3\nmirappear ds 3\ncrumble ds 3\n\n dum sound\n\nplayback ds 3\n\n dum msys\n\n_minit ds 3\n_mplay ds 3\n\n dum seqtable\n\nFdef ds 1200\naltset1 ds 200\naltset2 ds 450\nswordtab ds 192\n\n dum misc\n\nVanishChar ds 3\nmovemusic ds 3\nmoveauxlc ds 3\nfirstguard ds 3\nmarkmeters ds 3\n\npotioneffect ds 3\nmouserescue ds 3\nStabChar ds 3\nunholy ds 3\nreflection ds 3\n\nMarkKidMeter ds 3\nMarkOppMeter ds 3\nbonesrise ds 3\ndecstr ds 3\nDoSaveGame ds 3\n\nLoadLevelX ds 3\ncheckalert ds 3\ndispversion ds 3\n\n dum debugs\n\nshowpage ds 3\ndebugkeys ds 3\n ds 3\ntitlescreen ds 3\n\n*-------------------------------\n*\n*  Zero page\n*\n*-------------------------------\nlocals = $e8\n\n*-------------------------------\n*  $40-e7: Game globals\n*-------------------------------\n dum $40\n\nChar ds $10\nKid ds $10\nShad ds $10\nFCharVars ds 12\nyellowflag ds 1\ntimebomb ds 1\njustblocked ds 1\ngdtimer ds 1\nframepoint ds 2\nFimage ds 1\nFdx ds 1\nFdy ds 1\nFcheck ds 1\nexitopen ds 1\ncollX ds 1\nlightning ds 1\nlightcolor ds 1\noffguard ds 1\nblockid ds 1\nblockx ds 1\nblocky ds 1\ninfrontx ds 1\nbehindx ds 1\nabovey ds 1\ntempblockx ds 1\ntempblocky ds 1\ntempscrn ds 1\ntempid ds 1\nnumtrans ds 1\ntempnt ds 1\nredrawflg ds 1\nxdiff ds 2\nydiff ds 2\nxdir ds 1\nydir ds 1\nRNDseed ds 1\ninvert ds 1\nPlayCount ds 1\nrefract ds 1\nbacktolife ds 1\ncutplan ds 1\nlastcmd ds 1\ndistfallen ds 1\ncutscrn ds 1\nwaitingtojump ds 1\ntrigppabove ds 1\ndirecpp ds 1\nblockaddr ds 2\ndelay ds 1\nXCOORD ds 2\nsavekidx ds 1\nmirrx ds 1\ndmirr ds 1\nbarrdist ds 1\nbarrcode ds 1\nimwidth ds 1\nimheight ds 1\nleadedge ds 1\nleftej ds 1\nrightej ds 1\ntopej ds 1\nleftblock ds 1\nrightblock ds 1\ntopblock ds 1\nbottomblock ds 1\nCDLeftEj ds 1\nCDRightEj ds 1\nendrange ds 1\nbufindex ds 1\nblockedge ds 1\ncollideL ds 1\ncollideR ds 1\nweightless ds 1\ncutorder ds 1\nAMtimer ds 1\nbegrange ds 1\nscrn ds 1\nkeybufptr ds 1\nVisScrn ds 1\nOppStrength ds 1\njarabove ds 1\nKidStrength ds 1\nChgKidStr ds 1\nMaxKidStr ds 1\nEnemyAlert ds 1\nChgOppStr ds 1\nheroic ds 1\nclrF ds 1\nclrB ds 1\nclrU ds 1\nclrD ds 1\nclrbtn ds 1\nFsword ds 1\npurpleflag ds 1 ;$da\nmsgtimer ds 1\nMaxOppStr ds 1\nguardprog ds 1\nManCtrl ds 1\nmergetimer ds 1\nlastpotion ds 1\norigstrength ds 1\njmpaddr ds 2\nalertguard ds 1\ncreateshad ds 1\nstunned ds 1\ndroppedout ds 1\n\n*-------------------------------\n*\n*  Page 2-3\n*\n*-------------------------------\n dum $212\n\nmilestone ds 1\nGlassState ds 1\nredrawglass ds 1\ndoortop ds 1\nGuardColor ds 1\nshadowaction ds 1\nskipmessage ds 1\nsavezp ds 32\nMSset ds 1\nrjumpflag ds 1\nredherring ds 1\n\n dum $300\n\nMinLeft ds 1\nNextTimeMsg ds 1\nSecLeft ds 1\nBGset1 ds 1\nBGset2 ds 1\nCHset ds 1\nFrameCount ds 2\nSongCount ds 1\nPreRecPtr ds 1\ngotsword ds 1\nmessage ds 1\nSPEED ds 1\nnummob ds 1\nclrSEL ds 5\nclrDESEL ds 5\nvibes ds 1\nSongCue ds 1\nmusicon ds 1\nredkidmeter ds 1\nNextLevel ds 1\nscrncolor ds 1\nredoppmeter ds 1\ntimerequest ds 1\n\n dum $320\n\nCDthisframe ds $10\nCDlastframe ds $10\nCDbelow ds $10\nCDabove ds $10\nSNthisframe ds $10\nSNlastframe ds $10\nSNbelow ds $10\nSNabove ds 10\nBlockYthis ds 1\nBlockYlast ds 1\n\nOp ds $10\n\nkeybuflen = 10\nkeybuf ds keybuflen\n\n*-------------------------------\n*\n*  Character data\n*\n*-------------------------------\n dum Char\nCharPosn ds 1\nCharX ds 1\nCharY ds 1\nCharFace ds 1\nCharBlockX ds 1\nCharBlockY ds 1\nCharAction ds 1\nCharXVel ds 1\nCharYVel ds 1\nCharSeq ds 2\nCharScrn ds 1\nCharRepeat ds 1\nCharID ds 1\nCharSword ds 1\nCharLife ds 1\n\n dum Op\nOpPosn ds 1\nOpX ds 1\nOpY ds 1\nOpFace ds 1\nOpBlockX ds 1\nOpBlockY ds 1\nOpAction ds 1\nOpXVel ds 1\nOpYVel ds 1\nOpSeq ds 2\nOpScrn ds 1\nOpRepeat ds 1\nOpID ds 1\nOpSword ds 1\nOpLife ds 1\n\n dum Kid\nKidPosn ds 1\nKidX ds 1\nKidY ds 1\nKidFace ds 1\nKidBlockX ds 1\nKidBlockY ds 1\nKidAction ds 1\nKidXVel ds 1\nKidYVel ds 1\nKidSeq ds 2\nKidScrn ds 1\nKidRepeat ds 1\nKidID ds 1\nKidSword ds 1\nKidLife ds 1\n\n dum Shad\nShadPosn ds 1\nShadX ds 1\nShadY ds 1\nShadFace ds 1\nShadBlockX ds 1\nShadBlockY ds 1\nShadAction ds 1\nShadXVel ds 1\nShadYVel ds 1\nShadSeq ds 2\nShadScrn ds 1\nShadRepeat ds 1\nShadID ds 1\nShadSword ds 1\nShadLife ds 1\n\n dum FCharVars\nFCharImage ds 1\nFCharX ds 2\nFCharY ds 1\nFCharFace ds 1\nFCharIndex ds 1\nFCharCU ds 1\nFCharCD ds 1\nFCharCL ds 1\nFCharCR ds 1\nFCharTable ds 1\n\n dend\n\n*-------------------------------\n*\n*  Misc. data\n*\n*-------------------------------\nFcheckmark = %01000000\nFthinmark = %00100000\nFfootmark = %00011111\n\nfloorheight = 15\nangle = 7\nVertDist = 11\n\nUseFastlay = 0\nUseLay = 1\nUseLayrsave = 2\n\nTypeKid = 0\nTypeShad = 1\nTypeGd = 2\nTypeSword = 3\nTypeReflect = 4\nTypeComix = 5\nTypeFF = $80\n\n lst off\n"
  },
  {
    "path": "04 Support/MakeDisk/S/GRAFIX.S",
    "content": "* grafix\nCopyProtect = 1\nEditorDisk = 0\norg = $400\n tr on\n lst off\n lstdo off\n*-------------------------------\n*\n*  PRINCE OF PERSIA\n*  Copyright 1989 Jordan Mechner\n*\n*-------------------------------\n org org\n\n jmp GR\n jmp DRAWALL\n jmp CONTROLLER\n jmp dispversion\n jmp SAVEBLUE\n\n jmp RELOADBLUE\n jmp MOVEMEM\n jmp BUTTONS ;ed\n jmp GTONE\n jmp SETCENTER\n\n jmp DIMCHAR\n jmp CVTX\n jmp ZEROPEEL\n jmp ZEROPEELS\n jmp PREAD\n\n jmp ADDPEEL\n jmp COPYSCRN\n jmp SNGPEEL\n jmp RND\n jmp CLS\n\n jmp LAY\n jmp FASTLAY\n jmp LAYRSAVE\n jmp LRCLS\n jmp FASTMASK\n\n jmp FASTBLACK\n jmp PEEL\n jmp GETWIDTH\n jmp COPY2000\n jmp COPY2000MA\n\n jmp SETFASTAUX\n jmp SETFASTMAIN\n jmp LOADLEVEL\n jmp ATTRACTMODE\n jmp XMINIT\n\n jmp XMPLAY\n jmp CUTPRINCESS\n jmp XTITLE\n jmp COPY2000AM\n jmp RELOAD\n\n jmp LOADSTAGE2\n jmp RELOAD\n jmp GETSELECT\n jmp GETDESEL\n jmp EDREBOOT ;ed\n\n jmp GOBUILD ;ed\n jmp GOGAME ;ed\n jmp WRITEDIR ;ed\n jmp READDIR ;ed\n jmp SAVELEVEL ;ed\n\n jmp SAVELEVELG ;ed\n jmp ADDBACK\n jmp ADDFORE\n jmp ADDMID\n jmp ADDMIDEZ\n\n jmp ADDWIPE\n jmp ADDMSG\n jmp SAVEGAME\n jmp LOADGAME\n jmp ZEROLSTS\n\n jmp SCREENDUMP\n jmp MINIT\n jmp MPLAY\n jmp SAVEBINFO\n jmp RELOADBINFO\n\n jmp INVERTY\n jmp NORMSPEED\n jmp ADDMIDEZO\n jmp CALCBLUE\n jmp ZERORED\n\n jmp XPLAYCUT\n jmp CHECKIIGS\n jmp FASTSPEED\n jmp MUSICKEYS\n jmp DOSTARTGAME\n\n jmp EPILOG\n jmp LOADALTSET\n jmp XMOVEMUSIC\n jmp WHOOP\nVBLvect jmp VBLANK ;changed by InitVBLANK if IIc\n\n jmp VBLI ;VBL interrupt\n\n*-------------------------------\n lst\n put eq\n lst\n put gameeq\n lst\n put soundnames\n lst off\n*-------------------------------\n dum locals\n]temp\n]dest ds 2\n]source ds 2\n]endsourc ds 2\nindex ds 1\n\n dend\n\n*-------------------------------\n*  Apple soft switches\n\nIOUDISoff = $c07f\nIOUDISon = $c07e\nDHIRESoff = $c05f\nDHIRESon = $c05e\nHIRESon = $c057\nHIRESoff = $c056\nPAGE2on = $c055\nPAGE2off = $c054\nMIXEDon = $c053\nMIXEDoff = $c052\nTEXTon = $c051\nTEXToff = $c050\nALTCHARon = $c00f\nALTCHARoff = $c00e\nADCOLon = $c00d\nADCOLoff = $c00c\nALTZPon = $c009\nALTZPoff = $c008\nRAMWRTaux = $c005\nRAMWRTmain = $c004\nRAMRDaux = $c003\nRAMRDmain = $c002\nADSTOREon = $c001\nADSTOREoff = $c000\nRWBANK2 = $c083\nRWBANK1 = $c08b\nUSEROM = $c082\n\n*-------------------------------\n*  Key equates\n\nCTRL = $60\nESC = $9b\nDELETE = $7f\nSHIFT = $20\n\nksound = \"s\"-CTRL\nkmusic = \"n\"-CTRL\n\n*-------------------------------\n*  Joystick \"center\" width (increase for bigger center)\n\ncwidthx = 10 ;15\ncwidthy = 15 ;21\n\n*-------------------------------\n*  Addresses of character image tables\n*  (Bank: 2 = main, 3 = aux)\n\nchtabbank db 2,2,2,3,2,3,3\n\nchtablist db #>chtable1,#>chtable2,#>chtable3,#>chtable4\n db #>chtable5,#>chtable6,#>chtable7\n\ndummy db maxpeel,maxpeel\n\n*-------------------------------\n*\n*  A D D B A C K\n*\n*  Add an image to BACKGROUND image list\n*\n*  In: XCO, YCO, IMAGE (coded), OPACITY\n*\n*  IMAGE bit 7 specifies image table (0 = bgtable1,\n*  1 = bgtable2); low 6 bits = image # within table\n*\n*-------------------------------\nADDBACK ldx bgX ;# images already in list\n inx\n cpx #maxback\n bcs :rts ;list full (shouldn't happen)\n\n lda XCO\n sta bgX,x\n\n lda YCO\n cmp #192\n bcs :rts\n sta bgY,X\n\n lda IMAGE\n sta bgIMG,X\n\n lda OPACITY\n sta bgOP,X\n\n stx bgX\n:rts\n]rts rts\n\n*-------------------------------\n*\n*  A D D F O R E\n*\n*  Add an image to FOREGROUND image list\n*\n*  In: same as ADDBACK\n*\n*-------------------------------\nADDFORE ldx fgX\n inx\n cpx #maxfore\n bcs ]rts\n\n lda XCO\n sta fgX,X\n\n lda YCO\n cmp #192\n bcs ]rts\n sta fgY,X\n\n lda IMAGE\n sta fgIMG,X\n\n lda OPACITY\n sta fgOP,X\n\n stx fgX\n]rts rts\n\n*-------------------------------\n*\n*  A D D M S G\n*\n*  Add an image to MESSAGE image list (uses bg tables)\n*\n*  In:  XCO, OFFSET, YCO, IMAGE (coded), OPACITY (bit 6 coded)\n*\n*-------------------------------\nADDMSG ldx msgX\n inx\n cpx #maxmsg\n bcs ]rts\n\n lda XCO\n sta msgX,X\n lda OFFSET\n sta msgOFF,X\n\n lda YCO\n sta msgY,X\n\n lda IMAGE\n sta msgIMG,X\n\n lda OPACITY\n sta msgOP,X\n\n stx msgX\n]rts rts\n\n*-------------------------------\n*\n*  A D D  W I P E\n*\n*  Add image to wipe list\n*\n*  In: XCO, YCO, height, width; A = color\n*\n*-------------------------------\nADDWIPE ldx wipeX\n inx\n cpx #maxwipe\n bcs ]rts\n\n sta wipeCOL,x\n lda blackflag ;TEMP\n beq :1 ;\n lda #$ff ;\n sta wipeCOL,x ;\n:1\n lda XCO\n sta wipeX,x\n lda YCO\n sta wipeY,x\n\n lda height\n sta wipeH,x\n lda width\n sta wipeW,x\n\n stx wipeX\n]rts rts\n\n*-------------------------------\n*\n*  A D D   M I D\n*\n*  Add an image to mid table\n*\n*  In:  XCO, OFFSET, YCO, IMAGE, TABLE, OPACITY\n*       FCharFace, FCharCU-CD-CL-CR\n*       A = midTYP\n*\n*  midTYP bit 7: 1 = char tables, 0 = bg tables\n*  midTYP bits 0-6:\n*    0 = use fastlay (normal for floorpieces)\n*    1 = use lay alone\n*    2 = use lay with layrsave (normal for characters)\n*\n*  For char tables: IMAGE = image #, TABLE = table #\n*  For bg tables: IMAGE bits 0-6 = image #, bit 7 = table #\n*\n*-------------------------------\nADDMID ldx midX\n inx\n cpx #maxmid\n bcs ]rts\n\n sta midTYP,x\n\n lda XCO\n sta midX,x\n lda OFFSET\n sta midOFF,x\n\n lda YCO\n sta midY,x\n\n lda IMAGE\n sta midIMG,x\n\n lda TABLE\n sta midTAB,x\n\n lda FCharFace ;- left, + right\n eor #$ff ;+ normal, - mirror\n and #$80\n ora OPACITY\n sta midOP,x\n\n lda FCharCU\n sta midCU,x\n lda FCharCD\n sta midCD,x\n lda FCharCL\n sta midCL,x\n lda FCharCR\n sta midCR,x\n\n stx midX\n]rts rts\n\n*-------------------------------\n*\n*  ADDMID \"E-Z\" version\n*\n*  No offset, no mirroring, no cropping\n*\n*  In: XCO, YCO, IMAGE, TABLE, OPACITY\n*      A = midTYP\n*\n*-------------------------------\nADDMIDEZ lda #0\n sta OFFSET\nADDMIDEZO\n ldx midX\n inx\n cpx #maxmid\n bcs ]rts\n\n sta midTYP,x\n\n lda XCO\n sta midX,x\n lda OFFSET\n sta midOFF,x\n\n lda YCO\n sta midY,x\n\n lda IMAGE\n sta midIMG,x\n\n lda TABLE\n sta midTAB,x\n\n lda OPACITY\n sta midOP,x\n\n lda #0\n sta midCU,x\n sta midCL,x\n lda #40\n sta midCR,x\n lda #192\n sta midCD,x\n\n stx midX\n]rts rts\n\n*-------------------------------\n*\n*  A D D P E E L\n*\n*  (Call immediately after layrsave)\n*  Add newly generated image to peel list\n*\n*-------------------------------\nADDPEEL lda PEELIMG+1\n beq ]rts ;0 is layersave's signal to skip it\n\n lda PAGE\n beq :1\n\n do CopyProtect\n ldx purpleflag ;should be 1!\n lda dummy,x\n\n else\n lda #maxpeel\n fin\n\n:1 sta :sm+1 ;self-mod\n\n tax\n lda peelX,x ;# of images in peel list\n clc\n adc #1\n cmp #maxpeel\n bcs ]rts\n sta peelX,x\n clc\n:sm adc #0 ;0/maxpeel\n tax\n\n lda PEELXCO\n sta peelX,x\n lda PEELYCO\n sta peelY,x ;x & y coords of saved image\n\n lda PEELIMG\n sta peelIMGL,x\n lda PEELIMG+1\n sta peelIMGH,x ;2-byte image address (in peel buffer)\n\n]rts rts\n\n*-------------------------------\n*\n*  D R A W A L L\n*\n*  Draw everything in image lists\n*\n*  This is the only routine that calls HIRES routines.\n*\n*-------------------------------\nDRAWALL\n jsr DOGEN ;Do general stuff like cls\n\n lda blackflag ;TEMP\n bne :1 ;\n\n jsr SNGPEEL ;\"Peel off\" characters\n;(using the peel list we\n;set up 2 frames ago)\n\n:1 jsr ZEROPEEL ;Zero just-used peel list\n\n jsr DRAWWIPE ;Draw wipes\n\n jsr DRAWBACK ;Draw background plane images\n\n jsr DRAWMID ;Draw middle plane images\n;(& save underlayers to now-clear peel list)\n\n jsr DRAWFORE ;Draw foreground plane images\n\n jmp DRAWMSG ;Draw messages\n\n*-------------------------------\n*\n*  D O  G E N\n*\n*  Do general stuff like clear screen\n*\n*-------------------------------\nDOGEN\n lda genCLS\n beq :1\n jsr cls\n\n* purple copy-protection\n\n:1 ldx BGset1\n cpx #1\n bne ]rts\n lda #0\n sta dummy-1,x\n\n]rts rts\n\n*-------------------------------\n*\n*  D R A W W I P E\n*\n*  Draw wipe list (using \"fastblack\")\n*\n*-------------------------------\nDRAWWIPE\n lda wipeX ;# of images in list\n beq ]rts ;list is empty\n\n lda #1 ;start with image #1\n:loop pha\n tax\n\n lda wipeH,x\n sta IMAGE ;height\n lda wipeW,x\n sta IMAGE+1 ;width\n lda wipeX,X\n sta XCO ;x-coord\n lda wipeY,X\n sta YCO ;y-coord\n lda wipeCOL,X\n sta OPACITY ;color\n jsr fastblack\n\n pla\n clc\n adc #1\n cmp wipeX\n bcc :loop\n beq :loop\n]rts rts\n\n*-------------------------------\n*\n*  D R A W B A C K\n*\n*  Draw b.g. list (using fastlay)\n*\n*-------------------------------\nDRAWBACK lda bgX ;# of images in list\n beq ]rts\n\n ldx #1\n:loop stx index\n\n lda bgIMG,x\n sta IMAGE ;coded image #\n jsr setbgimg ;extract TABLE, BANK, IMAGE\n\n lda bgX,x\n sta XCO\n lda bgY,X\n sta YCO\n lda bgOP,x\n sta OPACITY\n jsr fastlay\n\n ldx index\n inx\n cpx bgX\n bcc :loop\n beq :loop\n]rts rts\n\n*-------------------------------\n*\n*  D R A W F O R E\n*\n*  Draw foreground list (using fastmask/fastlay)\n*\n*-------------------------------\nDRAWFORE lda fgX\n beq ]rts\n\n ldx #1\n:loop stx index\n\n lda fgIMG,x\n sta IMAGE\n jsr setbgimg\n\n lda fgX,x\n sta XCO\n lda fgY,x\n sta YCO\n\n lda fgOP,x ;opacity\n cmp #mask\n bne :1\n jsr fastmask\n jmp :cont\n\n:1 sta OPACITY ;fastlay for everything else\n jsr fastlay\n\n:cont ldx index\n inx\n cpx fgX\n bcc :loop\n beq :loop\n]rts rts\n\n*-------------------------------\n*\n*  S N G   P E E L\n*\n*  Draw peel list (in reverse order) using \"peel\" (fastlay)\n*\n*-------------------------------\nSNGPEEL\n ldx PAGE\n beq :1\n ldx #maxpeel\n:1 stx :sm+1\n lda peelX,x ;# of images in list\n beq ]rts\n\n:loop pha\n clc\n:sm adc #0 ;self-mod: 0 or maxpeel\n tax\n\n lda peelIMGL,x\n sta IMAGE\n lda peelIMGH,x\n sta IMAGE+1\n lda peelX,x\n sta XCO\n lda peelY,x\n sta YCO\n lda #sta\n sta OPACITY\n jsr peel\n\n pla\n sec\n sbc #1\n bne :loop\n]rts rts\n\n*-------------------------------\n*\n*  D R A W M I D\n*\n*  Draw middle list (floorpieces & characters)\n*\n*-------------------------------\nDRAWMID\n lda midX ;# of images in list\n beq ]rts\n\n ldx #1\n:loop stx index\n\n lda midIMG,x\n sta IMAGE\n lda midTAB,x\n sta TABLE\n lda midX,x\n sta XCO\n lda midY,x\n sta YCO\n lda midOP,x\n sta OPACITY\n\n lda midTYP,x ;+ use bg tables\n bmi :UseChar ;- use char tables\n jsr setbgimg ;protects A,X\n jmp :GotTable\n\n:UseChar jsr setcharimg ;protects A,X\n\n:GotTable ;A = midTYP,x\n and #$7f ;low 7 bits: 0 = fastlay, 1 = lay, 2 = layrsave\n beq :fastlay\n cmp #1\n beq :lay\n cmp #2\n beq :layrsave\n\n:Done ldx index\n inx\n cpx midX\n bcc :loop\n beq :loop\n]rts rts\n\n* midTYP values:\n*    0 = use fastlay (normal for floorpieces)\n*    1 = use lay alone\n*    2 = use lay with layrsave (normal for characters)\n\n:fastlay\n jsr fastlay\n jmp :Done\n\n:layrsave\n jsr :setaddl ;set additional params for lay\n\n jsr layrsave ;save underlayer in peel buffer\n jsr ADDPEEL ;& add to peel list\n\n jsr lay ;then lay down image\n\n jmp :Done\n\n:lay jsr :setaddl\n jsr lay\n jmp :Done\n\n:setaddl lda midOFF,x\n sta OFFSET\n lda midCL,x\n sta LEFTCUT\n lda midCR,x\n sta RIGHTCUT\n lda midCU,x\n sta TOPCUT\n lda midCD,x\n sta BOTCUT\n rts\n\n*-------------------------------\n*\n*  D R A W M S G\n*\n*  Draw message list (using bg tables & lay)\n*\n*  OPACITY bit 6: 1 = layrsave, 0 = no layrsave\n*\n*-------------------------------\nDRAWMSG\n lda msgX\n beq ]rts\n\n ldx #1\n:loop stx index\n\n lda msgIMG,x\n sta IMAGE\n jsr setbgimg\n\n lda msgX,x\n sta XCO\n lda msgOFF,x\n sta OFFSET\n lda msgY,x\n sta YCO\n\n lda #0\n sta LEFTCUT\n sta TOPCUT\n lda #40\n sta RIGHTCUT\n lda #192\n sta BOTCUT\n\n lda msgOP,x\n sta OPACITY\n and #%01000000\n beq :1\n lda OPACITY\n and #%10111111 ;bit 6 set: use layrsave\n sta OPACITY\n\n jsr layrsave\n jsr ADDPEEL\n\n:1 jsr lay\n\n ldx index\n inx\n cpx msgX\n bcc :loop\n beq :loop\n]rts rts\n\n*-------------------------------\n*\n*  S E T   B  G   I M A G E\n*\n*  In: IMAGE = coded image #\n*  Out: BANK, TABLE, IMAGE set for hires call\n*\n*  Protect A,X\n*\n*-------------------------------\nsetbgimg\n tay\n\n lda #3 ;auxmem\n sta BANK\n\n lda #0\n sta TABLE\n\n lda IMAGE ;Bit 7: 0 = bgtable1, 1 = bgtable2\n bpl :bg1\n\n and #$7f\n sta IMAGE\n\n lda #>bgtable2\n bne :ok\n\n:bg1 lda #>bgtable1\n:ok sta TABLE+1\n\n tya\n rts\n\n*-------------------------------\n*\n*  S E T   C H A R   I M A G E\n*\n*  In: TABLE = chtable # (0-7)\n*  Out: BANK, TABLE set for hires call\n*\n*  Protect A,X\n*\n*-------------------------------\nsetcharimg\n pha\n\n ldy TABLE\n lda chtabbank,y\n sta BANK\n\n lda #0\n sta TABLE\n lda chtablist,y\n sta TABLE+1\n\n pla\n rts\n\n*-------------------------------\n*\n*  D I M C H A R\n*\n*  Get dimensions of character\n*  (Misc. routine for use by CTRL)\n*\n*  In: A = image #, X = table #\n*  Out: A = width, X = height\n*\n*-------------------------------\nDIMCHAR\n sta IMAGE\n stx TABLE\n jsr setcharimg\n jmp getwidth\n\n*-------------------------------\n*\n*  C V T X\n*\n*  Convert X-coord to byte & offset\n*  Works for both single & double hires\n*\n*  In: XCO/OFFSET = X-coord (2 bytes)\n*  Out: XCO/OFFSET = byte/offset\n*\n*  Hires scrn: X-coord range 0-279, byte range 0-39\n*  Dbl hires scrn: X-coord range 0-559, byte range 0-79\n*\n*  Trashes Y-register\n*\n*  Returns accurate results for all input (-32767 to 32767)\n*  but wildly offscreen values will slow it down\n*\n*-------------------------------\n]XL = XCO\n]XH = OFFSET\n\nrange = 36*7 ;largest multiple of 7 under 256\n\nCVTX\n lda #0\n sta ]temp\n\n lda ]XH\n bmi :negative ;X < 0\n beq :ok ;0 <= X <= 255\n\n:loop lda ]temp\n clc\n adc #36\n sta ]temp\n\n lda ]XL\n sec\n sbc #range\n sta ]XL\n\n lda ]XH\n sbc #0\n sta ]XH\n\n bne :loop\n\n:ok ldy ]XL\n lda ByteTable,y\n clc\n adc ]temp\n sta XCO\n\n lda OffsetTable,y\n sta OFFSET\n rts\n\n:negative\n lda ]temp\n sec\n sbc #36\n sta ]temp\n\n lda ]XL\n clc\n adc #range\n sta ]XL\n\n lda ]XH\n adc #0\n sta ]XH\n bne :negative\n beq :ok\n]rts rts\n\n*-------------------------------\n*\n*  Z E R O L I S T S\n*\n*  Zero image lists (except peel lists)\n*\n*-------------------------------\nZEROLSTS lda #0\n sta genCLS\n sta wipeX\n sta bgX\n sta midX\n sta objX\n sta fgX\n sta msgX\n rts\n\n*-------------------------------\n*\n*  Zero both peel lists\n*\n*-------------------------------\nZEROPEELS\n lda #0\n sta peelX\n sta peelX+maxpeel\n]rts rts\n\n*-------------------------------\n*\n*  Z E R O P E E L\n*\n*  Zero peel list & buffer for whichever page we're on\n*\n*  (Point PEELBUF to beginning of appropriate peel buffer\n*  & set #-of-images byte to zero)\n*\n*-------------------------------\nZEROPEEL\n lda #0\n ldx PAGE\n beq :page1\n:page2 sta peelX+maxpeel\n lda #peelbuf2\n sta PEELBUF\n lda #>peelbuf2\n sta PEELBUF+1\n rts\n\n:page1 sta peelX\n lda #peelbuf1\n sta PEELBUF\n lda #>peelbuf1\n sta PEELBUF+1\n rts\n\n*-------------------------------\n*\n*  Joystick/keyboard routines\n*\n*-------------------------------\n*\n*  Get input from selected/deselected device\n*\n*  In: kbdX, kbdY, joyX, joyY, BTN0, BTN1, ManCtrl\n*\n*  Out: JSTKX, JSTKY, btn\n*\n*-------------------------------\nGETSELECT\n lda joyon ;joystick selected?\n bne getjoy ;yes--use jstk\n beq getkbd ;no--use kbd\n\nGETDESEL\n lda joyon\n bne getkbd\n beq getjoy\n\ngetjoy lda joyX\n sta JSTKX\n lda joyY\n sta JSTKY\n\n lda BTN1\n ldx ManCtrl ;When manual ctrl is on, btn 0 belongs\n bmi :1 ;to kbd and btn 1 to jstk.  With manual ctrl\n ora BTN0 ;off, btns can be used interchangeably.\n:1 sta btn\n rts\n\ngetkbd lda kbdX\n sta JSTKX\n lda kbdY\n sta JSTKY\n\n lda BTN0\n ldx ManCtrl\n bmi :1\n ora BTN1\n:1 sta btn\n]rts rts\n\n*-------------------------------\n*\n*  Read controller (jstk & buttons)\n*\n*  Out: joyX-Y, BTN0-1\n*\n*-------------------------------\nCONTROLLER\n jsr JREAD ;read jstk\n\n jmp BREAD ;& btns\n\n*-------------------------------\n*\n*  Read joystick\n*\n*  Out: joyX-Y\n*\n*  joyX: -1 = left, 0 = center, +1 = right\n*  joyY: -1 = up, 0 = center, +1 = down\n*\n*-------------------------------\nJREAD\n lda joyon\n beq ]rts\n jsr PREAD ;read game pots\n\n ldx #0\n jsr cvtpdl\n inx\n jsr cvtpdl\n\n* Reverse joyY?\n\n lda jvert\n beq :1\n\n lda #0\n sec\n sbc joyY\n sta joyY\n\n* Reverse joyX?\n\n:1 lda jhoriz\n beq ]rts\n\n lda #0\n sec\n sbc joyX\n sta joyX\n]rts rts\n\n*-------------------------------\n*\n*  Read buttons\n*\n*  Out: BTN0-1\n*\n*-------------------------------\nBREAD\n lda jbtns\n bne :1 ;buttons switched\n\n lda $c061\n ldx $c062\n:2 sta BTN0\n stx BTN1\n rts\n\n:1 ldx $c062\n lda $c061\n jmp :2\n\n*-------------------------------\n*\n*  (Temp routine--for builder only)\n*\n*-------------------------------\nBUTTONS\n do EditorDisk\n ldx BTN0 ;\"raw\"\n lda #0\n sta BUTT0\n lda b0down ;last button value\n stx b0down\n and #$80\n bne :rdbtn1\n stx BUTT0\n\n:rdbtn1 ldx BTN1\n lda #0\n sta BUTT1\n lda b1down\n stx b1down\n and #$80\n bne :rdjup\n stx BUTT1\n\n:rdjup lda joyY\n bmi ]rts\n lda #0\n sta JSTKUP ;jstk is not up--clear JSTKUP\n fin\n\n]rts rts\n\n*-------------------------------\n*\n*  Convert raw counter value (approx. 0-70) to -1/0/1\n*\n*  In: X = paddle # (0 = horiz, 1 = vert)\n*\n*-------------------------------\ncvtpdl\n lda joyX,x\n cmp jthres1x,x\n bcs :1\n lda #-1\n bne :3\n:1 cmp jthres2x,x\n bcs :2\n lda #0\n beq :3\n:2 lda #1\n:3 sta joyX,x\n]rts rts\n\n*-------------------------------\n*\n*  Read game pots\n*\n*  Out: Raw counter values (approx. 0-70) in joyX-Y\n*\n*-------------------------------\nPREAD\n lda #0\n sta joyX\n sta joyY\n\n lda $c070 ;Reset timers\n\n:loop ldx #1\n:1 lda $c064,x ;Check timer input\n bpl :beat\n inc joyX,x ;Still high; increment counter\n:nextpdl dex\n bpl :1\n\n lda $C064\n ora $C065\n bpl ]rts ;Both inputs low: we're done\n\n lda joyX\n ora joyY\n bpl :loop ;Do it again\n]rts rts\n\n:beat nop\n bpl :nextpdl ;Kill time\n\n*-------------------------------\n*\n*  Select jstk & define current joystick posn as center\n*\n*  Out: jthres1-2x, jthres1-2y\n*\n*-------------------------------\nSETCENTER\n jsr normspeed ;IIGS\n\n lda #$ff\n sta joyon ;Joystick on\n\n lda #0\n sta jvert\n sta jhoriz\n sta jbtns ;set normal params\n\n jsr PREAD ;get raw jstk values\n\n lda joyX\n ora joyY\n bmi :nojoy ;No joystick connected\n\n lda joyX\n sec\n sbc #cwidthx\n sta jthres1x\n lda joyX\n clc\n adc #cwidthx\n sta jthres2x\n\n lda joyY\n sec\n sbc #cwidthy\n sta jthres1y\n lda joyY\n clc\n adc #cwidthy\n sta jthres2y\n rts\n\n:nojoy lda #0\n sta joyon\n]rts rts\n\n*-------------------------------\n*\n*  Move a block of memory\n*\n*  In: A < X.Y\n*\n*  20 < 40.60 means 2000 < 4000.5fffm\n*  WARNING: If x >= y, routine will wipe out 64k\n*\n*-------------------------------\nMOVEMEM sta ]dest+1\n stx ]source+1\n sty ]endsourc+1\n\n ldy #0\n sty ]dest\n sty ]source\n sty ]endsourc\n\n:loop lda (]source),y\n sta (]dest),y\n iny\n bne :loop\n\n inc ]source+1\n inc ]dest+1\n lda ]source+1\n cmp ]endsourc+1\n bne :loop\n rts\n\n*-------------------------------\n*\n*  G  T  O  N  E\n*\n*  Call this routine to confirm special-key presses\n*  & any other time we want to bypass normal sound interface\n*\n*-------------------------------\nSK1Pitch = 15\nSK1Dur = 50\n\nGTONE ldy #SK1Pitch\n ldx #>SK1Pitch\n lda #SK1Dur\n jmp tone\n\n*-------------------------------\n*\n*  Whoop speaker (like RW18)\n*\n*-------------------------------\nWHOOP\n ldy #0\n:1 tya\n bit $c030\n:2 sec\n sbc #1\n bne :2\n dey\n bne :1\n]rts rts\n\n*-------------------------------\n*\n*  Produce tone\n*\n*  In: y-x = pitch lo-hi\n*      a = duration\n*\n*-------------------------------\ntone\n sty :pitch\n stx :pitch+1\n:outloop bit $c030\n ldx #0\n:midloop ldy #0\n:inloop iny\n cpy :pitch\n bcc :inloop\n inx\n cpx :pitch+1\n bcc :midloop\n sec\n sbc #1\n bne :outloop\n rts\n\n:pitch ds 2\n\n*-------------------------------\n*\n* Copy one hires page to the other\n*\n* In: PAGE = dest scrn (00/20)\n*\n*-------------------------------\nCOPYSCRN\n lda PAGE\n clc\n adc #$20\n sta IMAGE+1 ;dest addr\n eor #$60\n sta IMAGE ;org addr\n\n jmp copy2000\n\n*-------------------------------\n*\n*  Generate random number\n*\n*  RNDseed := (5 * RNDseed + 23) mod 256\n*\n*-------------------------------\nRND\n lda RNDseed\n asl\n asl\n clc\n adc RNDseed\n clc\n adc #23\n sta RNDseed\n]rts rts\n\n*-------------------------------\n*\n*  Calls to hires & master routines\n*\n*  Hires & master routines are in main lc & use main zp;\n*  rest of code uses aux lc, zp.\n*\n*-------------------------------\n*\n*  Master\n*\n*-------------------------------\nLOADLEVEL sta ALTZPoff ;main l.c.\n jsr _loadlevel\n sta ALTZPon ;aux l.c.\n rts\n\nATTRACTMODE sta ALTZPoff\n jsr _attractmode\n sta ALTZPon\n rts\n\nCUTPRINCESS sta ALTZPoff\n jsr _cutprincess\n sta ALTZPon\n rts\n\nRELOAD sta ALTZPoff\n jsr _reload\n sta ALTZPon\n rts\n\nLOADSTAGE2 sta ALTZPoff\n jsr _loadstage2\n sta ALTZPon\n rts\n\nSAVEGAME sta ALTZPoff\n jsr _savegame\n sta ALTZPon\n rts\n\nLOADGAME sta ALTZPoff\n jsr _loadgame\n sta ALTZPon\n rts\n\nDOSTARTGAME sta ALTZPoff\n jmp _dostartgame\n\nEPILOG sta ALTZPoff\n jmp _epilog\n\nLOADALTSET sta ALTZPoff\n jsr _loadaltset\n sta ALTZPon\n rts\n\nSCREENDUMP sta ALTZPoff\n jsr _screendump\n sta ALTZPon\n rts\n\n*-------------------------------\n*\n* Edmaster (editor disk only)\n*\n*-------------------------------\n do EditorDisk\n\nSAVELEVEL sta ALTZPoff\n jsr _savelevel\n sta ALTZPon\n rts\n\nSAVELEVELG sta ALTZPoff\n jsr _savelevelg\n sta ALTZPon\n rts\n\nREADDIR sta ALTZPoff\n jsr _readdir\n sta ALTZPon\n rts\n\nWRITEDIR sta ALTZPoff\n jsr _writedir\n sta ALTZPon\n rts\n\nGOBUILD sta ALTZPoff\n jsr _gobuild\n sta ALTZPon\n rts\n\nGOGAME sta ALTZPoff\n jsr _gogame\n sta ALTZPon\n rts\n\nEDREBOOT sta ALTZPoff\n jsr _edreboot\n sta ALTZPon\n rts\n\n else\nSAVELEVEL\nSAVELEVELG\nREADDIR\nWRITEDIR\nGOBUILD\nGOGAME\nEDREBOOT rts\n fin\n\n*-------------------------------\n*\n*  Hires\n*\n*-------------------------------\nCLS jsr prehr\n sta ALTZPoff\n jsr _cls\n sta ALTZPon\n rts\n\nLAY jsr prehr\n sta ALTZPoff\n jsr _lay\n sta ALTZPon\n rts\n\nFASTLAY jsr prehr\n sta ALTZPoff\n jsr _fastlay\n sta ALTZPon\n rts\n\nLAYRSAVE jsr prehr\n sta ALTZPoff\n jsr _layrsave\n sta ALTZPon\n jmp posthr\n\nLRCLS sta scrncolor ;In: A = screen color\n sta ALTZPoff\n jsr _lrcls\n sta ALTZPon\n rts\n\nFASTMASK jsr prehr\n sta ALTZPoff\n jsr _fastmask\n sta ALTZPon\n rts\n\nFASTBLACK jsr prehr\n sta ALTZPoff\n jsr _fastblack\n sta ALTZPon\n rts\n\nPEEL jsr prehr\n sta ALTZPoff\n jsr _peel\n sta ALTZPon\n rts\n\nGETWIDTH jsr prehr\n sta ALTZPoff\n jsr _getwidth\n sta ALTZPon\n rts\n\nCOPY2000 jsr prehr\n sta ALTZPoff\n jsr _copy2000\n sta ALTZPon\n rts\n\nCOPY2000AM jsr prehr\n sta ALTZPoff\n jsr _copy2000am\n sta ALTZPon\n rts\n\nCOPY2000MA jsr prehr\n sta ALTZPoff\n jsr _copy2000ma\n sta ALTZPon\n rts\n\nSETFASTAUX\n sta ALTZPoff\n jsr _setfastaux\n sta ALTZPon\n rts\n\nSETFASTMAIN\n sta ALTZPoff\n jsr _setfastmain\n sta ALTZPon\n rts\n\nINVERTY\n sta ALTZPoff\n jsr _inverty\n sta ALTZPon\n rts\n\n*-------------------------------\n*\n*  Call sound routines (in aux l.c. bank 1)\n*  Exit with bank 2 switched in\n*\n*-------------------------------\n]bank1in bit RWBANK1\n bit RWBANK1\n rts\n\nMINIT jsr ]bank1in\n jsr CALLMINIT\n]bank2in bit RWBANK2\n bit RWBANK2\n rts\n\nMPLAY jsr ]bank1in\n jsr CALLMPLAY\n jmp ]bank2in\n\n*-------------------------------\n*\n*  Call aux l.c. routines from MASTER (main l.c.)\n*\n*-------------------------------\nXMINIT sta ALTZPon\n jsr MINIT\n sta ALTZPoff\n rts\n\nXMPLAY sta ALTZPon\n jsr MPLAY\n sta ALTZPoff\n rts\n\nXTITLE sta ALTZPon\n jsr titlescreen\n sta ALTZPoff\n rts\n\nXPLAYCUT sta ALTZPon\n jsr playcut ;in subs\n sta ALTZPoff\n rts\n\nXMOVEMUSIC sta ALTZPon\n jsr movemusic ;in misc\n sta ALTZPoff\n rts\n\n*-------------------------------\n*\n* Copy hires params from aux to main z.p.\n*\n* (Enter & exit w/ ALTZP on)\n*\n*-------------------------------\nprehr\n ldx #$17\n:loop sta ALTZPon ;aux zp\n lda $00,x\n sta ALTZPoff ;main zp\n sta $00,x\n dex\n bpl :loop\n sta ALTZPon\n rts\n\n*-------------------------------\n*\n* Copy hires params from main to aux z.p.\n*\n* (Enter & exit w/ ALTZP on)\n*\n*-------------------------------\nposthr\n ldx #$17\n:loop sta ALTZPoff\n lda $00,x\n sta ALTZPon\n sta $00,x\n dex\n bpl :loop\n]rts rts\n\n*-------------------------------\n*\n*  Save master copy of blueprint in l.c. bank 1\n*\n*-------------------------------\nSAVEBLUE\n jsr ]bank1in\n lda #>$d700\n ldx #>$b700\n ldy #>$b700+$900\n jsr movemem\n jmp ]bank2in\n\nSAVEBINFO\n jsr ]bank1in\n lda #>$d000\n ldx #>$a600\n ldy #>$a600+$600\n jsr movemem\n jmp ]bank2in\n\n*-------------------------------\n*\n* Reload master copy of blueprint from l.c. bank 1\n*\n*-------------------------------\nRELOADBLUE\n jsr ]bank1in\n lda #>$b700\n ldx #>$d700\n ldy #>$d700+$900\n jsr movemem\n jmp ]bank2in\n\nRELOADBINFO\n jsr ]bank1in\n lda #>$a600\n ldx #>$d000\n ldy #>$d000+$600\n jsr movemem\n jmp ]bank2in\n\n*-------------------------------\n*\n*  Display lo-res page 1\n*\n*-------------------------------\nGR jmp gtone ;temp!\n\n*-------------------------------\n* The following routines properly belong to FRAMEADV\n* but have been moved here for lack of space\n*-------------------------------\n*\n*  C A L C   B L U E\n*\n*  Given:  screen #, 1-24 (in acc)\n*  Return: start of BLUETYPE table (in BlueType)\n*          start of BLUESPEC table (in BlueSpec)\n*\n*  If A = 0...\n*    In game: returns garbage\n*    In builder: returns menu data\n*\n*-------------------------------\nCALCBLUE\n cmp #0\n beq calcmenu\n\n sec\n sbc #1 ;reduce to 0-23\n asl\n tax ;x2\n\n lda Mult30,x\n clc\n adc #blueprnt\n sta BlueType\n\n lda Mult30+1,x\n adc #>blueprnt\n sta BlueType+1\n\n lda BlueType\n clc\n adc #24*30\n sta BlueSpec\n\n lda BlueType+1\n adc #>24*30\n sta BlueSpec+1\n\n]rts rts\n\ncalcmenu\n lda #menutype\n sta BlueType\n lda #>menutype\n sta BlueType+1\n\n lda #menuspec\n sta BlueSpec\n lda #>menuspec\n sta BlueSpec+1\n rts\n\n*-------------------------------\n*\n*  Z E R O   R E D\n*\n*  zero redraw buffers\n*\n*-------------------------------\nZERORED\n lda #0\n ldy #29\n:loop sta redbuf,y\n sta fredbuf,y\n sta floorbuf,y\n sta halfbuf,y\n sta wipebuf,y\n sta movebuf,y\n sta objbuf,y\n dey\n bpl :loop\n\n ldy #9\n:loop2 sta topbuf,y\n dey\n bpl :loop2\n\n rts\n\n*-------------------------------\n*\n*  Routines to interface with MSYS (Music System II)\n*\n*-------------------------------\n*\n* Switch zero page\n*\n*-------------------------------\nswitchzp\n ldx #31\n:loop ldy savezp,x\n lda $00,x\n sta savezp,x\n tya\n sta $00,x\n dex\n bpl :loop\n rts\n\n*-------------------------------\n*\n*  Call MINIT\n*\n*  In: A = song #\n*\n*-------------------------------\nCALLMINIT\n pha\n jsr switchzp\n pla\n jsr _minit\n jmp switchzp\n\n*-------------------------------\n*\n*  Call MPLAY\n*\n*  Out: A = song #\n*  (Most songs set song # = 0 when finished)\n*\n*-------------------------------\nCALLMPLAY\n lda soundon\n and musicon\n beq :silent\n\n jsr switchzp\n jsr _mplay ;returns INDEX\n pha\n jsr switchzp\n pla\n rts\n\n:silent lda #0\n]rts rts\n\n*-------------------------------\n*\n*  M U S I C   K E Y S\n*\n*  Call while music is playing\n*\n*  Esc to pause, Ctrl-S to turn sound off\n*  Return A = ASCII value (FF for button)\n*  Clear hibit if it's a key we've handled\n*\n*-------------------------------\nMUSICKEYS\n lda $c000\n sta keypress\n bpl :nokey\n sta $c010\n\n cmp #ESC\n bne :cont\n:froze lda $c000\n sta keypress\n bpl :froze\n sta $c010\n cmp #ESC\n bne :cont\n and #$7f\n rts\n\n:cont cmp #ksound\n bne :3\n lda soundon\n eor #1\n sta soundon\n:21 beq :2\n jsr gtone\n:2 lda #0\n rts\n\n:3 cmp #kmusic\n bne :1\n lda musicon\n eor #1\n sta musicon\n jmp :21\n\n:nobtn lda keypress\n rts\n:1\n:nokey lda $c061\n ora $c062\n bpl :nobtn\n lda #$ff\n]rts rts\n\n*===============================\nvblflag ds 1\n*-------------------------------\n*\n* Wait for vertical blank (IIe/IIGS)\n*\n*-------------------------------\nVBLANK\n:loop1 lda $c019\n bpl :loop1\n:loop lda $c019\n bmi :loop ;wait for beginning of VBL interval\n]rts rts\n\n*-------------------------------\n*\n* Wait for vertical blank (IIc)\n*\n*-------------------------------\nVBLANKIIc\n cli ;enable interrupts\n\n:loop1 bit vblflag\n bpl :loop1 ;wait for vblflag = 1\n lsr vblflag ;...& set vblflag = 0\n\n:loop2 bit vblflag\n bpl :loop2\n lsr vblflag\n\n sei\n rts\n\n* Interrupt jumps to ($FFFE) which points back to VBLI\n\nVBLI\n bit $c019\n sta $c079 ;enable IOU access\n sta $c05b ;enable VBL int\n sta $c078 ;disable IOU access\n sec\n ror vblflag ;set hibit\n:notvbl rti\n\n*-------------------------------\n*\n* Initialize VBLANK vector with correct routine\n* depending on whether or not machine is IIc\n*\n*-------------------------------\nInitVBLANK\n lda $FBC0\n bne ]rts ;not a IIc--use VBLANK\n\n sta RAMWRTaux\n\n lda #VBLANKIIc\n sta VBLvect+1\n lda #>VBLANKIIc\n sta VBLvect+2\n\n sei ;disable interrupts\n sta $c079 ;enable IOU access\n sta $c05b ;enable VBL int\n sta $c078 ;disable IOU access\n\n]rts rts\n\n*-------------------------------\n*\n*  Is this a IIGS?\n*\n*  Out: IIGS (0 = no, 1 = yes)\n*       If yes, set control panel to default settings\n*       Exit w/RAM bank 2 switched in\n*\n*  Also initializes VBLANK routine\n*\n*-------------------------------\nCHECKIIGS\n do EditorDisk\n else\n\n bit USEROM\n bit USEROM\n\n lda $FBB3\n cmp #6\n bne * ;II/II+/III--we shouldn't even be here\n sec\n jsr $FE1F\n bcs :notGS\n\n lda #1\n bne :set\n\n:notGS lda #0\n:set sta IIGS\n\n jsr InitVBLANK\n\n bit RWBANK2\n bit RWBANK2\n]rts rts\n\n*-------------------------------\n*\n*  Temporarily set fast speed (IIGS)\n*\n*-------------------------------\n xc\nFASTSPEED\n lda IIGS\n beq ]rts\n\n lda #$80\n tsb $C036 ;fast speed\n]rts rts\n\n*-------------------------------\n*\n* Restore speed to normal (& bg & border to black)\n*\n*-------------------------------\nNORMSPEED\n lda IIGS\n beq ]rts\n\n xc\n lda $c034\n and #$f0\n sta $c034 ;black border\n\n lda #$f0\n sta $c022 ;black bg, white text\n\n lda #$80\n trb $c036 ;normal speed\n xc off\n\n rts\n\n*-------------------------------\n*\n*  Read control panel parameter (IIGS)\n*\n*  In: Y = location\n*  Out: A = current setting\n*\n*-------------------------------\n xc\n xc\ngetparam\n lda IIGS\n beq ]rts\n\n clc\n xce\n rep $30\n pha\n phy\n ldx #$0C03\n hex 22,00,00,E1 ;jsl E10000\n pla\n sec\n xce\n tay\n rts\n\n*-------------------------------\n*\n* Set control panel parameter (IIGS only)\n*\n* In: A = desired value, Y = location\n*\n*-------------------------------\nsetparam\n clc\n xce\n rep $30\n and #$ff\n pha\n phy\n ldx #$B03\n hex 22,00,00,E1 ;jsl E10000\n sec\n xce\n rts\n\n xc off\n\n*-------------------------------\n lst\neof ds 1\n usr $a9,4,$0000,*-org\n lst off\n"
  },
  {
    "path": "04 Support/MakeDisk/S/GRAFIX525.S",
    "content": "* grafix\nCopyProtect = 1\nEditorDisk = 0\norg = $400\n tr on\n lst off\n lstdo off\n*-------------------------------\n*\n*  PRINCE OF PERSIA\n*  Copyright 1989 Jordan Mechner\n*\n*-------------------------------\n org org\n\n jmp GR\n jmp DRAWALL\n jmp CONTROLLER\n jmp dispversion\n jmp SAVEBLUE\n\n jmp RELOADBLUE\n jmp MOVEMEM\n jmp BUTTONS ;ed\n jmp GTONE\n jmp SETCENTER\n\n jmp DIMCHAR\n jmp CVTX\n jmp ZEROPEEL\n jmp ZEROPEELS\n jmp PREAD\n\n jmp ADDPEEL\n jmp COPYSCRN\n jmp SNGPEEL\n jmp RND\n jmp CLS\n\n jmp LAY\n jmp FASTLAY\n jmp LAYRSAVE\n jmp LRCLS\n jmp FASTMASK\n\n jmp FASTBLACK\n jmp PEEL\n jmp GETWIDTH\n jmp COPY2000\n jmp COPY2000MA\n\n jmp SETFASTAUX\n jmp SETFASTMAIN\n jmp LOADLEVEL\n jmp ATTRACTMODE\n jmp XMINIT\n\n jmp XMPLAY\n jmp CUTPRINCESS\n jmp XTITLE\n jmp COPY2000AM\n jmp RELOAD\n\n jmp LOADSTAGE2\n jmp RELOAD\n jmp GETSELECT\n jmp GETDESEL\n jmp EDREBOOT ;ed\n\n jmp GOBUILD ;ed\n jmp GOGAME ;ed\n jmp WRITEDIR ;ed\n jmp READDIR ;ed\n jmp SAVELEVEL ;ed\n\n jmp SAVELEVELG ;ed\n jmp ADDBACK\n jmp ADDFORE\n jmp ADDMID\n jmp ADDMIDEZ\n\n jmp ADDWIPE\n jmp ADDMSG\n jmp SAVEGAME\n jmp LOADGAME\n jmp ZEROLSTS\n\n jmp SCREENDUMP\n jmp MINIT\n jmp MPLAY\n jmp SAVEBINFO\n jmp RELOADBINFO\n\n jmp INVERTY\n jmp NORMSPEED\n jmp ADDMIDEZO\n jmp CALCBLUE\n jmp ZERORED\n\n jmp XPLAYCUT\n jmp CHECKIIGS\n jmp FASTSPEED\n jmp MUSICKEYS\n jmp DOSTARTGAME\n\n jmp EPILOG\n jmp LOADALTSET\n jmp XMOVEMUSIC\n jmp WHOOP\nVBLvect jmp VBLANK ;changed by InitVBLANK if IIc\n\n jmp VBLI ;VBL interrupt\n\n*-------------------------------\n lst\n put eq\n lst\n put gameeq\n lst\n put soundnames\n lst off\n*-------------------------------\n dum locals\n]temp\n]dest ds 2\n]source ds 2\n]endsourc ds 2\nindex ds 1\n\n dend\n\n*-------------------------------\n*  Apple soft switches\n\nIOUDISoff = $c07f\nIOUDISon = $c07e\nDHIRESoff = $c05f\nDHIRESon = $c05e\nHIRESon = $c057\nHIRESoff = $c056\nPAGE2on = $c055\nPAGE2off = $c054\nMIXEDon = $c053\nMIXEDoff = $c052\nTEXTon = $c051\nTEXToff = $c050\nALTCHARon = $c00f\nALTCHARoff = $c00e\nADCOLon = $c00d\nADCOLoff = $c00c\nALTZPon = $c009\nALTZPoff = $c008\nRAMWRTaux = $c005\nRAMWRTmain = $c004\nRAMRDaux = $c003\nRAMRDmain = $c002\nADSTOREon = $c001\nADSTOREoff = $c000\nRWBANK2 = $c083\nRWBANK1 = $c08b\nUSEROM = $c082\n\n*-------------------------------\n*  Key equates\n\nCTRL = $60\nESC = $9b\nDELETE = $7f\nSHIFT = $20\n\nksound = \"s\"-CTRL\nkmusic = \"n\"-CTRL\n\n*-------------------------------\n*  Joystick \"center\" width (increase for bigger center)\n\ncwidthx = 10 ;15\ncwidthy = 15 ;21\n\n*-------------------------------\n*  Addresses of character image tables\n*  (Bank: 2 = main, 3 = aux)\n\nchtabbank db 2,2,2,3,2,3,3\n\nchtablist db #>chtable1,#>chtable2,#>chtable3,#>chtable4\n db #>chtable5,#>chtable6,#>chtable7\n\ndummy db maxpeel,maxpeel\n\n*-------------------------------\n*\n*  A D D B A C K\n*\n*  Add an image to BACKGROUND image list\n*\n*  In: XCO, YCO, IMAGE (coded), OPACITY\n*\n*  IMAGE bit 7 specifies image table (0 = bgtable1,\n*  1 = bgtable2); low 6 bits = image # within table\n*\n*-------------------------------\nADDBACK ldx bgX ;# images already in list\n inx\n cpx #maxback\n bcs :rts ;list full (shouldn't happen)\n\n lda XCO\n sta bgX,x\n\n lda YCO\n cmp #192\n bcs :rts\n sta bgY,X\n\n lda IMAGE\n sta bgIMG,X\n\n lda OPACITY\n sta bgOP,X\n\n stx bgX\n:rts\n]rts rts\n\n*-------------------------------\n*\n*  A D D F O R E\n*\n*  Add an image to FOREGROUND image list\n*\n*  In: same as ADDBACK\n*\n*-------------------------------\nADDFORE ldx fgX\n inx\n cpx #maxfore\n bcs ]rts\n\n lda XCO\n sta fgX,X\n\n lda YCO\n cmp #192\n bcs ]rts\n sta fgY,X\n\n lda IMAGE\n sta fgIMG,X\n\n lda OPACITY\n sta fgOP,X\n\n stx fgX\n]rts rts\n\n*-------------------------------\n*\n*  A D D M S G\n*\n*  Add an image to MESSAGE image list (uses bg tables)\n*\n*  In:  XCO, OFFSET, YCO, IMAGE (coded), OPACITY (bit 6 coded)\n*\n*-------------------------------\nADDMSG ldx msgX\n inx\n cpx #maxmsg\n bcs ]rts\n\n lda XCO\n sta msgX,X\n lda OFFSET\n sta msgOFF,X\n\n lda YCO\n sta msgY,X\n\n lda IMAGE\n sta msgIMG,X\n\n lda OPACITY\n sta msgOP,X\n\n stx msgX\n]rts rts\n\n*-------------------------------\n*\n*  A D D  W I P E\n*\n*  Add image to wipe list\n*\n*  In: XCO, YCO, height, width; A = color\n*\n*-------------------------------\nADDWIPE ldx wipeX\n inx\n cpx #maxwipe\n bcs ]rts\n\n sta wipeCOL,x\n lda blackflag ;TEMP\n beq :1 ;\n lda #$ff ;\n sta wipeCOL,x ;\n:1\n lda XCO\n sta wipeX,x\n lda YCO\n sta wipeY,x\n\n lda height\n sta wipeH,x\n lda width\n sta wipeW,x\n\n stx wipeX\n]rts rts\n\n*-------------------------------\n*\n*  A D D   M I D\n*\n*  Add an image to mid table\n*\n*  In:  XCO, OFFSET, YCO, IMAGE, TABLE, OPACITY\n*       FCharFace, FCharCU-CD-CL-CR\n*       A = midTYP\n*\n*  midTYP bit 7: 1 = char tables, 0 = bg tables\n*  midTYP bits 0-6:\n*    0 = use fastlay (normal for floorpieces)\n*    1 = use lay alone\n*    2 = use lay with layrsave (normal for characters)\n*\n*  For char tables: IMAGE = image #, TABLE = table #\n*  For bg tables: IMAGE bits 0-6 = image #, bit 7 = table #\n*\n*-------------------------------\nADDMID ldx midX\n inx\n cpx #maxmid\n bcs ]rts\n\n sta midTYP,x\n\n lda XCO\n sta midX,x\n lda OFFSET\n sta midOFF,x\n\n lda YCO\n sta midY,x\n\n lda IMAGE\n sta midIMG,x\n\n lda TABLE\n sta midTAB,x\n\n lda FCharFace ;- left, + right\n eor #$ff ;+ normal, - mirror\n and #$80\n ora OPACITY\n sta midOP,x\n\n lda FCharCU\n sta midCU,x\n lda FCharCD\n sta midCD,x\n lda FCharCL\n sta midCL,x\n lda FCharCR\n sta midCR,x\n\n stx midX\n]rts rts\n\n*-------------------------------\n*\n*  ADDMID \"E-Z\" version\n*\n*  No offset, no mirroring, no cropping\n*\n*  In: XCO, YCO, IMAGE, TABLE, OPACITY\n*      A = midTYP\n*\n*-------------------------------\nADDMIDEZ lda #0\n sta OFFSET\nADDMIDEZO\n ldx midX\n inx\n cpx #maxmid\n bcs ]rts\n\n sta midTYP,x\n\n lda XCO\n sta midX,x\n lda OFFSET\n sta midOFF,x\n\n lda YCO\n sta midY,x\n\n lda IMAGE\n sta midIMG,x\n\n lda TABLE\n sta midTAB,x\n\n lda OPACITY\n sta midOP,x\n\n lda #0\n sta midCU,x\n sta midCL,x\n lda #40\n sta midCR,x\n lda #192\n sta midCD,x\n\n stx midX\n]rts rts\n\n*-------------------------------\n*\n*  A D D P E E L\n*\n*  (Call immediately after layrsave)\n*  Add newly generated image to peel list\n*\n*-------------------------------\nADDPEEL lda PEELIMG+1\n beq ]rts ;0 is layersave's signal to skip it\n\n lda PAGE\n beq :1\n\n do CopyProtect\n ldx purpleflag ;should be 1!\n lda dummy,x\n\n else\n lda #maxpeel\n fin\n\n:1 sta :sm+1 ;self-mod\n\n tax\n lda peelX,x ;# of images in peel list\n clc\n adc #1\n cmp #maxpeel\n bcs ]rts\n sta peelX,x\n clc\n:sm adc #0 ;0/maxpeel\n tax\n\n lda PEELXCO\n sta peelX,x\n lda PEELYCO\n sta peelY,x ;x & y coords of saved image\n\n lda PEELIMG\n sta peelIMGL,x\n lda PEELIMG+1\n sta peelIMGH,x ;2-byte image address (in peel buffer)\n\n]rts rts\n\n*-------------------------------\n*\n*  D R A W A L L\n*\n*  Draw everything in image lists\n*\n*  This is the only routine that calls HIRES routines.\n*\n*-------------------------------\nDRAWALL\n jsr DOGEN ;Do general stuff like cls\n\n lda blackflag ;TEMP\n bne :1 ;\n\n jsr SNGPEEL ;\"Peel off\" characters\n;(using the peel list we\n;set up 2 frames ago)\n\n:1 jsr ZEROPEEL ;Zero just-used peel list\n\n jsr DRAWWIPE ;Draw wipes\n\n jsr DRAWBACK ;Draw background plane images\n\n jsr DRAWMID ;Draw middle plane images\n;(& save underlayers to now-clear peel list)\n\n jsr DRAWFORE ;Draw foreground plane images\n\n jmp DRAWMSG ;Draw messages\n\n*-------------------------------\n*\n*  D O  G E N\n*\n*  Do general stuff like clear screen\n*\n*-------------------------------\nDOGEN\n lda genCLS\n beq :1\n jsr cls\n\n* purple copy-protection\n\n:1 ldx BGset1\n cpx #1\n bne ]rts\n lda #0\n sta dummy-1,x\n\n]rts rts\n\n*-------------------------------\n*\n*  D R A W W I P E\n*\n*  Draw wipe list (using \"fastblack\")\n*\n*-------------------------------\nDRAWWIPE\n lda wipeX ;# of images in list\n beq ]rts ;list is empty\n\n lda #1 ;start with image #1\n:loop pha\n tax\n\n lda wipeH,x\n sta IMAGE ;height\n lda wipeW,x\n sta IMAGE+1 ;width\n lda wipeX,X\n sta XCO ;x-coord\n lda wipeY,X\n sta YCO ;y-coord\n lda wipeCOL,X\n sta OPACITY ;color\n jsr fastblack\n\n pla\n clc\n adc #1\n cmp wipeX\n bcc :loop\n beq :loop\n]rts rts\n\n*-------------------------------\n*\n*  D R A W B A C K\n*\n*  Draw b.g. list (using fastlay)\n*\n*-------------------------------\nDRAWBACK lda bgX ;# of images in list\n beq ]rts\n\n ldx #1\n:loop stx index\n\n lda bgIMG,x\n sta IMAGE ;coded image #\n jsr setbgimg ;extract TABLE, BANK, IMAGE\n\n lda bgX,x\n sta XCO\n lda bgY,X\n sta YCO\n lda bgOP,x\n sta OPACITY\n jsr fastlay\n\n ldx index\n inx\n cpx bgX\n bcc :loop\n beq :loop\n]rts rts\n\n*-------------------------------\n*\n*  D R A W F O R E\n*\n*  Draw foreground list (using fastmask/fastlay)\n*\n*-------------------------------\nDRAWFORE lda fgX\n beq ]rts\n\n ldx #1\n:loop stx index\n\n lda fgIMG,x\n sta IMAGE\n jsr setbgimg\n\n lda fgX,x\n sta XCO\n lda fgY,x\n sta YCO\n\n lda fgOP,x ;opacity\n cmp #mask\n bne :1\n jsr fastmask\n jmp :cont\n\n:1 sta OPACITY ;fastlay for everything else\n jsr fastlay\n\n:cont ldx index\n inx\n cpx fgX\n bcc :loop\n beq :loop\n]rts rts\n\n*-------------------------------\n*\n*  S N G   P E E L\n*\n*  Draw peel list (in reverse order) using \"peel\" (fastlay)\n*\n*-------------------------------\nSNGPEEL\n ldx PAGE\n beq :1\n ldx #maxpeel\n:1 stx :sm+1\n lda peelX,x ;# of images in list\n beq ]rts\n\n:loop pha\n clc\n:sm adc #0 ;self-mod: 0 or maxpeel\n tax\n\n lda peelIMGL,x\n sta IMAGE\n lda peelIMGH,x\n sta IMAGE+1\n lda peelX,x\n sta XCO\n lda peelY,x\n sta YCO\n lda #sta\n sta OPACITY\n jsr peel\n\n pla\n sec\n sbc #1\n bne :loop\n]rts rts\n\n*-------------------------------\n*\n*  D R A W M I D\n*\n*  Draw middle list (floorpieces & characters)\n*\n*-------------------------------\nDRAWMID\n lda midX ;# of images in list\n beq ]rts\n\n ldx #1\n:loop stx index\n\n lda midIMG,x\n sta IMAGE\n lda midTAB,x\n sta TABLE\n lda midX,x\n sta XCO\n lda midY,x\n sta YCO\n lda midOP,x\n sta OPACITY\n\n lda midTYP,x ;+ use bg tables\n bmi :UseChar ;- use char tables\n jsr setbgimg ;protects A,X\n jmp :GotTable\n\n:UseChar jsr setcharimg ;protects A,X\n\n:GotTable ;A = midTYP,x\n and #$7f ;low 7 bits: 0 = fastlay, 1 = lay, 2 = layrsave\n beq :fastlay\n cmp #1\n beq :lay\n cmp #2\n beq :layrsave\n\n:Done ldx index\n inx\n cpx midX\n bcc :loop\n beq :loop\n]rts rts\n\n* midTYP values:\n*    0 = use fastlay (normal for floorpieces)\n*    1 = use lay alone\n*    2 = use lay with layrsave (normal for characters)\n\n:fastlay\n jsr fastlay\n jmp :Done\n\n:layrsave\n jsr :setaddl ;set additional params for lay\n\n jsr layrsave ;save underlayer in peel buffer\n jsr ADDPEEL ;& add to peel list\n\n jsr lay ;then lay down image\n\n jmp :Done\n\n:lay jsr :setaddl\n jsr lay\n jmp :Done\n\n:setaddl lda midOFF,x\n sta OFFSET\n lda midCL,x\n sta LEFTCUT\n lda midCR,x\n sta RIGHTCUT\n lda midCU,x\n sta TOPCUT\n lda midCD,x\n sta BOTCUT\n rts\n\n*-------------------------------\n*\n*  D R A W M S G\n*\n*  Draw message list (using bg tables & lay)\n*\n*  OPACITY bit 6: 1 = layrsave, 0 = no layrsave\n*\n*-------------------------------\nDRAWMSG\n lda msgX\n beq ]rts\n\n ldx #1\n:loop stx index\n\n lda msgIMG,x\n sta IMAGE\n jsr setbgimg\n\n lda msgX,x\n sta XCO\n lda msgOFF,x\n sta OFFSET\n lda msgY,x\n sta YCO\n\n lda #0\n sta LEFTCUT\n sta TOPCUT\n lda #40\n sta RIGHTCUT\n lda #192\n sta BOTCUT\n\n lda msgOP,x\n sta OPACITY\n and #%01000000\n beq :1\n lda OPACITY\n and #%10111111 ;bit 6 set: use layrsave\n sta OPACITY\n\n jsr layrsave\n jsr ADDPEEL\n\n:1 jsr lay\n\n ldx index\n inx\n cpx msgX\n bcc :loop\n beq :loop\n]rts rts\n\n*-------------------------------\n*\n*  S E T   B  G   I M A G E\n*\n*  In: IMAGE = coded image #\n*  Out: BANK, TABLE, IMAGE set for hires call\n*\n*  Protect A,X\n*\n*-------------------------------\nsetbgimg\n tay\n\n lda #3 ;auxmem\n sta BANK\n\n lda #0\n sta TABLE\n\n lda IMAGE ;Bit 7: 0 = bgtable1, 1 = bgtable2\n bpl :bg1\n\n and #$7f\n sta IMAGE\n\n lda #>bgtable2\n bne :ok\n\n:bg1 lda #>bgtable1\n:ok sta TABLE+1\n\n tya\n rts\n\n*-------------------------------\n*\n*  S E T   C H A R   I M A G E\n*\n*  In: TABLE = chtable # (0-7)\n*  Out: BANK, TABLE set for hires call\n*\n*  Protect A,X\n*\n*-------------------------------\nsetcharimg\n pha\n\n ldy TABLE\n lda chtabbank,y\n sta BANK\n\n lda #0\n sta TABLE\n lda chtablist,y\n sta TABLE+1\n\n pla\n rts\n\n*-------------------------------\n*\n*  D I M C H A R\n*\n*  Get dimensions of character\n*  (Misc. routine for use by CTRL)\n*\n*  In: A = image #, X = table #\n*  Out: A = width, X = height\n*\n*-------------------------------\nDIMCHAR\n sta IMAGE\n stx TABLE\n jsr setcharimg\n jmp getwidth\n\n*-------------------------------\n*\n*  C V T X\n*\n*  Convert X-coord to byte & offset\n*  Works for both single & double hires\n*\n*  In: XCO/OFFSET = X-coord (2 bytes)\n*  Out: XCO/OFFSET = byte/offset\n*\n*  Hires scrn: X-coord range 0-279, byte range 0-39\n*  Dbl hires scrn: X-coord range 0-559, byte range 0-79\n*\n*  Trashes Y-register\n*\n*  Returns accurate results for all input (-32767 to 32767)\n*  but wildly offscreen values will slow it down\n*\n*-------------------------------\n]XL = XCO\n]XH = OFFSET\n\nrange = 36*7 ;largest multiple of 7 under 256\n\nCVTX\n lda #0\n sta ]temp\n\n lda ]XH\n bmi :negative ;X < 0\n beq :ok ;0 <= X <= 255\n\n:loop lda ]temp\n clc\n adc #36\n sta ]temp\n\n lda ]XL\n sec\n sbc #range\n sta ]XL\n\n lda ]XH\n sbc #0\n sta ]XH\n\n bne :loop\n\n:ok ldy ]XL\n lda ByteTable,y\n clc\n adc ]temp\n sta XCO\n\n lda OffsetTable,y\n sta OFFSET\n rts\n\n:negative\n lda ]temp\n sec\n sbc #36\n sta ]temp\n\n lda ]XL\n clc\n adc #range\n sta ]XL\n\n lda ]XH\n adc #0\n sta ]XH\n bne :negative\n beq :ok\n]rts rts\n\n*-------------------------------\n*\n*  Z E R O L I S T S\n*\n*  Zero image lists (except peel lists)\n*\n*-------------------------------\nZEROLSTS lda #0\n sta genCLS\n sta wipeX\n sta bgX\n sta midX\n sta objX\n sta fgX\n sta msgX\n rts\n\n*-------------------------------\n*\n*  Zero both peel lists\n*\n*-------------------------------\nZEROPEELS\n lda #0\n sta peelX\n sta peelX+maxpeel\n]rts rts\n\n*-------------------------------\n*\n*  Z E R O P E E L\n*\n*  Zero peel list & buffer for whichever page we're on\n*\n*  (Point PEELBUF to beginning of appropriate peel buffer\n*  & set #-of-images byte to zero)\n*\n*-------------------------------\nZEROPEEL\n lda #0\n ldx PAGE\n beq :page1\n:page2 sta peelX+maxpeel\n lda #peelbuf2\n sta PEELBUF\n lda #>peelbuf2\n sta PEELBUF+1\n rts\n\n:page1 sta peelX\n lda #peelbuf1\n sta PEELBUF\n lda #>peelbuf1\n sta PEELBUF+1\n rts\n\n*-------------------------------\n*\n*  Joystick/keyboard routines\n*\n*-------------------------------\n*\n*  Get input from selected/deselected device\n*\n*  In: kbdX, kbdY, joyX, joyY, BTN0, BTN1, ManCtrl\n*\n*  Out: JSTKX, JSTKY, btn\n*\n*-------------------------------\nGETSELECT\n lda joyon ;joystick selected?\n bne getjoy ;yes--use jstk\n beq getkbd ;no--use kbd\n\nGETDESEL\n lda joyon\n bne getkbd\n beq getjoy\n\ngetjoy lda joyX\n sta JSTKX\n lda joyY\n sta JSTKY\n\n lda BTN1\n ldx ManCtrl ;When manual ctrl is on, btn 0 belongs\n bmi :1 ;to kbd and btn 1 to jstk.  With manual ctrl\n ora BTN0 ;off, btns can be used interchangeably.\n:1 sta btn\n rts\n\ngetkbd lda kbdX\n sta JSTKX\n lda kbdY\n sta JSTKY\n\n lda BTN0\n ldx ManCtrl\n bmi :1\n ora BTN1\n:1 sta btn\n]rts rts\n\n*-------------------------------\n*\n*  Read controller (jstk & buttons)\n*\n*  Out: joyX-Y, BTN0-1\n*\n*-------------------------------\nCONTROLLER\n jsr JREAD ;read jstk\n\n jmp BREAD ;& btns\n\n*-------------------------------\n*\n*  Read joystick\n*\n*  Out: joyX-Y\n*\n*  joyX: -1 = left, 0 = center, +1 = right\n*  joyY: -1 = up, 0 = center, +1 = down\n*\n*-------------------------------\nJREAD\n lda joyon\n beq ]rts\n jsr PREAD ;read game pots\n\n ldx #0\n jsr cvtpdl\n inx\n jsr cvtpdl\n\n* Reverse joyY?\n\n lda jvert\n beq :1\n\n lda #0\n sec\n sbc joyY\n sta joyY\n\n* Reverse joyX?\n\n:1 lda jhoriz\n beq ]rts\n\n lda #0\n sec\n sbc joyX\n sta joyX\n]rts rts\n\n*-------------------------------\n*\n*  Read buttons\n*\n*  Out: BTN0-1\n*\n*-------------------------------\nBREAD\n lda jbtns\n bne :1 ;buttons switched\n\n lda $c061\n ldx $c062\n:2 sta BTN0\n stx BTN1\n rts\n\n:1 ldx $c062\n lda $c061\n jmp :2\n\n*-------------------------------\n*\n*  (Temp routine--for builder only)\n*\n*-------------------------------\nBUTTONS\n do EditorDisk\n ldx BTN0 ;\"raw\"\n lda #0\n sta BUTT0\n lda b0down ;last button value\n stx b0down\n and #$80\n bne :rdbtn1\n stx BUTT0\n\n:rdbtn1 ldx BTN1\n lda #0\n sta BUTT1\n lda b1down\n stx b1down\n and #$80\n bne :rdjup\n stx BUTT1\n\n:rdjup lda joyY\n bmi ]rts\n lda #0\n sta JSTKUP ;jstk is not up--clear JSTKUP\n fin\n\n]rts rts\n\n*-------------------------------\n*\n*  Convert raw counter value (approx. 0-70) to -1/0/1\n*\n*  In: X = paddle # (0 = horiz, 1 = vert)\n*\n*-------------------------------\ncvtpdl\n lda joyX,x\n cmp jthres1x,x\n bcs :1\n lda #-1\n bne :3\n:1 cmp jthres2x,x\n bcs :2\n lda #0\n beq :3\n:2 lda #1\n:3 sta joyX,x\n]rts rts\n\n*-------------------------------\n*\n*  Read game pots\n*\n*  Out: Raw counter values (approx. 0-70) in joyX-Y\n*\n*-------------------------------\nPREAD\n lda #0\n sta joyX\n sta joyY\n\n lda $c070 ;Reset timers\n\n:loop ldx #1\n:1 lda $c064,x ;Check timer input\n bpl :beat\n inc joyX,x ;Still high; increment counter\n:nextpdl dex\n bpl :1\n\n lda $C064\n ora $C065\n bpl ]rts ;Both inputs low: we're done\n\n lda joyX\n ora joyY\n bpl :loop ;Do it again\n]rts rts\n\n:beat nop\n bpl :nextpdl ;Kill time\n\n*-------------------------------\n*\n*  Select jstk & define current joystick posn as center\n*\n*  Out: jthres1-2x, jthres1-2y\n*\n*-------------------------------\nSETCENTER\n lda #$ff\n sta joyon ;Joystick on\n\n lda #0\n sta jvert\n sta jhoriz\n sta jbtns ;set normal params\n\n jsr PREAD ;get raw jstk values\n\n lda joyX\n ora joyY\n bmi :nojoy ;No joystick connected\n\n lda joyX\n sec\n sbc #cwidthx\n sta jthres1x\n lda joyX\n clc\n adc #cwidthx\n sta jthres2x\n\n lda joyY\n sec\n sbc #cwidthy\n sta jthres1y\n lda joyY\n clc\n adc #cwidthy\n sta jthres2y\n rts\n\n:nojoy lda #0\n sta joyon\n]rts rts\n\n*-------------------------------\n*\n*  Move a block of memory\n*\n*  In: A < X.Y\n*\n*  20 < 40.60 means 2000 < 4000.5fffm\n*  WARNING: If x >= y, routine will wipe out 64k\n*\n*-------------------------------\nMOVEMEM sta ]dest+1\n stx ]source+1\n sty ]endsourc+1\n\n ldy #0\n sty ]dest\n sty ]source\n sty ]endsourc\n\n:loop lda (]source),y\n sta (]dest),y\n iny\n bne :loop\n\n inc ]source+1\n inc ]dest+1\n lda ]source+1\n cmp ]endsourc+1\n bne :loop\n rts\n\n*-------------------------------\n*\n*  G  T  O  N  E\n*\n*  Call this routine to confirm special-key presses\n*  & any other time we want to bypass normal sound interface\n*\n*-------------------------------\nSK1Pitch = 15\nSK1Dur = 50\n\nGTONE ldy #SK1Pitch\n ldx #>SK1Pitch\n lda #SK1Dur\n jmp tone\n\n*-------------------------------\n*\n*  Whoop speaker (like RW18)\n*\n*-------------------------------\nWHOOP\n ldy #0\n:1 tya\n bit $c030\n:2 sec\n sbc #1\n bne :2\n dey\n bne :1\n]rts rts\n\n*-------------------------------\n*\n*  Produce tone\n*\n*  In: y-x = pitch lo-hi\n*      a = duration\n*\n*-------------------------------\ntone\n sty :pitch\n stx :pitch+1\n:outloop bit $c030\n ldx #0\n:midloop ldy #0\n:inloop iny\n cpy :pitch\n bcc :inloop\n inx\n cpx :pitch+1\n bcc :midloop\n sec\n sbc #1\n bne :outloop\n rts\n\n:pitch ds 2\n\n*-------------------------------\n*\n* Copy one hires page to the other\n*\n* In: PAGE = dest scrn (00/20)\n*\n*-------------------------------\nCOPYSCRN\n lda PAGE\n clc\n adc #$20\n sta IMAGE+1 ;dest addr\n eor #$60\n sta IMAGE ;org addr\n\n jmp copy2000\n\n*-------------------------------\n*\n*  Generate random number\n*\n*  RNDseed := (5 * RNDseed + 23) mod 256\n*\n*-------------------------------\nRND\n lda RNDseed\n asl\n asl\n clc\n adc RNDseed\n clc\n adc #23\n sta RNDseed\n]rts rts\n\n*-------------------------------\n*\n*  Calls to hires & master routines\n*\n*  Hires & master routines are in main lc & use main zp;\n*  rest of code uses aux lc, zp.\n*\n*-------------------------------\n*\n*  Master\n*\n*-------------------------------\nLOADLEVEL sta ALTZPoff ;main l.c.\n jsr _loadlevel\n sta ALTZPon ;aux l.c.\n rts\n\nATTRACTMODE sta ALTZPoff\n jsr _attractmode\n sta ALTZPon\n rts\n\nCUTPRINCESS sta ALTZPoff\n jsr _cutprincess\n sta ALTZPon\n rts\n\nRELOAD sta ALTZPoff\n jsr _reload\n sta ALTZPon\n rts\n\nLOADSTAGE2 sta ALTZPoff\n jsr _loadstage2\n sta ALTZPon\n rts\n\nSAVEGAME sta ALTZPoff\n jsr _savegame\n sta ALTZPon\n rts\n\nLOADGAME sta ALTZPoff\n jsr _loadgame\n sta ALTZPon\n rts\n\nDOSTARTGAME sta ALTZPoff\n jmp _dostartgame\n\nEPILOG sta ALTZPoff\n jmp _epilog\n\nLOADALTSET sta ALTZPoff\n jsr _loadaltset\n sta ALTZPon\n rts\n\nSCREENDUMP sta ALTZPoff\n jsr _screendump\n sta ALTZPon\n rts\n\n*-------------------------------\n*\n* Edmaster (editor disk only)\n*\n*-------------------------------\n do EditorDisk\n\nSAVELEVEL sta ALTZPoff\n jsr _savelevel\n sta ALTZPon\n rts\n\nSAVELEVELG sta ALTZPoff\n jsr _savelevelg\n sta ALTZPon\n rts\n\nREADDIR sta ALTZPoff\n jsr _readdir\n sta ALTZPon\n rts\n\nWRITEDIR sta ALTZPoff\n jsr _writedir\n sta ALTZPon\n rts\n\nGOBUILD sta ALTZPoff\n jsr _gobuild\n sta ALTZPon\n rts\n\nGOGAME sta ALTZPoff\n jsr _gogame\n sta ALTZPon\n rts\n\nEDREBOOT sta ALTZPoff\n jsr _edreboot\n sta ALTZPon\n rts\n\n else\nSAVELEVEL\nSAVELEVELG\nREADDIR\nWRITEDIR\nGOBUILD\nGOGAME\nEDREBOOT rts\n fin\n\n*-------------------------------\n*\n*  Hires\n*\n*-------------------------------\nCLS jsr prehr\n sta ALTZPoff\n jsr _cls\n sta ALTZPon\n rts\n\nLAY jsr prehr\n sta ALTZPoff\n jsr _lay\n sta ALTZPon\n rts\n\nFASTLAY jsr prehr\n sta ALTZPoff\n jsr _fastlay\n sta ALTZPon\n rts\n\nLAYRSAVE jsr prehr\n sta ALTZPoff\n jsr _layrsave\n sta ALTZPon\n jmp posthr\n\nLRCLS sta scrncolor ;In: A = screen color\n sta ALTZPoff\n jsr _lrcls\n sta ALTZPon\n rts\n\nFASTMASK jsr prehr\n sta ALTZPoff\n jsr _fastmask\n sta ALTZPon\n rts\n\nFASTBLACK jsr prehr\n sta ALTZPoff\n jsr _fastblack\n sta ALTZPon\n rts\n\nPEEL jsr prehr\n sta ALTZPoff\n jsr _peel\n sta ALTZPon\n rts\n\nGETWIDTH jsr prehr\n sta ALTZPoff\n jsr _getwidth\n sta ALTZPon\n rts\n\nCOPY2000 jsr prehr\n sta ALTZPoff\n jsr _copy2000\n sta ALTZPon\n rts\n\nCOPY2000AM jsr prehr\n sta ALTZPoff\n jsr _copy2000am\n sta ALTZPon\n rts\n\nCOPY2000MA jsr prehr\n sta ALTZPoff\n jsr _copy2000ma\n sta ALTZPon\n rts\n\nSETFASTAUX\n sta ALTZPoff\n jsr _setfastaux\n sta ALTZPon\n rts\n\nSETFASTMAIN\n sta ALTZPoff\n jsr _setfastmain\n sta ALTZPon\n rts\n\nINVERTY\n sta ALTZPoff\n jsr _inverty\n sta ALTZPon\n rts\n\n*-------------------------------\n*\n*  Call sound routines (in aux l.c. bank 1)\n*  Exit with bank 2 switched in\n*\n*-------------------------------\n]bank1in bit RWBANK1\n bit RWBANK1\n rts\n\nMINIT jsr ]bank1in\n jsr CALLMINIT\n]bank2in bit RWBANK2\n bit RWBANK2\n rts\n\nMPLAY jsr ]bank1in\n jsr CALLMPLAY\n jmp ]bank2in\n\n*-------------------------------\n*\n*  Call aux l.c. routines from MASTER (main l.c.)\n*\n*-------------------------------\nXMINIT sta ALTZPon\n jsr MINIT\n sta ALTZPoff\n rts\n\nXMPLAY sta ALTZPon\n jsr MPLAY\n sta ALTZPoff\n rts\n\nXTITLE sta ALTZPon\n jsr titlescreen\n sta ALTZPoff\n rts\n\nXPLAYCUT sta ALTZPon\n jsr playcut ;in subs\n sta ALTZPoff\n rts\n\nXMOVEMUSIC sta ALTZPon\n jsr movemusic ;in misc\n sta ALTZPoff\n rts\n\n*-------------------------------\n*\n* Copy hires params from aux to main z.p.\n*\n* (Enter & exit w/ ALTZP on)\n*\n*-------------------------------\nprehr\n ldx #$17\n:loop sta ALTZPon ;aux zp\n lda $00,x\n sta ALTZPoff ;main zp\n sta $00,x\n dex\n bpl :loop\n sta ALTZPon\n rts\n\n*-------------------------------\n*\n* Copy hires params from main to aux z.p.\n*\n* (Enter & exit w/ ALTZP on)\n*\n*-------------------------------\nposthr\n ldx #$17\n:loop sta ALTZPoff\n lda $00,x\n sta ALTZPon\n sta $00,x\n dex\n bpl :loop\n]rts rts\n\n*-------------------------------\n*\n*  Save master copy of blueprint in l.c. bank 1\n*\n*-------------------------------\nSAVEBLUE\n jsr ]bank1in\n lda #>$d700\n ldx #>$b700\n ldy #>$b700+$900\n jsr movemem\n jmp ]bank2in\n\nSAVEBINFO\n jsr ]bank1in\n lda #>$d000\n ldx #>$a600\n ldy #>$a600+$600\n jsr movemem\n jmp ]bank2in\n\n*-------------------------------\n*\n* Reload master copy of blueprint from l.c. bank 1\n*\n*-------------------------------\nRELOADBLUE\n jsr ]bank1in\n lda #>$b700\n ldx #>$d700\n ldy #>$d700+$900\n jsr movemem\n jmp ]bank2in\n\nRELOADBINFO\n jsr ]bank1in\n lda #>$a600\n ldx #>$d000\n ldy #>$d000+$600\n jsr movemem\n jmp ]bank2in\n\n*-------------------------------\n*\n*  Display lo-res page 1\n*\n*-------------------------------\nGR jmp gtone ;temp!\n\n*-------------------------------\n* The following routines properly belong to FRAMEADV\n* but have been moved here for lack of space\n*-------------------------------\n*\n*  C A L C   B L U E\n*\n*  Given:  screen #, 1-24 (in acc)\n*  Return: start of BLUETYPE table (in BlueType)\n*          start of BLUESPEC table (in BlueSpec)\n*\n*  If A = 0...\n*    In game: returns garbage\n*    In builder: returns menu data\n*\n*-------------------------------\nCALCBLUE\n cmp #0\n beq calcmenu\n\n sec\n sbc #1 ;reduce to 0-23\n asl\n tax ;x2\n\n lda Mult30,x\n clc\n adc #blueprnt\n sta BlueType\n\n lda Mult30+1,x\n adc #>blueprnt\n sta BlueType+1\n\n lda BlueType\n clc\n adc #24*30\n sta BlueSpec\n\n lda BlueType+1\n adc #>24*30\n sta BlueSpec+1\n\n]rts rts\n\ncalcmenu\n lda #menutype\n sta BlueType\n lda #>menutype\n sta BlueType+1\n\n lda #menuspec\n sta BlueSpec\n lda #>menuspec\n sta BlueSpec+1\n rts\n\n*-------------------------------\n*\n*  Z E R O   R E D\n*\n*  zero redraw buffers\n*\n*-------------------------------\nZERORED\n lda #0\n ldy #29\n:loop sta redbuf,y\n sta fredbuf,y\n sta floorbuf,y\n sta halfbuf,y\n sta wipebuf,y\n sta movebuf,y\n sta objbuf,y\n dey\n bpl :loop\n\n ldy #9\n:loop2 sta topbuf,y\n dey\n bpl :loop2\n\n rts\n\n*-------------------------------\n*\n*  Routines to interface with MSYS (Music System II)\n*\n*-------------------------------\n*\n* Switch zero page\n*\n*-------------------------------\nswitchzp\n ldx #31\n:loop ldy savezp,x\n lda $00,x\n sta savezp,x\n tya\n sta $00,x\n dex\n bpl :loop\n rts\n\n*-------------------------------\n*\n*  Call MINIT\n*\n*  In: A = song #\n*\n*-------------------------------\nCALLMINIT\n pha\n jsr switchzp\n pla\n jsr _minit\n jmp switchzp\n\n*-------------------------------\n*\n*  Call MPLAY\n*\n*  Out: A = song #\n*  (Most songs set song # = 0 when finished)\n*\n*-------------------------------\nCALLMPLAY\n lda soundon\n and musicon\n beq :silent\n\n jsr switchzp\n jsr _mplay ;returns INDEX\n pha\n jsr switchzp\n pla\n rts\n\n:silent lda #0\n]rts rts\n\n*-------------------------------\n*\n*  M U S I C   K E Y S\n*\n*  Call while music is playing\n*\n*  Esc to pause, Ctrl-S to turn sound off\n*  Return A = ASCII value (FF for button)\n*  Clear hibit if it's a key we've handled\n*\n*-------------------------------\nMUSICKEYS\n lda $c000\n sta keypress\n bpl :nokey\n sta $c010\n\n cmp #ESC\n bne :cont\n:froze lda $c000\n sta keypress\n bpl :froze\n sta $c010\n cmp #ESC\n bne :cont\n and #$7f\n rts\n\n:cont cmp #ksound\n bne :3\n lda soundon\n eor #1\n sta soundon\n:21 beq :2\n jsr gtone\n:2 lda #0\n rts\n\n:3 cmp #kmusic\n bne :1\n lda musicon\n eor #1\n sta musicon\n jmp :21\n\n:nobtn lda keypress\n rts\n:1\n:nokey lda $c061\n ora $c062\n bpl :nobtn\n lda #$ff\n]rts rts\n\n*===============================\nvblflag ds 1\n*-------------------------------\n*\n* Wait for vertical blank (IIe/IIGS)\n*\n*-------------------------------\nVBLANK\n:loop1 lda $c019\n bpl :loop1\n:loop lda $c019\n bmi :loop ;wait for beginning of VBL interval\n]rts rts\n\n*-------------------------------\n*\n* Wait for vertical blank (IIc)\n*\n*-------------------------------\nVBLANKIIc\n cli ;enable interrupts\n\n:loop1 bit vblflag\n bpl :loop1 ;wait for vblflag = 1\n lsr vblflag ;...& set vblflag = 0\n\n:loop2 bit vblflag\n bpl :loop2\n lsr vblflag\n\n sei\n rts\n\n* Interrupt jumps to ($FFFE) which points back to VBLI\n\nVBLI\n bit $c019\n sta $c079 ;enable IOU access\n sta $c05b ;enable VBL int\n sta $c078 ;disable IOU access\n sec\n ror vblflag ;set hibit\n:notvbl rti\n\n*-------------------------------\n*\n* Initialize VBLANK vector with correct routine\n* depending on whether or not machine is IIc\n*\n*-------------------------------\nInitVBLANK\n lda $FBC0\n bne ]rts ;not a IIc--use VBLANK\n\n sta RAMWRTaux\n\n lda #VBLANKIIc\n sta VBLvect+1\n lda #>VBLANKIIc\n sta VBLvect+2\n\n sei ;disable interrupts\n sta $c079 ;enable IOU access\n sta $c05b ;enable VBL int\n sta $c078 ;disable IOU access\n\n]rts rts\n\n*-------------------------------\n*\n*  Is this a IIGS?\n*\n*  Out: IIGS (0 = no, 1 = yes)\n*       If yes, set control panel to default settings\n*       Exit w/RAM bank 2 switched in\n*\n*  Also initializes VBLANK routine\n*\n*-------------------------------\nCHECKIIGS\n do EditorDisk\n else\n\n bit USEROM\n bit USEROM\n\n lda $FBB3\n cmp #6\n bne * ;II/II+/III--we shouldn't even be here\n sec\n jsr $FE1F\n bcs :notGS\n\n* Set default settings\n\n xc\n lda $c034\n and #$f0\n sta $c034 ;black border\n\n lda #$f0\n sta $c022 ;black bg, white text\n\n lda #$80\n trb $c036 ;normal speed\n\n* & set control panel to match the new reality\n\n lda #$00\n ldy #$1c ;border\n jsr setparam\n\n lda #$00\n ldy #$1b ;bg\n jsr setparam\n\n lda #$0f\n ldy #$1a ;text\n jsr setparam\n\n lda #$00\n ldy #$20 ;speed\n jsr setparam\n\n lda #1\n bne :set\n xc off\n fin\n\n:notGS lda #0\n:set sta IIGS\n\n jsr InitVBLANK\n\n bit RWBANK2\n bit RWBANK2\n]rts rts\n\n*-------------------------------\n*\n*  Temporarily set fast speed (IIGS)\n*\n*-------------------------------\n xc\nFASTSPEED\n lda IIGS\n beq ]rts\n\n lda #$80\n tsb $C036 ;fast speed\n]rts rts\n\n*-------------------------------\n*\n* Restore speed to normal\n*\n*-------------------------------\nNORMSPEED\n lda IIGS\n beq ]rts\n\n ldy #$20\n jsr getparam ;ctrl panel speed\n bne ]rts\n lda #$80\n trb $C036\n rts\n xc off\n\n*-------------------------------\n*\n*  Read control panel parameter (IIGS)\n*\n*  In: Y = location\n*  Out: A = current setting\n*\n*-------------------------------\n xc\n xc\ngetparam\n lda IIGS\n beq ]rts\n\n clc\n xce\n rep $30\n pha\n phy\n ldx #$0C03\n hex 22,00,00,E1 ;jsl E10000\n pla\n sec\n xce\n tay\n rts\n\n*-------------------------------\n*\n* Set control panel parameter (IIGS only)\n*\n* In: A = desired value, Y = location\n*\n*-------------------------------\nsetparam\n clc\n xce\n rep $30\n and #$ff\n pha\n phy\n ldx #$B03\n hex 22,00,00,E1 ;jsl E10000\n sec\n xce\n rts\n\n xc off\n\n*-------------------------------\n lst\neof ds 1\n usr $a9,4,$0000,*-org\n lst off\n"
  },
  {
    "path": "04 Support/MakeDisk/S/HIRES.S",
    "content": "* hires\norg = $ee00\n tr on\n lst off\n*-------------------------------\n*\n*  PRINCE OF PERSIA\n*  Copyright 1989 Jordan Mechner\n*\n*-------------------------------\n org org\n\n jmp boot3\n jmp cls\n jmp lay\n jmp fastlay\n jmp layrsave\n\n jmp lrcls\n jmp fastmask\n jmp fastblack\n jmp peel\n jmp getwidth\n\n jmp copyscrnMM\n jmp copyscrnAA\n jmp SETFASTAUX\n jmp SETFASTMAIN\n jmp copyscrnMA\n\n jmp copyscrnAM\n jmp INVERTY\n\n*-------------------------------\n put hrparams\n\n*-------------------------------\nboot3 = $f880 ;stage 3 boot\n\npeelbuf1 = $d000\npeelbuf2 = $d600\n\n* Local vars\n\nlocals = $f0\nlocals2 = $18\n\n dum locals\n\nBASE ds 2\nIMSAVE ds 2\nXSAVE ds 1\nYSAVE ds 1\nWIDTH ds 1\nHEIGHT ds 1\nTOPEDGE ds 1\nOFFLEFT ds 1\nOFFRIGHT ds 1\nYREG ds 1\nCARRY ds 1\n\n dum locals2\nindex\nztemp\nAMASK ds 1\nBMASK ds 1\nVISWIDTH ds 1\nRMOST ds 1\ncarryim ds 1\nimbyte ds 1\n\n dend\n\n* OPACITY codes\n\nand = 0\nora = 1\nsta = 2\neor = 3 ;OR/shift/XOR\nmask = 4 ;mask/OR\n\n*-------------------------------\n*\n* Assume hires routines are called from auxmem\n* (Exit with RAMRD, RAMWRT, ALTZP on)\n*\n*-------------------------------\n\ncls jsr mainmem\n jsr CLS\n jmp auxmem\n\nlay jsr mainmem\n jsr LAY\n jmp auxmem\n\nfastlay\n jsr FASTLAY\n jmp auxmem\n\nlayrsave jsr mainmem\n jsr LAYRSAVE\n jmp auxmem\n\nlrcls jsr mainmem\n jsr LRCLS\n jmp auxmem\n\nfastmask\n  jsr FASTMASK\n jmp auxmem\n\nfastblack jsr mainmem\n jsr FASTBLACK\n jmp auxmem\n\npeel\n jsr PEEL\n jmp auxmem\n\ngetwidth jsr mainmem\n jsr GETWIDTH\n jmp auxmem\n\ncopyscrnMM\n jsr mainmem ;r/w main\n]copyscrn jsr COPYSCRN\n jmp auxmem\n\ncopyscrnAA\n jsr auxmem ;r/w aux\n jmp ]copyscrn\n\ncopyscrnMA\n sta $c002 ;read main\n sta $c005 ;write aux\n jmp ]copyscrn\n\ncopyscrnAM\n sta $c003 ;read aux\n sta $c004 ;write main\n jmp ]copyscrn\n\n*-------------------------------\nmainmem sta $c004 ;RAMWRT off\n sta $c002 ;RAMRD off\n rts\n\nauxmem sta $c005 ;RAMWRT on\n sta $c003 ;RAMRD on\n rts\n\n*-------------------------------\n*\n*  Parameters passed to hires routines:\n*\n*  PAGE        $00 = hires page 1, $20 = hires page 2\n*  XCO         Screen X-coord (0=left, 39=right)\n*  YCO         Screen Y-coord (0=top, 191=bottom)\n*  OFFSET      # of bits to shift image right (0-6)\n*  IMAGE       Image # in table (1-127)\n*  TABLE       Starting address of image table (2 bytes)\n*  BANK        Memory bank of table (2 = main, 3 = aux)\n*  OPACITY     Bits 0-6:\n*                0    AND\n*                1    OR\n*                2    STA\n*                3    special XOR (OR/shift/XOR)\n*                4    mask/OR\n*              Bit 7: 0 = normal, 1 = mirror\n*  LEFTCUT     Left edge of usable screen area\n*                (0 for full screen)\n*  RIGHTCUT    Right edge +1 of usable screen area\n*                (40 for full screen)\n*  TOPCUT      Top edge of usable screen area\n*                (0 for full screen)\n*  BOTCUT      Bottom edge +1 of usable screen area\n*                (192 for full screen)\n*\n*-------------------------------\n*\n*  Image table format:\n*\n*  Byte 0:    width (# of bytes)\n*  Byte 1:    height (# of lines)\n*  Byte 2-n:  image bytes (read left-right, top-bottom)\n*\n*-------------------------------\n*\n*  To preserve the background behind an animated character,\n*  call LAYERSAVE before LAYing down each character image.\n*  Afterwards, call PEEL to \"peel off\" the character &\n*  restore the original background.\n*\n*  Peel buffer stores background images sequentially, in\n*  normal image table format, & is cleared after every frame.\n*\n*-------------------------------\n*\n*  C L S\n*\n*  Clear hi-res screen to black2\n*\n*-------------------------------\n\nCLS lda PAGE ;00 = page 1; 20 = page 2\n clc\n adc #$20\n sta :loop+2\n adc #$10\n sta :smod+2\n\n lda #$80 ;black2\n\n ldx #$10\n\n ldy #0\n\n:loop sta $2000,y\n:smod sta $3000,y\n iny\n bne :loop\n\n inc :loop+2\n inc :smod+2\n\n dex\n bne :loop\n\n rts\n\n*-------------------------------\n*\n*  L O - R E S   C L S\n*\n*  Clear lo-res/text screen (page 1)\n*\n*  In: A = color\n*\n*-------------------------------\n\nLRCLS LDY #$F7\n:2 STA $400,Y\n STA $500,Y\n STA $600,Y\n STA $700,Y\n DEY\n CPY #$7F\n BNE :3\n LDY #$77\n:3 CPY #$FF\n BNE :2\n RTS\n\n*-------------------------------\n*\n*  S E T   I M A G E\n*\n*  In: TABLE (2 bytes), IMAGE (image #)\n*  Out: IMAGE = image start address (2 bytes)\n*\n*-------------------------------\n\nsetimage lda IMAGE\n asl\n sec\n sbc #1\n\n tay\n lda (TABLE),y\n sta IMAGE\n\n iny\n lda (TABLE),y\n sta IMAGE+1\n\n rts\n\n*-------------------------------\n*\n*  G E T   W I D T H\n*\n*  In: BANK, TABLE, IMAGE\n*  Out: A = width, X = height\n*\n*-------------------------------\nGETWIDTH\n lda BANK\n sta :RAMRD+1\n\n:RAMRD sta $c003\n\n jsr setimage\n\n ldy #1\n lda (IMAGE),y ;height\n tax\n\n dey\n lda (IMAGE),y ;width\n rts\n\n*-------------------------------\n*\n*  P R E P R E P\n*\n*  In: IMAGE, XCO, YCO\n*\n*-------------------------------\n\nPREPREP\n\n* Save IMAGE, XCO, YCO\n\n LDA IMAGE\n STA IMSAVE\n LDA XCO\n STA XSAVE\n LDA YCO\n STA YSAVE\n\n* Get image data start address\n\n lda BANK\n sta :RAMRD+1\n\n:RAMRD sta $c003\n\n jsr setimage\n\n* Read first two bytes (width, height) of image table\n\n LDY #0\n LDA (IMAGE),Y\n STA WIDTH\n\n INY\n LDA (IMAGE),Y\n STA HEIGHT\n\n LDA IMAGE\n CLC\n ADC #2\n STA IMAGE\n BCC :3\n INC IMAGE+1\n\n:3 sta $c002 ;RAMRD off (read mainmem)\n\n]rts rts\n\n*-------------------------------\n*\n*  C R O P\n*\n*  In:  Results of PREPREP (XCO, YCO, HEIGHT, WIDTH)\n*       Screen area cutoffs (LEFTCUT, RIGHTCUT, TOPCUT, BOTCUT)\n*\n*  Out:\n*\n*  TOPEDGE   Top line -1\n*  VISWIDTH  Width, in bytes, of visible (onscreen) portion\n*               of image\n*  XCO       X-coord of leftmost visible byte of image\n*               (must be 0-39)\n*  YCO       Y-coord of lowest visible line of image\n*               (must be 0-191)\n*  OFFLEFT   # of bytes off left edge\n*  OFFRIGHT  # of bytes off right edge (including carry byte)\n*  RMOST     # of bytes off right edge (excluding carry byte)\n*\n*  Return - if entire image is offscreen, else +\n*\n*-------------------------------\nCROP\n\n* (1) Crop top & bottom\n\n lda YCO\n cmp BOTCUT\n bcs :botoff ;Bottom o.s.\n\n* Bottom is onscreen--check top\n\n sec\n sbc HEIGHT ;top line -1\n cmp #191\n bcc :topok ;Top is onscreen\n\n lda TOPCUT ;Top is offscreen\n sec\n sbc #1\n sta TOPEDGE\n jmp :done\n\n:topok sta TOPEDGE ;Top line -1 (0-191)\n\n lda TOPCUT ;top line of image area (forced mask)\n beq :done ;no top cutoff\n\n sec\n sbc #1\n cmp TOPEDGE\n bcc :done\n\n sta TOPEDGE\n bcs :done\n\n* Bottom is o.s.--advance IMAGE pointer past o.s. portion\n\n:botoff ;A = YCO\n sec\n sbc HEIGHT\n clc\n adc #1 ;top line\n cmp BOTCUT\n bcs :cancel ;Entire shape is o.s.\n sec\n sbc #1\n sta TOPEDGE ;top line -1\n\n ldx YCO\n:loop\n lda IMAGE\n clc\n adc WIDTH\n sta IMAGE\n bcc :1\n inc IMAGE+1\n:1\n dex\n cpx BOTCUT\n bcs :loop\n\n stx YCO\n\n* (2) Crop sides\n\n:done\n lda XCO\n bmi :leftoff\n cmp LEFTCUT\n bcs :leftok ;XCO >= LEFTCUT\n\n* XCO < LEFTCUT: left edge is offscreen\n\n:leftoff\n lda LEFTCUT\n sec\n sbc XCO\n sta OFFLEFT ;Width of o.s. portion\n\n lda WIDTH\n sec\n sbc OFFLEFT\n bmi :cancel ;Entire image is o.s. -- skip it\n sta VISWIDTH ;Width of onscreen portion (can be 0)\n\n lda LEFTCUT\n sta XCO\n\n* Assume image is <=40 bytes wide --> right edge is onscreen\n\n lda #0\n sta OFFRIGHT\n sta RMOST\n rts\n\n* Left edge is onscreen; what about right edge?\n\n:leftok ;A = XCO\n cmp RIGHTCUT ;normally 40\n bcs :cancel ;Entire image is o.s. - skip it\n\n clc\n adc WIDTH ;rightmost byte +1\n cmp RIGHTCUT\n bcc :bothok ;Entire image is onscreen\n\n sec\n sbc RIGHTCUT\n sta RMOST ;Width of o.s. portion\n\n clc\n adc #1\n sta OFFRIGHT ;+1\n\n lda RIGHTCUT\n sec\n sbc XCO\n sta VISWIDTH ;Width of onscreen portion\n\n lda #0\n sta OFFLEFT\n rts\n\n:bothok lda WIDTH\n sta VISWIDTH\n\n lda #0\n sta OFFLEFT\n sta OFFRIGHT\n sta RMOST\n rts\n\n:cancel lda #-1 ;Entire image is o.s. - skip it\n]rts rts\n\n*-------------------------------\n*\n* Shift offset 1 bit right or left\n* (for special XOR)\n*\n* In/out: X = offset\n*\n*-------------------------------\nshiftoffset\n cpx #6\n bcs :left\n\n inx\n rts\n\n:left dex\n]rts rts\n\n*-------------------------------\n*\n*  L A Y E R S A V E\n*\n*  In:  Same as for LAY, plus PEELBUF (2 bytes)\n*  Out: PEELBUF (updated), PEELIMG (2 bytes), PEELXCO, PEELYCO\n*\n*  PEELIMG is 2-byte pointer to beginning of image table.\n*  (Hi byte = 0 means no image has been stored.)\n*\n*  PEELBUF is 2-byte pointer to first available byte in\n*  peel buffer.\n*\n*-------------------------------\n\nLAYRSAVE\n jsr PREPREP\n\n lda OPACITY\n bpl :normal\n\n LDA XCO\n SEC\n SBC WIDTH\n STA XCO\n\n:normal\n inc WIDTH ;extra byte to cover shift right\n\n jsr CROP\n bmi SKIPIT\n\n lda PEELBUF ;PEELBUF: 2-byte pointer to 1st\n sta PEELIMG ;available byte in peel buffer\n lda PEELBUF+1\n sta PEELIMG+1\n\n lda XCO\n sta PEELXCO\n sta :smXCO+1\n\n lda YCO\n sta PEELYCO\n\n lda PAGE ;spend 7 cycles now --\n sta :smPAGE+1 ;save 1 in loop\n\n ldy #0\n\n lda VISWIDTH\n beq SKIPIT\n sta (PEELBUF),y\n sta :smWIDTH+1\n\n sec\n sbc #1\n sta :smSTART+1\n\n* Continue\n\n:cont iny\n\n LDA YCO\n SEC\n SBC TOPEDGE\n STA (PEELBUF),y ;Height of onscreen portion (\"VISHEIGHT\")\n\n LDA PEELBUF\n CLC\n ADC #2\n STA PEELBUF\n BCC :ok\n INC PEELBUF+1\n:ok\n\n* Like FASTLAY in reverse\n\n ldx YCO\n\n:loop LDA YLO,X\n CLC\n:smXCO ADC #0 ;XCO\n STA :smBASE+1\n\n LDA YHI,X\n:smPAGE ADC #0 ;PAGE\n STA :smBASE+2\n\n:smSTART ldy #0 ;VISWIDTH-1\n\n:inloop\n:smBASE lda $2000,y\n STA (PEELBUF),Y\n\n dey\n bpl :inloop\n\n:smWIDTH LDA #0 ;VISWIDTH\n ADC PEELBUF ;assume cc\n STA PEELBUF\n BCC :2\n INC PEELBUF+1\n:2\n DEX\n CPX TOPEDGE\n BNE :loop\n\n JMP DONE\n\nSKIPIT lda #0\n sta PEELIMG+1 ;signal that peelbuf is empty\n\n JMP DONE\n\n*-------------------------------\n*\n*  L A Y\n*\n*  General routine to lay down an image on hi-res screen\n*  (Handles edge-clipping, bit-shifting, & mirroring)\n*\n*  Calls one of the following routines:\n*\n*    LayGen    General (OR, AND, STA)\n*    LayMask   Mask & OR\n*    LayXOR    Special XOR\n*\n*  Transfers control to MLAY if image is to be mirrored\n*\n*-------------------------------\n\nLAY\n lda OPACITY\n bpl :notmirr\n\n and #$7f\n sta OPACITY\n jmp MLAY\n\n:notmirr cmp #eor\n bne :1\n jmp LayXOR\n\n:1 cmp #mask\n bcc :2\n jmp LayMask\n\n:2 jmp LayGen\n\n*-------------------------------\n*\n*   General (AND/OR/STORE)\n*\n*-------------------------------\nLayGen\n jsr PREPREP\n\n jsr CROP\n bpl :cont\n jmp DONE\n:cont\n lda BANK\n sta :RAMRD1+1\n sta :RAMRD2+1\n\n LDX OFFSET\n\n LDA SHIFTL,X\n STA :91+1\n LDA SHIFTH,X\n STA :91+2\n\n LDA CARRYL,X\n STA :90+1\n STA :92+1\n LDA CARRYH,X\n STA :90+2\n STA :92+2\n\n LDA AMASKS,X\n STA :AMASK+1\n LDA BMASKS,X\n STA :BMASK+1\n\n LDX OPACITY\n LDA OPCODE,X\n STA :80\n STA :81\n\n* Preparation completed -- Lay down shape\n\n LDY YCO\n\n:nextline\n LDA YLO,Y\n CLC\n ADC XCO\n STA BASE\n\n LDA YHI,Y\n ADC PAGE\n STA BASE+1\n\n LDY OFFLEFT\n BEQ :2\n\n* (a) Left edge of image is offscreen\n* Take initial carry byte from image table\n\n DEY\n\n:RAMRD1 sta $c003 ;aux/main\n lda (IMAGE),y\n sta $c002 ;main\n\n TAX\n:90 LDA $FFFF,X ;CARRYn\n STA CARRY\n\n LDA IMAGE\n CLC\n ADC OFFLEFT\n STA IMAGE\n BCC :1\n INC IMAGE+1\n:1\n LDY #0\n\n LDA VISWIDTH\n STA WIDTH\n BNE :3\n BEQ :4 ;Zero width\n\n* (b) Left edge of image is onscreen\n* Take initial carry byte from screen\n\n:2 LDA (BASE),Y\n:AMASK AND #0\n STA CARRY\n\n* Lay line down left-to-right fast as you can\n\n:3\n:RAMRD2 sta $c003 ;aux/main\n lda (IMAGE),y\n sta $c002 ;main\n\n TAX\n:91 LDA $FFFF,X ;SHIFTn\n ORA CARRY ;Combine with carryover from previous byte\n\n:80 STA (BASE),Y ;STA/ORA/AND/EOR depending on OPACITY\n STA (BASE),Y\n\n:92 LDA $FFFF,X ;CARRYn\n STA CARRY ;Carry over to next byte\n\n INY\n CPY VISWIDTH\n BCC :3\n\n*  Extra byte on right (carryover)\n\n LDA OFFRIGHT\n BNE :5 ;Rightmost byte is offscreen\n\n:4 LDA (BASE),Y\n\n:BMASK AND #0\n ORA CARRY\n:81 STA (BASE),Y\n STA (BASE),Y\n\n*  Next line up\n\n:5 LDA WIDTH\n CLC\n ADC IMAGE\n STA IMAGE\n BCC :6\n INC IMAGE+1\n\n:6 DEC YCO\n LDY YCO\n CPY TOPEDGE\n BNE :nextline\n\n*  Restore parameters\n\nDONE LDA IMSAVE\n STA IMAGE\n\n LDA XSAVE\n STA XCO\n LDA YSAVE\n STA YCO\n\n RTS\n\n*-------------------------------\n*\n*  Mask, then OR\n*\n*-------------------------------\n]done jmp DONE\n\nLayMask\n ldx OPACITY ;4 = mask, 5 = visible mask\n lda OPCODE,x ;4 = and, 5 = sta\n sta :masksm1\n sta :masksm2\n\n jsr PREPREP\n\n jsr CROP\n bmi ]done\n\n lda BANK\n sta :RAMRD1+1\n sta :RAMRD2+1\n\n LDX OFFSET\n\n LDA SHIFTL,X\n STA :91+1\n sta :93+1\n\n LDA SHIFTH,X\n STA :91+2\n sta :93+2\n\n LDA CARRYL,X\n STA :90+1\n STA :92+1\n sta :94+1\n sta :96+1\n\n LDA CARRYH,X\n STA :90+2\n STA :92+2\n sta :94+2\n sta :96+2\n\n LDA AMASKS,X\n STA :AMASK+1\n\n LDA BMASKS,X\n STA :BMASK+1\n\n LDY YCO\n\n:nextline\n LDA YLO,Y\n CLC\n ADC XCO\n STA BASE\n\n LDA YHI,Y\n ADC PAGE\n STA BASE+1\n\n LDY OFFLEFT\n BEQ :2\n\n* (a) Left edge of image is offscreen\n* Take initial carry byte from image table\n\n dey\n\n:RAMRD1 sta $c003\n lda (IMAGE),y\n; eor #$ff ;TEMP\n; ora #$80 ;TEMP\n sta $c002\n\n tax\n:96 lda $FFFF,x ;CARRYn\n sta carryim\n\n lda MASKTAB-$80,x\n tax\n:90 lda $FFFF,x ;CARRYn\n sta CARRY\n\n LDA IMAGE\n CLC\n ADC OFFLEFT\n STA IMAGE\n BCC :1\n INC IMAGE+1\n:1\n ldy #0\n\n LDA VISWIDTH\n STA WIDTH\n BNE :inloop\n BEQ :4 ;Zero width\n\n* (b) Left edge of image is onscreen\n* Take initial carry byte from screen\n\n:2\n:AMASK lda #0 ;AMASK\n sta CARRY\n\n and (BASE),y\n sta carryim\n\n* Lay line down left-to-right fast as you can\n\n:inloop\n\n:RAMRD2 sta $c003\n lda (IMAGE),y\n; eor #$ff ;TEMP\n; ora #$80 ;TEMP\n sta $c002\n\n tax\n\n:93 lda $FFFF,x ;SHIFTn\n ora carryim\n sta imbyte ;shifted image byte\n\n:94 lda $FFFF,x ;CARRYn\n sta carryim\n\n lda MASKTAB-$80,x\n tax\n\n:91 lda $FFFF,x ;SHIFTn\n ora CARRY\n:masksm1 and (BASE),y ;AND with mask byte\n ora imbyte ;OR with original image byte\n sta (BASE),y\n\n:92 lda $FFFF,x ;CARRYn\n sta CARRY ;Carry over to next byte\n\n iny\n cpy VISWIDTH\n bcc :inloop\n\n*  Extra byte on right (carryover)\n\n lda OFFRIGHT\n bne :5 ;Rightmost byte is offscreen\n\n:4\n:BMASK lda #0 ;BMASK\n ora CARRY\n:masksm2 and (BASE),y\n ora carryim\n sta (BASE),y\n\n*  Next line up\n\n:5 LDA WIDTH\n CLC\n ADC IMAGE\n STA IMAGE\n BCC :6\n INC IMAGE+1\n\n:6 DEC YCO\n LDY YCO\n CPY TOPEDGE\n beq :done\n\n jmp :nextline\n\n:done jmp DONE\n\n*-------------------------------\n*\n*  Special XOR\n*\n*  (OR, then shift 1 bit and XOR)\n*\n*-------------------------------\n\nLayXOR\n JSR PREPREP\n\n jsr CROP\n bpl :cont\n jmp DONE\n:cont\n lda BANK\n sta :RAMRD1+1\n sta :RAMRD2+1\n\n LDX OFFSET\n\n LDA SHIFTL,X\n STA :91+1\n LDA SHIFTH,X\n STA :91+2\n\n LDA CARRYL,X\n STA :90+1\n STA :92+1\n LDA CARRYH,X\n STA :90+2\n STA :92+2\n\n jsr shiftoffset ;shift 1 bit right\n\n lda SHIFTL,x\n sta :s1+1\n lda SHIFTH,x\n sta :s1+2\n\n lda CARRYL,x\n sta :c1+1\n sta :c2+1\n lda CARRYH,x\n sta :c1+2\n sta :c2+2\n\n LDA AMASKS,X\n STA :AMASK+1\n\n* Omit opcode setting\n\n LDY YCO\n\n:0 LDA YLO,Y\n CLC\n ADC XCO\n STA BASE\n\n LDA YHI,Y\n ADC PAGE\n STA BASE+1\n\n LDY OFFLEFT\n BEQ :2\n\n*  (a) Left edge offscreen\n*  Take CARRY from off left edge\n\n DEY\n\n:RAMRD1 sta $c003\n lda (IMAGE),y\n sta $c002\n\n TAX\n:c2 lda $FFFF,x ;CARRYn+1\n sta carryim\n\n:90 LDA $FFFF,X ;CARRYn\n STA CARRY\n\n LDA IMAGE\n CLC\n ADC OFFLEFT\n STA IMAGE\n BCC :1\n INC IMAGE+1\n\n:1 LDY #0\n\n LDA VISWIDTH\n STA WIDTH\n BNE :inloop\n BEQ :4 ;Zero width\n\n* (b) Left edge onscreen\n* Start a new line at left edge\n\n:2 lda (BASE),y\n:AMASK and #0 ;AMASK\n sta CARRY\n\n lda #0 ;0 XOR X == X\n sta carryim\n\n* Lay line down left-to-right fast as you can\n\n:inloop\n\n:RAMRD2 sta $c003\n lda (IMAGE),y\n sta $c002\n\n tax\n\n:s1 lda $FFFF,x ;SHIFTn+1\n ora carryim\n sta imbyte\n\n:c1 lda $FFFF,x ;CARRYn+1\n sta carryim\n\n:91 lda $FFFF,x ;SHIFTn\n ora CARRY ;Combine with carryover from previous byte\n\n ora (BASE),y\n eor imbyte\n\n ora #$80 ;set hibit\n sta (BASE),y\n\n:92 LDA $FFFF,X ;CARRYn\n STA CARRY ;Carry over to next byte\n\n INY\n CPY VISWIDTH\n BCC :inloop\n\n*  Extra byte on right (carryover)\n\n LDA OFFRIGHT\n BNE :5 ;Rightmost byte is offscreen\n\n:4 lda CARRY ;0's in unused part of byte\n\n ora (BASE),y\n eor carryim\n\n ora #$80\n sta (BASE),y\n\n*  Next line up\n\n:5 LDA WIDTH\n CLC\n ADC IMAGE\n STA IMAGE\n BCC :6\n INC IMAGE+1\n\n:6 DEC YCO\n LDY YCO\n CPY TOPEDGE\n beq :done\n\n jmp :0\n\n*  Restore parameters\n\n:done jmp DONE\n\n*-------------------------------\n*\n*  M I R R O R    L A Y\n*\n*  Called by LAY\n*\n*  Specified starting byte (XCO, YCO) is image's bottom\n*  right corner, not bottom left; bytes are read off image\n*  table R-L, T-B and mirrored before printing.\n*\n*  In:  A = OPACITY, sans bit 7\n*\n*-------------------------------\n\nMLAY ;A = OPACITY\n cmp #eor\n bne :1\n jmp MLayXOR\n\n:1 cmp #mask\n bcc :2\n jmp MLayMask\n\n:2 jmp MLayGen\n\n*-------------------------------\n*\n*  General (AND/OR/STORE)\n*\n*-------------------------------\nMLayGen\n JSR PREPREP\n\n LDA XCO\n SEC\n SBC WIDTH\n STA XCO\n\n jsr CROP\n bpl :cont\n jmp DONE\n:cont\n lda BANK\n sta :RAMRD1+1\n sta :RAMRD2+1\n\n LDX OFFSET\n\n LDA SHIFTL,X\n STA :91+1\n LDA SHIFTH,X\n STA :91+2\n\n LDA CARRYL,X\n STA :90+1\n STA :92+1\n LDA CARRYH,X\n STA :90+2\n STA :92+2\n\n LDA AMASKS,X\n STA AMASK\n LDA BMASKS,X\n STA BMASK\n\n LDX OPACITY\n LDA OPCODE,X\n STA :80\n STA :81\n\n* Lay on\n\n LDY YCO\n\n:0 LDA YLO,Y\n STA BASE\n\n LDA YHI,Y\n CLC\n ADC PAGE\n STA BASE+1\n\n LDY OFFLEFT\n BEQ :2\n\n* Take CARRY from off left edge\n\n LDY VISWIDTH\n\n:RAMRD1 sta $c003\n lda (IMAGE),y\n sta $c002\n\n TAX\n\n LDA MIRROR-$80,X\n TAX\n\n:90 LDA $FFFF,X ;CARRYn\n STA CARRY\n\n:1 DEY\n BPL :3\n BMI :4\n\n* Start a new line at left edge\n\n:2 LDY XCO\n LDA (BASE),Y\n AND AMASK\n STA CARRY\n\n LDY WIDTH\n DEY\n\n* Lay line down left-to-right fast as you can\n\n:3 STY YREG\n\n:RAMRD2 sta $c003\n lda (IMAGE),y\n sta $c002\n\n TAX\n\n LDA MIRROR-$80,X\n TAX\n\n:91 LDA $FFFF,X ;SHIFTn\n ORA CARRY ;Combine with carryover from previous byte\n\n LDY XCO\n:80 STA (BASE),Y ;STA/ORA/AND/EOR depending on OPACITY\n STA (BASE),Y\n\n:92 LDA $FFFF,X ;CARRYn\n STA CARRY ;Carry over to next byte\n\n INC BASE\n\n LDY YREG\n CPY RMOST\n BEQ :7\n\n DEY\n BPL :3\n\n*  Extra byte on right (carryover)\n\n:7 LDA OFFRIGHT\n BNE :5 ;Rightmost byte is offscreen\n\n:4 LDY XCO\n LDA (BASE),Y\n\n AND BMASK\n ORA CARRY\n:81 STA (BASE),Y\n STA (BASE),Y\n\n*  Next line up\n\n:5 LDA WIDTH\n CLC\n ADC IMAGE\n STA IMAGE\n BCC :6\n INC IMAGE+1\n\n:6 DEC YCO\n LDY YCO\n CPY TOPEDGE\n\n beq :done\n jmp :0\n\n:done JMP DONE\n\n*-------------------------------\n*\n*  Mask, then OR\n*\n*-------------------------------\n\nMLayMask\n ldx OPACITY ;4 = mask, 5 = visible mask\n lda OPCODE,x ;4 = and, 5 = sta\n sta :masksm1\n sta :masksm2\n\n JSR PREPREP\n\n LDA XCO\n SEC\n SBC WIDTH\n STA XCO\n\n jsr CROP\n bpl :cont\n jmp DONE\n:cont\n lda BANK\n sta :RAMRD1+1\n sta :RAMRD2+1\n\n LDX OFFSET\n\n LDA SHIFTL,X\n STA :91+1\n sta :93+1\n\n LDA SHIFTH,X\n STA :91+2\n sta :93+2\n\n LDA CARRYL,X\n STA :90+1\n STA :92+1\n sta :94+1\n sta :96+1\n\n LDA CARRYH,X\n STA :90+2\n STA :92+2\n sta :94+2\n sta :96+2\n\n LDA AMASKS,X\n STA :AMASK+1\n LDA BMASKS,X\n STA :BMASK+1\n\n* Lay on\n\n LDY YCO\n\n:0 LDA YLO,Y\n STA BASE\n\n LDA YHI,Y\n CLC\n ADC PAGE\n STA BASE+1\n\n LDY OFFLEFT\n BEQ :2\n\n* (a) Left edge offscreen\n* Take CARRY from off left edge\n\n LDY VISWIDTH\n\n:RAMRD1 sta $c003\n lda (IMAGE),y\n; eor #$ff ;TEMP\n; ora #$80 ;TEMP\n sta $c002\n\n TAX\n LDA MIRROR-$80,X\n TAX\n\n:96 lda $FFFF,x ;CARRYn\n sta carryim\n\n lda MASKTAB-$80,x\n tax\n:90 LDA $FFFF,X ;CARRYn\n STA CARRY\n\n:1 DEY\n BPL :3\n BMI :4\n\n* (b) Left edge onscreen\n* Start a new line at left edge\n\n:2 LDY XCO\n:AMASK lda #0 ;AMASK\n sta CARRY\n\n and (BASE),y\n sta carryim\n\n LDY WIDTH\n DEY\n\n* Lay line down left-to-right fast as you can\n\n:3 STY YREG\n\n:RAMRD2 sta $c003\n lda (IMAGE),y\n; eor #$ff ;TEMP\n; ora #$80 ;TEMP\n sta $c002\n\n TAX\n LDA MIRROR-$80,X\n TAX\n\n:93 lda $FFFF,x ;SHIFTn\n ora carryim\n sta imbyte\n\n:94 lda $FFFF,x ;CARRYn\n sta carryim\n\n lda MASKTAB-$80,x\n tax\n\n:91 LDA $FFFF,X ;SHIFTn\n ORA CARRY ;Combine with carryover from previous byte\n\n LDY XCO\n:masksm1 and (BASE),y\n ora imbyte\n STA (BASE),Y\n\n:92 LDA $FFFF,X ;CARRYn\n STA CARRY ;Carry over to next byte\n\n INC BASE\n\n LDY YREG\n CPY RMOST\n BEQ :7\n\n DEY\n BPL :3\n\n*  Extra byte on right (carryover)\n\n:7 LDA OFFRIGHT\n BNE :5 ;Rightmost byte is offscreen\n\n:4 LDY XCO\n LDA (BASE),Y\n\n:BMASK AND #0 ;BMASK\n ORA CARRY\n:masksm2 and (BASE),y\n ora carryim\n STA (BASE),Y\n\n*  Next line up\n\n:5 LDA WIDTH\n CLC\n ADC IMAGE\n STA IMAGE\n BCC :6\n INC IMAGE+1\n\n:6 DEC YCO\n LDY YCO\n CPY TOPEDGE\n beq :done\n\n jmp :0\n\n:done jmp DONE\n\n*-------------------------------\n*\n*  Special XOR\n*\n*-------------------------------\n\nMLayXOR\n JSR PREPREP\n\n LDA XCO\n SEC\n SBC WIDTH\n STA XCO\n\n jsr CROP\n bpl :cont\n jmp DONE\n:cont\n lda BANK\n sta :RAMRD1+1\n sta :RAMRD2+1\n\n LDX OFFSET\n\n LDA SHIFTL,X\n STA :91+1\n LDA SHIFTH,X\n STA :91+2\n\n LDA CARRYL,X\n STA :90+1\n STA :92+1\n LDA CARRYH,X\n STA :90+2\n STA :92+2\n\n jsr shiftoffset\n\n lda SHIFTL,x\n sta :s1+1\n lda SHIFTH,x\n sta :s1+2\n\n lda CARRYL,x\n sta :c1+1\n sta :c2+1\n lda CARRYH,x\n sta :c1+2\n sta :c2+2\n\n LDA AMASKS,X\n STA :AMASK+1\n\n* Lay on\n\n LDY YCO\n\n:0 LDA YLO,Y\n STA BASE\n\n LDA YHI,Y\n CLC\n ADC PAGE\n STA BASE+1\n\n LDY OFFLEFT\n BEQ :2\n\n* (a) Left edge offscreen\n* Take CARRY from off left edge\n\n LDY VISWIDTH\n\n:RAMRD1 sta $c003\n lda (IMAGE),y\n sta $c002\n\n TAX\n LDA MIRROR-$80,X\n TAX\n\n:c2 lda $FFFF,x ;CARRYn+1\n sta carryim\n\n:90 LDA $FFFF,X ;CARRYn\n STA CARRY\n\n:1 DEY\n BPL :3\n BMI :4\n\n* (b) Left edge onscreen\n* Start a new line at left edge\n\n:2 ldy XCO\n:AMASK lda #0 ;AMASK\n and (BASE),y\n sta CARRY\n\n lda #0\n sta carryim\n\n LDY WIDTH\n DEY\n\n* Lay line down left-to-right fast as you can\n\n:3 STY YREG\n\n:RAMRD2 sta $c003\n lda (IMAGE),y\n sta $c002\n\n TAX\n\n LDA MIRROR-$80,X\n TAX\n\n:s1 lda $FFFF,x ;SHIFTn\n ora carryim\n sta imbyte\n\n:c1 lda $FFFF,x ;CARRYn\n sta carryim\n\n:91 LDA $FFFF,X ;SHIFTn\n ORA CARRY ;Combine with carryover from previous byte\n\n LDY XCO\n\n ora (BASE),y\n eor imbyte\n\n ora #$80\n sta (BASE),Y\n\n:92 LDA $FFFF,X ;CARRYn\n STA CARRY ;Carry over to next byte\n\n INC BASE\n\n LDY YREG\n CPY RMOST\n BEQ :7\n\n DEY\n BPL :3\n\n*  Extra byte on right (carryover)\n\n:7 LDA OFFRIGHT\n BNE :5 ;Rightmost byte is offscreen\n\n:4 LDY XCO\n\n lda CARRY\n\n ora (BASE),Y\n eor carryim\n\n ora #$80\n STA (BASE),Y\n\n*  Next line up\n\n:5 LDA WIDTH\n CLC\n ADC IMAGE\n STA IMAGE\n BCC :6\n INC IMAGE+1\n\n:6 DEC YCO\n LDY YCO\n CPY TOPEDGE\n beq :done\n\n jmp :0\n\n:done JMP DONE\n\n*-------------------------------\n*\n* Peel\n*\n*-------------------------------\nPEEL\n sta $c004\n]ramrd1 sta $c003\n\n jmp fastlaySTA\n\n*-------------------------------\n*\n*  F A S T L A Y\n*\n*  Streamlined LAY routine\n*\n*  No offset - no clipping - no mirroring - no masking -\n*  no EOR - trashes IMAGE - may crash if overtaxed -\n*  but it's fast.\n*\n*  10/3/88: OK for images to protrude PARTLY off top\n*\n*-------------------------------\nFASTLAY\n sta $c004 ;RAMWRT main\n]ramrd2 sta $c003 ;RAMRD aux\n\n jsr setimage\n\n ldx OPACITY ;hi bit off!\n cpx #sta\n beq fastlaySTA\n\n lda OPCODE,x\n sta  :smod\n\n lda PAGE\n sta :smPAGE+1\n\n lda XCO\n sta  :smXCO+1\n\n ldy #0\n lda (IMAGE),y\n sta :smWIDTH+1\n\n sec\n sbc #1\n sta :smSTART+1\n\n lda YCO\n tax\n iny\n sbc (IMAGE),y\n bcs :ok\n lda #-1 ;limited Y-clipping\n:ok sta  :smTOP+1\n\n lda IMAGE\n clc\n adc #2\n sta IMAGE\n bcc :1\n inc IMAGE+1\n:1\n\n:outloop\n lda YLO,x\n clc\n:smXCO adc #0\n sta BASE\n\n lda YHI,x\n:smPAGE adc #$20\n sta BASE+1\n\n:smSTART ldy #3\n\n:inloop\n]ramrd3 sta $c003 ;RAMRD aux\n\n lda (IMAGE),y\n\n sta $c002 ;RAMRD main\n\n:smod ora (BASE),y\n sta (BASE),y\n\n dey\n bpl :inloop\n\n:smWIDTH lda #4\n adc IMAGE ;assume cc\n sta IMAGE\n bcc :2\n inc IMAGE+1\n:2\n dex\n:smTOP cpx #$ff\n bne :outloop\n\n rts\n\n*-------------------------------\n*\n*  Still more streamlined version of FASTLAY (STA only)\n*\n*-------------------------------\nfastlaySTA\n lda PAGE\n sta :smPAGE+1\n\n lda XCO\n sta  :smXCO+1\n\n ldy #0\n lda (IMAGE),y\n sta :smWIDTH+1\n\n sec\n sbc #1\n sta :smSTART+1\n\n lda YCO\n tax\n iny\n sbc (IMAGE),y\n bcs :ok\n lda #-1 ;limited Y-clipping\n:ok sta  :smTOP+1\n\n lda IMAGE\n clc\n adc #2\n sta IMAGE\n bcc :1\n inc IMAGE+1\n:1\n\n:outloop\n lda YLO,x\n clc\n:smXCO adc #0\n sta :smod+1\n\n lda YHI,x\n:smPAGE adc #$20\n sta :smod+2\n\n:smSTART ldy #3\n\n:inloop\n lda (IMAGE),y\n:smod sta $2000,y ;BASE\n\n dey\n bpl :inloop\n\n:smWIDTH lda #4\n adc IMAGE ;cc\n sta IMAGE\n bcc :2\n inc IMAGE+1\n:2\n dex\n:smTOP cpx #$ff\n bne :outloop\n\n rts\n\n*-------------------------------\n*\n*  F A S T M A S K\n*\n*-------------------------------\nFASTMASK\n sta $c004 ;RAMWRT main\n]ramrd4 sta $c003 ;RAMRD aux\n\n jsr setimage\n\n lda PAGE\n sta :smPAGE+1\n\n lda XCO\n sta  :smXCO+1\n\n ldy #0\n lda (IMAGE),y\n sta :smWIDTH+1\n\n sec\n sbc #1\n sta :smSTART+1\n\n lda YCO\n tax\n iny\n sbc (IMAGE),y\n bcs :ok\n lda #-1 ;limited Y-clipping\n:ok sta  :smTOP+1\n\n lda IMAGE\n clc\n adc #2\n sta IMAGE\n bcc :1\n inc IMAGE+1\n:1\n\n:outloop\n stx index\n\n lda YLO,x\n clc\n:smXCO adc #0\n sta BASE\n\n lda YHI,x\n:smPAGE adc #$20\n sta BASE+1\n\n:smSTART ldy #3\n\n:inloop\n]ramrd5 sta $c003 ;RAMRD aux\n\n lda (IMAGE),y\n\n sta $c002 ;RAMRD main\n\n tax\n lda MASKTAB-$80,X\n\n and (BASE),Y\n sta (BASE),y\n\n dey\n bpl :inloop\n\n:smWIDTH lda #4\n adc IMAGE ;cc\n sta IMAGE\n bcc :2\n inc IMAGE+1\n:2\n ldx index\n dex\n:smTOP cpx #$ff\n bne :outloop\n\n rts\n\n*-------------------------------\n*\n*  S E T F A S T   M A I N / A U X\n*\n*  Modify FASTLAY routines to expect image tables to\n*  be in main/auxmem.  SETFAST need be called only once\n*  (e.g., when switching between game & builder).\n*\n*-------------------------------\nSETFASTMAIN\n lda #$02 ;RAMRD main\n]setfast\n sta ]ramrd1+1\n sta ]ramrd2+1\n sta ]ramrd3+1\n sta ]ramrd4+1\n sta ]ramrd5+1\n rts\n\nSETFASTAUX\n lda #$03 ;RAMRD aux\n bne ]setfast\n\n*-------------------------------\n*\n*  F A S T B L A C K\n*\n*  Wipe a rectangular area to black2\n*\n*  Width/height passed in IMAGE/IMAGE+1\n*  (width in bytes, height in pixels)\n*\n*-------------------------------\n\nFASTBLACK\n lda color\n sta :smCOLOR+1\n\n lda PAGE\n sta :smPAGE+1\n\n lda XCO\n sta  :smXCO+1\n\n lda width\n sec\n sbc #1\n sta :smSTART+1\n\n lda YCO\n tax\n sbc height ;cs\n sta :smTOP+1\n\n:outloop\n lda YLO,x\n clc\n:smXCO adc #0\n sta :smod+1\n\n lda YHI,x\n:smPAGE adc #$20\n sta :smod+2\n\n:smCOLOR lda #$80\n\n:smSTART ldy #3\n\n:inloop\n:smod sta $2000,y ;BASE\n dey\n bpl :inloop\n\n dex\n:smTOP cpx #$ff\n bne :outloop\n\n rts\n\n*-------------------------------\n*\n*  C O P Y   S C R E E N\n*\n*  Copy $2000 bytes\n*\n*  In: IMAGE+1 = dest scrn, IMAGE = org scrn\n*      (use hi byte of actual memory address)\n*\n*-------------------------------\nCOPYSCRN\n lda IMAGE+1\n sta :dst1+2\n clc\n adc #$10\n sta :dst2+2\n\n lda IMAGE\n sta :org1+2\n adc #$10\n sta :org2+2\n\n ldx #$10\n\n ldy #0\n:loop\n:org1 lda $2000,y\n:dst1 sta $4000,y\n\n:org2 lda $3000,y\n:dst2 sta $5000,y\n\n iny\n bne :loop\n\n inc :org1+2\n inc :org2+2\n inc :dst1+2\n inc :dst2+2\n\n dex\n bne :loop\n\n rts\n\n*-------------------------------\n* Invert Y-tables\n*-------------------------------\nINVERTY\n ldx #191 ;low line\n ldy #0 ;high line\n\n* Switch low & high lines\n\n:loop lda YLO,x\n pha\n lda YLO,y\n sta YLO,x\n pla\n sta YLO,y\n\n lda YHI,x\n pha\n lda YHI,y\n sta YHI,x\n pla\n sta YHI,y\n\n* Move 1 line closer to ctr\n\n dex\n iny\n cpy #96\n bcc :loop\n]rts rts\n\n*-------------------------------\n lst\n ds 1\n usr $a9,1,$0000,*-org\n lst off\n"
  },
  {
    "path": "04 Support/MakeDisk/S/HRPARAMS.S",
    "content": " tr on\n* hrparams\n\nhrtables = $e000\nhrparams = $00\n*-------------------------------\n dum hrtables\n\nYLO ds $c0\nYHI ds $c0\n\nSHIFT0 ds $80\nSHIFT1 ds $80\nSHIFT2 ds $80\nSHIFT3 ds $80\nSHIFT4 ds $80\nSHIFT5 ds $80\nSHIFT6 ds $80\n\nCARRY0 ds $80\nCARRY1 ds $80\nCARRY2 ds $80\nCARRY3 ds $80\nCARRY4 ds $80\nCARRY5 ds $80\nCARRY6 ds $80\n\nMIRROR ds $80\nMASKTAB ds $80\n\nSHIFTL ds 7\nSHIFTH ds 7\nCARRYL ds 7\nCARRYH ds 7\nAMASKS ds 7\nBMASKS ds 7\n\nOPCODE ds 6\n\nendtabs dend\n\n*-------------------------------\n dum hrparams\n\nPAGE ds 1\nXCO ds 1\nYCO ds 1\nOFFSET ds 1\nIMAGE ds 2\nOPACITY ds 1\nTABLE ds 2\n\nPEELBUF ds 2\nPEELIMG ds 2\nPEELXCO ds 1\nPEELYCO ds 1\n\nTOPCUT ds 1\nLEFTCUT ds 1\nRIGHTCUT ds 1\nBANK ds 1\nBOTCUT ds 1\n\n dend\n\nheight = IMAGE\nwidth = IMAGE+1\ncolor = OPACITY\n\n lst off\n"
  },
  {
    "path": "04 Support/MakeDisk/S/HRTABLES.S",
    "content": "* hires tables\norg = $e000\n tr on\n lst off\n*-------------------------------\n org org\n*-------------------------------\n*\n* YLO/YHI\n*\n* Index: Screen Y-coord (0-191, 0 = top)\n* Returns base address on hires page 1 (add $2000 for page 2)\n*\n*-------------------------------\n\nYLO hex 00000000000000008080808080808080\n hex 00000000000000008080808080808080\n hex 00000000000000008080808080808080\n hex 00000000000000008080808080808080\n\n hex 2828282828282828A8A8A8A8A8A8A8A8\n hex 2828282828282828A8A8A8A8A8A8A8A8\n hex 2828282828282828A8A8A8A8A8A8A8A8\n hex 2828282828282828A8A8A8A8A8A8A8A8\n\n hex 5050505050505050D0D0D0D0D0D0D0D0\n hex 5050505050505050D0D0D0D0D0D0D0D0\n hex 5050505050505050D0D0D0D0D0D0D0D0\n hex 5050505050505050D0D0D0D0D0D0D0D0\n\nYHI hex 2024282C3034383C2024282C3034383C\n hex 2125292D3135393D2125292D3135393D\n hex 22262A2E32363A3E22262A2E32363A3E\n hex 23272B2F33373B3F23272B2F33373B3F\n\n hex 2024282C3034383C2024282C3034383C\n hex 2125292D3135393D2125292D3135393D\n hex 22262A2E32363A3E22262A2E32363A3E\n hex 23272B2F33373B3F23272B2F33373B3F\n\n hex 2024282C3034383C2024282C3034383C\n hex 2125292D3135393D2125292D3135393D\n hex 22262A2E32363A3E22262A2E32363A3E\n hex 23272B2F33373B3F23272B2F33373B3F\n\n*-------------------------------\n*\n* SHIFTn/CARRYn\n*\n* n = # of pixels to shift right (0-6)\n* Index: byte value w/hibit clr (0-127)\n*\n* SHIFT returns shifted byte w/hibit set\n* CARRY returns carryover to next byte w/hibit clr\n*\n*-------------------------------\n\nSHIFT0 hex 808182838485868788898A8B8C8D8E8F\n hex 909192939495969798999A9B9C9D9E9F\n hex A0A1A2A3A4A5A6A7A8A9AAABACADAEAF\n hex B0B1B2B3B4B5B6B7B8B9BABBBCBDBEBF\n\n hex C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF\n hex D0D1D2D3D4D5D6D7D8D9DADBDCDDDEDF\n hex E0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF\n hex F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF\n\nSHIFT1 hex 80828486888A8C8E90929496989A9C9E\n hex A0A2A4A6A8AAACAEB0B2B4B6B8BABCBE\n hex C0C2C4C6C8CACCCED0D2D4D6D8DADCDE\n hex E0E2E4E6E8EAECEEF0F2F4F6F8FAFCFE\n\n hex 80828486888A8C8E90929496989A9C9E\n hex A0A2A4A6A8AAACAEB0B2B4B6B8BABCBE\n hex C0C2C4C6C8CACCCED0D2D4D6D8DADCDE\n hex E0E2E4E6E8EAECEEF0F2F4F6F8FAFCFE\n\nSHIFT2 hex 8084888C9094989CA0A4A8ACB0B4B8BC\n hex C0C4C8CCD0D4D8DCE0E4E8ECF0F4F8FC\n hex 8084888C9094989CA0A4A8ACB0B4B8BC\n hex C0C4C8CCD0D4D8DCE0E4E8ECF0F4F8FC\n\n hex 8084888C9094989CA0A4A8ACB0B4B8BC\n hex C0C4C8CCD0D4D8DCE0E4E8ECF0F4F8FC\n hex 8084888C9094989CA0A4A8ACB0B4B8BC\n hex C0C4C8CCD0D4D8DCE0E4E8ECF0F4F8FC\n\nSHIFT3 hex 80889098A0A8B0B8C0C8D0D8E0E8F0F8\n hex 80889098A0A8B0B8C0C8D0D8E0E8F0F8\n hex 80889098A0A8B0B8C0C8D0D8E0E8F0F8\n hex 80889098A0A8B0B8C0C8D0D8E0E8F0F8\n\n hex 80889098A0A8B0B8C0C8D0D8E0E8F0F8\n hex 80889098A0A8B0B8C0C8D0D8E0E8F0F8\n hex 80889098A0A8B0B8C0C8D0D8E0E8F0F8\n hex 80889098A0A8B0B8C0C8D0D8E0E8F0F8\n\nSHIFT4 hex 8090A0B0C0D0E0F08090A0B0C0D0E0F0\n hex 8090A0B0C0D0E0F08090A0B0C0D0E0F0\n hex 8090A0B0C0D0E0F08090A0B0C0D0E0F0\n hex 8090A0B0C0D0E0F08090A0B0C0D0E0F0\n\n hex 8090A0B0C0D0E0F08090A0B0C0D0E0F0\n hex 8090A0B0C0D0E0F08090A0B0C0D0E0F0\n hex 8090A0B0C0D0E0F08090A0B0C0D0E0F0\n hex 8090A0B0C0D0E0F08090A0B0C0D0E0F0\n\nSHIFT5 hex 80A0C0E080A0C0E080A0C0E080A0C0E0\n hex 80A0C0E080A0C0E080A0C0E080A0C0E0\n hex 80A0C0E080A0C0E080A0C0E080A0C0E0\n hex 80A0C0E080A0C0E080A0C0E080A0C0E0\n\n hex 80A0C0E080A0C0E080A0C0E080A0C0E0\n hex 80A0C0E080A0C0E080A0C0E080A0C0E0\n hex 80A0C0E080A0C0E080A0C0E080A0C0E0\n hex 80A0C0E080A0C0E080A0C0E080A0C0E0\n\nSHIFT6 hex 80C080C080C080C080C080C080C080C0\n hex 80C080C080C080C080C080C080C080C0\n hex 80C080C080C080C080C080C080C080C0\n hex 80C080C080C080C080C080C080C080C0\n\n hex 80C080C080C080C080C080C080C080C0\n hex 80C080C080C080C080C080C080C080C0\n hex 80C080C080C080C080C080C080C080C0\n hex 80C080C080C080C080C080C080C080C0\n\nCARRY0 hex 00000000000000000000000000000000\n hex 00000000000000000000000000000000\n hex 00000000000000000000000000000000\n hex 00000000000000000000000000000000\n\n hex 00000000000000000000000000000000\n hex 00000000000000000000000000000000\n hex 00000000000000000000000000000000\n hex 00000000000000000000000000000000\n\nCARRY1 hex 00000000000000000000000000000000\n hex 00000000000000000000000000000000\n hex 00000000000000000000000000000000\n hex 00000000000000000000000000000000\n\n hex 01010101010101010101010101010101\n hex 01010101010101010101010101010101\n hex 01010101010101010101010101010101\n hex 01010101010101010101010101010101\n\nCARRY2 hex 00000000000000000000000000000000\n hex 00000000000000000000000000000000\n hex 01010101010101010101010101010101\n hex 01010101010101010101010101010101\n\n hex 02020202020202020202020202020202\n hex 02020202020202020202020202020202\n hex 03030303030303030303030303030303\n hex 03030303030303030303030303030303\n\nCARRY3 hex 00000000000000000000000000000000\n hex 01010101010101010101010101010101\n hex 02020202020202020202020202020202\n hex 03030303030303030303030303030303\n\n hex 04040404040404040404040404040404\n hex 05050505050505050505050505050505\n hex 06060606060606060606060606060606\n hex 07070707070707070707070707070707\n\nCARRY4 hex 00000000000000000101010101010101\n hex 02020202020202020303030303030303\n hex 04040404040404040505050505050505\n hex 06060606060606060707070707070707\n\n hex 08080808080808080909090909090909\n hex 0A0A0A0A0A0A0A0A0B0B0B0B0B0B0B0B\n hex 0C0C0C0C0C0C0C0C0D0D0D0D0D0D0D0D\n hex 0E0E0E0E0E0E0E0E0F0F0F0F0F0F0F0F\n\nCARRY5 hex 00000000010101010202020203030303\n hex 04040404050505050606060607070707\n hex 08080808090909090A0A0A0A0B0B0B0B\n hex 0C0C0C0C0D0D0D0D0E0E0E0E0F0F0F0F\n\n hex 10101010111111111212121213131313\n hex 14141414151515151616161617171717\n hex 18181818191919191A1A1A1A1B1B1B1B\n hex 1C1C1C1C1D1D1D1D1E1E1E1E1F1F1F1F\n\nCARRY6 hex 00000101020203030404050506060707\n hex 080809090A0A0B0B0C0C0D0D0E0E0F0F\n hex 10101111121213131414151516161717\n hex 181819191A1A1B1B1C1C1D1D1E1E1F1F\n\n hex 20202121222223232424252526262727\n hex 282829292A2A2B2B2C2C2D2D2E2E2F2F\n hex 30303131323233333434353536363737\n hex 383839393A3A3B3B3C3C3D3D3E3E3F3F\n\n*-------------------------------\n*\n* MIRROR\n*\n* Index: byte value w/hibit clr (0-127)\n* Returns mirrored byte w/hibit set\n*\n*-------------------------------\n\nMIRROR hex 80C0A0E090D0B0F088C8A8E898D8B8F8\n hex 84C4A4E494D4B4F48CCCACEC9CDCBCFC\n hex 82C2A2E292D2B2F28ACAAAEA9ADABAFA\n hex 86C6A6E696D6B6F68ECEAEEE9EDEBEFE\n\n hex 81C1A1E191D1B1F189C9A9E999D9B9F9\n hex 85C5A5E595D5B5F58DCDADED9DDDBDFD\n hex 83C3A3E393D3B3F38BCBABEB9BDBBBFB\n hex 87C7A7E797D7B7F78FCFAFEF9FDFBFFF\n\n*-------------------------------\n*\n* MASKTAB\n*\n* Index: byte value w/hibit clr (0-127)\n* Returns mask byte w/hibit set\n*\n*-------------------------------\n\nMASKTAB HEX FF,FC,F8,F8,F1,F0,F0,F0\n HEX E3,E0,E0,E0,E1,E0,E0,E0\n HEX C7,C4,C0,C0,C1,C0,C0,C0\n HEX C3,C0,C0,C0,C1,C0,C0,C0\n\n HEX 8F,8C,88,88,81,80,80,80\n HEX 83,80,80,80,81,80,80,80\n HEX 87,84,80,80,81,80,80,80\n HEX 83,80,80,80,81,80,80,80\n\n HEX 9F,9C,98,98,91,90,90,90\n HEX 83,80,80,80,81,80,80,80\n HEX 87,84,80,80,81,80,80,80\n HEX 83,80,80,80,81,80,80,80\n\n HEX 8F,8C,88,88,81,80,80,80\n HEX 83,80,80,80,81,80,80,80\n HEX 87,84,80,80,81,80,80,80\n HEX 83,80,80,80,81,80,80,80\n\n*-------------------------------\n*\n* SHIFTL-H/CARRYL-H\n*\n* Index: Bit offset (0-6)\n* Returns address of corresponding shift/carry table\n*\n*-------------------------------\n\nSHIFTL dfb #SHIFT0-$80\n dfb #SHIFT1-$80\n dfb #SHIFT2-$80\n dfb #SHIFT3-$80\n dfb #SHIFT4-$80\n dfb #SHIFT5-$80\n dfb #SHIFT6-$80\n\nSHIFTH dfb >SHIFT0-$80\n dfb >SHIFT1-$80\n dfb >SHIFT2-$80\n dfb >SHIFT3-$80\n dfb >SHIFT4-$80\n dfb >SHIFT5-$80\n dfb >SHIFT6-$80\n\nCARRYL dfb #CARRY0-$80\n dfb #CARRY1-$80\n dfb #CARRY2-$80\n dfb #CARRY3-$80\n dfb #CARRY4-$80\n dfb #CARRY5-$80\n dfb #CARRY6-$80\n\nCARRYH dfb >CARRY0-$80\n dfb >CARRY1-$80\n dfb >CARRY2-$80\n dfb >CARRY3-$80\n dfb >CARRY4-$80\n dfb >CARRY5-$80\n dfb >CARRY6-$80\n\n*-------------------------------\n*\n* AMASKS/BMASKS\n*\n* Index: Bit offset (0-6)\n* Returns appropriate mask bytes\n*\n*-------------------------------\n\nAMASKS dfb %10000000\n dfb %10000001\n dfb %10000011\n dfb %10000111\n dfb %10001111\n dfb %10011111\n dfb %10111111\n\nBMASKS dfb %11111111\n dfb %11111110\n dfb %11111100\n dfb %11111000\n dfb %11110000\n dfb %11100000\n dfb %11000000\n\n*-------------------------------\n*\n* OPCODE\n*\n* Index: OPACITY (0-5)\n* Returns opcode to put in self-mod code\n*\n*-------------------------------\n\nOPCODE dfb $31 ;and (oper),Y\n dfb $11 ;ora\n dfb $91 ;sta\n dfb $51 ;eor\n dfb $31 ;and\n dfb $91 ;sta\n\n*-------------------------------\n lst\n usr $a9,2,$0000,*-org\n lst off\n"
  },
  {
    "path": "04 Support/MakeDisk/S/MASTER.S",
    "content": "* master 3.5\nDemoDisk = 0\nFinalDisk = 1\n\norg = $f880\n lst off\n*-------------------------------\n*\n*  M  A  S  T  E  R\n*\n*  (3.5\" version)\n*\n*  Sits in main l.c.\n*\n*-------------------------------\n org org\n\n jmp FIRSTBOOT\n jmp LOADLEVEL\n jmp RELOAD\n jmp LoadStage2\n jmp RELOAD\n\n jmp ATTRACTMODE\n jmp CUTPRINCESS\n jmp SAVEGAME\n jmp LOADGAME\n jmp DOSTARTGAME\n\n jmp EPILOG\n jmp LOADALTSET\n\n*-------------------------------\n lst\n put eq\n lst\n put gameeq\n lst off\n\nTmoveauxlc = moveauxlc-$b000\n\n*-------------------------------\n* RW18 ID bytes\n\nPOPside1 = $a9\nPOPside2 = $ad\n\n* RW18 zero page vars\n\nslot = $fd\ntrack = $fe\nlastrack = $ff\n\n* RW18 commands\n\nDrvOn = $00\nDrvOff = $01\nSeek = $02\nRdSeqErr = $03\nRdGrpErr = $04\nWrtSeqErr = $05\nWrtGrpErr = $06\nModID = $07\nRdSeq = $83\nRdGrp = $84\nWrtSeq = $85\nWrtGrp = $86\nInc = $40 ;.Inc to inc track\n\n*-------------------------------\n* Local vars\n\n dum locals\n\n]dest ds 2\n]source ds 2\n]endsourc ds 2\n\nnewBGset1 ds 1\nnewBGset2 ds 1\nnewCHset ds 1\n\n dend\n\n*-------------------------------\n* Passed params\n\nparams = $3f0\n\n*-------------------------------\n* Coordinates of default load-in level\n\ndemolevel db 33,0\nfirstlevel db 33,1\n\n*-------------------------------\n* Hi bytes of crunch data\n* Double hi-res (stage 1)\n\npacSplash = $40\ndelPresents = $70\ndelByline = $72\ndelTitle = $74\npacProlog = $7c\npacSumup = $60 ;mainmem\npacEpilog = $76 ;side B\n\n* Single hires (stage 2)\n\npacProom = $84\n\n*-------------------------------\n* Music song #s\n* Set 1 (title)\n\ns_Presents = 1\ns_Byline = 2\ns_Title = 3\ns_Prolog = 4\ns_Sumup = 5\ns_Princess = 7\ns_Squeek = 8\ns_Vizier = 9\ns_Buildup = 10\ns_Magic = 11\n\n* Set 2 (epilog)\n\ns_Epilog = 1\ns_Curtain = 2\n\n*-------------------------------\n* Soft switches\n\nIOUDISoff = $c07f\nIOUDISon = $c07e\nDHIRESoff = $c05f\nDHIRESon = $c05e\nHIRESon = $c057\nHIRESoff = $c056\nPAGE2on = $c055\nPAGE2off = $c054\nMIXEDon = $c053\nMIXEDoff = $c052\nTEXTon = $c051\nTEXToff = $c050\nALTCHARon = $c00f\nALTCHARoff = $c00e\nADCOLon = $c00d\nADCOLoff = $c00c\nALTZPon = $c009\nALTZPoff = $c008\nRAMWRTaux = $c005\nRAMWRTmain = $c004\nRAMRDaux = $c003\nRAMRDmain = $c002\nADSTOREon = $c001\nADSTOREoff = $c000\n\nRWBANK2 = $c083\nRWBANK1 = $c08b\n\n*-------------------------------\nkprincess = \"p\"-$60 ;temp!\nkdemo = \"d\"-$60 ;temp!\nkrestart = \"r\"-$60\nkresume = \"l\"-$60\n\n*-------------------------------\n*\n* Notes:\n*\n* Game code sits in auxmem & aux l.c. and uses aux z.p.\n*\n* Routines in main l.c. (including MASTER and HIRES)\n* are called via intermediary routines in GRAFIX (in auxmem).\n*\n* RW18 sits in bank 1 of main language card;\n* driveon switches it in, driveoff switches it out.\n*\n*-------------------------------\n*\n*  F I R S T B O O T\n*\n*-------------------------------\nFIRSTBOOT\n lda MIXEDoff\n jsr setaux\n\n* Set BBund ID byte\n\n lda #POPside1\n sta BBundID\n\n* Load hires tables & add'l hires routines\n\n sta RAMWRTmain\n lda #2\n sta track\n jsr rw18\n db RdGrp.Inc\n hex e0,e1,e2,e3,e4,e5,e6,e7,e8\n hex e9,ea,eb,ec,ed,00,00,00,00\n\n* Load as much of Stage 3 as we can keep\n\n jsr loadperm\n\n* Turn off drive\n\n jsr driveoff\n\n* Check for IIGS\n\n jsr checkIIGS ;returns IIGS\n\n* Start attract loop\n\n jsr initsystem ;in topctrl\n\n lda #0\n sta invert ;rightside up Y tables\n\n lda #1\n sta soundon ;Sound on\n\n jmp AttractLoop\n\n*-------------------------------\n*\n*   Reload code & images\n*   (Temp routine for game development)\n*\n*-------------------------------\nRELOAD\n do 0\n jsr driveon\n\n jsr loadperm\n jsr LoadStage3\n\n jmp driveoff\n fin\n\n*-------------------------------\n*\n* Load music (1K)\n*\n* Load at $5000 mainmem & move to aux l.c.\n*\n*-------------------------------\n* Load music set 1 (title)\n\nloadmusic1\n jsr setmain\n lda #34\n sta track\n jsr rw18\n db RdSeq,$4e ;we only want $50-53\n]mm jsr setaux\n jmp xmovemusic\n\n*-------------------------------\n* Load music set 2 (game)\n\nloadmusic2\n jsr setmain\n lda #20\n sta track\n jsr rw18\n db RdGrp.Inc\n hex 50,51,52,53,00,00,00,00,00\n hex 00,00,00,00,00,00,00,00,00\n jmp ]mm\n\n*-------------------------------\n* Load music set 3 (epilog)\n\nloadmusic3\n jmp loadmusic1\n\n*-------------------------------\nsetaux sta RAMRDaux\n sta RAMWRTaux\n rts\n\nsetmain sta RAMRDmain\n sta RAMWRTmain\n rts\n\n*-------------------------------\n*\n*  D R I V E   O N\n*\n*  In: A = delay\n*      BBundID\n*\n*  Sets auxmem\n*\n*-------------------------------\ndriveon lda #0\ndriveon1 sta :delay\n\n jsr setaux ;set auxmem\n\n* switch in bank 1 (RW18)\n\n bit RWBANK1\n bit RWBANK1 ;1st 4k bank\n\n* set Bbund ID\n\n lda BBundID\n sta :IDbyte\n\n jsr rw18\n db ModID\n:IDbyte hex a9 ;Bbund ID byte\n\n* turn on drive 1\n\n jsr rw18\n db DrvOn\n:drive hex 01\n:delay hex 00\n rts\n\n*-------------------------------\n*\n*  D R I V E   O F F\n*\n*-------------------------------\ndriveoff jsr rw18\n db DrvOff\n\n* switch in bank 2\n\n bit RWBANK2\n bit RWBANK2 ;2nd 4k bank\n\n sta $c010 ;clr kbd\n\n jmp setaux ;& set auxmem\n\n*-------------------------------\n*\n*  Set first level/demo level\n*\n*-------------------------------\nset1stlevel\n lda firstlevel\n ldx firstlevel+1\nSetLevel sta params\n stx params+1\n]rts rts\n\nsetdemolevel\n lda demolevel\n ldx demolevel+1\n jmp SetLevel\n\n*-------------------------------\n*\n* Check track 22 to make sure it's the right disk\n*\n* (Scratch page 2 mainmem--return w/mainmem set)\n*\n*-------------------------------\ncheckdisk\n jsr setaux\n ldx #POPside2\n stx BBundID\n\n jsr driveon\n:loop jsr setmain\n lda #22\n sta track\n jsr rw18\n db RdGrpErr.Inc\n hex 02,00,00,00,00,00,00,00,00\n hex 00,00,00,00,00,00,00,00,00\n bcc ]rts\n jsr error\n jmp :loop\n\n*-------------------------------\n*\n* Save/load game\n*\n* Write/read 256 bytes of data: sector 0, track 23, side 2\n* We scorch an entire track, but on side 2 we can afford it\n*\n*-------------------------------\nSAVEGAME\n jsr checkdisk ;sets main\n\n sta RAMRDaux\n ldx #15\n:loop lda savedgame,x ;aux\n sta $200,x ;main\n dex\n bpl :loop\n sta RAMRDmain\n\n lda #23\n sta track\n jsr rw18\n db WrtGrpErr\n hex 02,00,00,00,00,00,00,00,00\n hex 00,00,00,00,00,00,00,00,00\n bcc :ok\n jsr whoop\n:ok jmp driveoff\n\n*-------------------------------\nLOADGAME\n jsr checkdisk ;sets main\n\n lda #23\n sta track\n jsr rw18\n db RdGrp\n hex 02,00,00,00,00,00,00,00,00\n hex 00,00,00,00,00,00,00,00,00\n\n sta RAMWRTaux\n ldx #15\n:loop lda $200,x ;main\n sta savedgame,x ;aux\n dex\n bpl :loop\n\n jmp driveoff\n\n*-------------------------------\n*\n* Load alt. character set (chtable4)\n*\n* In: Y = CHset4\n*\n*-------------------------------\nLOADALTSET\n sty newCHset\n\n jsr driveon\n\n jsr rdch4\n\n jmp driveoff\n\n*-------------------------------\n*\n* L O A D   L E V E L\n*\n* In: bluepTRK, bluepREG\n*       TRK = track # (1-33)\n*       REG = region on track (0-1)\n*     A = BGset1; X = BGset2; Y = CHset4\n*\n* Load level into \"working blueprint\" buffer in auxmem;\n* game code will make a \"backup copy\" into aux l.c.\n* (which we can't reach from here).\n*\n* If bg & char sets in memory aren't right, load them in\n*\n*-------------------------------\nLOADLEVEL\n sta newBGset1\n stx newBGset2\n sty newCHset\n\n jsr driveon\n\n jsr rdbluep ;blueprint\n jsr rdbg1 ;bg set 1\n jsr rdbg2 ;bg set 2\n jsr rdch4 ;char set 4\n\n jsr vidstuff\n\n jmp driveoff\n\n*-------------------------------\nsetbluep\n lda bluepTRK\n sta track\n lda bluepREG\n]rts rts\n\n*-------------------------------\nvidstuff\n lda BBundID\n cmp #POPside2\n bne ]rts\n lda $c000\n cmp #\"^\"\n bne ]rts\n\n jsr setmain\n lda #12\n sta track\n jsr rw18\n db RdGrp.Inc\n hex 00,00,00,00,00,00,00,00,00\n hex 00,00,00,0c,0d,0e,0f,10,11\n:loop jsr rw18\n db RdSeq.Inc\n:sm hex 12\n lda :sm\n clc\n adc #$12\n sta :sm\n cmp #$6c\n bcc :loop\n jsr driveoff\n jsr setmain\n jmp $c00\n\n*-------------------------------\n* Track data for alt bg/char sets\n*\n* Set #:        0  1  2  3  4  5  6\n\nbg1trk hex 05,00,07\nbg2trk hex 12,02,09\nch4trk hex 0d,03,04,05,0a,0b\nch4off hex 0c,00,06,0c,00,06\n\n*-------------------------------\nrdbg1 ldx newBGset1\n cpx BGset1 ;already in memory?\n beq :rts ;yes--no need to load\n stx BGset1\n lda bg1trk,x\n sta track\n jsr rw18\n db RdSeq.Inc,$60\n jsr rw18\n db RdSeq.Inc,$72\n]rts\n:rts rts\n\nrdbg2 ldx newBGset2\n cpx BGset2\n beq ]rts\n stx BGset2\n lda bg2trk,x\n sta track\n jsr rw18\n db RdSeq.Inc,$84\n rts\n\nrdch4 ldx newCHset\n cpx CHset\n beq ]rts\n stx CHset\n lda ch4trk,x\n sta track\n lda ch4off,x\n beq :off0\n cmp #6\n beq :off6\n cmp #12\n beq :off12\n rts\n\n:off12 jsr rw18\n db RdGrp.Inc\n hex 00,00,00,00,00,00,00,00,00\n hex 00,00,00,96,97,98,99,9a,9b\n jsr rw18\n db RdSeq.Inc,$9c\n rts\n\n:off6 jsr rw18\n db RdGrp.Inc\n hex 00,00,00,00,00,00,96,97,98\n hex 99,9a,9b,9c,9d,9e,9f,a0,a1\n jsr rw18\n db RdGrp.Inc\n hex a2,a3,a4,a5,a6,a7,a8,a9,aa\n hex ab,ac,ad,00,00,00,00,00,00\n rts\n\n:off0 jsr rw18\n db RdSeq.Inc,$96\n jsr rw18\n db RdGrp.Inc\n hex a8,a9,aa,ab,ac,ad,00,00,00\n hex 00,00,00,00,00,00,00,00,00\n]rts rts\n\n*-------------------------------\n*\n* read blueprint\n*\n*-------------------------------\nrdbluep\n jsr setbluep\n bne :reg1\n\n:reg0 jsr rw18\n db RdGrpErr\n hex b7,b8,b9,ba,bb,bc,bd,be,bf\n hex 00,00,00,00,00,00,00,00,00\n bcc ]rts\n jsr error\n jmp :reg0\n\n:reg1 jsr rw18\n db RdGrpErr\n hex 00,00,00,00,00,00,00,00,00\n hex b7,b8,b9,ba,bb,bc,bd,be,bf\n bcc ]rts\n jsr error\n jmp :reg1\n\n*-------------------------------\n*\n* Copy one DHires page to another\n*\n*-------------------------------\ncopy1to2\n lda #$40 ;dest\n ldx #$20 ;org\n bne copydhires\n\ncopy2to1\n lda #$20\n ldx #$40\n\ncopydhires\n sta IMAGE+1 ;dest\n stx IMAGE ;org\n\n jsr _copy2000aux\n jmp _copy2000 ;in hires\n\n*-------------------------------\n*\n*  Cut to princess screen\n*\n*-------------------------------\nCUTPRINCESS\n jsr blackout\n lda #1 ;seek track 0\ncutprincess1\n jsr LoadStage2 ;displaces bgtab1-2, chtab4\n\n lda #pacProom\n jsr SngExpand\n\n lda #$40\n sta IMAGE+1\n lda #$20\n sta IMAGE ;copy page 1 to page 2\n jmp _copy2000 ;in HIRES\n\n*-------------------------------\n*\n*  Epilog (You Win)\n*\n*-------------------------------\nEPILOG\n lda #1\n sta soundon\n sta musicon\n jsr blackout\n jsr LoadStage1B\n\n jsr Epilog\n\n lda #POPside1\n sta BBundID\n sta $c010\n:loop lda $c000\n bpl :loop ;fall thru\n\n*-------------------------------\n*\n*  A  T  T  R  A  C  T\n*\n*  Self-running \"attract mode\"\n*\n*-------------------------------\nATTRACTMODE\nAttractLoop\n lda #1\n sta musicon\n\n jsr SetupDHires\n\n jsr PubCredit\n\n jsr AuthorCredit\n\n jsr TitleScreen\n\n jsr Prolog1\n]princess\n jsr PrincessScene\n\n jsr SetupDHires\n\n jsr Prolog2\n\n jsr SilentTitle\n\n jmp Demo\n\n*-------------------------------\n*\n* Set up double hi-res\n*\n*-------------------------------\nSetupDHires\n\n* Show black lo-res scrn\n\n jsr blackout\n\n* Load in Stage 1 data\n\n jmp LoadStage1A\n\n*-------------------------------\n*\n* \"Broderbund Software Presents\"\n*\n*-------------------------------\nPubCredit\n\n* Unpack splash screen into DHires page 1\n\n jsr unpacksplash\n\n* Show DHires page 1\n\n jsr setdhires\n\n* Copy to DHires page 2\n\n jsr copy1to2\n\n lda #44\n jsr tpause\n\n* Unpack \"Broderbund Presents\" onto page 1\n\n lda #delPresents\n jsr DeltaExpPop\n\n ldx #80\n lda #s_Presents\n jsr PlaySongI\n\n jmp CleanScreen\n\n*-------------------------------\n*\n* Credit line disappears\n*\n*-------------------------------\nCleanScreen\n\n* Switch to DHires page 2\n* (credit line disappears)\n\n lda PAGE2on\n\n* Copy DHires page 2 back to hidden page 1\n\n jsr copy2to1\n\n* Display page 1\n\n lda PAGE2off\n]rts rts\n\n*-------------------------------\n*\n* \"A Game by Jordan Mechner\"\n*\n*-------------------------------\nAuthorCredit\n\n lda #42\n jsr tpause\n\n* Unpack byline onto page 1\n\n lda #delByline\n jsr DeltaExpPop\n\n ldx #80\n lda #s_Byline\n jsr PlaySongI\n\n* Credit line disappears\n\n jmp CleanScreen\n\n*-------------------------------\n*\n* \"Prince of Persia\"\n*\n*-------------------------------\nSilentTitle\n jsr unpacksplash\n\n jsr copy1to2\n\n lda #20\n jsr tpause\n\n lda #delTitle\n jsr DeltaExpPop\n\n lda #160\n jmp tpause\n\n*-------------------------------\nTitleScreen\n lda #38\n jsr tpause\n\n* Unpack title onto page 1\n\n lda #delTitle\n jsr DeltaExpPop\n\n ldx #140\n lda #s_Title\n jsr PlaySongI\n\n* Credit line disappears\n\n jmp CleanScreen\n\n*-------------------------------\n*\n*  Prologue, part 1\n*\n*-------------------------------\nProlog1\n lda #pacProlog\n sta RAMRDaux\n jsr DblExpand\n\n ldx #250\n lda #s_Prolog\n jmp PlaySongI\n\n*-------------------------------\n*\n*  Princess's room: Vizier starts hourglass\n*\n*-------------------------------\nPrincessScene\n jsr blackout\n\n jsr ReloadStuff ;wiped out by dhires titles\n\n lda #0 ;don't seek track 0\n jsr cutprincess1\n\n lda #0 ;cut #0 (intro)\n jmp xplaycut ;aux l.c. via grafix\n\n*-------------------------------\n*\n*  Prologue, part 2\n*\n*-------------------------------\nProlog2\n lda #pacSumup\n sta RAMRDmain\n jsr DblExpand\n\n jsr setdhires\n\n ldx #250\n lda #s_Sumup\n jmp PlaySongI\n\n*-------------------------------\n*\n* Epilog\n*\n*-------------------------------\nEpilog\n lda IIGS\n bne SuperEpilog ;super hi-res ending if IIGS\n\n lda #pacEpilog\n sta RAMRDaux\n jsr DblExpand\n\n jsr setdhires\n\n lda #s_Epilog\n jsr PlaySongNI\n lda #15\n jsr pauseNI\n jsr unpacksplash\n lda #75\n jsr pauseNI\n\n lda #s_Curtain\n jsr PlaySongNI\n lda #60\n jsr pauseNI\n\n jmp blackout\n\nunpacksplash\n lda #pacSplash\n sta RAMRDaux\n jmp DblExpand\n\n*-------------------------------\n*\n* Super hi-res epilog (IIGS only)\n*\n*-------------------------------\nSuperEpilog\n lda #1 ;aux\n jsr fadein ;fade in epilog screen\n jsr setaux\n\n lda #s_Epilog\n jsr PlaySongNI\n\n jsr fadeout\n lda #0 ;main\n jsr fadein ;fade to palace screen\n jsr setaux\n\n lda #80\n jsr pauseNI\n\n lda #s_Curtain\n jsr PlaySongNI\n\n lda #255\n jsr pauseNI\n\n jsr fadeout ;...and fade to black\n\n jmp * ;and hang (because it's too much\n;trouble to restart)\n\n*-------------------------------\n*\n*  Demo sequence\n*\n*-------------------------------\nDemo\n jsr blackout\n\n jsr LoadStage3\n\n jsr setdemolevel\n jsr rdbluep\n\n jsr driveoff\n\n* Go to TOPCTRL\n\n lda #0\n jmp start\n\n*-------------------------------\n* non-interruptible pause\n\npauseNI\n:loop sta pausetemp\n ldy #20\n:loop1 ldx #0\n:loop2 dex\n bne :loop2\n dey\n bne :loop1\n\n lda pausetemp\n sec\n sbc #1\n bne :loop\n]rts rts\n\n*-------------------------------\n*\n*  Start game? (if key or button pressed)\n*\n*-------------------------------\nStartGame?\n jsr musickeys\n cmp #$80 ;key or button press?\n bcc ]rts ;no\n\n do FinalDisk\n else\n cmp #kdemo ;temp!\n bne :1\n jmp Demo\n:1 cmp #kprincess ;temp!\n bne :2\n jmp ]princess\n fin\n\n:2 cmp #krestart\n bne :3\n jmp AttractLoop\n:3 ;fall thru to DOSTARTGAME\n*-------------------------------\n*\n*  Start a game\n*\n*-------------------------------\nDOSTARTGAME\n jsr blackout\n\n* Turn on drive & load Stage 3 routines\n\n:1 jsr LoadStage3\n\n* Load 1st level\n\n jsr set1stlevel\n\n jsr rdbluep\n\n* Turn off drive & set aux\n\n jsr driveoff\n\n* Go to TOPCTRL\n\n lda #1\n sta musicon\n\n do DemoDisk\n else\n\n lda keypress\n cmp #kresume\n bne :newgame\n\n* Resume old game\n\n lda #4 ;arbitrary\n jmp startresume\n\n fin\n\n* Start new game\n\n:newgame\n lda #1\n jmp start\n\n*-------------------------------\n*\n* Load permanent code & data\n* (only once)\n*\n*-------------------------------\nloadperm\n lda #3\n sta track\n\n jsr setaux\n\n jsr rw18\n db RdSeq.Inc,$0e\n\n jsr rw18\n db RdGrp.Inc\n hex 04,05,06,07,08,09,0a,0b,0c\n hex 0d,20,21,22,23,24,25,26,27\n\n jsr setmain\n lda #9\n sta track\n jsr rw18\n db RdSeq.Inc,$84\n jsr rw18\n db RdSeq.Inc,$96\n\n jsr rw18\n db RdSeq.Inc,$08\n\n jsr rw18\n db RdGrp.Inc\n hex 1a,1b,1c,1d,1e,1f,a8,a9,aa\n hex ab,ac,ad,ae,af,b0,b1,b2,b3\n\n jsr rw18\n db RdGrp.Inc\n hex b4,b5,b6,b7,b8,b9,ba,bb,bc\n hex bd,be,bf,00,00,00,00,00,00\n\n*-------------------------------\n*\n* Load aux l.c. stuff (tracks 19-21 & 34)\n* (includes music set 1)\n*\n* Load into main hires area & move to aux l.c.\n*\n*-------------------------------\n lda #19\n sta track\n\n jsr rw18\n db RdGrp.Inc\n hex 00,00,20,21,22,23,24,25,26\n hex 27,28,29,2a,2b,2c,2d,2e,2f\n\n jsr rw18\n db RdGrp.Inc\n hex 00,00,00,00,30,31,32,33,34\n hex 35,36,37,38,39,3a,3b,3c,3d\n jsr rw18\n db RdSeq.Inc,$3e\n\n lda #34\n sta track\n jsr rw18\n db RdGrp.Inc\n hex 00,00,50,51,52,53,54,55,56\n hex 57,58,59,5a,5b,5c,5d,5e,5f\n\n jsr setaux\n lda #1\n sta MSset\n\n jsr setmain\n jmp Tmoveauxlc\n\n*-------------------------------\n*\n*  Stage 1: static dbl hires screens -- no animation\n*  Stage 2: character animation only (bg is unpacked)\n*  Stage 3: full game animation\n*\n*-------------------------------\n*\n* Load Stage 1 data (sida A)\n*\n*-------------------------------\n]lsub sta track\n:test jsr rw18\n db RdSeqErr.Inc,$40\n bcc :ok\n jsr error\n jmp :test\n:ok\n jsr rw18\n db RdSeq.Inc,$52\n jsr rw18\n db RdSeq.Inc,$64\n jsr rw18\n db RdSeq.Inc,$76\n jsr rw18\n db RdSeq.Inc,$88\n rts\n\nLoadStage1A\n jsr driveon\n\n lda #22\n jsr ]lsub\n\n jsr setmain\n jsr rw18\n db RdSeq.Inc,$60\n jsr rw18\n db RdSeq.Inc,$72\n\n jsr loadmusic1\n\n jsr setaux\n lda #$ff\n sta BGset1\n sta BGset2\n sta CHset\n\n jmp driveoff\n\n*-------------------------------\n*\n*  Load stage 1 (side B)\n*\n*-------------------------------\nLoadStage1B\n jsr driveon\n\n jsr loadmusic3 ;epilog\n\n lda IIGS\n bne :shires ;Super hi-res ending only if IIGS\n\n lda #18\n jsr ]lsub\n jmp driveoff\n\n:shires jsr loadsuper ;in unpack\n jmp driveoff\n\n*-------------------------------\n*\n* Reload 2000-6000 auxmem\n* (wiped out by dhires titles)\n*\n*-------------------------------\nReloadStuff\n jsr driveon\n\n:test lda #4\n sta track\n jsr rw18\n db RdGrpErr\n hex 00,00,00,00,00,00,00,00,00\n hex 00,20,21,22,23,24,25,26,27\n bcc :ok\n jsr error\n jmp :test\n:ok\n lda #15\n sta track\n jsr rw18\n db RdSeq.Inc,$28\n jsr rw18\n db RdSeq.Inc,$3a\n jsr rw18\n db RdSeq.Inc,$4c\n\n jmp driveoff\n\n*-------------------------------\n*\n*  Load stage 2 data (6000-a800)\n*\n*-------------------------------\nLoadStage2\n ldx BBundID\n cpx #POPside2\n beq LoadStage2B\n\nLoadStage2A\n jsr driveon\n\n lda #0\n jsr loadch7 ;side A only\n\n lda #29\n]ls2 sta track\n\n:test jsr rw18\n db RdSeqErr.Inc,$60\n bcc :ok\n jsr error\n jmp :test\n:ok\n jsr rw18\n db RdSeq.Inc,$72\n jsr rw18\n db RdSeq.Inc,$84\n jsr rw18\n db RdGrp.Inc\n hex 96,97,98,99,9a,9b,9c,9d,9e\n hex 00,00,00,00,00,00,00,00,00\n\n lda #$ff\n sta BGset1\n sta BGset2\n sta CHset\n\n jmp driveoff\n\n* Load chtable7 (side A only)\n\nloadch7\n sta recheck0\n:test lda #28\n sta track\n jsr rw18\n db RdGrpErr.Inc\n hex 00,00,00,00,00,00,00,00,00\n hex 00,00,00,00,9f,a0,a1,a2,a3\n bcc :ok\n jsr error\n jmp :test\n:ok\n]rts rts\n\n*-------------------------------\n*\n*  Load stage 2 routines (side B)\n*\n*-------------------------------\nLoadStage2B\n jsr driveon\n\n lda #24\n bne ]ls2\n\n*-------------------------------\n*\n*  Load stage 3\n*  Full version (from stage 1)\n*\n*  Reload 2000-AC00 auxmem, 6000-7200 mainmem\n*\n*-------------------------------\nLoadStage3\n jsr driveon\n\n lda #4\n sta track\n\n:loop jsr rw18\n db RdGrpErr.Inc\n hex 00,00,00,00,00,00,00,00,00\n hex 00,20,21,22,23,24,25,26,27\n bcc :ok\n jsr error\n jmp :loop\n:ok\n jsr rw18\n db RdSeq.Inc,$60\n jsr rw18\n db RdSeq.Inc,$72 ;bgtable1\n\n jsr setmain\n jsr rw18\n db RdSeq.Inc,$60\n jsr rw18\n db RdSeq.Inc,$72\n\n jsr setaux\n\n lda #13\n sta track\n jsr rw18\n db RdGrp.Inc\n hex 00,00,00,00,00,00,00,00,00\n hex 00,00,00,96,97,98,99,9a,9b\n jsr rw18\n db RdSeq.Inc,$9c ;chtable4\n jsr rw18\n db RdSeq.Inc,$28\n jsr rw18\n db RdSeq.Inc,$3a\n jsr rw18\n db RdSeq.Inc,$4c\n jsr rw18\n db RdSeq.Inc,$84 ;bgtable2\n\n lda #0\n sta BGset1\n sta BGset2\n sta CHset\n\n jsr loadmusic2\n\n jmp setaux\n\n*-------------------------------\n*\n* Play song--interruptible & non-interruptible\n*\n* (Enter & exit w/ bank 2 switched in)\n*\n* In: A = song #\n*     X = length to pause if sound is turned off\n*\n*-------------------------------\nPlaySongNI ;non-interruptible\n;(& ignores sound/music toggles)\n jsr setaux\n jsr xminit\n:loop jsr xmplay\n cmp #0\n bne :loop\n]rts rts\n\n*-------------------------------\nPlaySongI ;interruptible\n jsr setaux\n beq ]rts\n\n tay\n lda musicon\n and soundon\n beq :pause\n\n tya\n jsr xminit\n:loop jsr StartGame?\n jsr xmplay\n cmp #0\n bne :loop\n]rts rts\n\n:pause txa ;falls thru to tpause\n*-------------------------------\n*\n*  In: A = delay (max = 255)\n*\n*-------------------------------\ntpause\n:loop sta pausetemp\n\n ldy #2\n:loop1 ldx #0\n:loop2 jsr StartGame?\n dex\n bne :loop2\n dey\n bne :loop1\n\n lda pausetemp\n sec\n sbc #1\n bne :loop\n]rts rts\n\n*-------------------------------\n*\n* Disk error\n*\n* Prompt user for correct disk side & wait for keypress\n*\n*-------------------------------\nerror\n jsr driveoff\n\n jsr prompt\n\n jmp driveon\n\n*-------------------------------\n lst\neof ds 1\n usr $a9,1,$a80,*-org\n lst off\n"
  },
  {
    "path": "04 Support/MakeDisk/S/MASTER525.S",
    "content": "* master\nDemoDisk = 0\nFinalDisk = 1\nCopyProtect = 1\n\norg = $f880\n lst off\n*-------------------------------\n*\n*  M  A  S  T  E  R\n*\n*  Sits in main l.c.\n*\n*-------------------------------\n org org\n\n jmp FIRSTBOOT\n jmp LOADLEVEL\n jmp RELOAD\n jmp LoadStage2\n jmp RELOAD\n\n jmp ATTRACTMODE\n jmp CUTPRINCESS\n jmp SAVEGAME\n jmp LOADGAME\n jmp DOSTARTGAME\n\n jmp EPILOG\n jmp LOADALTSET\n jmp SCREENDUMP\n\n*-------------------------------\n lst\n put eq\n lst\n put gameeq\n lst off\n\nTmoveauxlc = moveauxlc-$b000\n\n*-------------------------------\n* RW18 ID bytes\n\nPOPside1 = $a9\nPOPside2 = $ad\n\n* RW18 zero page vars\n\nslot = $fd\ntrack = $fe\nlastrack = $ff\n\n* RW18 commands\n\nDrvOn = $00\nDrvOff = $01\nSeek = $02\nRdSeqErr = $03\nRdGrpErr = $04\nWrtSeqErr = $05\nWrtGrpErr = $06\nModID = $07\nRdSeq = $83\nRdGrp = $84\nWrtSeq = $85\nWrtGrp = $86\nInc = $40 ;.Inc to inc track\n\n*-------------------------------\n* Local vars\n\n dum locals\n\n]dest ds 2\n]source ds 2\n]endsourc ds 2\n\nnewBGset1 ds 1\nnewBGset2 ds 1\nnewCHset ds 1\n\n dend\n\n*-------------------------------\n* Passed params\n\nparams = $3f0\n\n*-------------------------------\n* Coordinates of default load-in level\n\ndemolevel db 33,0\nfirstlevel db 33,1\n\n*-------------------------------\n* Hi bytes of crunch data\n* Double hi-res (stage 1)\n\npacSplash = $40\ndelPresents = $70\ndelByline = $72\ndelTitle = $74\npacProlog = $7c\npacSumup = $60 ;mainmem\npacEpilog = $76 ;side B\n\n* Single hires (stage 2)\n\npacProom = $84\n\n*-------------------------------\n* Music song #s\n* Set 1 (title)\n\ns_Presents = 1\ns_Byline = 2\ns_Title = 3\ns_Prolog = 4\ns_Sumup = 5\ns_Princess = 7\ns_Squeek = 8\ns_Vizier = 9\ns_Buildup = 10\ns_Magic = 11\n\n* Set 2 (epilog)\n\ns_Epilog = 1\ns_Curtain = 2\n\n*-------------------------------\n* Soft switches\n\nIOUDISoff = $c07f\nIOUDISon = $c07e\nDHIRESoff = $c05f\nDHIRESon = $c05e\nHIRESon = $c057\nHIRESoff = $c056\nPAGE2on = $c055\nPAGE2off = $c054\nMIXEDon = $c053\nMIXEDoff = $c052\nTEXTon = $c051\nTEXToff = $c050\nALTCHARon = $c00f\nALTCHARoff = $c00e\nADCOLon = $c00d\nADCOLoff = $c00c\nALTZPon = $c009\nALTZPoff = $c008\nRAMWRTaux = $c005\nRAMWRTmain = $c004\nRAMRDaux = $c003\nRAMRDmain = $c002\nADSTOREon = $c001\nADSTOREoff = $c000\n\nRWBANK2 = $c083\nRWBANK1 = $c08b\n\n*-------------------------------\nkprincess = \"p\"-$60 ;temp!\nkdemo = \"d\"-$60 ;temp!\nkrestart = \"r\"-$60\nkresume = \"l\"-$60\n\n*-------------------------------\n*\n* Notes:\n*\n* Game code sits in auxmem & aux l.c. and uses aux z.p.\n*\n* Routines in main l.c. (including MASTER and HIRES)\n* are called via intermediary routines in GRAFIX (in auxmem).\n*\n* RW18 sits in bank 1 of main language card;\n* driveon switches it in, driveoff switches it out.\n*\n*-------------------------------\n*\n*  F I R S T B O O T\n*\n*-------------------------------\nFIRSTBOOT\n lda MIXEDoff\n jsr setaux\n\n do CopyProtect\n else\n lda #$79\n sta redherring\n fin\n\n* Set BBund ID byte\n\n lda #POPside1\n sta BBundID\n\n* Load hires tables & add'l hires routines\n\n sta RAMWRTmain\n lda #2\n sta track\n jsr rw18\n db RdGrp.Inc\n hex e0,e1,e2,e3,e4,e5,e6,e7,e8\n hex e9,ea,eb,ec,ed,00,00,00,00\n\n* Load as much of Stage 3 as we can keep\n\n jsr loadperm\n\n* Turn off drive\n\n jsr driveoff\n\n* Check for IIGS\n\n jsr checkIIGS ;returns IIGS\n\n* Start attract loop\n\n jsr initsystem ;in topctrl\n\n lda #0\n sta invert ;rightside up Y tables\n\n lda #1\n sta soundon ;Sound on\n\n jmp AttractLoop\n\n*-------------------------------\n*\n*   Reload code & images\n*   (Temp routine for game development)\n*\n*-------------------------------\nRELOAD\n do 0\n jsr driveon\n\n jsr loadperm\n jsr LoadStage3\n\n jmp driveoff\n fin\n\n*-------------------------------\n*\n* L O A D   G A M E\n*\n*-------------------------------\n* load game 1: tracks 3-4 (code)\n*-------------------------------\nloadgame1\n lda #3\n sta track\n\n jsr setaux\n\n jsr rw18\n db RdSeq.Inc,$0e\n\n jsr rw18\n db RdGrp.Inc\n hex 04,05,06,07,08,09,0a,0b,0c\n hex 0d,20,21,22,23,24,25,26,27\n rts\n\n*-------------------------------\n* load game 2a: tracks 9-13 (mainmem image tables)\n*-------------------------------\nloadgame2a\n jsr setmain\n lda #9\n sta track\n jsr rw18\n db RdSeq.Inc,$84\n jsr rw18\n db RdSeq.Inc,$96\n\n jsr rw18\n db RdSeq.Inc,$08\n\n jsr rw18\n db RdGrp.Inc\n hex 1a,1b,1c,1d,1e,1f,a8,a9,aa\n hex ab,ac,ad,ae,af,b0,b1,b2,b3\n\n jsr rw18\n db RdGrp.Inc\n hex b4,b5,b6,b7,b8,b9,ba,bb,bc\n hex bd,be,bf,00,00,00,00,00,00\n rts\n\n*-------------------------------\n*\n* Load aux l.c. stuff (tracks 19-21 & 34)\n* (includes music set 1)\n*\n* Load into main hires area & move to aux l.c.\n*\n*-------------------------------\nloadauxlc\n jsr setmain\n\n lda #19\n sta track\n\n jsr rw18\n db RdGrp.Inc\n hex 00,00,20,21,22,23,24,25,26\n hex 27,28,29,2a,2b,2c,2d,2e,2f\n\n jsr rw18\n db RdGrp.Inc\n hex 00,00,00,00,30,31,32,33,34\n hex 35,36,37,38,39,3a,3b,3c,3d\n jsr rw18\n db RdSeq.Inc,$3e\n\n lda #34\n sta track\n jsr rw18\n db RdGrp.Inc\n hex 00,00,50,51,52,53,54,55,56\n hex 57,58,59,5a,5b,5c,5d,5e,5f\n\n jsr setaux\n lda #1\n sta MSset\n lda #$d0\n sta redherring2\n\n jsr setmain\n jmp Tmoveauxlc\n\n*-------------------------------\n*\n* Load music (1K)\n*\n* Load at $5000 mainmem & move to aux l.c.\n*\n*-------------------------------\n* Load music set 1 (title)\n\nloadmusic1\n jsr setmain\n lda #34\n sta track\n jsr rw18\n db RdSeq,$4e ;we only want $50-53\n]mm jsr setaux\n jmp xmovemusic\n\n*-------------------------------\n* Load music set 2 (game)\n\nloadmusic2\n jsr setmain\n lda #20\n sta track\n jsr rw18\n db RdGrp.Inc\n hex 50,51,52,53,00,00,00,00,00\n hex 00,00,00,00,00,00,00,00,00\n jmp ]mm\n\n*-------------------------------\n* Load music set 3 (epilog)\n\nloadmusic3\n jmp loadmusic1\n\n*-------------------------------\nsetaux sta RAMRDaux\n sta RAMWRTaux\n rts\n\nsetmain sta RAMRDmain\n sta RAMWRTmain\n rts\n\n*-------------------------------\n*\n*  D R I V E   O N\n*\n*  In: A = delay\n*      BBundID\n*\n*  Sets auxmem\n*\n*-------------------------------\ndriveon lda #0\ndriveon1 sta :delay\n\n jsr setaux ;set auxmem\n\n* switch in bank 1 (RW18)\n\n bit RWBANK1\n bit RWBANK1 ;1st 4k bank\n\n* set Bbund ID\n\n lda BBundID\n sta :IDbyte\n\n jsr rw18\n db ModID\n:IDbyte hex a9 ;Bbund ID byte\n\n* turn on drive 1\n\n jsr rw18\n db DrvOn\n:drive hex 01\n:delay hex 00\n rts\n\n*-------------------------------\n*\n*  D R I V E   O F F\n*\n*-------------------------------\ndriveoff jsr rw18\n db DrvOff\n\n* switch in bank 2\n\n bit RWBANK2\n bit RWBANK2 ;2nd 4k bank\n\n sta $c010 ;clr kbd\n\n jmp setaux ;& set auxmem\n\n*-------------------------------\n*\n*  Set first level/demo level\n*\n*-------------------------------\nset1stlevel\n lda firstlevel\n ldx firstlevel+1\nSetLevel sta params\n stx params+1\n]rts rts\n\nsetdemolevel\n lda demolevel\n ldx demolevel+1\n jmp SetLevel\n\n*-------------------------------\n*\n* Hires screen dump\n*\n* Dump hires screen to tracks 22-23\n* In: A = page # (00/20)\n*\n*-------------------------------\nSCREENDUMP\n do 0\n\n clc\n adc #$20\n sta :sm1\n adc #$12\n sta :sm2\n\n lda BBundID\n pha\n jsr checkdisk\n jsr setmain\n lda #22\n sta track\n jsr rw18\n hex c5\n:sm1 hex 20\n jsr rw18\n hex c5\n:sm2 hex 32\n\n jsr driveoff\n pla\n sta BBundID\n]rts rts\n\n fin\n\n*-------------------------------\n*\n* Check track 22 to make sure it's the right disk\n*\n* (Scratch page 2 mainmem--return w/mainmem set)\n*\n*-------------------------------\ncheckdisk\n jsr setaux\n ldx #POPside2\n stx BBundID\n\n jsr driveon\n:loop jsr setmain\n lda #22\n sta track\n jsr rw18\n db RdGrpErr.Inc\n hex 02,00,00,00,00,00,00,00,00\n hex 00,00,00,00,00,00,00,00,00\n bcc ]rts\n jsr error\n jmp :loop\n\n*-------------------------------\n*\n* Save/load game\n*\n* Write/read 256 bytes of data: sector 0, track 23, side 2\n* We scorch an entire track, but on side 2 we can afford it\n*\n*-------------------------------\nSAVEGAME\n jsr checkdisk ;sets main\n\n sta RAMRDaux\n ldx #15\n:loop lda savedgame,x ;aux\n sta $200,x ;main\n dex\n bpl :loop\n sta RAMRDmain\n\n lda #23\n sta track\n jsr rw18\n db WrtGrpErr\n hex 02,00,00,00,00,00,00,00,00\n hex 00,00,00,00,00,00,00,00,00\n bcc :ok\n jsr whoop\n:ok jmp driveoff\n\n*-------------------------------\nLOADGAME\n jsr checkdisk ;sets main\n\n lda #23\n sta track\n jsr rw18\n db RdGrp\n hex 02,00,00,00,00,00,00,00,00\n hex 00,00,00,00,00,00,00,00,00\n\n sta RAMWRTaux\n ldx #15\n:loop lda $200,x ;main\n sta savedgame,x ;aux\n dex\n bpl :loop\n\n jmp driveoff\n\n*-------------------------------\n*\n* Load alt. character set (chtable4)\n*\n* In: Y = CHset4\n*\n*-------------------------------\nLOADALTSET\n sty newCHset\n\n jsr driveon\n\n jsr rdch4\n\n jmp driveoff\n\n*-------------------------------\n*\n* L O A D   L E V E L\n*\n* In: bluepTRK, bluepREG\n*       TRK = track # (1-33)\n*       REG = region on track (0-1)\n*     A = BGset1; X = BGset2; Y = CHset4\n*\n* Load level into \"working blueprint\" buffer in auxmem;\n* game code will make a \"backup copy\" into aux l.c.\n* (which we can't reach from here).\n*\n* If bg & char sets in memory aren't right, load them in\n*\n*-------------------------------\nLOADLEVEL\n sta newBGset1\n stx newBGset2\n sty newCHset\n\n jsr driveon\n\n jsr rdbluep ;blueprint\n jsr rdbg1 ;bg set 1\n jsr rdbg2 ;bg set 2\n jsr rdch4 ;char set 4\n\n jsr vidstuff\n\n jmp driveoff\n\n*-------------------------------\nsetbluep\n lda bluepTRK\n sta track\n lda bluepREG\n]rts rts\n\n*-------------------------------\nvidstuff\n lda BBundID\n cmp #POPside2\n bne ]rts\n lda $c000\n cmp #\"^\"\n bne ]rts\n\n jsr setmain\n lda #12\n sta track\n jsr rw18\n db RdGrp.Inc\n hex 00,00,00,00,00,00,00,00,00\n hex 00,00,00,0c,0d,0e,0f,10,11\n:loop jsr rw18\n db RdSeq.Inc\n:sm hex 12\n lda :sm\n clc\n adc #$12\n sta :sm\n cmp #$6c\n bcc :loop\n jsr driveoff\n jsr setmain\n jmp $c00\n\n*-------------------------------\n* Track data for alt bg/char sets\n*\n* Set #:        0  1  2  3  4  5  6\n\nbg1trk hex 05,00,07\nbg2trk hex 12,02,09\nch4trk hex 0d,03,04,05,0a,0b\nch4off hex 0c,00,06,0c,00,06\n\n*-------------------------------\nrdbg1 ldx newBGset1\n cpx BGset1 ;already in memory?\n beq :rts ;yes--no need to load\n stx BGset1\n lda bg1trk,x\n sta track\n jsr rw18\n db RdSeq.Inc,$60\n jsr rw18\n db RdSeq.Inc,$72\n]rts\n:rts rts\n\nrdbg2 ldx newBGset2\n cpx BGset2\n beq ]rts\n stx BGset2\n lda bg2trk,x\n sta track\n jsr rw18\n db RdSeq.Inc,$84\n rts\n\nrdch4 ldx newCHset\n cpx CHset\n beq ]rts\n stx CHset\n lda ch4trk,x\n sta track\n lda ch4off,x\n beq :off0\n cmp #6\n beq :off6\n cmp #12\n beq :off12\n rts\n\n:off12 jsr rw18\n db RdGrp.Inc\n hex 00,00,00,00,00,00,00,00,00\n hex 00,00,00,96,97,98,99,9a,9b\n jsr rw18\n db RdSeq.Inc,$9c\n rts\n\n:off6 jsr rw18\n db RdGrp.Inc\n hex 00,00,00,00,00,00,96,97,98\n hex 99,9a,9b,9c,9d,9e,9f,a0,a1\n jsr rw18\n db RdGrp.Inc\n hex a2,a3,a4,a5,a6,a7,a8,a9,aa\n hex ab,ac,ad,00,00,00,00,00,00\n rts\n\n:off0 jsr rw18\n db RdSeq.Inc,$96\n jsr rw18\n db RdGrp.Inc\n hex a8,a9,aa,ab,ac,ad,00,00,00\n hex 00,00,00,00,00,00,00,00,00\n]rts rts\n\n*-------------------------------\n*\n* read blueprint\n*\n*-------------------------------\nrdbluep\n jsr setbluep\n bne :reg1\n\n:reg0 jsr rw18\n db RdGrpErr\n hex b7,b8,b9,ba,bb,bc,bd,be,bf\n hex 00,00,00,00,00,00,00,00,00\n bcc ]rts\n jsr error\n jmp :reg0\n\n:reg1 jsr rw18\n db RdGrpErr\n hex 00,00,00,00,00,00,00,00,00\n hex b7,b8,b9,ba,bb,bc,bd,be,bf\n bcc ]rts\n jsr error\n jmp :reg1\n\n*-------------------------------\n*\n* Copy one DHires page to another\n*\n*-------------------------------\ncopy1to2\n lda #$40 ;dest\n ldx #$20 ;org\n bne copydhires\n\ncopy2to1\n lda #$20\n ldx #$40\n\ncopydhires\n sta IMAGE+1 ;dest\n stx IMAGE ;org\n\n jsr _copy2000aux\n jmp _copy2000 ;in hires\n\n*-------------------------------\n*\n*  Cut to princess screen\n*\n*-------------------------------\nCUTPRINCESS\n jsr blackout\n lda #1 ;seek track 0\ncutprincess1\n jsr LoadStage2 ;displaces bgtab1-2, chtab4\n\n lda #pacProom\n jsr SngExpand\n\n lda #$40\n sta IMAGE+1\n lda #$20\n sta IMAGE ;copy page 1 to page 2\n jmp _copy2000 ;in HIRES\n\n*-------------------------------\n*\n*  Epilog (You Win)\n*\n*-------------------------------\nEPILOG\n lda #1\n sta soundon\n sta musicon\n jsr blackout\n jsr LoadStage1B\n\n jsr Epilog\n\n lda #POPside1\n sta BBundID\n sta $c010\n:loop lda $c000\n bpl :loop ;fall thru\n\n*-------------------------------\n*\n*  A  T  T  R  A  C  T\n*\n*  Self-running \"attract mode\"\n*\n*-------------------------------\nATTRACTMODE\nAttractLoop\n lda #1\n sta musicon\n\n jsr SetupDHires\n\n jsr PubCredit\n\n jsr AuthorCredit\n\n jsr TitleScreen\n\n jsr Prolog1\n]princess\n jsr PrincessScene\n\n jsr SetupDHires\n\n jsr Prolog2\n\n jsr SilentTitle\n\n jmp Demo\n\n*-------------------------------\n*\n* Set up double hi-res\n*\n*-------------------------------\nSetupDHires\n\n* Show black lo-res scrn\n\n jsr blackout\n\n* Load in Stage 1 data\n\n jmp LoadStage1A\n\n*-------------------------------\n*\n* \"Broderbund Software Presents\"\n*\n*-------------------------------\nPubCredit\n\n* Unpack splash screen into DHires page 1\n\n jsr unpacksplash\n\n* Show DHires page 1\n\n jsr setdhires\n\n* Copy to DHires page 2\n\n jsr copy1to2\n\n lda #44\n jsr tpause\n\n* Unpack \"Broderbund Presents\" onto page 1\n\n lda #delPresents\n jsr DeltaExpPop\n\n ldx #80\n lda #s_Presents\n jsr PlaySongI\n\n jmp CleanScreen\n\n*-------------------------------\n*\n* Credit line disappears\n*\n*-------------------------------\nCleanScreen\n\n* Switch to DHires page 2\n* (credit line disappears)\n\n lda PAGE2on\n\n* Copy DHires page 2 back to hidden page 1\n\n jsr copy2to1\n\n* Display page 1\n\n lda PAGE2off\n]rts rts\n\n*-------------------------------\n*\n* \"A Game by Jordan Mechner\"\n*\n*-------------------------------\nAuthorCredit\n\n lda #42\n jsr tpause\n\n* Unpack byline onto page 1\n\n lda #delByline\n jsr DeltaExpPop\n\n ldx #80\n lda #s_Byline\n jsr PlaySongI\n\n* Credit line disappears\n\n jmp CleanScreen\n\n*-------------------------------\n*\n* \"Prince of Persia\"\n*\n*-------------------------------\nSilentTitle\n jsr unpacksplash\n\n jsr copy1to2\n\n lda #20\n jsr tpause\n\n lda #delTitle\n jsr DeltaExpPop\n\n lda #160\n jmp tpause\n\n*-------------------------------\nTitleScreen\n lda #38\n jsr tpause\n\n* Unpack title onto page 1\n\n lda #delTitle\n jsr DeltaExpPop\n\n ldx #140\n lda #s_Title\n jsr PlaySongI\n\n* Credit line disappears\n\n jmp CleanScreen\n\n*-------------------------------\n*\n*  Prologue, part 1\n*\n*-------------------------------\nProlog1\n lda #pacProlog\n sta RAMRDaux\n jsr DblExpand\n\n ldx #250\n lda #s_Prolog\n jmp PlaySongI\n\n*-------------------------------\n*\n*  Princess's room: Vizier starts hourglass\n*\n*-------------------------------\nPrincessScene\n jsr blackout\n\n jsr ReloadStuff ;wiped out by dhires titles\n\n lda #0 ;don't seek track 0\n jsr cutprincess1\n\n lda #0 ;cut #0 (intro)\n jmp xplaycut ;aux l.c. via grafix\n\n*-------------------------------\n*\n*  Prologue, part 2\n*\n*-------------------------------\nProlog2\n lda #pacSumup\n sta RAMRDmain\n jsr DblExpand\n\n jsr setdhires\n\n ldx #250\n lda #s_Sumup\n jmp PlaySongI\n\n*-------------------------------\n*\n* Epilog\n*\n*-------------------------------\nEpilog\n lda #pacEpilog\n sta RAMRDaux\n jsr DblExpand\n\n jsr setdhires\n\n lda #s_Epilog\n jsr PlaySongNI\n lda #15\n jsr pauseNI\n jsr unpacksplash\n lda #75\n jsr pauseNI\n\n lda #s_Curtain\n jsr PlaySongNI\n lda #60\n jsr pauseNI\n\n jmp blackout\n\nunpacksplash\n lda #pacSplash\n sta RAMRDaux\n jmp DblExpand\n\n*-------------------------------\n*\n*  Demo sequence\n*\n*-------------------------------\nDemo\n jsr blackout\n\n jsr LoadStage3\n\n jsr setdemolevel\n jsr rdbluep\n\n jsr driveoff\n\n* Go to TOPCTRL\n\n lda #0\n jmp start\n\n*-------------------------------\n* non-interruptible pause\n\npauseNI\n:loop sta pausetemp\n ldy #20\n:loop1 ldx #0\n:loop2 dex\n bne :loop2\n dey\n bne :loop1\n\n lda pausetemp\n sec\n sbc #1\n bne :loop\n]rts rts\n\n*-------------------------------\n*\n*  Start game? (if key or button pressed)\n*\n*-------------------------------\nStartGame?\n jsr musickeys\n cmp #$80 ;key or button press?\n bcc ]rts ;no\n\n do FinalDisk\n else\n cmp #kdemo ;temp!\n bne :1\n jmp Demo\n:1 cmp #kprincess ;temp!\n bne :2\n jmp ]princess\n fin\n\n:2 cmp #krestart\n bne :3\n jmp AttractLoop\n:3 ;fall thru to DOSTARTGAME\n*-------------------------------\n*\n*  Start a game\n*\n*-------------------------------\nDOSTARTGAME\n jsr blackout\n\n* Turn on drive & load Stage 3 routines\n\n:1 jsr LoadStage3\n\n* Load 1st level\n\n jsr set1stlevel\n\n jsr rdbluep\n\n* Turn off drive & set aux\n\n jsr driveoff\n\n* Go to TOPCTRL\n\n lda #1\n sta musicon\n\n do DemoDisk\n else\n\n lda keypress\n cmp #kresume\n bne :newgame\n\n* Resume old game\n\n lda #4 ;arbitrary\n jmp startresume\n\n fin\n\n* Start new game\n\n:newgame\n lda #1\n jmp start\n\n*-------------------------------\n*\n* Load permanent code & data\n* (only once)\n*\n*-------------------------------\nloadperm\n jsr loadgame1 ;tracks 3-4\n jsr loadgame2a ;tracks 9-13 (main image tables)\n jmp loadauxlc\n\n*-------------------------------\n*\n*  Stage 1: static dbl hires screens -- no animation\n*  Stage 2: character animation only (bg is unpacked)\n*  Stage 3: full game animation\n*\n*-------------------------------\n*\n* Load Stage 1 data (sida A)\n*\n*-------------------------------\n]lsub sta track\n:test jsr rw18\n db RdSeqErr.Inc,$40\n bcc :ok\n jsr error\n jmp :test\n:ok\n jsr rw18\n db RdSeq.Inc,$52\n jsr rw18\n db RdSeq.Inc,$64\n jsr rw18\n db RdSeq.Inc,$76\n jsr rw18\n db RdSeq.Inc,$88\n rts\n\nLoadStage1A\n jsr driveon\n\n lda #22\n jsr ]lsub\n\n jsr setmain\n jsr rw18\n db RdSeq.Inc,$60\n jsr rw18\n db RdSeq.Inc,$72\n\n jsr loadmusic1\n\n jsr setaux\n lda #$ff\n sta BGset1\n sta BGset2\n sta CHset\n\n jmp driveoff\n\n*-------------------------------\n*\n*  Load stage 1 (side B)\n*\n*-------------------------------\nLoadStage1B\n jsr driveon\n\n lda #18\n jsr ]lsub\n\n jsr loadmusic3 ;epilog\n\n jmp driveoff\n\n*-------------------------------\n*\n* Reload 2000-6000 auxmem\n* (wiped out by dhires titles)\n*\n*-------------------------------\nReloadStuff\n jsr driveon\n\n:test lda #4\n sta track\n jsr rw18\n db RdGrpErr\n hex 00,00,00,00,00,00,00,00,00\n hex 00,20,21,22,23,24,25,26,27\n bcc :ok\n jsr error\n jmp :test\n:ok\n lda #15\n sta track\n jsr rw18\n db RdSeq.Inc,$28\n jsr rw18\n db RdSeq.Inc,$3a\n jsr rw18\n db RdSeq.Inc,$4c\n\n jmp driveoff\n\n*-------------------------------\n*\n*  Load stage 2 data (6000-a800)\n*\n*-------------------------------\nLoadStage2\n ldx BBundID\n cpx #POPside2\n beq LoadStage2B\n\nLoadStage2A\n pha\n jsr driveon\n pla\n beq :1 ;don't seek track 0\n\n jsr rw18 ;Copy protection has already been checked\n db Seek,0,0 ;Drive is already on & at track 0\n;This is just a ruse\n jsr text ;So's this\n\n lda #0\n:1 jsr loadch7 ;side A only\n\n lda #29\n]ls2 sta track\n\n:test jsr rw18\n db RdSeqErr.Inc,$60\n bcc :ok\n jsr error\n jmp :test\n:ok\n jsr rw18\n db RdSeq.Inc,$72\n jsr rw18\n db RdSeq.Inc,$84\n jsr rw18\n db RdGrp.Inc\n hex 96,97,98,99,9a,9b,9c,9d,9e\n hex 00,00,00,00,00,00,00,00,00\n\n lda #$ff\n sta BGset1\n sta BGset2\n sta CHset\n\n jmp driveoff\n\n* Load chtable7 (side A only)\n\nloadch7\n sta recheck0\n:test lda #28\n sta track\n jsr rw18\n db RdGrpErr.Inc\n hex 00,00,00,00,00,00,00,00,00\n hex 00,00,00,00,9f,a0,a1,a2,a3\n bcc :ok\n jsr error\n inc recheck0\n jmp :test\n:ok\n]rts rts\n\n*-------------------------------\n*\n*  Load stage 2 routines (side B)\n*\n*-------------------------------\nLoadStage2B\n jsr driveon\n\n lda #24\n bne ]ls2\n\n*-------------------------------\n*\n*  Load stage 3\n*  Full version (from stage 1)\n*\n*  Reload 2000-AC00 auxmem, 6000-7200 mainmem\n*\n*-------------------------------\nLoadStage3\n jsr driveon\n:purple\n jsr rw18\n db Seek,0,0\n\n do CopyProtect\n jsr purple ;in unpack ($ea00)\n;sets purpleflag ($da) to #$01\n ;uses $6300 aux as scratch\n fin\n\n jsr rw18\n db Seek,0,4\n\n jsr rw18\n db RdGrpErr.Inc\n hex 00,00,00,00,00,00,00,00,00\n hex 00,20,21,22,23,24,25,26,27\n bcc :ok\n jsr error\n jmp :purple\n:ok\n jsr rw18\n db RdSeq.Inc,$60\n jsr rw18\n db RdSeq.Inc,$72 ;bgtable1\n\n jsr setmain\n jsr rw18\n db RdSeq.Inc,$60\n jsr rw18\n db RdSeq.Inc,$72\n\n jsr setaux\n\n lda #13\n sta track\n jsr rw18\n db RdGrp.Inc\n hex 00,00,00,00,00,00,00,00,00\n hex 00,00,00,96,97,98,99,9a,9b\n jsr rw18\n db RdSeq.Inc,$9c ;chtable4\n jsr rw18\n db RdSeq.Inc,$28\n jsr rw18\n db RdSeq.Inc,$3a\n jsr rw18\n db RdSeq.Inc,$4c\n jsr rw18\n db RdSeq.Inc,$84 ;bgtable2\n\n lda #0\n sta BGset1\n sta BGset2\n sta CHset\n\n jsr loadmusic2\n\n jmp setaux\n\n*-------------------------------\n*\n* Play song--interruptible & non-interruptible\n*\n* (Enter & exit w/ bank 2 switched in)\n*\n* In: A = song #\n*     X = length to pause if sound is turned off\n*\n*-------------------------------\nPlaySongNI ;non-interruptible\n;(& ignores sound/music toggles)\n jsr setaux\n jsr xminit\n:loop jsr xmplay\n cmp #0\n bne :loop\n]rts rts\n\n*-------------------------------\nPlaySongI ;interruptible\n jsr setaux\n beq ]rts\n\n tay\n lda musicon\n and soundon\n beq :pause\n\n tya\n jsr xminit\n:loop jsr StartGame?\n jsr xmplay\n cmp #0\n bne :loop\n]rts rts\n\n:pause txa ;falls thru to tpause\n*-------------------------------\n*\n*  In: A = delay (max = 255)\n*\n*-------------------------------\ntpause\n:loop sta pausetemp\n\n ldy #2\n:loop1 ldx #0\n:loop2 jsr StartGame?\n dex\n bne :loop2\n dey\n bne :loop1\n\n lda pausetemp\n sec\n sbc #1\n bne :loop\n]rts rts\n\n*-------------------------------\n*\n* Disk error\n*\n* Prompt user for correct disk side & wait for keypress\n*\n*-------------------------------\nerror\n jsr driveoff\n\n jsr prompt\n\n jmp driveon\n\n*-------------------------------\n lst\neof ds 1\n usr $a9,1,$a80,*-org\n lst off\n"
  },
  {
    "path": "04 Support/MakeDisk/S/MISC.S",
    "content": "* misc\norg = $f900\nDemoDisk = 0\n tr on\n lst off\n*-------------------------------\n org org\n\n jmp VANISHCHAR\n jmp MOVEMUSIC\n clc\n bcc MOVEAUXLC ;relocatable\n jmp FIRSTGUARD\n jmp MARKMETERS\n\n jmp POTIONEFFECT\n jmp MOUSERESCUE\n jmp STABCHAR\n jmp UNHOLY\n jmp REFLECTION\n\n jmp MARKKIDMETER\n jmp MARKOPPMETER\n jmp BONESRISE\n jmp DECSTR\n jmp DOSAVEGAME\n\n jmp LOADLEVELX\n jmp CHECKALERT\n jmp DISPVERSION\n\n*-------------------------------\n lst\n put eq\n lst\n put gameeq\n lst\n put seqdata\n lst\n put movedata\n lst\n put soundnames\n lst off\n\n dum $f0\n]Xcount ds 1\n]Xend ds 1\n dend\n\n*-------------------------------\nALTZPon = $c009\nALTZPoff = $c008\nRAMWRTaux = $c005\nRAMWRTmain = $c004\nRAMRDaux = $c003\nRAMRDmain = $c002\nADSTOREon = $c001\nADSTOREoff = $c000\nRWBANK2 = $c083\nRWBANK1 = $c08b\n\nPOPside1 = $a9\nPOPside2 = $ad\n\nFirstSideB = 3\n\n*-------------------------------\n*\n* Vanish character\n*\n*-------------------------------\nVANISHCHAR\n lda #86\n sta CharFace\n lda #0\n sta CharAction\n sta CharLife\n sec\n sbc OppStrength\n sta ChgOppStr\n]rts rts\n\n*-------------------------------\n*\n*  Move a block of memory\n*\n*  In: A < X.Y\n*\n*  20 < 40.60 means 2000 < 4000.5fffm\n*  WARNING: If x >= y, routine will wipe out 64k\n*\n*-------------------------------\n dum locals\n]dest ds 2\n]source ds 2\n]endsourc ds 2\n dend\n\nMOVEMEM sta ]dest+1\n stx ]source+1\n sty ]endsourc+1\n\n ldy #0\n sty ]dest\n sty ]source\n sty ]endsourc\n\n:loop lda (]source),y\n sta (]dest),y\n iny\n bne :loop\n\n inc ]source+1\n inc ]dest+1\n lda ]source+1\n cmp ]endsourc+1\n bne :loop\n rts\n\n*-------------------------------\n*\n* Move 1K of music data from $5000 mainmem to aux l.c.\n*\n*-------------------------------\nMOVEMUSIC\n bit RWBANK1\n bit RWBANK1\n sta RAMRDmain\n\n lda #$d0\n ldx #$50\n ldy #$54\n jsr MOVEMEM\n\n sta RAMRDaux\n]rts rts\n\n*-------------------------------\n*\n*  Move $2000.5FFF mainmem to auxiliary language card\n*  Also sets interrupt vector ($FFFE.FFFF) in both l.c.'s\n*\n*  NOTE: This code is loaded into mainmem by MASTER\n*  and called while still in mainmem.  Once in aux l.c.\n*  this routine is useless!\n*\n*  Returns control to main l.c. bank 1\n*\n*-------------------------------\nTmovemem = MOVEMEM-$b000\n\nMOVEAUXLC\n sta ALTZPon\n bit RWBANK2\n bit RWBANK2\n\n lda #$d0\n ldx #$20\n ldy #$50\n jsr Tmovemem\n\n bit RWBANK1\n bit RWBANK1\n\n lda #$d0\n ldx #$50\n ldy #$60\n jsr Tmovemem\n\n* & set VBL interrupts\n\n lda #vbli ;routine in GRAFIX\n sta $FFFE\n lda #>vbli\n sta $FFFF\n\n sta ALTZPoff\n\n lda #vbli\n sta $FFFE\n lda #>vbli\n sta $FFFF ;set in main l.c. too\n\n rts\n\n*-------------------------------\n*\n* Player can't run or jump past en-garde guard\n*\n*-------------------------------\nFIRSTGUARD\n lda EnemyAlert\n cmp #2\n bcc ]rts\n lda CharSword\n bne ]rts\n lda OpSword\n beq ]rts\n lda OpAction\n cmp #2\n bcs ]rts\n\n lda CharFace\n cmp OpFace\n beq ]rts\n\n jsr getopdist\n cmp #-15\n bcc ]rts\n\n* Bump off guard\n\n ldx CharBlockY\n lda FloorY+1,x\n sta CharY\n lda #bump\n jsr jumpseq\n jmp animchar\n\n*-------------------------------\n*\n* Mark strength meters\n*\n*-------------------------------\nMark3 jsr Mark1 ;mark 3 blocks\n iny\nMark2 jsr Mark1 ;mark 2 blocks\n iny\nMark1 lda #4\n sta height\n clc\n lda #2\n jsr markwipe\n jmp markred\n\nMARKMETERS\n jsr MARKKIDMETER\n jmp MARKOPPMETER\n\nMARKKIDMETER\n ldy #20\n bne Mark3\n\nMARKOPPMETER\n ldy #28\n bne Mark2\n]rts rts\n\n*-------------------------------\n*\n* Potion takes effect\n*\n*-------------------------------\nwtlesstimer = 200\nvibetimer = 3\n\nPOTIONEFFECT\n lda CharID\n bne ]rts\n\n ldx lastpotion\n beq ]rts\n bpl :notswd\n\n* Sword (-1)\n\n lda #1\n sta gotsword\n lda #s_Sword\n ldx #25\n jsr cuesong\n lda #$ff\n sta lightcolor\n lda #3\n sta lightning ;3 white flashes\n rts\n\n* Recharge meter (1)\n\n:notswd cpx #1\n bne :2\n\n lda KidStrength\n cmp MaxKidStr\n beq ]rts ;already at full strength\n\n lda #$99\n sta lightcolor\n lda #2\n sta lightning ;2 orange flashes\n lda #s_ShortPot\n ldx #25\n jsr cuesong\n lda #1\n sta ChgKidStr\n rts\n\n* Boost meter (2)\n\n:2 cpx #2\n bne :3\n lda #$99\n sta lightcolor\n lda #5\n sta lightning ;5 orange flashes\n lda #s_Potion\n ldx #25\n jsr cuesong\n jmp boostmeter\n\n* Weightless (3)\n\n:3 cpx #3\n bne :4\n lda #s_ShortPot\n ldx #25\n jsr cuesong\n lda #wtlesstimer\n sta weightless\n lda #vibetimer\n sta vibes\n rts\n\n* Upside down (4)\n\n:4 cpx #4\n bne :5\n lda invert\n eor #$ff\n sta invert\n lda #2\n sta redrawflg\n jmp inverty\n\n* Yecch (5)\n\n:5 cpx #5\n bne :6\n lda #Splat ;yecch\n jsr addsound\n lda #-1\n sta ChgKidStr\n rts\n:6\n]rts rts\n\n*-------------------------------\n*\n* Mouse rescues you\n*\n*-------------------------------\nMOUSERESCUE\n jsr LoadKid\n\n lda #24 ;mouse\n sta CharID\n lda #200\n sta CharX\n ldx #0\n stx CharBlockY\n lda FloorY+1,x\n sta CharY\n lda #-1\n sta CharFace\n sta CharLife\n lda #1\n sta OppStrength\n\n lda #Mscurry\n jsr jumpseq\n jsr animchar\n\n jmp SaveShad\n\n*-------------------------------\n*\n* Stab character\n*\n*-------------------------------\nSTABCHAR\n lda CharLife\n bpl ]rts ;already dead\n lda CharSword\n cmp #2\n bne :DL ;defenseless\n lda CharID\n cmp #4\n beq :wounded ;skel has no life points\n\n lda #1\n jsr decstr\n bne :wounded\n\n ldx CharID\n beq :killed\n\n ldx CharID\n cpx #4 ;skeleton\n bne :killed\n lda #0\n sta ChgOppStr ;skel is invincible\n]rts rts\n\n:killed jsr getbehind\n cmp #space\n bne :onground\n jsr getdist ;to EOB\n cmp #4\n bcc :onground\n;if char is killed at edge, knock him off\n sec\n sbc #14\n jsr addcharx\n sta CharX\n inc CharBlockY\n lda #fightfall\n jsr jumpseq\n jmp :3\n\n:onground lda #stabkill\n bne :2\n\n:wounded lda #stabbed\n:2 jsr jumpseq\n\n:1 ldx CharBlockY\n lda FloorY+1,x\n sta CharY\n lda #0\n sta CharYVel\n\n:3 lda #Splat\n jsr addsound\n\n jmp animchar\n\n* stabbed when defenseless\n\n:DL lda #100\n jsr decstr\n\n lda #stabkill ;dropdead?\n jmp :killed\n\n*-------------------------------\n*\n* If shadow dies, you die (& vice versa)\n*\n*-------------------------------\nUNHOLY\n lda level\n cmp #12\n bne ]rts\n\n lda OpID\n ora CharID\n cmp #1 ;kid & shadow?\n bne ]rts\n\n lda CharLife\n bpl ]rts\n lda OpLife\n bmi ]rts\n;live char, dead opponent\n lda #$ff\n sta lightcolor\n lda #5\n sta lightning\n lda #Splat\n jsr addsound\n lda #100\n jmp decstr\n]rts rts\n\n*-------------------------------\n*\n*  R E F L E C T I O N\n*\n*-------------------------------\n do DemoDisk\nREFLECTION\nBONESRISE\n brk\n else\n\nREFLECTION\n jsr LoadKid\n jsr GetFrameInfo\n\n lda createshad ;flag set?\n cmp #$ff\n beq CreateShad ;yes--reflection comes to life\n\n jsr getunderft\n cmp #mirror ;is kid standing before mirror?\n  bne ]rts ;no\n\n jsr getreflect ;get char data for reflection\n\n lda dmirr ;if kid is on wrong side of mirror,\n bmi ]rts ;don't draw reflection\n\n*  Draw kid's reflection (as a pseudo-character)\n\n jsr setupchar\n\n*  Crop edges\n\n ldx CharBlockY\n inx\n lda BlockTop,x\n cmp FCharY\n bcs ]rts\n sta FCharCU\n\n lda CharBlockX ;of mirror\n asl\n asl ;x 4\n clc\n adc #1\n sta FCharCL\n\n jmp addreflobj ;normal reflection\n\n*-------------------------------\n* Get char data for kid's reflection\n\ngetreflect\n lda CharBlockX\n jsr getblockej\n clc\n adc #angle+3 ;fudge factor\n sta mirrx ;mirror x-coord (0-139)\n\n jsr getdist\n\n ldx CharFace\n bmi :left\n\n eor #$ff ;facing right--\n clc\n adc #14 ;get dist to back of block\n\n:left sec\n sbc #2 ;another fudge factor\n sta dmirr ;distance from mirror\n\n lda mirrx\n asl\n sec\n sbc CharX\n sta CharX ;reflection x-coord\n\n lda CharFace\n eor #$ff\n sta CharFace\n\n]rts rts\n\n*-------------------------------\n* Bring reflection to life as shadowman\n\nCreateShad\n jsr getreflect ;get char data for reflection\n\n lda #0\n sta createshad\n\n lda #1 ;shadman\n sta CharID\n\n lda #MirrorCrack\n jsr addsound\n\n jsr SaveShad\n\n lda MaxKidStr\n sta MaxOppStr\n sta OppStrength\n lda #1\n sta KidStrength\n jmp markmeters\n\n*-------------------------------\n*\n* Bones rise\n*\n*-------------------------------\nskelscrn = 1\nskelx = 5\nskely = 1\nskeltrig = 2\nskelprog = 2\n\nBONESRISE\n lda level\n cmp #3\n bne ]rts\n\n lda ShadFace\n cmp #86\n bne ]rts\n lda VisScrn\n cmp #skelscrn\n bne ]rts\n lda exitopen\n beq ]rts\n lda KidBlockX\n cmp #skeltrig\n beq :trig\n cmp #skeltrig+1\n bne ]rts\n\n* Remove dead skeleton\n\n:trig lda VisScrn\n ldx #skelx\n ldy #skely\n jsr rdblock\n pha\n lda #floor\n sta (BlueType),y\n lda #24\n sta height\n lda #2\n jsr markred\n jsr markwipe\n iny\n jsr markred\n jsr markwipe\n pla\n cmp #bones\n bne ]rts\n\n* Create live skeleton\n\n lda VisScrn\n sta CharScrn\n\n ldx #skely\n stx CharBlockY\n lda FloorY+1,x\n sta CharY\n\n lda #skelx\n sta CharBlockX\n jsr getblockej\n clc\n adc #angle+7\n sta CharX\n\n lda #-1 ;left\n sta CharFace\n\n lda #arise\n jsr jumpseq\n jsr animchar\n\n lda #skelprog\n sta guardprog\n\n lda #-1\n sta CharLife\n lda #3\n sta OppStrength\n\n lda #0\n sta alertguard\n sta refract\n sta CharXVel\n sta CharYVel\n\n lda #2\n sta CharSword\n\n lda #4 ;skeleton\n sta CharID\n\n jmp SaveShad ;save ShadVars\n\n fin\n\n*-------------------------------\n*\n* Decrease strength by A (non-0)\n*\n* Out: non-0 if char lives, 0 if he dies\n*      ChgStrength\n*\n*-------------------------------\nDECSTR\n ldx CharID\n bne :enemy\n\n cmp KidStrength\n bcs killkid\n\n eor #$ff\n clc\n adc #1 ;negate\n sta ChgKidStr\n rts\n\n:enemy\n cmp OppStrength\n bcs killopp\n\n eor #$ff\n clc\n adc #1\n sta ChgOppStr\n rts\n\n*-------------------------------\n* Kill character (or opponent)\n* Return A = 0\n*-------------------------------\nkillkid\n lda #0\n sec\n sbc KidStrength\n sta ChgKidStr\n\n lda #0\n]rts rts\n\n*-------------------------------\nkillopp\n lda #0\n sec\n sbc OppStrength\n sta ChgOppStr\n\n lda #0\n]rts rts\n\n\n*-------------------------------\n* Save current game to disk\n*\n* In: SavLevel = level ($ff to erase saved game)\n*-------------------------------\nDOSAVEGAME\n lda level\n cmp #FirstSideB\n bcs :doit ;must have reached side B\n lda #Splat\n jmp addsound\n:doit\n\n* Put data into save-game data area\n\n lda origstrength\n sta SavStrength\n\n lda FrameCount\n sta SavTimer\n lda FrameCount+1\n sta SavTimer+1\n\n lda NextTimeMsg\n sta SavNextMsg\n\n* Write to disk\n\n jmp savegame\n\n*-------------------------------\n* alt bg & char set list\n* Level #:      0  1  2  3  4  5  6  7  8  9 10 11 12 13 14\n\nbgset1 db 00,00,00,00,01,01,01,02,02,02,01,01,02,02,01\nbgset2 db 00,00,00,00,01,01,01,02,02,02,01,01,02,02,01\nchset db 00,00,00,01,02,02,03,02,02,02,02,02,04,05,05\n\n* blueprint track & region lists (indexed by level #)\n* NOTE--make sure these match lists in DIALOGER\n\nbluepTRKlst\n db 33,33,32         ;3 levels on side A\n db 33,33,32,32,31,31   ;12 levels on side B\n db 30,30,29,29,28,28\n\nbluepREGlst\n db 0,1,1\n db 0,1,0,1,0,1\n db 0,1,0,1,0,1\n\n*-------------------------------\n*\n* Load level from disk\n* In: X = level # (0-14)\n*\n*-------------------------------\nLOADLEVELX\n lda bluepTRKlst,x\n sta bluepTRK\n lda bluepREGlst,x\n sta bluepREG\n\n lda bgset1,x ;A\n pha\n lda bgset2,x ;X\n ldy chset,x ;Y\n tax\n pla\n\n jmp loadlevel ;in MASTER\n]rts rts\n\n*-------------------------------\n*\n* In: Kid & Shad data\n* Out: EnemyAlert\n*   2: kid & shad are on same stretch of floor\n*   1: slicer, gaps in floor, or other obstacles, but\n*      line of sight is clear\n*   0: can't see each other\n*\n*-------------------------------\ngfightthres = 28*4\n\n]safe lda #0\n sta EnemyAlert\n]rts rts\n\nCHECKALERT\n lda ShadID\n cmp #24 ;mouse?\n beq ]rts\n cmp #1 ;shadowman?\n bne :notshad\n lda level\n cmp #12\n bne ]safe ;fight shadow only on level 12\n\n:notshad\n lda KidPosn\n beq ]safe\n cmp #219\n bcc :noclimb\n cmp #229\n bcc ]safe ;on staircase\n:noclimb\n lda ShadFace\n cmp #86\n beq ]safe\n\n lda KidLife\n and ShadLife\n bpl ]safe ;one is dead\n\n lda KidScrn\n cmp ShadScrn\n bne ]safe\n\n lda KidBlockY\n cmp ShadBlockY\n bne ]safe\n\n lda #2 ;clear path\n sta EnemyAlert\n\n* Get range of blocks to scan (]Xcount --> ]Xend)\n\n lda KidBlockX\n jsr getblockej\n clc\n adc #7 ;middle of block\n sta ]Xcount\n\n lda ShadBlockX\n jsr getblockej\n clc\n adc #7\n sta ]Xend\n\n do 0\n lda ]Xcount\n jsr getblockxp\n ldx #1\n jsr showpage\n lda ]Xend\n jsr getblockxp\n ldx #2\n jsr showpage\n fin\n\n lda ]Xend\n cmp ]Xcount\n bcs :cont\n tax\n lda ]Xcount\n sta ]Xend\n stx ]Xcount\n:cont\n\n* If leftmost block is a slicer, skip it\n\n lda ]Xcount\n jsr :rdblock\n cmp #slicer\n bne :1\n lda #14\n clc\n adc ]Xcount\n sta ]Xcount\n\n* If rightmost block is a gate, skip it\n\n:1 lda ]Xend\n jsr :rdblock\n cmp #gate\n bne :20\n lda ]Xend\n sec\n sbc #14\n sta ]Xend\n\n:20 lda ]Xend\n cmp ]Xcount\n bcc :rts\n\n* Scan from ]Xcount to ]Xend (left to right)\n\n lda ]Xcount\n:loop cmp ]Xend\n beq :9\n bcs :rts\n\n:9 jsr :rdblock\n\n cmp #block\n beq :safe\n cmp #panelwif\n beq :safe\n cmp #panelwof\n beq :safe ;solid barrier blocks view\n\n cmp #loose\n beq :view\n cmp #gate\n bne :2\n lda (BlueSpec),y\n cmp #gfightthres\n bcs :clear\n bcc :view\n\n:2 cmp #slicer\n beq :view\n\n jsr cmpspace\n bne :clear ;closed gate, slicer, gap in floor, etc.\n;are obstacles but don't block view\n:view lda #1\n sta EnemyAlert\n\n:clear lda ]Xcount\n clc\n adc #14\n sta ]Xcount\n bne :loop\n:rts\n]rts rts\n\n:safe lda #0\n sta EnemyAlert\n]rts rts\n\n*-------------------------------\n* In: A = X-coord\n* Out: rdblock results\n*-------------------------------\n:rdblock jsr getblockxp\n tax\n ldy KidBlockY\n lda KidScrn\n jmp rdblock\n\n*-------------------------------\n*\n*  Display version # on text page 1 (& wait for keypress)\n*\n*-------------------------------\nDISPVERSION\n lda #\" \"\n jsr lrcls\n\n sta RAMWRTmain\n\n ldx #0\n:loop lda textline,x\n cmp #\"@\"\n beq :done\n sta $400,x ;top line of screen\n inx\n bpl :loop\n:done\n lda RAMWRTaux\n sta $c054 ;PAGE2 off\n sta $c051 ;TEXT on\n\n* Wait for keypress\n\n:wloop lda $c000\n bpl :wloop\n sta $c010\n\n lda $c057 ;HIRES on\n lda $c050 ;TEXT off\n lda PAGE\n bne :1\n lda $c055 ;PAGE2 on\n:1\n lda #\" \"\n jmp lrcls\n\n*-------------------------------\n lst\n ds 1\n usr $a9,21,$b00,*-org\n lst off\n"
  },
  {
    "path": "04 Support/MakeDisk/S/MOVEDATA.S",
    "content": " tr on\n lst off\n\n* movedata\n*-------------------------------\n* objnames\n\nspace = 0\nfloor = 1\nspikes = 2\nposts = 3\ngate = 4\ndpressplate = 5 ;down\npressplate = 6 ;up\npanelwif = 7 ;w/floor\npillarbottom = 8\npillartop = 9\nflask = 10\nloose = 11\npanelwof = 12 ;w/o floor\nmirror = 13\nrubble = 14\nupressplate = 15\nexit = 16\nexit2 = 17\nslicer = 18\ntorch = 19\nblock = 20\nbones = 21\nsword = 22\nwindow = 23\nwindow2 = 24\narchbot = 25\narchtop1 = 26\narchtop2 = 27\narchtop3 = 28\narchtop4 = 29\n\n*-------------------------------\n* misc. values from BGDATA\n\ntorchLast = 17\nbubbLast = 8\n\nspikeExt = 5\nspikeRet = 9\n\nslicerExt = 2\nslicerRet = 6\n\nFfalling = 10 ;1st \"falling\" frame\n\n*-------------------------------\n* moveparams\n\ngmaxval = 47*4\ngminval = 0\n\n lst off\n"
  },
  {
    "path": "04 Support/MakeDisk/S/MOVER.S",
    "content": "* mover\norg = $ee00\nPalaceEditor = 0\n tr on\n lst off\n*-------------------------------\n org org\n\n jmp ANIMTRANS\n jmp TRIGSPIKES\n jmp PUSHPP\n jmp BREAKLOOSE1\n jmp BREAKLOOSE\n\n jmp ANIMMOBS\n jmp ADDMOBS\n jmp CLOSEEXIT\n jmp GETSPIKES\n jmp SHAKEM\n\n jmp TRIGSLICER\n jmp TRIGTORCH\n jmp GETFLAMEFRAME\n jmp SMASHMIRROR\n jmp JAMSPIKES\n\n jmp TRIGFLASK\n jmp GETFLASKFRAME\n jmp TRIGSWORD\n jmp JAMPP\n\n*-------------------------------\n lst\n put eq\n lst\n put gameeq\n lst\n put seqdata\n lst\n put movedata\n lst\n put soundnames\n\n dum locals\nstate ds 1\ntemp1 ds 2\nlinkindex ds 1\npptype ds 1\nmobframe ds 1\nunderFF ds 1\n dend\n\n*-------------------------------\ngatevel db 0,0,0,20,40,60,80,100,120\n\nmaxgatevel = *-gatevel-1\n\n*-------------------------------\npptimer = 5 ;pressplate timer setting (min=3, max=30)\n;(# cycles till plate pops up)\n\nspiketimer = 15+128 ;spike timer setting (2-127) +128\n;(# cycles till spikes retract)\n\nslicetimer = 15 ;# cycles between slices\n\ngatetimer = gmaxval+50 ;# cycles gate stays open\n\nloosetimer = Ffalling ;# cycles till floor detaches\n\n* falling floor params\n\nwiggletime = 4 ;# wiggling frames\nFFaccel = 3\nFFtermvel = 29\ncrumbletime = 2 ;# crumbling frames\ncrumbletime2 = 10\ndisappeartime = 2\nFFheight = 17\nCrushDist = 30\n\n* wipe heights\n\nloosewipe = 31 ;[might erase spikes]\nspikewipe = 31\nslicerwipe = 63\nplatewipe = 16\n\ngateinc db -1,4,4 ;for trdirec = 0,1,2 (down,up,upjam)\n\nexitinc = 4\nemaxval = 43*4\n\nmaxtr = trobspace-1\nmaxmob = mobspace-1\n\n*-------------------------------\n*\n* Search trans list for object (trloc,trscrn)\n*\n* In: numtrans, trloc, trscrn\n* Out: X = index, 0 if not listed\n*\n*-------------------------------\nsearchtrob\n ldx numtrans\n beq :rts\n\n:loop lda trloc,x\n cmp trloc\n bne :next\n lda trscrn,x\n cmp trscrn\n beq :rts ;found it\n\n:next dex\n bne :loop\n\n:rts rts\n\n*-------------------------------\n*\n*  Add a new object to transition list\n*  If it's already listed, just change trdirec to new value\n*\n*  In: trdirec, trloc, trscrn\n*\n*-------------------------------\naddtrob\n jsr searchtrob ;Is object already listed?\n\n cpx #0\n bne :chdir ;Yes--just change direc\n\n* It's not on the list - add it\n\n ldx numtrans\n cpx #maxtr\n beq :rts ;too many objects--trigger fails\n\n inx\n stx numtrans\n\n lda trdirec\n sta trdirec,x\n lda trloc\n sta trloc,x\n lda trscrn\n sta trscrn,x\n rts\n\n*  Object already listed - change direction\n\n:chdir lda trdirec\n sta trdirec,x\n:rts rts\n\n*-------------------------------\n*\n*  Add a MOB to MOB list\n*\n*-------------------------------\naddamob\n ldx nummob\n cpx #maxmob\n beq :rts\n\n inx\n stx nummob\n\n jmp savemob\n\n:rts rts\n\n*-------------------------------\n*\n*  S A V E / L O A D   M O B\n*\n*-------------------------------\nsavemob\n lda mobx\n sta mobx,x\n lda moby\n sta moby,x\n lda mobscrn\n sta mobscrn,x\n lda mobvel\n sta mobvel,x\n lda mobtype\n sta mobtype,x\n lda moblevel\n sta moblevel,x\n rts\n\nloadmob\n lda mobx,x\n sta mobx\n lda moby,x\n sta moby\n lda mobscrn,x\n sta mobscrn\n lda mobvel,x\n sta mobvel\n lda mobtype,x\n sta mobtype\n lda moblevel,x\n sta moblevel\n]rts rts\n\n*-------------------------------\n*\n*  Trigger slicer\n*\n*  In: A = initial state\n*\n*-------------------------------\nTRIGSLICER\n sta state ;temp\n\n lda (BlueSpec),y\n beq :ok\n cmp #slicerRet\n bcc ]rts ;in mid-slice--don't interfere\n\n* Between slices--OK to trigger\n\n:ok sty trloc\n\n lda state\n sta (BlueSpec),y\n\n lda VisScrn\n sta trscrn\n\n lda #1\n sta trdirec\n\n jmp addtrob ;add slicer to trans list\n\n*-------------------------------\n*\n* Close exit\n* (Open it all the way & let it slam shut)\n*\n*-------------------------------\nCLOSEEXIT\n sty trloc\n sta trscrn\n\n lda #emaxval ;all the way open\n sta (BlueSpec),y\n\n lda #3 ;coming down fast\n sta trdirec\n\n jmp addtrob ;add to trans list\n\n*-------------------------------\nSMASHMIRROR\n lda #86\n sta (BlueSpec),y\n]rts rts\n\n*-------------------------------\n*\n* Trigger flask\n*\n*-------------------------------\nTRIGFLASK\n sty trloc\n sta trscrn\n\n lda #1\n sta trdirec\n\n* Get rnd starting frame\n\n jsr rnd\n and #7\n ora (BlueSpec),y\n sta (BlueSpec),y\n jmp addtrob\n\n*-------------------------------\n*\n* Trigger sword\n*\n*-------------------------------\nTRIGSWORD\n sty trloc\n sta trscrn\n lda #1\n sta trdirec\n jsr rnd\n and #$1f\n sta (BlueSpec),y\n jmp addtrob\n\n*-------------------------------\n*\n* Trigger torch\n*\n*-------------------------------\nTRIGTORCH\n sty trloc\n sta trscrn\n\n lda #1\n sta trdirec\n\n* Get rnd starting frame\n\n jsr rnd\n and #$f\n sta (BlueSpec),y\n jmp addtrob\n\n*-------------------------------\n*\n*  Trigger spikes\n*\n*-------------------------------\nTRIGSPIKES\n lda (BlueSpec),y\n beq :ready ;State = 0: spikes are fully retracted--\n;spring 'em\n bpl ]rts ;Nonzero, hibit clear: spikes are in motion\n cmp #$ff\n beq ]rts ;jammed\n lda #spiketimer ;Nonzero, hibit set: spikes are fully\n sta (BlueSpec),y ;extended--reset timer to max value\n]rts rts\n;Spring spikes\n:ready ldx #1\n]cont stx trdirec\n sty trloc\n\n lda tempscrn ;from rdblock\n sta trscrn\n\n jsr addtrob ;add spikes to trans list\n jsr redspikes\n\n lda #GateDown ;TEMP\n jmp addsound\n\n*-------------------------------\n*\n* Jam spikes (& remove from trans list)\n*\n* In: Same as TRIGSPIKES\n*\n*-------------------------------\nJAMSPIKES\n lda #$ff\n sta (BlueSpec),y\n ldx #-1 ;stop object\n bmi ]cont\n\n*-------------------------------\n*\n* Get spike status: 0 = safe, 1 = sprung, 2 = springing\n*\n*-------------------------------\nGETSPIKES\n lda (BlueSpec),y\n bmi :sprung\n beq :safe ;fully retracted\n\n cmp #spikeExt\n bcc :springing\n\n:safe lda #0 ;safe: retracted or retracting\n rts\n\n:sprung cmp #$ff ;jammed (body impaled on them)?\n beq :safe\n lda #1\n rts\n\n:springing lda #2\n]rts rts\n\n*-------------------------------\n*\n*  Break off section of loose floor\n*\n*-------------------------------\nBREAKLOOSE\n lda #1\n\nBREAKLOOSE1 ;in: A = initial state\n sta state\n\n lda (BlueType),y\n and #reqmask ;required floorpiece?\n bne ]rts ;yes--blocked below\n\n lda (BlueSpec),y\n bmi :ok ;wiggling\n bne ]rts ;already triggered\n\n:ok lda state\n sta (BlueSpec),y\n\n sty trloc\n\n lda tempscrn ;from rdblock\n sta trscrn\n\n lda #0 ;down\n sta trdirec\n\n jsr addtrob ;add floor to trans list\n jmp redloose\n\n*-------------------------------\n*\n*  Depress pressplate\n*\n*  In: results of RDBLOCK\n*     (tempblockx-y, tempscrn refer to pressplate)\n*\n*-------------------------------\nPUSHPP\n lda (BlueType),y\n and #idmask\n sta pptype ;pressplate/upressplate/rubble\npushpp1\n lda (BlueSpec),y ;LINKLOC index\n sta linkindex\n tax\n jsr gettimer\n\n cmp #31\n beq ]rts ;plate is permanently down\n\n cmp #2\n bcs :starttimer ;plate is temporarily down--\n;just restart timer\n\n*  Fresh plate has been stepped on--reset timer\n\n lda #pptimer ;put plate down for the count\n jsr chgtimer\n\n sty trloc\n\n lda tempscrn ;from rdblock1\n sta trscrn\n\n lda #1\n sta trdirec\n\n jsr addtrob ;add to trans list\n\n jsr redplate ;add plate to redraw list\n\n lda #1\n sta alertguard\n lda #PlateDown\n jsr addsound\n\n:trig jmp trigger ;trigger something?\n\n* plate is already down--just restart timer\n* (& retrigger gates)\n\n:starttimer lda #pptimer\n jsr chgtimer\n jmp :trig\n\n*-------------------------------\n*\n* Jam pressplate (dead weight)\n*\n* In: Same as PUSHPP\n*\n*-------------------------------\nJAMPP\n lda (BlueType),y\n and #idmask\n sta pptype\n cmp #pressplate\n beq :1\n\n lda #floor\n sta (BlueType),y\n lda #0\n sta (BlueSpec),y\n lda #rubble\n sta pptype\n bne pushpp1\n\n:1 lda #dpressplate\n sta (BlueType),y\n bne pushpp1\n\n*-------------------------------\n*\n*  We just pushed a pressplate -- did we trigger something?\n*\n*  In: linkindex, pptype\n*\n*-------------------------------\ntrigger\n:loop ldx linkindex\n\n lda LINKLOC,x\n cmp #$ff\n beq :rts ;linked to nothing\n\n jsr getloc\n sta trloc\n\n jsr getscrn ;get block # and screen # of\n sta trscrn ;gadget to trigger\n\n jsr calcblue\n ldy trloc\n lda (BlueType),y\n and #idmask ;get objid into A\n\n jsr trigobj ;call appropriate trigger routine\n\n lda trdirec\n bmi :skip ;trigger fails\n\n jsr addtrob ;add gadget to transition list\n\n:skip ldx linkindex\n inc linkindex\n\n jsr getlastflag\n beq :loop\n\n:rts rts\n\n*-------------------------------\n*\n*  Trigger object\n*\n*  Out: trdirec (-1 if trigger fails)\n*\n*-------------------------------\ntrigobj\n cmp #gate\n bne :1\n jmp triggate\n:1\n cmp #exit\n bne :2\n jmp openexit\n:2\n]rts rts\n\n*-------------------------------\n*\n* Open exit\n*\n*-------------------------------\nopenexit\n lda (BlueSpec),y\n bne :fail ;Exit can only open, not close\n\n lda #1\n bpl :1\n\n:fail lda #-1\n:1 sta trdirec\n rts\n\n*-------------------------------\n*\n*  Trigger gate\n*\n*  In: BlueSpec, Y, pptype\n*  Out: trdirec\n*\n*-------------------------------\ntriggate\n lda (BlueSpec),y ;current gate position\n\n ldx pptype\n cpx #upressplate\n beq :raise\n cpx #rubble\n beq :jam\n\n* Lower gate\n\n:lower cmp #gminval ;at bottom?\n bne :yeslower ;no--lower it\n;yes--trigger fails\n:fail jmp stopobj\n\n:yeslower\n lda #3 ;down fast\n sta trdirec\n rts\n\n:jam ldx #2 ;open & jam\n stx trdirec\n cmp #gmaxval\n bcc :1\n lda #$ff ;\"jammed open\" state\n bmi :3\n\n:raise ldx #1 ;open\n stx trdirec\n cmp #$ff\n beq :fail ;jammed\n cmp #gmaxval\n bcc :1\n lda #gatetimer\n:3 sta (BlueSpec),y ;reset timer\n bne :fail\n:1\n]rts rts\n\n*-------------------------------\n*\n*  Animate transitional objects\n*  (Advance each object to next frame in animation table)\n*\n*-------------------------------\n]cleanflag ds 1\n\nANIMTRANS\n lda #0\n sta trobcount\n\n ldx numtrans ;# objs in trans (0-maxtr)\n beq ]rts\n\n lda #0\n sta ]cleanflag\n\n:loop stx tempnt\n\n jsr animobj ;animate obj #x\n\n ldx tempnt\n\n lda trdirec ;has object stopped?\n bpl :1 ;no\n\n lda #-1 ;yes--mark it for deletion\n sta ]cleanflag ;& set cleanup flag\n\n:1 sta trdirec,x ;save direction change if any\n\n dex\n bne :loop\n\n lda ]cleanflag\n beq ]rts\n\n*  Delete all stopped objects (trdirec = ff)\n*  (i.e., copy entire list back onto\n*  itself, omitting stopped objects)\n\n ldx #1 ;source index (assume numtrans > 0)\n ldy #0 ;dest index\n\n:dloop lda trdirec,x\n cmp #$ff\n beq :next\n\n iny\n sta trdirec,y\n lda trloc,x\n sta trloc,y\n lda trscrn,x ;source\n sta trscrn,y ;dest\n\n:next inx\n\n cpx numtrans\n bcc :dloop\n beq :dloop\n\n sty numtrans\n rts\n\n*-------------------------------\n*\n*  Animate TROB #x\n*\n*-------------------------------\nanimobj lda trloc,x\n sta trloc\n lda trscrn,x\n sta trscrn\n lda trdirec,x\n sta trdirec\n\n* Find out what kind of object it is\n\n lda trscrn\n jsr calcblue\n\n ldy trloc\n lda (BlueSpec),y\n sta state ;original state\n\n lda (BlueType),y\n and #idmask ;objid\n\n* and branch to appropriate subroutine\n\n cmp #torch\n bne :1\n jsr animtorch\n jmp :done\n\n:1 cmp #upressplate\n beq :plate\n cmp #pressplate\n bne :2\n:plate jsr animplate\n jmp :done\n\n:2 cmp #spikes\n bne :3\n jsr animspikes\n jmp :done\n\n:3 cmp #loose\n bne :31\n jsr animfloor\n jmp :done\n\n:31 cmp #space ;(loose floor turns into space)\n bne :4\n jsr animspace\n jmp :done\n\n:4 cmp #slicer\n bne :5\n jsr animslicer\n jmp :done\n\n:5 cmp #gate\n bne :6\n jsr animgate\n jmp :done\n\n:6 cmp #exit\n bne :7\n jsr animexit\n jmp :done\n\n:7 cmp #flask\n bne :8\n jsr animflask\n jmp :done\n\n:8 cmp #sword\n bne :9\n jsr animsword\n jmp :done\n\n:9 jsr stopobj ;obj is none of these--purge it from trans list!\n\n:done lda state\n ldy trloc\n sta (BlueSpec),y\n\n:rts rts\n\n*-------------------------------\n*\n* Animate exit\n*\n*-------------------------------\nanimexit\n ldx trdirec\n bmi :cont\n cpx #3\n bcs :downfast ;>= 3: coming down fast\n\n lda #RaisingExit\n jsr addsound\n\n lda state\n clc\n adc #exitinc\n sta state\n\n cmp #emaxval\n bcs :stop\n\n:cont jmp redexit\n\n:stop jsr stopobj\n\n lda #GateDown\n jsr addsound\n lda #s_Stairs\n ldx #15\n jsr cuesong\n lda #1\n sta exitopen\n jsr mirappear\n jmp :cont\n\n* Exit coming down fast\n\n:downfast\n cpx #maxgatevel\n bcs :2\n inx\n stx trdirec\n:2 lda state\n sec\n sbc gatevel,x\n sta state\n beq :cont\n bcs :cont\n\n jsr stopobj\n\n lda #0\n sta state\n\n lda #GateSlam\n jsr addsound\n\n jmp :cont\n\n*-------------------------------\n*\n*  Animate gate\n*\n*-------------------------------\nanimgate\n ldx trdirec\n bmi :cont ;gate has stopped\n\n cpx #3 ;trdirec >= 3: coming down fast\n bcs :downfast\n\n lda state\n cmp #$ff\n beq :stop ;jammed open\n clc\n adc gateinc,x\n sta state\n\n cpx #0\n beq :goingdown\n\n cmp #gmaxval\n bcs :attop ;stop at top\n\n lda #RaisingGate\n jsr addsound\n\n jmp :cont\n\n:goingdown\n cmp #gminval\n beq :stop\n bcc :stop\n\n cmp #gmaxval\n bcs :cont ;at top\n jsr addlowersound\n\n:cont jmp redgate ;mark gate for redrawing\n\n:stop jsr stopobj\n\n lda #GateDown\n jsr addsound\n\n jmp :cont\n\n* Gate has reached top\n* trdirec = 1: pause, then start to close again\n* trdirec = 2: jam at top\n\n:attop\n cpx #2\n bcc :tr1\n lda #$ff ;jammed-open value\n sta state\n jmp :stop\n\n:tr1 lda #gatetimer\n sta state\n\n lda #0 ;down\n sta trdirec\n]rts rts\n\n* Down fast\n\n:downfast\n cpx #maxgatevel\n bcs :2\n\n inx\n stx trdirec ;trdirec is velocity index\n:2\n lda state\n sec\n sbc gatevel,x\n sta state\n beq :cont\n bcs :cont\n\n lda #0\n sta state\n jsr stopobj\n\n lda #GateSlam\n jsr addsound\n jmp :cont\n\n*-------------------------------\n*\n*  Animate pressplate\n*\n*-------------------------------\nanimplate\n ldx trdirec\n bmi ]rts\n\n lda state\n tax\n jsr gettimer\n sec\n sbc #1\n pha\n jsr chgtimer\n pla\n cmp #2\n bcs ]rts ;timer stops at t=1\n\n lda #PlateUp\n jsr addsound\n\n jsr stopobj\n\n jmp redplate ;add obj to redraw buffer\n]rts rts\n\n*-------------------------------\n*\n*  Animate slicer\n*\n*-------------------------------\nanimslicer\n ldx trdirec\n bmi :done\n\n lda state\n tax\n and #$80\n sta state ;preserve hibit\n txa\n and #$7f\n clc\n adc #1\n cmp #slicetimer+1\n bcc :1\n lda #1 ;wrap around\n:1 ora state\n sta state\n and #$7f ;next frame #\n cmp #slicerExt\n bne :2\n\n lda #JawsClash\n jsr addsound\n\n:2 lda trscrn\n cmp VisScrn ;is slicer on visible screen?\n bne :os ;no\n\n lda trloc\n jsr unindex\n cpx KidBlockY ;on same level as kid?\n bne :os ;no\n\n lda KidLife\n bmi :done\n ;If kid is dead, stop all unbloodied slicers\n lda state\n and #$80\n bne :done\n\n* As soon as slicer is retracted, purge it from trans list\n\n:os lda state\n and #$7f\n cmp #slicerRet\n bcc :done\n\n:purge jsr stopobj\n\n:done lda state\n and #$7f\n cmp #slicerRet ;retracted?\n bcs ]rts ;yes--don't bother to redraw\n\n jmp redslicer\n\n*-------------------------------\n*\n* Animate flask\n*\n*-------------------------------\nanimflask\n ldx trdirec\n bmi ]rts\n\n lda trscrn\n cmp VisScrn\n bne :purge\n\n lda state\n and #%11100000 ;potion #\n sta temp1\n lda state\n and #%00011111 ;frame #\n jsr GETFLASKFRAME\n ora temp1\n sta state\n\n jmp redflask\n]purge\n:purge jmp stopobj\n\n*-------------------------------\n*\n* Animate gleaming sword\n*\n*-------------------------------\nanimsword\n lda trscrn\n cmp VisScrn\n bne ]purge\n\n dec state\n bne :1\n jsr rnd\n and #$3f\n clc\n adc #40\n sta state\n\n:1 jmp redsword\n]rts rts\n\n*-------------------------------\n*\n* Animate torch\n*\n*-------------------------------\nanimtorch\n ldx trdirec\n bmi ]rts\n\n lda trscrn\n cmp VisScrn\n bne ]purge\n\n lda state\n jsr GETFLAMEFRAME\n sta state\n\n jmp redtorch\n\n*-------------------------------\n*\n* Get flame frame\n*\n* In/out: A = state\n*\n*-------------------------------\nGETFLAMEFRAME\n sta state\n\n jsr rnd\n\n cmp state\n beq :2\n cmp #torchLast+1\n bcc :1\n\n lda state\n:2 clc\n adc #1\n cmp #torchLast+1\n bcc :1\n\n lda #0 ;wrap around\n:1\n]rts rts\n\n*-------------------------------\n*\n* Get flask frame\n*\n* In/out: A = state (low 5 bits)\n*\n*-------------------------------\nGETFLASKFRAME\n clc\n adc #1\n cmp #bubbLast+1\n bcc ]rts\n lda #1\n]rts rts\n\n*-------------------------------\n*\n* Animate spikes\n*\n*-------------------------------\nanimspikes\n ldx trdirec\n bmi :done\n\n lda state\n bmi :timerloop ;Hibit set: remaining 7 bits\n ;represent timer value\n\n* Hibit clear: remaining 7 bits represent BGDATA frame #\n\n inc state\n\n cmp #spikeExt ;is extension complete?\n beq :starttimer ;yes--start timer\n\n cmp #spikeRet ;is retraction complete?\n bne :done ;not yet\n\n lda #0\n sta state ;yes--reset to \"ready\" state\n\n jsr stopobj\n\n:done jmp redspikes\n\n* Spike timer loop\n\n:starttimer\n lda #spiketimer\n sta state\n\n bne :done\n\n:timerloop\n dec state\n\n lda state\n and #$7f\n bne :rts\n;Time's up\n lda #spikeExt+1 ;First \"retracting\" frame\n sta state\n\n bne :done\n:rts\n]rts rts\n\n*-------------------------------\n*\n* Animate loose floor\n*\n*-------------------------------\nanimfloor\n ldx trdirec\n bmi :red\n\n* When timer reaches max value & loose floor detaches:\n*  (1)  Change objid from \"loose floor\" to \"empty space\"\n*  (2)  Create a MOB to take over where TROB stopped\n\n inc state\n\n lda state\n bmi :wiggle ;floor is only wiggling\n\n cmp #loosetimer\n bcc :red\n\n* Timer has reached max value--detach floor\n\n jsr makespace\n sta state\n\n jsr stopobj\n\n* and create new MOB\n\n lda trloc\n jsr unindex\n\n asl\n asl  ;x4\n sta mobx\n stx moblevel\n\n lda BlockBot+1,x\n sta moby\n\n lda trscrn\n sta mobscrn\n\n lda #0\n sta mobvel\n sta mobtype\n\n jsr addamob\n\n:red jmp redloose\n\n* Floor is only wiggling\n\n:wiggle ldx level\n cpx #13\n beq ]rts\n\n cmp #wiggletime+$80\n bcc :red\n\n lda #0\n sta state\n jsr stopobj ;stop wiggling\n\n jmp :red\n\nanimspace jsr stopobj\n jmp redloose\n\n*-------------------------------\n*\n*  Stop object (set trdirec = -1)\n*\n*-------------------------------\nstopobj lda #-1\n sta trdirec\n rts\n\n*-------------------------------\n* General redraw-object routine\n*-------------------------------\nredtrobj\n jsr check\n lda #2\n jsr markred\n jsr markwipe\n jsr checkright\n lda #2\n jsr markred\n jmp markwipe\n\n*-------------------------------\n* redraw torch/exit\n*-------------------------------\nredexit\nredtorch\n jsr checkright\n lda #2\n jmp markmove\n\n*-------------------------------\n* redraw flask/sword\n*-------------------------------\nredsword\nredflask\n jsr check\n lda #2\n jmp markmove\n\n*-------------------------------\n* redraw loose floor\n*-------------------------------\nredloose\n inc trobcount\n lda #loosewipe\n sta height\n jmp redtrobj\n\n*-------------------------------\n* redraw gate\n*-------------------------------\nredgate\n jsr checkright ;mark piece to right of gate\n lda #2\n jsr markmove\n jsr markfred\n jsr checkabover ;& piece to right of gate panel\n lda #2\n jmp markmove\n\n*-------------------------------\n* redraw spikes\n*-------------------------------\nredspikes\n inc trobcount\n lda #spikewipe\n sta height\n jmp redtrobj\n\n*-------------------------------\n* redraw slicer\n*-------------------------------\nredslicer\n inc trobcount\n lda #slicerwipe\n sta height\n jsr check\n lda #2\n jsr markred\n jmp markwipe\n\n*-------------------------------\n* redraw pressplate\n*-------------------------------\nredplate\n lda #platewipe\n sta height\n jmp redtrobj\n\n*-------------------------------\n*\n*  Before marking a piece in redraw buffer,\n*  check whether it's visible.\n*\n*  If piece is visible onscreen:\n*    return with carry clear, y = redbuf index\n*  If piece is not visible:\n*    return with carry set\n*\n*-------------------------------\n]no ldy #30\n sec\n]rts rts\n\n]above cmp scrnAbove\n bne ]rts\n\n lda trloc\n sec\n sbc #20 ;if on top row, return 0-9 and cs\n tay\n\n sec\n rts\n\n*-------------------------------\n*  Check (trscrn, trloc)\n*-------------------------------\ncheck\n lda trscrn\n cmp VisScrn\n bne ]above\n\n ldy trloc\n cpy #30 ;i.e., \"clc\"\n rts\n\n*-------------------------------\n*  Check piece to left of (trscrn,trloc)\n*-------------------------------\ncheckleft\n lda trscrn\n cmp VisScrn\n bne :notonscrn\n;piece is on this screen\n cpy #0\n beq ]no\n cpy #10\n beq ]no\n cpy #20\n beq ]no\n;yes--piece is visible\n dey\n clc\n rts\n\n:notonscrn\n cmp scrnRight\n bne ]above\n;piece is on screen to right\n ldy trloc\n cpy #0\n beq :yesr\n cpy #10\n beq :yesr\n cpy #20\n bne :yesr\n\n:yesr tya\n clc\n adc #9 ;mark corresponding right-edge piece\n tay ;on this screen\n\n clc\n rts\n\n*-------------------------------\n*  Check piece to right of (trscrn,trloc)\n*-------------------------------\ncheckright\n lda trscrn\n cmp VisScrn\n bne :notonscrn\n;piece is on this screen\n ldy trloc\n cpy #9\n beq ]no\n\n cpy #19\n beq ]no\n\n cpy #29\n beq ]no\n;yes\n iny\n clc\n rts\n\n:notonscrn\n cmp scrnLeft\n bne ]above\n;piece is on screen to left\n ldy trloc\n cpy #9\n beq :yesl\n\n cpy #19\n beq :yesl\n\n cpy #29\n bne ]no\n\n:yesl tya\n sec\n sbc #9 ;mark corresponding left-edge piece\n tay ;on this screen\n\n clc\n rts\n\n]no ldy #30\n sec\n]rts rts\n\n*-------------------------------\n*  Check piece above & to right of (trscrn,trloc)\n*-------------------------------\ncheckabover\n lda trscrn\n cmp VisScrn\n bne :notonscrn\n;piece is on this screen\n ldy trloc\n cpy #10\n bcc :above ;piece is on top row\n\n cpy #19\n beq ]no\n\n cpy #29\n beq ]no\n;yes\n tya\n sec\n sbc #9\n tay\n\n clc\n rts\n\n:above\n iny\n sec\n rts\n\n:notonscrn\n cmp scrnLeft\n bne :notonleft\n;piece is on screen to left\n ldy trloc\n cpy #9\n beq :yes0\n\n cpy #19\n beq :yesl\n\n cpy #29\n bne ]no\n\n:yesl tya\n sec\n sbc #19 ;mark corresponding left-edge piece\n tay ;on this screen\n\n clc\n rts\n\n:yes0 ldy #0\n sec\n rts\n\n:notonleft\n cmp scrnBelow\n bne :notbelow\n;piece is on screen below\n ldy trloc\n cpy #9\n bcs ]no\n;yes--piece is on top row\n tya\n clc\n adc #21\n tay\n\n clc\n rts\n\n:notbelow\n cmp scrnBelowL\n bne ]rts\n ;piece is on scrn below & to left\n ldy trloc\n cpy #9\n bne ]no\n;yes--piece is in u.r.\n ldy #20\n clc\n rts\n\n*-------------------------------\n*\n*  Extract information from LINKLOC/LINKMAP\n*\n*  In: X = linkindex\n*  Out: A = info\n*\n*-------------------------------\ngettimer\n lda LINKMAP,x\n and #%00011111 ;pressplate timer (0-31)\n rts\nchgtimer ;In: A = new timer setting\n and #%00011111\n sta temp1\n lda LINKMAP,x\n and #%11100000\n ora temp1\n sta LINKMAP,x\n rts\ngetloc\n lda LINKLOC,x\n and #%00011111 ;screen posn (0-29)\n rts\ngetlastflag\n lda LINKLOC,x\n and #%10000000 ;last-entry flag (0-1)\n rts\ngetscrn\n lda LINKLOC,x\n and #%01100000 ;low 2 bits\n lsr\n lsr\n sta temp1\n lda LINKMAP,x\n and #%11100000 ;high 3 bits\n adc temp1\n lsr\n lsr\n lsr ;Result: screen # (0-31)\n]rts rts\n\n*-------------------------------\n*\n*  Update all MOBs (falling floors)\n*\n*-------------------------------\nANIMMOBS\n ldx nummob ;# MOBs in motion (0-maxmob)\n beq ]rts\n\n:loop stx tempnt\n jsr loadmob\n\n jsr animmob ;animate MOB #x\n\n jsr checkcrush ;did we just crush a character?\n\n ldx tempnt\n jsr savemob\n\n dex\n bne :loop\n\n* Delete MOBs that have ceased to exist\n\n ldx #1 ;source index (assume nummob > 0)\n ldy #0 ;dest index\n\n:dloop lda mobvel,x\n cmp #$ff\n beq :next\n\n iny\n sta mobvel,y\n lda mobx,x ;source\n sta mobx,y ;dest\n lda moby,x\n sta moby,y\n lda mobscrn,x\n sta mobscrn,y\n lda mobtype,x\n sta mobtype,y\n lda moblevel,x\n sta moblevel,y\n\n:next inx\n\n cpx nummob\n bcc :dloop\n beq :dloop\n\n sty nummob\n\n]rts rts\n\n*-------------------------------\n*\n*   Animate MOB #x\n*\n*-------------------------------\nanimmob\n lda mobtype\n bne :done\n jsr mobfloor\n:done\n lda mobvel\n bpl ]rts ;is object stopping?\n inc mobvel ;yes\n]rts rts\n\n*-------------------------------\n*\n*  Animate falling floor\n*\n*-------------------------------\nmobfloor\n lda mobvel\n bmi ]rts\n:ok1\n cmp #FFtermvel\n bcs :tv\n clc\n adc #FFaccel\n sta mobvel\n\n:tv clc\n adc moby\n sta moby\n\n* check for collision w/floor\n\n ldx mobscrn ;on null screen?\n beq :null ;yes--fall on\n\n cmp #-30 ;negative?\n bcs :fallon ;yes--fall on\n\n ldx moblevel\n cmp BlockAy+1,x\n bcc :fallon\n\n* Passing thru floor plane--what to do?\n* First see what's there\n\n ldx moblevel\n stx tempblocky\n\n lda mobx\n lsr\n lsr\n sta tempblockx\n\n lda mobscrn\n sta tempscrn\n\n jsr rdblock1 ;A = objid\n sta underFF ;under falling floor\n\n cmp #space\n beq :passthru\n\n cmp #loose\n bne :crash\n\n* Lands on loose floor\n* Knock out loose floor & continue\n\n jsr knockloose\n\n jmp :passthru\n\n* Lands on solid floor\n\n:crash\n lda #LooseCrash\n jsr addsound\n\n lda mobscrn\n sta tempscrn\n lda moblevel\n sta tempblocky\n jsr SHAKEM1 ;shake loose floors\n\n ldx moblevel\n lda BlockAy+1,x\n sta moby\n\n lda #-crumbletime\n sta mobvel\n\n jmp makerubble\n\n* Passes thru floor plane\n\n:passthru\n jsr passthru\n:fallon\n]rts rts\n\n* Falling on null screen\n\n:null\n lda moby\n cmp #192+17\n bcc ]rts\n;MOB has fallen off null screen--delete it\n lda #-disappeartime\n sta mobvel\n\n]rts rts\n\n*-------------------------------\n* Knock out loose floor\n*-------------------------------\nknockloose\n jsr makespace\n sta (BlueSpec),y\n\n lda mobvel\n lsr\n sta mobvel\n\n ldx tempnt\n jsr savemob ;save this MOB\n\n* Create new MOB (add'l falling floor)\n\n lda moby\n clc\n adc #6\n sta moby\n\n jsr passthru\n\n jsr addamob\n\n* Retrieve old MOB\n\n ldx tempnt\n jsr loadmob\n\n jmp markmob\n\n*-------------------------------\n* Make space\n* Return A = BlueSpec\n*-------------------------------\nmakespace lda #space ;change objid to empty space\n sta (BlueType),y\n\n do PalaceEditor\n lda #1\n rts\n fin\n\n lda #0\n ldx BGset1\n cpx #1 ;pal?\n bne ]rts\n lda #1 ;stripe\n]rts rts\n\n*-------------------------------\n* Pass thru floor plane\n*-------------------------------\npassthru\n inc moblevel\n\n lda moblevel\n cmp #3\n bcc ]rts\n\n* ... and onto next screen\n* (NOTE: moby may be negative)\n\n lda moby\n sec\n sbc #192\n sta moby\n\n lda #0\n sta moblevel\n\n lda mobscrn\n jsr getdown\n sta mobscrn\n]rts rts\n\n*-------------------------------\n* Delete MOB & change objid of floorpiece it landed on\n* If pressplate, trigger before reducing it to rubble\n*-------------------------------\nmakerubble\n lda moblevel\n sta tempblocky\n\n lda mobx\n lsr\n lsr\n sta tempblockx\n\n lda mobscrn\n sta tempscrn\n\n jsr rdblock1\n\n cmp #pressplate\n beq :pp\n cmp #upressplate\n beq :jampp\n cmp #floor\n beq :notpp\n cmp #spikes\n beq :notpp\n cmp #flask\n beq :notpp\n cmp #torch\n beq :notpp\n bne ]rts ;can't transform this piece into rubble\n\n:jampp lda #rubble\n sta (BlueType),y\n\n:pp jsr PUSHPP ;block lands on pressplate--\n jsr rdblock1 ;crush pp & jam open all gates\n\n:notpp lda #rubble\n sta (BlueType),y\n jmp markmob\n\n*-------------------------------\n* Mark MOB\n*-------------------------------\nmarkmob\n lda mobscrn\n cmp VisScrn\n bne ]rts\n\n lda #loosewipe\n sta height\n\n jsr indexblock\n lda #2\n jsr markred\n jsr markwipe\n\n inc tempblockx\n\n jsr indexblock\n lda #2\n jsr markred\n jsr markfred\n jmp markwipe\n\n]rts rts\n\n*-------------------------------\n*\n*  Did falling floor crush anybody?\n*\n*-------------------------------\ncheckcrush\n jsr LoadKid\n jsr chcrush1 ;return cs if crush\n bcc ]rts\n jsr crushchar\n jmp SaveKid\n\nchcrush1\n lda mobscrn\n cmp CharScrn ;on same screen as char?\n bne :no\n\n lda mobx\n lsr\n lsr\n cmp CharBlockX ;same blockx?\n bne :no\n\n lda moby\n cmp CharY\n bcs :no ;mob is below char altogether\n\n lda CharY\n sec\n sbc #CrushDist\n cmp moby\n bcs :no\n sec ;crush!\n rts\n\n:no clc\n]rts rts\n\n*-------------------------------\n*\n*  Crush char with falling block\n*  (Ordered by ANIMMOB)\n*\n*-------------------------------\ncrushchar\n lda level\n cmp #13\n beq :1\n lda CharPosn\n cmp #5\n bcc :1\n cmp #15\n bcc ]rts ;running-->escape\n\n:1 lda CharAction\n cmp #2\n bcc :ground\n cmp #7\n bne ]rts\n\n* Action code 0,1,7 -- on ground\n\n:ground\n ldx CharBlockY\n inx\n lda FloorY,x\n sta CharY ;align w/floor\n\n lda #1\n jsr decstr\n beq :kill\n\n lda CharPosn\n cmp #109\n beq ]rts\n lda #crush\n jmp jumpseq\n\n:kill lda #hardland ;temp\n jmp jumpseq\n\n*-------------------------------\n*\n*  Add all visible MOBs to object table (to be drawn later)\n*\n*-------------------------------\nADDMOBS\n ldx nummob ;# objs in motion (0-maxmob)\n beq :rts\n\n:loop stx tempnt\n jsr loadmob\n\n lda mobtype\n bne :1\n jsr ATM ;Add this MOB\n:1\n ldx tempnt\n dex\n bne :loop\n:rts\n]rts rts\n\n*-------------------------------\n*\n*  Add this MOB to obj table (if visible)\n*\n*-------------------------------\nATM\n\n* Is floorpiece visible onscreen?\n\n lda mobscrn\n cmp VisScrn\n bne :ok2\n\n lda moby\n cmp #192+17 ;17 is generous estimate of image height\n bcc :ok\n rts\n:ok2\n cmp scrnBelow\n bne ]rts ;not on screen below\n\n lda moby\n cmp #-17\n bcs :ok1\n cmp #17\n bcs ]rts\n:ok1\n clc\n adc #192\n sta moby ;(this change won't be saved)\n:ok\n\n* Get block #; index char\n\n lda moby\n jsr getblocky ;return blocky (0-3)\n sta tempblocky\n\n lda mobx\n lsr\n lsr\n sta tempblockx\n\n jsr indexblock\n sty FCharIndex\n\n* Mark floorbuf & fredbuf of affected blocks to R\n\n:cont1\n inc tempblockx\n jsr indexblock  ;block to R\n\n lda #2\n jsr markfloor\n jsr markfred\n\n lda moby\n sec\n sbc #FFheight\n jsr getblocky ;highest affected blocky\n cmp tempblocky\n beq :same\n\n sta tempblocky\n jsr indexblock ;block to U.R.\n\n lda #2\n jsr markfloor\n jsr markfred\n:same\n\n* Get frame #\n\n lda #Ffalling\n sta mobframe\n\n jmp addmobobj ;add MOB to object table\n\n*-------------------------------\n*\n*  Add MOB to object table\n*\n*  In: mob data\n*\n*-------------------------------\naddmobobj\n inc objX\n ldx objX\n\n lda mobtype ;0 = falling floor\n ora #$80\n sta objTYP,x\n\n lda mobx\n sta objX,x\n lda #0\n sta objOFF,x\n\n lda moby\n sta objY,x\n\n lda mobframe\n sta objIMG,x\n\n lda #0\n sta objCU,x\n sta objCL,x\n lda #40\n sta objCR,x\n\n jmp setobjindx\n]rts rts\n*-------------------------------\n*\n* Shake floors\n*\n* In: A = CharBlockY\n*\n*-------------------------------\nSHAKEM\n ldx level\n cpx #13\n beq ]rts\n\n sta tempblocky\n\n lda VisScrn\n sta tempscrn\n\nSHAKEM1\n ldx #9\n:loop txa\n pha\n sta tempblockx\n\n jsr rdblock1\n cmp #loose\n bne :cont\n\n jsr shakeit\n\n:cont pla\n tax\n dex\n bpl :loop\n\n]rts rts\n\n*-------------------------------\n* Shake loose floor\n*-------------------------------\nshakeit\n lda (BlueSpec),y\n bmi ]rts ;already wiggling\n bne ]rts ;active\n\n lda #$80\n sta (BlueSpec),y\n\n sty trloc\n\n lda tempscrn ;from rdblock\n sta trscrn\n\n lda #1\n sta trdirec\n\n jmp addtrob ;add floor to trans list\n\n*-------------------------------\n lst\n ds 1\n usr $a9,21,$00,*-org\n lst off\n"
  },
  {
    "path": "04 Support/MakeDisk/S/MSYS.S",
    "content": "* msys\norg = $d400\n lst off\n*-------------------------------\n*\n*  Music System ][\n*  by Kyle Freeman\n*  (c) 1986\n*\n*  Adapted by Jordan Mechner\n*  July 1989\n*\n*-------------------------------\n org org\n\n jmp _MINIT\n jmp _MPLAY\n\n*-------------------------------\nMusicTable = $d000 ;start address of music data\n\n*-------------------------------\nMADRLO = MusicTable\nMADRHI = MusicTable+$68\n\nR = $00\nINDEX = R+30\n\n*-------------------------------\nNOTE DFB 122,254,238,226,214,202,190,178,170,158,150,142,134\n DFB 126,118,112,106,100,94,88,84,78,74,70,66\n DFB 250,234,222,210,198,186,174,166,154,146,138,130\n DFB 122,114,108,102,96,90,84,80,74,70,66,62\n DFB 58,54,51,48,45,42,39,37,34,32,30,28\n DFB 26,24,22,21,19,18,17,16,15,14,13,12\n DFB 11,10,9\nLENGTH DFB 28,4,4,4,4,4,5,5,5,6,6,6,7\n DFB 7,8,8,8,9,9,10,11,11,12,13,13\n DFB 14,15,16,17,18,19,20,21,23,24,25,27\n DFB 28,30,32,34,36,38,40,42,45,48,50,53\n DFB 57,60,64,67,71,76,81,84,91,95,101,107\n DFB 113,121,125,134,139,151,158,165,181,191,201,213\n DFB 227,242,255\nMV0 HEX 0E0100FF\nMV1 HEX 0E04020100FF\nMV2 HEX 0E080604020100FF\nMV3 HEX 0E0A080605040302010100FF\nMV4 HEX 0E0A08070605040403037F02020202010101010100FF\nMV5 HEX 010B0DFF\nMV6 HEX 000103050B0DFF\nMV7 HEX 000102030405060708090A0B0C0DFF\nMV8 HEX 010E7F0200FF\nMV9 HEX 01040E7F040100FF\nMV10 HEX 010306090E7F0906030100FF\nMV11 HEX 0E060B040803060205010501040003000200020001000100010001000100FF\nMV12 HEX 01040E040D040C040B040B040B040B040B040B040B040B040B040B04FF\nMV13 HEX 040E087F040100FF\nMV14 HEX 0E02087F040100FF\n HEX 0B030A030903080307030603050304030403FF\nMV15 HEX 01030B0301030B0301030B0301030B0301030B03\n HEX 01030B0301030B0301030B0201020401FF\nHM1 DFB 1,3,128\nHM2 DFB 3,1,1,1,1,1,1,2,2,1,1,1,1,1,2,1,2,1\n DFB 1,1,1,2,1,1,2,1,1,1,2,1,1,1,2,1,1\n DFB 2,1,1,1,1,2,1,2,1,1,1,1,1,2,2,1,1,1,1,1,1,128\nHM3 DFB 3,1,1,1,1,2,2,1,1,1,2,1,2,1,1,2,1,1\n DFB 2,1,2,1,1,1,2,2,1,1,1,1,128\nHM4 DFB 3,1,1,1,2,2,1,1,2,1,2,1,2,1,1,2,2,1,1,1,128\nHM5 DFB 3,1,1,2,2,1,2,1,2,2,1,1,128\nHM6 DFB 3,1,1,1,1,2,1,2,1,1,2,1,1,1,2,2,1,1\n DFB 1,1,2,2,1,1,1,2,1,1,2,1,2,1,1,1,1,128\nHM7 DFB 3,1,2,2,2,1,128\nHM8 DFB 3,1,1,1,1,2,1,1,2,1,2,1,1,1,1,2,2,1,1\n DFB 1,2,1,1,1,2,2,1,1,1,1,2,1,2,1,1,2,1,1,1,1,128\nHM9 DFB 3,1,1,2,1,2,2,1,1,2,2,1,2,1,1,128\nHM10 DFB 3,1,1,1,2,1,1,2,2,1,1,1,2,1,2,1,2\n DFB 1,1,1,2,2,1,1,2,1,1,1,128\nHM11 DFB 3,1,1,1,1,1,1,1,2,1,1,1,1,1,1,2,2,1,1,1,1\n DFB 1,1,1,2,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1\n DFB 2,1,1,1,1,2,1,1,2,1,1,1,1,1,1,1,2,1,1,1,2\n DFB 1,1,1,2,1,1,1,1,1,1,1,2,1,1,2,1,1,1,1\n DFB 2,1,1,1,1,1,1,1,2,1,2,1,1,1,1,1,2,1,1,1,1\n DFB 1,1,1,2,2,1,1,1,1,1,1,2,1,1,1,1,1,1,1,128\nHM12 DFB 3,2,128\nHM13 DFB 5,2,3,2,4,2,3,2,128\nHM14 DFB 4,1,1,1,1,1,2,2,1,2,1,1,2,1,2,1,1,1,3,1,1\n DFB 2,1,1,2,1,1,2,2,1,2,1,1,1,1,2,3,1,1,1\n DFB 1,1,3,1,1,2,1,1,2,2,1,1,1,1,3,1,2,1,1,1,2\n DFB 1,1,3,1,1,2,1,1,1,2,1,3,1,1,1,1,2,2,1\n DFB 1,2,1,1,3,1,1,1,1,1,3,2,1,1,1,1,2,1,2,1,1\n DFB 1,2,1,1,2,1,1,3,1,1,1,2,1,2,1,1,2,1,2\n DFB 2,1,1,1,1,1,128\nHM15 DFB 4,1,1,1,2,2,2,1,2,1,2,1,3,1,1,2,2,1,2,1\n DFB 3,1,1,1,3,2,1,1,2,1,3,1,2,1,1,2,3,1,1,1\n DFB 3,1,2,1,2,2,1,1,3,1,2,1,2,1,2,2,2,1,1,1\n DFB 128\nHM16 DFB 4,1,1,2,2,2,2,1,2,2,2,1,3,1,1,3,2,1,2,1\n DFB 3,2,1,1,3,2,1,2,2,1,3,1,2,2,1,2,3,1,1,2\n DFB 3,1,2,1,2,3,1,1,3,1,2,2,2,1,2,2,2,2,1,1,128\nHM17 DFB 4,1,1,1,1,2,2,1,2,1,2,1,2,1,1,2,2,1,2,1\n DFB 2,1,1,1,3,2,1,1,1,1,3,1,2,1,1,2,2,1,1,1\n DFB 3,1,2,1,1,2,1,1,3,1,2,1,1,1,2,2,2,1,1,1\n DFB 3,1,1,1,2,2,2,1,1,1,2,1,3,1,1,2,1,1,2,1\n DFB 3,1,1,1,2,2,1,1,2,1,3,1,1,1,1,2,3,1,1,1\n DFB 2,1,2,1,2,2,1,1,2,1,2,1,2,1,2,2,1,1,1,1\n DFB 128\nHM18 DFB 3,128\nHM19 HEX 030101010301010103010103010103018E\nHM20 HEX 030303030303030303030303030303018E\nHM21 HEX 050305030502040204020402040203018E\nHM22 DFB 3,1,1,2,3,1,1,1,3,1,3,1,1,1,3,1,3,2,1,1\n DFB 1,2,1,1,3,1,1,1,1,1,1,1,3,2,1,1,1,1,3,1\n DFB 1,1,1,2,1,2,1,1,1,3,1,3,1,1,2,1,1,1,1,1\n DFB 1,1,3,1,1,3,2,1,1,1,3,1,1,1,3,1,1,2,1,1\n DFB 3,1,1,2,1,1,1,1,1,1,3,2,1,1,1,3,1,1,3,1\n DFB 1,3,1,2,2,1,1,1,1,1,3,1,1,3,1,1,1,3,1,1\n DFB 1,1,1,1,3,1,1,2,1,1,1,2,3,1,1,2,1,1,3,1\n DFB 1,1,3,1,2,1,1,1,3,1,1,2,1,1,3,2,1,1,1,3\n DFB 1,1,2,1,1,1,3,1,1,3,1,1,1,3,1,2,1,3,1,1\n DFB 128\nHM23 DFB 4,1,2,1,1,4,1,1,2,1,4,1,2,4,1,1,2,1,4\n DFB 1,3,1,2,4,1,3,1,2,1,1,1,3,1,4,1,3,1,2,1,3\n DFB 1,2,1,2,1,3,1,4,1,3,1,1,2,1,1,1,3,1,1\n DFB 4,1,2,1,2,1,3,1,1,4,1,4,1,1,2,1,1,4,1,1,2\n DFB 1,3,1,4,1,1,2,1,4,1,1,1,2,1,1,4,1,1,1\n DFB 3,1,1,2,1,1,1,4,1,1,2,1,1,4,1,1,2,1,1,4,1\n DFB 4,1,1,3,1,1,2,1,4,1,2,1,1,4,1,1,3,1,1\n DFB 4,1,1,3,1,4,1,2,1,4,1,1,4,1,1,2,1,2,1,4,1\n DFB 1,1,1,3,1,2,1,2,1,4,1,1,3,1,4,1,3,1,1\n DFB 2,1,4,1,2,1,1,4,1,1,1,3,1,2,1,4,1,2,1,1,1\n DFB 4,1,1,2,1,4,1,3,1,4,1,1,2,1,1,2,1,1,1\n DFB 4,1,3,1,1,2,1,4,1,1,1,2,1,1,4,1,3,1,4,1,1\n DFB 1,1,2,1,4,1,1,128\nHM24 DFB 3,3,3,3,3,3,3,1,3,1,3,1,3,1,3,1,3,1,3\n DFB 1,1,3,1,1,3,1,1,3,1,1,3,1,1,3,1,1,3,1,1,1\n DFB 3,1,1,1,3,1,1,1,3,1,1,1,3,1,1,1,3,1,1\n DFB 1,3,1,1,3,1,1,3,1,1,3,1,1,3,1,1,3,1,1,3,1\n DFB 3,1,3,1,3,1,3,1,3,1,128\nHM25 DFB 3,3,3,1,3,1,3,1,1,3,1,1,3,1,1,1,3,1,1,1,3,1,1,3,1,1,3,1,3,1,128\nHM26 DFB 3,3,1,1,1,1,3,3,3,128\nHM27 DFB 3,3,1,1,3,1,3,1,1,128\nHM28 DFB 3,3,1,128\nHM29 HEX 0303030303030103010301030101038D\nHM30 DFB 3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3\n DFB 1,1,3,1,1,3,1,3,1,3,3,3,3,3,1,3,1,146\nHM31 DFB 1,4,128\nHM32 DFB 1,3,128\nHARMTBL DFB #<HM1\n DFB #<HM2\n DFB #<HM3\n DFB #<HM4\n DFB #<HM5\n DFB #<HM6\n DFB #<HM7\n DFB #<HM8\n DFB #<HM9\n DFB #<HM10\n DFB #<HM11\n DFB #<HM12\n DFB #<HM13\n DFB #<HM14\n DFB #<HM15\n DFB #<HM16\n DFB #<HM17\n DFB #<HM18\n DFB #<HM19\n DFB #<HM20\n DFB #<HM21\n DFB #<HM22\n DFB #<HM23\n DFB #<HM24\n DFB #<HM25\n DFB #<HM26\n DFB #<HM27\n DFB #<HM28\n DFB #<HM29\n DFB #<HM30\n DFB #<HM31\n DFB #<HM32\nHARMTBH DFB #>HM1\n DFB #>HM2\n DFB #>HM3\n DFB #>HM4\n DFB #>HM5\n DFB #>HM6\n DFB #>HM7\n DFB #>HM8\n DFB #>HM9\n DFB #>HM10\n DFB #>HM11\n DFB #>HM12\n DFB #>HM13\n DFB #>HM14\n DFB #>HM15\n DFB #>HM16\n DFB #>HM17\n DFB #>HM18\n DFB #>HM19\n DFB #>HM20\n DFB #>HM21\n DFB #>HM22\n DFB #>HM23\n DFB #>HM24\n DFB #>HM25\n DFB #>HM26\n DFB #>HM27\n DFB #>HM28\n DFB #>HM29\n DFB #>HM30\n DFB #>HM31\n DFB #>HM32\nENVTBL DFB #<MV0\n DFB #<MV1\n DFB #<MV2\n DFB #<MV3\n DFB #<MV4\n DFB #<MV5\n DFB #<MV6\n DFB #<MV7\n DFB #<MV8\n DFB #<MV9\n DFB #<MV10\n DFB #<MV11\n DFB #<MV12\n DFB #<MV13\n DFB #<MV14\n DFB #<MV15\nENVTBH DFB #>MV0\n DFB #>MV1\n DFB #>MV2\n DFB #>MV3\n DFB #>MV4\n DFB #>MV5\n DFB #>MV6\n DFB #>MV7\n DFB #>MV8\n DFB #>MV9\n DFB #>MV10\n DFB #>MV11\n DFB #>MV12\n DFB #>MV13\n DFB #>MV14\n DFB #>MV15\nMVOLTBL HEX 4A4AEA0A0A4969D0\nMVT2 HEX 4AEAEAEA0A0F0704\nVTBL HEX 0001020304\nHTPTBL DFB 0,24,19,16,12,22,7,24,16,22,35,0,0,26,19,16,24\n DFB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\nAMPTBL DFB 1,2,3,4,5,7,9,11,14,17,21,26,32,39,47,56\nMINIT LDA #$EA\n STA VATC1\n STA VATC2\n STA VXAT1\n STA VXAT2\n LDA #<HM1\n STA MBASS1+1\n STA MMBASS2+1\n LDA #>HM1\n STA MBASS1+2\n STA MMBASS2+2\n LDA #0\n STA R+5\n STA $AF\n STA $B6\n STA R+4\n LDX INDEX\n LDA MADRLO,X\n STA R+0\n LDA MADRHI,X\n STA R+1\n LDA #0\n STA R+15\n STA R+24\n STA R+27\nNEWNOTE LDY #0\n STY R+12\n STY R+3\n LDA #1\n STA MLBL300+1\n INC R+0\n INC R+0\n BNE MNOWIC\n INC R+1\nMNOWIC LDA (R+0),Y\n TAX\n INY\n LDA (R+0),Y\n BEQ MSYSTM1\n TXA\n AND #%11111100\n STA R+13\n BEQ MNOBC1\n LSR\n LSR\n CLC\n ADC R+4\n STA R+13\n CMP #$19\n BGE MNOBC1\n LDA #7\n STA MLBL300+1\nMNOBC1 LDA (R+0),Y\n BEQ MSYSTM1\n JMP NMSYSM\nMSYSTM1 TXA\n BEQ MINIT\n CMP #$FE\n BNE MXNQ10\n LDY R+24\n BEQ MXQN8\nMRET1 LDA R+25\n STA R+0\n LDA R+26\n STA R+1\n LDA #0\n STA R+24\nMXQN8 JMP NEWNOTE\nMXNQ10 CMP #$FD\n BNE MXQN9\n LDX $1E60\n LDA $1E80,X\n ORA #$80\n STA $1E80,X\n JMP NEWNOTE\nMXQN9 CMP #$FF\n BNE NOPAUS1\n STA R+10\n LDA #0\n STA R+13\n LDA NOTE\n STA R+8\n LDA LENGTH\n STA R+9\n RTS\nNOPAUS1 CPX #9\n BGE SYMPH01\n LDA MVOLTBL-1,X\n STA VATC1\n LDA MVT2-1,X\n STA VXAT1\n JMP NEWNOTE\nSYMPH01 TXA\n LDX #0\n STX R+4\n SEC\n SBC #9\n CMP #32\n BGE HOCTSFT1\nGOHERE4 TAX\n STX $AF\n LDA HTPTBL,X\n CLC\n ADC R+4\n STA R+4\n LDA HARMTBL,X\n STA MBASS1+1\n LDA HARMTBH,X\n STA MBASS1+2\n JMP NEWNOTE\nHOCTSFT1 LDX #12\n STX R+4\n AND #$1F\n JMP GOHERE4\nNMSYSM TAY\n AND #%00111111\n BEQ MMGA03\n JMP NTVJNK\nMMGA03 TYA\n AND #%11000000\n CMP #%10000000\n BNE MNSSC1\n DEX\n BMI ALTSNG\n STX INDEX\nALTSNG1 JMP NEWNOTE\nALTSNG LDY $1E60\n LDA $1E80,Y\n BPL ALTSNG1\n TXA\n AND #$7F\n STA INDEX\n JMP MINIT\nMNSSC1 CMP #%01000000\n BNE MGARY5\n LDA #1\n STA R+15\n STA R+21\n TXA\n LDX R+0\n STX R+22\n LDX R+1\n STX R+23\n ASL\n BCS NOTVI1\n ADC R+0\n STA R+0\n LDA #0\n ADC R+1\n STA R+1\n JSR MMNNOTE\n JMP NEWNOTE\nMGARY5 LDA R+24\n BEQ MMGAR3\n JMP MRET1\nMMGAR3 LDA #1\n STA R+24\n TXA\n LDX R+0\n STX R+25\n LDX R+1\n STX R+26\n ASL\n STA R+14\n BCS NOTRP1\n LDA R+0\n SEC\n SBC R+14\n STA R+0\n LDA R+1\n SBC #0\n STA R+1\n JMP NEWNOTE\nNOTRP1 LDA R+0\n SBC R+14\n STA R+0\n LDA R+1\n SBC #0\n STA R+1\n DEC R+1\n JMP NEWNOTE\nNOTVI1 CLC\n ADC R+0\n STA R+0\n LDA #0\n ADC R+1\n STA R+1\n INC R+1\n JSR MMNNOTE\n JMP NEWNOTE\nNTVJNK STA R+10\n TYA\n AND #%11000000\n LSR\n LSR\n LSR\n LSR\n STA R+7\n TXA\n AND #%00000011\n ORA R+7\n TAX\n LDA AMPTBL,X\n STA R+11\n LDA ENVTBL,X\n STA MVAR6+1\n LDA ENVTBH,X\n STA MVAR6+2\n LDX R+13\n LDA NOTE,X\n STA R+8\n LDA LENGTH,X\n STA R+9\n RTS\nMPLAY LDA R+15\n BEQ NO2VOI\n LDA R+21\n EOR #1\n STA R+21\n BNE NO2VOI\n JMP MMPLAY\nV8HOLD LDA R+12\n CMP R+10\n BLT MESKP\n INC R+12\nNO2VOI LDY R+12\nMVAR6 LDA $FFFF,Y\n BMI MESKP\n CMP #$7F\n BEQ V8HOLD\nVATC1 ASL\nVXAT1 ASL\n STA R+11\n INC R+12\nMESKP LDA $AF\n BNE NEWMM4\n LDA #0\n STA R+3\nNEWMM4 LDA R+11\n STA VTBL+2\n LSR\n STA VTBL+1\n CLC\n ADC R+11\n STA VTBL+3\n LDA R+11\n ASL\n STA VTBL+4\n INC VTBL+1\n INC VTBL+2\n INC VTBL+3\n INC VTBL+4\n LDX R+9\n LDA R+13\n BNE MSEGL5\n STA VTBL+1\n STA VTBL+2\n STA VTBL+3\n STA VTBL+4\nMSEGL5 JMP MSEG\nMSEGL4 AND #$7F\n STA R+3\nMSEG\n LDY R+3\nMBASS1 LDA HM1,Y\n BMI MSEGL4\n INC R+3\n TAY\n LDA VTBL-1,Y\n STA R+6\n SEC\n SBC R+8\n TAY\nMADJLP INY\n BNE MADJLP\nMLBL300 LDY #1\nMLMDI LDA R+8\n SEC\nMDLOOP SBC #1\n BNE MDLOOP\n DEY\n BNE MLMDI\n LDY R+6\n BEQ MFIZZLE\nM30A LDA $C030\nMVDIT DEY\n BNE MVDIT\nM30B LDA $C030\nMFIZZLE DEX\n BNE MSEG\n DEC R+10\n BNE LBL10\n JMP NEWNOTE\nLBL10 RTS\nMMINIT LDA #0\n STA R+15\n RTS\nMMNNOTE LDY #0\n STY R+2\n STY R+16\n LDA #1\n STA MMLM302+1\n INC R+22\n INC R+22\n BNE MMNOWIC\n INC R+23\nMMNOWIC LDA (R+22),Y\n TAX\n INY\n LDA (R+22),Y\n BEQ MSYSTM2\n TXA\n AND #%11111100\n STA R+17\n BEQ MMNOBC2\n LSR\n LSR\n CLC\n ADC R+5\n STA R+17\n CMP #$19\n BGE MMNOBC2\n LDA #7\n STA MMLM302+1\nMMNOBC2 LDA (R+22),Y\n BNE NMMSYSMM\nMSYSTM2 TXA\n BEQ MMINIT\n CMP #$FE\n BNE MXQN6\n LDY R+27\n BEQ MXQN5\nMRET2 LDA R+28\n STA R+22\n LDA R+29\n STA R+23\n LDA #0\n STA R+27\nMXQN5 JMP MMNNOTE\nMXQN6 CMP #$FF\n BNE NOPAUS2\n STA R+18\n LDA #0\n STA R+17\n LDA NOTE\n STA R+19\n LDA LENGTH\n STA R+20\n RTS\nNOPAUS2 CPX #9\n BGE SYMPH02\n LDA MVOLTBL-1,X\n STA VATC2\n LDA MVT2-1,X\n STA VXAT2\n JMP MMNNOTE\nSYMPH02 TXA\n LDX #0\n STX R+5\n SEC\n SBC #9\n CMP #32\n BGE HOCTSFT4\nGOHERE8 TAX\n STX $B6\n LDA HTPTBL,X\n CLC\n ADC R+5\n STA R+5\n LDA HARMTBL,X\n STA MMBASS2+1\n LDA HARMTBH,X\n STA MMBASS2+2\nKFMM465 JMP MMNNOTE\nHOCTSFT4 LDX #12\n STX R+5\n AND #$1F\n JMP GOHERE8\nNMMSYSMM TAY\n AND #%00111111\n BNE M2NTV\n TYA\n AND #%11000000\n CMP #%11000000\n BNE KFMM465\n LDA R+27\n BNE MRET2\n LDA #1\n STA R+27\n TXA\n LDX R+22\n STX R+28\n LDX R+23\n STX R+29\n ASL\n STA R+14\n BCS NOTRP2\n LDA R+22\n SEC\n SBC R+14\n STA R+22\n LDA R+23\n SBC #0\n STA R+23\nNOTRP2 LDA R+22\n JMP MMNNOTE\n SBC R+14\n STA R+22\n LDA R+23\n SBC #0\n STA R+23\n DEC R+23\n JMP MMNNOTE\nM2NTV STA R+18\n TYA\n AND #%11000000\n LSR\n LSR\n LSR\n LSR\n STA R+7\n TXA\n AND #%00000011\n ORA R+7\n TAX\n LDA AMPTBL,X\n STA $B7\n LDA ENVTBL,X\n STA MVAR2C+1\n LDA ENVTBH,X\n STA MVAR2C+2\n LDX R+17\n LDA NOTE,X\n STA R+19\n LDA LENGTH,X\n STA R+20\n RTS\nMV8HOLD LDA R+16\n CMP R+18\n BLT MMESKP\n INC R+16\nMMPLAY LDY R+16\nMVAR2C LDA $FFFF,Y\n BMI MMESKP\n CMP #$7F\n BEQ MV8HOLD\nVATC2 ASL\nVXAT2 ASL\n STA $B7\n INC R+16\nMMESKP LDA $B6\n BNE NEWMM5\n LDA #0\n STA R+2\nNEWMM5 LDA $B7\n STA VTBL+2\n LSR\n STA VTBL+1\n CLC\n ADC $B7\n STA VTBL+3\n LDA $B7\n ASL\n STA VTBL+4\n INC VTBL+1\n INC VTBL+2\n INC VTBL+3\n INC VTBL+4\n LDX R+20\n LDA R+17\n BNE MMSEGL5\n STA VTBL+1\n STA VTBL+2\n STA VTBL+3\n STA VTBL+4\nMMSEGL5 JMP MMSEG\nMMSEGL4 AND #$7F\n STA R+2\nMMSEG\n LDY R+2\nMMBASS2 LDA HM1,Y\n BMI MMSEGL4\n INC R+2\n TAY\n LDA VTBL-1,Y\n STA R+6\n SEC\n SBC R+19\n TAY\nMMADJLP INY\n BNE MMADJLP\nMMLM302 LDY #1\nMMLMMDI LDA R+19\n SEC\nMMDLOOP SBC #1\n BNE MMDLOOP\n DEY\n BNE MMLMMDI\n LDY R+6\n BEQ MMFIZZY\nM20A LDA $C030\nMMVDIT DEY\n BNE MMVDIT\nM20B LDA $C030\nMMFIZZY DEX\n BNE MMSEG\n DEC R+18\n BNE MLZ10\n JMP MMNNOTE\nMLZ10 RTS\n\n*-------------------------------\n*\n*  M I N I T\n*\n*  Inititalize music system & prepare to play a song\n*\n*  In: A = song #\n*\n*-------------------------------\n_MINIT sta INDEX\n jmp MINIT\n\n*-------------------------------\n*\n*  M P L A Y\n*\n*  Continue playing current song\n*  (Generates a fraction of a second of sound)\n*\n*  Out: A = current song #\n*  (Most songs set song #0 when finished.)\n*\n*  NOTE: MSYS uses aux z.p. locations $00-1F.  These must\n*  remain undisturbed for the duration of each song.\n*\n*-------------------------------\n_MPLAY jsr MPLAY\n lda INDEX\n rts\n\n*-------------------------------\n lst\neof ds 1\n usr $a9,34,$600,*-org\n lst off\n"
  },
  {
    "path": "04 Support/MakeDisk/S/PURPLE.S",
    "content": "* purple (put this file!!!)\n\nPURPrun = $6321\n\nPURPLE\n ldy #PURPrun\n lda #>PURPrun\n\n jsr PURPsub\n jsr PURPjmp\n\n* Note: first byte of next junk must be $60 (rts)\n*-------------------------------------------------\n\nPURPcode\n hex 60386018EAA8E7108849450040994825\n hex FB10C08CBD48852AFB10C08CBD498500\n hex A9E7D096C9FB10C08CBD03A0F2D0AAC9\n hex FB10C08CBDEAF0D0D5C9FB10C08CBD3D\n hex F048E604D0C84884FDA060F1D00DE0E8\n hex 62549D409440B56254BC00A2E7FCEEE7\n hex FCEEEEFC63384C0BF044C66018BFFB9D\n hex CD952ABFFC9D00A963BE2063AF4C0330\n hex F4108805D046D1FB10C08CBD07A0F4D0\n hex EEC914F088FB10C08CBD062410A0C08D\n hex BD23D0E7C9FB10C08CBD2CD0E7C9FB10\n hex C08CBDF4D0E7C939F088FB10C08CBD00\n hex A0F4D0D5C947F088FB10C08CBD00A0F1\n hex D007C941A557B063D0205CF045C64585\n hex 80A9478563A94685B6A9C08EBDC089BD\n hex FDA644850AA963BE20\n\n*-------------------------------------------------\n\nPURPlen = *-PURPcode\n\n* Routine to decode code\n\n hex 20\n\nPURPsub\n sty 4\n sta 5\n\n ldy #0\n\n ldx #PURPlen\n:0 dex\n lda PURPcode,x\n sta (4),y\n iny\n bne :0\n\n rts\n\n hex 2c\n\nPURPjmp jmp (4)\n\n*------------------------------------------------- EOF\n"
  },
  {
    "path": "04 Support/MakeDisk/S/RYELLOW1.S",
    "content": "* Ryellow1 (put this file!!!)\n\n* This code sets the high bit of $7C in aux mem\n* if signature is found on track zero.\n\n* NOTE: make sure the x register has a number\n* greater than 4 when calling YELLOW.\n\nYELLrun = $AAAA\n\nYELLOW\n:0 sec\n rol\n clc\n rol\n dex\n bne :0\n sta 4\n\n jsr YELLsub\n jmp YELLnothing\n\n*-------------------------------------------------\n\nYELLcode\n hex 27A26A0C5717236A8AAD0603AA8A3401\n hex 03A02F9E0C5717246A03012F9D03E92F\n hex 9C032A2F9F6C9F5AF68AF8011AFD0F9B\n hex 63AD7A5B0AAA17266ABA51225AED637F\n hex 7A5E0AAA17266ABA51225A93634D7A5E\n hex 17266ABA51634D7A8617266ABA51634D\n hex 7A8917276A0ABA8EAC17266ABA51225A\n hex BE63447A5E0AAD17266ABA517B9C7AAF\n hex 22BA5E9AA9E696018AAD06374215DCF1\n hex B2CA6C9E5AA1E66100564444564D4456\n hex 4D8AAD06374215CA0A572E92627AAE4C\n hex 925A9717266ABA51637F7A5A4017266A\n hex BA5163007A580AA917266ABA51633C7A\n hex 4D03AA2F9317266ABA51802F9217266A\n hex BA518F92339AAAEF9322BA4D0240B2CA\n hex 92CA03AE27620E6F555AFC03AA27670E\n hex 0F55276F0E9247620E5A9F1AACE3554C\n hex 553AAEC3546C5567670E3AA907670E63\n hex A61AAB02928A440113B3068A5601076F\n hex 0EB28A5A01138F068A560144670E7A6A\n hex 8A5601B20F5583A980AF5700172A6A0C\n hex 57CA08B8607A579243AB7A5CCA08AA16\n hex 0E0E1F9A3E9A370E0E424A8B7A5BCAAB\n hex 9A828E8AB4B7B6B6B6B6B6DA868C88B5\n hex B4B7B6B6B6B6B655A9\n\n*-------------------------------------------------\n\nYELLlen = *-YELLcode\n\n* Routine to decode code\n\n hex 20 ;jsr\n\nYELLsub sta 5\n ldy #0\n:0 lda YELLcode,y\n eor 4\n sta (4),y\n inc 5\n lda YELLcode+256,y\n eor 4\n sta (4),y\n dec 5\n iny\n bne :0\n lda 4\n eor #$4C!$AA ;jmp instruction\n sta 3\n jmp 3\n\n*-------------------------------------------------\n\n hex a9 ;lda #imm\n\nYELLnothing ldy #0\n inc 5\n:0 tya\n:1 sta (4),y\n iny\n bne :1\n rts\n\n\n*------------------------------------------------- EOF\n"
  },
  {
    "path": "04 Support/MakeDisk/S/SEQDATA.S",
    "content": " tr on\n lst off\n\n* seqdata\n\nfcheckmark = %01000000\nfcentermark = %00011111\n\n*  Sequence table entry points\n\nstartrun = 1\nstand = 2\nstandjump = 3\nrunjump = 4\nturn = 5\nrunturn = 6\nstepfall = 7\njumphangMed = 8\nhang = 9\nclimbup = 10\nhangdrop = 11\nfreefall = 12\nrunstop = 13\njumpup = 14\nfallhang = 15\njumpbackhang = 16\nsoftland = 17\njumpfall = 18\nstepfall2 = 19\nmedland = 20\nrjumpfall = 21\nhardland = 22\nhangfall = 23\njumphangLong = 24\nhangstraight = 25\nrdiveroll = 26\nsdiveroll = 27\nhighjump = 28\nstepfwd1 = 29\n;stepfwd 1 thru 14 = 29 thru 42\nturnrun = 43\ntestfoot = 44\nbumpfall = 45\nhardbump = 46\nbump = 47\nsuperhijump = 48\nstandup = 49\nstoop = 50\nimpale = 51\ncrush = 52\ndeadfall = 53\nhalve = 54\nengarde = 55\nadvance = 56\nretreat = 57\nstrike = 58\nflee = 59\nturnengarde = 60\nstrikeblock = 61\nreadyblock = 62\nlandengarde = 63\nbumpengfwd = 64\nbumpengback = 65\nblocktostrike = 66\nstrikeadv = 67\nclimbdown = 68\nblockedstrike = 69\nclimbstairs = 70\ndropdead = 71\nstepback = 72\nclimbfail = 73\nstabbed = 74\nfaststrike = 75\nstrikeret = 76\nalertstand = 77\ndrinkpotion = 78\ncrawl = 79\nalertturn = 80\nfightfall = 81\nefightfall = 82\nefightfallfwd = 83\nrunning = 84\nstabkill = 85\nfastadvance = 86\ngoalertstand = 87\narise = 88\nturndraw = 89\nguardengarde = 90\npickupsword = 91\nresheathe = 92\nfastsheathe = 93\nPstand = 94\nVstand = 95\nVapproach = 96\nVstop = 97\nPalert = 98\nPback = 99\nVexit = 100\nMclimb = 101\nVraise = 102\nPlie = 103\npatchfall = 104\nMscurry = 105\nMstop = 106\nMleave = 107\nPembrace = 108\nPwaiting = 109\nPstroke = 110\nPrise = 111\nPcrouch = 112\nPslump = 113\nMraise = 114\n\n* Sequence table instruction codes\n\ngoto = -1\naboutface = -2\nup = -3\ndown = -4\nchx = -5\nchy = -6\nact = -7\nsetfall = -8\nifwtless = -9\ndie = -10\njaru = -11\njard = -12\neffect = -13\ntap = -14\nnextlevel = -15\n\n lst off\n"
  },
  {
    "path": "04 Support/MakeDisk/S/SEQTABLE.S",
    "content": "* seqtable\norg = $3000\n tr on ;TABS 15,20,40\n lst off\n lstdo off\n\n*-------------------------------\n* Seq table instructions:\n\ngoto = -1\naboutface = -2\nup = -3\ndown = -4\nchx = -5\nchy = -6\nact = -7\nsetfall = -8\nifwtless = -9\ndie = -10\njaru = -11\njard = -12\neffect = -13\ntap = -14\nnextlevel = -15\n\n*-------------------------------\n*\n*  S E Q U E N C E   T A B L E\n*\n*-------------------------------\n org org\n\n:1 dw startrun\n:2 dw stand\n:3 dw standjump\n:4 dw runjump\n:5 dw turn\n:6 dw runturn\n:7 dw stepfall\n:8 dw jumphangMed\n:9 dw hang\n:10 dw climbup\n:11 dw hangdrop\n:12 dw freefall\n:13 dw runstop\n:14 dw jumpup\n:15 dw fallhang\n:16 dw jumpbackhang\n:17 dw softland\n:18 dw jumpfall\n:19 dw stepfall2\n:20 dw medland\n:21 dw rjumpfall\n:22 dw hardland\n:23 dw hangfall\n:24 dw jumphangLong\n:25 dw hangstraight\n:26 dw rdiveroll\n:27 dw sdiveroll\n:28 dw highjump\n:29 dw step1\n:30 dw step2\n:31 dw step3\n:32 dw step4\n:33 dw step5\n:34 dw step6\n:35 dw step7\n:36 dw step8\n:37 dw step9\n:38 dw step10\n:39 dw step11\n:40 dw step12\n:41 dw step13\n:42 dw fullstep\n:43 dw turnrun\n:44 dw testfoot\n:45 dw bumpfall\n:46 dw hardbump\n:47 dw bump\n:48 dw superhijump\n:49 dw standup\n:50 dw stoop\n:51 dw impale\n:52 dw crush\n:53 dw deadfall\n:54 dw halve\n:55 dw engarde\n:56 dw advance\n:57 dw retreat\n:58 dw strike\n:59 dw flee\n:60 dw turnengarde\n:61 dw strikeblock\n:62 dw readyblock\n:63 dw landengarde\n:64 dw bumpengfwd\n:65 dw bumpengback\n:66 dw blocktostrike\n:67 dw strikeadv\n:68 dw climbdown\n:69 dw blockedstrike\n:70 dw climbstairs\n:71 dw dropdead\n:72 dw stepback\n:73 dw climbfail\n:74 dw stabbed\n:75 dw faststrike\n:76 dw strikeret\n:77 dw alertstand\n:78 dw drinkpotion\n:79 dw crawl\n:80 dw alertturn\n:81 dw fightfall\n:82 dw efightfall\n:83 dw efightfallfwd\n:84 dw running\n:85 dw stabkill\n:86 dw fastadvance\n:87 dw goalertstand\n:88 dw arise\n:89 dw turndraw\n:90 dw guardengarde\n:91 dw pickupsword\n:92 dw resheathe\n:93 dw fastsheathe\n:94 dw Pstand\n:95 dw Vstand\n:96 dw Vwalk\n:97 dw Vstop\n:98 dw Palert\n:99 dw Pback\n:100 dw Vexit\n:101 dw Mclimb\n:102 dw Vraise\n:103 dw Plie\n:104 dw patchfall\n:105 dw Mscurry\n:106 dw Mstop\n:107 dw Mleave\n:108 dw Pembrace\n:109 dw Pwaiting\n:110 dw Pstroke\n:111 dw Prise\n:112 dw Pcrouch\n:113 dw Pslump\n:114 dw Mraise\n\n*-------------------------------\n* r u n n i n g\n*-------------------------------\nrunning\n db act,1\n db goto\n dw runcyc1\n\n*-------------------------------\n* s t a r t r u n\n*-------------------------------\nstartrun\n db act,1\nrunstt1 db 1\nrunstt2 db 2\nrunstt3 db 3\nrunstt4 db 4,chx,8\nrunstt5 db 5,chx,3\nrunstt6 db 6,chx,3\n\nruncyc1 db 7,chx,5\nruncyc2 db 8,chx,1\nruncyc3 db tap,1,9,chx,2\nruncyc4 db 10,chx,4\nruncyc5 db 11,chx,5\nruncyc6 db 12,chx,2\nruncyc7 db tap,1,13,chx,3\nruncyc8 db 14,chx,4\n db goto\n dw runcyc1\n\n*-------------------------------\n*  s t a n d\n*-------------------------------\nstand\n db act,0\n db 15\n db goto\n dw stand\n\n*-------------------------------\n* a l e r t   s t a n d\n*-------------------------------\ngoalertstand\n db act,1\nalertstand\n:loop db 166\n db goto\n dw :loop\n\n*-------------------------------\n* a r i s e (skeleton)\n*-------------------------------\narise\n db act,5\n db chx,10,177\n db 177\n db chx,-7,chy,-2,178\n db chx,5,chy,2,166\n db chx,-1\n db goto\n dw ready\n\n*-------------------------------\n* g u a r d e n g a r d e\n*-------------------------------\nguardengarde\n db goto\n dw ready\n\n*-------------------------------\n* e n  g a r d e\n*-------------------------------\nengarde\n db act,1\n db chx,2\n db 207\n db 208,chx,2\n db 209,chx,2\n db 210,chx,3\nready\n db act,1\n db tap,0\n db 158\n db 170\n:loop db 171\n\n db goto\n dw :loop\n\n*-------------------------------\n* s t a b b e d\n*-------------------------------\nstabbed\n db act,5\n db setfall,-1,0\n db 172,chx,-1,chy,1\n db 173,chx,-1\n db 174,chx,-1,chy,2\n; db 175\n db chx,-2,chy,1\n db chx,-5,chy,-4\n db goto\n dw guy8\n\n*-------------------------------\n* s t r i k e - a d v a n c e\n*-------------------------------\n;from guy6 (154)\nstrikeadv\n db act,1\n db setfall,1,0\n db 155\n db chx,2,165\n db chx,-2\n db goto\n dw ready\n\n*-------------------------------\n* s t r i k e - r e t r e a t\n*-------------------------------\n ;from guy6 (154)\nstrikeret\n db act,1\n db setfall,-1,0\n db 155,156,157\n db 158\n db goto\n dw retreat\n\n*-------------------------------\n* a d v a n c e\n*-------------------------------\nadvance\n db act,1\n db setfall,1,0\n db chx,2,163\n db chx,4,164\n db 165\n\n db goto\n dw ready\n\n*-------------------------------\n* f a s t   a d v a n c e\n*-------------------------------\nfastadvance\n db act,1\n db setfall,1,0\n db chx,6,164\n db 165\n\n db goto\n dw ready\n\n*-------------------------------\n* r e t r e a t\n*-------------------------------\nretreat\n db act,1\n db setfall,-1,0\n db chx,-3,160\n db chx,-2,157\n\n db goto\n dw ready\n\n*-------------------------------\n* s t r i k e\n*-------------------------------\nstrike\n db act,1\n db setfall,-1,0\n db 168\n\nfaststrike\n db act,1\nguy3 db 151\nguy4 db act,1\n db 152\n;-->blockedstrike\nguy5 db 153\nguy6 db 154\nguy7 db act,5 ;clr flags to avoid repeat strike\n db 155\nguy8 db act,1\n db 156\nguy9 db  157\n\n db goto\n dw ready\n\n*-------------------------------\n* b l o c k e d   s t r i k e\n*-------------------------------\nblockedstrike\n db act,1\n db 167\n;--> strikeblock\n db goto\n dw guy7\n\n*-------------------------------\n* b l o c k   t o   s t r i k e\n*-------------------------------\nblocktostrike\n db 162\n db goto\n dw guy4\n\n*-------------------------------\n* r e a d y   b l o c k\n*-------------------------------\nreadyblock\n db 169\nblocking\n db 150\n ;--> blocktostrike/retreat\n db goto\n dw ready\n\n*-------------------------------\n* s t r i k e   t o   b l o c k\n*-------------------------------\nstrikeblock\n db 159\n db 160\n db goto\n dw blocking\n\n*-------------------------------\n* l a n d   e n   g a r d e\n*-------------------------------\nlandengarde\n db act,1\n db jard\n\n db goto\n dw ready\n\n*-------------------------------\n* b u m p   e n   g a r d e   ( f o r w a r d )\n*-------------------------------\nbumpengfwd\n db act,5\n db chx,-8\n\n db goto\n dw ready\n\n*-------------------------------\n* b u m p   e n   g a r d e   ( b a c k )\n*-------------------------------\nbumpengback\n db act,5\n db 160\n db 157\n db goto\n dw ready\n\n*-------------------------------\n* f l e e\n*-------------------------------\nflee\n db act,7\n db chx,-8\n\n db goto\n dw turn\n\n*-------------------------------\n* t u r n   e n   g a r d e\n*-------------------------------\nturnengarde\n db act,5\n db aboutface,chx,5\n\n db goto\n dw retreat\n\n*-------------------------------\n*  a l e r t  t u r n (for enemies)\n*-------------------------------\nalertturn\n db act,5\n\n db aboutface,chx,18\n\n db goto\n dw goalertstand\n\n*-------------------------------\n*  s t a n d j u m p\n*-------------------------------\nstandjump\n db act,1\n db 16\n db 17,chx,2\n db 18,chx,2\n db 19,chx,2\n db 20,chx,2\n db 21,chx,2\n db 22,chx,7\n db 23,chx,9\n db 24,chx,5,chy,-6 ;chx 6?\nsjland db 25,chx,1,chy,6\n db 26,chx,4\n db jard\n db tap,1,27,chx,-3\n db 28,chx,5\n db 29\n db tap,1,30\n db 31\n db 32\n db 33,chx,1\n db goto\n dw stand\n\n*-------------------------------\n*  r u n j u m p\n*-------------------------------\nrunjump\n db act,1\n db tap,1,34,chx,5\n db 35,chx,6\n db 36,chx,3\n db 37,chx,5\n db tap,1,38,chx,7\n db 39,chx,12,chy,-3\n db 40,chx,8,chy,-9\n db 41,chx,8,chy,-2\n db 42,chx,4,chy,11\n db 43,chx,4,chy,3\nrjlandrun\n db 44,chx,5\n db jard,tap,1\n db goto\n dw runcyc1\n\n*-------------------------------\n*  r u n  d i v e  r o l l\n*-------------------------------\nrdiveroll\n db act,1\n\n db chx,1\n db 107,chx,2\n db chx,2\n db 108\n db chx,2\n db 109\n db chx,2\n db 109\n db chx,2\n:crouch db 109\n db goto\n dw :crouch\n\n*-------------------------------\n*  s t a n d  d i v e  r o l l\n*-------------------------------\nsdiveroll\n\n*-------------------------------\n*  c r a w l\n*-------------------------------\ncrawl\n db act,1\n db chx,1,110\n db 111,chx,2\n db 112\n\n db chx,2\n db 108\n db chx,2\n:crouch db 109\n db goto\n dw :crouch\n\n*-------------------------------\n*  t u r n  d r a w\n*-------------------------------\nturndraw\n db act,7\n db aboutface,chx,6\n db 45,chx,1\n db 46\n db goto\n dw engarde\n\n*-------------------------------\n*  t u r n\n*-------------------------------\nturn\n db act,7\n db aboutface,chx,6\n db 45,chx,1\n db 46,chx,2\n db 47,chx,-1\nfinishturn\n db 48,chx,1\n db 49,chx,-2\n db 50,51,52\n db goto\n dw stand\n\n*-------------------------------\n*  t u r n r u n\n*  (from frame 48)\n*-------------------------------\nturnrun\n db act,1\n db chx,-1\n db goto\n dw runstt1\n\n*-------------------------------\n*  r u n t u r n\n*-------------------------------\nrunturn\n db act,1\n db chx,1\n db  53,chx,1\n db tap,1,54,chx,8\n db 55\n db tap,1,56,chx,7\n db 57,chx,3\n db 58,chx,1\n db 59\n db 60,chx,2\n db 61,chx,-1\n db 62\n db 63\n db 64,chx,-1\n db 65,chx,-14\n db aboutface,goto\n dw runcyc7\n\n*-------------------------------\n*  f i g h t f a l l  (backward)\n*-------------------------------\nfightfall\n db act,3\n db chy,-1\n\n db 102,chx,-2,chy,6\n db 103,chx,-2,chy,9\n db 104,chx,-1,chy,12\n db 105,chx,-3\n\n db setfall,0,15\n db goto\n dw freefall\n\n*-------------------------------\n*  e n e m y  f i g h t  f a l l\n*-------------------------------\nefightfall\n db act,3\n db chy,-1,chx,-2\n\n db 102,chx,-3,chy,6\n db 103,chx,-3,chy,9\n db 104,chx,-2,chy,12\n db 105,chx,-3\n;for now--ultimately we want enemy\n;shapes in here\n db setfall,0,15\n db goto\n dw freefall\n\n*-------------------------------\n*  e n e m y  f i g h t  f a l l  f w d\n*-------------------------------\nefightfallfwd\n db act,3\n db chx,1,chy,-1\n\n db 102,chx,2,chy,6\n db 103,chx,-1,chy,9\n db 104,chy,12\n db 105,chx,-2\n;for now--ultimately we want enemy\n;shapes in here\n db setfall,1,15\n db goto\n dw freefall\n\n\n*-------------------------------\n*  s t e p f a l l\n*-------------------------------\nstepfall ;from #8 (run-11)\n db act,3\n db chx,1,chy,3\n\n db ifwtless\n dw stepfloat\nfall1\n db 102,chx,2,chy,6\n db 103,chx,-1,chy,9\n db 104,chy,12\n db 105,chx,-2\n\n db setfall,1,15\n db goto\n dw freefall\n\n*-------------------------------\n* p a t c h f a l l\n*-------------------------------\npatchfall\n db chx,-1,chy,-3\n db goto\n dw fall1\n\n*-------------------------------\n* s t e p f a l l 2\n*-------------------------------\nstepfall2 ;from #12 (run-15)\n db chx,1\n db goto\n dw stepfall\n\n*-------------------------------\n*  s t e p f l o a t\n*-------------------------------\nstepfloat\n db 102,chx,2,chy,3\n db 103,chx,-1,chy,4\n db 104,chy,5\n db 105,chx,-2\n\n db setfall,1,6\n db goto\n dw freefall\n\n*-------------------------------\n*  j u m p  f a l l\n*-------------------------------\njumpfall ;from standjump-18\n db act,3\n db chx,1,chy,3\n db 102,chx,2,chy,6\n db 103,chx,1,chy,9\n db 104,chx,2,chy,12\n db 105\n\n db setfall,2,15\n db goto\n dw freefall\n\n*-------------------------------\n*  r u n n i n g   j u m p   f a l l\n*-------------------------------\nrjumpfall ;from runjump-43\n db act,3\n db chx,1,chy,3\n db 102,chx,3,chy,6\n db 103,chx,2,chy,9\n db 104,chx,3,chy,12\n db 105\n\n db setfall,3,15\n db goto\n dw freefall\n\n*-------------------------------\n*  j u m p h a n g\n*-------------------------------\n;Med: DX = 0\njumphangMed\n db act,1\n db 67,68,69,70,71,72,73,74,75,76,77\n db act,2\n db 78,79,80\n db goto\n dw hang\n\n;Long: DX = +4\njumphangLong\n db act,1\n db 67,68,69,70,71,72,73,74,75,76,77\n db act,2\n db chx,1,78\n db chx,2,79\n db chx,1,80\n\n db goto\n dw hang\n\n*-------------------------------\n* j u m p b a c k h a n g\n*-------------------------------\njumpbackhang\n db act,1\n db 67,68,69,70,71,72,73,74,75,76\n db chx,-1,77\n db act,2\n db chx,-2,78\n db chx,-1,79\n db chx,-1,80\n\n db goto\n dw hang\n\n*-------------------------------\n*  h a n g\n*-------------------------------\nhang\n db act,2\n; db jaru\n db 91\nhang1\n db 90,89,88,87,87,87,88,89,90,91,92,93,94,95\n db 96,97,98,99,97,96,95,94,93,92\n db 91,90,89,88,87,88,89,90,91,92,93,94,95,96\n db 95,94,93,92\n db goto\n dw hangdrop\n\n*-------------------------------\n*  h a n g s t r a i g h t\n*-------------------------------\nhangstraight\n db act,6\n db tap,2\n db 92,93,93,92,92\n:loop db 91\n db goto\n dw :loop\n\n*-------------------------------\n*  c l i m b f a i l\n*-------------------------------\nclimbfail\n db 135\n db 136\n db 137,137\n db 138,138,138,138\n db 137,136,135\n db chx,-7\n\n db goto\n dw hangdrop\n\n*-------------------------------\n*  c l i m b d o w n\n*-------------------------------\nclimbdown\n db act,1\n\n db 148\n db 145,144,143,142,141\n\n db chx,-5\n db chy,63\n db down\n db act,3 ;to prevent a cut to scrn above\n\n db 140,138,136\n db 91\n db goto\n dw hang1\n\n*-------------------------------\n*  c l i m b u p\n*-------------------------------\nclimbup\n db act,1\n\n db 135\n db 136\n db 137\n db 138\n db 139\n db 140\n\n db chx,5\n db chy,-63\n db up\n\n db 141\n db 142\n db 143\n db 144\n db 145\n db 146\n db 147\n db  148\n db act,5 ;to clr flags\n db 149\n db act,1\n\n db 118,119\n db chx,1\n db goto\n dw stand\n\n*-------------------------------\n*  h a n g d r o p\n*-------------------------------\nhangdrop ;1/2 story\n\n db act,0 ;NOTE -- hangdrop is an action relating\n;to the ground, not to the ledge\n db 81,82\n db act,5 ;to zero clrflags\n db 83\n db act,1\n db jard,tap,0\n db 84,85\n db chx,3\n db goto\n dw stand\n\n*-------------------------------\n*  h a n g f a l l\n*-------------------------------\nhangfall ;1/2 story\n\n db act,3\n db 81,chy,6\n db 81,chy,9\n db 81,chy,12\n db chx,2\n\n db setfall,0,12\n db goto\n dw freefall\n\n*-------------------------------\n*  f r e e f a l l\n*-------------------------------\nfreefall\n db act,4\n:loop db 106\n db goto\n dw :loop\n\n*-------------------------------\n*  r u n s t o p\n*-------------------------------\nrunstop\n db act,1\n db 53,chx,2\n db tap,1,54,chx,7\n db 55\n db tap,1,56,chx,2\n db 49,chx,-2\n db 50,51,52\n db goto\n dw stand\n\n*-------------------------------\n*  j u m p  u p  (& touch ceiling)\n*-------------------------------\njumpup\n db act,1\n db 67,68,69,70,71,72,73,74,75,76,77,78\n db act,0 ;for cropchar\n db jaru,79\n\n db goto\n dw hangdrop\n\n*-------------------------------\n*  h i g h j u m p  (no ceiling above)\n*-------------------------------\nhighjump\n db act,1\n db 67,68,69,70,71,72,73,74,75,76,77,78\n db 79,chy,-4\n db 79,chy,-2\n db 79\n db 79,chy,2\n db 79,chy,4\n db goto\n dw hangdrop\n\n*-------------------------------\n*  s u p e r h i j u m p  (when weightless)\n*-------------------------------\nsuperhijump\n db 67,68,69,70,71,72,73,74,75,76\n db chy,-1,77\n db chy,-3,78\n db chy,-4,79\n db chy,-10,79\n db chy,-9,79\n db chy,-8,79\n db chy,-7,79\n db chy,-6,79\n db chy,-5,79\n db chy,-4,79\n db chy,-3,79\n db chy,-2,79\n db chy,-2,79\n db chy,-1,79\n db chy,-1,79\n db chy,-1,79\n db 79,79,79\n db chy,1,79\n db chy,1,79\n db chy,2,79\n db chy,2,79\n db chy,3,79\n db chy,4,79\n db chy,5,79\n db chy,6,79\n\n db setfall,0,6\n db goto\n dw freefall\n\n*-------------------------------\n*  f a l l  h a n g\n*-------------------------------\nfallhang\n db act,3\n db 80\n db tap,1\n db goto\n dw hang\n\n*-------------------------------\n*  b u m p\n*-------------------------------\nbump\n db act,5\n db chx,-4\n\n db 50,51,52\n db goto\n dw stand\n\n*-------------------------------\n*  b u m p f a l l\n*-------------------------------\nbumpfall\n db act,5\n db chx,1,chy,3\n\n db ifwtless\n dw bumpfloat\n\n db 102,chx,2,chy,6\n db 103,chx,-1,chy,9\n db 104,chy,12\n db 105,chx,-2\n\n db setfall,0,15\n db goto\n dw freefall\n\n*-------------------------------\n*  b u m p f l o a t\n*-------------------------------\nbumpfloat\n db 102,chx,2,chy,3\n db 103,chx,-1,chy,4\n db 104,chy,5\n db 105,chx,-2\n\n db setfall,0,6\n db goto\n dw freefall\n\n*-------------------------------\n* h a r d   b u m p\n*-------------------------------\nhardbump\n db act,5\n\n db chx,-1,chy,-4,102\n db chx,-1,chy,3 ;,104\n db chx,-3,chy,1\n\n db jard\n db chx,1\n db tap,1\n db 107,chx,2\n db 108\n db tap,1\n\n db 109\n db goto\n dw standup\n\n*-------------------------------\n*  t e s t   f o o t\n*-------------------------------\ntestfoot\n db 121,chx,1\n db 122\n db 123,chx,2\n db 124,chx,4\n db 125,chx,3\n db 126\n\n db chx,-4,86\n db tap,1,jard\n db chx,-4,116\n db chx,-2\n db 117,118,119\n db goto\n dw stand\n\n*-------------------------------\n*  s t e p   b a c k\n*-------------------------------\nstepback\n db chx,-5\n db goto\n dw stand\n\n*-------------------------------\n*  s t e p   f o r w a r d\n*\n*  (1 - 14 pixels)\n*-------------------------------\nfullstep\nstep14\n db act,1\n db 121,chx,1\n db 122,chx,1\n db 123,chx,3\n db 124,chx,4\n db 125,chx,3\n db 126,chx,-1\n\n db chx,3\n\n db 127,128,129,130,131,132\n db goto\n dw stand\n\nstep13\n db act,1\n db 121,chx,1\n db 122,chx,1\n db 123,chx,3\n db 124,chx,4\n db 125,chx,3\n db 126,chx,-1\n\n db chx,2\n\n db 127,128,129,130,131,132\n db goto\n dw stand\n\nstep12\n db act,1\n db 121,chx,1\n db 122,chx,1\n db 123,chx,3\n db 124,chx,4\n db 125,chx,3\n db 126,chx,-1\n\n db chx,1\n\n db 127,128,129,130,131,132\n db goto\n dw stand\n\nstep11 ;corresponds directly to filmed sequence\n db act,1\n db 121,chx,1\n db 122,chx,1\n db 123,chx,3\n db 124,chx,4\n db 125,chx,3\n db 126,chx,-1\n db 127,128,129,130,131,132\n db goto\n dw stand\n\nstep10\n db act,1\n db 121,chx,1\nstep10a db 122,chx,1\n db 123,chx,3\n db 124,chx,4\n db 125,chx,3\n db 126,chx,-2\n db 128,129,130,131,132\n db goto\n dw stand\n\nstep9\n db act,1\n db 121\n db goto\n dw step10a\n\nstep8\n db act,1\n db 121,chx,1\n db 122,chx,1\n db 123,chx,3\n db 124,chx,4\n db 125,chx,-1\n db 127,128,129,130,131,132\n db goto\n dw stand\n\nstep7\n db act,1\n db 121,chx,1\n db 122,chx,1\n db 123,chx,3\n db 124,chx,2\n\n db 129,130,131,132\n db goto\n dw stand\n\nstep6\n db act,1\n db 121,chx,1\n db 122,chx,1\n db 123,chx,2\n db 124,chx,2\n\n db 129,130,131,132\n db goto\n dw stand\n\nstep5\n db act,1\n db 121,chx,1\n db 122,chx,1\n db 123,chx,2\n db 124,chx,1\n\n db 129,130,131,132\n db goto\n dw stand\n\nstep4\n db act,1\n db 121,chx,1\n db 122,chx,1\n db 123,chx,2\n\n db 131,132\n db goto\n dw stand\n\nstep3\n db act,1\n db 121,chx,1\n db 122,chx,1\n db 123,chx,1\n\n db 131,132\n db goto\n dw stand\n\nstep2\n db act,1\n db 121,chx,1\n db 122,chx,1\n db 132\n db goto\n dw stand\n\nstep1\n db act,1\n db 121,chx,1\n db 132\n db goto\n dw stand\n\n*-------------------------------\n*  s t o o p\n*-------------------------------\nstoop\n db act,1\n\n db chx,1\n db 107,chx,2\n db 108\n\n:crouch db 109\n db goto\n dw :crouch\n\n*-------------------------------\n*  s t a n d u p\n*-------------------------------\nstandup\n db act,5\n db chx,1,110\n db 111,chx,2\n db 112\n db 113,chx,1\n db 114\n db 115\n db 116,chx,-4\n db 117,118,119\n\n db goto\n dw stand\n\n*-------------------------------\n*  p i c k  u p  s w o r d\n*-------------------------------\npickupsword\n db act,1\n db effect,1\n db 229,229,229,229,229,229\n db 230,231,232\n\n db goto\n dw resheathe\n\n*-------------------------------\n*  r e s h e a t h e\n*-------------------------------\nresheathe\n db act,1\n db chx,-5\n db 233,234,235\n db 236,237,238,239,240,133,133\n db 134,134,134\n db 48,chx,1\n db 49,chx,-2\n db act,5,50,act,1\n db 51,52\n db goto\n dw stand\n\n*-------------------------------\n*  f a s t   s h e a t h e\n*-------------------------------\nfastsheathe\n db act,1\n db chx,-5\n db 234,236,238,240,134\n db chx,-1\n db goto\n dw stand\n\n*-------------------------------\n*  d r i n k   p o t i o n\n*-------------------------------\ndrinkpotion\n db act,1\n db chx,4\n db 191,192,193,194,195,196,197,198,199,200\n db 201,202,203,204\n;if pressed for memory try\n;cutting frames 202/204 or 201/203\n db 205,205,205\n db effect,1\n db 205,205\n db 201,198\n\n db chx,-4\n db goto\n dw stand\n\n*-------------------------------\n*  s o f t   l a n d\n*-------------------------------\nsoftland ;1 story\n db act,5\n\n db jard\n db chx,1\n db tap,1,107,chx,2\n db 108\n db tap,1\n\n db act,1\n:crouch db 109\n db goto\n dw :crouch\n\n*-------------------------------\n*  l a n d   r u n\n*-------------------------------\nlandrun\n db act,1\n db chy,-2,chx,1\n db 107,chx,2\n db 108\n db 109,chx,1\n db 110\n db 111,chx,2\n db 112\n db 113,chx,1,chy,1\n db 114,chy,1\n db 115,chx,-2\n\n db goto\n dw runstt4\n\n*-------------------------------\n*  m e d i u m   l a n d\n*-------------------------------\nmedland ;1 1/2 - 2 stories\n db act,5\n db jard\n db chy,-2,chx,1\n; db 107\n db chx,2\n db 108\n db 109,109,109,109,109,109,109,109,109\n db 109,109,109,109,109,109,109,109,109\n db 109,109,109,109,109,109,109,109,109\n db 109,109,chx,1\n db 110,110,110\n db 111,chx,2\n db 112\n db 113,chx,1,chy,1\n db 114,chy,1\n db 115\n db 116,chx,-4\n db 117\n db 118\n db 119\n db goto\n dw stand\n\n*-------------------------------\n*  h a r d   l a n d   (Splat!)\n*-------------------------------\nhardland ;> 2 stories\n db act,5\n db jard\n db chy,-2,chx,3\n db 185\n db die\n\n:dead db 185\n db goto\n dw :dead\n\n*-------------------------------\n*  s t a b k i l l\n*-------------------------------\nstabkill\n db act,5\n db goto\n dw dropdead\n\n*-------------------------------\n*  d r o p d e a d\n*-------------------------------\ndropdead\n db act,1\n db die\n\n db 179\n db 180\n db 181\n db 182,chx,1\n db 183,chx,-4\n:dead db 185\n db goto\n dw :dead\n\n*-------------------------------\n*  i m p a l e\n*-------------------------------\nimpale\n db act,1\n db jard\n\n db chx,4\n db 177\n db die\n\n:dead db 177\n db goto\n dw :dead\n\n*-------------------------------\n*  h a l v e\n*-------------------------------\nhalve\n db act,1\n\n db 178\n db die\n\n:dead db 178\n db goto\n dw :dead\n\n*-------------------------------\n*  c r u s h\n*-------------------------------\ncrush\n db goto\n dw medland\n\n*-------------------------------\n*  d e a d f a l l\n*-------------------------------\ndeadfall\n db setfall,0,0\n db act,4\n:loop db 185\n db goto\n dw :loop\n\n*-------------------------------\n*  c l i m b   s t a i r s\n*-------------------------------\n;facing L\nclimbstairs\n db act,5\n db chx,-5,chy,-1\n db tap,1,217\n db 218\n db 219,chx,1\n db 220,chx,-4,chy,-3\n db tap,1,221,chx,-4,chy,-2\n db 222,222,chx,-2,chy,-3\n db 223,223,chx,-3,chy,-8\n db tap,1,224,224,chx,-1,chy,-1\n db 225,225,chx,-3,chy,-4\n db 226,226,chx,-1,chy,-5\n db tap,1,227,227,chx,-2,chy,-1\n db 228,228\n db 0,tap,1\n db 0,0,0,0,tap,1\n db 0,0,0,0,tap,1\n db 0,0,0,0,tap,1\n\n do 0\n db chx,10,chy,28\n db goto\n dw stand\n fin\n\n db nextlevel\n:loop db 0,goto\n dw :loop\n\n*-------------------------------\n* Vizier: stand\n*-------------------------------\nVstand\n db 54,goto\n dw Vstand\n\n*-------------------------------\n* Vizier: raise arms\n*-------------------------------\nVraise\n db 85,67,67,67,67,67,67\n db 68,69,70,71,72,73,74,75,83,84\n:loop db 76\n db goto\n dw :loop\n\n*-------------------------------\n* Vizier: walk\n*-------------------------------\nVwalk\n db chx,1\nVwalk1 db 48,chx,2\nVwalk2 db 49,chx,6\n db 50,chx,1\n db 51,chx,-1\n db 52,chx,1\n db 53,chx,1\n db goto\n dw Vwalk1\n\n*-------------------------------\n* Vizier: stop\n*-------------------------------\nVstop\n db chx,1\n db 55,56\n db goto\n dw Vstand\n\n*-------------------------------\n* Vizier: lower arms, turn & exit\n*-------------------------------\nVexit\n db 77,78,79,80,81,82\n db chx,1\n db 54,54,54,54,54,54 ;standing\n db 57\n db 58\n db 59\n db 60\n db 61,chx,2\n db 62,chx,-1\n db 63,chx,-3\n db 64\n db 65,chx,-1\n db 66\n db aboutface,chx,16\n db chx,3\n db goto\n dw Vwalk2\n\n*-------------------------------\n* Princess: stand\n*-------------------------------\nPstand\n db 11,goto\n dw Pstand\n\n*-------------------------------\n* Princess: alert\n*-------------------------------\nPalert\n db 2,3,4,5,6,7,8,9\n db aboutface,chx,9\n db 11,goto\n dw  Pstand\n\n*-------------------------------\n* Princess: step back\n*-------------------------------\nPback\n db aboutface,chx,11\n db 12\n db chx,1,13\n db chx,1,14\n db chx,3,15\n db chx,1,16\n:loop db 17\n db goto\n dw :loop\n\n*-------------------------------\n* Princess lying on cushions\n*-------------------------------\nPlie\n db 19\n db goto\n dw Plie\n\n*-------------------------------\n* Princess: waiting\n*-------------------------------\nPwaiting\n:loop db 20\n db goto\n dw :loop\n\n*-------------------------------\n* Princess: embrace\n*-------------------------------\nPembrace\n db 21\n db chx,1,22\n db 23\n db 24\n db chx,1,25\n db chx,-3,26\n db chx,-2,27\n db chx,-4,28\n db chx,-3,29\n db chx,-2,30\n db chx,-3,31\n db chx,-1,32\n:loop db 33\n db goto\n dw :loop\n\n*-------------------------------\n* Princess: stroke mouse\n*-------------------------------\nPstroke\n:loop db 37\n db goto\n dw :loop\n\n*-------------------------------\n* Princess: rise\n*-------------------------------\nPrise\n db 37,38,39,40,41,42,43,44,45,46,47\n db aboutface,chx,13\n:loop db 11,goto\n dw :loop\n\n*-------------------------------\n* Princess: crouch & stroke mouse\n*-------------------------------\nPcrouch\n db 11,11\n db aboutface,chx,13\n db 47,46,45,44,43,42,41,40,39,38,37\n db 36,36,36,35,35,35\n db 34,34,34,34,34,34,34\n db 35,35,36,36,36,35,35,35\n db 34,34,34,34,34,34,34\n db 35,35,36,36,36,35,35,35\n db 34,34,34,34,34,34,34,34,34\n db 35,35,35\n:loop db 36\n db goto\n dw :loop\n\n*-------------------------------\n* Princess: slump shoulders\n*-------------------------------\nPslump\n db 1\n:loop db 18\n db goto\n dw :loop\n\n*-------------------------------\n* Mouse: scurry\n*-------------------------------\nMscurry\n db act,1\nMscurry1\n:loop db 186,chx,5\n db 186,chx,3\n db 187,chx,4\n db goto\n dw :loop\n\n*-------------------------------\n* Mouse: stop\n*-------------------------------\nMstop\n:loop db 186\n db goto\n dw :loop\n\n*-------------------------------\n* Mouse: raise head\n*-------------------------------\nMraise\n:loop db 188\n db goto\n dw :loop\n\n*-------------------------------\n* Mouse: leave\n*-------------------------------\nMleave\n db act,0\n db 186,186,186\n db 188,188,188,188,188,188,188,188\n db aboutface,chx,8\n db goto\n dw Mscurry1\n\n*-------------------------------\n* Mouse: climb\n*-------------------------------\nMclimb\n db 186\n db goto\n dw Mclimb\n\n*-------------------------------\n lst\n ds 1\n usr $a9,15,$800,*-org\n lst off\n"
  },
  {
    "path": "04 Support/MakeDisk/S/SHSTUFF.S",
    "content": "\nstlx mac bank;addr\n hex 9f\n da ]2\n db ]1\n <<<\nldlx mac bank;addr\n hex bf\n da ]2\n db ]1\n <<<\n\n**************************************************\n**************************************************\n**************************************************\n\n clc\n xce\n\n sep $30 ;axy\n\n lda #%00011110\n sta $C035 ;shadow reg\n lda #$41\n sta $C029 ;SH reg\n\n rep $30 ;AXY\n\n* Clear scan line control byte table\n* and palette 0 to black\n\n lda #$0000\n ldx #$011E\n:scbclr dex\n dex\n stlx $E1;$9D00\n bne :scbclr\n\n* Now move data over\n\n ldx #$2000\n ldy #$2000\n lda #32000-1\n phb\n mvn 1,$E1\n plb\n\n* Turn on Super Hires mode\n\n sep $20\n lda #$C1\n sta $C029\n rep $20\n\n* Move desired palette over to PalFade area\n\n ldx #$9E00 ;aux mem\n ldy #new_palette\n lda #32-1\n phb\n mvn 1,0 ;aux to main\n plb\n\n* Now fade in the picture\n\n jsr PalFade\n\n* Do something here... LIKE play some music\n\n* Clear the \"destination\" palette back to zero\n\n ldx #32\n lda #$0000\n:palclr dex\n dex\n sta new_palette,x\n bne :palclr\n\n* Now fade out\n\n jsr PalFade\n\n* All done...\n\n bra *\n\n*------------------------------------------------- PalFade\n*\n* Given current palette at $E19E00.1F, fade to\n* new palette given in new_palette\n*\n\nnew_palette ds 32\n\nPalFade dum 0\n:green ds 1\n:blue ds 1\n dend\n\n sep $30\n\n bit $C019\n bmi *-3\n\n ldy #16\n\n:fadein ldx #3\n\n:fadein2 bit $C019\n bpl *-3\n\n bit $C019\n bmi *-3\n\n dex\n bne :fadein2\n\n ldx #30\n:palloop ldlx $E1;$9E01\n cmp new_palette+1,x\n beq :red_ok\n inc\n blt :red_ok\n dec\n dec\n\n:red_ok stlx $E1;$9E01\n\n lda new_palette,x\n and #$F0\n sta :green\n\n ldlx $E1;$9E00\n and #$F0\n cmp :green\n beq :green_ok\n blt :grn_add\n sbc #$20\n:grn_add clc\n adc #$10\n\n:green_ok sta :green\n\n lda new_palette,x\n and #$0F\n sta :blue\n\n ldlx $E1;$9E00\n and #$0F\n cmp :blue\n beq :blue_ok\n inc\n blt :blue_ok\n dec\n dec\n\n:blue_ok ora :green\n stlx $E1;$9E00\n\n dex\n dex\n bpl :palloop\n\n dey\n bpl :fadein\n\n rep $30\n\n rts\n\n*-------------------------------------------------\n"
  },
  {
    "path": "04 Support/MakeDisk/S/SOUND.S",
    "content": "* sound\norg = $ea00\n lst off\n*-------------------------------\n*\n*   S  O  U  N  D\n*\n*-------------------------------\n org org\n\n jmp PLAYBACK\n\n*-------------------------------\nsavex ds 1\n\nspkr = $c030\n\n*-------------------------------\n put soundnames\n put gameeq\n put eq\n\n*-------------------------------\n*\n*  L O O K U P\n*\n*  Sound routine lookup table\n*\n*-------------------------------\nlookup\n\n:0 dw DoPlateDown\n:1 dw DoPlateUp\n:2 dw DoGateDown\n:3 dw DoSpecialKey1\n:4 dw DoSpecialKey2\n:5 dw DoSplat\n:6 dw DoMirrorCrack\n:7 dw DoLooseCrash\n:8 dw DoGotKey\n:9 dw DoFootstep\n:10 dw DoRaisingExit\n:11 dw DoRaisingGate\n:12 dw DoLowerGate\n:13 dw DoSmackWall\n:14 dw DoImpaled\n:15 dw DoGateSlam\n:16 dw DoFlashMsg\n:17 dw DoSwordClash1\n:18 dw DoSwordClash2\n:19 dw DoJawsClash\n\nendlook\n\nmaxaddr = endlook-lookup\n\n*-------------------------------\n*\n*  Z E R O S O U N D\n*\n*  Zero sound table\n*\n*-------------------------------\nZEROSOUND\n lda #0 ;# sounds in table\n sta soundtable\n rts\n\n*-------------------------------\n*\n*  A D D S O U N D\n*\n*  Add sound to sound table\n*  (preserve registers)\n*\n*  In: A = sound #\n*\n*-------------------------------\nADDSOUND\n stx savex\n\n ldx soundtable\n cpx #maxsfx\n bcs :rts ;sound table full\n\n inx\n sta soundtable,x\n stx soundtable ;# sounds in table\n\n:rts ldx savex\n rts\n\n*-------------------------------\n*\n*  P L A Y B A C K\n*\n*  Playback all sounds listed in sound table\n*\n*-------------------------------\nPLAYBACK\n lda soundon\n beq :rts ;sound switched off?\n\n ldx soundtable\n beq :rts ;sound table empty?\n\n:loop lda soundtable,x\n\n stx savex\n\n jsr makesound ;make sound #A\n;(may destroy registers)\n ldx savex\n\n dex\n bne :loop\n\n:rts rts\n\n*-------------------------------\n*\n*  M A K E S O U N D\n*\n*  In: A = sound # (0-127)\n*\n*-------------------------------\nmakesound\n asl\n cmp #maxaddr\n bcs :rts ;don't exceed lookup table\n\n tax\n lda lookup,x\n sta :sm+1\n lda lookup+1,x\n sta :sm+2\n\n:sm jmp $ffff ;self-modifying code\n\n:rts rts\n\n*-------------------------------\n*\n*  S O U N D   R O U T I N E S\n*\n*-------------------------------\n* Kid steps on pressplate\n\nDoPlateDown\n ldy #70\n ldx #0\n lda #4\n jmp tone\n\n*-------------------------------\n* Pressplate pops back up\n\nDoPlateUp\n ldy #90\n ldx #0\n lda #4\n jmp tone\n\n*-------------------------------\n* Gate hits stone floor with an ominous CLANG\n\nDoGateDown\n ldy #70\n ldx #0\n lda #4\n jmp tone\n\n*-------------------------------\n* Jaws clash\n\nDoJawsClash\n ldy #10\n ldx #0\n lda #50\n jmp tone\n\n*-------------------------------\n* Acknowledge special keypress\n\nSK1Pitch = 15\nSK1Dur = 50\n\nSK2Pitch = 40\nSK2Dur = 50\n\nDoSpecialKey1\nDoSwordClash1\nDoSwordClash2\n ldy #SK1Pitch\n ldx #>SK1Pitch\n lda #SK1Dur\n jmp tone\n\nDoSpecialKey2\n ldy #SK2Pitch\n ldx #>SK2Pitch\n lda #SK2Dur\n jmp tone\n\n*-------------------------------\n* Splat\n\nSplatPitch = 1000\nSplatDur = 3\n\nDoSplat\n ldy #SplatPitch\n ldx #>SplatPitch\n lda #SplatDur\n jmp tone\n\n*-------------------------------\n* Mirror Crack\n\nDoMirrorCrack\n jmp DoSplat\n rts\n\n*-------------------------------\n* Loose Floor Crash\n\nDoLooseCrash\n jmp DoSplat\n\n*-------------------------------\n* Flash message\n\n]HiPitch = 100\n]HiDur = 25\n]LoPitch = 500\n]LoDur = 15\n\nDoGotKey\nDoFlashMsg\n lda #2\n:loop pha\n\n ldy #]LoPitch\n ldx #>]LoPitch\n lda #]LoDur\n jsr tone\n\n ldy #]HiPitch\n ldx #>]HiPitch\n lda #]HiDur\n jsr tone\n\n pla\n sec\n sbc #1\n bne :loop\n\n rts\n\n*-------------------------------\n* Footstep\n\nDoFootstep\n ldy #35\n ldx #0\n lda #3\n jmp tone\n\n*-------------------------------\n* Raising Exit\n\nDoRaisingExit\n ldy #40\n ldx #0\n lda #6\n jmp tone\n\n*-------------------------------\n* Raising Gate\n\nDoRaisingGate\n ldy #20\n ldx #0\n lda #2\n jmp tone\n\n*-------------------------------\n* Lowering Gate\n\nDoLowerGate\n ldy #7\n ldx #0\n lda #8\n jmp tone\n\n*-------------------------------\n* Smack Wall\n\nSWPitch = 1000\nSWDur = 3\n\nDoSmackWall\n ldy #SWPitch\n ldx #>SWPitch\n lda #SWDur\n jmp tone\n\n]rts rts\n\n*-------------------------------\n* Impaled\n\nDoImpaled\n jmp DoSmackWall\n\n*-------------------------------\n* Gate Slam\n\nDoGateSlam\n jmp DoSmackWall\n\n\n*-------------------------------\n*\n*  T O N E\n*\n*  In: y-x = pitch lo-hi\n*      a = duration\n*\n*-------------------------------\ntone\n sty :pitch\n stx :pitch+1\n\n:outloop bit spkr\n\n ldx #0\n:midloop ldy #0\n\n:inloop iny\n cpy :pitch\n bcc :inloop\n\n inx\n cpx :pitch+1\n bcc :midloop\n\n sec\n sbc #1\n bne :outloop\n\n rts\n\n:pitch ds 2\n\n*-------------------------------\n lst\neof ds 1\n usr $a9,20,$e00,*-org\n lst off\n"
  },
  {
    "path": "04 Support/MakeDisk/S/SOUNDNAMES.S",
    "content": " tr on\n lst off\n\n* sound names\n\nPlateDown = 0\nPlateUp = 1\nGateDown = 2\nSpecialKey1 = 3\nSpecialKey2 = 4\nSplat = 5\nMirrorCrack = 6\nLooseCrash = 7\nGotKey = 8\nFootstep = 9\nRaisingExit = 10\nRaisingGate = 11\nLoweringGate = 12\nSmackWall = 13\nImpaled = 14\nGateSlam = 15\nFlashMsg = 16\nSwordClash1 = 17\nSwordClash2 = 18\nJawsClash = 19\n\n*-------------------------------\n* game music\n\ns_Accid = 1\ns_Heroic = 2\ns_Danger = 3\ns_Sword = 4\ns_Rejoin = 5\ns_Shadow = 6\ns_Vict = 7\ns_Stairs = 8\ns_Upstairs = 9\ns_Jaffar = 10\ns_Potion = 11\ns_ShortPot = 12\ns_Timer = 13\ns_Tragic = 14\ns_Embrace = 15\ns_Heartbeat = 16\n\n* title music\n\ns_Princess = 7\ns_Squeek = 8\ns_Vizier = 9\ns_Buildup = 10\ns_Magic = 11\ns_StTimer = 12\n\n lst off\n"
  },
  {
    "path": "04 Support/MakeDisk/S/SPECIALK.S",
    "content": "* specialk\nEditorDisk = 0\nFinalDisk = 0 ;removes all cheat keys\nDebugKeys = 0\n tr on\n lst off\norg = $d900\n*-------------------------------\n*\n*  PRINCE OF PERSIA\n*  Copyright 1989 Jordan Mechner\n*\n*-------------------------------\n org org\n\n jmp KEYS\n jmp CLRJSTK\n jmp ZEROSOUND\n jmp ADDSOUND\n jmp FACEJSTK\n\n jmp SAVESELECT\n jmp LOADSELECT\n jmp SAVEDESEL\n jmp LOADDESEL\n jmp INITINPUT\n\n jmp DEMOKEYS\n jmp LISTTORCHES\n jmp BURN\n jmp GETMINLEFT\n jmp KEEPTIME\n\n jmp SHORTENTIME\n jmp CUESONG\n jmp DoSaveGame\n jmp LoadLevelX\n jmp decstr\n\n jmp DLOOP\n jmp STROBE\n\n*-------------------------------\n lst\n put eq\n lst\n put gameeq\n lst\n put soundnames\n lst\n put movedata\n lst off\n\n*-------------------------------\ninitAMtimer = 10 ;antimatter cheat key timer\n\n dum locals\n]temp ds 1\n]count ds 2\n dend\n\nPOPside1 = $a9\nPOPside2 = $ad\n\nFirstSideB = 3\n\n*-------------------------------\nmin = 725 ;# frames per \"minute\"\n  ;(actual frame rate approx. 11 fps)\nsec = min/60\nt = 60 ;game time limit\n\n*-------------------------------\n*  Key equates\n\nCTRL = $60\nESC = $9b\nDELETE = $7f\nSHIFT = $20\n\n*  Player control keys\n\nkleft = \"j\"\nkdown = \"k\"\nkright = \"l\"\nkupleft = \"u\"\nkup = \"i\"\nkupright = \"o\"\n\n*  Special keys (legit)\n\nkfreeze = ESC\nkrestart = \"r\"-CTRL\nkabort = \"a\"-CTRL\nksound = \"s\"-CTRL\nkmusic = \"n\"-CTRL\nksetkbd = \"k\"-CTRL\nksetjstk = \"j\"-CTRL\nksavegame = \"g\"-CTRL\nkversion = \"v\"-CTRL\nkreturn = \"m\"-CTRL ;editor disk only\nkshowtime = \" \"\nkflipx = \"x\"-CTRL\nkflipy = \"y\"-CTRL\n\n*  Special keys (development)\n\nknextlevel = \")\"\nkclean = \"m\"-CTRL\nkscreendump = \"@\"\nkreload = \"c\"-CTRL\nkreboot = \"z\"-CTRL\nkforceredraw = \"f\"-CTRL\nkblackout = \"B\"\nkspeedup = \"]\"\nkslowdown = \"[\"\nkantimatter = \"q\"-CTRL\nkupone = \"e\"-CTRL\nkautoman = \"A\"\nkincstr = \"S\"\nkdecstr = \"D\"\nkincmax = \"F\"\nkzapgard = \"Z\"\nkplayback = \"p\"-CTRL\nkskip5 = \"+\"\nktimeback = \"<\"\nktimefwd = \">\"\nktimeup = \"M\"\nkerasegame = \"*\"\n\n*-------------------------------\n*\n*  K E Y S\n*\n*  Detect & respond to keypresses\n*\n*-------------------------------\nKEYS\n lda SINGSTEP\n beq KEYS1\n\nfreeze lda $C000\n bpl freeze\n\n cmp #kfreeze\n beq :fradv\n\n ldx #0\n stx SINGSTEP\n\n lda #0 ;ignore the keypress that breaks ESC\n beq KEYS2\n\n:fradv lda #1\n sta SINGSTEP\n sta $C010\n sta keypress\n]rts rts\n\nKEYS1 lda $C000 ;ASCII value of last keypress\n ;(Hibit is keyboard strobe)\nKEYS2 sta keypress\n\n lda $C010 ;Hibit is any-key-down flag\n ;(Clears keyboard strobe)\n sta keydown\n\n jsr KREAD ;Keyboard control\n\n lda keypress\n bpl ]rts\n\n do DebugKeys\n\n ldx develment\n beq :nogo ;GO codes work only in cheat mode\n cmp #\"0\"\n bcc :nogo\n cmp #\"9\"+1\n bcs :nogo\n\n* We have a keypress 0-9\n* Check if it follows a \"GO\" key sequence\n\n lda #C_go0\n ldx #>C_go0\n jsr checkcode\n bne :nogo0\n lda #0 ;1st digit\n:golevel clc\n adc keypress\n sec\n sbc #\"0\" ;2-key value\n\n cmp #4 ;only levels 4-12 accessible\n bcc ]rts\n cmp #13\n bcs ]rts\n sta NextLevel\n jsr shortentime\n]rts rts\n\n:nogo0 lda #C_go1\n ldx #>C_go1\n jsr checkcode\n bne :nogo\n lda #10\n bne :golevel\n\n fin\n\n* Normal key handling\n\n:nogo lda keypress\n jsr addkey ;Add key to kbd buffer\n\n do FinalDisk\n else\n\n* Set development flag?\n\n lda #C_devel\n ldx #>C_devel\n jsr checkcode\n bne :1\n lda #1\n sta develment\n jmp gtone\n:1\n fin\n\n* Skip to next level?\n\n lda #C_skip\n ldx #>C_skip\n jsr checkcode\n bne :2\n lda #3 ;up to level 4\n ldx develment\n beq :limit\n lda #11 ;or level 12 in cheat mode\n:limit cmp level\n bcc :2\n inc NextLevel\n\n jsr shortentime\n:2\n fin\n\n* Special keys\n\n jsr LegitKeys\n\n jsr DevelKeys\n\n jsr TempDevel\n\n]rts rts\n\n*-------------------------------\n*\n*  L E G I T   K E Y S\n*\n*-------------------------------\nLegitKeys\n lda keypress\n cmp #kfreeze\n bne :1\n jmp freeze\n\n:1 cmp #krestart\n bne :1a\n jmp goattract ;in topctrl\n\n:1a cmp #kabort\n bne :1b\n jmp restart\n\n:1b do EditorDisk\n cmp #kreturn\n bne :2\n jmp gobuild\n fin\n\n* Keyboard/joystick\n\n:2 cmp #ksetkbd\n bne :30\n lda #0\n sta joyon\n]sk1 jmp gtone\n\n:30 cmp #ksetjstk\n bne :31\n jsr setcenter\n jmp ]sk1\n\n:31 cmp #kflipx\n bne :32\n lda jhoriz\n eor #1\n sta jhoriz\n bpl ]sk1\n\n:32 cmp #kflipy\n bne :3\n lda jvert\n eor #1\n sta jvert\n bpl ]sk1\n\n* Sound on/off\n\n:3 cmp #ksound\n bne :16\n]togsound\n jsr zerosound\n lda soundon\n eor #1\n sta soundon\n bne ]sk1\n rts\n\n:16 cmp #kmusic\n bne :26\n lda musicon\n eor #1\n sta musicon\n bne ]sk1\n rts\n\n:26 cmp #kversion\n bne :17\n jmp dispversion ;display version #\n\n* Save/load game\n\n:17 cmp #ksavegame\n bne :18\n lda level\n sta SavLevel\n jmp DoSaveGame\n\n* Show time left\n\n:18 cmp #kshowtime\n bne :19\n lda #3\n sta timerequest\n rts\n\n:19\n]rts rts\n\n*-------------------------------\n*\n*  D E V E L O P M E N T - O N L Y   K E Y S\n*\n*-------------------------------\nDevelKeys\n lda develment ;development flag\n beq ]rts\n\n jsr checkcodes ;secret codes\n\n lda keypress\n cmp #kclean\n bne :1\n lda #0\n sta develment\n rts\n:1\n]rts rts\n\n*-------------------------------\n* Temp development keys\n* (remove for final version)\n*-------------------------------\nTempDevel\n do DebugKeys\n\n lda develment ;development flag\n beq ]rts\n\n lda keypress\n cmp #kforceredraw\n bne :10\n lda #2\n sta redrawflg\n lda #0\n sta blackflag\n rts\n\n:10 cmp #kblackout\n bne :9\n lda blackflag\n eor #$ff\n sta blackflag\n]rts rts\n\n:9 cmp #kantimatter\n bne :17\n lda #initAMtimer\n sta AMtimer\n rts\n\n:17 cmp #kincstr\n bne :20\n inc ChgKidStr\n inc ChgOppStr\n rts\n\n:20 cmp #kincmax\n bne :36\n jmp boostmeter\n\n:36 cmp #knextlevel\n bne :28\n inc NextLevel\n rts\n\n:28 cmp #kskip5\n bne :30\n lda level\n clc\n adc #5\n sta NextLevel\n rts\n:30\n\n* keys 0-9\n\n lda keypress\n cmp #\"0\"\n bcc :non\n cmp #\"9\"+1\n bcs :non\n sec\n sbc #\"0\"\n sta guardprog\n]sk1 jmp gtone\n\n* non-numeric keys\n\n:non cmp #kreload\n bne :8\n jsr preload\n lda #2\n sta redrawflg\n jsr reload\n jmp postload\n\n* speed up/slow down delay loop\n\n:8 cmp #kspeedup\n bne :13\n lda SPEED\n cmp #5\n bcc :12\n sec\n sbc #4\n sta SPEED\n jmp ]sk1\n:12 lda #1 ;fastest\n sta SPEED\n]rts rts\n\n:13 cmp #kslowdown\n bne :14\n jsr gtone\n lda SPEED\n clc\n adc #4\n sta SPEED\n rts\n\n* Screen dump\n\n:14 cmp #kscreendump\n bne :15\n lda PAGE\n jmp screendump\n\n:15 cmp #kupone\n bne :19\n lda KidY\n sec\n sbc #63 ;BlockHeight\n sta KidY\n dec KidBlockY\n rts\n\n:19 cmp #kdecstr\n bne :21\n dec ChgKidStr\n]rts rts\n\n:21 cmp #kautoman\n bne :23\n lda ManCtrl\n eor #$ff\n sta ManCtrl\n rts\n\n* Change levels\n\n:23\n cmp #kplayback\n bne :24\n lda #1\n sta level\n lda #2\n sta NextLevel\n rts\n\n:24 cmp #ktimeback\n bne :31\n lda #-2\n:chgtime clc\n adc FrameCount+1\n sta FrameCount+1\n rts\n\n:31 cmp #ktimefwd\n bne :32\n lda #2\n bne :chgtime\n\n:32 cmp #kerasegame\n bne :33\n lda #$ff\n sta SavLevel\n jmp DoSaveGame\n\n:33 cmp #ktimeup\n bne :34\n lda #$ff\n sta FrameCount+1\n rts\n\n:34\n fin\n]rts rts\n\n*-------------------------------\n* Temporarily change BBundID to reload code & data from side 1\n\npostload\n]sm lda #$a9\n sta BBundID\n rts\n\npreload\n lda BBundID\n sta ]sm+1\n lda #POPside1\n sta BBundID\n rts\n\n*-------------------------------\n*\n* A D D K E Y\n*\n* In: A = key value\n*\n*-------------------------------\naddkey\n ldx keybufptr ;index to last key entry\n inx\n cpx #keybuflen\n bcc :ok\n ldx #0 ;wrap around\n:ok stx keybufptr\n\n sta keybuf,x\n]rts rts\n\n*-------------------------------\n*\n*  C H E C K   C O D E S\n*\n*  Only work in devel mode\n*\n*-------------------------------\ncheckcodes\n do FinalDisk\n rts\n else\n\n lda #C_boost\n ldx #>C_boost\n jsr checkcode\n bne :1\n jsr boostmeter\n lda MaxKidStr\n sta origstrength\n rts\n\n:1 lda #C_restore\n ldx #>C_restore\n jsr checkcode\n bne :2\n jmp rechargemeter\n\n:2 lda #C_zap2\n ldx #>C_zap2\n jsr checkcode\n bne :3\n;zap guard down to 0\n lda #0\n sec\n sbc OppStrength\n sta ChgOppStr\n rts\n\n:3 lda #C_zap1\n ldx #>C_zap1\n jsr checkcode\n bne :4\n ;zap guard down to 1\n lda #1\n sec\n sbc OppStrength\n sta ChgOppStr\n rts\n\n:4 lda #C_tina\n ldx #>C_tina\n jsr checkcode\n bmi :5\n lda #14\n sta NextLevel\n jsr shortentime\n rts\n:5\n]rts rts\n fin\n\n*-------------------------------\n*\n* Compare keybuf sequence against code sequence\n*\n* In: A-X = code sequence address lo-hi\n* Return A = 0 if it matches, else ff\n*\n*-------------------------------\ncheckcode\n sta :smod+1\n stx :smod+2\n\n ldx keybufptr ;last key entry\n ldy #0 ;last char of code seq\n:loop\n:smod lda $ffff,y ;smod\n beq ]rts ;0 = code seq delimiter\n cmp keybuf,x\n beq :match\n cmp #\"A\" ;alpha?\n bcc :fail\n cmp #\"Z\"+1\n bcs :fail\n ora #$20 ;yes--try LC too\n cmp keybuf,x\n bne :fail\n\n:match iny\n dex\n bpl :loop\n ldx #keybuflen-1 ;wrap around\n bpl :loop\n\n:fail lda #$ff\n]rts rts\n\n*-------------------------------\n*\n* Key sequence codes\n*\n* Use all caps; LC will be accepted too\n*\n*-------------------------------\nC_skip rev \"SKIP\"\n db 0\n\n do FinalDisk\n else\n\nC_devel rev \"POP\"\n db 0\nC_go0 rev \"GO0\"\n db 0\nC_go1 rev \"GO1\"\n db 0\nC_zap2 rev \"ZAP\"\n db 0\nC_boost rev \"BOOST\"\n db 0\nC_restore rev \"R\"\n db 0\nC_zap1 rev \"Z\"\n db 0\nC_tina rev \"TINA\"\n db 0\n\n fin\n\n*-------------------------------\n*\n*  K R E A D\n*\n*  Keyboard player control\n*\n*  (Register a keypress for as long as key is held down)\n*\n*  Out: kbdX, kbdY\n*\n*-------------------------------\nKREAD\n lda #0\n sta kbdX\n sta kbdY\n\n lda keypress\n bmi :cont ;fresh press\n\n ldx keydown\n bpl ]rts ;No fresh press & no key down\n\n ora #$80 ;stale press, key still down\n:cont\n cmp #kleft\n beq :left\n cmp #kleft-SHIFT\n bne :1\n\n:left lda #-1\n:setx sta kbdX\n rts\n\n:1 cmp #kright\n beq :right\n cmp #kright-SHIFT\n bne :2\n\n:right lda #1\n bne :setx\n\n:2 cmp #kup\n beq :up\n cmp #kup-SHIFT\n bne :3\n\n:up lda #-1\n:sety sta kbdY\n rts\n\n:3 cmp #kdown\n beq :down\n cmp #kdown-SHIFT\n bne :4\n\n:down lda #1\n bne :sety\n\n:4 cmp #kupleft\n beq :ul\n cmp #kupleft-SHIFT\n bne :5\n\n:ul lda #-1\n sta kbdX\n bne :sety\n\n:5 cmp #kupright\n beq :ur\n cmp #kupright-SHIFT\n bne :6\n\n:ur lda #1\n sta kbdX\n lda #-1\n sta kbdY\n bne :sety\n:6\n\n]rts rts\n*-------------------------------\nFACEJSTK\n lda #0\n sec\n sbc JSTKX\n sta JSTKX ;reverse jstk x\n\n ldx clrF\n lda clrB\n sta clrF\n stx clrB ;& switch clrF/clrB\n\n]rts rts\n\n*-------------------------------\n*\n*  Note: Jstk-push flags are saved as if back = R, fwd = L\n*  (i.e., char is facing L)\n*\n*-------------------------------\nSAVESELECT\n ldx #4\n:loop lda clrF,x\n sta clrSEL,x\n dex\n bpl :loop\n rts\n\n*-------------------------------\nLOADSELECT\n ldx #4\n:loop lda clrSEL,x\n sta clrF,x\n dex\n bpl :loop\n rts\n\n*-------------------------------\nSAVEDESEL\n ldx #4\n:loop lda clrF,x\n sta clrDESEL,x\n dex\n bpl :loop\n rts\n\n*-------------------------------\nLOADDESEL\n ldx #4\n:loop lda clrDESEL,x\n sta clrF,x\n dex\n bpl :loop\n rts\n\n*-------------------------------\nINITINPUT\n lda #0\n\n ldx #4\n:loop sta clrDESEL,x\n sta clrSEL,x\n dex\n bpl :loop\n]rts rts\n\n*-------------------------------\n*\n*  C L E A R   J O Y S T I C K\n*\n*  In/out: JSTKX, JSTKY, btn\n*          clrF-B-U-D-btn\n*\n*  clr = 0: no press\n*  clr = 1: used press\n*  clr = -1: unused press\n*\n*  Assume char is facing L\n*\n*-------------------------------\n*\n*  Input consists of 5 \"buttons\": forward, back, up, down,\n*  and the real button.  Each button has its own \"clr\" flag:\n*  clrF,B,U,D & btn.\n*\n*  When ClrJstk sees a button down:\n*    If clr = 1 or -1... leave it alone\n*    If clr = 0... set clr = -1\n*\n*  When ClrJstk sees a button up:\n*    If clr = 0 or -1... leave it alone\n*    If clr = 1... set clr = 0\n*\n*  When GenCtrl acts on a button press, it sets clr = 1.\n*\n*-------------------------------\nCLRJSTK\n lda clrF\n bmi :1 ;leave it set at -1\n\n ldx JSTKX ;jstk fwd?\n bmi :yesF ;yes--if clr = 0, set clr = -1\n;no--set clr = 0\n lda #0\n beq :staF\n\n:yesF cmp #0\n bne :1\n\n lda #-1\n:staF sta clrF\n\n*-------------------------------\n:1 lda clrB\n bmi :2\n\n ldx JSTKX\n cpx #1\n beq :yesB\n\n lda #0\n beq :staB\n\n:yesB cmp #0\n bne :2\n\n lda #-1\n:staB sta clrB\n\n*-------------------------------\n:2 lda clrU\n bmi :3\n\n ldx JSTKY\n bmi :yesU\n\n lda #0\n beq :staU\n\n:yesU cmp #0\n bne :3\n\n lda #-1\n:staU sta clrU\n\n*-------------------------------\n:3 lda clrD\n bmi :4\n\n ldx JSTKY\n cpx #1\n beq :yesD\n\n lda #0\n beq :staD\n\n:yesD cmp #0\n bne :4\n\n lda #-1\n:staD sta clrD\n\n*-------------------------------\n:4 lda clrbtn\n bmi :5\n\n ldx btn\n bmi :yesbtn\n\n lda #0\n beq :stabtn\n\n:yesbtn cmp #0\n bne :5\n\n lda #-1\n:stabtn sta clrbtn\n\n:5\n]rts rts\n\n*-------------------------------\n*\n*  Z E R O S O U N D\n*\n*  Zero sound table\n*\n*-------------------------------\nZEROSOUND\n lda #0 ;# sounds in table\n sta soundtable\n rts\n\n*-------------------------------\n*\n*  A D D S O U N D\n*\n*  Add sound to sound table\n*  (preserve registers)\n*\n*  In: A = sound #\n*\n*-------------------------------\n]temp1 ds 1\n\nADDSOUND\n stx ]temp1\n\n ldx soundtable\n cpx #maxsfx\n bcs :rts ;sound table full\n\n inx\n sta soundtable,x\n stx soundtable ;# sounds in table\n\n:rts ldx ]temp1\n rts\n\n*-------------------------------\n*\n*  Demo keys (Call immediately after regular KEYS routine)\n*\n*  All keys interrupt demo except ESC and CTRL-S\n*\n*  Out: FF if interrupt, else 00\n*\n*-------------------------------\nDEMOKEYS\n lda level\n bne :cont ;not in demo\n\n lda $c061\n ora $c062 ;button?\n bmi :interrupt\n lda keypress\n bpl :cont\n cmp #ESC\n beq :cont\n cmp #ksound\n beq :cont\n:interrupt\n lda #$ff\n rts\n:cont lda #0\n rts\n\n*-------------------------------\n*\n* Special routine for use by BURN\n*\n* Make a list of visible torches--don't disturb trans list\n*\n*-------------------------------\nmaxtorches = 8\n\ntorchx ds maxtorches+1\ntorchy ds maxtorches+1\ntorchstate ds maxtorches+1\ntorchclip ds maxtorches+1\n\n]numtorches = locals\n\ntorchcount ds 1\n\nLISTTORCHES\n lda #0\n sta ]numtorches\n\n lda VisScrn\n jsr calcblue\n\n ldy #29\n\n:loop jsr :sub\n\n ldx ]numtorches\n cpx #maxtorches\n bcs :max\n\n dey\n bpl :loop\n\n ldx ]numtorches\n:max lda #$ff\n sta torchx,x\n sta torchcount ;start BURNing with torch #0\n]rts rts\n\n:sub lda (BlueType),y\n and #idmask\n cmp #torch\n bne ]rts\n lda fredbuf+1,y\n sta BOTCUT ;temp\n\n tya\n pha\n jsr unindex\n;Out: A = tempblockx, X = tempblocky\n pha\n txa\n ldx ]numtorches\n tay\n lda BlockBot+1,y\n sec\n sbc #3\n sta torchy,x\n lda BOTCUT ;0 or non0\n sta torchclip,x\n pla\n clc\n adc #1\n cmp #10\n bcs ]rts\n asl\n asl\n sta torchx,x\n\n pla\n tay\n lda (BlueSpec),y\n sta torchstate,x\n\n inc ]numtorches\n]rts rts\n\n*-------------------------------\n*\n* B U R N\n*\n* Animate torch flames (for use while music is playing)\n*\n* NOTE--this routine bypasses normal graphics system\n* and draws directly on the displayed page\n* Leaves trans list, redraw buffers, etc. undisturbed\n*\n*-------------------------------\nBURN\n lda torchx\n bmi ]rts ;no torches on this screen\n\n ldx torchcount ;last torch burned\n inx\n lda torchx,x\n bpl :ok ;torchx = $ff means \"end of torch list\"\n ldx #0 ;start again at beginning of list\n:ok stx torchcount\n lda torchx,x\n sta XCO\n lda torchy,x\n sta YCO\n lda torchclip,x\n sta BOTCUT\n lda torchstate,x\n jsr getflameframe\n sta torchstate,x\n tax\n jsr setupflame\n lda BOTCUT\n bne :partial\n:whole jmp fastlay  ;<---DIRECT HIRES CALL\n]rts rts\n\n* If bottom portion of flame would overlap with someone's\n* head, clip it (use LAY)\n\n:partial\n jsr initlay\n lda #0\n sta OFFSET\n lda YCO\n sec\n sbc #4\n sta BOTCUT\n jmp lay ;<---DIRECT HIRES CALL\n\n*-------------------------------\n*\n* Get # of minutes (or seconds) left\n*\n* In: FrameCount (0-65535)\n* Out: MinLeft (BCD byte: $00-99) = # of minutes left\n*      SecLeft = # of seconds left (during final minute)\n*\n*-------------------------------\nGETMINLEFT\n lda #0\n sta ]count\n sta ]count+1\n\n lda #min\n sta :sm1+1\n lda #>min\n sta :sm2+1\n jsr :sub ;get MinLeft\n sty MinLeft\n cpy #2\n bcs ]rts\n\n* Final minute only: count seconds\n\n lda #59*min\n sta ]count\n lda #>59*min\n sta ]count+1\n\n lda #sec\n sta :sm1+1\n lda #>sec\n sta :sm2+1\n jsr :sub ;get SecLeft\n sty SecLeft\n rts\n\n* Sub returns min/sec left\n\n:sub ldy #$61 ;counter\n\n:loop lda ]count+1\n cmp FrameCount+1\n bcc :1\n bne ]rts\n lda ]count\n cmp FrameCount\n bcs ]rts\n:1\n lda ]count\n clc\n:sm1 adc #min\n sta ]count\n lda ]count+1\n:sm2 adc #>min\n sta ]count+1\n\n sed\n tya\n sec\n sbc #1\n cld\n tay\n bpl :loop\n ldy #0\n]rts rts\n\n*-------------------------------\ntimetable\n:0 dw t-60*min\n dw t-55*min\n dw t-50*min\n dw t-45*min\n dw t-40*min\n dw t-35*min\n dw t-30*min\n dw t-25*min\n dw t-20*min\n dw t-15*min\n:20 dw t-10*min\n dw t-5*min\n dw t-4*min\n dw t-3*min\n dw t-2*min\n dw t-1*min+1\n dw t*min+5 ;5 frames after t=0: game over\n dw 65535\n\nnummsg = *-timetable\n\n*-------------------------------\n*\n* Keep track of time remaining\n*\n*-------------------------------\n]rts rts\nKEEPTIME\n; lda autopilot\n; bne ]rts\n lda level\n beq ]rts ;not in demo or during playback\n\n lda KidLife\n bpl ]rts ;clock stops when kid is dead\n\n* Inc frame counter\n\n inc FrameCount\n bne :1\n inc FrameCount+1\n:1 bne :2\n lda #$ff\n sta FrameCount\n sta FrameCount+1 ;don't wrap around\n\n* time for next message yet?\n\n:2 ldy NextTimeMsg ;0-2-4 for 1st, 2nd, 3rd msgs\n cpy #nummsg\n bcs ]rts ;no more msgs\n lda FrameCount+1\n cmp timetable+1,y\n bcc ]rts ;not yet\n lda FrameCount\n cmp timetable,y\n bcc ]rts\n\n* Yes--is this a convenient time to show msg?\n\n lda msgtimer\n bne ]rts ;wait till other msgs are gone\n\n* Yes--show msg (& inc NextTimeMsg)\n\n inc NextTimeMsg\n inc NextTimeMsg\n\n lda #2\n sta timerequest\n]rts rts\n\n*-------------------------------\n*\n* Shorten remaining time to 15 minutes\n* (e.g., 1st time player cheats by skipping a level)\n*\n*-------------------------------\nSHORTENTIME\n ldy NextTimeMsg\n cpy #20\n bcs ]rts ;time is already short enough\n ldy #18\n sty NextTimeMsg\n lda timetable,y\n sta FrameCount\n lda timetable+1,y\n sta FrameCount+1\n]rts rts\n\n*-------------------------------\n*\n* Cue song\n*\n* In: A = song #\n*     X = # of cycles within which song must be played\n*\n*-------------------------------\nCUESONG\n sta SongCue\n stx SongCount\n rts\n\n*-------------------------------\n*\n*  Strobe keyboard\n*\n*-------------------------------\nDLOOP\nSTROBE jsr keys ;Detect & respond to keypresses\n jsr controller\n]rts rts\n\n\n*-------------------------------\n lst\neof ds 1\n  usr $a9,19,$b00,*-org\n lst off\n"
  },
  {
    "path": "04 Support/MakeDisk/S/SUBS.S",
    "content": "* subs\nDemoDisk = 0\nEditorDisk = 0\nCheckTimer = 0\norg = $e000\n tr on\n lst off\n*-------------------------------\n*\n*   S  U  B  S\n*\n*-------------------------------\n org org\n\n jmp ADDTORCHES\n jmp DOFLASHON\n jmp PAGEFLIP\n jmp DEMO\n jmp SHOWTIME\n\n jmp DOFLASHOFF\n jmp LRCLSE\n jmp potioneffect\n jmp checkalert\n jmp reflection\n\n jmp ADDSLICERS\n jmp PAUSE\n jmp bonesrise\n jmp DEADENEMY\n jmp PLAYCUT\n\n jmp ADDLOWERSOUND\n jmp REMOVEOBJ\n jmp ADDFALL\n jmp SETINITIALS\n jmp STARTKID\n\n jmp STARTKID1\n jmp GRAVITY\n jmp INITIALGUARDS\n jmp MIRAPPEAR\n jmp CRUMBLE\n\n*-------------------------------\n lst\n put eq\n lst\n put gameeq\n lst\n put seqdata\n lst\n put movedata\n lst\n put soundnames\n lst off\n\n*-------------------------------\n dum $f0\n]Xcount ds 1\n]Xend ds 1\ntempstate ds 1\n dend\n\n\nPOPside1 = $a9\nPOPside2 = $ad\n\n* Message #s\n\nLevelMsg = 1\nContMsg = 2\nTimeMsg = 3\n\ntimemsgtimer = 20\n\nmirscrn = 4\nmirx = 4\nmiry = 0 ;also in topctrl, auto\n\n*-------------------------------\n do CheckTimer\nmin = 180\n else\nmin = 1090 ;# frames per \"minute\"\n fin ;actual frame rate approx. 11 fps)\n\nsec = min/60\nt = 60 ;game time limit\n\n*-------------------------------\nALTZPon = $c009\nALTZPoff = $c008\nRAMWRTaux = $c005\nRAMWRTmain = $c004\nRAMRDaux = $c003\nRAMRDmain = $c002\n\n*-------------------------------\nSceneCount ds 2\n\n*-------------------------------\n* Level 13 only:  When you enter, trigger loose floors on\n* screen above\n*-------------------------------\n]rts rts\n\nCRUMBLE\n lda level\n cmp #13\n bne ]rts\n lda VisScrn\n cmp #23\n beq :1\n cmp #16\n bne ]rts\n;Trigger blocks 2-7 on bottom row of scrn above\n:1 lda scrnAbove\n sta tempscrn\n lda #2\n sta tempblocky\n ldx #7\n:loop stx tempblockx\n jsr :trigloose\n ldx tempblockx\n dex\n cpx #2\n bcs :loop\n]rts rts\n\n:trigloose\n jsr rdblock1\n cmp #loose\n bne ]rts\n jsr rnd\n and #$0f\n eor #$ff\n clc\n adc #1\n jmp breakloose1\n\n*-------------------------------\n* Add all flasks & torches on VisScrn to trans list\n* & swords\n*-------------------------------\nADDTORCHES\n lda VisScrn\n jsr calcblue\n\n ldy #29\n:loop lda (BlueType),y\n and #idmask\n cmp #torch\n bne :c1\n tya\n pha\n lda VisScrn\n jsr trigtorch\n pla\n tay\n bpl :cont\n\n:c1 cmp #flask\n bne :c2\n tya\n pha\n lda VisScrn\n jsr trigflask\n pla\n tay\n bpl :cont\n\n:c2 cmp #sword\n bne :cont\n tya\n pha\n lda VisScrn\n jsr trigsword\n pla\n tay\n:cont dey\n bpl :loop\n\n]rts rts\n\n*-------------------------------\n*\n* In: A = length of pause (1-256)\n*\n*-------------------------------\nPAUSE\n:outer pha\n ldx #0\n:loop dex\n bne :loop\n pla\n sec\n sbc #1\n bne :outer\n]rts rts\n\n*-------------------------------\n*\n*  F L A S H\n*\n*  Has a traumatic incident occured this frame?\n*  If so, do lightning flash\n*\n*-------------------------------\nDOFLASHON\n jsr lrclse\n\n jsr vblank\n\n lda $c054\n lda $c056 ;show lores\n rts\n\n*-------------------------------\nDOFLASHOFF\n jsr vblank\n\n lda PAGE\n bne :1\n\n lda $c055\n:1 lda $c057 ;show hires\n\n rts\n\n*-------------------------------\n*\n* Clear lo-res screen only if we need to\n*\n* In: A = byte value\n*\n*------------------------------\nLRCLSE\n cmp scrncolor ;last scrncolor\n beq ]rts\n\n jmp lrcls\n\n*-------------------------------\n* Add all slicers on CharBlockY to trans list\n*-------------------------------\nslicetimer = 15 ;from mover\nslicersync = 3 ;# frames out of sync\n\nADDSLICERS\n lda #slicetimer\n sta tempstate\n\n lda CharScrn\n jsr calcblue\n\n ldy CharBlockY\n cpy #3\n bcs ]rts\n\n lda Mult10,y\n tay\n clc\n adc #10\n sta :sm+1\n:loop\n lda (BlueType),y\n and #idmask\n cmp #slicer\n bne :cont\n\n lda (BlueSpec),y\n tax\n and #$7f\n beq :ok\n cmp #slicerRet\n bcc :cont ;in mid-slice--leave it alone\n:ok txa\n and #$80 ;get hibit\n ora tempstate\n jsr trigslicer ;trigger slicer\n jsr getnextstate\n\n:cont iny\n:sm cpy #0\n bcc :loop\n\n]rts rts\n\ngetnextstate\n lda tempstate\n sec\n sbc #slicersync\n cmp #slicerRet\n bcs :ok\n clc\n adc #slicetimer+1-slicerRet\n:ok sta tempstate\n]rts rts\n\n*-------------------------------\n*\n*  Special animation lists for princess's room\n*\n*-------------------------------\nptorchx db 13,25,-1\nptorchoff db 0,6\nptorchy db 113,113\nptorchstate db 1,6\nptorchcount ds 1\npsandcount ds 1\npstarcount ds 4\n\n*-------------------------------\n*\n*  Burn torches (Princess's room)\n*\n*-------------------------------\npburn\n ldx ptorchcount ;last torch burned\n inx\n lda ptorchx,x\n bpl :ok\n ldx #0\n:ok stx ptorchcount\n lda ptorchx,x\n sta XCO\n lda ptorchoff,x\n sta OFFSET\n lda ptorchy,x\n sta YCO\n lda ptorchstate,x\n jsr getflameframe\n sta ptorchstate,x\n tax\n jsr psetupflame\n jmp lay  ;<---DIRECT HIRES CALL\n\n*-------------------------------\n*\n* Flow sand\n*\n*-------------------------------\npflow\n ldx psandcount\n bmi ]rts ;no hourglass yet\n inx\n cpx #3\n bcc :ok\n ldx #0\n:ok stx psandcount\n ldy GlassState\n jmp flow ;<---Contains direct hires call\n\n*-------------------------------\n*\n* Twinkle stars\n*\n*-------------------------------\npstars\n ldx #3\n:loop lda pstarcount,x\n beq :ok\n dec pstarcount,x\n bne :ok\n txa\n pha\n jsr twinkle ;turn it off\n pla\n tax\n:ok dex\n bpl :loop\n\n* New twinkle?\n\n jsr rnd\n cmp #10\n bcs ]rts\n jsr rnd\n and #3\n clc\n adc #5 ;A = rnd length of twinkle (5-8)\n pha\n jsr rnd\n jsr rnd\n and #3\n tax ;X = rnd star # (0-3)\n pla\n sta pstarcount,x\n jmp twinkle ;<---Contains direct hires call\n\n*-------------------------------\n*\n*  P A G E F L I P\n*\n*-------------------------------\nPAGEFLIP\n jsr normspeed ;IIGS\n lda PAGE\n bne :1\n\n lda #$20\n sta PAGE\n lda $C054 ;show page 1\n\n:3 lda $C057 ;hires on\n lda $C050 ;text off\n lda vibes\n beq :rts\n lda $c05e\n]rts rts\n:rts lda $c05f\n rts\n\n:1 lda #0\n sta PAGE\n lda $C055 ;show page 2\n jmp :3\n\n*-------------------------------\n*\n*  Play pre-recorded \"princess\" scenes\n*\n*  In: A = scene #\n*\n*-------------------------------\nAddrL db #PlayCut0,#PlayCut1,#PlayCut2,#PlayCut3\n db #PlayCut4,#PlayCut5,#PlayCut6,#PlayCut7\n db #PlayCut8\nAddrH db #>PlayCut0,#>PlayCut1,#>PlayCut2,#>PlayCut3\n db #>PlayCut4,#>PlayCut5,#>PlayCut6,#>PlayCut7\n db #>PlayCut8\n\nPLAYCUT\n pha\n jsr initit\n pla\n tax\n\n do 0 ;temp\n jmp PlayCut4\n fin\n\n lda AddrL,x\n sta :sm+1\n lda AddrH,x\n sta :sm+2\n:sm jsr $FFFF ;self-mod\n\n lda #1\n sta SPEED\n]rts rts\n\n*-------------------------------\n do DemoDisk\nPlayCut8\nPlayCut4\nPlayCut7\n brk\n else\n*-------------------------------\n* Cut #8: Princess sends out mouse\n*-------------------------------\nPlayCut8\n jsr getglass\n jsr addglass\n\n jsr startP8\n jsr SaveShad\n jsr startM8\n jsr SaveKid\n\n lda #20\n jsr play\n\n lda #Mleave\n jsr mjumpseq\n lda #20\n jsr play\n\n lda #Prise\n jsr pjumpseq\n\n lda #20\n jsr play\n\n lda #0\n sta KidPosn ;mouse disappears\n ldx #50\n lda #s_Heartbeat\n jmp PlaySongX\n\n*-------------------------------\n* Cut #4: Mouse returns to princess\n*-------------------------------\nPlayCut4\n jsr getglass\n jsr addglass\n\n jsr startP4\n jsr SaveShad\n jsr startM4\n jsr SaveKid\n lda #5\n jsr play\n\n lda #Pcrouch\n jsr pjumpseq\n lda #9\n jsr play\n\n lda #Mraise\n jsr mjumpseq\n\n lda #58\n jmp play\n\n*-------------------------------\n* Happy ending\n*-------------------------------\nPlayCut7\n lda #8\n sta SPEED\n\n lda #1\n sta soundon\n sta musicon ;they must listen!!\n\n jsr startP7\n jsr SaveShad\n lda #8\n jsr play\n\n jsr startK7\n jsr SaveKid\n lda #8\n jsr play\n\n lda #Pembrace\n jsr pjumpseq\n lda #5\n jsr play\n\n lda #runstop\n jsr vjumpseq\n lda #2\n jsr play\n\n lda #0\n sta KidPosn ;kid disappears on frame 8 of embrace\n\n lda #9\n jsr play\n\n lda  #s_Embrace\n jsr  PlaySong\n\n jsr startM7\n jsr SaveKid ;mouse runs in\n\n lda #12\n jsr play\n\n lda #Mclimb\n jsr mjumpseq\n\n lda #30\n jmp play\n\n fin\n\n*-------------------------------\n* Tragic ending\n*-------------------------------\nPlayCut6\n lda #22\n sta SPEED\n ldx #8 ;empty hourglass\n jsr addglass\n lda #2\n jsr play\n lda #s_Tragic\n jsr PlaySong\n lda #100\n jmp play\n\n*-------------------------------\n* Princess cut #5\n*-------------------------------\nPlayCut5\n jsr getglass\n cpx #7\n bcs Ominous ;sand is almost out--go for it\n jmp PlayCut1\n\nOminous\n jsr getglass\n jsr addglass\n\n jsr startP5\n jsr SaveShad\n\n lda #2\n jsr play\n\n ldx #50\n lda #s_Heartbeat\n jsr PlaySongX\n\n lda #Palert\n jsr pjumpseq ;princess hears something...\n lda #12\n jsr play\n\n ldx #20\n lda #s_Danger\n jmp PlaySongX\n\n*-------------------------------\n* Princess cut #2 (lying down)\n*-------------------------------\nPlayCut2\n jsr getglass\n jsr addglass\n\n jsr startP2\n jsr SaveShad\n\n lda #2\n jsr play\n\n ldx #50\n lda #s_Heartbeat\n jsr PlaySongX\n]rts rts\n\n*-------------------------------\n* Princess cut #1 (standing)\n*-------------------------------\nPlayCut1\nPlayCut3\n jsr getglass\n jsr addglass\n\n jsr startP1\n jsr SaveShad\n\n lda #2\n jsr play\n\n ldx #50\n lda #s_Timer\n jmp PlaySongX\n\n*-------------------------------\n* Opening titles scene\n*-------------------------------\nPlayCut0\n jsr startV0\n jsr SaveKid\n jsr startP0 ;put chars in starting posn\n jsr SaveShad\n\n lda #2\n jsr play ;animate 2 frames\n\n lda #s_Princess\n ldx #8\n jsr PlaySongI\n\n lda #5\n jsr play\n\n lda #Palert\n jsr pjumpseq ;princess hears something...\n lda #9\n jsr play\n lda #s_Squeek\n ldx #0\n jsr PlaySongI ;door squeaks...\n\n lda #7\n sta SPEED\n\n lda #5\n jsr play\n lda #Vapproach\n jsr vjumpseq\n lda #6\n jsr play\n lda #Vstop\n jsr vjumpseq\n lda #4\n jsr play ;vizier enters\n lda #s_Vizier\n ldx #12\n jsr PlaySongI\n lda #4\n jsr play\n\n lda #Vapproach\n jsr vjumpseq\n lda #30\n jsr play\n lda #Vstop\n jsr vjumpseq\n lda #4\n jsr play ;stops in front of princess\n lda #s_Buildup\n ldx #25\n jsr PlaySongI\n\n lda #Vraise ;raises arms\n jsr vjumpseq\n lda #1\n jsr play\n lda #Pback\n jsr pjumpseq\n lda #13\n jsr play\n ldx #0\n jsr addglass1 ;hourglass appears\n lda #5\n sta lightning\n lda #$ff\n sta lightcolor\n\n lda #12\n sta SPEED\n lda #5\n jsr play\n lda #0\n sta psandcount ;sand starts flowing\n lda #s_Magic\n ldx #8\n jsr PlaySongI\n\n lda #7\n sta SPEED\n lda #Vexit\n jsr vjumpseq\n lda #17\n jsr play\n ldx #1\n jsr addglass1 ;glass starts to fill\n lda #12\n jsr play\n lda #Pslump\n jsr pjumpseq\n lda #28\n jsr play\n\n lda #12\n sta SPEED\n lda #s_StTimer\n ldx #20\n jmp PlaySongI\n\n*-------------------------------\n* Add hourglass to scene\n* In: X = state\n*-------------------------------\naddglass\n lda #0\n sta psandcount ;start sand flowing\naddglass1\n stx GlassState\n lda #2\n sta redrawglass\n]rts rts\n\n*-------------------------------\n* In: A = song #\n*     X = # cycles to play if sound is off\n*-------------------------------\nPlaySongX\n tay\n lda soundon\n and musicon\n bne :1\n txa\n jmp play\n:1 tya ;falls thru to PlaySong\n\n*-------------------------------\n*\n* Play Song (Princess's room)\n*\n* Button press ends song\n*\n* In: A = song #\n*\n*-------------------------------\nPlaySong\n jsr minit\n jsr swpage\n:loop lda #1\n jsr strobe\n lda $c061\n ora $c062\n ora keypress\n bmi :interrupt\n jsr pburn\n jsr pstars\n jsr pflow\n jsr mplay\n cmp #0\n bne :loop\n:interrupt\n jmp swpage\n\n*-------------------------------\n*\n* Play Song (Princess's room--Interruptible)\n*\n* Key or button press starts a new game\n*\n* In: A = song #\n*     X = # cycles to play if sound is off\n*\n*-------------------------------\nPlaySongI\n tay\n lda soundon\n and musicon\n bne :1\n txa\n beq ]rts\n jmp play\n:1 tya\n\n jsr minit\n jsr swpage\n:loop jsr musickeys\n cmp #$80\n bcs :interrupt\n jsr pburn\n jsr pstars\n jsr pflow\n jsr mplay\n cmp #0\n bne :loop\n jmp swpage\n:interrupt\n jmp dostartgame\n\n*-------------------------------\n*  Switch hires pages for duration of song\n\nswpage\n lda PAGE\n eor #$20\n sta PAGE\n]rts rts\n\n*-------------------------------\nflashon\n lda lightning\n beq ]rts\n lda lightcolor\n jmp doflashon\n\nflashoff\n lda lightning\n beq ]rts\n dec lightning\n jmp doflashoff\n\n*-------------------------------\n*\n*  Playback loop (simplified version of main loop in TOPCTRL)\n*\n*  In: A = sequence length (# of frames)\n*\n*-------------------------------\nplay\n sta SceneCount\nplayloop\n jsr rnd\n\n lda SPEED\n jsr pause\n\n jsr strobe ;strobe kbd & jstk\n\n lda level\n bne :notdemo\n jsr demokeys\n bpl :cont\n lda #1\n jmp dostartgame ;interrupted--start a new game\n\n:notdemo lda $c061\n ora $c062\n ora keypress\n bmi ]rts ;key or button to end scene\n\n:cont jsr NextFrame ;Determine what next frame should look like\n\n jsr flashon\n\n jsr FrameAdv ;Update hidden page to reflect new reality\n;& show it\n jsr flashoff\n\n lda soundon\n beq :1\n jsr playback ;play back sound fx\n jsr zerosound\n:1\n; jsr songcues\n\n dec SceneCount\n bne playloop\n rts\n\n*-------------------------------\nNextFrame\n jsr DoKid ;kid/vizier/mouse\n\n jsr DoShad ;always princess\n\n]rts rts\n\n*-------------------------------\nFrameAdv\n jsr DoFast\n\n jsr vblank\n\n jmp PageFlip\n\n*-------------------------------\nDoKid\n jsr LoadKid\n lda CharPosn\n beq ]rts\n\n jsr ctrlkidchar\n\n jsr animchar ;Get next frame from sequence table\n\n jsr SaveKid ;Save all changes to char data\n\n]rts rts\n\n*-------------------------------\nDoShad\n jsr LoadShadwOp\n lda CharPosn\n beq ]rts\n\n jsr ctrlshadchar\n\n jsr animchar\n\n jmp SaveShad\n\n*-------------------------------\nctrlkidchar\n rts\n\nctrlshadchar\n rts\n\n*-------------------------------\nDoFast\n\n* Set up image lists\n\n jsr zerolsts\n\n lda redrawglass\n beq :3\n dec redrawglass\n ldx GlassState\n jsr drawglass ;hourglass\n:3\n jsr LoadKid ;can be kid or vizier\n lda CharPosn\n beq :1\n jsr setupchar\n lda #30\n sta FCharIndex\n jsr addkidobj\n:1\n jsr LoadShad ;always princess\n lda CharPosn\n beq :2\n jsr setupchar\n lda #30\n sta FCharIndex\n jsr addkidobj\n jsr pmask ;kludge to mask face & hair\n:2\n jsr fast ;get char/objs into mid table\n\n jsr drawpost ;big white post\n\n* Draw to screen\n\n jsr pburn\n jsr pburn ;first put down 2 torch flames\n jsr pstars ;& twinkle stars\n\n jsr drawall ;...then draw the rest\n\n jmp pflow ;& flow sand\n\n]rts rts\n\n*-------------------------------\n*\n* Jumpseq for princess & vizier\n*\n* In: A = sequence #\n*\n*-------------------------------\npjumpseq\n pha\n jsr LoadShad\n pla\n jsr jumpseq\n jmp SaveShad\n\nkjumpseq\nmjumpseq\nvjumpseq\n pha\n jsr LoadKid\n pla\n jsr jumpseq\n jmp SaveKid\n\n*-------------------------------\n*\n* Put characters in starting position for scene\n*\n*-------------------------------\nfloorY = 151\n\n* mouse runs to princess\n\nstartM8\n jsr startM4\n lda #144\n sta CharX\n lda #Mstop\n jsr jumpseq\n jmp animchar\n\nstartM4\n lda #24\n sta CharID\n lda #199\n sta CharX\n lda #floorY+1\n sta CharY\n lda #-1\n sta CharFace\n\n lda #Mscurry\n jsr jumpseq\n jmp animchar\n\n* princess w/mouse\n\nstartP8\n jsr startP0\n lda #130\n sta CharX\n lda #floorY+3\n sta CharY\n lda #Pstroke\n jsr jumpseq\n jmp animchar\n\nstartP4\n jsr startP1\n lda #142\n sta CharX\n lda #floorY+3\n sta CharY\n lda #Pstand\n jsr jumpseq\n jmp animchar\n\nstartP5\n jsr startP0\n lda #160\n sta CharX\n rts\n\nstartP2\n jsr startP0\n lda #89\n sta CharX\n lda #floorY\n sta CharY\n\n lda #Plie\n jsr jumpseq\n jmp animchar\n\nstartP1\n jsr startP0\n lda #0\n sta CharFace\n rts\n\nstartP7\n jsr startP0\n lda #136\n sta CharX\n lda #floorY-2\n sta CharY\n lda #Pwaiting\n ldx #1\n cpx purpleflag\n beq :ok\n lda #120 ;crash (copy protect)\n:ok jsr jumpseq\n jmp animchar\n\nstartM7\n jsr startM4\n lda #floorY-2\n sta CharY\n rts\n\nstartP0\n lda #5\n sta CharID\n\n lda #120\n sta CharX\n lda #floorY\n sta CharY\n\n lda #-1\n sta CharFace\n\n lda #Pstand\n jsr jumpseq\n jmp animchar\n\nstartV0\n lda #6\n sta CharID\n\n lda #197\n sta CharX\n lda #floorY\n sta CharY\n\n lda #-1\n sta CharFace\n\n lda #Vstand\n jsr jumpseq\n jmp animchar\n\nstartK7\n lda #0\n sta CharID\n\n lda #198\n sta CharX\n lda #floorY-2\n sta CharY\n\n lda #-1\n sta CharFace\n\n lda #startrun\n jsr jumpseq\n jmp animchar\n\n*-------------------------------\n* Demo commands\n*-------------------------------\nEndProg = -2\nEndDemo = -1\nCtr = 0\nFwd = 1\nBack = 2\nUp = 3\nDown = 4\nUpfwd = 5\nPress = 6\nRelease = 7\n\n*-------------------------------\nDemoProg1 ;up to fight w/1st guard\n db 0,Ctr\n db 1,Fwd\n db 13,Ctr\n db 30,Fwd ;start running...\n db 37,Upfwd ;jump 1st pit\n db 47,Ctr\n db 48,Fwd ;& keep running\nd1 = 65\n db d1,Ctr ;stop\n db d1+8,Back ;look back...\n db d1+10,Ctr\n db d1+34,Back\n db d1+35,Ctr\nd2 = 115\n db d2,Upfwd ;jump 2nd pit\n db d2+13,Press ;& grab ledge\n db d2+21,Up\n db d2+42,Release\n db d2+43,Ctr\n db d2+44,Fwd\n db d2+58,Down\n db d2+62,Ctr\n db d2+63,Fwd\n db d2+73,Ctr\nd3 = 193\n db d3,Fwd\n db d3+12,Ctr\n db d3+40,EndDemo\n\n*-------------------------------\n*\n*  D  E  M  O\n*\n*  Controls kid's movements during self-running demo\n*\n*  (Called from PLAYERCTRL)\n*\n*-------------------------------\nDEMO\n lda #DemoProg1\n ldx #>DemoProg1\n jmp AutoPlayback\n\n*-------------------------------\n*\n* Init princess cut\n*\n*-------------------------------\ninitit\n lda #\" \"\n sta scrncolor ;?\n lda #0\n sta vibes\n sta redrawglass\n sta KidPosn\n sta ShadPosn\n sta ptorchcount\n ldx #3\n:loop sta pstarcount,x\n dex\n bpl :loop\n\n lda #-1 ;no hourglass yet\n sta psandcount\n\n lda #12\n sta SPEED\n\n jsr zeropeels\n jsr zerored\n jsr zerosound\n]rts rts\n\n*-------------------------------\n*\n* Get hourglass state (based on time left)\n*\n* In: FrameCount\n* Out: X = glass state\n*\n*-------------------------------\ngetglass\n jsr getminleft\n ldx #7\n lda MinLeft\n cmp #6\n bcc :got\n dex\n cmp #$11\n bcc :got\n dex\n cmp #$21\n bcc :got\n dex\n cmp #$41\n bcc :got\n dex\n:got\n]rts rts\n\n*-------------------------------\n*\n* Show time if requested\n* (& constant time display during final minute)\n*\n* In: timerequest (0 = no, 1-2 = auto, 3 = from kbd,)\n*     4 = Vizier dead)\n*\n*-------------------------------\nSHOWTIME\n lda timerequest\n beq ]rts\n lda KidLife\n bpl ]rts\n\n jsr getminleft\n\n lda MinLeft\n cmp #2\n bcs :normal\n lda SecLeft\n beq :timeup\n\n* Countdown during final minute\n\n lda level\n cmp #14\n bcs :normal\n bcc :showsec ;stop countdown when clock stops\n\n:timeup\n lda timerequest\n cmp #3\n bcc ]rts ;Once t=0, show time only on kbd request\n\n:normal\n lda msgtimer\n bne ]rts ;wait till other msgs are gone\n\n lda #TimeMsg\n sta message\n lda #timemsgtimer\n ldx timerequest\n cpx #4\n bcc :norm\n:delay lda #timemsgtimer+5 ;delay 5 cycles\n:norm sta msgtimer\n\n lda #0\n sta timerequest\n]rts rts\n\n:showsec\n lda SecLeft\n cmp #2\n bcc :nomsg\n\n lda message\n cmp #TimeMsg\n beq :2\n lda msgtimer\n bne ]rts\n lda #TimeMsg\n sta message\n:2 lda #1\n sta timerequest\n lda #1\n sta msgtimer\n rts\n:nomsg lda #0\n sta timerequest\n sta msgtimer\n rts\n\n*-------------------------------\n* Add lowering-gate sound (only when gate is visible)\n* In: A = state\n*-------------------------------\nADDLOWERSOUND\n lsr\n bcc ]rts ;alt frames\n\n lda level\n cmp #3\n bne :n\n lda trscrn\n cmp #2 ;Exception: Level 3, screen 2\n beq :y\n:n lda trscrn\n cmp scrnLeft\n bne :1\n ldy trloc\n cpy #9\n beq :y\n cpy #19\n beq :y\n cpy #29\n beq :y ;visible to left\n]rts rts\n\n:1 cmp VisScrn\n bne ]rts\n ldy trloc\n cpy #9\n beq ]rts\n cpy #19\n beq ]rts\n cpy #29\n beq ]rts\n\n:y lda #LoweringGate\n jmp addsound\n\n*-------------------------------\n*\n* Remove object\n*\n* In: A = lastpotion\n*\n*-------------------------------\nREMOVEOBJ\n sta lastpotion\n\n ldx #1\n stx clrbtn\n\n lda #floor\n sta (BlueType),y ;remove object\n lda #0\n sta (BlueSpec),y\n\n lda #35 ;TEMP\n sta height\n\n lda #2\n clc\n jsr markwipe\n jmp markred\n\n*-------------------------------\n*\n*  S E T  I N I T I A L S\n*\n*  Set initial states of gadgets\n*\n*-------------------------------\nSETINITIALS\n lda INFO ;number of screens +1\n sec\n sbc #1\n sta SCRNUM\n\n:loop jsr DoScrn ;for every screen\n\n dec SCRNUM\n bne :loop\n rts\n\n*-------------------------------\nDoScrn\n lda SCRNUM\n jsr calcblue\n\n ldy #29\n\n:loop jsr getinitobj\n bcc :skip\n sta (BlueSpec),y\n\n:skip dey\n bpl :loop\n\n rts\n\n*-------------------------------\n*\n*  S T A R T   K I D\n*\n*  Put kid in his starting position for this level\n*\n*-------------------------------\nSTARTKID\n lda level\n cmp #3\n bne :nomile\n\n* Level 3 milestone?\n\n:special3\n lda milestone ;set to 1 when he gets past 1st gate\n beq :nomile\n lda #-1\n sta KidStartFace\n lda #2\n sta KidStartScrn\n lda #6\n sta KidStartBlock ;put him just inside 1st gate...\n\n lda #7\n ldx #4\n ldy #0\n jsr rdblock\n lda #space\n sta (BlueType),y ;remove loose floor...\n;& continue\n:nomile\n lda KidStartScrn ;in INFO\n sta CharScrn\n\n lda KidStartBlock\n jsr unindex ;return A = blockx, X = blocky\n\n sta CharBlockX\n stx CharBlockY\n\n lda CharBlockX\n jsr getblockej\n clc\n adc #angle+7\n sta CharX ;put kid on starting block\n\n lda KidStartFace\n eor #$ff\n sta CharFace\n\n lda origstrength\n ldx level\n bne :notdemo\n lda #4\n:notdemo sta MaxKidStr\n sta KidStrength\n\n do EditorDisk\n jmp :normal\n fin\n\n lda level\n cmp #1\n beq :special1\n cmp #13\n beq :special13\n bne :normal\n\n* Special start for Level 1\n\n:special1\n lda #5 ;scrn\n ldx #2 ;blockx\n ldy #0 ;blocky\n jsr rdblock\n jsr pushpp ;slam gate shut\n\n lda #stepfall\n jsr jumpseq\n jmp STARTKID1\n\n* & for level 13\n\n:special13\n lda #running\n jsr jumpseq\n jmp STARTKID1\n\n* Normal start\n\n:normal lda #turn\n jsr jumpseq ;start in standing posn\n\nSTARTKID1\n ldx CharBlockY\n lda FloorY+1,x\n sta CharY\n\n lda #-1\n sta CharLife ;ff = alive\n\n lda #0 ;kid\n sta CharID\n\n lda #0\n sta CharXVel\n sta CharYVel\n sta waitingtojump\n sta weightless\n sta invert\n sta jarabove\n sta droppedout\n sta CharSword\n sta offguard\n\n:done jsr animchar ;get next frame\n\n* WTLESS level only--kid falls into screen\n\n lda level\n cmp #7 ;WTLESS level\n bne :notsp\n\n lda yellowflag ;should be -\n bmi :yelok\n lda #$40\n sta timebomb ;2nd level copy protection\n:yelok\n lda CharScrn\n cmp #17\n bne :notsp\n lda #3 ;down\n jsr cut\n:notsp\n jmp SaveKid ;save KidVars\n\n]rts rts\n\n*-------------------------------\n*\n*  G R A V I T Y\n*\n*-------------------------------\nTermVelocity = 33\nAccelGravity = 3\nWtlessTermVel = 4\nWtlessGravity = 1\n\nGRAVITY\n lda CharAction\n cmp #4\n bne ]rts\n\n lda weightless\n bne :wtless\n\n lda CharYVel\n clc\n adc #AccelGravity\n\n cmp #TermVelocity\n bcc :ok\n lda #TermVelocity\n\n:ok sta CharYVel\n]rts rts\n\n:wtless lda CharYVel\n clc\n adc #WtlessGravity\n\n cmp #WtlessTermVel\n bcc :ok\n lda #WtlessTermVel\n bcs :ok\n\n*-------------------------------\n*\n*  Add falling velocity\n*\n*-------------------------------\nADDFALL\n lda CharYVel\n clc\n adc CharY\n sta CharY\n\n* X-vel\n\n lda CharAction\n cmp #4 ;freefall?\n bne ]rts\n\n lda CharXVel\n jsr addcharx\n sta CharX\n\n jmp rereadblocks\n\n*-------------------------------\n*\n* Set initial guard posns for entire level (call once)\n*\n*-------------------------------\nINITIALGUARDS\n ldy #24 ;screen #\n:loop\n lda GdStartBlock-1,y\n cmp #30\n bcs :nogd\n jsr unindex ;A = blockx\n jsr getblockej\n clc\n adc #angle+7\n sta GdStartX-1,y\n lda #0\n sta GdStartSeqH-1,y\n\n:nogd dey\n bne :loop\n]rts rts\n\n*-------------------------------\n*\n* Newly dead enemy--play music (or whatever)\n*\n* In: Char vars\n*\n*-------------------------------\nDEADENEMY\n lda level\n beq :demo\n cmp #13\n beq :wingame\n\n lda CharID\n cmp #1\n beq ]rts ;shadow\n lda #s_Vict\n ldx #25\n jsr cuesong\n]rts rts\n\n:demo lda #1\n sta milestone ;start demo, part 2\n lda #0\n sta PreRecPtr\n sta PlayCount\n rts\n\n:wingame lda #s_Upstairs\n ldx #25\n jsr cuesong\n\n lda #$ff ;white\n sta lightcolor\n lda #10\n sta lightning\n\n lda #1\n sta exitopen\n lda #4\n sta timerequest\n\n lda #24\n ldx #0\n ldy #0\n jsr rdblock\n jmp pushpp ;open exit\n\n*-------------------------------\n*  Mirror appears (called by MOVER when exit opened)\n*-------------------------------\nMIRAPPEAR\n do DemoDisk\n rts\n else\n\n lda level\n cmp #4\n bne ]rts\n\n lda #mirscrn\n ldx #mirx\n ldy #miry\n jsr rdblock\n lda #mirror\n sta (BlueType),y\n rts\n\n fin\n\n*-------------------------------\n lst\n ds 1\n usr $a9,20,$400,*-org\n lst off\n"
  },
  {
    "path": "04 Support/MakeDisk/S/TABLES.S",
    "content": "* tables\norg = $e00\n tr on\n lst off\n*-------------------------------\n*\n*  PRINCE OF PERSIA\n*  Copyright 1989 Jordan Mechner\n*\n*-------------------------------\n dum org\n\nByteTable ds $100\nOffsetTable ds $100\nBlockTable ds $100\nPixelTable ds $100\nMult10 ds $10\nMult7 ds $10\nMult30 ds $40\n\nBlockEdge ds 20\nBlockTop ds 5\nBlockBot ds 5\nFloorY ds 5\nBlockAy ds 5\n\n dend\n*-------------------------------\n org org\n*-------------------------------\nScrnLeft = 58\nScrnTop = 0\nScrnBot = 191\n\nVertDist = 10 ;from bottom of block to center plane\nBlockHeight = 63\nDHeight = 3 ;floorpiece thickness\n\nBlox1 = BlockHeight\nBlox2 = 2*BlockHeight\nBlox3 = 3*BlockHeight\nBlox4 = 4*BlockHeight\n\n*-------------------------------\n* ByteTable\n*\n* Index:  Real screen X-coord (0-255)\n* Yields: Byte # (0-36)\n*-------------------------------\n\n ds ByteTable-*\n\n]byte = 0\n lup 36\n db ]byte,]byte,]byte,]byte,]byte,]byte,]byte\n]byte = ]byte+1\n --^\n db 36,36,36,36\n\n*-------------------------------\n* OffsetTable\n*\n* Index:  Same as ByteTable\n* Yields: Offset (0-6)\n*-------------------------------\n ds OffsetTable-*\n\n lup 36\n db 0,1,2,3,4,5,6\n --^\n db 0,1,2,3\n\n*-------------------------------\n* BlockTable\n*\n* Index:  Screen X-coord (0 to 255)\n* Yields: Block # (-5 to 14)\n*-------------------------------\n ds BlockTable-*\n\n]byte = -5\n db ]byte,]byte\n\n lup 18\n]byte = ]byte+1\n db ]byte,]byte,]byte,]byte,]byte,]byte,]byte\n db ]byte,]byte,]byte,]byte,]byte,]byte,]byte\n --^\n\n]byte = ]byte+1\n db ]byte,]byte\n\n*-------------------------------\n* PixelTable\n*\n* Index:  Same as BlockTable\n* Yields: Pixel # within block (0 to 13)\n*-------------------------------\n ds PixelTable-*\n\n db 12,13\n\n lup 18\n db 0,1,2,3,4,5,6,7,8,9,10,11,12,13\n --^\n\n db 0,1\n\n*-------------------------------\n* Mult10\n*-------------------------------\n ds Mult10-*\n\n]byte = 0\n lup 16\n db ]byte\n]byte = ]byte+10\n --^\n\n*-------------------------------\n* Mult7\n*-------------------------------\n ds Mult7-*\n\n]byte = 0\n lup 16\n db ]byte\n]byte = ]byte+7\n --^\n\n*-------------------------------\n* Mult30\n*-------------------------------\n ds Mult30-*\n\n]word = 0\n lup 32\n dw ]word\n]word = ]word+30\n --^\n\n*-------------------------------\n* BlockEdge\n*\n* Index:  Block X (-5 to 14) + 5\n* Yields: Screen X-coord of left edge of block\n*-------------------------------\n ds BlockEdge-*\n\n]byte = -12\n lup 20\n db ]byte\n]byte = ]byte+14\n --^\n\n*-------------------------------\n* BlockTop, BlockBot, FloorY\n*\n* Index:  Block Y (-1 to 3) + 1\n\n ds BlockTop-*\n\n db ScrnBot+1-Blox4\n db ScrnBot+1-Blox3\n db ScrnBot+1-Blox2\n db ScrnBot+1-Blox1\n db ScrnBot+1\n\n*-------------------------------\n ds BlockBot-*\n\n db ScrnBot-Blox3\n db ScrnBot-Blox2\n db ScrnBot-Blox1\n db ScrnBot\n db ScrnBot+Blox1\n\n*-------------------------------\n ds FloorY-*\n\n db ScrnBot-Blox3-VertDist\n db ScrnBot-Blox2-VertDist\n db ScrnBot-Blox1-VertDist\n db ScrnBot-VertDist\n db ScrnBot+Blox1-VertDist\n\n*-------------------------------\n ds BlockAy-*\n\n db ScrnBot-Blox3-DHeight\n db ScrnBot-Blox2-DHeight\n db ScrnBot-Blox1-DHeight\n db ScrnBot-DHeight\n db ScrnBot+Blox1-DHeight\n\n*-------------------------------\n lst\neof ds 1\n usr $a9,3,$000,*-org\n lst off\n"
  },
  {
    "path": "04 Support/MakeDisk/S/TOPCTRL.S",
    "content": "* topctrl\norg = $2000\nEditorDisk = 0\nFinalDisk = 1\nDemoDisk = 0\nThreeFive = 1 ;3.5\" disk?\n tr on\n lst off\n*-------------------------------\n*\n*  PRINCE OF PERSIA\n*  Copyright 1989 Jordan Mechner\n*\n*-------------------------------\n org org\n\n jmp START\n jmp RESTART\n jmp STARTRESUME\n jmp INITSYSTEM\n jmp showpage\n\n jmp showpage\n jmp GOATTRACT\n\n*-------------------------------\n lst\n put eq\n lst\n put gameeq\n lst\n put seqdata\n lst\n put movedata\n lst\n put soundnames\n lst off\n\n*-------------------------------\n* 18-sector ID bytes\n\nPOPside1 = $a9\nPOPside2 = $ad\n\nFirstSideB = 3 ;1st level on Side B\nLastSideB = 14 ;& last\n\n*-------------------------------\n* Soft switches\n\nALTZPon = $c009\nALTZPoff = $c008\nRAMWRTaux = $c005\nRAMWRTmain = $c004\nRAMRDaux = $c003\nRAMRDmain = $c002\nTEXTon = $c051\nPAGE2off = $c054\n\nkresurrect = \"R\"\n\n*-------------------------------\n* Misc. changeable parameters\n\ninitmaxstr = 3\n\nBTLtimer = 20 ;back to life\nwtlflash = 15 ;weightless\n\nmousetimer = 150\n\n*-------------------------------\n* message #s\n\nLevelMsg = 1\nContMsg = 2\nTimeMsg = 3\n\nleveltimer = 20 ;level message timer\ncontflash = 95\ncontoff = 15\ndeadenough = 4\n\n*-------------------------------\n* Mirror location\n\nmirlevel = 4\nmirscrn = 4\nmirx = 4\nmiry = 0\n\n*-------------------------------\n*\n*  Start a new game\n*\n*  In: A = level # (0 for demo, 1 for game)\n*\n*-------------------------------\nSTART\n sta ALTZPon\n jsr StartGame\n jmp RESTART\n\n*-------------------------------\n*\n*  Resume saved game\n*\n*-------------------------------\nSTARTRESUME\n sta ALTZPon\n lda #4 ;arbitrary value >1\n jsr StartGame\n jmp ResumeGame\n\n*-------------------------------\n*\n*  Initialize system (Called from MASTER upon bootup)\n*\n*-------------------------------\nINITSYSTEM\n sta ALTZPon\n\n jsr setcenter ;Center joystick\n\n jsr setfastaux ;bgtable in auxmem\n\n lda #FinalDisk!1\n sta develment\n\n jsr initgame\n\n ldx #0\n txa\n:loop sta $0,x\n inx\n bne :loop\n\n sta ALTZPoff\n rts\n\n*-------------------------------\n*\n*  Start a game\n*\n*  In: A = level # (0 for demo, 1 for new game, >1 for\n*      resumed game)\n*\n*-------------------------------\nStartGame\n sta level\n sta NextLevel\n\n cmp #1\n bne :notfirst\n lda #s_Danger\n ldx #25\n jsr cuesong ;Cue \"Danger\" theme if level 1\n:notfirst\n\n lda #initmaxstr\n sta origstrength ;set initial strength\n\n jmp initgame\n\n*-------------------------------\n*\n*  Resume saved game\n*\n*-------------------------------\nResumeGame\n do DemoDisk\n rts\n else\n\n jsr flipdisk ;Ask player to flip disk\n lda #POPside2\n sta BBundID ;& expect side 2 from now on\n\n:cont jsr loadgame ;Load saved-game info from disk\n\n lda SavLevel ;Has a game been saved?\n bpl :ok ;Yes\n\n* No game saved--start new game instead\n\n jsr flipdisk\n lda #POPside1\n sta BBundID\n\n lda #1\n sta level\n sta NextLevel\n jmp RESTART\n\n* Restore strength & timer\n\n:ok lda SavStrength\n sta origstrength\n\n lda SavTimer+1\n sta FrameCount+1\n lda SavTimer\n sta FrameCount\n\n lda SavNextMsg\n sta NextTimeMsg\n\n* & resume from beginning of level\n\n lda #1\n sta timerequest ;show time remaining\n lda #$80\n sta yellowflag ;pass copy prot. test\n lda SavLevel\n sta level\n sta NextLevel\n jmp RESTART\n\n fin\n\n*-------------------------------\n*\n* Initialize vars before starting game\n*\n*-------------------------------\ninitgame\n lda #0\n sta blackflag\n sta redrawflg\n sta inmenu\n sta inbuilder\n sta recheck0\n sta SINGSTEP\n sta ManCtrl\n sta vibes\n sta invert\n sta milestone\n sta timerequest\n sta FrameCount\n sta FrameCount+1\n sta NextTimeMsg\n\n lda #$ff\n sta MinLeft\n sta SecLeft\n\n lda #1 ;no delay\n sta SPEED\n rts\n\n*-------------------------------\n*\n*  Restart current level\n*\n*-------------------------------\nRESTART\n sta ALTZPon\n sta $c010 ;clr kbd strobe\n\n ldx #$ff ;\n txs ;added 2/5/90!!!\n\n do EditorDisk\n jsr reloadblue\n else\n\n lda #\" \"\n jsr lrcls\n jsr vblank\n lda PAGE2off\n lda TEXTon\n\n ldx level\n jsr LoadLevelX ;load blueprint & image sets from disk\n fin\n\n jsr setinitials ;Set initial states as specified in blueprint\n\n jsr initialguards ;& guards\n\n* Zero a lot of vars & tables\n\n lda #0\n sta SINGSTEP\n sta vibes\n sta AMtimer\n sta VisScrn\n sta exitopen\n sta lightning\n sta mergetimer\n sta numtrans\n sta nummob\n sta EnemyAlert\n sta createshad\n sta stunned\n sta heroic\n sta ChgKidStr\n sta OppStrength ;no opponent\n sta msgtimer\n sta PreRecPtr\n sta PlayCount\n\n ldx SongCue\n cpx #s_Danger\n beq :1st\n sta SongCue\n:1st\n\n jsr zerosound\n\n jsr zeropeels\n\n jsr initCDbuf ;initialize collision detection buffers\n\n jsr initinput\n\n lda #1\n sta gotsword\n\n lda #-1\n sta cutorder\n\n lda #2\n sta ShadID ;default opponent is guard\n lda #86\n sta ShadFace\n\n jsr startkid\n\n do EditorDisk\n else\n\n lda level\n cmp #1\n bne :gotswd\n lda #0\n sta gotsword ;Start Level 1 w/o sword\n:gotswd\n fin\n\n lda level\n beq :nomsg\n cmp #14\n beq :nomsg ;don't announce level 0 or 14\n cmp #13\n bne :1\n lda skipmessage\n beq :1\n lda #0\n sta skipmessage\n beq :nomsg ;skip level 13 message 1st time\n:1 lda #LevelMsg\n sta message\n lda #leveltimer\n sta msgtimer\n:nomsg\n\n jsr entrance ;entrance slams shut\n\n jsr FirstFrame ;Generate & display first frame\n\n jmp MainLoop\n\n*-------------------------------\n*\n*  Main loop\n*\n*-------------------------------\nMainLoop\n jsr rnd\n\n lda #0\n sta ChgKidStr\n sta ChgOppStr\n\n jsr strobe ;Strobe kbd & jstk\n\n jsr demokeys\n bpl :4\n lda #1\n jmp START ;During demo, press any key to play\n:4\n jsr misctimers\n\n jsr NextFrame ;Determine what next frame should look like\n\n jsr flashon\n\n jsr FrameAdv ;Draw next frame & show it\n\n jsr playback ;Play sounds\n jsr zerosound ;& zero sound table\n\n jsr flashoff\n\n jsr songcues ;Play music\n\n lda NextLevel\n cmp level\n beq MainLoop ;Continue until we change levels\n\n jsr yellowcheck ;copy protect!\n\n jmp LoadNextLevel\n\n*-------------------------------\n*\n* Load next level\n*\n* In: NextLevel = # of next level\n*     level = # of current level\n*\n* Out: level = NextLevel\n*\n*-------------------------------\nLoadNextLevel\n lda NextLevel\n cmp #14\n beq LoadNext1\n lda #1\n sta timerequest ;show time remaining\n\nLoadNext1\n lda MaxKidStr\n sta origstrength ;save new strength level\n lda #0\n sta milestone\n\n do EditorDisk\n lda level\n sta NextLevel\n jmp RESTART\n fin\n\n* NextLevel must be in range 1 - LastSideB\n\n lda NextLevel\n cmp #LastSideB+1\n bcs :illegal\n cmp #1\n bcs :2\n:illegal lda level ;Illegal value--restart current level\n sta NextLevel\n jmp RESTART\n\n* Load from correct side of disk\n\n:2 ldx #POPside2\n cmp #FirstSideB\n bcs :1\n ldx #POPside1\n:1 cpx BBundID ;do we need to flip disk?\n beq :ok ;no\n stx BBundID ;yes\n jsr flipdisk\n\n:ok lda NextLevel\n sta level ;set new level\n cmp #2\n beq :cut1\n cmp #4\n beq :cut2\n cmp #6\n beq :cut3\n cmp #8\n beq :cut8\n cmp #9\n beq :cut4\n cmp #12\n beq :cut5 ;Princess cuts before certain levels\n\n:cont jmp RESTART ;Start new level\n\n* Princess cuts before certain levels\n\n:cut1 lda #1\n]pcut pha\n:repeat jsr cutprincess ;cut to princess's room...\n jsr setrecheck0\n jsr recheckyel ;if wrong-disk error, recheck track 0\n bne :repeat ;& repeat\n pla\n jsr playcut ;& play cut #1\n jmp :cont\n\n:cut2 lda #2\n bne ]pcut\n:cut3 lda #3\n bne ]pcut\n:cut4 lda #4\n bne ]pcut\n:cut5 lda #5\n bne ]pcut\n:cut8 lda #8\n bne ]pcut\n\n*-------------------------------\n*\n*  N E X T   F R A M E\n*\n*  Determine what next frame should look like\n*\n*  In: All data reflects last (currently displayed) frame.\n*\n*-------------------------------\nNextFrame\n jsr animmobs ;Update mobile objects (MOBs)\n\n jsr animtrans ;Update transitional objects (TROBs)\n\n jsr bonesrise ;Bring skeleton to life?\n\n jsr checkalert ;Determine EnemyAlert value\n\n jsr DoKid ;Update kid\n\n jsr DoShad ;Update shadowman (or other opponent)\n\n jsr checkstrike\n jsr checkstab ;Check for sword strikes\n:1\n jsr addsfx ;Add additional sound fx\n\n jsr chgmeters ;Change strength meters\n\n jsr cutcheck ;Has kid moved offscreen?\n  jsr PrepCut ;If so, prepare to cut to new screen\n\n jsr cutguard ;If guard has fallen offscreen, vanish him\n\n do EditorDisk\n rts\n fin\n\n* Level 0 (Demo): When kid exits screen 24, end demo\n\n lda level\n bne :no0\n lda KidScrn\n cmp #24\n bne :cont\n jmp GOATTRACT\n\n* Level 6: When kid falls off screen 1, cut to next level\n\n:no0 do DemoDisk\n else\n\n lda level\n cmp #6\n bne :no6\n lda KidScrn\n cmp #1\n bne :cont\n lda KidY\n cmp #20\n bcs :cont\n lda #-1\n sta KidY\n inc NextLevel\n jmp :cont\n\n* Level 12: When kid exits screen 23, cut to next level\n\n:no6 cmp #12\n bne :cont\n lda KidScrn\n cmp #23\n bne :cont\n inc NextLevel\n lda #1\n sta skipmessage ;but don't announce level #\n jmp LoadNext1 ;or show time\n\n fin\n\n* Continue...\n\n:cont lda level\n cmp #14\n bcs :stopped\n cmp #13\n bcc :ticking\n lda exitopen\n bne :stopped ;Timer stops when you kill Vizier on level 13\n\n:ticking jsr keeptime\n\n:stopped jsr showtime ;if timerequest <> 0\n\n lda level\n cmp #13\n bcs :safe ;You have one chance to finish Level 13\n;after time runs out\n lda MinLeft\n ora SecLeft\n bne :safe\n jmp YouLose ;time's up--you lose\n:safe\n]rts rts\n\n*-------------------------------\n*\n*  F R A M E   A D V A N C E\n*\n*  Draw new frame (on hidden hi-res page) & show it\n*\n*-------------------------------\nFrameAdv\n lda cutplan ;set by PrepCut\n bne :cut\n\n jsr DoFast\n jmp PageFlip ;Update current screen...\n\n:cut jmp DoCleanCut ;or draw new screen from scratch\n\n*-------------------------------\n*\n*  F I R S T   F R A M E\n*\n*  Generate & display first frame\n*\n*-------------------------------\nFirstFrame\n lda KidScrn\n sta cutscrn\n\n jsr PrepCut\n\n jmp DoCleanCut\n\n*-------------------------------\n*\n*  D O   K I D\n*\n*  Update kid\n*\n*-------------------------------\nDoKid\n jsr LoadKidwOp ;Load kid as character (w/opponent)\n\n jsr rereadblocks\n\n jsr unholy ;If shadowman dies, kid dies\n\n jsr ctrlplayer ;Detect & act on commands from player\n\n lda invert\n beq :3\n lda CharLife\n bmi :3\n lda #2\n sta redrawflg\n lda #0\n sta invert\n jmp inverty ;Screen flips back rightside up when you're dead\n:3\n jsr wtlessflash\n\n lda CharScrn\n beq :skip ;Skip all this if kid is on null screen:\n\n jsr animchar ;Get next frame from sequence table\n\n jsr gravity ;Adjust Y-velocity\n jsr addfall ;Add falling velocity\n\n jsr setupchar\n jsr rereadblocks\n jsr getedges\n\n jsr firstguard ;Check for collision w/guard\n\n jsr checkbarr ;Check for collisions w/vertical barriers\n\n jsr collisions ;React to collisions detected above\n\n jsr checkgate ;Knocked to side by closing gate?\n\n jsr  checkfloor ;Is there floor underfoot?  If not, fall\n\n jsr  checkpress ;Is kid stepping on a pressure plate?\n;If so, add pressplate (& whatever it\n;triggers) to trans list.\n\n jsr checkspikes  ;Trigger spikes?\n\n jsr checkimpale ;impaled by spikes?\n jsr checkslice ;sliced by slicer?\n:1\n jsr shakeloose ;shake loose floors\n\n:skip jsr SaveKid ;Save all changes to char data\n]rts rts\n\n*-------------------------------\n*\n*  D O   S H A D\n*\n*  Update shadowman (or other opponent)\n*\n*-------------------------------\nDoShad\n lda ShadFace\n cmp #86\n beq ]rts ;\"no character\" code\n\n jsr LoadShadwOp\n jsr rereadblocks\n\n jsr unholy\n\n jsr ShadCtrl ;Opponent control module\n\n lda CharScrn\n cmp VisScrn\n bne :os\n\n jsr animchar\n\n lda CharX\n cmp #ScrnLeft-14\n bcc :os\n cmp #ScrnRight+14\n bcs :os ;Skip all this if char is offscreen\n\n jsr gravity\n jsr addfall\n\n jsr setupchar\n jsr rereadblocks\n jsr getedges\n\n jsr enemycoll\n\n jsr  checkfloor\n jsr  checkpress\n jsr checkspikes\n jsr checkimpale\n  jsr checkslice2\n\n:os jmp SaveShad\n\n*-------------------------------\n*\n*  Add all visible characters to object table\n*\n*-------------------------------\naddchars\n jsr :reflection\n jsr :shadowman\n jsr :kid\n\n jsr checkmeters\n\n]rts rts\n\n*-------------------------------\n* Draw kid's reflection in mirror\n\n:reflection\n jmp reflection\n\n*-------------------------------\n* Draw shadowman or other opponent\n\n:shadowman\n lda ShadFace\n cmp #86 ;Is there a shadowman?\n beq ]rts ;no\n lda ShadScrn\n cmp VisScrn ;Is he visible?\n bne ]rts ;no\n\n jsr setupshad ;Add shadowman to object table\n\n lda ChgOppStr\n bpl :s1\n jsr setupcomix ;Add impact star if he's been hurt\n:s1 jmp setupsword ;Add sword\n\n*-------------------------------\n* Draw kid\n\n:kid lda KidScrn\n beq ]rts\n cmp VisScrn\n bne ]rts\n\n jsr setupkid ;Add kid to obj table\n\n lda ChgKidStr\n bpl :s2\n jsr setupcomix ;Add impact star\n:s2 jmp setupsword ;Add sword\n\n*-------------------------------\n*\n*  S E T   U P   K I D\n*\n*  Add kid to object table\n*  Crop edges, index char, mark fredbuf/floorbuf\n*\n*-------------------------------\nsetupkid\n jsr LoadKid\n jsr rereadblocks\n\n lda CharPosn\n bne :cont ;Delay loop if CharPosn = 0\n lda #25\n jmp pause\n\n:cont jsr setupchar\n jsr unevenfloor\n\n jsr getedges\n jsr indexchar\n jsr quickfg\n jsr quickfloor\n jsr cropchar\n\n jmp addkidobj ;add kid to obj table\n\n*-------------------------------\n*\n*  S E T   U P   S H A D\n*\n*  Add shadowman to obj table\n*\n*-------------------------------\nsetupshad\n jsr LoadShad\n jsr rereadblocks\n\n jsr setupchar\n jsr unevenfloor\n\n jsr getedges\n jsr indexchar\n jsr quickfg\n jsr quickfloor\n jsr cropchar\n\n lda CharID\n cmp #1 ;Shadowman?\n bne :1 ;no\n lda level\n cmp #mirlevel\n bne :2\n lda CharScrn\n cmp #mirscrn\n bne :2\n lda #mirx ;Clip shadman at L as he jumps out of mirror\n asl\n asl\n clc\n adc #1\n sta FCharCL\n:2 jmp addshadobj\n\n:1 jmp addguardobj\n\n*-------------------------------\n*\n*  Cut to new screen\n*\n*  DoQuickCut: Show bg before adding characters\n*  DoCleanCut: Show frame only when complete\n*\n*-------------------------------\nUseQuick = 0\n\n do UseQuick\n\nDoQuickCut\n jsr fastspeed ;IIGS\n\n lda #0\n sta PAGE\n jsr drawbg ;draw bg on p1\n\n jsr PageFlip\n\n jsr copyscrn ;copy bg to p2\n jsr DoFast ;add chars\n\n jsr PageFlip ;show complete frame\n jmp normspeed\n\n else\n\nDoCleanCut\n jsr fastspeed ;IIGS\n\n lda #$20\n sta PAGE\n jsr drawbg ;draw bg on p2\n\n lda #0\n sta PAGE\n jsr copyscrn ;copy bg to p1\n\n jsr DoFast ;add chars\n\n;jsr vblank2\n jsr PageFlip\n jmp normspeed\n\n fin\n\n*-------------------------------\n*\n*  D R A W   B G\n*\n*  Clear screen & draw background (on hidden hi-res page)\n*  Show black lo-res screen to cover transition\n*\n*-------------------------------\ndrawbg\n lda #0\n sta cutplan\n\n lda #2\n sta CUTTIMER ;min # of frames between cuts\n\n lda #\" \"\n jsr lrclse\n jsr vblank\n lda PAGE2off\n lda TEXTon\n\n jsr DoSure ;draw b.g. w/o chars\n\n jmp markmeters ;mark strength meters\n\n*-------------------------------\n*\n*  D O   S U R E\n*\n*  Clear screen and redraw entire b.g. from scratch\n*\n*-------------------------------\nDoSure\n lda VisScrn\n sta SCRNUM\n\n jsr zerolsts ;zero image lists\n\n jsr sure ;Assemble image lists\n\n jsr zeropeels ;Zero peel buffers\n jsr zerored ;and redraw buffers\n;(for next DoFast call)\n\n jmp drawall ;Dump contents of image lists to screen\n\n*-------------------------------\n*\n*  D O  F A S T\n*\n*  Do a fast screen update\n*  (Redraw objects and as little of b.g. as possible)\n*\n*-------------------------------\nDoFast\n jsr zerolsts ;zero image lists\n\n lda VisScrn\n sta SCRNUM\n\n jsr develpatch\n\n jsr addmobs ;Add MOBS to object list\n\n jsr addchars ;Add characters to object list\n;(incl. strength meters)\n\n jsr fast ;Assemble image lists (including objects\n;from obj list and necessary portions of bg)\n\n jsr dispmsg ;Superimpose message (if any)\n:1\n jmp drawall ;Dump contents of image lists to screen\n]rts rts\n\n*-------------------------------\n*\n*  Lightning flashes\n*\n*-------------------------------\nflashon\n lda lightning\n beq :1\n lda lightcolor\n bne :2\n:1 lda ChgKidStr\n bpl ]rts\n lda #$11 ;Flash red if kid's been hurt\n:2 jmp doflashon\n\nflashoff\n lda lightning\n beq :1\n dec lightning\n bpl :2\n\n:1 lda ChgKidStr\n bpl ]rts\n:2 jmp doflashoff\n\n*-------------------------------\n*\n*  Initialize collision detection buffers\n*\n*-------------------------------\ninitCDbuf\n ldx #9\n lda #$ff\n:zloop sta SNlastframe,x\n sta SNthisframe,x\n sta SNbelow,x\n sta SNabove,x\n dex\n bpl :zloop\n\n sta BlockYlast\n]rts rts\n\n*-------------------------------\n*\n*  Prepare to cut?\n*\n*  In: VisScrn = current screen\n*      cutscrn = screen we want to be on\n*\n*  If cutscrn <> VisScrn, make necessary preparations\n*  & return cutplan = 1\n*\n*-------------------------------\nPrepCut\n lda cutscrn\n beq ]rts ;never cut to screen 0\n cmp VisScrn\n beq ]rts ;If cutscrn = VisScrn, we don't need to cut\n\n lda cutscrn\n sta VisScrn\n cmp #5\n bne :1\n lda level\n cmp #14\n bne :1\n jmp YouWin ;Level 14, screen 5 is princess's room--you win!\n\n:1 lda #1\n sta cutplan\n\n jsr getscrns ;Get neighboring screen #s\n\n jsr LoadKid\n jsr addslicers\n jsr addtorches\n jsr crumble ;Activate slicers, torches, etc.\n\n jmp addguard ;Add guard (if any)\n\n*-------------------------------\n*\n*  Time's up--you lose\n*\n*-------------------------------\nYouLose\n jsr cutprincess ;cut to princess's room...\n lda #6\n jsr playcut ;& play cut #6\n\n jmp GOATTRACT ;go to title sequence\n\n*-------------------------------\n*\n*  You win\n*\n*-------------------------------\nYouWin jsr cutprincess\n lda #7\n jsr playcut ;Play cut #7\n jmp epilog ;Play epilog (& hang)\n\n*-------------------------------\n*\n*  Control player\n*\n*  In/out: Char vars\n*\n*-------------------------------\nctrlplayer\n jsr kill0 ;If char is on screen 0, kill him off\n\n jsr PlayerCtrl ;Control player\n\n lda CharLife\n bmi ]rts ;If char is still alive, return\n\n* When player dies, CharLife is set to 0.\n* Inc CharLife until = #deadenough; then put up message\n\n:dead lda CharPosn\n jsr cold?\n bne ]rts ;wait till char has stopped moving\n\n lda CharLife\n bne :inc\n jsr deathsong ;cue death music\n\n:inc lda CharLife\n cmp #deadenough\n bcs :deadenough\n inc CharLife\n]rts rts\n\n:deadenough\n lda level\n beq :gameover ;Your death ends demo\n\n lda SongCue\n bne ]rts ;wait for song to finish before putting up msg\n\n lda MinLeft\n ora SecLeft\n bne :timeleft\n jmp YouLose ;if you die with time = 0, you lose\n\n* Otherwise: \"Press Button to Continue\"\n\n:timeleft\n lda message\n cmp #ContMsg\n bne :1\n lda msgtimer\n bne :ok\n\n:1 lda #ContMsg\n sta message\n lda #255\n sta msgtimer ;Put up continue message\n\n:ok cmp #1\n beq :gameover ;End game when msgtimer = 1\n\n do FinalDisk\n else\n\n lda develment\n beq :nodevel\n lda keypress\n cmp #kresurrect\n beq :raise ;TEMP!\n:nodevel\n fin\n\n lda BTN0\n ora BTN1\n bpl ]rts\n jmp RESTART ;Button press restarts level\n\n:gameover\n do EditorDisk\n jmp RESTART\n else\n jmp GOATTRACT\n fin\n\n* Raise kid from the dead (TEMP!)\n\n do FinalDisk\n else\n:raise\n lda #0\n sta msgtimer\n sta SongCue\n\n lda #BTLtimer\n sta backtolife\n\n jsr LoadKid\n\n lda MaxKidStr\n sta ChgKidStr\n\n lda #stand\n jsr jumpseq\n jmp startkid1\n\n fin\n\n*-------------------------------\n*\n* Play death song\n*\n*-------------------------------\ndeathsong\n lda ShadID\n cmp #1\n beq :shad ;if opponent was shadowman\n lda heroic ;was kid engaged in battle at time of death?\n bne :1 ;yes--\"heroic death\" music\n lda #s_Accid ;no--\"accidental death\" music\n bne :2\n:shad lda #s_Shadow\n bne :2\n:1 lda #s_Heroic\n:2 ldx #255\n jmp cuesong\n]rts rts\n\n*-------------------------------\n*\n* If char is on screen 0, kill him off\n*\n*-------------------------------\nkill0\n lda CharLife\n bpl ]rts\n lda CharScrn\n bne ]rts\n lda #Splat\n jsr addsound\n lda #100\n jsr decstr\n lda #0\n sta msgtimer\n sta CharLife\n lda #185\n sta CharPosn\n]rts rts\n\n*-------------------------------\n*\n* Go to attract mode\n*\n*-------------------------------\nGOATTRACT\n do DemoDisk\n else\n\n lda BBundID\n cmp #POPside1 ;does he need to flip disk?\n beq :ok ;no\n\n do ThreeFive\n else\n lda BGset1\n bpl :flip\n ldx #4\n jsr LoadLevelX ;get \"FLIP DISK\" msg into memory\n fin\n\n:flip jsr flipdisk ;ask him to flip disk\n\n fin\n\n lda #POPside1\n sta BBundID\n\n:ok jmp attractmode\n\n*-------------------------------\n*\n*  Shake loose floors when character jumps\n*\n*-------------------------------\nshakeloose\n lda jarabove\n bmi :jarbelow\n bne :jarabove\n]rts rts\n\n:jarbelow\n lda #0\n sta jarabove\n\n lda CharBlockY\n jmp shakem ;shake every loose floorboard on level\n\n:jarabove\n lda #0\n sta jarabove\n\n lda CharBlockY\n sec\n sbc #1\n jmp shakem\n\n*-------------------------------\n*\n* If strength meters have changed, mark affected\n* blocks for redraw\n*\n*-------------------------------\ncheckmeters\n lda ChgKidStr\n beq :1\n jsr MarkKidMeter\n\n:1 lda ChgOppStr\n beq ]rts\n jmp MarkOppMeter\n\n*-------------------------------\n*\n* Change strength meters as specified\n*\n*-------------------------------\nchgmeters\n lda level\n cmp #12\n bne :cont\n lda OpID\n ora CharID\n cmp #1 ;kid vs. shadowman?\n bne :cont\n ;yes\n lda ChgKidStr\n bpl :1\n sta ChgOppStr\n bne :cont\n\n:1 lda ChgOppStr\n bpl :cont\n sta ChgKidStr\n\n* Kid's meter\n\n:cont lda KidStrength\n clc\n adc ChgKidStr\n\n cmp MaxKidStr\n beq :ok1\n bcs :opp\n\n:ok1 sta KidStrength\n\n* Opponent's meter\n\n:opp lda OppStrength\n clc\n adc ChgOppStr\n\n cmp MaxOppStr\n beq :ok2\n bcs ]rts\n\n:ok2 sta OppStrength\n]rts rts\n\n*-------------------------------\n*\n* Slam player's entrance shut (add it to trans list)\n*\n*-------------------------------\nentrance\n lda KidScrn\n jsr calcblue\n\n ldy #29\n\n:loop lda (BlueType),y\n and #idmask\n cmp #exit\n bne :cont ;find player's entrance\n\n lda KidScrn\n jmp closeexit ;& return\n\n:cont dey\n bpl :loop\n\n]rts rts\n\n*-------------------------------\n*\n* Play song cues\n*\n* In: SongCue (0 = none, non0 = song #)\n*     SongCount\n*\n*-------------------------------\nsongcues\n do EditorDisk\n rts\n fin\n\n ldx SongCue\n beq ]rts\n lda level\n beq ]rts ;no music in demo\n\n lda SongCount\n bne :cont\n lda #0\n sta SongCue ;when SongCount reaches 0, forget it\n]rts rts\n:cont dec SongCount\n\n lda KidPosn\n bne :1\n lda NextLevel\n cmp level\n beq ]rts ;Play only one song once kid has reached stairs\n\n:1 lda KidPosn\n jsr static?\n bne ]rts\n\n lda ShadFace\n cmp #86\n beq :ok\n lda ShadScrn\n cmp VisScrn\n bne :ok\n lda ShadPosn\n jsr static?\n bne ]rts\n:ok\n lda trobcount ;(set by animtrans if there are any\n bne ]rts ;slicers or other fast-moving objects\n;that it wouldn't look good to freeze)\n lda nummob\n bne ]rts\n lda lightning\n bne ]rts ;wait for no MOBs and no lightning\n lda mergetimer\n bmi :ok2\n bne ]rts\n lda ChgKidStr\n ora ChgOppStr\n bne ]rts ;& no impact stars\n:ok2\n\n* Prepare for minimal animation\n\n lda PAGE\n eor #$20\n sta PAGE\n\n jsr listtorches\n\n* Play song\n\n lda SongCue\n jsr minit\n\n sta $c010 ;clr kbd\n\n:loop jsr burn\n jsr musickeys\n\n jsr mplay\n cmp #0\n bne :loop\n\n:done lda #0\n sta SongCue\n\n:rtn lda PAGE\n eor #$20\n sta PAGE\n\n jmp clearjoy\n\n*-------------------------------\n*\n* Add additional sound fx\n*\n*-------------------------------\naddsfx\n lda #167 ;blocked strike\n cmp KidPosn ;if char is striking...\n bne :1\n lda #SwordClash1\n bne :clash\n:1 cmp ShadPosn\n bne :2\n lda #SwordClash2\n:clash jmp addsound\n:2\n]rts rts\n\n*-------------------------------\n*\n* Display message (\"Press button to continue\" or \"Level #\"\n* or \"# minutes left\")\n*\n*-------------------------------\ndispmsg\n lda msgtimer\n beq ]rts\n dec msgtimer\n\n lda KidLife\n bmi :alive\n\n* Kid is dead -- message is \"Press button to continue\"\n\n lda msgtimer\n cmp #contoff\n bcc ]rts\n\n cmp #contflash\n bcs :steady\n\n and #7\n cmp #3\n bcs ]rts\n cmp #2\n bne :steady\n\n lda soundon\n bne :2\n jsr gtone ;if sound off\n:2 lda #FlashMsg\n jsr addsound\n\n:steady jmp continuemsg ;Kid is dead--superimpose continue msg\n\n* Kid is alive -- message is \"Level #\" or \"# Minutes\"\n\n:alive lda msgtimer\n cmp #leveltimer-2\n bcs ]rts\n\n lda message\n cmp #LevelMsg\n bne :1\n jmp printlevel\n\n:1 cmp #TimeMsg\n bne ]rts\n jmp timeleftmsg\n\n*-------------------------------\n*\n* Display \"Turn disk over\" and wait for button press\n*\n*-------------------------------\nflipdisk\n do ThreeFive\n lda #1\n sta purpleflag ;pass copy-protect!\n rts\n fin\n\n do DemoDisk\n jmp GOATTRACT\n else\n\n* 1st copy protection check\n\n lda redherring\n eor redherring2\n cmp #POPside1 ;passed 1st check?\n beq :1\n lda #POPside1\n sta BBundID\n  jmp attractmode\n\n* Passed copy protection--continue\n\n:1 lda #\" \"\n jsr lrcls\n\n jsr zerolsts\n jsr zeropeels\n lda #1\n sta genCLS\n\n jsr flipdiskmsg\n\n jsr drawall\n\n jsr vblank\n jsr PageFlip\n\n lda $c010 ;clr kbd strobe\n:loop\n lda $c061\n ora $c062\n ora $c000\n bpl :loop\n\n fin\n\n* Flip to clr text scrn\n\nshowtext jsr vblank\n lda PAGE2off\n lda TEXTon\n]rts rts\n\n*-------------------------------\n*\n* Is character moving?\n*\n* In: A = CharPosn\n* Out: 0 if static, 1 if moving\n*\n*-------------------------------\nstatic?\n cmp #0\n beq ]ok\n cmp #15 ;stand\n beq ]ok\n cmp #229 ;brandish sword\n beq ]ok\n cmp #109 ;crouching\n beq ]ok\n cmp #171 ;en garde\n beq ]ok\n cmp #166 ;alert stand (for gd.)\n beq ]ok\ncold?\n cmp #185 ;dead\n beq ]ok\n cmp #177 ;impaled\n beq ]ok\n cmp #178 ;halves\n beq ]ok\n lda #1\n rts\n]ok lda #0\n]rts rts\n\n*-------------------------------\n*\n* Clear all jstk flags\n*\n*-------------------------------\nclearjoy\n jsr LoadSelect\n lda #0\n sta clrF\n sta clrB\n sta clrU\n sta clrD\n jmp SaveSelect\n\n*-------------------------------\n*\n*  Misc. timers (Call every cycle)\n*\n*-------------------------------\nmisctimers\n lda mergetimer\n beq :3\n bmi :3\n dec mergetimer\n bne :3\n dec mergetimer ;goes from 1 to -1\n:3\n\n* Level 8: When you've spent a certain amount of time on\n* screen 16 once exit is open, mouse rescues you\n\n lda level\n cmp #8 ;mouse level\n bne :12\n lda CharScrn\n cmp #16\n bne :12\n lda exitopen\n beq :12\n cmp #mousetimer\n bcc :11\n bne :12\n:10 jsr mouserescue\n:11 inc exitopen\n:12\n]rts rts\n\n*-------------------------------\n*\n*  Screen flashes towards end of weightlessness period\n*\n*-------------------------------\nwtlessflash\n lda weightless\n beq ]rts\n ldx #0\n sec\n sbc #1\n sta weightless\n beq :3\n ldx #$ff\n cmp #wtlflash\n bcs :3\n lda vibes\n eor #$ff\n tax\n:3 stx vibes ;Screen flashes as weightlessness ends\n]rts rts\n\n*-------------------------------\n* yellow copy protection\n* (call right before 1st princess cut)\n* In: A = next level\n*-------------------------------\nyellowcheck\n cmp #2\n bne ]rts\n jsr showtext\n ldx #10\n jmp yellow ;in gamebg\n ;sets yellowflag ($7c) hibit\n\n*-------------------------------\n*\n*  Temp development patch for screen redraw\n*  (also used for invert Y)\n*\n*-------------------------------\ndevelpatch\n do 0\n lda blackflag ;blackout?\n beq :1\n lda #1\n sta genCLS\n fin\n\n:1 lda redrawflg ;forced redraw?\n beq ]rts\n dec redrawflg\n\n jsr markmeters\n jmp sure\n\n*-------------------------------\n lst\n ds 1\n usr $a9,4,$a00,*-org\n lst off\n"
  },
  {
    "path": "04 Support/MakeDisk/S/UNPACK.S",
    "content": "* unpack 3.5\nThreeFive = 1\norg = $ea00\n lst off\n*-------------------------------\n*\n*  Sits in main l.c. bank 2\n*\n*-------------------------------\n org org\n\n jmp SNGEXPAND\n jmp DBLEXPAND\n jmp DELTAEXPPOP\n jmp INVERTY\n jmp DELTAEXPWIPE\n\n jmp PURPLE\n jmp PROMPT\n jmp BLACKOUT\n jmp CLR\n jmp TEXT\n\n jmp SETDHIRES\n jmp FADEIN\n jmp LOADSUPER\n jmp FADEOUT\n\n*-------------------------------\n lst\n put gameeq\n lst\n put eq\n lst off\n\nIOUDISoff = $c07f\nIOUDISon = $c07e\nDHIRESoff = $c05f\nDHIRESon = $c05e\nHIRESon = $c057\nHIRESoff = $c056\nPAGE2on = $c055\nPAGE2off = $c054\nMIXEDon = $c053\nMIXEDoff = $c052\nTEXTon = $c051\nTEXToff = $c050\nALTCHARon = $c00f\nALTCHARoff = $c00e\nADCOLon = $c00d\nADCOLoff = $c00c\nALTZPon = $c009\nALTZPoff = $c008\nRAMWRTaux = $c005\nRAMWRTmain = $c004\nRAMRDaux = $c003\nRAMRDmain = $c002\nADSTOREon = $c001\nADSTOREoff = $c000\n\nRWBANK2 = $c083\nRWBANK1 = $c08b\n\n*-------------------------------\n* RW18 ID bytes\n\nPOPside1 = $a9\nPOPside2 = $ad\n\n* RW18 zero page vars\n\nslot = $fd\ntrack = $fe\nlastrack = $ff\n\n* RW18 commands\n\nDrvOn = $00\nDrvOff = $01\nSeek = $02\nRdSeqErr = $03\nRdGrpErr = $04\nWrtSeqErr = $05\nWrtGrpErr = $06\nModID = $07\nRdSeq = $83\nRdGrp = $84\nWrtSeq = $85\nWrtGrp = $86\nInc = $40 ;.Inc to inc track\n\n*-------------------------------\n*\n*  Unpack single hi-res screen into page 1\n*  (Sorry about the code--it's lifted directly from DRAZ)\n*\n*-------------------------------\n dum $00\n\nPAC ds 2\nPIC ds 2\nV2 ds 1\nV3 ds 1\nV4 ds 1\nV5 ds 1\nV8 ds 1\nV9 ds 1\nVA ds 1\nVB ds 1\nVC ds 1\n\n dend\n\n*-------------------------------\nSNGEXPAND\n sta RAMRDaux\n sta RAMWRTmain\n\n STA PAC+1 ;org addr\n\n LDA #$20\n STA PIC+1 ;dest addr\n\n LDA #0\n STA PAC\n STA PIC\n\n LDA #$FE\n STA V8\n LDA #0\n STA VA\n LDY #$27\n:4 LDA #$78\n STA V2\n LDA #$20\n STA V3\n:0 LDA V2\n SEC\n SBC #$28\n STA V2\n BCS :1\n DEC V3\n:1 LDA V2\n STA V4\n LDA V3\n CLC\n ADC #4\n STA V5\n:2 LDA V4\n SEC\n SBC #$80\n STA V4\n BCS :3\n DEC V5\n:3 LDA V4\n STA PIC\n LDA V5\n CLC\n ADC #$20\n STA PIC+1\n:5 LDA PIC+1\n SEC\n SBC #4\n STA PIC+1\n CLC\n BCC :6\n:13 LDA PIC+1\n CMP V5\n BNE :5\n LDA V4\n CMP V2\n BNE :2\n LDA V5\n CMP V3\n BNE :2\n LDA V2\n BNE :0\n DEY\n BPL :4\n RTS\n:6 BIT VA\n BMI :11\n LDX #0\n LDA (PAC,X)\n STA VB\n CMP V8\n BNE :10\n INC PAC\n BNE :7\n INC PAC+1\n:7 LDA (PAC,X)\n STA V9\n INC PAC\n BNE :8\n INC PAC+1\n:8 LDA (PAC,X)\n STA VB\n INC PAC\n BNE :9\n INC PAC+1\n:9 LDA #$80\n STA VA\n CLC\n BCC :11\n:10 LDA VB\n ORA #$80\n STA (PIC),Y\n INC PAC\n BNE :12\n INC PAC+1\n:12 CLC\n BCC :13\n:11 LDA VB\n ORA #$80\n STA (PIC),Y\n DEC V9\n BNE :13\n LDA #0\n STA VA\n BEQ :13\n\n*-------------------------------\n*\n*  Unpack crunched double hi-res screen\n*\n*  Robert A. Cook 3/89\n*\n*  In: A = hi byte of crunched data address\n*      RAMRD set to main/aux depending on where crunched\n*        data is stored\n*\n*-------------------------------\n\n dum $f0\n\nCrnDatPtr ds 2\nXClmPos ds 1\nYScrPos ds 1\nByteHld ds 1\nRepeatCdn ds 1\nScrBasPtr ds 2\n\n dend\n\n*-------------------------------\nDBLEXPAND\n sta CrnDatPtr+1\n\n lda #1\n sta CrnDatPtr\n;(CrnDatPtr),0 is crunch type (unused)\n jmp WipeRgtExp\n\n*-------------------------------\n*\n*  Wipe Right Expand\n*\n*-------------------------------\nWipeRgtExp\n lda #0\n sta XClmPos\n\n:Loop lda #0\n sta YScrPos\n jsr ExpandClm\n\n lda #1\n sta YScrPos\n jsr ExpandClm\n\n inc XClmPos\n\n lda XClmPos\n cmp #80\n bne :Loop\n\n]rts rts\n\n*-------------------------------\n*\n*  Delta Expand\n*\n*  In: A = hi byte of crunched data address (in auxmem)\n*\n*-------------------------------\nDeltaExp\n sta RAMRDaux\n\n sta CrnDatPtr+1\n\n lda #0\n sta CrnDatPtr\n\n sta XClmPos\n\n:Loop ldy #0\n lda (CrnDatPtr),y\n cmp #-1\n beq :Done\n\n sta ByteHld\n and #$80\n beq :ExpandOne\n\n lda ByteHld\n and #$7f\n beq :NewCoord\n\n tax\n\n ldy #1\n lda (CrnDatPtr),y\n jsr ExpClmSeq1\n\n clc\n lda CrnDatPtr\n adc #2\n sta CrnDatPtr\n bcc :a4\n inc CrnDatPtr+1\n:a4\n jmp :Next\n\n:NewCoord\n ldy #1\n lda (CrnDatPtr),y\n sta XClmPos\n\n ldy #2\n lda (CrnDatPtr),y\n sta YScrPos\n\n clc\n lda CrnDatPtr\n adc #3\n sta CrnDatPtr\n bcc :a7\n inc CrnDatPtr+1\n:a7\n jmp :Next\n\n:ExpandOne\n lda ByteHld\n ldx #1\n jsr ExpClmSeq1\n\n inc CrnDatPtr\n bne :sysi8\n inc CrnDatPtr+1\n:sysi8\n\n:Next lda XClmPos\n cmp #$80\n bne :Loop\n\n:Done sta RAMRDmain\n]rts rts\n\n*-------------------------------\n*\n*  Expand Column\n*\n*-------------------------------\nExpandClm\n\n:Loop ldy #0\n lda (CrnDatPtr),y\n sta ByteHld\n and #$80\n beq :ExpandOne\n\n ldy #1\n lda (CrnDatPtr),y\n tax\n lda ByteHld\n and #$7f\n jsr ExpClmSeq\n\n clc\n lda CrnDatPtr\n adc #2\n sta CrnDatPtr\n bcc :a4\n inc CrnDatPtr+1\n:a4\n jmp :Next\n\n:ExpandOne\n lda ByteHld\n ldx #1\n jsr ExpClmSeq\n\n inc CrnDatPtr\n bne :sysi5\n inc CrnDatPtr+1\n:sysi5\n\n:Next lda YScrPos\n cmp #192\n bcc :Loop\n\n rts\n\n*-------------------------------\n*\n*  Expand Column Sequence\n*\n*-------------------------------\n*\n*  In: XClmPos\n*      YScrPos\n*      A (byte pattern)\n*      X (repeat count)\n*\n*  Out: YScrPos (modified)\n*\n*-------------------------------\nExpClmSeq\n sta ByteHld\n stx RepeatCdn\n\n:Loop ldx XClmPos\n ldy YScrPos\n lda ByteHld\n jsr PutScrByte\n\n lda YScrPos\n clc\n adc #2\n sta YScrPos\n\n dec RepeatCdn\n bne :Loop\n\n rts\n\n*-------------------------------\n*\n* Expand Column Sequence 1\n*\n*-------------------------------\nExpClmSeq1\n sta ByteHld\n stx RepeatCdn\n\n:Loop ldx XClmPos\n ldy YScrPos\n lda ByteHld\n bmi :Next\n\n jsr PutScrByte\n\n:Next inc YScrPos\n\n lda YScrPos\n cmp #192\n bne :SkipXInc\n\n lda #0\n sta YScrPos\n\n inc XClmPos\n\n:SkipXInc\n dec RepeatCdn\n bne :Loop\n\n rts\n\n*-------------------------------\n*\n*  Put DHires Byte Value\n*\n*-------------------------------\n*\n*  In:  X (XClmPos)\n*       Y (YScrPos)\n*       A (Byte value)\n*\n*-------------------------------\nPutScrByte\n sta ByteHld\n ;YScrPos in Y\n lda YLO,y\n sta ScrBasPtr\n lda YHI,y\n ora #$20 ;DHires page 1\n sta ScrBasPtr+1\n\n txa ;XClmPos in X\n lsr\n tay\n bcs NoAuxSet\n\n sta RAMWRTaux\n\nNoAuxSet lda ByteHld\n sta (ScrBasPtr),y\n\n sta RAMWRTmain\n\n]rts rts\n\n*-------------------------------\n*\n* P U R P L E\n*\n*-------------------------------\n do ThreeFive\nPURPLE rts\n\n else\n put purple\n fin\n\n*-------------------------------\n*\n*  Delta Expand (Pop or Wipe)\n*\n*  In: A = hi byte of crunched data address (in auxmem)\n*\n*-------------------------------\nDELTAEXPPOP\n sta PAGE2on\n]DE jsr DeltaExp\n sta PAGE2off\n sta RAMRDaux\n sta RAMWRTaux\n]rts rts\n\nDELTAEXPWIPE\n sta PAGE2off\n jmp ]DE\n\n*-------------------------------\n*\n* Invert Y-tables\n*\n*-------------------------------\nINVERTY\n ldx #191 ;low line\n ldy #0 ;high line\n\n* Switch low & high lines\n\n:loop lda YLO,x\n pha\n lda YLO,y\n sta YLO,x\n pla\n sta YLO,y\n\n lda YHI,x\n pha\n lda YHI,y\n sta YHI,x\n pla\n sta YHI,y\n\n* Move 1 line closer to ctr\n\n dex\n iny\n cpy #96\n bcc :loop\n]rts rts\n\n*-------------------------------\n*\n* Prompt user to insert correct disk side\n*\n*-------------------------------\n do ThreeFive\nmsg1 asc \"    Insert Prince of Persia Disk@\"\n else\nmsg1 asc \"Insert Prince of Persia Disk, Side \"\n fin\n\nmsg2 asc \"C@\"\n\n*-------------------------------\nPROMPT\n lda #\"A\"\n ldx BBundID\n cpx #POPside1\n beq :1\n lda #\"B\"\n:1 sta msg2 ;side A or B?\n\n jsr blackout\n\n sta RAMWRTmain\n\n ldx #0\n:loop lda msg1,x\n cmp #\"@\"\n beq :done\n sta $528+2,x ;midscrn\n inx\n bpl :loop\n\n:done sta RAMWRTaux\n jsr whoop ;whoop spkr\n\n:wloop lda $c000\n ora $c061\n ora $c062\n bpl :wloop\n sta $c010\n\n jmp clr ;clear screen\n\n*-------------------------------\nCLR bit RWBANK2\n bit RWBANK2\n\n sta $c010\n\n lda #\" \"\n jmp _lrcls ;in hires\n\n*-------------------------------\n*\n* Show black screen (text page 1)\n*\n*-------------------------------\nBLACKOUT\n jsr CLR\n\nTEXT sta RAMRDaux\n jsr vblank\n sta TEXTon\n sta ADCOLoff\n sta PAGE2off\n]rts rts\n\n*-------------------------------\n* Set dbl hires\n*-------------------------------\nSETDHIRES\n sta RAMRDaux\n sta RAMWRTaux\n jsr vblank\n sta ADCOLon\n bit HIRESon\n\n bit DHIRESon\n bit DHIRESoff\n bit DHIRESon\n bit DHIRESoff\n bit DHIRESon ;for old Apple RGB card\n\n sta TEXToff\n rts\n\n**************************************************\n**************************************************\n**************************************************\n xc\n xc\n\nstlx mac bank;addr\n hex 9f\n da ]2\n db ]1\n <<<\nldlx mac bank;addr\n hex bf\n da ]2\n db ]1\n <<<\n\n*-------------------------------\n*\n* FADE IN\n*\n* In: s-hires data in $2000.9FFF\n*     A = 0 main, 1 aux\n*\n*-------------------------------\nFADEIN\n sta RAMRDmain\n sta :sm1+2\n sta :sm2+2\n\n clc\n xce\n\n sep $30 ;axy\n\n lda #%00011110\n sta $C035 ;shadow reg\n lda #$41\n sta $C029 ;SH reg\n\n rep $30 ;AXY\n\n* Clear scan line control byte table\n* and palette 0 to black\n\n lda #$0000\n ldx #$011E\n:scbclr dex\n dex\n stlx $E1;$9D00\n bne :scbclr\n\n* Now move data over\n\n ldx #$2000\n ldy #$2000\n lda #32000-1\n phb\n:sm1 mvn $E1,1 ;main/aux\n plb\n\n* Turn on Super Hires mode\n\n sep $20\n lda #$C1\n sta $C029\n rep $20\n\n* Move desired palette over to PalFade area\n\n ldx #$9D00 ;aux mem\n ldy #new_palette\n lda #32-1\n phb\n:sm2 mvn 0,1 ;aux to main/aux\n plb\n\n* Now fade in the picture\n\n bra PalFade ;switches back to e-mode\n\n*-------------------------------\n*\n* FADE OUT\n*\n*-------------------------------\nFADEOUT\n mx 3\n\n* Clear the \"destination\" palette back to zero\n\n ldx #31\n lda #$00\n:palclr sta new_palette,x\n dex\n bpl :palclr\n\n* Now fade out\n\n bra PalFade ;switches back to e-mode\n\n*------------------------------------------------- PalFade\n*\n* Given current palette at $E19E00.1F, fade to\n* new palette given in new_palette\n*\n\nnew_palette ds 32\n\nPalFade dum 0\n:green ds 1\n:blue ds 1\n dend\n\n sec\n xce\n\n bit $C019\n bmi *-3\n\n ldy #16\n\n:fadein ldx #3\n\n:fadein2 bit $C019\n bpl *-3\n\n bit $C019\n bmi *-3\n\n dex\n bne :fadein2\n\n ldx #30\n:palloop ldlx $E1;$9E01\n and #$0f\n cmp new_palette+1,x\n beq :red_ok\n inc\n blt :red_ok\n dec\n dec\n\n:red_ok stlx $E1;$9E01\n\n lda new_palette,x\n and #$F0\n sta :green\n\n ldlx $E1;$9E00\n and #$F0\n cmp :green\n beq :green_ok\n blt :grn_add\n sbc #$20\n:grn_add clc\n adc #$10\n\n:green_ok sta :green\n\n lda new_palette,x\n and #$0F\n sta :blue\n\n ldlx $E1;$9E00\n and #$0F\n cmp :blue\n beq :blue_ok\n inc\n blt :blue_ok\n dec\n dec\n\n:blue_ok ora :green\n stlx $E1;$9E00\n\n dex\n dex\n bpl :palloop\n\n dey\n bpl :fadein\n\n rts\n\n xc off\n mx 3\n\n*===============================\n*\n* Load super hi-res data\n*\n*-------------------------------\nLOADSUPER\n jsr rw18\n db ModID,$79 ;set \"side C\"\n\n lda #0\n sta track\n sta RAMWRTmain\n jsr loadscrn ;\"Tracks\" 0-6: palace (mainmem)\n\n sta RAMWRTaux\n jmp loadscrn ;\"Tracks\" 7-13: epilog (auxmem)\n\n*-------------------------------\n*\n* Load super hi-res screen into $2000.9FFF\n*\n*-------------------------------\nloadscrn\n lda #$20\n:loop sta :sm\n jsr rw18\n db RdSeq.Inc\n:sm db $20\n lda :sm\n clc\n adc #$12\n cmp #$9e\n bcc :loop ;load 7 tracks\n]rts rts\n\n*-------------------------------\n lst\neof ds 1\n usr $a9,2,$a00,*-org\n lst off\n"
  },
  {
    "path": "04 Support/MakeDisk/S/UNPACK525.S",
    "content": "* unpack\nThreeFive = 0\norg = $ea00\n lst off\n*-------------------------------\n*\n*  U  N  P  A  C  K\n*\n*  Sits in main l.c. bank 2\n*\n*-------------------------------\n org org\n\n jmp SNGEXPAND\n jmp DBLEXPAND\n jmp DELTAEXPPOP\n jmp INVERTY\n jmp DELTAEXPWIPE\n\n jmp PURPLE\n jmp PROMPT\n jmp BLACKOUT\n jmp CLR\n jmp TEXT\n\n jmp SETDHIRES\n\n*-------------------------------\n lst\n put gameeq\n lst\n put eq\n lst off\n\nIOUDISoff = $c07f\nIOUDISon = $c07e\nDHIRESoff = $c05f\nDHIRESon = $c05e\nHIRESon = $c057\nHIRESoff = $c056\nPAGE2on = $c055\nPAGE2off = $c054\nMIXEDon = $c053\nMIXEDoff = $c052\nTEXTon = $c051\nTEXToff = $c050\nALTCHARon = $c00f\nALTCHARoff = $c00e\nADCOLon = $c00d\nADCOLoff = $c00c\nALTZPon = $c009\nALTZPoff = $c008\nRAMWRTaux = $c005\nRAMWRTmain = $c004\nRAMRDaux = $c003\nRAMRDmain = $c002\nADSTOREon = $c001\nADSTOREoff = $c000\n\nRWBANK2 = $c083\nRWBANK1 = $c08b\n\nPOPside1 = $a9\nPOPside2 = $ad\n\n*-------------------------------\n*\n*  Unpack single hi-res screen into page 1\n*  (Sorry about the code--it's lifted directly from DRAZ)\n*\n*-------------------------------\n dum $00\n\nPAC ds 2\nPIC ds 2\nV2 ds 1\nV3 ds 1\nV4 ds 1\nV5 ds 1\nV8 ds 1\nV9 ds 1\nVA ds 1\nVB ds 1\nVC ds 1\n\n dend\n\n*-------------------------------\nSNGEXPAND\n sta RAMRDaux\n sta RAMWRTmain\n\n STA PAC+1 ;org addr\n\n LDA #$20\n STA PIC+1 ;dest addr\n\n LDA #0\n STA PAC\n STA PIC\n\n LDA #$FE\n STA V8\n LDA #0\n STA VA\n LDY #$27\n:4 LDA #$78\n STA V2\n LDA #$20\n STA V3\n:0 LDA V2\n SEC\n SBC #$28\n STA V2\n BCS :1\n DEC V3\n:1 LDA V2\n STA V4\n LDA V3\n CLC\n ADC #4\n STA V5\n:2 LDA V4\n SEC\n SBC #$80\n STA V4\n BCS :3\n DEC V5\n:3 LDA V4\n STA PIC\n LDA V5\n CLC\n ADC #$20\n STA PIC+1\n:5 LDA PIC+1\n SEC\n SBC #4\n STA PIC+1\n CLC\n BCC :6\n:13 LDA PIC+1\n CMP V5\n BNE :5\n LDA V4\n CMP V2\n BNE :2\n LDA V5\n CMP V3\n BNE :2\n LDA V2\n BNE :0\n DEY\n BPL :4\n RTS\n:6 BIT VA\n BMI :11\n LDX #0\n LDA (PAC,X)\n STA VB\n CMP V8\n BNE :10\n INC PAC\n BNE :7\n INC PAC+1\n:7 LDA (PAC,X)\n STA V9\n INC PAC\n BNE :8\n INC PAC+1\n:8 LDA (PAC,X)\n STA VB\n INC PAC\n BNE :9\n INC PAC+1\n:9 LDA #$80\n STA VA\n CLC\n BCC :11\n:10 LDA VB\n ORA #$80\n STA (PIC),Y\n INC PAC\n BNE :12\n INC PAC+1\n:12 CLC\n BCC :13\n:11 LDA VB\n ORA #$80\n STA (PIC),Y\n DEC V9\n BNE :13\n LDA #0\n STA VA\n BEQ :13\n\n*-------------------------------\n*\n*  Unpack crunched double hi-res screen\n*\n*  Robert A. Cook 3/89\n*\n*  In: A = hi byte of crunched data address\n*      RAMRD set to main/aux depending on where crunched\n*        data is stored\n*\n*-------------------------------\n\n dum $f0\n\nCrnDatPtr ds 2\nXClmPos ds 1\nYScrPos ds 1\nByteHld ds 1\nRepeatCdn ds 1\nScrBasPtr ds 2\n\n dend\n\n*-------------------------------\nDBLEXPAND\n sta CrnDatPtr+1\n\n lda #1\n sta CrnDatPtr\n;(CrnDatPtr),0 is crunch type (unused)\n jmp WipeRgtExp\n\n*-------------------------------\n*\n*  Wipe Right Expand\n*\n*-------------------------------\nWipeRgtExp\n lda #0\n sta XClmPos\n\n:Loop lda #0\n sta YScrPos\n jsr ExpandClm\n\n lda #1\n sta YScrPos\n jsr ExpandClm\n\n inc XClmPos\n\n lda XClmPos\n cmp #80\n bne :Loop\n\n]rts rts\n\n*-------------------------------\n*\n*  Delta Expand\n*\n*  In: A = hi byte of crunched data address (in auxmem)\n*\n*-------------------------------\nDeltaExp\n sta RAMRDaux\n\n sta CrnDatPtr+1\n\n lda #0\n sta CrnDatPtr\n\n sta XClmPos\n\n:Loop ldy #0\n lda (CrnDatPtr),y\n cmp #-1\n beq :Done\n\n sta ByteHld\n and #$80\n beq :ExpandOne\n\n lda ByteHld\n and #$7f\n beq :NewCoord\n\n tax\n\n ldy #1\n lda (CrnDatPtr),y\n jsr ExpClmSeq1\n\n clc\n lda CrnDatPtr\n adc #2\n sta CrnDatPtr\n bcc :a4\n inc CrnDatPtr+1\n:a4\n jmp :Next\n\n:NewCoord\n ldy #1\n lda (CrnDatPtr),y\n sta XClmPos\n\n ldy #2\n lda (CrnDatPtr),y\n sta YScrPos\n\n clc\n lda CrnDatPtr\n adc #3\n sta CrnDatPtr\n bcc :a7\n inc CrnDatPtr+1\n:a7\n jmp :Next\n\n:ExpandOne\n lda ByteHld\n ldx #1\n jsr ExpClmSeq1\n\n inc CrnDatPtr\n bne :sysi8\n inc CrnDatPtr+1\n:sysi8\n\n:Next lda XClmPos\n cmp #$80\n bne :Loop\n\n:Done sta RAMRDmain\n]rts rts\n\n*-------------------------------\n*\n*  Expand Column\n*\n*-------------------------------\nExpandClm\n\n:Loop ldy #0\n lda (CrnDatPtr),y\n sta ByteHld\n and #$80\n beq :ExpandOne\n\n ldy #1\n lda (CrnDatPtr),y\n tax\n lda ByteHld\n and #$7f\n jsr ExpClmSeq\n\n clc\n lda CrnDatPtr\n adc #2\n sta CrnDatPtr\n bcc :a4\n inc CrnDatPtr+1\n:a4\n jmp :Next\n\n:ExpandOne\n lda ByteHld\n ldx #1\n jsr ExpClmSeq\n\n inc CrnDatPtr\n bne :sysi5\n inc CrnDatPtr+1\n:sysi5\n\n:Next lda YScrPos\n cmp #192\n bcc :Loop\n\n rts\n\n*-------------------------------\n*\n*  Expand Column Sequence\n*\n*-------------------------------\n*\n*  In: XClmPos\n*      YScrPos\n*      A (byte pattern)\n*      X (repeat count)\n*\n*  Out: YScrPos (modified)\n*\n*-------------------------------\nExpClmSeq\n sta ByteHld\n stx RepeatCdn\n\n:Loop ldx XClmPos\n ldy YScrPos\n lda ByteHld\n jsr PutScrByte\n\n lda YScrPos\n clc\n adc #2\n sta YScrPos\n\n dec RepeatCdn\n bne :Loop\n\n rts\n\n*-------------------------------\n*\n* Expand Column Sequence 1\n*\n*-------------------------------\nExpClmSeq1\n sta ByteHld\n stx RepeatCdn\n\n:Loop ldx XClmPos\n ldy YScrPos\n lda ByteHld\n bmi :Next\n\n jsr PutScrByte\n\n:Next inc YScrPos\n\n lda YScrPos\n cmp #192\n bne :SkipXInc\n\n lda #0\n sta YScrPos\n\n inc XClmPos\n\n:SkipXInc\n dec RepeatCdn\n bne :Loop\n\n rts\n\n*-------------------------------\n*\n*  Put DHires Byte Value\n*\n*-------------------------------\n*\n*  In:  X (XClmPos)\n*       Y (YScrPos)\n*       A (Byte value)\n*\n*-------------------------------\nPutScrByte\n sta ByteHld\n ;YScrPos in Y\n lda YLO,y\n sta ScrBasPtr\n lda YHI,y\n ora #$20 ;DHires page 1\n sta ScrBasPtr+1\n\n txa ;XClmPos in X\n lsr\n tay\n bcs NoAuxSet\n\n sta RAMWRTaux\n\nNoAuxSet lda ByteHld\n sta (ScrBasPtr),y\n\n sta RAMWRTmain\n\n]rts rts\n\n*-------------------------------\n*\n* P U R P L E\n*\n*-------------------------------\n do ThreeFive\nPURPLE rts\n\n else\n put purple\n fin\n\n*-------------------------------\n*\n*  Delta Expand (Pop or Wipe)\n*\n*  In: A = hi byte of crunched data address (in auxmem)\n*\n*-------------------------------\nDELTAEXPPOP\n sta PAGE2on\n]DE jsr DeltaExp\n sta PAGE2off\n sta RAMRDaux\n sta RAMWRTaux\n]rts rts\n\nDELTAEXPWIPE\n sta PAGE2off\n jmp ]DE\n\n*-------------------------------\n*\n* Invert Y-tables\n*\n*-------------------------------\nINVERTY\n ldx #191 ;low line\n ldy #0 ;high line\n\n* Switch low & high lines\n\n:loop lda YLO,x\n pha\n lda YLO,y\n sta YLO,x\n pla\n sta YLO,y\n\n lda YHI,x\n pha\n lda YHI,y\n sta YHI,x\n pla\n sta YHI,y\n\n* Move 1 line closer to ctr\n\n dex\n iny\n cpy #96\n bcc :loop\n]rts rts\n\n*-------------------------------\n*\n* Prompt user to insert correct disk side\n*\n*-------------------------------\n do ThreeFive\nmsg1 asc \"    Insert Prince of Persia Disk@\"\n else\nmsg1 asc \"Insert Prince of Persia Disk, Side \"\n fin\n\nmsg2 asc \"C@\"\n\n*-------------------------------\nPROMPT\n lda #\"A\"\n ldx BBundID\n cpx #POPside1\n beq :1\n lda #\"B\"\n:1 sta msg2 ;side A or B?\n\n jsr blackout\n\n sta RAMWRTmain\n\n ldx #0\n:loop lda msg1,x\n cmp #\"@\"\n beq :done\n sta $528+2,x ;midscrn\n inx\n bpl :loop\n\n:done sta RAMWRTaux\n jsr whoop ;whoop spkr\n\n:wloop lda $c000\n ora $c061\n ora $c062\n bpl :wloop\n sta $c010\n\n jmp clr ;clear screen\n\n*-------------------------------\nCLR bit RWBANK2\n bit RWBANK2\n\n sta $c010\n\n lda #\" \"\n jmp _lrcls ;in hires\n\n*-------------------------------\n*\n* Show black screen (text page 1)\n*\n*-------------------------------\nBLACKOUT\n jsr CLR\n\nTEXT sta RAMRDaux\n jsr vblank\n sta TEXTon\n sta ADCOLoff\n sta PAGE2off\n]rts rts\n\n*-------------------------------\n* Set dbl hires\n*-------------------------------\nSETDHIRES\n sta RAMRDaux\n sta RAMWRTaux\n jsr vblank\n sta ADCOLon\n bit HIRESon\n\n bit DHIRESon\n bit DHIRESoff\n bit DHIRESon\n bit DHIRESoff\n bit DHIRESon ;for old Apple RGB card\n\n sta TEXToff\n rts\n\n*-------------------------------\n lst\neof ds 1\n usr $a9,2,$a00,*-org\n lst off\n"
  },
  {
    "path": "04 Support/MakeDisk/S/VERSION.S",
    "content": "* version\norg = $dfd8\n lst off\n\n org org\n\n*-------------------------------\n\nTextLine asc \"Prince of Persia 1.0  1/23/90 special\"\n lst\n asc \"@\"\n*-------------------------------\n usr $a9,19,$11d8,*-org\n lst off\n"
  },
  {
    "path": "04 Support/MakeDisk/USR18.S",
    "content": "    lst off\n\norg = $2FF\n\nfloppyslot = 6\nfloppydrive = 2\n\n*\n* Merlin 2.52 --> RW18 \"USR\" interface routine.\n* by Roland Gustafsson\n*\n* Merlin USR routine for writing out 18 sector data.\n* This is the code that gets executed when the USR\n* pseudo-op is specified.  The parameters passed are:\n*\n* usr <BbundID>,<track>,<byte offset 0-$11FF>,<byte length>\n*\n* An easy way to specify length is to allocate X number\n* of bytes for each module and use that number for len.\n* To specify exact length, use org = $(org) at top of\n* your source code, then \"org org\" instead of usual\n* org (origin).  That way you specify length by simply\n* using \"*-org\".\n*\n\n*-------------------------------\n*\n* Stuff in aux memory:\n*\nrw18 = $6900 ;uses $1000-1AFF for tables\ntemp18buf = $6E00\nobj_buf = $8000\n\n* zpage\n dum $60\nobj_lo ds 1\nobj_hi ds 1\ndst_lo ds 1\ndst_hi ds 1\nlen_lo ds 1\nlen_hi ds 1\nflushflag ds 1\n dend\nslot = $FD\n\n* Merlin stuff\n\nusrads = $B6DA ;vector set up by INSTALL18\neval = $E5F9\npassnum = $02\nvalue = $55\n*-------------------------------\n org org\n db eof-*-1\n*-------------------------------\n*\n* This routine at $300 must be in both main and aux!\n*\n*-------------------------------\n*\n* Here is the USR routine:\n*\nuser lda passnum\n bne :0\n rts\n\n* Pass 2 so do your stuff!\n\n:0 ldx #0\n ldy #<obj_buf\n lda #>obj_buf\n sty obj_lo\n sta obj_hi\n\n* Get BbundID\n\n jsr get16bit\n tya\n pha\n\n* Get track number\n\n jsr get16bit\n tya\n pha\n\n* get offset into track data\n\n jsr get16bit\n sty dst_lo\n clc\n adc #>temp18buf\n sta dst_hi\n\n* get length of data to be written out\n\n jsr get16bit\n sty len_lo\n sta len_hi\n\n pla\n sta $C003 ;aux mem\n sta $C005\n sta track\n\n pla\n sta BbundID\n\n* Turn off any interupts and save status\n\n php\n sei\n\n jsr rw18\n db 7\nBbundID db $a9\n\n* turn on drive and delay .5 seconds\n\n ldx #floppyslot*16\n stx slot\n ldx #floppydrive\n stx drive\n\n jsr rw18\n db 0\ndrive db 2,5\n\n* seek desired track\n\n jsr rw18\n db 2,1\ntrack db 0\n\n* read in current data\n\n jsr rw18\n db $83,>temp18buf\n\n:movebyte ldy #0\n sty flushflag\n lda (obj_lo),y\n sta (dst_lo),y\n\n inc obj_lo\n bne *+4\n inc obj_hi\n\n inc dst_lo\n bne *+4\n inc dst_hi\n\n lda len_lo\n bne *+4\n dec len_hi\n dec len_lo\n\n lda dst_hi\n cmp #>temp18buf+$1200\n bne *+5\n jsr flush?\n\n lda len_lo\n ora len_hi\n bne :movebyte\n\n jsr flush?\n\n* turn off drive and get out of here!\n\n jsr rw18\n db 1\n\n sta $C002\n sta $C004\n plp\n rts\n\n*-------------------------------\n*\n* If data has been written to temp18buf,\n* then flush the buffer!\n*\nflush? lda flushflag\n bne :nodata\n\n ldy #<temp18buf\n lda #>temp18buf\n sty dst_lo\n sta dst_hi\n jsr rw18\n db $C5,>temp18buf\n\n lda len_lo\n ora len_hi\n beq :nodata\n\n* read in current data\n\n jsr rw18\n db $83,>temp18buf\n\n inc flushflag\n\n:nodata rts\n*-------------------------------\n*\n* Get 16bit number from source code\n*\nget16bit jsr eval\n ldy value\n lda value+1\n inx\n rts\neof\n*------------------------------- end of file!\n sav usr18\n"
  },
  {
    "path": "LICENSE",
    "content": "Please refer to the README file for licensing information."
  },
  {
    "path": "README.md",
    "content": "# Prince of Persia Apple II\n\nSome background: This archive contains the source code for the original Prince of Persia game that I wrote on the Apple II, in 6502 assembly language, between 1985-89. The game was first released by Broderbund Software in 1989, and is part of the ongoing Ubisoft game franchise.\n\nFor a capsule summary of Prince of Persia's 35-year history, and my involvement with its various incarnations, see [jordanmechner.com](https://jordanmechner.com/).\n\nFor those interested in a fuller understanding of the context -- creative, business, personal, and technical -- in which this source code was created, I've [published my dev journals](https://jordanmechner.com/en/books/journals) from that period. I've also written and drawn a graphic novel, [REPLAY (2023)](https://jordanmechner.com/en/books/replay), in which I recount my Apple II game-development adventures in the context of my personal and family story (with a snippet of 6502 code on page 73).\n\nFor those who'd like to dig into the source code itself, I've posted an explanatory technical document at [jordanmechner.com/library](https://jordanmechner.com/en/library) which should help. This is a package I put together in October 1989 for the benefit of the teams that were undertaking the ports of POP to various platforms such as PC, Amiga, Sega, Genesis, etc.\n\nBeyond that, please don't ask me to explain anything about the source code, because I don't remember! I hung up my 6502 programming guns in October 1989, and after two decades working primarily as a writer, game designer, and creative director, to say my coding skills are rusty would be an understatement.\n\nThanks to [The Internet Archive's](https://archive.org) [Jason Scott](http://www.textfiles.com) and the late [Tony Diaz](http://www.apple2.org) for successfully extracting the source code from a 22-year-old 3.5\" floppy disk archive, a task that took most of a long day and night, and would have taken much longer if not for Tony's incredible expertise, perseverence, and well-maintained collection of vintage Apple hardware.\n\nWe extracted and posted the 6502 code because it was a piece of computer history that could be of interest to others, and because if we hadn't, it might have been lost for all time. We did this for fun, not profit. As the author and copyright holder of this source code, I personally have no problem with anyone studying it, modifying it, attempting to run it, etc. Please understand that this does NOT constitute a grant of rights of any kind in Prince of Persia, which is an ongoing Ubisoft game franchise. Ubisoft alone has the right to make and distribute Prince of Persia games.\n\nThat's about all I know. If additional information becomes available, I'll post about it. My current social media account links are on the home page of [jordanmechner.com](https://jordanmechner.com), along with my monthly email newsletter and RSS feed. In the meantime, if you have questions -- technical, legal, or otherwise -- I recommend that you direct them to the community at large, whose collective knowledge and expertise far exceeds mine, and will only increase as more people get their eyes on this code.\n\nAs for me, it's time to get back to my day job of making new games and making up stories.\n\nHave fun!\n\n-- Jordan Mechner (Updated September 2024)\n"
  }
]