Code Monkey home page Code Monkey logo

msx-retrogamedev's Introduction

레트로 게임 개발 바이블

cover

본 페이지는 "레트로 게임 개발 바이블" 서적을 학습하시는데 도움이 될 수 있도록 마련한 참조 페이지입니다.
책에서 언급한 참조페이지는 각 챕터의 참조 페이지를 확인하시면 내용을 확인하실 수 있습니다.
또한 공유 폴더에는 책에서 언급한 각종 툴과 데모 프로젝트가 존재합니다.
인터넷의 특성상 기존에 존재했던 파일 다운로드 링크는 사라질 가능성이 있으니 그런 경우에는
공유 폴더에서 필요 파일을 찾아 보시면 되겠습니다.

시작하기에 앞서

본서는 프로그래밍 초심자께서도 레트로 게임을 쉽게 제작가능하도록 내용을 구성했습니다. 다만 어떤 학문에도 기본기가 필요하듯이 이 책을 학습해 나가기 위해서는 다음 전제조건이 필요합니다.

  • C 프로그래밍
  • 각종 툴의 사용법에 익숙해 지기
  • 잘 모르는 부분은 일단 그렇다고 생각하고 넘어가기

세번째 항목은 특히 중요합니다. 이 항목은 유연성을 강조하는 의미로 처음부터 완벽하게 이해하고 넘어갈 필요는 없다는 걸 의미합니다. 일단은 책에서 언급하는 내용을 무작정 따라해 나가면서 그 결과가 제대로 출력되는지에 대해 집중하는 방식으로 내용에 접근하시면 원하는 결과에 더 빨리 도달할 수 있습니다. 잘 모르는 부분에 막혀서 너무 지체해 버리면 흥미를 잃게 되고 그렇게 되면 자신이 만들고자 했던 게임 제작에 결코 도달할 수 없게 되므로 지금 말씀드리는 내용은 매우 중요합니다.

또한 본서는 깊이 파고들면 들수록 생각해 볼만한 주제가 많습니다. 예를 들어 우리가 자동차를 운전할 때는 자동차를 운전하는 방법만 숙지하거나 자동차를 유지 보수하는 방법만 고려하면 됩니다. 자동차가 어떤 원리로 구동되는지에 대한 메커니즘은 알 필요가 없는 것입니다. 하지만 본서를 읽은후 프로그래밍 실력이 일취월장하신 분이나 또는 고급 개발자께서는 책에서 소개하는 심도있는 내용에 대해서도 관심을 가지게 될 것입니다.

요약하면, 프로그래밍에 처음 입문하시는 분께서는 일단 자동차를 운전하는 부분에만 집중을 하시고 책을 처음부터 끝까지 완전히 따라하는데 집중해 주십시오. 그 결과 게임 제작이라는 원하는 결과를 성취하실 수 있을 것입니다. 또한 이를 통해 어느정도 프로그래밍에 익숙해졌다면 본서에서 소개하는 내용중에서 보다 심도있는 내용에 대해 관심을 가지고 새롭게 학습해 나가신다면 프로그래밍 자체에 대한 새로운 즐거움을 발견하시게 될 겁니다.

독자 피드백

최대한 본서를 통해서 명확한 내용을 전달해 드리고자 노력했지만 설명이 부족하거나 오류가 존재할 수 있습니다. 또한 책을 최초 집필한 시점에서는 예제에서 문제가 발생하지 않았지만 시간이 흘러 제대로 동작하지 않는 경우도 발생가능합니다. 이런 부분에 대해서는 독자분께서 피드백을 주시면 가능한한 재빨리 대응해 드리도록 하겠습니다. 저와 같이 레트로 게임 개발 문화 확산에 동참해서 다양한 레트로 게임을 개발할 수 있기를 바래봅니다.

dicord
네이버 카페

궁금한 사항이 있으시면 일차적으로 디스코드로 질문을 남겨주시고 여러가지 이유로 디스코드 사용에 어려움이 있다면 네이버 카페에 질문 글을 남겨주세요. 모든 분들이 좋은 정보를 공유할 수 있기 위해 불필요한 질문은 지양하고 프로그래밍 그 자체에만 집중한 질문을 해주시면 정말 고맙겠습니다.

독자분께서 좋은 피드백을 많이 주시면 참조페이지의 내용은 보다 더 강화될 것이며 차후 본서를 접하게 될 독자분에게 더욱더 좋은 레퍼런스로 다가가게 될 것입니다.

개발환경

본서는 윈도우 운영체제 10, 11을 기준으로 예제를 설명을 하고 있습니다. 그래서 기본적으로는 특정 리눅스 플랫폼에 대해서는 다루지 않습니다.

