본문으로 건너뛰기
피드

슈퍼 마리오 64의 움직임과 렌더링을 외부 게임 엔진에서 쓰는 라이브러리, libsm64

open-source 약 5분
vote
0
댓글
북마크

libsm64는 SM64 디컴파일 프로젝트에서 나온 마리오의 이동·렌더링 코드를 공유 라이브러리로 감싸, Unity·Godot·Blender 같은 외부 엔진에서 마리오를 넣어볼 수 있게 만든 오픈소스 프로젝트야. 다만 텍스처와 애니메이션 데이터는 공식 SM64 ROM에서 런타임에 추출해야 해서, 프로젝트 사용자는 직접 ROM을 제공해야 해.

  • 1

    libsm64는 SM64 디컴파일 코드의 이동·렌더링 로직을 외부 엔진에서 쓰기 쉽게 공유 라이브러리로 제공함

  • 2

    외부 API는 libsm64.h에 모여 있고, 클라이언트는 해당 헤더와 라이브러리만 로드하면 됨

  • 3

    Rust, Odin, C#, Unity, Godot, Blender, Game Maker 8 등 여러 바인딩과 플러그인이 있음

  • 4

    빌드에는 python3가 필요하고, 테스트 프로그램에는 SDL2와 GLEW가 필요함

  • 5

    WebAssembly 타깃으로도 빌드할 수 있어 브라우저나 JS 연동 실험도 가능함

  • libsm64는 슈퍼 마리오 64의 마리오 이동·렌더링 코드를 외부 게임 엔진에서 쓰기 쉽게 만든 공유 라이브러리임

    • SM64 디컴파일 프로젝트에서 복원된 코드를 기반으로 함
    • 목표는 기존 엔진이나 시스템에 “마리오를 최소한의 노력으로 떨어뜨려 넣을 수 있게” 하는 것임
  • 프로젝트가 직접 게임 에셋을 배포하지는 않음

    • 라이브러리는 런타임에 공식 SM64 ROM을 읽어서 마리오 텍스처와 애니메이션 데이터를 추출함
    • 그래서 이 라이브러리를 쓰는 프로젝트는 사용자에게 ROM을 직접 제공하라고 요구해야 함

중요

> 코드 인터페이스는 오픈소스로 제공되지만, 마리오의 텍스처와 애니메이션 같은 에셋은 공식 ROM에서 가져오게 되어 있음. 게임 디컴파일 프로젝트에서 자주 보이는 법적 경계선이 여기에도 그대로 있음.

  • 외부 API는 libsm64.h에 모여 있음

    • 클라이언트 프로젝트는 이 헤더를 include하고 공유 라이브러리를 로드하는 방식으로 붙이면 됨
    • test 디렉터리에는 최소 예제가 있어 라이브러리 사용 흐름을 확인할 수 있음
  • 바인딩과 플러그인 생태계가 생각보다 넓음

    • Rust, Odin, C# 바인딩이 있음
    • Unity 플러그인, Godot 애드온, Blender 애드온, Game Maker 8 확장도 제공됨
    • Unity 쪽은 MelonLoader 모드와 BepInEx 플러그인까지 언급됨
  • 빌드 요구사항은 비교적 전형적인 C/C++ 오픈소스 프로젝트 느낌임

    • python3가 필요함
    • 테스트 프로그램을 빌드하려면 SDL2와 GLEW가 필요하고, Ubuntu 기준으로는 libsdl2-dev, libglew-dev를 설치하면 됨
    • glibc 대신 musl libc로 링크하고 싶으면 LIBSM64_MUSL=1 make를 쓰면 됨
  • 테스트 실행에는 baserom.us.z64라는 이름의 SM64 US ROM이 저장소 루트에 필요함

    • Linux와 Windows MinGW 빌드 모두 같은 ROM 파일 이름을 요구함
    • Windows에서는 MSYS2 MinGW 64 설정을 따라가되 저장소 URL만 libsm64 쪽으로 바꾸면 됨
  • WebAssembly 빌드도 지원함

    • emmake make CC=emcc로 빌드할 수 있음
    • standalone 형태로 JS에서 호출하고 싶다면 emcc dist/libsm64.so -o libsm64.js를 추가로 실행해 libsm64.wasmlibsm64.js를 만들 수 있음

