원문 캡처 · github.com
원문 캡처 · github.com

1989년 NES용 테트리스를 Rust로 다시 만들어 데스크톱 게임으로 실행할 수 있게 했다. 원작의 프레임 단위 동작을 유지하면서 키 재설정과 게임패드 지원을 더했다.

sanghoonio의 오픈소스 프로젝트 tetris_nes는 macOS·Linux·Windows에서 NES 테트리스를 실행하려는 사람을 위한 게임이다. 게임을 빌드하려면 사용자가 NES 테트리스(미국판) 롬 파일을 직접 준비해야 한다.

이 프로젝트는 무엇인가?

NES 테트리스를 데스크톱으로 옮긴 재구현으로, 오래된 게임을 새 게임기로 옮기는 작업을 떠올리면 쉽다. 다만 이 프로젝트에는 닌텐도나 테트리스의 코드·그래픽·음악이 들어 있지 않으며, 사용자가 제공한 롬에서 그래픽과 음악, 데이터 표를 읽어 빌드한다.

무엇이 달라졌나?

게임은 원작처럼 동작하도록 만들어졌고, 키보드 조작과 키 변경, 게임패드 지원, 설정 화면, 최고 점수 저장 기능을 갖췄다. 설정에서는 방향키 반복 속도와 시작 지연, 좌우 키를 동시에 눌렀을 때의 동작, 아래쪽 키와 좌우 키를 함께 누를 때의 감속, 빠른 낙하, 착지 위치를 보여주는 고스트 블록, 다음 블록 표시, 최고 점수 저장 여부를 바꿀 수 있다.

설정은 기본적으로 원작의 동작에 맞춰져 있다. 개인 설정과 마지막 게임 선택, 최고 점수는 settings.toml에 저장된다. 저장 위치는 macOS에서 ~/Library/Application Support/Tetris/, Linux에서 ~/.config/Tetris/, Windows에서 %APPDATA%\Tetris\다.

어떻게 설치하고 실행하나?

필요한 것은 macOS·Linux·Windows 컴퓨터, Rust, NES 테트리스(미국판) .nes 롬 파일이다. macOS에서 빌드하고 테스트했으며, Linux와 Windows에서도 컴파일되지만 해당 운영체제에서는 아직 게임을 실행해 보지 않았다. Windows에서 Rust를 설치할 때는 안내되는 설치 프로그램을 사용하며, Visual Studio의 C++ 빌드 도구도 필요하다.

Linux에서는 사운드와 게임패드용 개발 패키지를 설치해야 한다. Debian·Ubuntu에서는 다음 명령을 사용한다.

sh
sudo apt install pkg-config libasound2-dev libudev-dev

Fedora에서는 alsa-lib-devel과 systemd-devel 패키지가 필요하다. Rust 설치는 rustup 안내 페이지의 한 줄 명령을 따르면 된다.

빌드와 실행 순서는 다음과 같다.

  1. 프로젝트를 내려받고 디렉터리로 이동한다: git clone https://github.com/sanghoonio/tetris_nes.git cd tetris_nes.
  2. 준비한 롬 파일을 tetris.nes라는 이름으로 프로젝트 폴더에 복사한다.
  3. cargo run --release를 실행한다. 첫 빌드에는 1~2분이 걸린다.

롬 파일이 다른 위치에 있다면 복사하는 대신 경로를 지정할 수 있다.

sh
TETRIS_ROM=/path/to/your/tetris.nes cargo run --release

Windows PowerShell에서는 다음과 같이 실행한다.

powershell
$env:TETRIS_ROM="C:\path\to\tetris.nes"; cargo run --release

빌드 과정은 롬에서 그래픽·음악·데이터 표를 게임으로 복사한다. 원작의 프로그램 코드는 사용하지 않는다. 빌드가 끝나면 롬 파일 없이 실행할 수 있으며, 실행 파일은 target/release/tetris에 만들어진다. Windows에서는 tetris.exe다. 실행 파일은 원하는 위치로 복사해 직접 실행할 수 있다.

조작과 이용 조건은?

시작 화면에는 START, SETTINGS, EXIT가 있다. 메뉴에서는 방향키로 이동하고 Enter로 선택하며 Escape로 돌아간다. Enter를 누르면 시작 전 법적 안내 화면을 건너뛸 수 있다. 레벨 선택 화면에서 Shift를 누르고 있으면 10~19레벨이 표시되며, Shift+Enter로 해당 레벨에서 시작한다.

게임 중 기본 키는 왼쪽·오른쪽 방향키로 이동, 아래쪽 방향키로 천천히 내리기, Space로 빠르게 내리기, X로 시계 방향 회전, Z로 시계 반대 방향 회전, Escape로 일시 정지다. 빠른 낙하 기능은 설정에서 켜야 한다. 게임 중 키는 SETTINGS > CONTROLS에서 바꿀 수 있다.

일시 정지하면 RESUME과 QUIT 메뉴가 나온다. 다른 창으로 전환해도 게임은 자동으로 일시 정지된다. 최고 점수 이름은 키보드로 입력한다. Backspace로 지우고, 왼쪽·오른쪽 키로 이름의 위치를 옮기며, 위·아래 키로 글자를 바꾼다. Enter를 누르면 입력이 끝난다.

게임패드에서는 십자키나 왼쪽 스틱으로 이동한다. 메뉴에서는 아래쪽 버튼이나 Start로 선택하고 오른쪽 버튼으로 돌아간다. 게임 중에는 오른쪽·아래쪽 버튼으로 회전하고 위쪽 버튼으로 빠르게 내리며, Start로 일시 정지한다. EXIT를 선택하거나 창을 닫아 종료할 수 있고, Mac에서는 Cmd+Q도 사용할 수 있다.

설정 화면은 세 페이지로 구성된다. CONTROLS에서는 게임 중 키를 바꾸고, GAME에서는 앞서 설명한 게임 동작을 조정한다. SYSTEM에서는 음량, 전체 화면, 픽셀 크기, 기본 설정으로 되돌리기를 설정한다. 픽셀 크기에서 FIT은 창에 맞춰 화면을 가능한 크게 표시한다. WHOLE은 픽셀을 2배·3배처럼 정수 배율로만 키워 선명도를 유지하고 테두리를 더 넓게 둔다.

Mac에서 Finder·Launchpad·Spotlight로 열 수 있는 Tetris.app을 만들려면 다음 명령을 실행한다.

sh
tetris-rs/macos/bundle.sh --install

--install을 쓰면 앱이 ~/Applications에 설치된다. 옵션을 생략하면 target/Tetris.app에 생성된다. 앱 아이콘을 만들려면 uv가 필요하다. 앱에는 롬에서 가져온 그래픽과 음악이 들어가므로 공유하지 말아야 한다. 프로젝트는 닌텐도나 The Tetris Company와 제휴하거나 이들의 승인을 받은 것이 아니다. 원문은 롬 파일을 구하는 방법이나 각 회사의 권리·배포 조건을 구체적으로 밝히지 않는다.