다만 책 전반적인 부분에서 WSL2을 활용하기 때문에 리눅스 플랫폼에서도 개발은 가능합니다. 또한 윈도우 운영체제에서 활용하는 도구 및 툴은 리눅스에도 대응하는 툴이 존재하기 때문에 프로그래밍에 익숙하다면 리눅스 플랫폼에서도 책을 보시면서 학습을 진행하실 수는 있습니다.

다만 본서는 학습 편의를 위해 어디까지나 윈도우 운영체제를 기준으로 설명을 합니다. 또한 비쥬얼 스튜디오는 리눅스에서 지원하지 않습니다.

요약하면, 본서는 어디까지나 윈도우 운영체제를 기반으로 내용을 전개하며, 리눅스 플랫폼에서 학습을 진행하는 것이 가능할 수도 있지만 그렇게 편하지는 않을 것이라는 것입니다. 그러므로 가능하면 윈도우 운영체제에서 학습을 진행하는 것을 권장합니다.

다만 MSX 편의 경우에는 WSL2을 활용하므로 아래에서 언급하는 플랫폼에서도 예제 프로젝트가 정상 빌드되었음을 확인하였으니 참고하시기 바랍니다.

책을 집필하는 과정에서 필자가 다뤘던 리눅스 플랫폼 환경은 다음과 같습니다.

  • VMWmare 16 우분투 20.04 LTS
  • VirtualBox 6.1 우분투 20.04 LTS

macOS에서 MSX 개발 환경 구축하기

확인결과 macOS에서도 MSX 개발 예제 프로젝트를 빌드할 수 있음을 확인하였습니다.
윈도우 운영체제에서 개발을 진행하는 것이 여의치 않다면 아래 링크의 글을
참조해서 개발환경을 구축해 보시기 .

공유 폴더

공유 폴더 1
공유 폴더 2

참조 페이지

후속작 출간 여부

본서의 출간과는 별도로 레트로 게임 프로그래밍 관련 연구를 계속해 왔기 때문에 후속작을 집필할 수 있을만큼 내용이 축적된 상태지만, 후속작의 집필 여부는 본서에 대한 독자분의 애정어린 관심 및 피드백, 그리고 프로그래밍 관련 질문에 달려 있습니다. 지금까지는 필자 개인이 좋아해서 레트로 게임 프로그래밍을 해왔지만 더 큰 원동력을 얻기 위해서는 독자분의 응원이 절실합니다.

본서가 한국에서 활성화되고 레트로 게임 프로그래밍에 대한 관심이 높아진다면 다음 주제로 후속작을 써보고자 합니다.

  • 2D 타일 프로그래밍과 레트로 게임 개발
  • 명작 MSX 게임을 자신의 손으로 복원하기
  • 실전 도스 게임 제작하기

또는 본서의 MSX, MS-DOS 편과 마찬가지로 특정 플랫폼을 타겟팅하는 것도 고려하고 있습니다.

  • 슈퍼 패미콤 게임 프로그래밍
  • 게임 보이 프로그래밍
  • 애플 프로그래밍
  • 패미콤 프로그래밍

많은 관심을 가져 주셨으면 좋겠습니다.

본서를 넘어

앞에서 언급했듯이 본서의 집필 시점과 출간 시점에 간극이 있고 별도로 레트로 게임 프로그래밍을 연구해 왔기 때문에 현시점에서는 보다 많은 노하우가 쌓인 상태입니다. 지금부터 소개하는 내용은 아직 공개가 되지 않았지만 완성도가 높아지면 공유할 예정에 있습니다.

어떻게 보면 독자분께서 본서를 마스터하시면 스스로 구현 가능한 내용이기도 하니 참고하시면 되겠습니다. 이미지의 경우, 클릭하시면 유튜브 동영상으로 시청하실 수 있습니다.

MSX

왕가의 계곡 1(킹스밸리)

ubox MSX 라이브러리를 최대한 활용해서 오리지널 왕가의 계곡 1편을 재현한 프로젝트입니다. 이 프로젝트의 경우 아예 코딩을 하지 않고 맵만 제작하면 자신만의 롬 파일을 생성할 수 있도록 프로젝트가 구축된 상태입니다.

왕가의 계곡

이 프로젝트를 통해 완성된 롬 파일을 WebMSX로 직접 플레이해 볼 수 있습니다.

게임 플레이중 진행이 불가할시에는 P키를 누르시면 됩니다.
킹스밸리의 엔딩을 봤다는 가정하에 맵을 제작했기 때문에 난이도가 꽤 높습니다.

버전1
버전2

걸케이브

패럴랙스 스크롤과 횡스크롤 슈팅 게임을 제작하는데 기초가 될 수 있는
MSX 명작게임 걸케이브의 프로토타입 영상입니다.
미사일 이동 좌표 경우 실수형을 사용하지 않고 정수 좌표를 사용하는데
정수만으로 일직선으로 이동하는 미사일을 구현하는 방법에 대한
노하우를 얻을 수 있습니다.

