'POINK 'A DEMAKE OF POING! BY PAUL VAN DER VALK ON AMIGA FROM 1992 AND 98 'BY MARTIN "MOECHOFE" MAUCHAUFFEE 2018-2020 'FOR LOWRESNX BY TIMO "INUTILIS" KOSS 'REV31ALPHA 'LAST LEVEL=30 FORCELEVEL=-1 FORCELIVE=-1 TODO: '==== 'TODO IMPLEMENTS BONUS BRICK 'TODO IMPLEMENTS MALUS BRICK 'TODO TRY TO REDUCE THE SIZE OF THE TRACE 'TODO PREVENT BRICK TO BE HIT DURING ANIM 'TODO ANIMATE THE OPTION APPEAR, TO PREVENT AUTO ACTIVATE IT. 'TODO DISPLAY LAST SCORE IN TITLE SCREEN 'REMOVE STOPNOW FEATURE 'ALLOW TO PLAY WITH 2 PLAYERS 'MAKE SURE TOCLEAR IS CONSUMED BEFORE JUMPING TO NEXT OR PREV LEVEL 'JOIN SCORES AND BONUS WITH GROUPS() 'ADD EXTRA BRICKS 'SHOW DOOR ANIM DURING COMPUTE SCORE 'CHECK IF ANIM FLASH BRICK WORKS EVERY TIMES, INCREASE FLASH DURATION AND TEST. 'PAUSE AFTER GOTO NEXTACT, TO REMOVE THE TRACE 'BUG WITH BALL TRACE, MIXED GRAY 'ADD A TRACK FOR OPENDOOR 'BUG IN THE TRACE AT A SPECIFIC SPEED 'ADD SFX ON SCORE COUNTING 'MAKE A PAUSE IN THE MUSIC BEFORE CHANGING SONG 'I SHOULD CHECK ABOUT BALLTOPREV, I PROBABLY NEED TO REMOVE IT 'REVERSE BONUS VALUE 'CLEAN SLITDELAY 'BONUS SHOULD ONLY BE GIVEN AT A RESPAN AND BONUS (BALL), PANIC RECOVERY... 'WHEN HAVE 2 BALLS, LOSING ONE, AND GETTING A [B] OPTION, THE BALL DIDNT APPEAR 'MAKE A BIGGER PAUSE AFTER END GAME 'RANDOM OPTION SHOULD BE MORE RANDOM 'DETECT WHEN HITTING THE SAME BRICK OVER AND OVER, AND FINALLY BANISH IT. ALSO PREVENT SCORE TO BECOME CRAZY. 'SPEED THE BALL IF IT HIT A LOT OF TIME 'REV26ALPHA '========== 'CHANGE BAT CONTROLS 'FIX SHIFTED GROUP ID 'REMOVE BROKEN GEM ASSET 'MOVE SOME CHARACTERS 'USE BG TO REDUCE CELL OPERATION AND TOKENS COUNT 'ADD AN AUTO LAUNCH CONTROL 'REDO ANGLE GIVEN BY THE BAT 'REV27ALPHA '========== 'JOIN ALL GROUPS VARS INTO ONE, USE FIELDS 'FIX STARTPLAY WHEN JUMPTONEXT 'REDUCE STAGE LOAD CPU CONSUMPTION 'STORE CURRENT STAGE IN MEMORY, NOTE IN PACKED STRINGS 'REV28ALPHA '========== 'FIX CURRSTAGE NOT RESET AT START SESSION 'CHANGE BONUS VALUES 'ADD SPEED INCREASE AT BRICK HIT 'BLOCK JUMP NEXT WHEN JUMP BACK UNTIL THE BALL HIT THE BAT 'REV29ALPHA '========== 'DECREASE SPEED WHEN PASS A LEVEL 'SHOW DOORANIM ALWAYS 'DISPLAY OPEN EFFECT ON DOOR 'DISPLAY LOCKED EFFECT ON DOOR 'DO NOT REDISPLAY DOOR WHEN JUMPING TO STAGE WITH NO FORCE 'DO THE TRAP BRICK BEHAVIOR 'ADD PANIC RED EFFECT 'FIX BUG THAT DECREASE BALL COUNT WHEN PASSING AN ACT 'INCREASE PANIC EFFECT USING ACT INDEX 'ADD EXTRA COLLECTIBLE LETTERS TO GAIN ONE LIFE 'IF LOSE AT LAST STAGE, DONT SHOW PANIC EFFECT 'ADD FIRST MUSIC LOOP WITH VOICE SWITCHING DURING PLAY 'REV30ALPHA '========== 'ADD A SECOND MUSIC 'FIX BUG WITH INFINITE 4BRICK RESPAWN 'REDO MUSIC SWAPING TRACKS 'ADD ONE,TWO,THREE MUSIC THEMES '12 MORE TRACK FOR A 45 SONG? 'REV31ALPHA '========== 'FIX BUG WITH REVIVING LOST BALL 'FIX BUG WITH BALL BONUS AFTER LOSING ONE BALL 'NEW SONG 'ADD EXTRA LETTER BONUS 'FIX SPLIT9 RESPAWN 'REDO SCORE AND BONUS POINT 'STOP THE MUSIC WHEN LOOSING ALL BALLS 'STORE HIGH SCORE 'ABOUT BRICKS FORMAT '=================== 'FOR EACH BRICKS: '- 1ST BYTE ----XXXX: 16 ASSET MODELS/OPTIONS '- 1ST BYTE -XXX----: 8 PALETTE CHOICE '- 1ST BYTE 1-------: START HIDDEN '- 2ND BYTE -----XXX: 8 SCORE VALUE '- 2ND BYTE --XXX---: 8 GROUP 'CX,CY BACKGOUND CELL POSITIONS 'CT,CP BACKGROUND CELL TILE AND PALETTE 'BX,BY BRICK POSITIONS 'AX,AY BALL POSITIONS 'AA,AS BALL ANGLE AND SPEED 'AT BALL SPEED STEP 'NL ANGLE STEP LENGTH 'NX,NY ANGLE AXIS ADVANCE VALUE 'PERSISTENT DATA '=============== '$E000 LONG HIGH SCORE '$E004 LONG LAST SCORE '================================================================== VARS: 'BRICKS DATA (X,Y,FIELD,PLAYERSTAGE) 'FIELD 0: BRICK TYPE/ASSET MODEL (0-15) 'FIELD 1: PALETTE 'FIELD 2: HIT BEFORE DESTROY/ACTIVATE 'FIELD 3: SCORE VALUE 'FIELD 4: GROUP 'FIELD 5+6: NEXT BRICK POSITION OF SAME GROUP 'FIELD 7: ORIGINAL HIT POINT 'FIELD 8: BRICK WAS BANISHED 'FIELD 8: LAST TIME WHEN THIS BRICK HAS RESPAWNED THROUGH SPLIT DIM GLOBAL BRICKS(16,8,8,7) 'GROUPS DATA (GROUPID,FIELD,PLAYERSTAGE) 'FIELD 0-1: LINKED LIST FIRST ITEM, BRICK POSITION 'FIELD 2: REPEAT COUNTER LEFT 'FIELD 3: BRICK COUNTER LEFT 'FIELD 4: BRICK INITIAL COUNTER DIM GROUPS(6,4,7) 'SCORES VALUES DIM SCORES(7) DIM BONUSS(7) RESTORE SCORESDATA FOR I=0 TO 7 READ SCORES(I),BONUSS(I) NEXT I 'BAT POSITION Y BATY=10 'LEVEL ADDR, ALL PACKED LEVEL LEVELADDR=0 'BALLS DATA (I,F) 'FIELD 0: STATUS: ' 0=NOT ACTIVE, ' 1=ACTIVE AND MOVING ON THE BOARD, ' 2>=WAIT FOR NEXT LEVEL, A NUMBER OF FRAME TO WAIT +2 ' -1<=WAIT FOR PREV LEVEL, A NUMBER OF FRAME TO WAIT -1 'FIELD 1: ANGLE 'FIELD 2: SPEED 'FIELD 3: SIGN ON X (-1: LEFT, 1: RIGHT) 'FIELD 4: SIGN ON Y (-1: UP, 1: DOWN) 'FIELD 5: SPEED STEP (1,3,5,7) 'FIELD 6: BOOST SPEED 'FIELD 7: BOOST DURATION 'FIELD 8: HIT COUNTER 'FIELD 9: CAPTURED >0 DURING N FRAME, =-1 UNTIL LOOSE OTHER BALL DIM GLOBAL BALLS(1,9) SPRITE.A 0,1 SPRITE.A 1,1 GLOBAL LASTBALLLOST 'ANGLES DATA (I,FIELD) 'FIELD 0: LENGTH 'FIELD 1-2: 1ST X,Y 'FIELD 3-4: 2ND X,Y 'FIELD 5-6: 3RD X,Y 'FIELD 7-8: 4TH X,Y DIM ANGLES(11,8) RESTORE ANGLESDATA FOR I=0 TO 11 FOR J=0 TO 8 READ ANGLES(I,J) NEXT J NEXT I DIM HITTOANGLE(10) RESTORE HITDATA FOR I=0 TO 10 READ HITTOANGLE(I) NEXT I 'NUMBER OF SPRITES USED BY THE FADIN LINE BEHIND THE BALLS TRACENUM=54 'BALL TRACE (I,FIELD) 'FIELD 0: CURRENT DELAY 'FIELD 1: INITIAL DELAY DIM TRACES(TRACENUM-1,1) 'BRICK COORD TO CLEAR (I,FIELD) 'FIELD 0: X 'FIELD 1: Y DIM TOCLEAR(3,1) 'BECAUSE TIMER FAIL WHEN USING WAIT TICK=0 'ANIMATION STEP (I,FIELD) 'FIELD 0: BRICK X 'FIELD 1: BRICK Y 'FIELD 2: ANIM TYPE '0: NOT USED '1: RESHOW AFTER DELAY '2: HIDE AFTER DELAY 'FIELD 3: ANIM STEP OR DELAY DIM ANIMS(15,3) ANIMNEXT=-1 'PLAYER (I,FIELD) 'FIELD 0: LIFE COUNT 'FIELD 1: SCORE 'FIELD 2: LETTER FLAGS 'FIELD 3: ACT 'FIELD 4: EXTRA DIM PLAYERS(1,4) 'FOR CURRENT GAME SESSION 'GLOBAL SCORE 'GLOBAL BONUS 'LIST OF LEVELS FOR THE SESSION DIM LEVELIDS(31) 'FORCE PER PLAYERSTAGE DIM FORCES(7) 'PACKED CACHED LEVEL DIM CACHED$(7) GLOBAL TITLEX,TITLEY,TITLEPAL,SFX 'SFX VOICE (0,1) SFX=0 'MUSIC LINE COUNTER MLC=0 'MUSIC SONG COUNTER MSC=0 'MUSIC VOICE COUNTER MAC=0 MBC=0 'CURRENT PLAYED PATTERN CURRPATTERN=1 INITPATTERN=1 STOPNOW=0 SPLITDELAY=0 '================================================================== TOUCHSCREEN ENDGAME: GOTO TITLESCREEN NEWGAME: RANDOMIZE TIMER SPRITE.A 0,1 'CLEAR BALL TRACES FOR I=0 TO TRACENUM-1 SPRITE.A 7+I,1 NEXT I TRACENEXT=-1 'CLEAR THE BRICK TO CLEAR TABLE, NORMALLY NOT NEEDED. FOR I=0 TO 3 TOCLEAR(I,0)=-1 NEXT I 'RANDOMIZE LIST OF LEVEL ID FOR I=0 TO 31 LEVELIDS(I)=-1 NEXT I 'GET NUMBER OF LEVELS C=PEEK(ROM(4)) FOR I=1 TO C _PICKALEVELID: J=INT(RND*C) 'CHECK IF THE LEVEL HAS BEEN PICKED ALREADY P=0 FOR K=0 TO 31 IF LEVELIDS(K)=J THEN P=-1 NEXT K 'PICK AND OTHER LEVEL ID IF P THEN GOTO _PICKALEVELID 'PLACE THE PICKED ID LEVELIDS(I-1)=J NEXT I 'CLEAR PLAYERS FOR I=0 TO PLAYERCOUNT-1 PLAYERS(I,0)=4 IF FORCELIVE>=0 THEN PLAYERS(I,0)=FORCELIVE PLAYERS(I,1)=0 PLAYERS(I,2)=0 PLAYERS(I,3)=0 PLAYERS(I,4)=0 NEXT I CURRPLAYER=0 CURRACT=0 CURRSTAGE=0 GOSUB RESETPLAY '... FILLLEVELS: FOR LI=0 TO 3 CURRLEVEL=LEVELIDS(CURRACT*4+LI) IF CURRLEVEL=-1 THEN GOTO WINGAME PLAYERSTAGE=2*CURRPLAYER+LI GOSUB RESETLEVEL GOSUB LOADLEVEL NEXT LI PLAYERSTAGE=2*CURRPLAYER+CURRSTAGE '... STARTPLAY: RANDOMIZE TIMER TICK=0 CLS GOSUB DRAWWALLS GOSUB DRAWDOOR GOSUB DRAWBOTTOM GOSUB DRAWBRICKS C=0 'TRACE "START" FOR B=0 TO 1 BALLS(B,0)=0 NEXT B TM=0 SPRITE.A 2,1 SPRITE.A 3,1 LC=0 LT=0 PLACEBALL: GOSUB CTRLBAT SPRITE 0,12,BATY+9,C GOSUB DRAWBAT GOSUB UPDATETRACE GOSUB UPDATEDOORANIM WAIT VBL TICK=(TICK+1) MOD 5184000 LC=LC+1 IF TICK=6 THEN BALL=BALL-1 PLAYERS(CURRPLAYER,0)=BALL GOSUB DRAWLIFE C=127 END IF IF TOUCH THEN IF LC=40 OR LC=80 THEN CALL SNDFX(1) END IF IF LC>=40 AND LC<=48 THEN LT=70+(LC-40)\3 ELSE IF LC=49 THEN LT=0 ELSE IF LC>=80 AND LC<=88 THEN LT=102+(LC-80)\3 ELSE IF LC=89 THEN LT=0 ELSE IF LC=120 THEN CALL SNDFX(3) CALL NEWBALL(13,BATY+10,6,2,1,1) MLC=0 GOTO PLAYLOOP END IF IF LT>0 THEN SPRITE 2,16,48,LT SPRITE 3,16,56,LT+16 ELSE SPRITE OFF 2 SPRITE OFF 3 END IF ELSE LC=0 SPRITE OFF 2 SPRITE OFF 3 END IF GOTO PLACEBALL PLAYLOOP: SPLITDELAY=MAX(0,SPLITDELAY-1) GOSUB UPDATEDOORANIM GOSUB CTRLBAT GOSUB DRAWBAT GOSUB UPDATETRACE GOSUB UPDATEBALL GOSUB UPDATEANIMS GOSUB MUSICFOLLOW WAIT VBL TICK=(TICK+1) MOD 5184000 IF STOPNOW>0 THEN WAIT STOPNOW STOPNOW=0 END IF GOTO PLAYLOOP JUMPSTAGE: N=0 FOR K=0 TO 1 IF BALLS(K,0)>=2 THEN N=-1 NEXT K BALLTONEXT=0 IF N THEN GOTO NEXTSTAGE ELSE GOTO PREVSTAGE END IF NEXTSTAGE: CURRSTAGE=CURRSTAGE+1 IF CURRSTAGE=4 THEN GOTO NEXTACT FOR B=0 TO 1 IF BALLS(B,0)<=-1 THEN CALL DELBALL(B) BALLS(B,2)=MAX(2,BALLS(B,2)-0.5) NEXT B GOTO CONTINUESTAGE PREVSTAGE: STOP 2 STOP 3 CURRSTAGE=CURRSTAGE-1 IF CURRSTAGE=-1 THEN GOTO BALLLOST ELSE CALL DELBALL((LASTBALLLOST+1) MOD 2) PANIC=1 COPY ROM(1)+32,32 TO $FF00 END IF CONTINUESTAGE: FOR B=0 TO 1 C=BALLS(B,0) IF C>=2 THEN SPRITE B,-3,, IF C<=-1 THEN SPRITE B,161,, NEXT B GOSUB MUSICCHANGE PLAYERSTAGE=2*CURRPLAYER+CURRSTAGE GOSUB DRAWWALLS GOSUB DRAWDOOR GOSUB DRAWBOTTOM GOSUB DRAWBRICKS GOTO PLAYLOOP NEXTACT: CURRSTAGE=0 CURRACT=CURRACT+1 BALL=BALL+1 IF CURRACT=9 THEN GOTO WINGAME PLAYERS(CURRPLAYER,3)=CURRACT GOTO FILLLEVELS BALLLOST: FOR II=1 TO 50 GOSUB UPDATETRACE WAIT 1 NEXT II '... COMPUTESCORE: B$=STR$(BONUS) B=LEN(B$) FOR I=1 TO B V$=RIGHT$(B$,1) B$=LEFT$(B$,B-I) V=VAL(V$) T=1*10^(I-1) LFO 0,4,6,7,8 VOLUME 0,8, SOUND 0,2,1, FOR J=1 TO V PLAY 0,(5-I)*6+40,3+I BONUS=BONUS-T SCORE=SCORE+T*MULTI 'GOSUB UPDATEDOORANIM GOSUB DRAWSCORE WAIT 4+I NEXT J WAIT 4 NEXT I WAIT 50 PLAYERS(CURRPLAYER,1)=SCORE '... NEXTPLAYER: CURRPLAYER=(CURRPLAYER+1) MOD PLAYERCOUNT 'CHECK LIFE NUM IF PLAYERS(CURRPLAYER,0)=0 THEN 'CHECK OTHER PLAYER LIFE NUM C=0 FOR P=0 TO PLAYERCOUNT IF PLAYERS(P,0)>0 THEN C=-1 NEXT P IF C THEN GOTO NEXTPLAYER POKEL $E000,SCORE IF SCORE>PEEKL($E004) THEN POKEL $E004,SCORE WAIT 150 GOTO ENDGAME END IF GOSUB RESETPLAY GOTO STARTPLAY LOADLEVEL: 'FORCES(PLAYERSTAGE)=1 IF FORCELEVEL>=0 THEN CURRLEVEL=FORCELEVEL A=CURRLEVEL*6+1+ROM(4) LEVELFILE=PEEK(A) LEVELADDR=PEEK(A+1)*255+PEEK(A+2) LEVELSIZE=PEEK(A+3)*255+PEEK(A+4) C=PEEK(A+5) A=LEVELADDR+ROM(LEVELFILE) FOR G=0 TO 6 R=PEEK(A) IF R=0 THEN V=99 ELSE IF R=1 THEN V=2 ELSE IF R=2 THEN V=5 ELSE IF R=3 THEN V=9 END IF GROUPS(G,2,PLAYERSTAGE)=V A=A+1 NEXT G FOR X=16 TO 16-C+1 STEP -1 FOR Y=0 TO 8 F=PEEK(A) S=PEEK(A+1) T=F AND %00001111 IF T=2 OR T=8 OR T>=10 THEN W=2 ELSE IF T=5 THEN W=6 ELSE W=1 END IF G=((S AND %00111000)/8)-1 H=-(F AND %10000000)/128 BRICKS(X,Y,0,PLAYERSTAGE)=T BRICKS(X,Y,1,PLAYERSTAGE)=(F AND %01110000)/16 IF H THEN BRICKS(X,Y,2,PLAYERSTAGE)=0 ELSE BRICKS(X,Y,2,PLAYERSTAGE)=W END IF BRICKS(X,Y,3,PLAYERSTAGE)=S AND %111 BRICKS(X,Y,4,PLAYERSTAGE)=G+1 BRICKS(X,Y,7,PLAYERSTAGE)=W BRICKS(X,Y,8,PLAYERSTAGE)=0 IF G>=0 THEN IF NOT H THEN GROUPS(G,3,PLAYERSTAGE)=GROUPS(G,3,PLAYERSTAGE)+1 GROUPS(G,4,PLAYERSTAGE)=GROUPS(G,4,PLAYERSTAGE)+1 END IF IF GROUPS(G,0,PLAYERSTAGE)>=0 THEN BRICKS(X,Y,5,PLAYERSTAGE)=GROUPS(G,0,PLAYERSTAGE) BRICKS(X,Y,6,PLAYERSTAGE)=GROUPS(G,1,PLAYERSTAGE) ELSE BRICKS(X,Y,5,PLAYERSTAGE)=-1 END IF GROUPS(G,0,PLAYERSTAGE)=X GROUPS(G,1,PLAYERSTAGE)=Y END IF A=A+2 NEXT Y NEXT X RETURN RESETLEVEL: 'RESET GROUPS FOR I=0 TO 6 GROUPS(I,2,PLAYERSTAGE)=0 GROUPS(I,0,PLAYERSTAGE)=-1 GROUPS(I,3,PLAYERSTAGE)=0 GROUPS(I,4,PLAYERSTAGE)=0 NEXT I 'RESET BRICKS FOR X=16 TO 0 STEP -1 FOR Y=0 TO 8 BRICKS(X,Y,0,PLAYERSTAGE)=0 BRICKS(X,Y,1,PLAYERSTAGE)=0 BRICKS(X,Y,2,PLAYERSTAGE)=0 BRICKS(X,Y,3,PLAYERSTAGE)=0 BRICKS(X,Y,4,PLAYERSTAGE)=0 BRICKS(X,Y,5,PLAYERSTAGE)=0 BRICKS(X,Y,6,PLAYERSTAGE)=0 BRICKS(X,Y,7,PLAYERSTAGE)=0 BRICKS(X,Y,8,PLAYERSTAGE)=0 NEXT Y NEXT X FORCES(PLAYERSTAGE)=7 RETURN RESETPLAY: BALL=PLAYERS(CURRPLAYER,0) SCORE=PLAYERS(CURRPLAYER,1) LETTERS=PLAYERS(CURRPLAYER,2) CURRACT=PLAYERS(CURRPLAYER,3) CURRSTAGE=0 BONUS=0 MULTI=1 DOORWASCLOSED=0 BALLTONEXT=0 LASTBALLLOST=-1 FOR B=0 TO 1 BALLS(B,0)=0 NEXT B PANIC=0 COPY ROM(1),32 TO $FF00 GOSUB MUSICCHANGE RETURN '================================================================== WINGAME: FOR II=1 TO 50 GOSUB UPDATETRACE WAIT VBL NEXT II 'ADD BALL TO BONUS FOR II=BALL TO 1 STEP -1 BALL=BALL-1 SCORE=SCORE+333 GOSUB DRAWLIFE GOSUB DRAWSCORE WAIT 50 NEXT II PLAYERS(CURRPLAYER,0)=0 WAIT 50 GOTO COMPUTESCORE '================================================================== BRICKTOCELL: R=BY MOD 2 CX=BX+2 CY=BY*2-(BY\2) BG R RETURN DRAWBRICKS: FOR BX=16 TO 0 STEP -1 FOR BY=0 TO 8 GOSUB DRAWBRICK NEXT BY NEXT BX RETURN DRAWBRICK: ATTR BRICKS(BX,BY,1,PLAYERSTAGE)+1 GOSUB BRICKTOCELL BT=BRICKS(BX,BY,0,PLAYERSTAGE) BH=BRICKS(BX,BY,2,PLAYERSTAGE) IF BT>=10 AND BH>1 THEN CT=1+R*32 ELSE IF BT=8 THEN IF BH=1 THEN CT=1+R*32 ELSE CT=0 ELSE IF BT>=10 THEN ATTR 1 _______________HERE1: IF BT=15 THEN BT=64+PLAYERS(CURRPLAYER,4) IF BH>0 THEN CT=BT+R*32 ELSE CT=0 END IF END IF CELL CX,CY,CT CELL CX,CY+1,CT+16 'DEBUG GROUP 'TT$=HEX$(BRICKS(BX,BY,0,PLAYERSTAGE)) 'IF BRICKS(BX,BY,0,PLAYERSTAGE)>0 THEN 'TEXT CX,CY+1-(BY MOD 2),TT$ 'END IF 'DEBUG GROUP COUNT 'GG=BRICKS(BX,BY,4,PLAYERSTAGE) 'IF GG>0 THEN 'TT$=STR$(GROUPS(GG-1,3,PLAYERSTAGE)) 'TEXT CX,CY+1-(BY MOD 2),TT$ 'END IF RETURN DRAWHIT: ATTR 1 GOSUB BRICKTOCELL CT=69+R*32 CELL CX,CY,CT CELL CX,CY+1,CT+16 RETURN DRAWWALLS: BG 1 FOR CX=0 TO 19 ATTR 0 CELL CX,0,89 CELL CX,14,105 CELL CX,15,121 NEXT CX BG 0 CELL 19,0,89 RETURN DRAWDOOR: BG 1 C=126 IF FORCES(PLAYERSTAGE)>0 THEN DOORWASCLOSED=1 IF FORCES(PLAYERSTAGE)=0 THEN C=125 ELSE IF PANIC=1 THEN C=77 END IF FOR CY=0 TO 13 CELL 19,CY,C NEXT CY RETURN DRAWBOTTOM: BG 0 ATTR 0 TEXT 0,14,"! "+CHR$(34)+"#$% &'() *+,-" CELL 1,14,218+CURRPLAYER TEXT 0,15," @ " CELL 0,15,CURRACT+209 CELL 2,15,CURRSTAGE+209 TEXT 4,15,STR$(SCORE) TEXT 10,15,STR$(BONUS) GOSUB DRAWFORCE GOSUB DRAWMULTI GOSUB DRAWLIFE RETURN DRAWLIFE: BG 0 ATTR 1 C=0 IF BALL>=2 THEN C=206 ELSE IF BALL=1 THEN C=207 END IF CELL 2,14,C C=0 IF BALL=3 THEN C=207 CELL 3,14,C RETURN DRAWMULTI: BG 0 ATTR 0 CELL 14,14,217+MULTI RETURN DRAWFORCE: BG 0 ATTR 0 F=FORCES(PLAYERSTAGE) X=16 FOR X=16 TO 19 IF F>=2 THEN C=141 ELSE IF F>=1 THEN C=142 ELSE IF F=0 AND FORCES(PLAYERSTAGE)>0 THEN C=143 ELSE C=0 END IF CELL X,15,C F=F-2 NEXT X RETURN S$=" " IF FORCES(PLAYERSTAGE)>=7 THEN S$="XXXY" ELSE IF FORCES(PLAYERSTAGE)=6 THEN S$="XXXZ" ELSE IF FORCES(PLAYERSTAGE)=5 THEN S$="XXY " ELSE IF FORCES(PLAYERSTAGE)=4 THEN S$="XXZ " ELSE IF FORCES(PLAYERSTAGE)=3 THEN S$="XY " ELSE IF FORCES(PLAYERSTAGE)=2 THEN S$="XZ " ELSE IF FORCES(PLAYERSTAGE)=1 THEN S$="Y " END IF BG 0 ATTR 0 TEXT 16,15,S$ RETURN DRAWSCORE: BG 0 ATTR 0 TEXT 4,15,STR$(SCORE) TEXT 10,15,STR$(BONUS) RETURN DRAWBAT: SPRITE.A 6,128+1 SPRITE 6,-8,BATY,77 RETURN '================================================================== CTRLBAT: IF TOUCH THEN BATY=MIN(92,MAX(3,TOUCH.Y-9)) END IF RETURN SUB NEWBALL(BX,BY,A,S,SX,SY) SB=0 FOR B=0 TO 1 IF BALLS(B,0)=0 THEN SB=-1 BALLS(B,0)=1 BALLS(B,1)=A BALLS(B,2)=S BALLS(B,3)=SX BALLS(B,4)=SY BALLS(B,5)=1 BALLS(B,6)=0 BALLS(B,7)=0 BALLS(B,8)=0 'SPRITE.A B,1 SPRITE B,BX-1,BY-1,127 EXIT SUB END IF NEXT B IF NOT SB THEN BONUS=BONUS+125 END IF END SUB SUB DELBALL(B) BALLS(B,0)=0 SPRITE OFF B END SUB UPDATEBALL: 'LOCATE 0,12 'PRINT BALLS(0,0);" ";SPRITE.X(0)+1;" ";SPRITE.Y(0)+1;" ";TIMER;" " 'LOCATE 0,13 'PRINT BALLS(1,0);" ";SPRITE.X(1)+1;" ";SPRITE.Y(1)+1;" " 'FOR EACH ACTIVE BALL FOR B=0 TO 1 AI=BALLS(B,0) AX=SPRITE.X(B)+1 IF AI>1 AND AX>=-3 AND AX<167 THEN BALLS(B,0)=AI-1 ELSE IF AI<=-1 AND AX>=-3 AND AX<167 THEN BALLS(B,0)=2-AI ELSE IF AI=1 AND AX<170 THEN 'GET FIELDS AY=SPRITE.Y(B)+1 AS=BALLS(B,2) AH=BALLS(B,3) AV=BALLS(B,4) AT=BALLS(B,5) AD=BALLS(B,7) AC=BALLS(B,8) 'COMPUTE HALF SPEED IF AS-INT(AS)>0 THEN AS=AS+(TICK MOD 2) 'SPEED UP DURING PANIC IF PANIC=1 THEN AS=AS+2+INT(RND*3)/2+CURRACT 'ADD BOOST IF AD>0 THEN AD=AD-1 OS=BALLS(B,6) AS=MIN(8,AS+OS) IF AD=0 AND OS>0 THEN BALLS(B,6)=OS-0.5 AD=15 END IF BALLS(B,7)=AD ELSE IF AC>300 AND AS<6 THEN INC AS AC=0 BALLS(B,8)=0 END IF IF BALLS(B,9)>0 THEN BALLS(B,9)=BALLS(B,9)-1 AS=0 IF TICK MOD 3=0 THEN 'PLAY SFX,62+((TICK\40) MOD 5),2 SOUND 0 'SFX=(SFX+1) MOD 2 END IF END IF 'FOR EACH SPEED STEP FOR I=1 TO AS 'GET ANGLE DIRECTION AA=BALLS(B,1) L=ANGLES(AA,0)*2 NX=ANGLES(AA,AT) NY=ANGLES(AA,AT+1) AT=AT+2 IF AT>L THEN AT=1 DX=NX*AH DY=NY*AV 'RESULT DIRECTION FOR THIS BALL AT THIS STEP CANX=1 CANY=1 'PROJECTED POSITION AFTER MOVE TARGETX=AX+DX TARGETY=AY+DY 'TEST IF COLLIDE ON WALL IF TARGETY=111 OR TARGETY=3 THEN CANY=-1 END IF HITDOOR: 'TEST IF COLLIDE ON DOOR IF PANIC=1 AND TARGETX=158 AND AH>0 THEN CANX=-1 ELSE IF PANIC=0 AND TARGETX=151 AND AH>0 THEN IF FORCES(PLAYERSTAGE)>0 THEN FORCES(PLAYERSTAGE)=MAX(0,FORCES(PLAYERSTAGE)-1) CALL SNDFX(4) GOSUB DRAWDOOR GOSUB DRAWFORCE IF FORCES(PLAYERSTAGE)=0 THEN 'INITPATTERN=0 'CURRPATTERN=0 'MLC=0 END IF CANX=-1 OY=(TARGETY-4)\8 BG 1 ATTR 1 ODI=90 FOR OYY=OY TO 0 STEP -1 CELL 19,OYY,ODI IF ODI<92 THEN ODI=ODI+1 ELSE ODI=126 NEXT OYY ODI=106 FOR OYY=OY+1 TO 13 CELL 19,OYY,ODI IF ODI<108 THEN ODI=ODI+1 ELSE ODI=126 NEXT OYY END IF END IF 'GOTORIGHT: 'TEST IF GO NEXT LEVEL IF TARGETX>=170 THEN BALLTONEXT=BALLTONEXT+1 BALLS(B,0)=2+BALLTONEXT*20 'SPRITE B,-3,, 'AX=-3 'TODO WHY I NEED TO CHANGE THIS? DX=0 AS=0 'CHECK TO JUMP NEXT IF BALLS((B+1) MOD 2,0)<>1 THEN GOTO JUMPSTAGE 'JN=-1 'FOR K=0 TO 1 'IF BALLS(K,0)=1 THEN JN=0 'NEXT K 'IF JN THEN GOTO JUMPSTAGE END IF HITBAT: 'TEST IF COLLIDE WITH BAT E=9-(TARGETY-BATY) 'IF TARGETX=11 AND AH<0 AND TOUCH THEN 'CANX=-1 'ELSE IF TARGETX=11 AND AH<0 THEN 'WAIT VBL 'WAIT 100 'CANX=-1 HI=0 IF E>=0 AND E<11 THEN AH=1 AV=-1 BALLS(B,1)=HITTOANGLE(E) PLAY SFX,53 SOUND 0 SFX=(SFX+1) MOD 2 HI=1 ELSE IF E>=-11 AND E<0 THEN E=ABS(E+1) AH=1 AV=1 BALLS(B,1)=HITTOANGLE(E) PLAY SFX,53 SOUND 0 SFX=(SFX+1) MOD 2 HI=1 END IF 'CHECK SPEED INCREASE IF HI THEN PANIC=0 COPY ROM(1),32 TO $FF00 ACC=10+AS*5 IF AC>ACC THEN BALLS(B,8)=AC-ACC BALLS(B,2)=BALLS(B,2)+0.5 PLAY SFX,52+INT(RND*3) SOUND 6 SFX=(SFX+1) MOD 2 END IF END IF ELSE IF TARGETX>8 AND TARGETX<11 AND AH<0 AND 999=666 THEN AH=1 BALLS(B,1)=0 IF E>=-10 AND E<0 THEN AV=1 ELSE IF E>=0 AND E<10 THEN AV=-1 END IF 'BOUND UP 'IF TARGETY>=BATY AND TARGETY1 THEN GOTO JUMPSTAGE 'JN=-1 'FOR K=0 TO 1 'IF BALLS(K,0)=1 THEN JN=0 'NEXT K 'IF JN THEN GOTO JUMPSTAGE 'GOTO CONTINUEBALL END IF 'TEST IF COLLIDE ON BRICK 'THE COLLISION SIGNATURE SIGN=0 UVI=-1 'FOR EACH COLLISION SENSORS AROUND THE BALL 'IN ORDER: TOP-LEFT, BOTTOM-LEFT, TOP-RIGHT, BOTTOM-RIGHT FOR U=-1 TO 1 STEP 2 FOR V=-1 TO 1 STEP 2 UVI=UVI+1 'SENSOR POSITION IN PIXELS RELATIVE TO THE BOARD TU=TARGETX+U-16 TV=TARGETY+V-4 'BRICK POSITION UNDER THE BALL RX=TU\8 RY=TV\12 'BRICK MODEL UNDER THE BALL RT=0 RH=0 IF RX>=0 AND RX<=16 AND RY>=0 AND RY<=8 THEN RT=BRICKS(RX,RY,0,PLAYERSTAGE) RH=BRICKS(RX,RY,2,PLAYERSTAGE) END IF 'DETECT IF SENSOR IS OVER THEN SPACE BETWEEN TWO BRICKS IF (TV MOD 12)=11 OR (TU MOD 8)=7 THEN ELSE 'A BRICK IS UNDER THE BALL IF RT>0 AND RH>0 THEN 'REGISTER TO HIT BRICK TOCLEAR(UVI,0)=RX TOCLEAR(UVI,1)=RY 'BALL DO NOT COLLIDE ON GEM IF RT<>9 THEN 'ADD SENSOR TO THE COLLISION SIGNATURE SIGN=SIGN+1*(2^UVI) END IF END IF END IF NEXT V NEXT U 'FOR EACH REGISTERED HIT FOR J=0 TO 3 'THE BRICK POSITION BX=TOCLEAR(J,0) BY=TOCLEAR(J,1) IF BX>=0 THEN 'CHECK FOR DOUBLOON IN THE LIST FOR K=J+1 TO 3 IF TOCLEAR(K,0)=BX AND TOCLEAR(K,1)=BY THEN TOCLEAR(J,0)=-1 BX=-1 END IF NEXT K END IF IF BX>=0 THEN BT=BRICKS(BX,BY,0,PLAYERSTAGE) HITBRICK: 'INCREASE BALL HIT COUNTER BALLS(B,8)=AC+1 'REDUCE HIT POINT OF THE BRICK BH=BRICKS(BX,BY,2,PLAYERSTAGE) BH=BH-1 BRICKS(BX,BY,2,PLAYERSTAGE)=BH 'SHOW HIT (WHITE FLASH) IF BT=9 OR BT=3 THEN ELSE GOSUB DRAWHIT END IF ANIMNEXT=(ANIMNEXT+1) MOD 15 ANIMS(ANIMNEXT,0)=BX ANIMS(ANIMNEXT,1)=BY ANIMS(ANIMNEXT,3)=3 'WHEN HIT POINTS ARE DEPLETED IF BH=0 THEN PLAY SFX,41,2 SOUND 0 SFX=(SFX+1) MOD 2 'INCREASE SCORE SP=SCORES(BRICKS(BX,BY,3,PLAYERSTAGE)) IF BT=9 THEN SCORE=SCORE+SP BONUS=BONUS+SP ELSE SCORE=SCORE+SP END IF GOSUB DRAWSCORE 'REMOVE THE BRICK FROM THE BOARD 'BRICKS(BX,BY,0,PLAYERSTAGE)=0 ANIMS(ANIMNEXT,2)=2 'CHECK IF GROUP IS EMPTY G=BRICKS(BX,BY,4,PLAYERSTAGE)-1 IF G>=0 THEN GC=GROUPS(G,3,PLAYERSTAGE) GC=GC-1 IF GC=0 THEN 'INCREASE BONUS BONUS=BONUS+BONUSS(G) GOSUB DRAWSCORE 'DECREASE GROUP REPEAT GR=GROUPS(G,2,PLAYERSTAGE) IF GR>0 THEN GROUPS(G,2,PLAYERSTAGE)=GR-1 'WILL RESPAWN BRICKS FROM GROUP XX=BX YY=BY BX=GROUPS(G,0,PLAYERSTAGE) BY=GROUPS(G,1,PLAYERSTAGE) GC=0 WHILE BX>=0 CS=-1 'PREVENT BRICKS TO APPEAR WITH BALL INSIDE KX=(BX+2)*8 KY=BY*12+4 FOR K=0 TO 1 IF BALLS(K,0) AND SPRITE.X(K)>KX-3 AND SPRITE.X(K)KY-3 AND SPRITE.Y(K)=10 THEN 'BRICKS(BX,BY,0,PLAYERSTAGE)=1 'BRICKS(BX,BY,7,PLAYERSTAGE)=1 'END IF 'MAKE BRICK FROM A GROUP REAPPEAR IF CS THEN BRICKS(BX,BY,2,PLAYERSTAGE)=BRICKS(BX,BY,7,PLAYERSTAGE) GOSUB DRAWBRICK GC=GC+1 END IF NBX=BRICKS(BX,BY,5,PLAYERSTAGE) NBY=BRICKS(BX,BY,6,PLAYERSTAGE) BX=NBX BY=NBY WEND BX=XX BY=YY 'REINIT GROUPS BRICK COUNTERS GROUPS(G,3,PLAYERSTAGE)=GC GROUPS(G,4,PLAYERSTAGE)=GC END IF ELSE GROUPS(G,3,PLAYERSTAGE)=GC END IF END IF 'DOOR BRICK IF BT=3 THEN BALLS(B,9)=40 DX=0 DY=0 AX=(BX)*8+19 AY=(BY)*12+9 AH=INT(RND*2)*2-1 AV=INT(RND*2)*2-1 BALLS(B,1)=INT(RND*11) 'TRACE AH,AV,AT ANIMS(ANIMNEXT,2)=3 ANIMS(ANIMNEXT,3)=40 BALLS(B,6)=2 BALLS(B,7)=25 GOTO _NEXTBALL END IF 'BOOSTER BRICK IF BT=4 THEN BALLS(B,6)=2 BALLS(B,7)=AD/2+5 END IF 'SPLITTER BRICK IF BT=6 THEN XX=BX YY=BY PP=BRICKS(BX,BY,1,PLAYERSTAGE) SS=BRICKS(BX,BY,3,PLAYERSTAGE) IF SPLITDELAY=0 THEN 'SPLITDELAY=9 FOR BX=XX-1 TO XX+1 FOR BY=YY-1 TO YY+1 IF BX>=0 AND BY>=0 AND BX<=16 AND BY<=8 AND (BX<>XX OR BY<>YY) THEN 'IF BRICKS(BX,BY,0,PLAYERSTAGE)=0 OR BRICKS(BX,BY,2,PLAYERSTAGE)=0 THEN '____________HERE3: 'PREVENT TO SPAWN BRICK UNDER BALLS CS=-1 KX=(BX+2)*8 KY=BY*12+4 FOR K=0 TO 1 IF BALLS(K,0) AND SPRITE.X(K)>KX-3 AND SPRITE.X(K)KY-3 AND SPRITE.Y(K)0 AND BRICKS(BX,BY,0,PLAYERSTAGE)=0 THEN GROUPS(G,3,PLAYERSTAGE)=GROUPS(G,3,PLAYERSTAGE)+1 END IF T=BRICKS(BX,BY,0,PLAYERSTAGE) IF G>0 THEN ELSE IF T=0 THEN CS=0 'BRICKS(BX,BY,0,PLAYERSTAGE)=1 'BRICKS(BX,BY,2,PLAYERSTAGE)=1 'ELSE IF T=6 AND RND(4)<2 THEN 'BRICKS(BX,BY,0,PLAYERSTAGE)=6 'CS=0 'TRACE "P" ELSE BRICKS(BX,BY,2,PLAYERSTAGE)=BRICKS(BX,BY,7,PLAYERSTAGE) END IF IF CS THEN GOSUB DRAWBRICK END IF END IF 'END IF NEXT BY NEXT BX END IF BX=XX BY=YY END IF 'TURN BRICK IF BT=7 THEN BALLS(B,1)=(AA+6) MOD 12 END IF 'NEW BALL IF BT=11 THEN PLAY SFX,62+INT(RND*3) SOUND 7 SFX=(SFX+1) MOD 2 CALL NEWBALL(TARGETX,TARGETY,AA,1,-AH,-AV) GOSUB DRAWSCORE END IF 'MULTI BONUS IF BT=12 THEN MULTI=MIN(MULTI+1,6) GOSUB DRAWMULTI END IF 'SLOW IF BT=10 THEN BALLS(B,2)=MAX(1,BALLS(B,2)-1) END IF 'BONUS BRICK IF BT=14 THEN '- E: ONE RANDOM PRO EFFECT: DECREASE DOOR STRENGTH, BALL GO STRAIGHT, 3 FAST NEW BALL, BONUS +100, PASS THE DOOR (NOT AT LAST LEVEL) R=INT(RND*5) IF R=0 THEN FORCES(PLAYERSTAGE)=MAX(0,FORCES(PLAYERSTAGE)-1) GOSUB DRAWFORCE ELSE IF R=1 THEN BALLS(B,1)=11 ELSE IF R=2 THEN CALL NEWBALL(TARGETX,TARGETY,AA,6,-AH,-AV) ELSE IF R=3 THEN BONUS=BONUS+100 GOSUB DRAWSCORE END IF END IF 'EXTRA BRICK IF BT=15 THEN _______________HERE2: IF PLAYERS(CURRPLAYER,4)=4 THEN PLAYERS(CURRPLAYER,4)=0 PLAYERS(CURRPLAYER,0)=PLAYERS(CURRPLAYER,0)+1 BALL=PLAYERS(CURRPLAYER,0) GOSUB DRAWLIFE ELSE PLAYERS(CURRPLAYER,4)=PLAYERS(CURRPLAYER,4)+1 END IF END IF 'FLASH THE BRICK ELSE ANIMS(ANIMNEXT,2)=1 END IF TOCLEAR(J,0)=-1 END IF NEXT J 'ADD BALL DIRECTION IN THE SIGNATURE IF AH<0 THEN SIGN=SIGN+16 IF AV<0 THEN SIGN=SIGN+32 'BOUNCE ON VERTICAL SIDE IF SIGN=12 OR SIGN=44 OR SIGN=19 OR SIGN=51 THEN CANX=-1 'BOUNCE ON HORIZONTAL SIDE ELSE IF SIGN=26 OR SIGN=10 OR SIGN=53 OR SIGN=37 THEN CANY=-1 'BOUNCE AND DEVIATE ON BRICK ANGLE ELSE IF SIGN=8 OR SIGN=18 OR SIGN=36 OR SIGN=49 THEN MX=TARGETX MOD 8 MY=TARGETY MOD 12 IF MX=7 AND MY=3 THEN CANX=-1 CANY=-1 BALLS(B,1)=(AA+6) MOD 12 ELSE IF MX=7 THEN CANX=-1 ELSE CANY=-1 END IF 'DEVIATE MAYBE ON BRICK ANGLE ELSE IF SIGN=2 OR SIGN=50 OR SIGN=40 OR SIGN=24 OR SIGN=33 OR SIGN=17 OR SIGN=4 OR SIGN=52 THEN MX=TARGETX MOD 8 MY=TARGETY MOD 12 IF MX=7 AND MY=3 AND AA<5 THEN BALLS(B,1)=(AA+6) MOD 12 ELSE IF MX=7 AND MY=3 THEN ELSE IF MX=7 THEN CANX=-1 ELSE CANY=-1 END IF 'REVERSE DIRECTION ON BRICK CORNER ELSE IF SIGN=14 OR SIGN=41 OR SIGN=25 OR SIGN=55 OR SIGN=45 OR SIGN=27 OR SIGN=6 OR SIGN=22 THEN CANX=-1 CANY=-1 'BALL IS INSIDE A BRICK 'ELSE IF SIGN=5 OR SIGN=31 OR SIGN=15 THEN 'TRACE "INSIDE" 'WAIT 300 'OTHER SITUATION 'ELSE IF SIGN<>0 AND SIGN<>32 AND SIGN<>48 AND SIGN<>16 THEN 'TRACE "SIGN",SIGN 'WAIT 30 END IF 'COMPUTE NEW BALL POSITION AND DIRECTION SIDE AX=AX+DX*CANX AY=AY+DY*CANY AH=AH*CANX AV=AV*CANY 'ADD BALL TRACE EFFECT TRACENEXT=(TRACENEXT+1) MOD TRACENUM TRACES(TRACENEXT,0)=AS\2 TRACES(TRACENEXT,1)=AS\2 SPRITE 7+TRACENEXT,AX-1,AY-1,76 NEXT I _NEXTBALL: 'STORE NEW DIRECTION SIDE AND DIRECTION STEP BALLS(B,3)=AH BALLS(B,4)=AV BALLS(B,5)=AT 'STORE POSITION AND DRAW THE BALL SPRITE B,AX-1,AY-1, 'DESTROY IF BALL IS LOST IF AY<-10 OR AY>138 OR AX<-20 OR AX>180 AND BALLS(B,0)=1 THEN CALL DELBALL(B) END IF END IF CONTINUEBALL: NEXT B RETURN UPDATETRACE: FOR I=0 TO TRACENUM-1 T=SPRITE.C(7+I) IF T>73 THEN D=TRACES(I,0) IF D>1 THEN TRACES(I,0)=D-1 ELSE TRACES(I,0)=TRACES(I,1) SPRITE 7+I,,,T-1 END IF END IF NEXT I RETURN UPDATEANIMS: FOR I=0 TO 15 A=ANIMS(I,2) D=ANIMS(I,3) IF A>0 THEN IF D>1 THEN ANIMS(I,3)=D-1 IF A=3 THEN BX=ANIMS(I,0) BY=ANIMS(I,1) ATTR 1 GOSUB BRICKTOCELL CT=0 IF TICK MOD 4<2 THEN CT=3+R*32 CELL CX,CY,CT CELL CX,CY+1,CT+16 END IF ELSE BX=ANIMS(I,0) BY=ANIMS(I,1) ANIMS(I,2)=0 IF A=1 OR A=2 OR A=3 THEN GOSUB DRAWBRICK END IF END IF END IF NEXT I RETURN UPDATEDOORANIM: IF PANIC=0 AND TIMER MOD 3=0 THEN BG 1 ATTR 1 FOR Y=0 TO 13 T=CELL.C(19,Y) IF T=90 OR T=106 OR T=91 OR T=107 THEN CELL 19,Y,T+1 ELSE T=126 IF FORCES(PLAYERSTAGE)=0 THEN T=125-(TIMER MOD 4) CELL 19,Y,T END IF NEXT Y ELSE IF PANIC=1 THEN BG 1 ATTR 1 FOR Y=0 TO 13 CELL 19,Y,77 NEXT Y END IF RETURN '================================================================== INPUTNAME: CLS BG 0 INPUTLOOP: WAIT VBL GOTO INPUTLOOP TITLERANDOMCOL: C=INT(RND*4)*16+INT(RND*4)*4+INT(RND*4) IF RND>0.71 THEN 'PALETTE TITLEPAL,0,63,C,C AND %110110110 PALETTE TITLEPAL,0,C,C AND %011011011,C AND %110110110 ELSE PALETTE TITLEPAL,0,0,C,C END IF RETURN TITLESCREEN: CLS PLAYERCOUNT=1 SPRITE OFF 6 BG 0 PALETTE 3,0,52,56,32 BG COPY 14,0,6,2 TO 4,1 PALETTE 0,0,0,0,0 ATTR 0 BG COPY 0,0,14,2 TO 0,4 BG COPY 0,2,16,2 TO 0,6 PALETTE 2,0,63,21,0 ATTR 2 TEXT 2,9,"TAP TO PLAY" TEXT 0,14," PL" TEXT 13,14,"CFG" TEXT 0,11,"LAST" S$=STR$(PEEKL($E000)) TEXT 0,12,S$ TEXT 12,11,"HIGH" S$=STR$(PEEKL($E004)) TEXT 16-LEN(S$),12,S$ SPRITE 0,16,112,208+PLAYERCOUNT SPRITE.A 0,2 SCROLL 0,-16,0 TICK=0 TITLELOOP: TITLEX=0 TITLEY=0 TITLEPAL=(TITLEPAL+1) MOD 2 GOSUB TITLERANDOMCOL ATTR TITLEPAL ON VBL CALL TITLEINTER FOR I=0 TO 100 'IF TAP THEN TRACE TOUCH.X\8,TOUCH.Y\8 X=TOUCH.X\8 Y=TOUCH.Y\8 IF TAP AND X>=1 AND Y>=13 AND X<=5 AND Y<=15 THEN PLAYERCOUNT=(PLAYERCOUNT MOD 2)+1 SPRITE 0,,,208+PLAYERCOUNT END IF IF TAP AND X>=3 AND Y>=8 AND X<=15 AND Y<=10 THEN COPY ROM(1),32 TO $FF00 CLS ON VBL OFF GOTO NEWGAME END IF 'GOSUB MUSICFOLLOW WAIT VBL TICK=(TICK+1) MOD 5184000 PANIC=0 NEXT I GOTO TITLELOOP SUB TITLEINTER CELL TITLEX,TITLEY+4, TITLEY=(TITLEY+1) MOD 4 IF TITLEY=0 THEN TITLEX=TITLEX+1 IF TITLEX=16 THEN ON VBL OFF END SUB SUB SNDFX(T) TRACK T,SFX SFX=(SFX+1) MOD 2 END SUB '================================================================== MUSICCHANGE: MSC=(MSC+1+INT(RND*2)) MOD 3 MLC=0 RETURN MUSICFOLLOW: IF PANIC=0 THEN IF MLC MOD 1024=0 THEN 'MSC=(MSC+1+INT(RND*2)) MOD 3 CURRPATTERN=MSC*8+1 R=INT(RND*2) IF R=0 THEN MAC=(MBC+1+INT(RND*3)) MOD 4 ELSE MBC=(MAC+1+INT(RND*3)) MOD 4 END IF END IF IF MLC MOD 256=0 THEN A=ROM(15)+128+4*CURRPATTERN 'TRACE MSC,MAC,MBC TRACK PEEK(A+MAC) AND %01111111,2 TRACK PEEK(A+MBC) AND %01111111,3 'IF MLC MOD 256=0 THEN IF (PEEK(A+0) AND %10000000)>0 THEN INITPATTERN=CURRPATTERN IF (PEEK(A+1) AND %10000000)>0 THEN CURRPATTERN=INITPATTERN ELSE CURRPATTERN=CURRPATTERN+1 END IF END IF END IF MLC=MLC+1 RETURN '================================================================== ANGLESDATA: 'LENGTH, X,Y,X,Y,.. DATA 4,0,1,1,1,0,1,0,1 DATA 3,0,1,1,1,0,1,0,0 DATA 2,0,1,1,1,0,0,0,0 DATA 3,1,1,0,1,1,1,0,0 DATA 4,1,1,0,1,1,1,1,1 DATA 1,1,1,0,0,0,0,0,0 DATA 4,1,0,1,1,1,0,1,0 DATA 3,1,0,1,1,1,0,0,0 DATA 2,1,0,1,1,0,0,0,0 DATA 3,1,1,1,0,1,1,0,0 DATA 4,1,1,1,0,1,1,1,1 DATA 1,1,0,0,0,0,0,0,0 HITDATA: DATA 6,7,8,9,10,5,4,3,2,1,0 SCORESDATA: DATA 5,158,10,95,20,56,35,32,60,17,100,8,165,5,270,3 #1:MAIN PALETTES 003F0106003F2A1500362010001F0702 000E0A05003D2814002B2611003A2410 003A1024003020100030201000302010 00302010003020100030201000302010 #2:MAIN CHARACTERS 00000000000000000000000000000000 00000000FEFCC0C00000000000023E3E 0000000000023E3E00000000FEFEFEFE 00000000007E424200000000FEFEC6C6 00000000E2B8F062000000001C7E7EFE 000000000002061600000000FEFEFEFE 00000000EE8888880000000000666666 00000000E6B2E64C00000000187E7EFE 00000000002A542A0000000054AA54AA 000000001028306C000000000018081C 000000007CC2829A00000000003E7E7E 000000007CC282B200000000003E7E7E 000000007CC282AA00000000003E7E7E 000000007CC2829200000000003E7E7E 000000007CC282B200000000003E7E7E 000000007CC282A200000000003E7E7E 00000000000000000000000000000000 C0C0C0C0C0C080003E3E3E3E3E3E7E00 3E3E3E3E3E3E7E00FEFEFEFEFEFEFE00 4242424242427E00C6C6C6C6C6FEFE00 460E9CB8F0624600FEFE7E7E7EFEFE00 16161616063E7E00FEFEFEFEFEFEFE00 8800EE88888888006600006666666600 E6B2184CE64C18007E7EFEFE7EFEFE00 542A542A542A540054AA54AA54AA5400 74AA5864382010000C5E747830381000 A2BA8AB282867C007E7E7E7E7E7E7C00 AAB2AABA82867C007E7E7E7E7E7E7C00 BABAAAAA82867C007E7E7E7E7E7E7C00 AABAAAAA82867C007E7E7E7E7E7E7C00 8A9A829282867C007E7E7E7E7E7E7C00 A2A2A2BA82867C007E7E7E7E7E7E7C00 00000000000000000000000000000000 FEFCC0C0C0C0C0C000023E3E3E3E3E3E 00023E3E3E3E3E3EFEFEFEFEFEFEFEFE 007E424242424242FEFEC6C6C6C6C6C6 F09CB8F062460E9C0E7E7E7EFEFEFE7E 0002061616161616FEFEFEFEFEFEFEFE EE8888888800EE880066666666000066 984CE6B2184CE64C66FE7E7EFEFE7EFE 002A542A542A542A54AA54AA54AA54AA 1028306C74AA58640018081C0C5E7478 7CC2829AA2BA8AB2003E7E7E7E7E7E7E 7CC282B2AAB2AABA003E7E7E7E7E7E7E 7CC282AABABAAAAA003E7E7E7E7E7E7E 7CC28292AABAAAAA003E7E7E7E7E7E7E 7CC282B28A9A8292003E7E7E7E7E7E7E 7CC282A2A2A2A2BA003E7E7E7E7E7E7E 00000000000000000000000000000000 C0C08000000000003E3E7E0000000000 3E3E7E0000000000FEFEFE0000000000 42427E0000000000C6FEFE0000000000 B8F06200000000007E7EFE0000000000 063E7E0000000000FEFEFE0000000000 88888800000000006666660000000000 18B2E60000000000FE7E7E0000000000 542A54000000000054AA540000000000 38201000000000003038100000000000 82867C00000000007E7E7C0000000000 82867C00000000007E7E7C0000000000 82867C00000000007E7E7C0000000000 82867C00000000007E7E7C0000000000 82867C00000000007E7E7C0000000000 82867C00000000007E7E7C0000000000 000000000C3E2E2C000000007CC6D65C 000000000C2E2E2C000000007CD6D654 000000000C3E1E1C000000007CC6EE6C 000000000C3E2E2C000000007CCED654 000000000C1E2E2C000000007CEED654 00000000FEFCFCFC0000000000020202 003C7E6606060E1C0000000000000000 0000000000000000003C7E6606060E1C 003C7E6606060E1C003C7E6606060E1C 00000000000000000000000000000000 00400000000000000040000000000000 00000000000000000040000000000000 00400000000000000000000000000000 3161C18103070D193266CC983266CC98 00000000000000000000000000000000 4040404040404040A0A0A0A0A0A0A0A0 3E2E2E3C0C080000CEDED6447C381000 1E2E2E2C0C080000EED6D6547C381000 1E1E1E1C0C080000EEEEEE6C7C381000 3E2E2E2C0C080000CED6D6547C381000 3E2E2E2C0C080000C6D6D6547C381000 FCFCFCFCFCFC80000202020202027E00 38706060607E7E000000000000000000 000000000000000038706060607E7E00 38706060607E7E0038706060607E7E00 0000FF0000000000FFFF000000000000 40A0D0E8F4FAFDFEBF5F2F170B050201 BFDFAF978B8582817F7F7F7F7F7F7F7F C0A0D0E8F4FAFDFE40205068747A7D7E 3366CC993366CC990000000000000000 00000000000000000000000000000000 4040404040404040A0A0A0A0A0A0A0A0 0C3E2E2C3E2E2E3C7CC6D65CCEDED644 0C2E2E2C1E2E2E2C7CD6D654EED6D654 0C3E1E1C1E1E1E1C7CC6EE6CEEEEEE6C 0C3E2E2C3E2E2E2C7CCED654CED6D654 0C1E2E2C3E2E2E2C7CEED654C6D6D654 FEFCFCFCFCFCFCFC0002020202020202 00387818181818180000000000000000 00000000000000000038781818181818 00387818181818180038781818181818 FFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF FDFAF4E8D0A0408002050B172F5FBF7F 82858B97AFDFBFFF7F7F7F7F7F7F7F7F FDFAF4E8D0A0C0807D7A746850204000 3366CC993366CC990000000000000000 00000000000000000000000000000000 4040404000000000A0A0A0A000000000 0C080000000000007C38100000000000 0C080000000000007C38100000000000 0C080000000000007C38100000000000 0C080000000000007C38100000000000 0C080000000000007C38100000000000 FCFC80000000000002027E0000000000 18181818187E7E000000000000000000 000000000000000018181818187E7E00 18181818187E7E0018181818187E7E00 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 7C7E7C08000000087C7E7C0800000008 7C08000000087C7E7C08000000087C7E 000000087C7E7C08000000087C7E7C08 00087C7E7C08000000087C7E7C080000 80808080808080800000000000000000 40E0400000000000A000A00000000000 12A44A2184522548FFFFFFFFFFFFFFFF 12A44A21F4F2F5F8FFFFFFFF0F0F0F0F FFFFFFFF8F5F2F4F00000000F0F0F0F0 F2F4FAF1F4F2F5F80F0F0F0F0F0F0F0F 12A44A211FAF4F2FFFFFFFFFF0F0F0F0 FFFFFFFFF4F2F5F8000000000F0F0F0F 60909090909E817E0060606060607E00 3C4299999999423C003C666666663C00 669999818199A5420066667E7E664200 7C82998284929966007C667C786C6600 7E819E84989E817E007E607860607E00 3E419E423979827C003E603C06067C00 0066767E6E66660066FF998991999966 0077777777770000FF8888888888FF00 0070707070700000F88888888888F800 00000000000000008080808080808000 F2F4FAF1845225480F0F0F0FFFFFFFFF 12A44A21FFFFFFFFFFFFFFFF00000000 1FAF4F2FFFFFFFFFF0F0F0F000000000 1FAF4F2F8F5F2F4FF0F0F0F0F0F0F0F0 1FAF4F2F84522548F0F0F0F0FFFFFFFF 1FAF4F2FF4F2F5F8F0F0F0F00F0F0F0F 00663C183C66660066FF5A2466DB9966 F2F4FAF1FFFFFFFF0F0F0F0F00000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 12A44A2100000000FFFFFFFF000000C5 FFFFFFFF0000000000000000000000BB FFFFFFFF000000000000000000000056 F2F4FAF1000001010F0F0F0F0000006C 12A44A210000FF25FFFFFFFF000000DA FFFFFFFF0000FF3200000000000000CD 12A44A2100008080FFFFFFFF00000008 12A44A2100000000FFFFFFFF00000030 F2F4FAF1000000000F0F0F0F00000083 1FAF4F2F00000000F0F0F0F000000004 1FAF4F2F00000000F0F0F0F000000030 12A44A2100000000FFFFFFFF000000D8 F2F4FAF1000000000F0F0F0F000000DD F2F4FAF1000000000F0F0F0F0000006C 000000000000000000000000000000DB 000000000000000000000000000000B0 00000000000000004DCDCD00DA9A929B 0000000000000000B92BAB006D654C6D 000000000000000066545600B236A6B6 0101010100000000686C68004D6D696D 272565FF00000000D8DA9A002BAB3AAB 565352FF00000000A9ACAD006C6A4A6A 808080800000000004494D006D2D242D 000000000000000010346400B096A0B0 000000000000000082D152007253A3E3 0000000000000000084D4D0053732322 0000000000000000102024006A2A6A6C 000000000000000054D4D4008A8A8AC4 00000000000000005CD5D5009854D4D4 0000000000000000446C2C005BDAD2DA 00000000000000008BDA5A002B292B13 0000000000000000B0A0B0004A4C4A6A 00000000000000000000000000000000 00003C363E3030000000000000000000 000039637B1B71000000000000000000 0000CE1B1B1BCE000000000000000000 0000786D79696D000000000000000000 0000E080C080E0000000000000000000 00006C7E6A6A6A000000000000000000 0000D9DBDBDB7B000000000000000000 00003D181818D9000000000000000000 0000E0C0CAC4EA000000000000000000 00003963736361000000000000000000 0000CF6D6F6DCD000000000000000000 00001CB131319D000000000000000000 0000E080C080E0000000000000000000 00000022772200000000005500550000 00000020702000000000005000500000 00386C6C6C3800007CC6929292C67C00 00183818183C00003C64446466427E00 00384C38607C00007CC6B2C69E82FE00 00384C1C4C3800007CC6B2E2B2C67C00 003064647C04000078CE9A9A82FA0E00 007C603C4C380000FE829EC2B2C67C00 00386078643800007CC49C869AC67C00 007C4C1818180000FE82B2E624243C00 00386C7C6C3800007CC6928292C67C00 00386C3C0C3800007CC692C272467C00 00007030303078000000000000000000 00007018306078000000000000000000 00007018381870000000000000000000 00002060687808000000000000000000 00007860381870000000000000000000 00003860786870000000000000000000 000000380000000000007C447C000000 FEFEEEFCECECC800FE8692829292FE00 FEFEEEF8EEFCC000FE8692869282FE00 FEFEE0EEEEFEC000FEC29E9E9E82FE00 FEFEEEECECFCC000FE8692929282FE00 FEFEE0FEE2FEC000FEC29E869E82FE00 FEFEE0FEE2EECE00FEC29E869E9EFE00 FEFEE0EEE4FCC000FEC29E929A82FE00 FEFEEEFCECECC800FE9692829292FE00 FEFEF2F6F6FEC200FE86CECECE86FE00 FEFEF8FAFAFAE200FEC2E6E6A6C6FE00 FEFEECF8EEECC800FE9292869292FE00 FEEEEEEEE6FCC000FEDE9E9E9A82FE00 FEFEFCFCECECC800FEBA92829292FE00 FEFEFEECECECC800FE9682929292FE00 FEFEECECECF8C200FEC292929286FE00 FEFEEEFCE0EECE00FE8692829E9EFE00 FEFEECECE8FEC000FEC292929682FE00 FEFEEEF8EEECC800FE8692869292FE00 FEFEE0FECEFCC000FEC29E86F282FE00 FEFEF8FAFAFAE200FE82C6C6C6C6FE00 FEFEECECFCF8C200FE9292928286FE00 FEFEECFCF8F2E600FE92928286CEFE00 FEFEECFCFCE8EA00FE92928282D6FE00 FEFEECF8EEECC000FE9292C69292FE00 FEFEFCF8FAFAE200FE9282C6C6C6FE00 FEFEDCF8F2FCC000FE82E2C68E82FE00 0000E5B6F6B6B6000000000000000000 00009BDEDEDADB000000000000000000 00007A3333337B000000000000000000 0000C76C6D6C67000000000000000000 00000000808080000000000000000000 #3:MAIN BG 00001410800081008200900081008200 81008400830080008200800085008300 86028702880289028A028B0280009100 92008000830093008300930083009300 9300800095009700000000008C039603 00000000A000A100A200A300A400A500 A600A700A800A900AA00AB00AC00AD00 AE00AF000000000000000000B000B100 B200B300B400B500B600B700B800B900 BA00BB00BC00BD00BE00BF0000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000 #4:NSMP! ADDRESS 1F05000200BB0A0500BD00DF0C05019D 00A90905024700DF0C05032700DF0C05 040700730605047A00F10D05056C00DF 0C05064C01040E05075000BB0A05080C 00DF0C0508EB00DF0C0509CB013A1105 0B0600A909050BAF00A909050C5900CD 0B050D2700CD0B050DF400CD0B050EC2 00CD0B050F9000CD0B05105E00CD0B05 112C00CD0B0511F900CD0B0512C700CD 0B05139500CD0B05146300CD0B051531 00CD0B0515FE00F10D0516F000F10D05 17E200F10D0518D400F10D #5:NSMP! LEVELS 19C60000010200000041086111171A00 00510352030000282428240000410861 11141A00005A03520300002824C80900 0041086111171A000051035203000000 00C809000041086111141A0000510352 03C8090000C809000041086111171A00 005E030000C809A925C8090000410861 11141A00000000A925C809A925000000 0041086111171AA9250000A9250000A9 2500000000410861110000A9250000A9 250000000000000000410800000000A9 25000000000000000000000000020201 010101000800A908A908A9080800C910 C910C910080500001102110211020000 61026102610200000000110206141102 00006102061C6C020000000011021102 110200006A026102610200000000E92A E92AE92A0000B921B921B92100000000 31013101310100005101510151010000 00003B010634310100005101060C5101 00000000310131013101000051015101 510100000000D919D919D91900009932 99329932000000004100410041000000 21002100210000000000410006244100 00002100062C21000000000041004100 41000000210021002100000003030201 0300000F2C012C012C012C012C012C01 2C012C0E2C4123412341234123412341 2341234A234123611A611A611A0A1A61 1A611A611A611A611A51115111511151 11511151115111511151112108210821 082108210821082B0821082108000000 000000000000000000000000000000A9 08E91DA908E91DA908E91DA908E91DA9 08000000000000000000000000000000 000000C926D714C926D714C926D714C9 26D714C9260000000000000005058513 850B851B05058523852B853305050505 49112909191905054921292919310505 05050000000000000505000000000000 05050505000000000000050500000000 00000505050581088108810805058120 8120812005050505A928A928A9280505 99189918991805050505821182118211 05058231823182310505050599309930 99300505C910C910C91005050505821A 821A821A0505822A822A822A05050205 C920C920C9200205A908A908A9080205 01050000000000000105000000000000 01050000000000000000000000000000 00000000030303010101000800312941 1A010305060103411A312908000000C9 183229411A0F03411A3229C918000021 31D910C9183129411A3129C918990861 2151122231D910C9183E29C918990862 21110A0A0351122131D9100000990861 21110A0A030506010351122231000062 21110A01030506010351122131D91000 0099086B21110A010351122231D91000 00B128000099086221110A2131D91000 00A13000009108000099086121000000 00D1100000C1180000B1280000000000 00E120000091080000A1300000C11800 00B1280000A1300000D1100000E12000 00E12003030303030301483D483D483D 483D483D483D483D483D483DC93CC93C C93CC93CC93CC93CC93CC93CC93C5233 52335233522B522B522B522352235223 941294129412940A940A940A941A941A 941AD121DE21D121D131DA31D131D129 DC29D129171817181718171017101710 17081708170803030103030000411800 00B12BB22BB22BB22BB12B0000110841 1941180000B12BBF2BB12B0000110821 114118411941180000B12B0000110821 11110800004B18411941180000110821 111B080000E124000041184119612421 1111080000E124E224EA24000061243E 2E61240000EA24E224E1240000110821 116124411941180000E1240000110821 11110800004118411941180000110821 11110800009909000041184119411821 11110800009909A91299090000411841 19110800009909A9129909A912990900 0041180000000000009909A912990900 00000000000000000000000000990900 0000000000000003010301020202182C 182C182C183418341834183C183C183C 00000000000000000000000000000000 000000000000C723C723C723C723C723 C723C723C923C923412341234A234123 4D2341234123E91AE91A621A621A621A 621A621A621A621AE91AE91A621A621A 621A621A621A621A621A000000000000 0000000000000000000000000000A411 0000A4110000A4110000A41100000000 00000000000000000000000000000000 2F1121112A112111211121112111A911 A9115208520852085208520852085208 D908D908520852085208520852085208 5208D908D90803030303000303AE26A2 3EA136B10EB23EB116C136C23EC11EA1 25A23DA135B10DB23DB115C135C23DCA 1D000000000000000000000000000000 00000000000000000000000000000000 0000000000A122A23AA132B10AB23AB1 12C132C23AC11AA121A239AB31B109B2 39B111C131C239C119A728A728A728B7 28B728B728C728C728C7280000000000 00000000000000000000000000000000 00000000003938000000000000000000 00000000003930000039300000000000 00000000000000000039280000000000 00000000002910000000000000000000 00490800002920000029100000000000 00490800004918000029200000000000 00000000004918000002020203030300 020C020C020C0E1C0E1C0E1C02140214 0214520B520B520B521B521B521B5213 52135213410A410A410A4E1A4E1A4E1A 41124112411200000000000000000000 00000000000000000000050000002935 00002935000005000000000005002926 000029350000292E0500000008000500 05000500050005000500050008000000 00000000000000000000000000000000 0000E62100000000A43400000000E629 00000000000000000000000000000000 000000000303030303000041284F2841 2841284A28412841284B284128000000 00000000000000000000000000000006 20010006200100062001000620010006 20010006200100062001000620010006 20010000000000000000000000000000 00000000005118510851185110511851 30511851385118000000000000000000 0000000000000000000000D3300000D3 380000D3080000D31000000000000000 00000000000000000000000000000089 20000089200000892000008920000000 00000000000000000000000000000000 00C928C928C928C928C928C928C928C9 28C92803030301010100482100000000 00004821000000000000482100000530 023005300B3005300230053000000000 0F300000E4140000000000000A300000 00000530000000006914B70CB40C0530 000000000230A71C0000E31400000000 023000000000E1000000000000000000 A41BB10000000000E6130000B40B291B 00000000B60B00000000E10000000000 0000E7130000B100000000000228A31A 0000A61A000000000228000000000528 0000E712390A00000000052800000000 0A28000000000000B30AA41A0E280000 00000528022805280D28052802280528 0000020101010000009A009609910096 099A0096099100670800009100910091 00910091009100910000000000000000 00990900000000000000000000000000 00000000000000000000000000990900 00990900000000C908C908C908000000 00000000000000C908C908C908C908C9 08000000000000C908C908830BC90883 0BC908C90800000000C908C908830BC9 08C908830BC90800000000C908C908C9 08C908C908830BC90800000000C908C9 08C908C908C908830BC90800000000C9 08C908830BC908C908830BC908000000 00C908C908830BC908830BC908C90800 0000000000C908C908C908C908C90800 000000990900000000C908C908C90800 00000000000000000000000000000000 00000099090000000000009909000000 00000000000000000000000000000000 00000000000000000000000000000001 0102550252325A3252325502522A5F2A 522A550255022918000069285502B910 00009921550255020000391000005502 00008908000055025502090800001920 5502A9195232E929550255020000522B 0000523A000055020000550255024C04 55008909000099215502B91155025502 4C0455000000E9290000550200005502 5502550255025502550255025502A919 523AD73D0000D42D0000D73D0000D435 0000D73D000000000000004108611111 1A0000B1013621B10236220C2F000041 086E11111A0000B1013621B102362289 2B000041086111111A0000B1013621B1 020000892B000041086A11111A0000B1 013621892B0000911AE1114108611111 1A0000B1010000911AE111C108000041 086111111A0000911AEF11C108000089 2B000041086111111AE111C108000089 2B0000892B000041086111C108000089 2B0000892B0000892B00004108000000 00000000E4046624E4046624E4046624 E404111A111AC900E404C900E404C900 E404C900111A111A1119111911191119 11191119111911191A191E1911191110 11101110111011101111111111101110 02090209020902090209111011101110 11100000000000000000000011101110 02090209000000000000000000000209 02090000000000000000000000000000 000000000000000000008506CF028506 000000000000000000000000CB02C60C CE020000000000000000000000008506 CA028506000000000000000000000000 000000312231223122590B0000590B31 22312231223122311831200000590B00 00312231223122312202113118312200 00590B31223122311831180000021131 18312200003118311831183118000000 00021131183122311831183118311800 00000000000211311831183118021102 11000000000000000002110211021100 00000000000000000000000000000000 000000000000009401EB029401000000 000000000000000000ED02E613EE0200 00000000000000000000009701EA0297 01000000000000000000000000005121 51210000290800005121512151210000 51295129512100005121511951195121 00005129512951195121512902120212 512951215E2951290212511951290000 00005129512951295129000002125119 00000000512951295119511900000000 02120000000051195F19021202120000 00000000000000000212021200000000 00000000000000000000000000000000 00000000850485048504000000000000 000000000000CB03A613CA0300000000 0000000000000000A303A303A3030000 00000000000000000000000828082808 28082861206120083008300830C92889 28D928892861206120D9308930C93089 28D9288928C92861206120611B611B61 1BD9288928C928D92861206120611261 126112611B611B611B611B6120612002 09020902096112611261126112611261 12000000000000020902090209020902 09020900008928C92800000000000000 00000000000000C928D9288930D93000 00DB008503DB000000D9288928D93089 3000008503860A850300008928C92889 30C9300000DB008503DB000000C928D9 2800000000000000011A011AD924D924 011A011A011A011A5920011A011AD924 0B1A011A01100110011A011A011A011A D924011A011A02090209011A011A0F10 0110D92401100110D924D9240A100110 01100110011A01100110D924D9240110 011001100110011001100110D924D924 0110011002090209020902090209D924 D9240209020900000000000000000000 0000000000000000000000000000A504 AC04A504000000000000000000000000 A504D609A50400000000000000000000 0000A504A504A5040000000000000000 00000000002111211A00000000000021 112111211100002E11211A0000000021 11211A2E1A211A21102111211A000000 002111211A211A211A21112111211A21 1A00002111211A4925211A2E11020921 112E1A211A2E1A211A211A211A211100 00020921112111211121112111211102 09000000000209020902090209020902 09000000000000000000000000000000 0000000000C920C920C920AA00AB00AA 00C920C920C920C9208920C920A30086 09A300C9208920C920C920C920C920A2 00A200A200C920C920C9200000000000 00004118412841180000693400006934 0000693441104A204110412000006934 0000693400004128411802094A184128 41184A28411841284120411000000209 41204A104120411041204A184128E934 00000209020902090209020941104120 0000E9340000E9340000E93400000209 0209E9340000E9340000E9340000E934 00000000000000000000000000000000 0000000000000000B503B303B5030000 00000000000000000000BE03A60ABE03 000000000000000000000000B503B303 B5030000000000000000000000000039 205B1A1112511A3920511A1112511A39 20511A1112511A1112511A1112511A1B 12511A1112511A020902091B12020902 09511A1112511A111200000000511A00 0000001112511A1112511A1112511A11 12511A1B12511A1112020911125B1A11 1202091112511A111202090000020902 09020900000209020902090000000000 000000000000000000000000000000B9 20B920B920940394039403B920B920B9 20B920B920B9209B03860B9A03B920B9 20B920B920B920B920850385038503B9 20B920B9200000000000000000004110 6F104110611041106110411000004110 61184118611841186118411861184D10 61104118611841186110020902094118 61104110611819246118411099240000 61184110611041186118411861100000 992002090209020961104D1061100209 99240000992400009924020902090209 99240000992400009924000099240000 99240000992400009924000099240000 9924C705EC02C7059924000099240000 99240000C7058608C705000099240000 992400009924C705EE02C70599240000 992400000000000000000031184F2021 28311841202128311800003118412021 28311841202128311841202128412021 28311802090209020941202128311821 2831184120591659165916212831184F 2031184F202128311841202128311841 20212802092128311841202128311841 20212802090000020902090209020902 09020902090000000000000000000000 000000000000000000000000000000E8 00E800E800000000000000D915D915D9 159E0086099E00D915D915D915000000 00000085018501850100000000000000 000000000000E90CD508990CD508D508 D508D508E40CD5080000E90C00000000 000000000000140CE40C990C00008109 81098109810986000000940C00008109 840B820B820B810B8609810900000000 8109840B00000000810B860287090000 000081098E0B810B8A0B830B860B8E09 000000008109840B00000000810B8602 8709000000008109840B820B820B810B 860981090000990C0000810981098109 810986000000940C0000E90C00000000 000000000000940CE40CE90C0000990C 0000000000000000E40C000000000000 00000028233823282338232823382328 23382328233823282338232823382328 23382328233823000000000000000000 00C31000000000000041104110411000 008700000000008408000052195A1952 1900000000C91081020000D920551A55 1A551AD92000008102860881020000D9 20000000000000830800008102C61081 0200000000D920000000000000000081 0200000000C710000000000000000001 0801080108000000000000C4100000D9 2062196B196219890800000000000000 000000651A651A651A00000000000000 0000D702260126012601261926192601 26110000870226012601260126192619 260126010000D702A1018601A1018601 AA018601A10100008402940294029402 94029402D4020000C1008600CB008600 C1008600C10087020000460846004618 46184600460046008702000046004600 46184618460046004600D7020000C100 C100C100C100CD00C100C100C1000000 00000000000000000000000000000000 00000000C90C0000C90C0000C90C0000 C90C0000A9150000A9150000A9150000 A9150000A9150000C90C0000C90C0000 C90C0000C90C0000A9150000A9150000 A9150000A9150000A915000000000000 00580B580B580B580B580B580B580B58 0B580B96028100960281009602810096 028A0061198100061081009600810096 00810061194118960281009602810096 0281006119411800008B009600810096 008100611941180000D90C9602810096 028100611941180000D90C0000810096 008100611941180000D90C0000991396 028100611941180000D90C0000991300 008E00611941180000D90C0000991300 000000611941180000D90C0000991300 000000000041180000D90C0000991300 000000000000000000D90C0000991300 000000000000000000D90C0000991300 00000000000000000000000301010101 01012108210821082108210821082108 21082108000000000000000000000000 00000000000051380000000000005E20 00000000000051283130511000005130 31385118000051103118512831105A20 3118511031285B203130512000005130 31285128000051303118512800000000 00005138000000000000511000000000 31200000000000003118000000000000 31300000313800003128000031100000 31200000A908000031100000A9080000 31180000A9080000A9080000A9080000 A9080000A908000000000000A9080000 00000000A90800000000000000000000 00000000000000000000000000000000 000000E61261010000570B0000671300 005101D60A6101E61261010000000000 005101D60A510100006101E612610100 005101D60A51010000000000006101E6 123500D60A5101000000000000000000 00350025043500000000000000000000 00350025041906250435000000000000 00000025004906090749062500000000 00000000004906090719070907490600 00000000000000250019064907190625 00000000000000000035002504090625 04350000000000000000000000350025 04350000000000000000000000000000 00350000000000000000000000000000 00000000000000000000000000 #14:SOUND 57036010002270007801F04F0AFF0000 24002126090800002800303019FE0000 7801F00F02FF00005803501D004F0000 0800000F000000000800000F00000000 0800000F000000000800000F00000000 0800000F000000000800000F00000000 0800000F000000000800000F00000000 0800000F000000000800000F00000000 0D0E4040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 325F00000000355F000000003E5F0000 0000325F00355F000000003E5F000000 00325F00355F000000003E5F00000000 3E5F000000003E540000000035530000 00003E54000000003552000000003E53 000000003551000000003E5200000000 2E5F00000000325F000000003A5F0000 00002E5F00325F000000003A5F000000 002E5F00325F000000003A5F00000000 3A5F000000003A540000000032530000 00003A54000000003252000000003A53 000000003251000000003A5200000000 #15:MAIN SOUND 57036010002270007801F04F0AFF0000 24002126090800002800303019FE0000 7801F00F02FF00005803501D004F0000 6207903610F8DD00480A407714AD0600 0000500E076F02000800000706DF8300 1000000F02FFF0005005000F02FFF000 0800000F000000006405212609080000 0800000F000000000800000F00000000 968B18198205220A0205220A0706230A 0706230A08050C0A08050C0A0806090A 0886090A92292A2B122C2D2E122F302B 1232332E12292A2B122C2D2E122F302B 12B2332E9A1B1C0D1D1E1F0E1A212017 1D110F0E1A24250D1DA6270E40404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 310AE13508003807003D060000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 2E0FE12F0F00300F0000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 1A2F0000000000000000000043190000 0000000000000000163C00000000163C 00000000431900000000000000000000 163C0000000000000000000043190000 0000000000000000163C00000000152F 001D2F00431900152F001C2F00000000 380FE1390F003A0F003B0F003C0F0000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 5917E158160057150056160055170000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 3227003524003227003524003E260035 24003926003524003227003524003228 003524003E2800352400392900352400 322900352400322A003524003E2A0035 2400392B00352400322A003524003229 003524003E2700352400392700352400 2E27003224002E27003224003A270032 24003528003224002E28003224002E28 003224003A2900322400352900322400 2E29003224002E2A003224003A2A0032 2400352A003224002E2B003224002E2A 003224003A2900322400352800322400 162F0000000000000000000043190000 0000000000000000113C00000000113C 00000000431900000000000000000000 113C0000000000000000000043190000 0000000000000000113C00000000162F 001A2F00431900122F00182F00000000 163C00000000146B5F00000043190000 0000000000000000163C00000000163C 00000000431900000000000000000000 163C00000000146B5F00000043190000 0000000000163A00163C00000000163A 00000000431900000000146B5F000000 162C31162D32162F32162C31162F3322 2C32162D31162B31182E32182F31182C 31182D32182F31242C34182F32182B32 1A2E311A2C311A2D311A2F321A2F3126 2C341A2E321A2B321C2F321C2C311C2E 321C2B321C2D34282C341C2F311C2C32 5E4B005E47005E4B005E4700113D005E 47005E4B005E47005E4B005E47005E4B 005E4700113D005E47005E4B005E4700 5E4B005E47005E4B005E4700113D005E 47005E4B005E47005E4B005E47005E4B 005E4700113D005E47005E4B005E4700 275A00265A00255A00265A00275A0026 5A00255A00255A00275A00265A00255A 00265A00275A00265A00255A00265A00 275A00265A00255A00255A00275A0026 5A00255A00265A00275A00265A00255A 00265A00275A00265A00255A00265A00 1A2D311A2F321A2D321A2E311A2D3326 2E321A2F311A2D311C2E321C2F311C2E 311C2C321C2F31282C341C2C321C2D32 1D2F311D2E311D2F311D2C321D2F3129 2C341D2D321D2C321F2F321F2C311F2D 321F2E321F2C342B2D341F2D311F2F32 29BF0000000038BF0000000000000000 000037BF0000000035BF0000000033BF 0035AF00FF0000000000000000000000 290F000000002C0F0000000000000000 00002B0F00000000290F00000000270F 00000000290F00000000000000000000 29BF0000000035BF0000000000000000 000033BF0000000031BF0000000030BF 0031BF00FF0000000000000000000000 290F00000000350F0000000000000000 0000330F00000000310F00000000300F 003D0F00000000000000000000000000 41BF00000000190F00190F00190F0000 0000192F00FF0000000000000000190F 00190F00190F0000000041AF00000000 000000000000192F00FF00003D9F00FF 000041AF00000000000000000000190F 00190F00190F0041BF00192F00FF0000 143F000000000D2F00000000FF000000 00000000000000000000000000000000 000000000000000000000D2F00000000 143F0000000000000000000000000000 0000143F000000000D2F00FF00000000 00000000000000143F00000000000000 143F000000000D2F0000000000000000 00003DBF000000003DBF000000003CAF 003DAF00000000FF00000D2F00000000 143F0000000041AF0000000000000000 0000143F000000000D2F00FF000041AF 00000000000000143F003D9F00FF0000 0F3F000000005E4F00000000291F0029 15000F3F000000005E4F000000000000 00291F002915000000000F3F00000000 0F3F000000005E4F00000000291F0029 15000F3F000000005E4F00000000291F 00291F002915000F3F00000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 163F000000005E46005E4600431F0000 00005E46005E46000000000000005E46 005E4600431F000000005E46005E4600 163F000000005E46005E460000000000 00005E46005E4600163F000000005E46 005E46000000000000005E46005E4600 3883003A83003683003783003883003A 83003B83003783003883003683003883 003A83003B83003A8300368300348300 3A83003783003A83003B83003883003C 83003283003683003A83003883003983 00388300388300368300378300378300 29BF0000000038BF000000005C4F0000 000037BF0000000035BF0000000033BF 0035AF00FF00000000005C4F00000000 290F000000002C0F000000005C4F0000 00002B0F00000000290F00000000270F 00000000290F000000005C4F00000000 52A3000000004EA3000000004DA30000 000049A30000000052A3000000004EA3 000000004DA30000000049A300000000 52A3000000004EA3000000004DA30000 000049A30000000052A3000000004EA3 000000004DA30000000049A300000000 32830033830034830035830036830037 83003883003983003283003383003483 00358300368300378300388300398300 32830033830034830035830036830037 83003883003983003283003383003483 00358300368300378300388300398300 1D2F00000000000000000000441F0000 0000112F00000000143F000000005C4F 005C4F00441F000000001D2F00000000 112F00000000FF3F00000000441F0000 0000FF3F00000000143F000000005C4F 005C4F00441F00000000143F00000000 143F00000000112F00000000FF000000 00000000000000000000000000000000 00000000000000000000112F00000000 143F0000000000000000000000000000 0000143F00000000112F00FF00000000 00000000000000000000000000000000 0000000000001D0F001D0F001D0F0000 0000242F00FF00000000000000001D0F 001D0F001D0F00000000000000000000 000000000000242F00FF000000000000 00000000000000000000000000001D0F 001D0F001D0F00000000242F00FF0000 192F00000000000000000000441F0000 00000D2F00000000143F000000005C4F 005C4F00441F00000000192F00000000 0D2F00000000FF3F00000000441F0000 00002B0F00000000143F000000005C4F 005C4F00441F00000000143F00000000 143F000000000D2F00000000FF000000 00000000000000000000000000000000 000000000000000000000D2F00000000 143F0000000000000000000000000000 0000143F000000000D2F00FF00000000 00000000000000143F00000000000000 000000000000190F00190F00190F0000 0000192F00FF0000000000000000190F 00190F00190F00000000000000000000 000000000000192F00FF000000000000 0000000000000000000000000000190F 00190F00190F00000000192F00FF0000 44AF000000001D0F001D0F001D0F0000 0000242F00FF0000359F00FF00001D0F 001D0F001D0F0000000044BF00000000 359F00FF0000242F00FF000044AF0000 0000000000000000000000FF00001D0F 001D0F001D0F00000000242F00FF9F00 143F00000000112F00000000FF000000 000041BF000000000000000000000000 00419F0041BF00000000112F00000000 143F0000000000000000000000000000 0000143F00000000112F00449F0044BF 0000000000000000000041BF00000000 325F00000000355F000000003E5F0000 0000325F00355F000000003E5F000000 00325F00355F000000003E5F00000000 3E5F000000003E540000000035530000 00003E54000000003552000000003E53 000000003551000000003E5200000000 2E5F00000000325F000000003A5F0000 00002E5F00325F000000003A5F000000 002E5F00325F000000003A5F00000000 3A5F000000003A540000000032530000 00003A54000000003252000000003A53 000000003251000000003A5200000000 143F00000000112F000000002CBF0000 000029BF00000000509600FF00004D96 00FF0000000000000000112F00000000 143F000000001DAF000000001FAF00FF 0000143F00000000112F00FF0000509A 00FF00004D9A00FF0000000000000000 38AF000000001D0F001D0F001D0F0000 0000242F00FF00000000000000001D0F 001D0F001D0F000000002CBF002BBF00 29BF00000000242F00FF000000000020 AF0022AF0024AF0029BF000000001D0F 001D0F001D0F00000000242F00FF0000 143F000000000D2F00000000FF000000 000027BF0000000025BF0000000024BF 0025AF000000000000000D2F00000000 143F0000000031BF0000000000000000 0000143F000000000D2F00FF00000000 0031BF0033BF00143F00000000000000 29BF00000000190F00190F00190F0000 0000192F00FF0000000000000000190F 00190F00190F0000000031BF0025BF00 31BF0025BF00192F00FF000041970035 9700419700359700419700000000190F 00190F00190F0035BF00192F00FF0000 113F005C4F00361F00000000113F005C 4F000000005C4F00113F005C4F000000 005C4F00361F000000005C4F00000000 113F005C4F00361F00000000113F005C 4F000000005C4F00113F005C4F000000 005C4F00361F000000005C4F00000000 37BF0037B90037B50037B10000000000 000033BF0000000030BF0030B50030B1 000000002BBF002BB5002BB100000000 35BF0035BF0000000035BF0033BF0000 000035BF0000000037BF0037BC0037B9 0037B50037B100000000000000000000 182F00000000387900000000182F0000 00000000000000000C2F00182F000C2F 00182F00FF0000000000367900000000 000000000000000000112F0000000000 00001D2F00FF2F000000000000002C79 00000000000000000000000000000000 24DE0000000000000018DF0000000000 00002BDD0000000000000000000027DD 000000000000001BDE00000000000000 16DF000000000000002EDD0000000000 000020DE0000000013DF000000000000 002BDD000000001FDE0000000013DF00 37BF0037B90037B70037B5001FBF0000 000032BF0000000033BF0033B90033B5 0033B100000000000000000000000000 35BF0033BF0000000032BF0033BF0000 00002FBF0000000030BF0030B90030BB 0030B50030B70030B10030B300000000 182F000000002C79000000000000005C 170000000024DF00000000182F00FF00 000000005C17000000003B7800000000 1B2F00FF00000000005C170000000000 0000397800000000192F00FF00005C17 00000000387900000000182F00000000 24DE0000000000000018DF0000000000 00002BDD000000000000000000001BDF 000000000000000FDF00000000000000 2EDD0000000000000016DF0000000000 000020DE0000000030DD000000000000 0013DF000000001FDE000000002BDD00 37AF0000000000000037B50037B10000 000033BF0000000030BF0030B1000000 001FBF000000001FBF001FB100000000 35BF0035BF0000000035BF003ABF0000 000038BF0000000037BF0037B1000000 001FAF00000000000000000000FF0000 2C76000000003179000000000000005C 170000000024DF00000000182F000000 000000005C1700000000367900000000 1D2F000000000000005C17000000001B 2F001A2C001B2F001A2C001B2F002C79 000000000000005C170024DF00000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 37AF0000005E00005D37B50037B10000 000032BF0000000033BF0033B90033B5 0033B100000000000000000000000000 35BF0033BF0000000032BF0033BF0000 00002FBF0000000030BF0030B90030BB 0030B50030B70030B10030B300000000 0000002C7900000000000000182F0000 00000C2F00182F000C2F00182F00FF00 000000000000000000003B7800000000 1B2F000000000000000000001D2F00FF 00003978000000000000000000000000 00387900000000132F00FF0000000000