기술 맥락

  • libsm64의 기술적 선택은 게임 전체를 포팅하는 게 아니라, 마리오의 움직임과 렌더링 코드를 라이브러리 경계로 잘라내는 거예요. 그래서 외부 엔진 입장에서는 게임 전체를 끌고 오는 대신 필요한 캐릭터 로직만 호출할 수 있어요.

  • 에셋을 ROM에서 런타임 추출하게 한 이유는 코드와 저작권 에셋을 분리하려는 의도가 커요. 디컴파일 코드 자체는 다룰 수 있어도 텍스처와 애니메이션 데이터를 같이 배포하면 문제가 커질 수 있거든요.

  • libsm64.h 하나를 외부 API의 중심으로 둔 것도 실용적인 선택이에요. Unity, Godot, Rust, C#처럼 붙는 쪽이 다양할수록 C ABI에 가까운 얇은 경계가 유지보수하기 편하고, 바인딩도 만들기 쉬워요.

이 프로젝트는 게임 보존, 디컴파일, 엔진 통합이 만나는 꽤 흥미로운 사례야. ‘마리오를 어디에나 넣는다’는 밈처럼 보이지만, 실제로는 레거시 게임 로직을 라이브러리 경계로 분리해 재사용하는 방식이라 게임 개발자에게 꽤 배울 지점이 있음.

댓글

댓글

댓글을 불러오는 중...

open-source

BC카드, 금융권 첫 자체 AI 플랫폼 오픈소스 공개

BC카드가 자체 개발한 AI 플랫폼 BCGPT WebUI를 오픈소스로 공개했다. 문서 검색, 질의응답, 콘텐츠 생성, 다중 AI 협업을 한 화면에서 제공하고, AI 생성물 표시와 답변 검증 같은 규제 대응 기능을 설계 단계부터 넣은 게 포인트다. 공개 코드는 외부 개발망에서 관리하고, 검증된 기술만 기업용 MoAI 솔루션에 반영하는 식으로 금융권 보안 리스크도 분리했다.

open-source

Bun의 Rust 재작성, 정말 11일 만에 끝난 걸까?

Bun을 Rust로 재작성했다는 발표가 AI 코딩 능력의 대표 사례처럼 소비됐지만, 글쓴이는 실제 저장소와 PR 흐름을 보며 ‘완료’와 ‘비용’ 주장을 의심한다. 11일 동안 16만 5천 달러를 썼다는 숫자 뒤에 CI/CD 비용, Anthropic 직원 투입, 아직 릴리스 태그가 없는 상황이 빠져 있다는 지적이다.

open-source

하이퍼카드 감성으로 돌아온 오픈소스 인터랙티브 문서 플랫폼, 데커

데커는 하이퍼카드와 클래식 맥오에스 감성을 현대적으로 되살린 멀티미디어 문서 제작 플랫폼이다. 브라우저에서 바로 실행되고, 결과물을 독립 실행형 HTML 문서로 저장할 수 있으며, 자체 스크립팅 언어 릴과 텍스트 기반 문서 포맷까지 갖췄다.

open-source

ESP32와 원형 디스플레이로 책상 위 항공기 레이더 만들기

한 개발자가 ESP32-C3와 1.28인치 원형 디스플레이로 주변 항공기를 보여주는 책상용 레이더를 만든 과정을 공유했다. ADS-B 데이터를 받아 거리와 방위를 표시하고, 펌웨어를 고쳐 출발지·도착지, 날씨, 시간, OTA 업데이트까지 추가했다.

open-source

전 세계 성·요새 3,709개를 오픈데이터로 엮은 인터랙티브 지도

Castlemap은 131개국의 성, 요새, 궁전, 폐허 3,709개를 모은 무료 인터랙티브 지도다. 데이터는 Wikidata, Wikimedia Commons, Wikipedia, OpenFreeMap, Natural Earth 같은 오픈데이터에서 가져오며, 전체 데이터셋을 GeoJSON과 CSV로 공개한다. 개발자 뉴스로는 가볍지만, 오픈데이터를 제품화한 사례로는 꽤 볼 만하다.