걸케이브

마성전설

MSX1은 픽셀 기반 배경 스크롤이 어렵기 때문에 배경은 타일 기반으로
스크롤링합니다. 대표적인 타일기반 종스크롤링 게임으로는
마성전설을 들 수 있습니다. 현재 마성전설 프로토타입을 제작하면서 한가지 문제에 봉착했는데
그것은 기존 마성전설처럼 8단계를 제작하면 롬의 최대크기인
32KB를 훌쩍 넘어버린다는 것입니다.
이를 해결하기 위해서는 게임에 사용된 맵데이터를 더 축소시킬 수 있는 아이디어가 필요합니다.

마성전설

시티 컨넥션

시티 컨넥션은 도로의 타일을 전부 지나가면 스테이지를 클리어할 수 있습니다.
간단한 플랫폼 게임을 제작하는데 있어 좋은 프로토타입이 될 것입니다.

시티 컨넥션

구니스

코나미에서 출시했던 고전 명작 게임 구니스입니다.
다른 플랫폼으로도 출시된 게임이지만
개인적으로는 MSX용 구니스가 더 정감이 갑니다.

구니스

MSX 폭스레인저

MSX 폭스레인저는 MS-DOS용 폭스레인저 1편을 MSX1용으로 다운그레이드
시키려는 프로젝트입니다. 아직 게임 리소스를 제대로 확보하지 못해서
초기 개발 상태에 머물러 있습니다. 걸케이브의 게임 리소스를 차용해서
개발을 진행하고 있습니다.

MSX 폭스레인저

디버깅

본서에서는 MSX의 경우 C 소스코드 레벨에서 동적 디버깅이 가능한
시스템은 소개하지 않았으며 차선책으로 듀얼 시스템 프로그래밍을 통한
간접적인 디버깅 방법을 제시했습니다.
현재는 MSX에서도 동적 디버깅이 가능한 환경을 알아냈습니다. 아래 영상은
동적 디버깅 영상을 보여줍니다.

MSX 동적 디버깅 1

MSX 동적 디버깅 영상

MSX 동적 디버깅 2

킹스밸리 게임에서 적과 주인공이 부딛힐시 브레이크 포인트가 히트하는 영상을 보여줍니다.

MSX 동적 디버깅 영상2

MS-DOS

MS-DOS에서는 현재, 새로운 게임 프로젝트를 진행하기 보다 타 플랫폼에서 개발한 게임을
손쉽게 도스 플랫폼으로 마이그레이션 하는 부분에 대한 연구를 진행하고 있습니다.
궁극적으로는 일관된 인터페이스를 통해 레트로 게임을 여러 플랫폼에 배포하기 위한
추상화 인터페이스 연구를 진행하고 있다고 이해하시면 되겠습니다.

왕가의 계곡 1 - 도스박스 테스트

도스용으로 개발한 게임은 실기로 테스트하면 제일 좋겠지만 개발 속도에 영향을 주므로
최초 도스게임을 제작할시에는 도스박스로 테스트하는 것이 좋습니다.
아래 영상은 도스박스로 도스용 왕가의 계곡 1 리메이크 버전을 테스트하는 영상을 보여줍니다.

왕가의 계곡 도스박스 테스트

왕가의 계곡 1 - 실기 테스트 1

레트로 게임 프로그래밍에 도전하는 궁극적인 이유중 하나는 자신이 만든 게임을
실기에 돌려보는데 있을 것입니다.
아래 영상은 SDL1 라이브러리를 활용하여 실기에서 킹스밸리 1을 실행한 화면을 보여줍니다.
486-SX, 삼성 SPC7600P에서 테스트를 하였습니다.

왕가의 계곡 도스 실기 테스트

왕가의 계곡 1 - 실기 테스트 2

SDL1로 제작한 프로그램을 HX 도스-익스텐더를 활용하여 도스상에서 실행시키는 것은
실험적인 면이 강하며 아직 불안정한 측면이 있습니다.
특히 SDLMixer를 활용하는 경우 사운드 출력에 약간의 문제를 일으켰습니다.
아래 영상은 알레그로4 라이브러리를 활용하여 실기에서 킹스밸리 1을 실행한 화면을 보여줍니다.
알레그로4 라이브러리를 활용하면 도스상에서 안정적으로 동작하는 프로그램을 제작할 수 있습니다.
486-SX, 삼성 SPC7600P에서 테스트를 하였습니다.

왕가의 계곡 도스 실기 테스트2

디버깅

도스박스-X 듀얼스크린을 활용한 디버깅

VGA 모니터와 허큘러스 모니터를 활용하여
도스시스템에서 프로그램을 동적 디버깅을 하는 영상을 보여줍니다.
볼랜드 C/C++ 3.1 IDE를 활용했습니다.

도스 프로그램 디버깅

