' 14/09/2020 ' ' FreeSkate V0.3 by DrGonzo & Greenpilloz ' ' Skate like a pro! Pull off tons of tricks in the street and on the modules! ' Bust huge combos using the wheeling to link vert, grind and street tricks. ' New advanced 2-D graphics gives you the ultimate skating experience. ' ' - Controls: ' ' (A): Ollie (on ground) / Flip (in air) ' (B): Manual (on ground) / Heelflip (in air) / Grind (on bar) ' left/right: direction (on ground) / 180 (in air) ' up/down: balance (in manual or grind) / Trick Varial (in air) ' ' Hope you enjoy =) GOTO GLOBALINIT '*********************************** ' VARIABLES & SETTINGS '*********************************** RESETVARS: GLOBAL PX, GROUND 'CHARACTER POSITION X=0 Y=64 PX0=64 PX=64 'PAUSE CURSOR Z=56 'SPEED VX=0 VY=0 'SETTING MOUVEMENT HORIZONTAL ACCELERATION=0.05 MAXSPEED=10 DRAG=0.01 'SETTINGS JUMP JUMPMULTIP=1 GROUND=64 JUMPSTRENGTH=3 GRAVITY=0.1 'SETTINGS SCORE LAND_TIME=0 BONUS=1 SCORE=0 CURSCORE=0 JUMPSTANCE=0 'GRIND/WEELING WEELING=0 GRIND=0 GRINDHEIGHT=64-16 GRINDZONE=16 INCLINEPLANE=0 ISJUMPING=0 'SETTINGS MOVES SPEED_ROT=0.2 SPEED_FLIP=0.2 SPEED_VARIAL=0.4 SPEED_STEP=0.1 RETURN '*********************************** ' GLOBAL INIT (ONLY ONCE) '*********************************** INITSCORE: GLOBAL TRICK$, BESTTRICK$, BESTSCORE, NAME$ GLOBAL ALLTIMEBESTTRICK$, ALLTIMEBESTSCORE, BESTNAME$ BESTNAME$="BOB" NAME$="..." ALLTIMEBESTSCORE=24 ALLTIMEBESTTRICK$="" BESTSCORE=0 BESTTRICK$="" TRICK$="" RETURN SAVESCORE: 'WRITE THE CURRENT NAME ON FIRST THREE BYTES POKE $E000, ASC(MID$(NAME$,1,1)) POKE $E001, ASC(MID$(NAME$,2,1)) POKE $E002, ASC(MID$(NAME$,3,1)) 'WRITE THE BEST NAME ON NEXT THREE BYTES POKE $E003, ASC(MID$(BESTNAME$,1,1)) POKE $E004, ASC(MID$(BESTNAME$,2,1)) POKE $E005, ASC(MID$(BESTNAME$,3,1)) 'WRITE THE SCORE ON A 4 BYTES SPACE POKEL $E006, ALLTIMEBESTSCORE 'WRITE THE TRICK ON THE REST POKE $E010, LEN(ALLTIMEBESTTRICK$) FOR I=1 TO LEN(ALLTIMEBESTTRICK$) POKE $E010+I, ASC(MID$(ALLTIMEBESTTRICK$,I,1)) NEXT I RETURN LOADSCORE: 'LOAD THE NAME FROM THE FIRST THREE BYTES NAME$ = CHR$(PEEK($E000))+CHR$(PEEK($E001))+CHR$(PEEK($E002)) 'LOAD THE BESTNAME FROM THE NEXT THREE BYTES BESTNAME$ = CHR$(PEEK($E003))+CHR$(PEEK($E004))+CHR$(PEEK($E005)) 'LOAD THE SCORE FROM THE NEXT 4 BYTES ALLTIMEBESTSCORE = PEEKL($E006) 'WRITE THE TRICK ON THE REST ALLTIMEBESTTRICK$="" LENALLTIMEBESTTRICK = PEEK($E010) FOR I=1 TO PEEK($E010) ALLTIMEBESTTRICK$ = ALLTIMEBESTTRICK$ + CHR$(PEEK($E010+I)) NEXT I RETURN GLOBALINIT: GAMEPAD 1 RANDOMIZE TIMER GOSUB INITSCORE GOSUB LOADSCORE IF ALLTIMEBESTSCORE=0 THEN GOSUB INITSCORE GOSUB SAVESCORE END IF 'ARRAY FOR THE OPTION MENU OPTION_LENGTH = 4 DIM OPTIONS(3), OPTION_NAMES$(3) OPTION_NAMES$(0) = "MUSIC" OPTION_NAMES$(1) = "MODULES" OPTION_NAMES$(2) = "MOON" OPTION_NAMES$(3) = "GOOFY" OPTIONS(0)=1 OPTIONS(1)=0 OPTIONS(2)=0 OPTIONS(3)=0 'OPTIONS(4)=-1 ' ARRAYS FOR MOTIONS, E.G: ' NBFLIP(0) : THE FLOAT FLIP COUNT THAT IS INCREMENTED BY 'SPEED_FLIP' ' NBFLIP(1) : THE NUMBER OF REQUESTED FLIP (EVERY BTN PRESS) ' NBFLIP(2) : THE ABSOLUTE FLIP COUNT OF THE CURRENT TRICK (FLIP + HEEL = 2 FLIP) ' NBFLIP(3) : THE FLIPPING STATE (IN [0,1,2,3]) DIM NBFLIP(3), NBVARIAL(3), NBROT(3), NBSTEP(3) GLOBAL TRICKS_LEN TRICKS_LEN = 0 DIM GLOBAL TRICKS$(100) GOSUB SETMOVINGSPRITES GOSUB SETMODULES GOTO MENU0 '*********************************** ' GOTO MENU0 '*********************************** MENU0: CLS GOSUB SETSPRITES MUSIC 2 BG 1 BG COPY 0,16,32,16 TO 0,0 MENU: CLW Y=56 P=(RND * 100) MOD 4 DANCE=0 FLIPPING=0 BTSCROLL=1 WAIT VBL DO PAL 4 LOCATE 2,5 PRINT "BEST: "+BESTNAME$+ " "+STR$(INT(ALLTIMEBESTSCORE)) LOCATE 2,12 PRIO 0 BUF$=" " POS = BTSCROLL MOD (LEN(ALLTIMEBESTTRICK$)+32)+ 1 PRINT MID$(BUF$+ALLTIMEBESTTRICK$+BUF$, POS, 16) PAL P LOCATE 5,2 PRINT "FREE SKATE" LOCATE 5,7 PRINT "PLAY" LOCATE 5,8 PRINT "OPTIONS" LOCATE 5,9 PRINT "NAME" LOCATE 10,9 PRINT NAME$+" " LOCATE 5,10 PRINT "RESET" LOCATE 4,15 PRINT "A GAME BY G&G" IF UP TAP(0) AND Y > 56 THEN Y=Y-8 IF DOWN TAP(0) AND Y < 80 THEN Y=Y+8 IF BUTTON TAP(0) AND Y=56 THEN GOSUB START IF BUTTON TAP(0) AND Y=64 THEN GOSUB OPTIONS IF BUTTON TAP(0) AND Y=72 THEN NAME$="" LOCATE 10,9 INPUT NAME$ NAME$ = LEFT$(NAME$,3) KEYBOARD OFF GAMEPAD 1 GOSUB SAVESCORE END IF IF BUTTON TAP(0) AND Y=80 THEN GOSUB INITSCORE GOSUB SAVESCORE END IF 'OLD CURSOR 'SPRITE 4,29,Y,17 SPRITE 4, 40, 104, 40 SPRITE 4 FLIP DANCE,0 SPRITE 5, 40, 96, 23 SPRITE 6, 29, Y, 11 + 16*FLIPPING IF TIMER MOD 30 = 0 THEN DANCE=(DANCE+1) MOD 2 IF TIMER MOD 5 = 0 THEN FLIPPING=(FLIPPING+1) MOD 3 IF TIMER MOD 5 = 0 THEN BTSCROLL=BTSCROLL+1 WAIT VBL LOOP '*********************************** ' GOTO OPTIONS '*********************************** OPTIONS: MUSIC 2 CLW WAIT VBL DANCE = 0 FLIPPING=0 DO LOCATE 5,2 PRINT " OPTIONS" LOCATE 5,10 PRINT "BACK" LOCATE 4,15 PRINT "A GAME BY G&G" FOR I=0 TO OPTION_LENGTH-1 LOCATE 5, 8-I PRINT OPTION_NAMES$(I) LOCATE 13,8-I IF OPTIONS(I) = 1 THEN PRINT "ON " ELSE IF OPTIONS(I) = 0 THEN PRINT "OFF" END IF NEXT I MINY = 72 - OPTION_LENGTH * 8 IF UP TAP(0) AND Y > MINY THEN Y=Y-8 IF DOWN TAP(0) AND Y < 72 THEN Y=Y+8 IF BUTTON TAP(0) AND Y = 72 THEN GOTO MENU IF BUTTON TAP(0) THEN I = (64-Y)/8 OPTIONS(I) = (OPTIONS(I)+1) MOD 2 END IF SPRITE 4, 40, 104, 40 SPRITE 4 PAL 1 SPRITE 4 FLIP DANCE,0 SPRITE 5, 40, 96, 23 SPRITE 5 PAL 1 Y2 = Y IF Y=72 THEN Y2=72+8 SPRITE 6, 29, Y2, 11 + 16*FLIPPING SPRITE 6 PAL 1 IF TIMER MOD 30 = 0 THEN DANCE=(DANCE+1) MOD 2 IF TIMER MOD 5 = 0 THEN FLIPPING=(FLIPPING+1) MOD 3 'SPRITE 4,29,Y,17 WAIT VBL LOOP '*********************************** ' GOSUB START '*********************************** START: CLS SPRITE OFF 4 SPRITE OFF 5 SPRITE OFF 6 '*********************************** ' INITIALISATION '*********************************** 'ROAD BG 0 PRIO 1 FOR I=0 TO 32/8 BG COPY 0,0,8,16 TO I*8,0 NEXT I 'BG 'SEA & SKY BG 1 PRIO 0 BG COPY 0,16,32,16 TO 0,0 'RESETING ALL VARS GOSUB RESETVARS 'RESET ALL MOTIONS TO 0 FOR I=0 TO 3 NBFLIP(I) = 0 NBROT(I) = 0 NBVARIAL(I) = 0 NBSTEP(I) = 0 NEXT I 'ACTIVATE OPTIONS IF OPTIONS(0)=1 THEN MUSIC 0 ELSE STOP END IF IF OPTIONS(2)=1 THEN 'MOON GRAVITY JUMPSTRENGTH=0.9 GRAVITY=0.01 SPEED_FLIP = SPEED_FLIP/1.5 SPEED_ROT = SPEED_ROT/1.5 SPEED_STEP = SPEED_STEP/1.5 SPEED_ROT = SPEED_ROT/1.5 SPEED_VARIAL = SPEED_VARIAL/1.5 END IF PAUSE OFF '*********************************** ' MAIN LOOP '*********************************** WAIT VBL DO BG 1 PRIO 1 '---- DRAWING THE DECOR---- 'MIGHT CHANGE THE POSITION OF THE GROUND IF OPTIONS(1)=1 THEN GOSUB DRAWMODULES '----- PAUSE ----- IF PAUSE THEN GOSUB PAUSEMENU END IF ' ---- HORIZONTAL LOGIC ---- IF ISJUMPING=0 AND RIGHT(0) THEN VX = VX+ACCELERATION NBROT(0)=0 NBROT(1)=0 NBROT(3)=0 NBSTEP(1) = NBSTEP(1)+1 ELSE IF ISJUMPING=0 AND LEFT(0) THEN VX = VX-ACCELERATION NBROT(0)=2 NBROT(1)=2 NBROT(3)=2 NBSTEP(1) = NBSTEP(1)+1 ELSE 'IF WE ARE NOT PUSHING NBSTEP(0) = 0 NBSTEP(1) = 0 END IF 'ADDING DRAG ON X AXIS IF ABS(VX-DRAG) < DRAG*2 THEN VX=0 IF VX > DRAG THEN VX=VX-DRAG IF VX < -DRAG THEN VX=VX+DRAG ' ADDING SPEED LIMIT IF VX > MAXSPEED THEN VX = MAXSPEED IF VX < -MAXSPEED THEN VX = -MAXSPEED ' ---- VERTICAL LOGIC ---- IF Y< GROUND-4 THEN VY = VY+GRAVITY END IF IF Y(GROUND-GRINDZONE) AND VY>=0 AND GRIND=0 AND BUTTON TAP(0,1) THEN WEELING = (WEELING + 1) MOD 2 IF (Y=GROUND OR Y=GRINDHEIGHT) AND UP TAP(0) THEN BALANCESHIFT = ABS(BALANCESHIFT) IF (Y=GROUND OR Y=GRINDHEIGHT) AND DOWN TAP(0) THEN BALANCESHIFT = -ABS(BALANCESHIFT) IF WEELING=1 THEN SCORE = SCORE + 0.1* INT(BONUS) IF GRIND = 1 THEN VOLUME 3, 1, PLAY 3, 40, 1 SOUND 4 END IF PX = PX + BALANCESHIFT BALANCESHIFT = BALANCESHIFT * 1.01 ELSE BALANCESHIFT=0.1 IF PXPX0 THEN PX = PX - 0.1 END IF IF PX < 0 OR PX > 150 THEN GOSUB CRASH ' ---- GRIND LOGIC------ IF Y<=GRINDHEIGHT AND Y>(GRINDHEIGHT-GRINDZONE) AND VY>=0 AND BUTTON TAP(0,1) THEN GRIND = 1 WEELING = 1 GOSUB LANDING END IF IF GRIND=1 THEN IF Y>GRINDHEIGHT+8 THEN GOSUB CRASH IF Y>GRINDHEIGHT-8 THEN Y= GRINDHEIGHT VY=0 END IF END IF ' ---- FLIP LOGIC ---- IF ISJUMPING=1 THEN IF BUTTON TAP(0,1) THEN NBFLIP(1) = NBFLIP(1) - 4 IF BUTTON TAP(0,0) THEN NBFLIP(1) = NBFLIP(1) + 4 END IF '---- UPDATING POSITION ---- CALL ANIMATE(NBVARIAL(), SPEED_VARIAL) CALL ANIMATE(NBROT(), SPEED_ROT) CALL ANIMATE(NBFLIP(), SPEED_FLIP) CALL ANIMATE(NBSTEP(), SPEED_STEP) X=X+VX IF INCLINEPLANE<>0 AND ISJUMPING=0 THEN VX=VX - GRAVITY /2 * SGN(INCLINEPLANE) VY=ABS(VX) END IF Y=Y+VY SCROLL 0,INT(X),0 '---- DRAWING THE DUDE ---- 'HEAD CALL DRAW_HEAD(Y, NBROT(3), NBSTEP(3), WEELING) 'BODY CALL DRAW_BODY(Y, NBROT(3), NBSTEP(3), WEELING) 'SK8 CALL DRAW_SK8(Y, NBROT(3), NBFLIP(3), (NBROT(3)*2 + NBVARIAL(3)) MOD 4, WEELING) '---- DRAWING THE DECOR---- CALL DRAWMOVING(VX) ' ---- LANDING LOGIC ---- IF Y>=GROUND AND VY>0 THEN GOSUB LANDING 'FOR DEBUG 'CALL PRINTNB(NBROT()) ' 60 FRAMES AFTER THE LAST ' TRICK WE RESET THE TRICK DISPLAY ' AND THE BONUS IF TIMER-LAND_TIME>60 THEN IF WEELING=0 AND Y=GROUND THEN GOSUB CLEARTRICK BONUS = 1 CURSCORE = CURSCORE + SCORE IF CURSCORE>BESTSCORE THEN BESTTRICK$ = TRICK$ BESTSCORE = CURSCORE END IF IF BESTSCORE > ALLTIMEBESTSCORE THEN ALLTIMEBESTTRICK$ = TRICK$ ALLTIMEBESTSCORE = SCORE BESTNAME$=NAME$ GOSUB SAVESCORE END IF TRICK$ = "" SCORE=0 END IF END IF '---- SCORE ----- 'PRI0 0 TEXT 8,0, "SCORE: " NUMBER 14,0,CURSCORE+SCORE,5 TEXT 8,1, " BEST:" NUMBER 14,1,BESTSCORE,5 IF INT(BONUS) > 1 THEN TEXT 8,2,"BONUS X"+STR$(INT(BONUS)) END IF WAIT VBL LOOP '*********************************** '*********************************** ' END OF MAIN LOOP LANDING: 'SAVE THE LANDING TIME LAND_TIME=TIMER ISJUMPING=0 SPRITE OFF 3 'RESETING SOME PARAMS VY=0 'GROUND TRAVERSAL SAFETY Y = GROUND IF GRIND=1 THEN Y=GRINDHEIGHT IF NBFLIP(3) > 0 THEN GOSUB CRASH IF NBROT(3) = 1 OR NBROT(3) = 3 THEN GOSUB CRASH IF NBVARIAL(3) = 1 OR NBVARIAL(3) = 3 THEN GOSUB CRASH GOSUB POP GOSUB DISPLAYTRICK 'SOME TRICK HAVE BEEN NAILED ! YEAH ;-) IF (NBFLIP(2) + NBROT(2) + NBVARIAL(2)) > 0 THEN 'THE SLOWEST THE HARDEST SCORE = SCORE + NBFLIP(2)/SPEED_FLIP * INT(BONUS) SCORE = SCORE + NBROT(2)/SPEED_ROT * INT(BONUS) SCORE = SCORE + NBVARIAL(2)/SPEED_VARIAL * INT(BONUS) BONUS = BONUS + 0.5 END IF ' CALL RESET(NBFLIP()) CALL RESET(NBROT()) CALL RESET(NBVARIAL()) CALL RESET(NBSTEP()) RETURN '*********************************** ' SUBROUTINES '*********************************** SUB DRAW_BODY(Y, CURROT, CURSTEP, WEELING) 'FUNCTION THAT DRAW THE BODY IN ITS CURRENT STATE 'CURROT = 0,1,2,3 'CURSTEP = 0,1,2,(3)<-ACTUALLY STATE 3 IS THE SAME AS STATE 0 'WEELING = 0, 1 C=8 FX=0 FY=0 'IF Y 0 THEN IF ABS(NB(0)-NB(1)) < SPEED THEN NB(0) = NB(1) ELSE IF NB(0) < NB(1) THEN NB(0) = NB(0) + SPEED ELSE IF NB(0) > NB(1) THEN NB(0) = NB(0) - SPEED END IF NB(2) = NB(2) + SPEED/4 END IF 'UPDATE THE FLIP/ROT/... STATE NB(3) = NB(0) MOD 4 'TO BE SURE WE ARE IN [0,1,2,3] ' (E.G. IF WE DID -1.2 FLIP ' THEN NB(0) MOD 4 = -1 ' AND (NB(0) MOD 4) + 4 = 3 ' SO WE ARE IN "FLIP STATE" 3) WHILE NB(3)<0 NB(3) = NB(3) + 4 WEND END SUB '*********************************** ' GOSUB PIECES OF CODE '*********************************** CLEARTRICK: TEXT 1, 3, " " TEXT 1, 4, " " TEXT 1, 5, " " TEXT 1, 6, " " RETURN CRASH: MUSIC 2 SPRITE OFF 0 SPRITE OFF 1 SPRITE OFF 3 GOSUB CLEARTRICK TEXT 3, 9 , "- FAIL -" TEXT 3,7, " PRESS (START) " CRASHED = 0 WHILE CRASHED = 0 IF PAUSE THEN CRASHED=1 WAIT VBL WEND GOSUB START RETURN DISPLAYTRICK: 'PRIO 0 GOSUB CLEARTRICK IF LEN(TRICK$)>0 THEN TRICK$ = TRICK$ + " + " GOOFY = OPTIONS(3) STANCE$ = "" IF GOOFY=1 THEN IF JUMPSTANCE=0 THEN IF VX >0 THEN STANCE$="SWITCH " ELSE IF VX<0 THEN STANCE$="NOLLIE " END IF ELSE IF VX>0 THEN STANCE$="FAKY " END IF ELSE IF JUMPSTANCE=2 THEN IF VX <0 THEN STANCE$="SWITCH " ELSE IF VX>0 THEN STANCE$="NOLLIE " END IF ELSE IF VX<0 THEN STANCE$="FAKY " END IF END IF TRICK$ = TRICK$ + STANCE$ TEXT 1,3, STANCE$ VARIAL$ = "" R = INT(NBVARIAL(2) * 4) * 45 R = R - R MOD 180 IF R = 180 THEN VARIAL$="VARIAL " IF R > 180 THEN VARIAL$=STR$(R)+" " TRICK$ = TRICK$ + VARIAL$ TEXT 1,4, VARIAL$ F$="" IF INT(NBFLIP(2)) > 1 THEN F$=STR$(INT(NBFLIP(2)))+" " IF NBFLIP(2) > 0 AND NBFLIP(0) >= 0 THEN F$=F$+"FLIP " IF NBFLIP(2) > 0 AND NBFLIP(0) < 0 THEN F$=F$+"HEELFLIP " TRICK$ = TRICK$ + F$ TEXT 1,5, F$ ROTATION$="" R = INT(NBROT(2) * 4) * 90 R = R - R MOD 180 IF R = 180 AND NBROT(0) >= JUMPSTANCE AND NBFLIP(2) > 0 THEN ROTATION$="BACK " ELSE IF R = 180 AND NBROT(0) < JUMPSTANCE AND NBFLIP(2) > 0 THEN ROTATION$="FRONT " ELSE IF R > 0 THEN ROTATION$=STR$(R)+" " END IF TRICK$ = TRICK$ + ROTATION$ SLIDE$ = "" IF WEELING=1 THEN IF GRIND = 1 THEN 'GRIND CASE IF GOOFY=1 THEN IF NBROT(3)=2 THEN IF VX >=0 THEN SLIDE$="5-O" IF VX < 0 THEN SLIDE$="FUNKY GRIND !" ELSE IF VX <= 0 THEN SLIDE$="SWITCH 5-O " IF VX > 0 THEN SLIDE$="CROOK " END IF ELSE IF NBROT(3)=0 THEN IF VX >=0 THEN SLIDE$="5-O" IF VX < 0 THEN SLIDE$="FUNKY GRIND !" ELSE IF VX <= 0 THEN SLIDE$="SWITCH 5-O " IF VX > 0 THEN SLIDE$="CROOK " END IF END IF ELSE 'WEELING CASE IF GOOFY=1 THEN IF NBROT(2)=0 THEN SLIDE$="NOSE WEELING" ELSE SLIDE$="WEELING" END IF ELSE IF NBROT(2)=2 THEN SLIDE$="NOSE WEELING" ELSE SLIDE$="WEELING" END IF END IF END IF END IF IF LEN(SLIDE$)>0 AND LEN(ROTATION$)>0 THEN SLIDE$="TO "+SLIDE$ END IF TRICK$ = TRICK$ + SLIDE$ TEXT 1,6, ROTATION$ + SLIDE$ RETURN '*********************************** ' SOUNDS '*********************************** POP: ' INCLINEPLANE IS CONSIDERED JUMPING 1PX ' BUT WE DON'T WANT POPING SOUND IF INCLINEPLANE=1 OR INCLINEPLANE=-1 THEN RETURN SOUND 0,3,, VOLUME 0,8,3 PLAY 0,12,1 RETURN '*********************************** ' PAUSE MENU '*********************************** PAUSEMENU: MUSIC 2 DO PAL 3 'PRIO 1 TEXT 7,7, "BACK" TEXT 7,8, "MENU" IF UP(0) THEN Z=56 END IF IF DOWN(0) THEN Z=64 END IF IF BUTTON (0) AND Z = 56 THEN SPRITE OFF 4 CLS 1 BG 1 BG COPY 0,16,32,16 TO 0,0 WAIT 20 RETURN END IF IF BUTTON(0) AND Z=64 THEN WAIT 20 SPRITE OFF STOP GOTO MENU0 END IF SPRITE 4,45,Z,17 SPRITE 4 FLIP 0,0 WAIT VBL LOOP '*********************************** ' SPRITES SETTINGS '*********************************** SETSPRITES: 'SPRITE MAP '0: HEAD '1: BODY '2: SK8 '3: SHADOW '4-6: MENU CURSOR '7-10: SUN & SHADE '21-55:BG MOVING SPRITE 'SPRITE ATTRIBUTES DANS L'ORDRE: '- ATTRIBUTES: 'BIT PURPOSE '0-2 PALETTE NUMBER '3 FLIP X '4 FLIP Y '5 PRIORITY '6-7 SIZE: '0: 1 CHARACTER (8X8 PX) '1: 2X2 CHARACTERS (16X16 PX) '2: 3X3 CHARACTERS (24X24 PX) '3: 4X4 CHARACTERS (32X32 PX) 'PALETTE SPRITE.A 0,(1,0,,0,0) SPRITE.A 1,(1,0,,0,0) SPRITE.A 2,(1,0,,0,0) ' SHADOW SPRITE.A 3,(1,,,0,0) ' CURSOR SPRITE.A 4,(1,,,1,0) SPRITE.A 5,(1,,,1,0) SPRITE.A 6,(1,,,1,0) 'SUN SPRITE 7,10, 5,3 SPRITE 8,18, 5,3 SPRITE 9,10,13,3 SPRITE 10,18,13,3 SPRITE.A 7,(1,1,1,0,0) SPRITE.A 8,(1,0,1,0,0) SPRITE.A 9,(1,1,0,0,0) SPRITE.A 10,(1,0,0,0,0) RETURN SETMOVINGSPRITES: ' ---- MOVING SPRITES ---- 'ARRAY THAT CONTAINS ALL THE INFO ON MOVING SPRITES FROM THE DECOR 'WITH THE FOLLOWING STRUCTURE: ' 'SPRITE_NUM, CHAR_NUM, FLICK, X, Y, SPEED, PARLAX, MIN_SPEED, MAX_SPEED, MIN_Y, MAX_Y, C1, C2, C3 ' 'NB: ' IF MINS AND MAXS ARE DIFFERENT THEN A RANDOM POSITION ' WITHIN BOUNDS IS SET AFTER EACH TIME THE SPRITE ' REACHES THE BG EDGE` GLOBAL LEN_MOVING STARTAT=15 LEN_MOVING = 8+6 DIM GLOBAL MOVING(8+20, 13) 'READING ALL LINES STARTING WITH 'DATA' 'AND PUTTING THEM IN THE ARRAY AT POSITION I,J FOR I=0 TO 8 FOR J=0 TO 13 READ MOVING(I,J) 'DEBUG 'PRINT I, J, MOVING(I,J) NEXT J NEXT I 'WAVES 'SPRITE_NUM, CHAR_NUM, FLICK, X, Y, SPEED, PARLAX, MIN_SPEED, MAX_SPEED, MIN_Y, MAX_Y, C1, C2, C3 SPRITE.A 15,(3,,,,) SPRITE.A 16,(3,,,,) SPRITE.A 17,(3,,,,) DATA 15, 50, 20, 10, 24, 0, 0, 0, 0, 0, 0, 3, 3, 3 DATA 16, 50, 23, 18, 24, 0, 0, 0, 0, 0, 0, 3, 3, 3 DATA 17, 50, 26, 14, 28, 0, 0, 0, 0, 0, 0, 3, 3, 3 'CLOUDS 'SPRITE_NUM, PAL, FX, FY, PRIO, SIZE SPRITE.A 18,(,,,1,0) SPRITE.A 19,(,,,1,1) SPRITE.A 20,(,,,1,1) SPRITE.A 21,(,,,1,1) 'SPRITE_NUM, CHAR_NUM, FLICK, X, Y, SPEED, PARLAX, MIN_SPEED, MAX_SPEED, MIN_Y, MAX_Y, C1, C2, C3 DATA 18, 57, 0, 0, 8, 0.005, -0.005, 0, 0, 8, 20, 0, 0, 0 DATA 19, 58, 0, 40, 16, 0.005, -0.005, 0, 0, 8, 20, 0, 0, 0 DATA 20, 58, 0, 80, 20, 0.005, -0.005, 0, 0, 8, 20, 0, 0, 0 DATA 21, 58, 0, 160, 12, 0.005, -0.005, 0, 0, 8, 20, 0, 0, 0 'PLANE 'SPRITE_NUM, PAL, FX, FY, PRIO, SIZE SPRITE.A 22,(,,,1,1) 'SPRITE_NUM, CHAR_NUM, FLICK, X, Y, SPEED, PARLAX, MIN_SPEED, MAX_SPEED, MIN_Y, MAX_Y, C1, C2, C3 DATA 22, 55, 0, 0, 0, 0.5, -0.005, 0, 0, 0, 17, 0, 0, 3 'CAR 'SPRITE_NUM, PAL, FX, FY, PRIO, SIZE SPRITE.A 23,(3,,,1,2) 'SPRITE_NUM, CHAR_NUM, FLICK, X, Y, SPEED, PARLAX, MIN_SPEED, MAX_SPEED, MIN_Y, MAX_Y, C1, C2, C3 DATA 23, 20, 0, 0, 85, 3, -1, 0.3, 3, 80, 100, 1, 2, 3 I=1 WP=16 FOR ROW=1 TO 2 FOR W=2 TO 4 ' 0, 1 , 2 , 3, 4, 5 , 6 , 7, 8, 9, 10, 11, 12, 13 'SPRITE_NUM, CHAR_NUM, FLICK, X, Y, SPEED, PARLAX,MIN_SPEED, MAX_SPEED, MIN_Y, MAX_Y, C1, C2, C3 MOVING(8+I, 0) = 23+I MOVING(8+I, 1) = 1 MOVING(8+I, 2) = 120 MOVING(8+I, 3) = WP*8 MOVING(8+I, 4) = 16+8*ROW MOVING(8+I, 5) = 0 MOVING(8+I, 6) = -0.005 - ROW*0.1 MOVING(8+I, 7) = 0 MOVING(8+I, 8) = 0 MOVING(8+I, 9) = 0 MOVING(8+I, 10) = 0 MOVING(8+I, 11) = 0 MOVING(8+I, 12) = 0 I=I+1 WP=(WP+RND(5)+1) MOD 20 NEXT W NEXT ROW 'FOR I=0 TO LEN_MOVING ' PRINT MOVING(I,0) 'NEXT I 'LAST MOVING SPRITE 43 RETURN SUB DRAWMOVING(VX) 'DRAW THE MOVING BACKGROUND SPRITES 'REMINDER: 'SPRITE_NUM, CHAR_NUM, FLICK, X, Y, SPEED, PARLAX, MIN_SPEED, MAX_SPEED, MIN_Y, MAX_Y, C1, C2, C3 FOR I=0 TO LEN_MOVING SPRITE_NUM = MOVING(I,0) CHAR_NUM = MOVING(I,1) FLICK = MOVING(I,2) X = MOVING(I,3) Y = MOVING(I,4) SPEED = MOVING(I,5) PARALLAX = MOVING(I,6) MIN_SPEED = MOVING(I,7) MAX_SPEED = MOVING(I,8) MIN_Y = MOVING(I,9) MAX_Y = MOVING(I,10) C1 = MOVING(I,11) C2 = MOVING(I,12) C3 = MOVING(I,13) 'PARALLAX EFFECT '-0.1 : MOVES BACKWARD AT 10% OF SK8TER SPEED '-0.3 : MOVES BACKWARD AT 30% OF SK8TER SPEED X = X + VX * PARALLAX + SPEED 'IF OUT OF SCREEN WE RESET Y, SPEED AND COLOR IF X <= -16 OR X>=160+16 THEN IF X <= -16 THEN X = 160 IF X>=160+16 THEN X=0 'CHANGING THE Y COORDINATE IF MIN_Y <> MAX_Y THEN Y = RND(MAX_Y-MIN_Y) + MIN_Y END IF 'CHANGING THE SPEED IF MIN_SPEED <> MAX_SPEED THEN SPEED = RND(MAX_SPEED-MIN_SPEED) + MIN_SPEED END IF 'CHANGING THE COLOR IF C1 <> C2 OR C1 <> C3 THEN R = RND(2) IF R=0 THEN SPRITE SPRITE_NUM PAL C1 IF R=1 THEN SPRITE SPRITE_NUM PAL C2 IF R=2 THEN SPRITE SPRITE_NUM PAL C3 END IF END IF F = 0 IF FLICK > 0 THEN IF (TIMER+SPRITE_NUM*60+SPEED*60) MOD FLICK > FLICK/2 THEN F=1 END IF ' DRAWING THE SPRITE SPRITE SPRITE_NUM, X, Y, CHAR_NUM + F SPRITE SPRITE_NUM PRIO 0 'WE WRITE THE MODIFICATIONS BACK TO THE ARRAY MOVING(I,0) = SPRITE_NUM MOVING(I,1) = CHAR_NUM MOVING(I,2) = FLICK MOVING(I,3) = X MOVING(I,4) = Y MOVING(I,5) = SPEED MOVING(I,6) = PARALLAX MOVING(I,7) = MIN_SPEED MOVING(I,8) = MAX_SPEED MOVING(I,9) = MIN_Y MOVING(I,10) = MAX_Y MOVING(I,11) = C1 MOVING(I,12) = C2 MOVING(I,13) = C3 NEXT I END SUB SETMODULES: 'TO CREATE A MODULE: ' - FIRST DRAW IT IN THE BG EDITOR ' - THEN DEFINE THE 3 ARRAYS: ' O BG LOCATION: [CX1, CY1, CX2, CY2, PERIODX, OFFSETX] ' O MODULE HEIGHTS: [15 X HEIGHT, ...] (1 BLOCK = 8PX) ' O MODULE TYPES: [15 X TYPE, ...] ' O MODULE GRINDHEIGHT: [15 X GHEIGHT, ...] 'TYPE: '-1: GOING UP CURVE ' 0: NOTHING ' 1: GOING DOWN CURVE ' 2: CUBE ' N.B. : ' - PERIODX CORRESPOND TO THE NUMBER OF SCREENS BETWEEN ' REPEATING MODULES (E.G. IF YOU WANT THE MODULE EVERY ' 10 SCREENS THEN PERIODX=10) ' - 'GRIND HEIGHT' AND 'HEIGHT' DONT HAVE TO BE CORRELATED ' - MAXIMUM 15 BLOCKS ' - YOU ONLY NEED TO SPECIFY THE TOP LAYER OF BLOCKS ' - DESIGN IS UP TO YOU BUT CHECK THE EXAMPLES ' FOR GETTING IDEAS ON HOW TO DESIGN MODULES GLOBAL MODULES_LEN MODULES_LEN = 2 DIM GLOBAL MODULE_BG(MODULES_LEN,5) DIM GLOBAL MODULE_H(MODULES_LEN,11) DIM GLOBAL MODULE_T(MODULES_LEN,11) DIM GLOBAL MODULE_GH(MODULES_LEN,11) 'READING ALL MODULE ARRAYS FOR M=0 TO MODULES_LEN FOR I=0 TO 5 READ MODULE_BG(M, I) NEXT I FOR I = 0 TO 11 READ MODULE_H(M,I) NEXT I FOR I = 0 TO 11 READ MODULE_T(M,I) NEXT I FOR I = 0 TO 11 READ MODULE_GH(M,I) NEXT I NEXT M 'MODULE 0 "THE PYRAMID" DATA 9, 0, 11, 11, 5, 0 DATA 1, 2, 3, 3, 3, 3, 3, 2, 1, 0, 0, 0 DATA 1, 1, 1, 2, 2, 2,-1,-1,-1, 0, 0, 0 DATA 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0 'NOTE: THE BAR IS SHIFTED BY 2 CELL 'THE POSISTION IS ABSOLUTE (NO PERSPECTIVE) 'MODULE 1 "THE PYRAMID2" DATA 9, 0, 11, 11, 5, 1 DATA 1, 2, 3, 3, 3, 3, 3, 2, 1, 0, 0, 0 DATA 1, 1, 1, 2, 2, 2,-1,-1,-1, 0, 0, 0 DATA 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0 'MODULE 2 "THE PLATEFORM" DATA 20, 0, 11, 11, 5, 3 DATA 1, 2, 2, 2, 2, 2, 2, 2, 1, 0, 0, 0 DATA 1, 2, 2, 2, 2, 2, 2, 2,-1, 0, 0, 0 DATA 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 RETURN DRAWMODULES: SK8POS = PX+X 'RENEW THE BG TO ITS ORIGINAL STATE BG 0 PRIO 1 FOR I=0 TO 32/8 BG COPY 0,0,8,16 TO I*8,0 NEXT I INCLINEPLANE=0 FOR M=0 TO MODULES_LEN CX1 = MODULE_BG(M,0) CY1 = MODULE_BG(M,1) CX2 = MODULE_BG(M,2) CY2 = MODULE_BG(M,3) PERIODX = MODULE_BG(M,4) OFFSETX = MODULE_BG(M,5) SK8POS = (X+PX)/8 NUMSCREENS = INT((SK8POS)/32) - OFFSETX RPOS = SK8POS MOD 32 ONMODULE = 0 IF NUMSCREENS MOD PERIODX = 0 THEN 'THE SKATER IS ON THE MODULE'S SCREEN IF RPOS >= 8 THEN ONMODULE=1 ELSE IF NUMSCREENS MOD PERIODX = 1 THEN 'THE SKATER IS ON THE NEXT SCREEN IF RPOS < 8 THEN ONMODULE=1 END IF IF ONMODULE=1 THEN BG COPY CX1,CY1,CX2,CY2 TO 20,0 BI=RPOS-20 H=0 T=0 IF BI>=0 AND BI <=11 THEN 'WE ARE ON MODULE BLOCK BI H = MODULE_H(M,BI) T = MODULE_T(M,BI) GH = MODULE_GH(M,BI) GRINDHEIGHT = 64 - 16 - GH * 8 GROUND = 64 - H*8 IF Y>GROUND+8 AND T = 2 THEN Y=GROUND '5+PX TOLERANCE 'VX=-VX 'BG 1 'PRIO 1 'NUMBER 0,1,SK8POS,4 'GOSUB CRASH END IF IF T = 1 THEN GROUND = 64 - (H-1)*8 + (INT(SK8POS)-SK8POS)*8 'Y=GROUND 'IF Y>GROUND THEN Y=GROUND INCLINEPLANE=1 END IF IF T = -1 THEN GROUND = 64 - (H)*8 + (SK8POS-INT(SK8POS))*8 'Y=GROUND 'IF Y>GROUND THEN Y=GROUND INCLINEPLANE=-1 END IF ELSE GROUND = 64 GRINDHEIGHT = 64-16 END IF END IF NEXT M BG 1 RETURN '*********************************** ' ROM DATA '*********************************** #1:MAIN PALETTES 1B2A152F003E3410003C0C0000343C00 1F3F2F1B1F0F060B003B360B003F2A15 #2:MAIN CHARACTERS 00000000000000000000000000000000 000000324C000000000000324C000000 00192600006498000019260000649800 FEFEFCFCF8F0C0000000000000000000 FFFFFFFFFFFFFFFF0000000000000000 0000400400200000FFFFBFFBFFDFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 1C3EFE7E6A240E000000007E7E3E3E1C 1C26061E3E3C243600183820003C2436 1C2626323E1C282C0018180C001C282C 1C0E0E3E3E3C66C001317040003C66C0 000000FF00240000000000007E240000 000E0E1E787070000008000240001000 FEFEFEFEFEFEFE00000305091121417F FEFEFEFEFEFEFE00007F7D797161417F 0002060E1E3E7E00000305091121417F 0000000000FF22220000000000000000 00080C0603060C080008040A0D0A0408 007300E600700238FFFCFF1FFFFFFFC7 00380000011C4000FFFFFFFFFFE3FFFF 0000000000000000000000000000000F 000000000000000000000000000000F0 00000000000000000000000000000000 1C3E3E3E22081C000000003E3E3E3E1C 1C0E0E3E3E3C660001317040003C6600 1C1E3E3E3A23203060E080061A232030 030C32C0200000000002022020000000 000066C36600000000003C3C3C000000 0002040A102050000000020608103000 FEFDFBF7EFDFBF7F0102040810204080 FEFDFBF7EFDFBF7F017E7C7870604080 000103070F1F3F7F0102040810204080 FEFDFBF7EFDFBF7F0102040810204080 0000000C18000000FFFFFFF3E7FFFFFF 0000000000000000FFFFFFFFFFFFFFFF 0102040C18204080FEFDFBF3E7DFBF7F 000000000000000007060C1830E0FFFF 000078787A730000F88CFEFBFBF3FFFF 00000000000000000000000080C0FFFF 1C3E3E3E3E1C00000000003E3E3E3E1C 1C3E3E3E3E3C240001014040003C2400 00000000000000000000000000000000 0000007EFF7E3C000000007EFF7E3C00 00007EFF7E0000000000000000000000 000E02024040700000080C1E78301000 FEFEFEFEFEFEFE00FE8181818181817F FEFEFEFEFEFEFE00007F7F7F7F7F7F7F 00000000000000000000000000000000 0102040810204080FEFDFBF7EFDFBF7F FEFEFEFEFEFEFE00007F7F7F7F7F7F7F 00000000000000000000400400200000 00000000000000000000000000000000 8E8404003C66663C7F7FFFFFFF7F7E3C EAA4E4AA00000000FFFFFFFFFFFF0000 810180803C66663CFEFEFFFFFFFF7E3C 0F83C1FF7F01030F0800000500000008 8080C0FEFFC080808000005200000080 000000001C3E7FFF000000001C3E7FFF 010F7FFFFF7F3F00010F7FFFFF7F3F00 E0F0F8FEFFFEFC00E0F0F8FEFFFEFC00 A020E00000000000C0C0000000000000 7FFFFFFFFFFFFF0000C0A090888482FE #3:MAIN BG 00002020040604060406040604060406 04060406040604060406040604060406 04060406040604060406040604060406 04060406040604060406040604060406 04060406040604060406040604060406 04060406040604060406040604060406 04060406040604060406040604060406 04060406040604060406040604060406 04060406220622062206220622062206 22062206220622062206220622062206 22062206220622062206220622062206 22062206220622062206220622062206 22062206220522052205220522052205 22052205220522052205220522052205 22052205220522052205220522052205 22052205220522052205220522052205 22052205330033003300330033003300 33003300330033003300330033003300 33003300330033003300330033000000 33003300330033003300330033003300 33000605000000000000000000000000 000000000000000000002E002E002E00 2E002E002E002E002E002E0000000000 00000000000000000000000000000000 33000000000000000000000000000000 000000000000000000002E002E001E00 1D001D001D001E082E002E0000002E00 2E002E002E002E002E002E002E002E00 2E002E00000000000000000000000000 000000000000000000002E001E001D00 1D001D001D001D001E082E0000002E00 2E001E001D001D001D001D001D001E08 2E002E00310031003100310031003100 310031003100310031000E002D002D00 2D003D001D001D001D001E082E002E00 1E001D001D001D001D001D001D001D00 1E083100200020002000200020002000 20002000200020000D002D002D002D00 2D002D003D002000200020001D000D00 2D002D002D002D002D003D0020002000 20002000200020002000200020002000 2000200020000D002D002D002D002D00 2D002D002D003D0020001D000D002D00 2D002D002D002D002D002D003D002000 20002000220022002200220022002200 30002200220022002200220022002200 30002200220022002200220022002200 30002200220022002200220022002200 30002200220022002200220022003000 22002200220022002200220022003000 22002200220022002200220022003000 22002200220022002200220022003000 22002200210021002100210023002100 21002100210021002100210023002100 21002100210021002100210023002100 21002100210021002100210023002100 21002100220022002200300022002200 22002200220022002200300022002200 22002200220022002200300022002200 22002200220022002200300022002200 22002200220022003000220022002200 22002200220022003000220022002200 22002200220022003000220022002200 22002200220022003000220022002200 22002200000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000031003100 31003100310031003100310031003100 31003100000000000000000000000000 00000000000000000000000000000000 00000000000400000000000131000000 00000000000000000000000000000000 00003100000000000000000000000000 00000000000000000000000000000000 00000000000400000001000131003100 31003100310031003100310031003100 31003100000000000000000000000000 00000000000000000000000000000000 00000000000400000000000000000000 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 00000000310000000000000000000000 00000000000000000000000000000000 00000000000000000000310000000000 00000000000000000000000000000000 00000000310031000000000000000000 00000000000000000000000000000000 00000000000000003100310000000000 00000000000000000000000000000000 00000000310031003100000800080000 00000000000000000000000000000000 00000000000031003100310000000000 00000000000000000000000000000000 00000000310031003100310031003100 31003100310031003100310031003100 31003100310031003100310000000000 00000000000000000000000000000000 00000000310031003100310000000000 00000000000000000000000000000000 00000000000031003100310000000000 00000000000000000000000000000000 00000000 #4:BG 00002020040604060406040604060406 04060406040604060406040604060406 04060406040604060406040604060406 04060406040604060406040604060406 04060406040604060406040604060406 04060406040604060406040604060406 04060406040604060406040604060406 04060406040604060406040604060406 04060406220622062206220622062206 22062206220622062206220622062206 22062206220622062206220622062206 22062206220622062206220622062206 22062206220522052205220522052205 22052205220522052205220522052205 22052205220522052205220522052205 22052205220522052205220522052205 22052205060506050605060506050605 06050605060506050605060506050605 06050605060506050605060506050605 06050605060506050605060506050605 06050605000000000000000000000000 000000000000000000002E002E002E00 2E002E002E002E002E002E0000000000 00000000000000000000000000000000 00000000000000000000000000000000 000000000000000000002E002E001E00 1D001D001D001E082E002E0000000000 00000000000000000000000000000000 00000000000000000000000000000000 000000000000000000002E001E001D00 1D001D001D001D001E082E0000000000 2E002E002E002E002E002E002E002E00 00000000310031003100310031003100 310031003100310031000E002D002D00 2D003D001D001D001D001E0831001E00 1D001D001D001D001D001D001D001D00 31003100200020002000200020002000 20002000200020000D002D002D002D00 2D002D003D0020002000200020002000 20002000200020002000200020002000 20002000200020002000200020002000 2000200020000D002D002D002D002D00 2D002D002D003D00200020002D082D08 2D082D082D082D082D082D0820002000 20002000220022002200220022002200 30002200220022002200220022002200 30002200220022002200220022002200 30002200220022002200220022002200 30002200220022002200220022003000 22002200220022002200220022003000 22002200220022002200220022003000 22002200220022002200220022003000 22002200210021002100210023002100 21002100210021002100210023002100 21002100210021002100210023002100 21002100210021002100210023002100 21002100220022002200300022002200 22002200220022002200300022002200 22002200220022002200300022002200 22002200220022002200300022002200 22002200220022003000220022002200 22002200220022003000220022002200 22002200220022003000220022002200 22002200220022003000220022002200 22002200000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000031003100 31003100310031003100310031003100 31003100000000000000000000000000 00000000000000000000000000000000 00000000000400000000000131000000 00000000000000000000000000000000 00003100000000000000000000000000 00000000000000000000000000000000 00000000000400000001000131003100 31003100310031003100310031003100 31003100000000000000000000000000 00000000000000000000000000000000 00000000000400000000000000000000 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 00000000310000000000000000000000 00000000000000000000000000000000 00000000000000000000310000000000 00000000000000000000000000000000 00000000310031000000000000000000 00000000000000000000000000000000 00000000000000003100310000000000 00000000000000000000000000000000 00000000310031003100000800080000 00000000000000000000000000000000 00000000000031003100310000000000 00000000000000000000000000000000 00000000310031003100310031003100 31003100310031003100310031003100 31003100310031003100310000000000 00000000000000000000000000000000 00000000310031003100310000000000 00000000000000000000000000000000 00000000000031003100310000000000 00000000000000000000000000000000 00000000 #5:BG 00002020040604060406040604060406 04060406040604060406040604060406 04060406040604060406040604060406 04060406040604060406040604060406 04060406040604060406040604060406 04060406040604060406040604060406 04060406040604060406040604060406 04060406040604060406040604060406 04060406220622062206220622062206 22062206220622062206220622062206 22062206220622062206220622062206 22062206220622062206220622062206 22062206220522052205220522052205 22052205220522052205220522052205 22052205220522052205220522052205 22052205220522052205220522052205 22052205060506050605060506050605 06050605060506050605060506060606 06060605060506050605060506050605 06050605060506050605060506050605 06050605000000000000000000000000 00000000000000000000000000001F00 1D000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 0000000000000000000000001F001D00 1D000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 000000000000000000000F002D001D00 1D000000000000000000000000000000 00000000000000000000000000000000 00000000310031003100310031003100 31003100310031000E002D002D001D00 1D003100310031003100310031003100 31003100310031003100310031003100 31003100200020002000200020002000 2000200020000D002D002D002D001D00 20002000200020002000200020002000 20002000200020002000200020002000 20002000200020002000200020002000 200020000D002D002D002D002D002000 20002000200020002000200020002000 20002000200020002000200020002000 20002000220022002200220022002200 30002200220022002200220022002200 30002200220022002200220022002200 30002200220022002200220022002200 30002200220022002200220022003000 22002200220022002200220022003000 22002200220022002200220022003000 22002200220022002200220022003000 22002200210021002100210023002100 21002100210021002100210023002100 21002100210021002100210023002100 21002100210021002100210023002100 21002100220022002200300022002200 22002200220022002200300022002200 22002200220022002200300022002200 22002200220022002200300022002200 22002200220022003000220022002200 22002200220022003000220022002200 22002200220022003000220022002200 22002200220022003000220022002200 22002200000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000031003100 31003100310031003100310031003100 31003100000000000000000000000000 00000000000000000000000000000000 00000000000400000000000131000000 00000000000000000000000000000000 00003100000000000000000000000000 00000000000000000000000000000000 00000000000400000001000131003100 31003100310031003100310031003100 31003100000000000000000000000000 00000000000000000000000000000000 00000000000400000000000000000000 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 00000000310000000000000000000000 00000000000000000000000000000000 00000000000000000000310000000000 00000000000000000000000000000000 00000000310031000000000000000000 00000000000000000000000000000000 00000000000000003100310000000000 00000000000000000000000000000000 00000000310031003100000800080000 00000000000000000000000000000000 00000000000031003100310000000000 00000000000000000000000000000000 00000000310031003100310031003100 31003100310031003100310031003100 31003100310031003100310000000000 00000000000000000000000000000000 00000000310031003100310000000000 00000000000000000000000000000000 00000000000031003100310000000000 00000000000000000000000000000000 00000000 #15:MAIN SOUND 28003050000000001800846C003A0000 08006060000000002800303019FE0000 3800230001816D003800105000000000 0800700F00080F000800000F00000000 0800000F000000000800000F00000000 0800000F000000001800408000000000 0800000F000000000800000F00000000 0800000F000000003800F06010230F00 80010205008102408081020440404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 19350000000000000000000000000000 00000000000000000000000000000000 00000000000000000000193500000000 19350000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 55520000000055520000000055520000 00005552000000000000000000005552 00000000555200000000555200000000 55520000000055520000000055520000 00005552000000000000000000005552 00000000555200000000555200555200 00000000000000000000000000000000 00000000000000003D50000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000003D5F000000000000 00000000000000000000000000000000 256F00FF0000256F00FF0000256F00FF 0000000000000000256F00000000266F 00FF0000000000000000000000000000 000000000000286F00FF000000000000 0000266F00000000256F00FF00000000 00000000000000000000000000000000 25BF0000000028BF000000002ABF0000 00002BBF002CBF000000000000002FBF 00FFBF002FBF00FF00000000002CBF00 2BBF00FF00002ABF00FF00002BBF0000 00002ABF0000000028BF00FF000025BF 0000000028BF00000000000000000000 25F20000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000