국딩 시절 잼나게 했던 슈팅게임이었는데, 아마 해보신 분들이 많으실 듯요.
아이큐2000의 비트맵 그래픽으로 멋진 슈팅을 만들어보는 것이 당시 어린이들의 꿈이었는데요.
BASIC으로는 스프라이트만 움직이는 것도 버거웠고, 최소한 어셈은 써야되었죠 ㅎ.ㅎ
ASO 같은 슈팅 게임을 만들어보려다 포기한 결정적인 이유는 이거였습니다.
컴파일에서 만든 자낙EX, 알레스트 같은 슈팅 게임을 본 후였죠.
상용게임 제작사도 MSX로는 오락실 수준의 슈팅게임은 무리였구나 ㅠ.ㅠ
그렇게 시간은 흘러, GT를 쓰게 되고 기본적인 주변기기들과 DOS2 프로그래밍 환경이 준비되었네요.
이제 다시 국딩 어린이의 꿈을 이뤄봅시다! ASO 리메이크 ㄱㄱㄱ
ASO 같은 세로 슈팅 게임들은 모니터를 90도 돌려서 사용합니다. 세로 해상도가 높아요.
VDP의 오버스캔 트릭을 쓰면 212라인이 아닌 240라인을 출력할 수 있습니다.
이렇게 해도 화면이 조금 잘려서 답답합니다만, 이게 최선이니...ㅋ
VDP가 블랭킹 없이 계속 디스플레이를 출력하면, VDP 커맨드가 가속되는 구간도 함께 사라집니다.
최대한 60프레임으로 게임을 구현하려면,
VDP 커맨드로 비트맵 복사하는 것과 CPU가 직접 VRAM을 R/W하는 것을 잘 섞어야합니다.
특히 turboR의 고속모드에서는 VRAM R/W에 WAIT가 걸리니까, 이걸 최소한으로 줄여야죠.
스프라이트 컬러, 어트리뷰트 테이블만 업뎃(복사)하는 것도 부하가 꽤 됩니다.
이 테이블들은 VRAM에 더블버퍼로 넣어놨는데요.
처음 설계할 때, 60fps가 불가능하면 30fps로 구현하려고 계획했던 것 때문이었습니다요.
스프라이트도 페이지 플립을 할 수 있으니까요.
근데 실제로 돌려보니, 60과 30프레임의 차이가 하늘땅 차이 수준이라서 60fps 최적화로 갔습니다.
스프라이트 32개로는 화면에 움직이는 캐릭터(총알 포함)를 모두 표시하는 게 불가능합니다.
지상에서 움직이는 적들은 모두 비트맵이구요.
모든 총알들은 홀짝 프레임에 맞춰서 절반씩 교대로 표시합니다.
깜빡임으로 두배의 스프라이트를 쓰는 거죠.
공중에서 움직이는 적들은 모두 스프라이트 2장으로 처리합니다.
주인공 기체는 스프라이트 3장이구요.
보스는 화면의 절반을 덮을 정도로 큰 사이즈입니다.
이 녀석은 스프라이트나 비트맵 복사로는 60프레임으로 움직이는 게 불가능합니다.
그래서 보스의 움직임을 V9958의 H/W 스크롤로 처리하고,
나머지 스프라이트(주인공, 레이저, 총알 등)를 반대로 위치 보정해서 표시합니다.
게이머가 봤을 때에는 보스가 움직이는 것으로 느껴지겠죠?
마지막으로 사운드는 MAME 소스를 수정해서, 채널별 데이터를 덤프 후 가공해서 사용합니다.
오리지널이 OPL 사운드라서, MSX-Audio 또는 MoonSound 호환 카트리지로 구동할 수 있죠.
조이메가 지원도 넣어서, 기본 3버튼 + START 버튼(PAUSE 용도)으로 동작합니다.
ASO를 처음 해본 게 1986년으로 기억하는데요.
2012년이 되어서야 비슷하게 구현을 해보게 되었네요.
국딩 어린이의 꿈을 실현ㅋ turboR이 없었다면 시도도 안해봤을 작업이었습니다.
아래는 2022년에 출격씬을 추가한 버전의 영상입니다 ㅎ.ㅎ
그럼, 다음 편에서 이어집니다요~