빌 게이츠와 닐 콘젠의 1981년 BASICA 게임 DONKEY.BAS를 브라우저에서 재현
- DONKEY.BAS는 마이크로소프트 공동창업자 빌 게이츠와 닐 콘젠이 작성한 131줄짜리 BASICA 게임으로, 초기 IBM PC DOS에 컬러 그래픽과 사운드 시연용으로 실렸음
- 웹 페이지는 원본의 CGA 게임플레이를 JavaScript로 재현했으며, 플레이어는 차선을 바꿔 당나귀를 피하고 Space 또는 탭으로 조작함
- 원본은 1981년에 작성됐고 1982년에는 버전 1.10이 배포됐음
- 토론에서는 원본 소스 1750줄의 단순 충돌 검사 때문에 차가 당나귀를 지나친 뒤에도 충돌로 판정될 수 있다는 지적이 나왔음
- 일부 사용자는 macOS Firefox에서 창 크기 3326×2830 부근일 때 화면이 심하게 깜빡인다고 보고했고, 작성자는 GitHub PR로 수정했을 가능성을 언급함
Hacker News opinions
45주년을 계기로 생성형 AI로 브라우저 포트를 만들었음. 어릴 때 131줄 정도로 게임을 만들 수 있다는 사실이 신기했는데, 결과물은 꽤 마음에 듦.
생성된 포트라 새로울 건 없어 보임. 이미 gorillas.zone, CodePen, BrowserGORILLAS.BAS 같은 브라우저 BASIC 게임 포트가 있음.
macOS Firefox에서 브라우저 크기가 3326×2830 근처면 화면이 두 해상도 사이를 오가는 것처럼 심하게 깜빡임. 창 크기를 바꾸면 사라지더라.
차선을 바꿀 때 이미 당나귀를 지나쳤는데도 계속 충돌함.
원본도 충돌 판정이 버그였던 것 같음. 1750줄을 보면 차가 당나귀를 지났는지 확인하지 않고 단순 충돌 검사해서, 다른 차선의 당나귀도 앞에 있으면 부딪힌 걸로 처리함.
초기 IBM PC 스피커는 단순한 자기식 다이내믹 스피커였으니 이 효과음은 너무 발전한 소리임. 나는 가상 CPU와 하드웨어 추상화 계층에서 돌아가는 QBasic 및 QuickBasic 4.5 브라우저 구현을 4개월째 만들고 있고, 거기서 원본 DONKEY.BAS도 돌렸음.
내 첫 직장 주문 입력과 재고 관리 시스템 전체가 QBASIC였음. DOS 5.25인치 플로피에서 소스를 꺼낼 수만 있으면 이 구현에서 돌려보고 싶다.
DONKEY는 BASICA/GWBASIC용이고 Gorillas는 거의 10년 뒤 QBasic용임.
초기 BASIC은 131줄로 작은 게임을 만들 수 있을 만큼 시작하기 쉬웠음. 지금의 비골프 C로 SDL 창과 게임 루프를 열기만 해도 그 줄 수를 넘길 것 같고, 예전처럼 간결하고 재미있는 개발 환경은 잃은 느낌임.
raylib라면 더 적은 줄로 될 수 있음. SDL은 직접 게임 프레임워크로 쓰기보다 여러 플랫폼을 감싸는 바탕 계층에 가까움.
SDL3 최소 예제는 주석과 빈 줄을 빼도 약 40줄이고, 더 제대로 된 Snake 예제는 약 345줄임. DONKEY.BAS도 한 줄에 문장을 잔뜩 넣어서 131줄이라는 수치가 조금 유리한 면이 있음.
창, 이벤트, 렌더러만 잡는 SDL3 뼈대는 약 30줄이면 됨. 다만 DONKEY.BAS 전체를 131줄에 재현하려면 글꼴 아틀라스나 이미지 같은 부분에서 어려울 것임.
131줄 중 약 10%는 제목과 저작권 배너인데도, 코드가 정말 짧게 압축돼 있음.
BASIC 자체는 나중에 보니 별로였지만, 당시에는 기계가 하는 일을 배우기 쉬웠음. DOS 설정은 CONFIG.SYS와 AUTOEXEC.BAT 두 파일뿐이었고, 프로그램 디렉터리를 플로피에 복사했다가 망가지면 다시 복사하고 재시작하면 됐음.
BASIC은 C보다 고수준이고 기본 기능도 많이 들어 있었음. 이 게임은 평범하게 작성한 JavaScript로도 131줄 안에 만들 수 있을 듯함.