2025년 7월 20일 일요일

DW의 지하실 제작 #5 - 게임 플레이 구현

재료(?)들은 준비되었으니, 이제 본격적인 코딩으로 들어갑니다.

.

.

사실 그냥 노가다입니다요~ ㅎ.ㅎ



내용을 설명으로 적어보면요...


플레이어는 바닥에 떨어진 배터리를 줍는다. 최대 5개 소지가능.

X-II에 배터리 2개를 넣으면 전원이 켜짐. 안켜지는 고장난 X-II도 존재.

적과 부딛히거나 바닥의 누액을 밟으면 체력이 소모됨.

피로회복제로 체력 회복 가능.


적들(유령 및 몬스터)는 주변의 켜진 X-II로 돌아가려함.

X-II에 적 하나가 들어가면, 화면에 한글 글자 1개가 나타남.

해당 스테이지에 맞는 한글 글자를 모두 얻으면, 최종 X-II를 얻을 수 있음.

최종 X-II에서 키보드 테스트(한글 입력)를 완료하면 스테이지 클리어!


주변의 방들은 서로 연결되어있으며, 휴대폰 아이템을 얻으면 화면에 지도가 나타남.

지도상에는 정상적인 X-II(흰색)와 고장난 X-II(빨간색)가 표시되며,

정상 X-II를 켜면 파란색으로 바뀜.


아이큐1000, 아이큐2000, 데이터레코더 등의 아이템으로 보너스 점수 획득가능.


... 이렇습니다. 글로 적으니까 복잡하네요ㅋ



그냥 영상으로 보시죠~ ㅎ.ㅎ/




'DW의 지하실'의 플레이는 이렇게 완성되었습니다.

스테이지 데이터는 아직 다 만들어진 상태는 아닌데요, 며칠 더 삽질이 필요하겠습니다.


2025년 7월 16일 수요일

DW의 지하실 제작 #4 - 사운드 넣기

게임이 MSX2 기본 사양(물론 VRAM은 128KB)이라, 사운드도 그냥 PSG만 사용합니다.

CPU 여유가 되면 FM도 넣어볼까 생각은 해봤었는데, 그래픽 때문에 좀 불가능할 것 같네요

BGM과 효과음도 모두 PSG만 사용하니까, 효과음 출력 시 BGM 한채널이 MUTE되는 걸 볼 수 있겠습니다!


먼저 타이틀에 쓰일 곡으로 '드뷔시 달빛'을 템포를 약간 올려서 넣었구요.

게임 메인 BGM은 '라데츠키 행진곡'입니다.

제목은 기억 못하더라도(제가 그랬...ㅋ) 곡 자체는 귀에 익으실 겁니다요 ㅎ.ㅎ


사운드 루틴은 VDP의 스캔라인 인터럽트를 활용합니다.

아무래도 V블랭크 구간에서는 그래픽 작업때문에 CPU가 바빠서 사운드 타이밍을 밀었습니다~


아래는 CPU로드 그래픽을 켠 상태이니, 참고하세요.

색칠된 스캔라인 개수가 CPU로드를 나타낸다고 보시면 됩니다.

사운드는 한 프레임 출력의 절반쯤에서 처리되고 있어요.




사운드는 딱히 설명할 부분이 없네요. 으흠...

그냥 영상으로 구경하시죠~ ㅎ.ㅎ/



그럼, 다음 편에서 뵈어요~ ㅎ.ㅎ/


2025년 7월 13일 일요일

DW의 지하실 제작 #3 - 스프라이트 구성

아시다시피 MSX의 스프라이트는 컬러코드가 4BIT입니다.

V9938의 G7(스크린8)에서는 그래픽은 RGB 8BIT 출력이 됩니다만, 스프라이트는 여전히 4BIT죠.


근데, 한가지 문제라면,

스크린8에서는 스프라이트가 16컬러로 고정되어 출력됩니다. 팔레트 레지스터의 영향을 받지않아요.

바꿔말하면 MSX1의 스프라이트랑 비슷한 색으로 나옵니다. 실제로는 EGA 16컬러에 더 가까운 듯요 ㅎ.ㅎ


암튼 잡설은 여기까지구요, 스프라이트를 만들어봅시다요!

이전 글에서 언급했지만, 플레이어는 비트맵 그래픽(16 x 24)로 구현되어 있습니다.

나머지 몬스터와 잡다 효과용 패턴만 스프라이트를 적용합니다.


먼저 그림판으로 밑그림을 그려보아요.



이제 스프라이트 데이터를 만들어야하는데요.

예전엔 주로 DD구락부를 썼지만, 이번엔 그냥 YY-CHR 프로그램을 사용했습니다. (귀찮 귀찮...ㅋ)

'2BPP MSX' 포맷으로 놓으면, 연속한 번호(짝, 홀)의 패턴 두개를 2BIT 컬러로 보여주는데요.

실제 MSX2에서는 스프라이트 OR 연산된 출력과 같은 효과를 얻을 수 있습니다. 

적 캐릭터 하나당 8개의 패턴이 필요하고, 애니메이션 효과를 위해 4배의 패턴을 그려야합니다.



참고로, 실제 VRAM에는 아래처럼 1BPP 데이터로 들어갑니다요.



VDP는 8 x 8 패턴 256개의 스프라이트를 처리합니다.

보통 게임에서는 16 x 16 패턴을 쓰니까, 64개의 스프라이트라고 보면 되겠죠?

여기서 캐릭터가 상하좌우 등의 여러가지 모습을 보여주려면, 실제 한번에 쓸 수 있는 패턴 수가 팍팍 줄어버립니다.

결국 전체 패턴 메모리를 여러벌로 쓰는 방법밖에는 없죠.


아래는 VRAM Page 0의 가용 메모리를 쪼개서 스프라이트로 할당한 모습입니다.

참고로 스프라이트 어트리뷰트도 2벌을 쓰고 있습니다. 테어링을 막는 가장 쉬운 방법이죠. 페이지 플립이요!




그럼, 실제 화면에서는 어떻게 나오는지 보아요.

애니메이션은 6프레임 당 한번씩 패턴이 바뀝니다. 바꿔말하면, 초당 10프레임으로 애니메이션이 진행됩니다.




그럼, 다음 편에서 뵈어요~ ㅎ.ㅎ/