SFMB

  • SFMB는 Super fanmade Mario Bros. 의 약자로, 말그대로 팬이 만든 슈퍼 마리오 게임을 의미하는, 내가 아무 생각 없이 지어낸 이름이다.
  • 최초의 프로젝트명은 MarioV3 으로, 이는 내가 3번째로 마리오 따라 만들어보기를 시도함을 의미한다.
  • MarioV1은 대학생 때, MarioV2는 전 직장때 시도했는데 이에 대한 자세한 내용은 기회가 되면 작성하기로 하자.

최초의 목표

  • 최초의 목표는 무려 40여년 전에 출시된 슈퍼 마리오1을 똑같이 만들어보는 것이었다. 별다른 이유는 없었다.
  • 단지 당시 첫번째 회사를 그만두고 집에서 놀고 있었고, 심심풀이 삼아 만들던 [[about_neoarc_macro_js]] 외에 또다른 즐길거리를 떠올리던중 아내의 권유로 시작하게 되었다. (감사!)

개발 환경 및 언어

  • Visual Studio 2015 에서 개발을 시작했고 개발 언어는 C++ 이다.
  • 2021년 현재는 Visual Studio 2019 를 사용중이며 C++ 17이 주 언어이다.
    • 보조 언어로 Javascript - node.js를 사용한다.

사용된 기술 또는 라이브러리

  • DirectX 9.0
  • OpenGL
  • FMod
  • Direct Input
  • 자동 업데이트
  • Custom URL scheme
  • Discord 연동
  • Serverless 구조
  • Node.js
  • MFC

버전별 히스토리

1.0

  • 원작 슈퍼 마리오1에 근사한 수준이 완성됐다.
  • 게임과 동시에 게임에서 사용할 데이터를 작성하기 위해 몇가지 툴을 같이 개발해야 했다.
    • 맵 에디터
    • 스프라이트 에디터

2.0

  • 사람들의 의견에 따라 테마를 변경하는 기능이 추가되었다.
  • 이미지, BGM, 효과음 세트를 준비해두면, 통째로 교체하여 다른게임처럼 보이도록 할 수 있게 됐다.
  • 외관은 다르지만, 실제 동작은 동일했다.

3.0

  • 유저들이 맵 에디터로 만든 스테이지 파일을 공유 서버를 통해 공유하는 기능이 추가됐다.
  • 모튼 버전을 통틀어 가장 큰 변화로 볼 수 있다.
  • Firebase를 활용하여 서버리스 온라인 게임이 된 셈이다.

4.0

  • 다양한 엔진 개선을 주로 진행했다.
  • Direct Play라는 기능을 도입했다.
    • 특정 온라인 스테이지에 해당하는 URL을 클릭하면, 게임이 실행되고 즉시 그 스테이지를 플레이할 수 있다.
    • 게임이 실행중인 경우에는, 특정 몇몇 상태를 제외하고는 즉시 해당 스테이지 플레이로 전환된다.
  • 마리오 외의 캐릭터도 선택할 수 있게 되었다.

5.0

  • PNG지원. 그동안은 모두 BMP였다.
  • Discord rich-presense 지원
    • 누가 게임을 하고 있는지, 어떤 레벨을 플레이하고 있는지 알 수 있게 되었다.
  • 서버 분할
    • Firebase 무료 트래픽 문제로 용도별로 서버를 분할했다.
    • 그래도 역시 가장 크게 부하가 걸리는 부분은 스테이지 데이터였다.
    • 따라서 추가로 캐시 서버도 만들게 되었다.
  • exe파일 sign 기능
    • 사용자 정보를 exe파일에 기록하는 기술을 개발했다.
    • 이로써 누군가가 게임을 유출하면, 누가 유출했는지 알 수 있게 되었다.

6.0

  • 맵에디터 MFC UI를 새로 개발했다.
    • 계속해서 기능이 추가됨에 따라 5~6개에 달하는 툴바에 모든 아이콘을 표시하기도 힘들뿐더러, 사용하는 입장에서 찾기도 매우 어렵게 되었다.
    • 리본 UI 채용했고, 메뉴의 세부항목은 동적으로 구성하도록 구현했다.
    • 이런 동적 로딩이 리본 UI의 기본 기능으로는 구현이 불가능하여 일부 기능을 커스텀해야 했다.
  • 6.3 또는 6.4에 누군가에 의해 서버가 해킹되었다.
    • 여담으로 이 '누군가'는 1달정도 후에 나와 접촉하여 사과했고, 지금은 친구가 되었다.
  • Firebase의 주요 데이터가 모두 삭제되었다.

7.0

  • 온라인 플레이를 위한 코드를 전부 새로 작성하였다.
    • 따라서 서버리스 구조가 아닌 node.js로 구동되는 서버가 존재하는 Client-Server구조가 되었다.
  • 도전모드가 추가되었다.
    • 마리오 메이커의 100 Mario Challenge와 비슷한 느낌으로, 연속해서 랜덤한 레벨을 클리어하는 게임모드이다.

쇼케이스 동영상