' $DYNAMIC DEFINT A-Z DECLARE SUB setmodex () DECLARE SUB copypage (BYVAL page1, BYVAL page2) DECLARE SUB setvispage (BYVAL page) DECLARE SUB drawsprite (pic(), pal(), BYVAL o, BYVAL x, BYVAL y, BYVAL page) DECLARE SUB wardsprite (pic(), pal(), BYVAL o, BYVAL x, BYVAL y, BYVAL page) DECLARE SUB getsprite (pic(), BYVAL x, BYVAL y, BYVAL w, BYVAL h, BYVAL page) DECLARE SUB putpixel (BYVAL x, BYVAL y, BYVAL c) DECLARE SUB readpixel (BYVAL x, BYVAL y, c()) DECLARE SUB setpal (pal()) DECLARE SUB clearpage (BYVAL page) DIM block(14), pal(8), newpal(767), pic(1300), rc(1), stuf(8), gc(1), drk(8), dpl(8) SCREEN 7: CLS INPUT "filename"; flnm$ INPUT "width?"; wdt INPUT "height?"; hgt DEF SEG = VARSEG(pic(0)) IF flnm$ <> "" THEN BLOAD flnm$, VARPTR(pic(0)) IF wdt = 0 THEN wdt = PEEK(VARPTR(pic(0))) IF hgt = 0 THEN hgt = PEEK(VARPTR(pic(0)) + 1) x1 = 160 - INT(wdt / 2) DIM buff(100, 100) setmodex DEF SEG = VARSEG(newpal(0)) BLOAD "palette.sto", VARPTR(newpal(0)) setpal newpal() DEF SEG = VARSEG(block(0)) FOR i = 0 TO 13 READ da POKE VARPTR(block(0)) + i, da NEXT i DEF SEG = VARSEG(dpl(0)) FOR i = 0 TO 15 POKE VARPTR(dpl(0)) + i, i NEXT i drawsprite pic(), dpl(), 0, x1, 10, 1 x = 159: y = 27: lc = 1 DEF SEG = VARSEG(stuf(0)) FOR i = 0 TO 15 FOR j = 0 TO 15 POKE VARPTR(stuf(0)) + 15, j * 16 + i drawsprite block(), stuf(), 0, 110 + i * 6, 100 + j * 4, 0 NEXT j NEXT i DEF SEG = VARSEG(pal(0)) IF flnm$ <> "" THEN BLOAD LEFT$(flnm$, LEN(flnm$) - 4) + ".pal", VARPTR(pal(0)) GOSUB 20 DEF SEG = VARSEG(pal(0)) 10 a$ = INKEY$ readpixel x, y, rc() cc = PEEK(VARPTR(pal(0)) + lc) putpixel x, y, cc ptmp = INT(cc / 16) putpixel 112 + (cc - ptmp * 16) * 6, 98, 15 putpixel 108, 101 + ptmp * 4, 15 lx = x: ly = y IF a$ = CHR$(0) + CHR$(72) AND y > 10 THEN y = y - 1 IF a$ = CHR$(0) + CHR$(80) AND y < 10 + hgt THEN y = y + 1 IF a$ = CHR$(0) + CHR$(75) AND x > x1 THEN x = x - 1 IF a$ = CHR$(0) + CHR$(77) AND x < x1 + wdt THEN x = x + 1 putpixel 93 + lc * 8, 88, 0 IF a$ = "r" THEN GOSUB 30: GOSUB 20 IF a$ = "t" THEN GOSUB 40: GOSUB 20 IF a$ = "," AND cc > 0 THEN POKE VARPTR(pal(0)) + lc, cc - 1 IF a$ = "." AND cc < 255 THEN POKE VARPTR(pal(0)) + lc, cc + 1 IF a$ = "'" AND cc > 15 THEN POKE VARPTR(pal(0)) + lc, cc - 16 IF a$ = "/" AND cc < 241 THEN POKE VARPTR(pal(0)) + lc, cc + 16 IF a$ = "," OR a$ = "." OR a$ = "'" OR a$ = "/" THEN GOSUB 20 IF a$ = "+" THEN lc = lc + 1: IF lc > 15 THEN lc = 0 IF a$ = "-" THEN lc = lc - 1: IF lc < 0 THEN lc = 15 putpixel 93 + lc * 8, 88, 15 IF a$ = " " THEN rc(0) = cc: putpixel x + 1536, y + 200, lc: putpixel x, y, cc IF a$ = CHR$(13) THEN GOTO 100 putpixel 112 + (cc - ptmp * 16) * 6, 98, 0 putpixel 108, 101 + ptmp * 4, 0 putpixel lx, ly, rc(0) GOTO 10 20 getsprite pic(), x1, 10, wdt, hgt, 1 drawsprite pic(), pal(), 0, x1, 10, 0 FOR i = 0 TO 8 stuf(i) = pal(i) NEXT i DEF SEG = VARSEG(stuf(0)) FOR i = 15 TO 1 STEP -1 POKE VARPTR(stuf(0)) + 15, PEEK(VARPTR(stuf(0)) + i) drawsprite block(), stuf(), 0, 90 + i * 8, 90, 0 NEXT i DEF SEG = VARSEG(pal(0)) RETURN 30 drawsprite pic(), drk(), 0, x1, 10, 1 FOR i = 0 TO wdt FOR j = 0 TO hgt putpixel x1 + i + 1536, 10 + j + 200, 0 putpixel x1 + i, 10 + j, 0 NEXT j NEXT i wardsprite pic(), dpl(), 0, x1, 10, 1 RETURN 40 FOR i = 0 TO wdt FOR j = 0 TO hgt readpixel x1 + j + 1536, 10 + i + 200, gc() buff(j, i) = gc(0) NEXT j NEXT i FOR i = 0 TO wdt FOR j = 0 TO hgt putpixel x1 + wdt - 1 - i + 1536, 10 + j + 200, buff(j, i) NEXT j NEXT i FOR i = 0 TO wdt FOR j = 0 TO hgt putpixel x1 + i + 1536, 10 + j + 200, 0 putpixel x1 + i, 10 + j, 0 NEXT j NEXT i RETURN 100 getsprite pic(), x1, 10, wdt, hgt, 1 SCREEN 7: WIDTH 80: WIDTH 40: CLS : INPUT "filename?", flnm$ DEF SEG = VARSEG(pic(0)) BSAVE flnm$, VARPTR(pic(0)), INT((wdt * hgt) / 2 + 2) SCREEN 7 DEF SEG = VARSEG(pal(0)) BSAVE LEFT$(flnm$, LEN(flnm$) - 4) + ".pal", VARPTR(pal(0)), 18 DATA 6,4,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255 DATA 6,4,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255