' LOWRES OLYMPICS: 100 METRE SPRINT ' COPYRIGHT (C) 2019 NAT PRYCE ' LICENSE: CC BY-NC-SA 4.0 '========================================== ' CENTERED TEXT DIM GLOBAL TITLE_LINE_OFFSETS(16) SUB TITLE_INIT SPRITE OFF CLS FOR I = 0 TO 16 TITLE_LINE_OFFSETS(I) = 0 NEXT I ON RASTER CALL TITLE_CENTER_LINES END SUB SUB TITLE_CENTER_LINES L = RASTER/8 SCROLL 0, TITLE_LINE_OFFSETS(L), 0 END SUB SUB TITLE_END ON RASTER OFF END SUB SUB CTEXT(Y, L$) BG 0 TEXT 0, Y, L$ TITLE_LINE_OFFSETS(Y) = -(20-LEN(L$))*4 END SUB SUB CLT(Y) BG 0 BG FILL 0, Y TO 19, Y CHAR 0 TITLE_LINE_OFFSETS(Y) = 0 END SUB '========================================== ' RUNNERS ' 0 = OFF ' 1 = HUMAN PLAYER ' 2 = AI EASY ' 3 = AI MEDIUM ' 4 = AI HARD DIM GLOBAL CONTROL(3) CONTROL(0) = 1 CONTROL(1) = 2 CONTROL(2) = 2 CONTROL(3) = 1 DIM GLOBAL PAD(3) PAD(0) = 0 PAD(1) = 0 PAD(2) = 1 PAD(3) = 1 DIM GLOBAL BTN(3) BTN(0) = 1 BTN(1) = 0 BTN(2) = 0 BTN(3) = 1 DIM GLOBAL PAD$(1) PAD$(0) = "LEFT" PAD$(1) = "RIGHT" DIM GLOBAL BTN$(2) BTN$(0) = "A" BTN$(1) = "B" GLOBAL MAX_DISTANCE MAX_DISTANCE = 108 SUB SHOW_OPTIONS(FOCUS) FOR P = 0 TO 3 Y = 6 + 2*P CALL SHOW_CONTROL(1, Y, P, FOCUS) NEXT P CALL HIGHLIGHT(FOCUS, 4) CALL CTEXT(14, "START RACE") END SUB SUB HIGHLIGHT(FOCUS, N) IF FOCUS = N THEN ATTR (6) ELSE ATTR (7) END IF END SUB SUB SHOW_CONTROL(X, Y, P, FOCUS) OPT = CONTROL(P) IF OPT = 0 THEN OPT$ = "NOT RACING" ELSE IF OPT = 1 THEN PN = PAD(P) BN = BTN(P) OPT$ = "PLAYER: "+PAD$(PN)+", " + BTN$(BN) ELSE IF OPT = 2 THEN OPT$ = "A.I. (EASY)" ELSE IF OPT = 3 THEN OPT$ = "A.I. (MEDIUM)" ELSE OPT$ = "A.I. (HARD)" END IF BG FILL X, Y TO 19, Y CHAR 0 ATTR (1+P) IF FOCUS = P THEN CELL X, Y, 16 + (TIMER / 20) MOD 2 ELSE CELL X, Y, 18 END IF CALL HIGHLIGHT(FOCUS, P) TEXT X+2, Y, OPT$ END SUB SUB TITLE_SCREEN(INITIAL_FOCUS) SPRITE OFF CLS BG 1 ATTR (0,0,0,0) BG FILL 0,0 TO 19,15 CHAR 0 BG 0 ATTR (6) CALL CTEXT(1, "LOWRES SPORTS") CALL CTEXT(3, "100M SPRINT") FOCUS = INITIAL_FOCUS REPEAT ENDLOOP = 0 FOR I = 0 TO 1 MV = UP TAP(I) - DOWN TAP(I) FOCUS = (FOCUS + MV + 5) MOD 5 IF FOCUS < 4 THEN IF BUTTON TAP(I) THEN D = 1 ELSE IF RIGHT TAP(I) THEN D = 1 ELSE IF LEFT TAP(I) THEN D = -1 ELSE D = 0 END IF C = CONTROL(FOCUS) CONTROL(FOCUS) = (5 + C + D) MOD 5 ELSE IF BUTTON TAP(I) THEN ENDLOOP = 1 END IF END IF NEXT I CALL SHOW_OPTIONS(FOCUS) WAIT VBL UNTIL ENDLOOP END SUB SUB RACE CLS CALL CLT(3) BG 1 BG SOURCE ROM(3) BG COPY 0, 0, 20, 16 TO 0, 0 RUNNERS = 0 FOR P = 0 TO 3 IF CONTROL(P) THEN RUNNERS = RUNNERS+1 NEXT P DIM D(3) DIM SCORE(3) CALL INIT_RACE(D()) CALL COUNTDOWN DONE = 0 REPEAT FOR P = 0 TO 3 IF CONTROL(P) THEN CALL MOVE(P, D(P), SCORE(P), DONE) END IF NEXT P WAIT VBL UNTIL DONE = RUNNERS CALL RACE_OVER(SCORE()) END SUB SUB INIT_RACE(D()) RANDOMIZE TIMER FOR P = 0 TO 3 D(P) = MAX_DISTANCE IF CONTROL(P) = 0 THEN SPRITE OFF P ELSE X = 40 + 24*P Y = D(P)+8 SPRITE.A P, (1+P) SPRITE P, X, Y, 21 END IF NEXT P END SUB SUB MOVE(P, D, SCORE, DONE) C = CONTROL(P) IF D = 0 THEN IF SCORE = 1 THEN SPRITE P, , , 18 + (TIMER/30) MOD 2 ELSE SPRITE P, , , 18 END IF ELSE IF C = 1 THEN MV = BUTTON TAP(PAD(P), BTN(P)) ELSE MV = RND < C/40 END IF D = MAX(0, D + 3*MV) SPRITE P, , D+8, 16 + D MOD 2 IF D = 0 THEN DONE = DONE + 1 SCORE = DONE BG 0 TEXT 5+3*P, 3, STR$(SCORE) END IF END IF END SUB SUB COUNTDOWN Y = 7 CALL CTEXT(Y, "ON YOUR MARKS") WAIT 60 CALL CLT(Y) CALL CTEXT(Y, "GET SET") WAIT 60 CALL CLT(Y) PLAY 0, 36, 15 SOUND 1 END SUB SUB RACE_OVER(SCORE()) CALL CTEXT(7, "RACE OVER") START_T = TIMER REPEAT FOR P = 0 TO 3 IF CONTROL(P) THEN CALL MOVE(P, 0, SCORE(P), -1) END IF NEXT P WAIT VBL T = TIMER - START_T CLICKED = BUTTON TAP(0) OR BUTTON TAP(1) IF T = 120 THEN CALL CTEXT(9, "PRESS ANY BUTTON") END IF UNTIL T > 120 AND CLICKED END SUB GAMEPAD 2 CALL TITLE_INIT CALL TITLE_SCREEN(0) DO CALL RACE ' ENSURE TAP AT END OF RACE DOES NOT ALSO ' ACTION THE INITIAL MENU ITEM IN THE ' TITLE SCREEN WAIT VBL CALL TITLE_SCREEN(4) LOOP #1:MAIN PALETTES 083F2510003A300300101F220038003F 00103C08003F2A15003F0400002A1500 #2:MAIN CHARACTERS 00000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFF 00000000000000AAFFFFFFFFFFFFFF55 00800080008000AAFF7FFF7FFF7FFF55 01000100010001AAFEFFFEFFFEFFFE55 0080008000800080FF7FFF7FFF7FFF7F 0100010001000100FEFFFEFFFEFFFEFF 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 181800243818080000003C1818001008 181800241C18100000003C1818000810 181800243C18180000003C1818000018 5A5A00001818180000003C1818000018 185A00001824000000003C1818004200 001800243C10100000003C1818080010 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 030C1020404080800000000000000000 7E818181818181810001010101010101 C0000000020201010030080402020101 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 7F8080808080807F000000000000007F 00001824241800000000182020000000 FE010101010101FE00010101010101FE 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 8080000000000C030000404020100C03 818181818181817E010101010101017E 01010202040830C001010202040830C0 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 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 183C3C3C3C183C181824242424182418 6CFEFE7E240000006C92925A24000000 247EFF7E7EFF7E24245A815A5A815A24 083E7F7E3F7F3E080836414631413608 62F7FE7C3E7FEF4662959A742E59A946 1C3E7E7EFFFE7F3A1C224A46919A453A 183C3C78300000001824244830000000 0C1E3C78783C1E0C0C1224484824120C 30783C1E1E3C78303048241212244830 00247E7EFF7E7E2400245A6681665A24 00183C7EFF7E3C180018246681662418 000000183C3C78300000001824244830 0000007EFF7E00000000007E817E0000 00000000183C3C180000000018242418 060F1E3C78F0E040060912244890A040 3C7EFFFFFFFF7E3C3C4299918999423C 183C7C3C3C7EFF7E182444242466817E 3C7EFF7E3C7EFF7E3C429972244E817E 3C7EFF7E6FFF7E3C3C4299726999423C 66FFFFFF7F0F0F066699998179090906 7EFFFEFE7F7FFE7C7E819E827979827C 1C3E7CFEFFFF7E3C1C224C829999423C 7EFF7F1E3C7878307E81791224484830 3C7EFF7EFFFF7E3C3C4299429999423C 3C7EFF7F7FFF7E3C3C4299417999423C 0000183C183C18000000182418241800 0000183C183C78300000182418244830 000C1E3C783C1E0C000C12244824120C 00007EFF7EFF7E0000007E817E817E00 0030783C1E3C78300030482412244830 3C7EFF7E3C183C183C42997224182418 3C7EFFFFFFFE7E3C3C429991919E423C 183C7EFFFFFFFF661824429981999966 7CFEFFFEFFFFFE7C7C8299829999827C 3C7EFFF6F6FF7E3C3C4299969699423C 78FCFEFFFFFEFC787884929999928478 7EFFFEFCF8FEFF7E7E819E84989E817E 7EFFFEFCF8F0F0607E819E8498909060 3C7EFEFFFFFF7E3C3C429E919999423C 66FFFFFFFFFFFF666699998199999966 3C7E3C3C3C3C7E3C3C4224242424423C 1E3F1F0F6FFF7E3C1E2119096999423C 66FFFEFCFCFEFF666699928484929966 60F0F0F0F0FEFF7E60909090909E817E 42E7FFFFFFFFFF6642A5998181999966 66FFFFFFFFFFFF666699898191999966 3C7EFFFFFFFF7E3C3C4299999999423C 7CFEFFFEFCF0F0607C8299829C909060 3C7EFFFFFFFE7F3E3C4299999592413E 7CFEFFFEFCFEFF667C82998284929966 3E7FFE7E3F7FFE7C3E419E423979827C 7EFF7E3C3C3C3C187E81662424242418 66FFFFFFFFFF7E3C669999999999423C 66FFFFFFFF7E3C186699999999422418 66FFFFFFFFFFE742669999818199A542 66FF7E3C7EFFFF666699422442999966 66FFFF7E3C3C3C186699994224242418 7EFF7E3C78FEFF7E7E817224489E817E 3C7E7C78787C7E3C3C424C48484C423C 60F0783C1E0F07026090482412090502 3C7E3E1E1E3E7E3C3C4232121232423C 183C7EFF660000001824429966000000 00000000007EFF7E00000000007E817E #3:MAIN BG 00001410000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000100020002000200020002000200 02000200020002000200020001000000 00000000000000000000060005000100 06000500010006000500010006000500 01000600050000000000000000000000 00000600050001000600050001000600 05000100060005000100060005000000 00000000000000000000060005000100 06000500010006000500010006000500 01000600050000000000000000000000 00000600050001000600050001000600 05000100060005000100060005000000 00000000000000000000060005000100 06000500010006000500010006000500 01000600050000000000000000000000 00000600050001000600050001000600 05000100060005000100060005000000 00000000000000000000060005000100 06000500010006000500010006000500 01000600050000000000000000000000 00000600050001000600050001000600 05000100060005000100060005000000 00000000000000000000060005000100 06000500010006000500010006000500 01000600050000000000000000000000 00000600050001000600050001000600 05000100060005000100060005000000 00000000000000000000060005000100 06000500010006000500010006000500 01000600050000000000000000000000 00000600050001000600050001000600 05000100060005000100060005000000 00000000000000000000060003000200 04000300020004000300020004000300 02000400050000000000000000000000 00000100010001000100010001000100 01000100010001000100010001000000 00000000 #15:MAIN SOUND 3800303A000450007801008F003A0000 78010481003A00002800303019FE0000 38002020000000003800505000000000 0800000F000000000800000F00000000 0800000F000000000800000F00000000 0800000F000000000800000F00000000 0800000F000000000800000F00000000 0800000F000000000800000F00000000