Go North: Init

Over the past few days, I’ve been thinking a lot about game development and Quick Basic after reading that the DOS Game Club (Community & Podcast) is organizing a Basic Jam early next year.

The rules are simple: there is no waiting around for a start date, and any BASIC interpreter goes (QBasic, QuickBASIC, GW-Basic, PowerBASIC), even Visual Basic for DOS, which is a thing, apparently. The deadline (not mentioned in the rules yet) is most likely end of January, so the club can play some of the releases in February 2027. No AI, though avoiding it today wasn’t easy: every Google search I did for a coding problem showed AI-generated suggestions right at the top. I also saw this result a lot.

Choosing an interpreter wasn’t a hard choice, as I wrote plenty of QuickBASIC 4.5 as a teenager, and honestly, I don’t know any of the others. I just need to shake off a little rust, and then I’m good to go. I think.

Today, I read up on DOS palettes across different screen modes and how to load RGB data into memory. I remember converting LBM files by hand back in the day, but I think I’ll work with PNGs as my asset source. Or maybe .aseprite files directly, since that’s the tool I’ll be using. I presume the format is well documented, but I’ve never actually worked with it directly. Still, that raises the age-old question: how much time will go into building tools versus actually developing the game?

A quick flip through an old QuickBASIC book online brought back forgotten memories, mostly of just how aggressively UPPERCASE coding used to be.

Regardless, I’ve now put together a working prototype and did the fateful “Intial commit”.

First Screenshot of Go North

Prototype (excerpt)

GO-NORTH.BAS
⋯
DECLARE SUB InitWorld ()
DECLARE SUB SetMode (newMode)
DECLARE FUNCTION ModeNow ()
DECLARE SUB Describe ()
DECLARE FUNCTION GetCommand$ ()
DECLARE SUB Parse (typed$)
DECLARE SUB SwitchMode ()
DECLARE SUB DrawStatusBar ()
CONST STARTROOM = 1
DIM SHARED here, mode
DIM SHARED quitting, described, redescribe, score, moves
'$DYNAMIC
DIM SHARED pic(PICWORDS - 1)  ' the room image
'$STATIC

'
'
' ░▒▓█ Main program

InitWorld
here = STARTROOM
SetMode ModeNow
Describe
DO
  typed$ = GetCommand$
  IF LEN(typed$) THEN
    moves = moves + 1
    Parse typed$
    IF ModeNow <> mode THEN SwitchMode
    IF redescribe AND NOT described THEN Describe
    DrawStatusBar
  END IF
LOOP UNTIL quitting

' Back to Text mode
SCREEN 0
WIDTH 80, 25
END
⋯

I think I want LOOP UNTIL quitting on a shirt.

Edit: Christian sent me two interesting links via Mastodon