
rdgeneric은 2009년 5월 13일 공개된 초기 마인크래프트 rd-132211을 단일 독립형 C 파일로 다시 만든 프로젝트다. 같은 핵심 코드가 브라우저와 PDF, 터미널, 운영체제 없는 x86 환경에서 실행되며, 마이크로컨트롤러와 Game Boy Advance용 빌드도 가능하지만 해당 하드웨어에서 실행되지는 않았다.
PDF 버전은 Chrome에서 작동한다. PDFium에는 WebAssembly 지원이 없어 C 코드를 clang으로 WebAssembly로 컴파일한 뒤, binaryen의 wasm2js로 일반 JavaScript로 변환한다. PDF 파일은 PDF 라이브러리 없이 tools/make_pdf.py로 만든다. 제작자는 이전에 PDF 안에서 실행되는 마인크래프트를 찾지 못했다고 밝혔다.
터미널에서는 문자로 화면을 표시하고, 텔넷 서버에서는 접속자마다 별도의 화면을 제공한다. 브라우저 버전은 Emscripten 없이 빌드한 20KB WebAssembly 모듈을 사용하며, 탭의 파비콘에도 32×32 크기의 실시간 화면을 표시한다. PDF는 Chrome에서 초당 8~19프레임으로 렌더링한다. x86 버전은 VGA 모드 13h를 사용하며 QEMU에서 시험했다.
프로젝트의 핵심에는 헤더 포함, libc 호출, 메모리 할당이 없다. 새 플랫폼은 화면 버퍼와 키 입력만 전달하면 된다. 코어는 RP2040, RP2350, Game Boy Advance용으로도 컴파일된다. 32×24×32 크기의 월드 설정에서 정적 RAM 사용량은 각 대상 모두 50KB이며, 코드는 각각 9.2KB, 9.1KB, 9.3KB다. 다만 이 결과는 컴파일 확인일 뿐, 해당 장치에서 화면을 그리거나 실행한 결과는 아니다.
빌드에는 clang과 Python 3이 필요하다. 웹·PDF 빌드에는 wasm-ld와 wasm2js, 부팅 테스트에는 QEMU가 추가로 필요하다. macOS에서는 다음 명령으로 도구를 설치할 수 있다.
brew install lld binaryen qemu
make
make test
make는 rd-term, build/rdgeneric.html, build/rdgeneric.pdf, build/rdgeneric-x86.elf를 만든다. HTML 파일에는 WebAssembly가 포함돼 있어 디스크에서 바로 열 수 있다. 실제 PC에서 x86 빌드를 부팅하려면 GRUB의 multiboot 명령으로 ELF 파일을 불러온다.
제작자는 코드를 공개된 디컴파일 자료에 나온 rd-132211 설명을 바탕으로 작성했으며, 원본 JAR의 상수와 대조하지는 않았다고 밝혔다. 텍스처는 코드로 생성하며 Mojang의 terrain.png를 사용하지 않는다. 블록 종류는 원본의 두 개에서 일곱 개로 늘었고, 부활 위치와 다른 플레이어의 표현 방식도 다르다. 저장 기능은 터미널 빌드에만 있으며, 원본의 level.dat와 달리 원시 블록 데이터로 저장한다.
주요 제약도 있다. PDF는 Chromium에서만 스크립트를 실행하며 Firefox, Preview, Acrobat에서는 작동하지 않는다. 대부분의 터미널은 키를 놓은 시점을 알리지 않아 키 입력이 잠시 더 유지될 수 있다. 텔넷 서버는 클라이언트마다 초당 최대 30프레임의 컬러 화면을 보내므로 느린 연결에서는 부담이 될 수 있다. x86 빌드는 QEMU에서만 실행됐으며, 실제 하드웨어의 속도는 측정되지 않았다.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요