10REM Juggling program 20REM For Acorn Electron, BBC or Master Microcomputers 30REM By Nick Jameson in 2004 40REM nojameson@hotmail.co.uk 50 60IFPAGE>&E00 OSCLI"KEY 0 ""*T.|MF.I%=PAGE TOTOP S.4:!(I%-PAGE+&E00)=!I%:N.|MPAGE=&E00|MO.|MRU.|M""":OSCLI"FX138 0 128":END 70MODE6:VDU28,0,24,39,20:HIMEM=&7900:?2=0:?3=&60 80ENVELOPE1,4,2,0,0,100,0,0,126,0,0,-126,126,126 90REM Un-REM next line to disable sound 100REM*FX210 1 110PROCPREP:nballs=6:PROCASM:PROCCALC 120CLEAR:MODE4:VDU23,1,0;0;0;0; 130CALLG% 140DEFPROCASM:ballx=&A01:bally=&A11:balllsb=&A21:ballmsb=&A31:q=&A41 150FORp=0TO2STEP2:P%=TOP:[OPTp 160.plan 170EQUB4:EQUB4:EQUB4:EQUB4:EQUB5:EQUB3:EQUB4:EQUB4:EQUB4:EQUB4:EQUB5:EQUB3:EQUB4:EQUB4:EQUB5:EQUB3:EQUB4:EQUB4:EQUB4:EQUB4:EQUB4:EQUB4:EQUB4:EQUB5:EQUB3:EQUB4:EQUB4:EQUB4:EQUB4:EQUB4:EQUB4:EQUB4 180EQUB4:EQUB5:EQUB3:EQUB5:EQUB3:EQUB4:EQUB4:EQUB4:EQUB4:EQUB4:EQUB5:EQUB3:EQUB5:EQUB3:EQUB5:EQUB3:EQUB5:EQUB3:EQUB5:EQUB3:EQUB5:EQUB3:EQUB5:EQUB3:EQUB5:EQUB3:EQUB5:EQUB3:EQUB4 190EQUB5:EQUB3:EQUB4:EQUB5:EQUB3:EQUB4:EQUB5:EQUB3:EQUB4:EQUB5:EQUB3:EQUB4:EQUB5:EQUB3:EQUB4:EQUB5:EQUB3:EQUB4:EQUB5:EQUB3:EQUB4:EQUB5:EQUB3:EQUB4:EQUB4:EQUB4:EQUB5:EQUB3 200EQUB0:.ball LDA#0:STA&73 210LDA&71:AND#&F8:STA&72 220ASLA:ROL&73:ASLA:ROL&73 230ADC&72:STA&72 240LDA#0:ADC&73 250ASL&72:ROLA:ASL&72:ROLA:ASL&72:ROLA:TAX 260LDA&72:ADC#&60:STA&72 270TXA:ADC#&59:STA&73 280LDA&70:AND#&F8:ADC&72:STA&72 290LDA&73:ADC#0:STA&73 300LDA&72:ADC#8:STA&74 310LDA&73:ADC#0:STA&75 320LDA&70:AND#7:TAX 330LDA&71:AND#7:TAY 340LDAbL,X:EOR(&72),Y:STA(&72),Y 350LDAbR,X:EOR(&74),Y:STA(&74),Y 360DEY:BPLok1:JSRsub:.ok1 370LDAcL,X:EOR(&72),Y:STA(&72),Y 380LDAcR,X:EOR(&74),Y:STA(&74),Y 390DEY:BPLok2:JSRsub:.ok2 400LDAdL,X:EOR(&72),Y:STA(&72),Y 410LDAdR,X:EOR(&74),Y:STA(&74),Y 420DEY:BPLok3:JSRsub:.ok3 430LDAdL,X:EOR(&72),Y:STA(&72),Y 440LDAdR,X:EOR(&74),Y:STA(&74),Y 450DEY:BPLok4:JSRsub:.ok4 460LDAdL,X:EOR(&72),Y:STA(&72),Y 470LDAdR,X:EOR(&74),Y:STA(&74),Y 480DEY:BPLok5:JSRsub:.ok5 490LDAdL,X:EOR(&72),Y:STA(&72),Y 500LDAdR,X:EOR(&74),Y:STA(&74),Y 510DEY:BPLok6:JSRsub:.ok6 520LDAdL,X:EOR(&72),Y:STA(&72),Y 530LDAdR,X:EOR(&74),Y:STA(&74),Y 540DEY:BPLok7:JSRsub:.ok7 550LDAcL,X:EOR(&72),Y:STA(&72),Y 560LDAcR,X:EOR(&74),Y:STA(&74),Y 570DEY:BPLok8:JSRsub:.ok8 580LDAbL,X:EOR(&72),Y:STA(&72),Y 590LDAbR,X:EOR(&74),Y:STA(&74),Y 600RTS 610.sub 620LDA&72:SBC#&3F:STA&72 630LDA&73:SBC#1:STA&73 640LDA&74:SBC#&40:STA&74 650LDA&75:SBC#1:STA&75 660LDY#7:RTS 670.bL EQUD&070F1F3E:EQUD&00000103 680.bR EQUD&C0800000:EQUD&7CF8F0E0 690.cL EQUD&0F1F3F7F:EQUD&00010307 700.cR EQUD&E0C08000:EQUD&FEFCF8F0 710.dL EQUD&1F3F7FFF:EQUD&0103070F 720.dR EQUD&F0E0C080:EQUD&FFFEFCF8 730.hand 740LDA#0:STA&73 750LDA&71:AND#&F8:STA&72 760ASLA:ROL&73:ASLA:ROL&73 770ADC&72:STA&72 780LDA#0:ADC&73 790ASL&72:ROLA:ASL&72:ROLA:ASL&72:ROLA:TAX 800LDA&72:ADC#&60:STA&72 810TXA:ADC#&59:STA&73 820LDA&70:AND#&F8:ADC&72:STA&72 830LDA&73:ADC#0:STA&73 840LDA&72:ADC#8:STA&74 850LDA&73:ADC#0:STA&75 860LDA&70:AND#7:TAX 870LDA&71:AND#7:TAY 880LDAal,X:EOR(&72),Y:STA(&72),Y 890LDAal,X:EOR(&74),Y:STA(&74),Y 900INY:CPY#8:BNEhok0:JSRadd:.hok0 910LDAbl,X:EOR(&72),Y:STA(&72),Y 920LDAbr,X:EOR(&74),Y:STA(&74),Y 930INY:CPY#8:BNEhok1:JSRadd:.hok1 940LDAcL,X:EOR(&72),Y:STA(&72),Y 950LDAcR,X:EOR(&74),Y:STA(&74),Y 960INY:CPY#8:BNEhok2:JSRadd:.hok2 970LDAbL,X:EOR(&72),Y:STA(&72),Y 980LDAbR,X:EOR(&74),Y:STA(&74),Y 990RTS 1000.add 1010LDA&72:ADC#&3F:STA&72 1020LDA&73:ADC#1:STA&73 1030LDA&74:ADC#&40:STA&74 1040LDA&75:ADC#1:STA&75 1050LDY#0:RTS 1060.al EQUD&10204080:EQUD&01020408 1070.bl EQUD&183060C1:EQUD&0103060C 1080.br EQUD&3060C080:EQUD&83060C18 1090] 1100t4l=P%:P%=P%+(FPB%*3+1)*2 1110t4r=P%:P%=P%+(FPB%*3+1)*2 1120t5r=P%:P%=P%+(FPB%*4+1)*2 1130t3l=P%:P%=P%+(FPB%*2+1)*2 1140t5l=P%:P%=P%+(FPB%*4+1)*2 1150t3r=P%:P%=P%+(FPB%*2+1)*2 1160lc4t4=P%:P%=P%+FPB%*2 1170lt4c4=P%:P%=P%+FPB%*2 1180rc4t4=P%:P%=P%+FPB%*2 1190rt4c4=P%:P%=P%+FPB%*2 1200lc4t3=P%:P%=P%+FPB%*2 1210lt3c4=P%:P%=P%+FPB%*2 1220lc5t4=P%:P%=P%+FPB%*2 1230lt4c5=P%:P%=P%+FPB%*2 1240lc5t3=P%:P%=P%+FPB%*2 1250lt3c5=P%:P%=P%+FPB%*2 1260lc4t5=P%:P%=P%+FPB%*2 1270lt5c4=P%:P%=P%+FPB%*2 1280lc3t4=P%:P%=P%+FPB%*2 1290lt4c3=P%:P%=P%+FPB%*2 1300lc3t5=P%:P%=P%+FPB%*2 1310lt5c3=P%:P%=P%+FPB%*2 1320lc3t3=P%:P%=P%+FPB%*2 1330lt3c3=P%:P%=P%+FPB%*2 1340lc5t5=P%:P%=P%+FPB%*2 1350lt5c5=P%:P%=P%+FPB%*2 1360rc4t5=P%:P%=P%+FPB%*2 1370rt5c4=P%:P%=P%+FPB%*2 1380rc3t4=P%:P%=P%+FPB%*2 1390rt4c3=P%:P%=P%+FPB%*2 1400rc3t5=P%:P%=P%+FPB%*2 1410rt5c3=P%:P%=P%+FPB%*2 1420rc4t3=P%:P%=P%+FPB%*2 1430rt3c4=P%:P%=P%+FPB%*2 1440rc5t4=P%:P%=P%+FPB%*2 1450rt4c5=P%:P%=P%+FPB%*2 1460rc5t3=P%:P%=P%+FPB%*2 1470rt3c5=P%:P%=P%+FPB%*2 1480rc3t3=P%:P%=P%+FPB%*2 1490rt3c3=P%:P%=P%+FPB%*2 1500rc5t5=P%:P%=P%+FPB%*2 1510rt5c5=P%:P%=P%+FPB%*2 1520[OPTp:.G% LDA#4:STA&A00 1530LDX#nballs-1:LDA#0:.lp STAballx,X:STAbally,X:STAballmsb,X:DEX:BPLlp 1540LDX#15:.lp STAq,X:DEX:BPLlp 1550STA&81:STA&82:STA&84:STA&85:STA&86:STA&87:STA&88:STA&89:STA&8B 1560JSRgetnextbeat 1570LDA#FPB%-1:STA&80 1580.frame LDA#1:STA&70:.lp LDA#19:JSR&FFF4:DEC&70:BNElp:SEI 1590LDA#nballs-1:STA&76 1600.blp LDX&76 1610LDAballx,X:STA&70:LDAbally,X:STA&71:ORA&70:BEQnooldone:JSRball:LDX&76:LDA#0:STAballx,X:STAbally,X:.nooldone 1620LDAballmsb,X:BEQnxball:STA&78 1630LDAballlsb,X:STA&77 1640LDY#0:LDA(&77),Y:STAballx,X:STA&70 1650INY:LDA(&77),Y:STAbally,X:STA&71 1660JSRball:LDX&76 1670LDA&77:CLC:ADC#2:STA&77:STAballlsb,X 1680LDA&78:ADC#0:STA&78:STAballmsb,X 1690LDY#0:LDA(&77),Y 1700INY:ORA(&77),Y:BNEnxball 1710STAballmsb,X 1720.nxball DEC&76:BPLblp 1730LDA&84:STA&70:LDA&85:STA&71:ORA&70:BEQnol:JSRhand:LDA&8C:BEQnol:JSRball:.nol 1740LDA&86:STA&70:LDA&87:STA&71:ORA&70:BEQnor:JSRhand:LDA&8D:BEQnor:JSRball:.nor 1750LDA#0:STA&8F:LDA&82:BEQlct:JMPltc:.lct 1760LDA&89:ASLA:ASLA:ASLA:ASLA:ORA&83:TAY 1770CPY#&44:BNEnlc4t4:LDA#lc4t4 AND255:STA&8E:LDA#lc4t4 DIV256:STA&8F:.nlc4t4 1780CPY#&43:BNEnlc4t3:LDA#lc4t3 AND255:STA&8E:LDA#lc4t3 DIV256:STA&8F:.nlc4t3 1790CPY#&54:BNEnlc5t4:LDA#lc5t4 AND255:STA&8E:LDA#lc5t4 DIV256:STA&8F:.nlc5t4 1800CPY#&53:BNEnlc5t3:LDA#lc5t3 AND255:STA&8E:LDA#lc5t3 DIV256:STA&8F:.nlc5t3 1810CPY#&45:BNEnlc4t5:LDA#lc4t5 AND255:STA&8E:LDA#lc4t5 DIV256:STA&8F:.nlc4t5 1820CPY#&34:BNEnlc3t4:LDA#lc3t4 AND255:STA&8E:LDA#lc3t4 DIV256:STA&8F:.nlc3t4 1830CPY#&35:BNEnlc3t5:LDA#lc3t5 AND255:STA&8E:LDA#lc3t5 DIV256:STA&8F:.nlc3t5 1840CPY#&33:BNEnlc3t3:LDA#lc3t3 AND255:STA&8E:LDA#lc3t3 DIV256:STA&8F:.nlc3t3 1850CPY#&55:BNEnlc5t5:LDA#lc5t5 AND255:STA&8E:LDA#lc5t5 DIV256:STA&8F:.nlc5t5 1860LDA#1:STA&8C:LDX#0:JSRhb:JMPrh 1870.ltc LDA&88:ASLA:ASLA:ASLA:ASLA:ORA&8A:TAY 1880CPY#&44:BNEnlt4c4:LDA#lt4c4 AND255:STA&8E:LDA#lt4c4 DIV256:STA&8F:.nlt4c4 1890CPY#&34:BNEnlt3c4:LDA#lt3c4 AND255:STA&8E:LDA#lt3c4 DIV256:STA&8F:.nlt3c4 1900CPY#&45:BNEnlt4c5:LDA#lt4c5 AND255:STA&8E:LDA#lt4c5 DIV256:STA&8F:.nlt4c5 1910CPY#&35:BNEnlt3c5:LDA#lt3c5 AND255:STA&8E:LDA#lt3c5 DIV256:STA&8F:.nlt3c5 1920CPY#&54:BNEnlt5c4:LDA#lt5c4 AND255:STA&8E:LDA#lt5c4 DIV256:STA&8F:.nlt5c4 1930CPY#&43:BNEnlt4c3:LDA#lt4c3 AND255:STA&8E:LDA#lt4c3 DIV256:STA&8F:.nlt4c3 1940CPY#&53:BNEnlt5c3:LDA#lt5c3 AND255:STA&8E:LDA#lt5c3 DIV256:STA&8F:.nlt5c3 1950CPY#&33:BNEnlt3c3:LDA#lt3c3 AND255:STA&8E:LDA#lt3c3 DIV256:STA&8F:.nlt3c3 1960CPY#&55:BNEnlt5c5:LDA#lt5c5 AND255:STA&8E:LDA#lt5c5 DIV256:STA&8F:.nlt5c5 1970LDA#0:STA&8C:LDX#0:JSRhb 1980.rh LDA#0:STA&8F:LDA&82:BNErct:JMPrtc:.rct 1990LDA&89:ASLA:ASLA:ASLA:ASLA:ORA&83:TAY 2000CPY#&44:BNEnrc4t4:LDA#rc4t4 AND255:STA&8E:LDA#rc4t4 DIV256:STA&8F:.nrc4t4 2010CPY#&45:BNEnrc4t5:LDA#rc4t5 AND255:STA&8E:LDA#rc4t5 DIV256:STA&8F:.nrc4t5 2020CPY#&34:BNEnrc3t4:LDA#rc3t4 AND255:STA&8E:LDA#rc3t4 DIV256:STA&8F:.nrc3t4 2030CPY#&35:BNEnrc3t5:LDA#rc3t5 AND255:STA&8E:LDA#rc3t5 DIV256:STA&8F:.nrc3t5 2040CPY#&43:BNEnrc4t3:LDA#rc4t3 AND255:STA&8E:LDA#rc4t3 DIV256:STA&8F:.nrc4t3 2050CPY#&54:BNEnrc5t4:LDA#rc5t4 AND255:STA&8E:LDA#rc5t4 DIV256:STA&8F:.nrc5t4 2060CPY#&53:BNEnrc5t3:LDA#rc5t3 AND255:STA&8E:LDA#rc5t3 DIV256:STA&8F:.nrc5t3 2070CPY#&33:BNEnrc3t3:LDA#rc3t3 AND255:STA&8E:LDA#rc3t3 DIV256:STA&8F:.nrc3t3 2080CPY#&55:BNEnrc5t5:LDA#rc5t5 AND255:STA&8E:LDA#rc5t5 DIV256:STA&8F:.nrc5t5 2090LDA#1:STA&8D:LDX#2:JSRhb:JMPrd 2100.rtc LDA&88:ASLA:ASLA:ASLA:ASLA:ORA&8A:TAY 2110CPY#&44:BNEnrt4c4:LDA#rt4c4 AND255:STA&8E:LDA#rt4c4 DIV256:STA&8F:.nrt4c4 2120CPY#&54:BNEnrt5c4:LDA#rt5c4 AND255:STA&8E:LDA#rt5c4 DIV256:STA&8F:.nrt5c4 2130CPY#&43:BNEnrt4c3:LDA#rt4c3 AND255:STA&8E:LDA#rt4c3 DIV256:STA&8F:.nrt4c3 2140CPY#&53:BNEnrt5c3:LDA#rt5c3 AND255:STA&8E:LDA#rt5c3 DIV256:STA&8F:.nrt5c3 2150CPY#&34:BNEnrt3c4:LDA#rt3c4 AND255:STA&8E:LDA#rt3c4 DIV256:STA&8F:.nrt3c4 2160CPY#&45:BNEnrt4c5:LDA#rt4c5 AND255:STA&8E:LDA#rt4c5 DIV256:STA&8F:.nrt4c5 2170CPY#&35:BNEnrt3c5:LDA#rt3c5 AND255:STA&8E:LDA#rt3c5 DIV256:STA&8F:.nrt3c5 2180CPY#&33:BNEnrt3c3:LDA#rt3c3 AND255:STA&8E:LDA#rt3c3 DIV256:STA&8F:.nrt3c3 2190CPY#&55:BNEnrt5c5:LDA#rt5c5 AND255:STA&8E:LDA#rt5c5 DIV256:STA&8F:.nrt5c5 2200LDA#0:STA&8D:LDX#2:JSRhb:.rd 2210LDX&80:INX:STX&80:CPX#FPB%:BEQdothrow:JMPnothrow:.dothrow 2220LDX#0:STX&80 2230LDX&83:STX&88:LDY&8A:STY&89 2240LDA&82:EOR#1:STA&82:BEQtfr 2250CPX#4:BNEnt4l:LDA#t4l AND255:STA&70:LDA#t4l DIV256:STA&71:JMPthrow:.nt4l 2260CPX#5:BNEnt5l:LDA#t5l AND255:STA&70:LDA#t5l DIV256:STA&71:JMPthrow:.nt5l 2270CPX#3:BNEnt3l:LDA#t3l AND255:STA&70:LDA#t3l DIV256:STA&71:JMPthrow:.nt3l 2280JMPbadthrow 2290.tfr 2300CPX#4:BNEnt4r:LDA#t4r AND255:STA&70:LDA#t4r DIV256:STA&71:JMPthrow:.nt4r 2310CPX#5:BNEnt5r:LDA#t5r AND255:STA&70:LDA#t5r DIV256:STA&71:JMPthrow:.nt5r 2320CPX#3:BNEnt3r:LDA#t3r AND255:STA&70:LDA#t3r DIV256:STA&71:JMPthrow:.nt3r 2330.badthrow EQUW0:EQUS"Bad throw":BRK 2340.throw 2350LDX#nballs-1:.lp LDAballmsb,X:BEQffb:DEX:BPLlp:EQUW0:EQUS"nfb":BRK 2360.ffb LDA&70:STAballlsb,X:LDA&71:STAballmsb,X 2370JSRgetnextbeat:LDX&88:LDAsong,X:STApblock+4 2380LDX#pblock AND255:LDY#pblock DIV256 2390LDA#7:JSR&FFF1 2400.nothrow 2410CLI:LDA#&81:LDX#&EC:LDY#&FF:JSR&FFF4:TYA:BEQnpr5:LDA#5:STA&A00:.npr5 LDA#&81:LDX#&ED:LDY#&FF:JSR&FFF4:TYA:BEQnpr4:LDA#4:STA&A00:.npr4 LDA#&81:LDX#&EE:LDY#&FF:JSR&FFF4:TYA:BEQnpr3:LDA#3:STA&A00:.npr3 2420JMPframe 2430.song EQUB0:EQUB0:EQUB0:EQUB76:EQUB92:EQUB112 2440.pblock EQUW1:EQUW1:EQUW7:EQUW5 2450.alwaysA STA&83:JMPgotn 2460.getnextbeat LDA&A00:CMP#5:BEQalwaysA:CMP#3:BEQalwaysA:LDX&8B:.kl LDAplan,X:BNEgoo:TAX:BEQkl:.goo STA&83:INX:STX&8B 2470.gotn CLC:ADC&81:SEC:SBC#1:AND#15:TAY:LDA&83:STAq,Y 2480LDX&81:LDAq,X:STA&8A:LDA#0:STAq,X:INX:TXA:AND#15:STA&81 2490RTS 2500.hb STA&7F:LDA&8E:CLC:ADC&80:STA&8E:LDA&8F:BEQnp:ADC#0:STA&8F:LDA&8E:ADC&80:STA&8E:LDA&8F:ADC#0:STA&8F:LDY#0:LDA(&8E),Y:STA&70:STA&84,X:INY:LDA(&8E),Y:STA&71:STA&85,X:ORA&70:BEQnhz:JSRhand:LDA&7F:BEQnhz:JMPball 2510.np LDA#0:STA&84,X:STA&85,X:.nhz RTS 2520]NEXT:PRINT~P%:IFP%>&5800 STOP 2530ENDPROC 2540DEFPROCPREP 2550FPB%=16 2560SWIP=50:EYIP=175 2570AT=1:PT=AT/4 2580PC=.8:AC=PC/4 2590REMAT=1:PT=0:AC=0:PC=1 2600H5IM=FPB%*FPB%*9.80665/1250 2610H5ISW=3.07053979 2620SWIM=H5IM/H5ISW 2630REMSWIM=0.4318 2640H5ISW=H5IM/SWIM 2650MIP=SWIP/SWIM 2660H5IP=H5ISW*SWIP 2670G=H5IP/(2*FPB%*FPB%) 2680PRINT"BPM=";3000/FPB% 2690REMDRAW0,4*MIP:VDU5:PRINT"1m":VDU4 2700ENDPROC 2710DEFFNXIP(XISW):=128+SWIP*XISW 2720DEFFNYIP(YISW):=EYIP-SWIP*YISW 2730DEFPROCCALC 2740LHT4X=FNXIP(-.15):LHT4Y=FNYIP(0) 2750LHC4X=FNXIP(-1):LHC4Y=FNYIP(0) 2760RHT4X=FNXIP(.15):RHT4Y=FNYIP(0) 2770RHC4X=FNXIP(1):RHC4Y=FNYIP(0) 2780RHT5X=FNXIP(1.7):RHT5Y=FNYIP(0) 2790RHC3X=FNXIP(1.15):RHC3Y=FNYIP(.2) 2800LHT3X=FNXIP(-.2):LHT3Y=FNYIP(.15) 2810LHC5X=FNXIP(-1):LHC5Y=FNYIP(-.4) 2820LHT5X=FNXIP(-1.7):LHT5Y=FNYIP(0) 2830LHC3X=FNXIP(-1.15):LHC3Y=FNYIP(.2) 2840RHT3X=FNXIP(.2):RHT3Y=FNYIP(.15) 2850RHC5X=FNXIP(1):RHC5Y=FNYIP(-.4) 2860 2870LHT5X=FNXIP(-.3):LHT5Y=FNYIP(-.8) 2880REM Delete next line for over the tops from right hand 2890RHT5X=FNXIP(.3):RHT5Y=FNYIP(-.8) 2900PROCT(3,LHT4X,LHT4Y,LHC4X,LHC4Y,t4l):LHT4VX=VX:LHT4V1Y=V1Y:LHT4V2Y=V2Y 2910PROCT(3,RHT4X,RHT4Y,RHC4X,RHC4Y,t4r):RHT4VX=VX:RHT4V1Y=V1Y:RHT4V2Y=V2Y 2920PROCT(4,RHT5X,RHT5Y,LHC5X,LHC5Y,t5r):RHT5VX=VX:RHT5V1Y=V1Y:RHT5V2Y=V2Y 2930PROCT(2,LHT3X,LHT3Y,RHC3X,RHC3Y,t3l):LHT3VX=VX:LHT3V1Y=V1Y:LHT3V2Y=V2Y 2940PROCT(4,LHT5X,LHT5Y,RHC5X,RHC5Y,t5l):LHT5VX=VX:LHT5V1Y=V1Y:LHT5V2Y=V2Y 2950PROCT(2,RHT3X,RHT3Y,LHC3X,LHC3Y,t3r):RHT3VX=VX:RHT3V1Y=V1Y:RHT3V2Y=V2Y 2960PROCH(LHT4X,LHT4Y,LHC4X,LHC4Y,LHT4VX*PT,LHT4V1Y*PT,LHT4VX*AC,LHT4V2Y*AC,lt4c4) 2970PROCH(LHC4X,LHC4Y,LHT4X,LHT4Y,LHT4VX*PC,LHT4V2Y*PC,LHT4VX*AT,LHT4V1Y*AT,lc4t4) 2980PROCH(RHT4X,RHT4Y,RHC4X,RHC4Y,RHT4VX*PT,RHT4V1Y*PT,RHT4VX*AC,RHT4V2Y*AC,rt4c4) 2990PROCH(RHC4X,RHC4Y,RHT4X,RHT4Y,RHT4VX*PC,RHT4V2Y*PC,RHT4VX*AT,RHT4V1Y*AT,rc4t4) 3000PROCH(LHC4X,LHC4Y,LHT3X,LHT3Y,LHT4VX*PC,LHT4V2Y*PC,LHT3VX*AT,LHT3V1Y*AT,lc4t3) 3010PROCH(RHC4X,RHC4Y,RHT3X,RHT3Y,RHT4VX*PC,RHT4V2Y*PC,RHT3VX*AT,RHT3V1Y*AT,rc4t3) 3020PROCH(LHT3X,LHT3Y,LHC4X,LHC4Y,LHT3VX*PT,LHT3V1Y*PT,LHT4VX*AC,LHT4V2Y*AC,lt3c4) 3030PROCH(RHT3X,RHT3Y,RHC4X,RHC4Y,RHT3VX*PT,RHT3V1Y*PT,RHT4VX*AC,RHT4V2Y*AC,rt3c4) 3040PROCH(LHC5X,LHC5Y,LHT4X,LHT4Y,RHT5VX*PC,RHT5V2Y*PC,LHT4VX*AT,LHT4V1Y*AT,lc5t4) 3050PROCH(RHC5X,RHC5Y,RHT4X,RHT4Y,LHT5VX*PC,LHT5V2Y*PC,RHT4VX*AT,RHT4V1Y*AT,rc5t4) 3060PROCH(LHT4X,LHT4Y,LHC5X,LHC5Y,LHT4VX*PT,LHT4V1Y*PT,RHT5VX*AC,RHT5V2Y*AC,lt4c5) 3070PROCH(RHT4X,RHT4Y,RHC5X,RHC5Y,RHT4VX*PT,RHT4V1Y*PT,LHT5VX*AC,LHT5V2Y*AC,rt4c5) 3080PROCH(RHC4X,RHC4Y,RHT5X,RHT5Y,RHT4VX*PC,RHT4V2Y*PC,RHT5VX*AT,RHT5V1Y*AT,rc4t5) 3090PROCH(LHC4X,LHC4Y,LHT5X,LHT5Y,LHT4VX*PC,LHT4V2Y*PC,LHT5VX*AT,LHT5V1Y*AT,lc4t5) 3100PROCH(RHT5X,RHT5Y,RHC4X,RHC4Y,RHT5VX*PT,RHT5V1Y*PT,RHT4VX*AC,RHT4V2Y*AC,rt5c4) 3110PROCH(LHT5X,LHT5Y,LHC4X,LHC4Y,LHT5VX*PT,LHT5V1Y*PT,LHT4VX*AC,LHT4V2Y*AC,lt5c4) 3120PROCH(RHC3X,RHC3Y,RHT4X,RHT4Y,LHT3VX*PC,LHT3V2Y*PC,RHT4VX*AT,RHT4V1Y*AT,rc3t4) 3130PROCH(LHC3X,LHC3Y,LHT4X,LHT4Y,RHT3VX*PC,RHT3V2Y*PC,LHT4VX*AT,LHT4V1Y*AT,lc3t4) 3140PROCH(RHT4X,RHT4Y,RHC3X,RHC3Y,RHT4VX*PT,RHT4V1Y*PT,LHT3VX*AC,LHT3V2Y*AC,rt4c3) 3150PROCH(LHT4X,LHT4Y,LHC3X,LHC3Y,LHT4VX*PT,LHT4V1Y*PT,RHT3VX*AC,RHT3V2Y*AC,lt4c3) 3160PROCH(LHC5X,LHC5Y,LHT3X,LHT3Y,RHT5VX*PC,RHT5V2Y*PC,LHT3VX*AT,LHT3V1Y*AT,lc5t3) 3170PROCH(RHC5X,RHC5Y,RHT3X,RHT3Y,LHT5VX*PC,LHT5V2Y*PC,RHT3VX*AT,RHT3V1Y*AT,rc5t3) 3180PROCH(LHT3X,LHT3Y,LHC5X,LHC5Y,LHT3VX*PT,LHT3V1Y*PT,RHT5VX*AC,RHT5V2Y*AC,lt3c5) 3190PROCH(RHT3X,RHT3Y,RHC5X,RHC5Y,RHT3VX*PT,RHT3V1Y*PT,LHT5VX*AC,LHT5V2Y*AC,rt3c5) 3200PROCH(RHC3X,RHC3Y,RHT5X,RHT5Y,LHT3VX*PC,LHT3V2Y*PC,RHT5VX*AT,RHT5V1Y*AT,rc3t5) 3210PROCH(LHC3X,LHC3Y,LHT5X,LHT5Y,RHT3VX*PC,RHT3V2Y*PC,LHT5VX*AT,LHT5V1Y*AT,lc3t5) 3220PROCH(RHT5X,RHT5Y,RHC3X,RHC3Y,RHT5VX*PT,RHT5V1Y*PT,LHT3VX*AC,LHT3V2Y*AC,rt5c3) 3230PROCH(LHT5X,LHT5Y,LHC3X,LHC3Y,LHT5VX*PT,LHT5V1Y*PT,RHT3VX*AC,RHT3V2Y*AC,lt5c3) 3240PROCH(RHC3X,RHC3Y,RHT3X,RHT3Y,LHT3VX*PC,LHT3V2Y*PC,RHT3VX*AT,RHT3V1Y*AT,rc3t3) 3250PROCH(RHT3X,RHT3Y,RHC3X,RHC3Y,RHT3VX*PT,RHT3V1Y*PT,LHT3VX*AC,LHT3V2Y*AC,rt3c3) 3260PROCH(RHC5X,RHC5Y,RHT5X,RHT5Y,LHT5VX*PC,LHT5V2Y*PC,RHT5VX*AT,RHT5V1Y*AT,rc5t5) 3270PROCH(RHT5X,RHT5Y,RHC5X,RHC5Y,RHT5VX*PT,RHT5V1Y*PT,LHT5VX*AC,LHT5V2Y*AC,rt5c5) 3280PROCH(LHC3X,LHC3Y,LHT3X,LHT3Y,RHT3VX*PC,RHT3V2Y*PC,LHT3VX*AT,LHT3V1Y*AT,lc3t3) 3290PROCH(LHT3X,LHT3Y,LHC3X,LHC3Y,LHT3VX*PT,LHT3V1Y*PT,RHT3VX*AC,RHT3V2Y*AC,lt3c3) 3300PROCH(LHC5X,LHC5Y,LHT5X,LHT5Y,RHT5VX*PC,RHT5V2Y*PC,LHT5VX*AT,LHT5V1Y*AT,lc5t5) 3310PROCH(LHT5X,LHT5Y,LHC5X,LHC5Y,LHT5VX*PT,LHT5V1Y*PT,RHT5VX*AC,RHT5V2Y*AC,lt5c5) 3320ENDPROC 3330DEFPROCT(B%,X1,Y1,X2,Y2,buf):T%=FPB%*B% 3340VX=(X2-X1)/T% 3350V1Y=(Y2-Y1)/T%-G*T%/2 3360V2Y=G*(T%-1)+V1Y 3370FORt%=0TOT%-1 3380?(buf+t%*2)=VX*t%+X1:?(buf+t%*2+1)=G*t%*t%/2+V1Y*t%+Y1 3390NEXT 3400?(buf+T%*2)=0:?(buf+T%*2+1)=0 3410ENDPROC 3420DEFPROCH(X1,Y1,X2,Y2,VX1,VY1,VX2,VY2,buf) 3430AX=3*(X2-X1)/(FPB%*FPB%)-(2*VX1+VX2)/FPB%:BX=(VX1+VX2)/(FPB%*FPB%)+2*(X1-X2)/(FPB%*FPB%*FPB%) 3440AY=3*(Y2-Y1)/(FPB%*FPB%)-(2*VY1+VY2)/FPB%:BY=(VY1+VY2)/(FPB%*FPB%)+2*(Y1-Y2)/(FPB%*FPB%*FPB%) 3450FORt%=0TOFPB%-1 3460?(buf+t%*2)=X1+VX1*t%+AX*t%*t%+BX*t%^3 3470?(buf+t%*2+1)=Y1+VY1*t%+AY*t%*t%+BY*t%^3 3480NEXT:ENDPROC