Tag: retrogaming

  • SKETCH.BAS

    SKETCH.BAS

    Please find reproduced here a working port of SKETCH for the TRS Model 100 to Stefan’s BASIC for the Arduino micro-controller platform.

    Full code listing:

    https://basiclang.solarpunk.au/d/15-sketchbas

    Please find the archive.org link to the 1984 book here:

    https://archive.org/details/25GamesForYourTrs80Model100/page/n49/mode/1up

    Live Coding Session

    Video File

    Peertube Streaming

    CODE LISTING

    10 REM ***********
    20 REM *         *
    30 REM * Sketch  *
    40 REM *         *
    50 REM ***********
       
    55 REM *** Instructions ***
       
    60 CLS:PRINT:PRINT
    70 PRINT TAB(12)"Instructions?"
    80 PRINT:PRINT TAB(16)"(Y/N)"
    90 GET A$:IF A$="" GOTO 90
    100 IF A$="Y" OR A$="y" THEN GOTO 110 ELSE GOTO 270
    110 CLS:PRINT:PRINT
    120 PRINT TAB(2)"You may use either Sketch or Draft"
    130 PRINT TAB(2)"modes. Sketch uses a moving line to"
    140 PRINT TAB(2)"draw, while Draft draws lines between"
    150 PRINT TAB(2)"two points you specify by hitting ";CHR$(34);"S";CHR$(34);"."
    160 PRINT:PRINT TAB(1)"= Hit any key for Sketch instructions =";
    170 GET A$:IF A$="" GOTO 170
    180 CLS:PRINT
    190 PRINT TAB(12)"==  Sketch =="
    200 PRINT TAB(13)"[Controls:]"
    210 PRINT TAB(2)"Arrow Keys -- Change direction"
    220 PRINT TAB(2)"Number keys -- Slow down cursor"
    230 PRINT TAB(2)CHR$(34);"F";CHR$(34);" -- Return to top speed"
    240 PRINT TAB(2)"Space Bar -- Toggle cursor (ON)-(OFF)"
    250 PRINT:PRINT TAB(11)"== Hit any key =="
    260 GET A$:IF A$="" GOTO 260
        
    265 REM *** Set Delay ***
        
    270 CLS:PRINT:PRINT
    280 PRINT TAB(6)"Enter speed desired:"
    290 PRINT
    300 PRINT TAB(6)"[1] Fast to [9] Slow"
    310 GET A$:IF A$="" GOTO 310
    320 OG=VAL(A$)*10:IF OG<1 GOTO 310
    330 DL=OG
        
    335 REM ***  Choose Sketch or Draw Mode ***
        
    340 CLS:PRINT:PRINT
    350 PRINT TAB(4)"Do you want:"
    360 PRINT:PRINT TAB(6)"[S]ketch mode"
    370 PRINT TAB(6)"[D]raft mode"
    380 GET A$:IF A$="" GOTO 380
    390 IF A$="S" OR A$="s" GOTO 420
    400 IF A$="D" OR A$="d" GOTO 710
    410 GOTO 380
    420 CLS
    430 REM FOR N=1 TO VAL(RIGHT$(TIME$,2))
    440 REM DM=RND(1)
    450 REM NEXT N
    460 X=239:Y=63
    470 X1=INT(RND(X)*X)+1:Y1=INT(RND(X)*Y)+1
    480 COLOR 255: PLOT X1,Y1
        
    485 REM *** Sketch Mode ***
        
    490 GET A$
    500 X1=X1+XD:IF X1>239 THEN X1=239
    510 IF X1<0 THEN X1=0
    520 Y1=Y1+YD:IF Y1>63 THEN Y1=63
    530 IF Y1<0 THEN Y1=0
    540 DELAY DL*10
    550 IF FLAG<>1 GOTO 570
    560 COLOR 255:PLOT X1,Y1:DELAY 100:NEXT N:COLOR 0:PLOT X1,Y1:GOTO 580
    570 COLOR 255:PLOT X1,Y1
    580 IF A$="" GOTO 490
    590 IF VAL(A$)<1 GOTO 610
    600 DL=DL*VAL(A$)
    610 IF A$="F" OR A$="f" THEN DL=OG
    620 A=ASC(A$)
    630 IF A<>32 GOTO 650
    640 IF FLAG=1 THEN FLAG=0 ELSE FLAG=1
        
    650 IF A=4 GOTO 670
    651 IF A=5 GOTO 690
    652 IF A=19 GOTO 680
    653 IF A=24 GOTO 700
    654 GOTO 490
        
    655 REM *** Change direction of Cursor ***
        
    660 REM ON A-27 GOTO 670, 680, 690, 700
    670 YD=0:XD=1:GOTO 490 REM RIGHT
    680 YD=0:XD=-1:GOTO 490 REM LEFT
    690 XD=0:YD=-1:GOTO 490 REM UP
    700 YD=1:XD=0:GOTO 490 REM DOWN
        
    705 REM *** Draft  Mode ***
        
    710 X1=40:Y1=40
    720 CLS
    730 GET A$
    740 X1=X1+XD:IF X1>239 THEN X1=239
    750 IF X1<0 THEN X1=0
    760 Y1=Y1+YD:IF Y1>63 THEN Y1=63
    770 IF Y1<0 THEN Y1=0
    780 DELAY DL*10
    790 COLOR 255:PLOT X1,Y1
    800 DELAY 50
    810 COLOR 0:PLOT X1,Y1
    820 IF A$="" GOTO 730
    830 IF A$="S" or A$="s" GOTO 850
    840 GOTO 990
        
    845 REM *** Set one point ***
        
    850 PO=PO+1
    860 COLOR 255:PLOT X1,Y1
    870 IF PO=1 THEN X2=X1:Y2=Y1:GOTO 730
        
    875 REM ***  Draw Line ***
        
    880 LINE X1,Y1,X2,Y2
    890 PO=0
    900 GET A$:IF A$="" GOTO 900
    910 IF A$="S" OR A$="s" GOTO 950
    920 A=ASC(A$)
    930 IF A<>4 AND A<>5 AND A<>19 AND A<>24 GOTO 900
    940 GOTO 980
    950 PO=1
    960 X2=X1:Y2=Y1
    970 GOTO 900
        
    975 REM *** Change Cursor Direction ***
    
    980 IF A=4 GOTO 990 REM RIGHT
    981 IF A=5 GOTO 1010 REM UP
    982 IF A=19 GOTO 1000 REM LEFT
    983 IF A=24 GOTO 1020 REM DOWN
    984 GOTO 900
    990 YD=0:XD=1:GOTO 730
    1000 YD=0:XD=-1:GOTO 730
    1010 XD=0:YD=-1:GOTO 730
    1020 YD=1:XD=0:GOTO 730
    
  • GOBLINS.BAS Live Coding Session

    GOBLINS.BAS Live Coding Session


    “Coding done quick”.

    I sped a ~1 hour stream up by 400% and this is what I got.

    This game was published as a type-in pamphlet here.

    You can also download the finished game here.

    Original blog post here.


    mailto:vidak@member.fsf.org

    https://matrix.to/#/@vidak:solarpunk.au

    https://retro.social/@permacomputer


    Jan 2026.

  • Watch Me Code A Procedurally Generated Game in BASIC!

    Watch Me Code A Procedurally Generated Game in BASIC!

    “Coding done quick”.

    I sped a ~2 hour stream up by 800% and cut some boring bits out, and this is what i got.

    Experimenting with a large, procedurally generated world.

    mailto:vidak@member.fsf.org

    https://matrix.to/#/@vidak:solarpunk.au

    https://retro.social/@permacomputer

    jan 2026

    https://sr.ht/~vidak/oats-for-my-goats

    https://basiclang.solarpunk.au/d/6-game-oats-for-my-goats

  • PART #1 – Dungeon Of Doom Level Editor

    PART #1 – Dungeon Of Doom Level Editor

    This version for the BBC Micro.

    10 GOSUB 610
    20 COLOUR 3+128:CLS
    30 LET BG=2:LET FG=1:LET T=0:LET L=3:LET LW=W-3:GOSUB 280
    40 COLOUR 2+128:COLOUR 0
    50 PRINT TAB(1,1);"LEVEL GENERATOR";
    60 PRINT TAB(1,2);"THIS IS LEVEL:";LE;
    70 PRINT TAB(1,3);"PRESS H FOR HELP"
    80 LET BG=3:LET FG=2:LET T=5:LET L=15:LET LW=15:GOSUB 280
    90 LET X=1:LET Y=1
    100 LET I$=INKEY$(0)
    110 IF I$="H" THEN GOSUB 360
    120 IF I$="A" AND Y>1 THEN LET Y=Y-1
    130 IF I$="Z" AND Y<15 THEN LET Y=Y+1
    140 IF I$="N" AND X>1 THEN LET X=X-1
    150 IF I$="M" AND X<15 THEN LET X=X+1
    160 IF I$>"/" AND I$<":" THEN GOSUB 230
    170 COLOUR 3+128:COLOUR 0
    180 PRINT TAB(X,Y+5);CHR$(OS);
    190 PRINT TAB(X,Y+5);CHR$(R(X,Y));
    200 IF I$="S" AND IX>0 THEN GOSUB 450:GOTO 20
    210 IF I$<>"F" THEN GOTO 100
    220 STOP
    230 LET I=VAL(I$)
    240 IF I=9 THEN LET I=8+RND(3)
    250 IF I=5 THEN LET IX=X:LET IY=Y
    260 LET R(X,Y)=C0+I
    270 RETURN
    280 PRINT TAB(0,T);
    290 COLOUR FG+128:PRINT LEFT$(B$,LW+2)
    300 COLOUR BG+128:COLOUR FG
    310 FOR I=1 TO L
    320     PRINT TAB(0);CHR$(OS);LEFT$(B$,LW);CHR$(OS)
    330 NEXT I
    340 COLOUR FG+128:PRINT LEFT$(B$,LW+2);
    350 RETURN
    360 COLOUR 128+1:COLOUR 3
    370 FOR H=1 TO 10
    380     PRINT TAB(1,4);H$(H);:GOSUB 430
    390     PRINT TAB(1,4);LEFT$(B$,W-2);
    400 NEXT H
    410 COLOUR 3
    420 RETURN
    430 LET G$=INKEY$(0):IF G$="" THEN GOTO 430
    440 RETURN
    450 PRINT TAB(1,4);"ONE MOMENT PLEASE.";
    460 LET S$=""
    470 FOR J=1 TO 15
    480     FOR K=1 TO 15
    490         LET S$=S$+CHR$(R(K,J))
    500     NEXT K
    510 NEXT J
    520 LET S$=S$+CHR$(IX+OS):LET S$=S$+CHR$(IY+OS)
    530 LET S$=S$+CHR$(LE+OS)
    540 PRINT TAB(1,4);"ANY KEY TO SAVE  ";:GOSUB 430
    550 LET S=OPENOUT "LEVEL"
    560 PRINT#S,S$
    570 CLOSE#S
    580 PRINT TAB(1,4);LEFT$(B$,W)
    590 LET LE=LE+1:GOSUB 700
    600 RETURN
    610 DIM R(15,15),H$(10)
    620 GOSUB 790
    630 DATA "PRESS ANY KEY","TO MOVE A Z N M","1 WALL   2 VASE"
    640 DATA "3 CHEST 4 * IDOL *","5 WAY IN  6 EXIT","7 TRAP","8 SAFE PLACE"
    650 DATA "9 GUARD","0 TO ERASE","S TO SAVE"
    660 LET LE=1
    670 FOR I=1 TO 10
    680     READ H$(I)
    690 NEXT I:GOSUB 810
    700 FOR J=1 TO 15
    710     FOR K=1 TO 15
    720         LET R(J,K)=C0
    730     NEXT K
    740 NEXT J
    750 LET IX=0:LET IY=0
    760 LET B$="":FOR I=1 TO W:LET B$=B$+" ":NEXT I
    770 RETURN
    790 OS=224:C0=OS+6:W=20
    795 MODE 5:VDU 23,0,8202;0;0;0;
    800 RETURN
    810 REM READ THE CHARACTERS
    820 VDU 23,224:FOR I=0 TO 7:READ A:VDU A:NEXT I
    830 FOR I=0 TO 11:VDU 23,230+I
    840     FOR J=0 TO 7:READ A:VDU A:NEXT J
    850 NEXT I:RETURN
    1000 DATA 255,255,255,255,255,255,255,255
    1010 DATA 0,0,0,0,0,0,0,0
    1020 DATA 85,170,85,170,85,170,85,170
    1030 DATA 0,60,24,60,126,126,126,60
    1040 DATA 0,56,100,114,95,73,41,31
    1050 DATA 20,42,20,20,93,93,62,99
    1060 DATA 60,126,255,255,255,253,255,255
    1070 DATA 60,102,195,129,129,129,133,129
    1080 DATA 129,66,36,0,0,36,66,129
    1090 DATA 0,60,66,66,66,66,60,0
    1100 DATA 76,158,170,190,84,30,37,88
    1110 DATA 0,56,84,124,56,44,68,102
    1120 DATA 0,8,28,42,127,85,65,34