스트리트 파이터 2 정영덕님 버전

도스 시절을 거쳤다면 누구나 들었을만한 게임인
스트리트 파이터 2 정영덕님 버전 디버깅 영상입니다.
류가 장풍을 쏠시 브레이크 포인트를 걸어 내부 상태를 조사하는 영상입니다.
도스박스-X + 볼랜드 C/C++ 3.1 IDE를 활용했습니다.

스트리트 파이터 2 디버깅 영상

SDL BGI 듀얼 시스템 프로그래밍

도스 프로그래밍을 대표하는 프로그래밍 인터페이스로
BGI(Borand Graphics Interface)가 있습니다.
아래 프로젝트는 이 BGI API를 활용하여
WIN32 / MS-DOS에서 동작하는 프로그램 작성 방법을 보여줍니다.

SDL BGI

SDL 1.2 + HX 도스 익스텐더 조합을 통한 MS-DOS 실행

아래 링크에서 소개하는 SDL 1.2 게임 프로젝트는
SDL 1.2로 작성된 프로그램에 생명력을 부여하기 위해 진행중인 프로젝트입니다.
SDL 1.2로 작성된 게임 프로젝트의 경우 여러가지 이유로
SDL 2.0으로 마이그레이션 하는 경우가 많습니다.
하지만 SDL 2.0으로 마이그레이션하는 비용은 많많치 않은 작업입니다.
그래서 게임 프로젝트를 수정하지 않고 SDL 1.2 API 래퍼를 만들어서 내부적으로 SDL 2.0 API를 호출하게끔
수정을 했습니다.
게임 소스코드 자체는 SDL 1.2로 작성되어 있는 만큼
약간 수정을 해서 빌드를 하면 도스에서도 동작가능할 수 있으니 살펴보시기 바랍니다.

그렇지만 대부분의 프로젝트는 성능상의 이유 등으로 거의 도스상에서 구동하기는 불가능합니다.
이 항목은 최적화등의 문제도 있고 해서 난이도가 매우 높기 때문에 SDL 1.2로 작성한 게임의 MS-DOS 실행 가능성을 열어뒀다는 정도만 파악하시면 되겠습니다.

번외편

여기서 언급하는 내용은 본서와 직접적인 관련이 없습니다.
다만 본서를 학습하고 나서는
레트로 플랫폼에서 활용했던 유용한 라이브러리를 현세대 플랫폼에서
재활용할 수 있다는 사례를 보여주므로 관심을 가질 필요가 있습니다.

IMS 플레이어 안드로이드

MS-DOS 시절에 유명했던 음악 포맷인 IMS 파일을 안드로이드에서 연주가능하게 해주는 플레이어입니다.
안드로이드 마켓에서 다운로드 가능합니다.

IMS 플레이어 안드로이드

구버전의 경우 샘플 IMS 파일이 내장되어 있어서 IMS 음원을 바로 들어보실 수 있습니다.

PushOver4Droid

한국에서는 MS-DOS 플랫폼으로 출시된 적이 있는 '아기개미 G.I'의 안드로이드 포팅 버전입니다.
WIN32 버전으로 재구현된 이 게임을 안드로이드용으로 포팅했습니다.
소스코드는 SDL2로 작성되었기 때문에 다른 플랫폼으로의 마이그레이션이 용이합니다.

오리지널 소스코드
PushOver4Droid 다운로드

저자 레트로 게임 플레이 영상

MSX, MS-DOS 플랫폼이 전성기였던 시절에 저자는
프로그래밍은 문외한이고 오락실만 찾던 겜돌이였습니다.
여러가지 이유가 있겠지만 어린시절을 시골에서 보내다보니 게임을 하는 것 만큼 게임을 만드는 것도 재밌다는 것을 상기시켜 줄 수 있는 환경을
갖추지 못했기 때문이라고 생각하고 있습니다.
하지만 게임을 열심히(?) 했고 그당시에는 프로그래밍을
하지 않았기 때문에 오히려 지금처럼 어떠한 선입견을 갖지 않고
현대적인 프로그래밍 관점에서 옛 플랫폼을 조망할 수 있는 계기를 마련할 수 있었다고 생각합니다.

이상하게 들릴수도 있겠지만 어릴적에 게임을 즐겁게
플레이하셨다면 게임도 분명 즐겁게 개발하실 수 있을 겁니다.

아래 영상은 저자가 좋아했던 게임의 플레이 화면입니다.
어릴적에 이런 게임들을 플레이한 것이 계기가 되어
제가 본서를 출간하고자 마음을 먹지 않았나 생각합니다.
재밌게 봐주시면 감사하겠습니다.

마성전설 1 플레이 영상

마성전설1

Xain'd Sleena(제인드 슬리나)

제인드 슬리나

msx-retrogamedev's People

Contributors

pdpdds avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.