Skip to content

정통 SRPG를 표방할 뻔한 게임 Subject Nil

Notifications You must be signed in to change notification settings

develup4/subject_nil

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Subject Nil

Subject Nil은 창세기전의 영향을 받은 정통 SRPG를 표방할뻔 했습니다. 아버지의 유품인 펜던트를 둘러싼 슈린츠의 모험이 시작될뻔 했습니다. 제목도 지어질뻔 했지만 이제는 고유명사처럼 Subject Nil이 되었습니다. 번역하자면 제목없음입니다.

게임의 컨셉

간단히 말해 리얼타임 SRPG입니다. 보통 TP라 불리는 타임 게이지가 차면 아군 캐릭터를 조작할 수 있고 조작하는 동안은 시간이 정지하지만, 이 게임은 조작하는 동안에도 시간이 흐릅니다. SRPG이므로 셀을 눌러 조작하는 형식이지만 날라오는 파이어볼🔥을 피할 수도 있는 것입니다.

image

지금은 굴지의 게임회사에서 기획 팀장을 맡고 있는 그도 첫 기획은 이랬다. 그때까지만해도 그의 꿈은 소설가✍️였다.

V1

프로젝트 설명

2003년 고등학교 학원가에서 나눠주던 연습장들에서 손코딩이 이루어졌습니다. 야간자율 학습시간에 열심히 손코딩하고 집에 와서 직접 코딩을 해보며, 일반계 고등학교의 한정적인 스케쥴 안에서 Subject Nil이 만들어졌습니다. 마음이 맞는 기획자 친구와 팀 유통기한을 결성하여 개발이 이루어졌으나, 그래픽 디자이너👩‍🎨의 부재는 너무 뼈아팠습니다. 그림이라곤 취미에 없던 개발자가 직접 도트를 찍었습니다. 그러다보니 진도는 좀처러 나가지 않았고 데모시연에서 개발은 중단되었습니다. 고3이 되었습니다. 이래서 팀 이름은 잘지어야하나봅니다.

image image image

나의 피땀눈물😂이다. 솔직히 코딩시간보다 더 많이 소요되었다.

image

이 한 장면을 만들고 싶어서 달려왔다. 창세기전3 파트2의 엔딩크레딧을 베꼈다. 까먹고 있었는데 팀 이름이 디테일로 바꾸었었다. 디테일을 만들지 못한 아쉬움이었나보다.

기술 스택

  • Visual Basic6DirectX7을 사용하여 구현하였습니다. 초등학생때부터 베이직 계열을 쭉 사용해왔고 게임 개발에 관심이 있었으나, 모든 자료들은 C나 CPP로 되어있었습니다. 우연히 구한 한권의 책을 바탕으로 개발을 시작하였습니다. 많은 책에서 베이직으로 게임을 개발하는 것은 어려우 일이라고 직접적으로 언급해서 오기도 있었습니다. 저 리소스들으 누가 훔쳐가겠냐만은 PAK으로 패키징을 하고, 8비트 256색에서 팔레트를 통해 다양한 색상을 사용한 것이 특징이라면 특징입니다. 지금은 스타크래프트도 리메이크되었지만 예전에는 스타크래프트도 256색을 잘써서 만들어진 놀라운 게임이었습니다.

image

남아있는 스크린샷은 이것뿐입니다. 추억. 이름도 Subject Nil이 되기전이네요. 기획자한테 기각당하고 못정해지다가 결국 Subject Nil이 되었습니다. 아래는 이 게임을 추억하며 적은 글의 스크린샷인데 해상도가 너무 낮군요.

README

시나리오

시나리오는 게임보다는 더 많이 작성되었습니다. documents/scenario/scenario.hwp를 한컴오피스로 참조하십시오.

V2

프로젝트 설명

대학에 진학하고 게임 프로그래밍 수업의 텀프로젝트로 작성한 게임입니다. 결국 항복하고 CPPDirectX9를 사용하였습니다. DX9은 반투명 구현이 쉬워서 매우 좋았습니다. 그래픽 리소스는 RPG Maker(쯔꾸르)의 리소스를 사용하였습니다.

image image

구조

  • CWindow 클래스
  1. 윈도우를 생성
  2. CD3D, CData, CScene 클래스의 객체를 포함
  • CD3D 클래스
  1. D3D 관련 객체 생성
  • CScene 클래스
  1. 현재 장면을 관리, 통제하는 클래스
  2. 추상 클래스로 이를 상속하는 구체 클래스들은 각 장면에 대한 Control Class에 해당한다
  3. FrameMove 함수를 통해 렌더링을 제외한 모든 내부 데이터 처리를 한다.
  4. Render 함수를 통해 렌더링 만을 처리한다.
  5. FrameMove와 Render 함수는 순수가상함수로 이 클래스에선 인터페이스 역할만 한다
  • CTitle 클래스
  1. 타이틀 장면을 컨트롤하는 클래스
  2. CTitleButton 클래스의 객체를 포함
  • CEvent 클래스
  1. 이벤트 장면을 컨트롤하는 클래스
  2. 이벤트 스크립트 파일로부터 스크립트 명령어를 받아와 저장한다
  3. BOB(Bitmap Object)들을 포함하고 있다
  4. BOB들은 공통적으로 CEventSprite 클래스로부터 상속받고 있다.
  5. 따라서 FrameMove와 Render에서 다형성을 이용해 쉽게 조작이 가능하다
  6. 스크립트 명령어에 따라 BOB들을 적절히 조작하여 이벤트를 진행시킨다.
  • CBattle 클래스
  1. 전투 장면을 컨트롤하는 클래스
  2. 전투 스크립트 파일로부터 전투에 대한 정보를 받아와 세팅한다.
  3. 사용자의 조작과 인공지능에 의해 CBattle 클래스가 관장하는 BOB들을 조작하여 전투를 진행시킨다.

License

MIT license