레이블이 -TapTapRevolution인 게시물을 표시합니다. 모든 게시물 표시
레이블이 -TapTapRevolution인 게시물을 표시합니다. 모든 게시물 표시

2024년 9월 28일 토요일

TapTapRevolution 제작 #8 - 댄스 패드 개조

댄스 패드를 하나 구입했습니다. PC용 USB연결을 사용하구요, 알리산입니다 ㅎ.ㅎ



이걸 MSX에 연결해보아요~

TTR용 상하좌우 입력을 처리할 수 있도록 댄스 패드를 개조하면 되겠죠?


원래 MSX의 조이스틱(범용) 9핀 포트용 케이블은 오른쪽처럼 생겼습니다.

근데, 일부 MSX 기종에서는 왼쪽의 일반 DSUB 케이블도 연결할 수 있는데요.

A1WSX, A1GT 등의 후기형 파나소닉 기종이 여기에 해당됩니다.

X-II 등의 대우 기종은 단자가 깊어서 연결이 안돼요~~



RS-232C용 9핀 케이블입니다. 선배열을 바꿔야해서, 뚜따가 가능한 놈으로 하나 가져왔어요.



케이블 단자를 열어본 모습입니다.

1번, 6번, 8번핀의 신호가 서로 연결되어있군요.

실제 케이블에는 6개의 선들이 들어있습니다. (쉴드선도 포함해서요)



TTR에서 사용하는 상하좌우 및 공통출력(COM) 신호선 5개를 정리합니다.

1번,6번,8번 쇼트된 녹색선을 제거 후 노란선을 5번->8번으로 옮겼습니다.



파나소닉 기종의 본체와 간섭이 되지 않도록 철판과 덮개 일부를 잘라줍니다.



아래는 turboR에 연결한 모습입니다.



이제, 댄스 패드를 열어봅시다!

USB가 싸구려 케이블인지... 선이 4개 밖에 없네요.

만약 쉴드선까지 있었다면 선이 5개니까, 이걸 그대로 DSUB 단자에 연결해서 써도 됩니다.

암튼 멀티미터로 PCB의 상하좌우 신호를 찾아줍니다.



개조한 케이블을 여기에 연결해주면~ OK!

참고로, 노란색 공통(COM)신호는 PCB의 GND에 연결하면 되겠습니다.



선을 정리해서 케이스를 닫아주면 되겠네요.



잘 되네욤 ㅎ.ㅎ/



혹시 직접 개조하실 분들을 위해 제가 샀던 댄스패드의 링크도 남겨드려요~

https://ko.aliexpress.com/item/1005007514960644.html


PS.

개조하실 때 '무적의 380도' 이런거 쓰심 안됩니다. 필름이나 단자 접합용 스펀지가 녹아버릴거에요ㅋ


2024년 9월 13일 금요일

TapTapRevolution 제작 #7 - 완성판

 



기본 플레이 루틴을 완성하니까 동기부여가 확~ 떨어지네요.

몇 달 쉬었으니, 다시 진행해봅니다!


TTR에 사용되는 카트리지는 8MB 메모리(FlashROM 64Mbit)를 사용합니다.

2MB는 프로그램 및 오프닝 영상 및 각종 그래픽, 효과음 데이터로 사용되구요.

남은 6MB에 노래 3곡이 들어갑니다. 노래 한곡당 2MB가 소진된다고 보심 맞아요 ㅎ.ㅎ


오프닝 영상은 약 7초 정도로 편집한 MV 파일입니다.

구동 방식은 V3, V4에서 쓰이던 것과 거의 같습니다. 스크린2 + 팔레트 스위칭~


타이틀과 노래 선택 화면은 스크린8을 사용합니다.

타이틀 그래픽은 AI의 힘을 좀 빌려서...ㅋ


메인 플레이 영역은 기존에 보여드린대로 스크린5를 사용합니다.


스테이지가 끝나고 나오는 결과 화면과 게임오버 화면은 스크린8을 사용합니다.

기존 그래픽을 변환해서 그대로 넣어도 꽤 괜찮아보이더라구요.


효과음으로 쓰이는 사운드는 모두 PCM으로 들어갑니다. 노래 재생용 PCM player와 같은 동작구조입니다.


마지막으로,

타이틀 화면에서 일반 모드 또는 트레이닝 모드로 선택이 가능한데요.

트레이닝 모드는 체력(?) 게이지가 0이 되어도 게임오버가 되지 않습니다.


.

.

.


그럼, 동작 모습을 보시죠~ 백문이 불여일견 ㅎ.ㅎ

비트맵 그래픽을 그리고, 지우고, 스프라이트 뿌리느라 Z80, VDP가 미친듯이 삽질을 합니다만...

60FPS로 잘 동작하는 것을 보실 수 있습니다요. 이번엔 DOUBLE 모드 플레이로 찍어보았어요~




PS.

효과음을 PCM으로 처리하니까 편하고 좋네요.

이제 OPL4 (문사운드, 달소리 등) 사운드를 쓰시는 분이 많으니...

앞으로 DOS2용 게임을 만든다면, 그냥 OPL4 PCM으로 도배하는 쪽으로 생각해봐야겠습니다요ㅋㅋ


PS. 2024-09-18
옵션 메뉴을 따로 할당했습니다. 오디오 싱크 조절도 가능하고, 키맵도 확인할 수 있습니다요~ ㅎ.ㅎ


2024년 5월 24일 금요일

TapTapRevolution 제작 #6 - 점수판 처리

지난번에는 키입력과 노트 판정이 완료되었는데요.

이제 스코어 및 체력 게이지(?)를 넣어보아요~


현재 문자 표시를 위한 폰트는 일반적인 1BPP 데이터를 사용합니다.

이 폰트는 그대로 둔 상태에서, 점수판에서만 쓰일 숫자 폰트(2컬러 비트맵)를 추가해봤습니다.




점수 아래에는 체력 게이지가 박자에 맞춰 꿀렁~꿀렁~ 움직이고 있습니다.

그래픽은 미리 다른 페이지에 그려둔 상태이구요, 타이밍에 맞춰 수직스크롤을 바꿔서 애니메이션 처리를 합니다.




이 게이지 부분을 짧게 또는 길게 보이도록 만들어야하는데요.

상황에 따라 매번 비트맵을 복사하게 되면 부하(CPU/VDP 로드)가 늘어날테니,

반대로 이미 최대치로 그려진 비트맵을 검정색 스프라이트로 덮어서 가려주는 처리로 해결합니다.


각 게이지는 가로폭이 96픽셀을 차지합니다.

만약 스프라이트의 확대 기능을 사용하면 16x16 스프라이트 한개로 가로 32x32 크기만큼 가려줄 수 있겠죠?

1P쪽 게이지에 검정 스프라이트 3개, 2P쪽에도 3개 사용합니다.

총 스프라이트 6개로 빠르게 처리할 수 있습니다 ㅎ.ㅎ/



그럼, 실제 동작은 영상으로 확인해보시죠!

곡 전반부는 1P 입력으로 플레이했구요. 곡 후반부는 2P 입력으로 플레이했습니다.

1P, 2P의 스코어 및 체력 게이지가 바뀌는 모습을 볼 수 있어요.




그럼, 다음편에서 보아요~ ㅎ.ㅎ/


2024년 4월 27일 토요일

TapTapRevolution 제작 #5 - 키입력 처리


잠시 손놓고 있던 작업을 이어봅니다~ ㅎ.ㅎ


게임을 즐기려면 상하좌우 4개의 화살표 입력이 필요합니다.

키보드에서는 아래처럼 1P, 2P의 입력키를 배치합니다. 커서키는 1P 입력으로 사용됩니다.


1P는 노랑, 2P는 파랑입니다.



오리지널 MSX 패드에서는 십자버튼 및 트리거버튼1(상), 트리거버튼2(우)로 동작하구요.

MD패드 핀을 개조해서 2버튼으로 동작할 때도 동일한 십자버튼 및 B(상), C(우)로 동작합니다.

JoyMega를 쓰는 경우는 십자버튼 및 Start(좌), A(하), B(상), C(우)로 동작합니다.


참고로, 일반패드에서는 십자버튼으로 상+하 또는 좌+우 함께 누르는 것이 불가능하니까...

십자버튼과 트리거 버튼을 나눠서 사용하면 됩니다 ㅎ.ㅎ


아래는 JoyMega 사용 시 사용되는 입력 설명입니다.





화면에 스크롤되어 올라오는 노트(화살표) 타이밍과 버튼 입력에 따라 5가지 판정 표식이 나옵니다.

이건 오리지널 DDR과 동일하도록 만들었어요 -> PERFECT, GREAT, GOOD, BOO, MISS

화면 표시에는 스프라이트를 이용합니다.

참고로 PERFECT, GREAT 판정 시에는 노트(화살표)가 사라지는데, 요것도 동일하게 구현했어요.

CPU, VDP 로드가 아슬아슬하네요 ㄷㄷ



실제 동작 모습은 아래 영상으로 확인하셔요~ ㅎ.ㅎ/




그럼, 다음편에서 보아요~ ㅎ.ㅎ/


2024년 2월 24일 토요일

TapTapRevolution 제작 #4 - 노래와 함께~ 고고

이제 음악을 넣어보아요! ㅎ.ㅎ


1편 글에서 PCM 출력을 사용한다고 얘기했었는데요.

turboR, 뮤직모듈, Covox 등의 PCM은 CPU가 데이터 1바이트씩 전송(write)해야 되니까, CPU 부하가 매우 큽니다.

동영상 플레이어 같은 단순 반복작업인 경우는 타이밍 맞춰서 사용할 수 있겠습니다만... TTR에서는 못 쓴다고 봐야겠죠.


TTR 카트리지에는 8MB의 플래쉬롬이 내장되어있구요. 이 데이터를 8BIT PCM으로 자동 재생이 되는 기능이 들어있습니다.

CPU는 단지 Play/Stop 커맨드만 보내주면 됩니다. 노래는 그냥 쭈욱~ 출력됩니다요.

메인 프로그램에서 그래픽과 사운드 싱크만 잘 맞춰주면 OK입니다!


카트리지의 PCM 출력은 22.05kHz, 44.1kHz 모드가 있는데요.

TTR에서 쓰이는 곡은, 길이가 약 90초 쯤 됩니다. 44.1kHz PCM으로 변환하면 거의 4MB 분량이 나오게 됩니다.

22.05kHz PCM으로 변환하면 2MB 정도가 되니까, 8MB 플래쉬롬에 4곡을 넣을 수 있겠네요.

11.025kHz 등으로 샘플레이트를 낮추면 곡을 많이 넣을 수는 있겠지만, 음질 손해가 크니 22.05kHz로 갑니다요!


TTR에서는 22.05kHz 모드로 3곡을 넣고 남은 2MB 영역은, 프로그램 및 그래픽 데이터가 들어가게 되겠습니다.

결국 노래는 3곡이 들어가게 되겠네요.



그럼, 실제로 구동해보겠습니다. 잘 나오는지 한번 보셔요! ㅎ.ㅎ/~




.

.

.


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


그럼, 다음편에서 보아요~ ㅎ.ㅎ/


2024년 2월 23일 금요일

TapTapRevolution 제작 #3 - 그래픽을 더 멋지구리하게

게임의 메인화면은 아래처럼 표시됩니다.




화면은 3부분으로 나눠져있습니다.

윗쪽의 점수표시 영역, HP게이지 영역, 노트(화살표) 스크롤 영역


분할된 영역은 각각의 팔레트 테이블과 스프라이트(어트리뷰트 페이징) 및 비트맵 그래픽(VRAM 페이징)으로 처리됩니다.



1. 점수표시 영역




이곳은 수직 스크롤이 멈춰있고 점수만 표시합니다. 알레스트 시리즈에서 흔히 보이는 구성이에요.

폰트는 추후 이쁜놈(!)으로 교체될 예정입니다 ㅎ.ㅎ



2. HP 게이지




노트 타이밍에 맞춰 발판을 누르면, 게이지가 빨강에서 주황색까지 늘어납니다.

타이밍을 놓치면 줄어들고, 바닥나면 게임오버 되겠네요.


원작 DDR에서 이부분이 박자에 맞춰 파도타기를 하는데요.

요것도 비슷하게 구현해봅니다.

파도타기 그래픽은 아래처럼 미리 VRAM에 몽땅 그려놓습니다.

스크린5 모드는 VRAM 페이지가 4개라서, 이렇게 한 페이지를 훅~ 써버려도 부담(?)없습니다.




타이밍에 맞춰 수직스크롤을 해주면, 제자리에서 파도타기를 하는 듯한 모습으로 나오게됩니다.

2인플레이도 지원해야하니까, 오른쪽 2P 게이지는 반전해서 그려줍니다~


플레이 중 게이지를 줄여야 하는 경우는, 검정색 스프라이트를 겹쳐서 게이지 일부분을 가려주면 됩니다.

비트맵을 다시 그리는 건 느리기 때문에 이렇게 처리하는게 편해요.



3. 노트 스크롤 영역




상단에는 발판(버튼)을 누르는 타이밍을 보여주는 회색 화살표가 8개 나와있구요.

그 아래로는 비트맵 그래픽이 스크롤되며 올라갑니다.

흰색 가로선과 숫자는 곡의 마디를 표시하는 용도입니다.

이건 연습모드(무적모드)에서만 표시되니 참고하시구요.


먼저 화살표를 단일 컬러로 팔레트 애니메이션을 해보니, 생각했던 것만큼 이쁘진 않더라구요.

정박자, 반박자 화살표 각각 4등분해서 색칠을 해봅니다.

(16컬러 모드에서 컬러 절반(8개)을 화살표에 칠해버리는 만행을...ㅋ)




실제 화면에서는 아래처럼 팔레트가 적용되어 나타납니다.

화살표 꼬리에서 머리쪽으로 애니메이션 해주니, 훨씬 보기 좋네요 ㅎ.ㅎ/




.

.

.

사실 이 스크롤 영역에서는, 컬러 8개의 팔레트 애니메이션으로 다중 스크롤 효과를 넣으려고 했습니다.

근데 이게 워낙 흔한 테크닉이라서, 큰 감동(ㅋ)을 주기는 힘들고...

결정적으로 화면 대부분이 화살표 스크롤이라, 요놈들을 이쁘게 그려주는게 더 만족도가 높더라구요.

대신 단색의 배경으로... 암튼 그렇게 되었습니다~ ㅎ.ㅎ


그럼, 다음편에서 보아요~ ㅎ.ㅎ/


2024년 2월 21일 수요일

TapTapRevolution 제작 #2 - 화살표를 넣으려면?

화살표(노트)를 그려넣고 스크롤 하는 것 자체는 V9938의 비트맵 전송커맨드와 수직스크롤을 쓰면 됩니다.

근데 화살표를 어디에 그려야하는지 먼저 알아야되잖아요? ㅎ.ㅎ


DDR에서는 노트 타이밍(박자)에 맞춰 화살표가 그려집니다.

실제로는 한화면 스크롤이 된후 상단에 왔을 때가 정 타이밍이니까, 미리 그려야겠죠?


먼저 이 노트 데이터를 만들기 위해, 간단한 프로그램을 하나 만듭니다.

목적은 원곡이 플레이되는 모습을 그대로 영상으로 캡쳐해서 그래픽을 분석하는 것이죠.


노트 타이밍은 정박자, 1/2박자, 1/3박자 등으로 나오게 되는데요.

일단 간단하게 정박자, 1/2박자를 쓰는 곡으로 골라봅니다.

DDR하면 제일 먼저 떠오르는 노래? '버터플라이이' 아이아이야~~ㅋ


플스용 DDR에는 연습메뉴가 있어서, 배경의 춤추는 아자씨(?) 없이 노트값만 쉽게 볼 수 있어요.





아래처럼 각 프레임에서 노트가 적중(!)하는 타이밍을 디텍션해서 해당 화살표값을 테이블로 만듭니다.




좌,하,상,우 각각 1비트로 표시하면, 더블 모드(1P+2P) 노트를 다 넣어도 8비트(1바이트)면 충분하군요.

반(1/2)박자 처리를 위해 BPM을 두배로 계산해서 테이블로 만들어둡니다.

툴을 구동하면 노트정보를 텍스트로 보여준 후 테이블값만 파일로 저장합니다.




B0036 = L  R [90]  <-- 36 BEAT(x2 박자)에 L R 노트가 나온다는 의미입니다. [90]은 테이블에 저장될 HEX 값이구요.



그럼, 이 데이터로 화살표를 그려보아요~ ㅎ.ㅎ


24 x 24 사이즈의 비트맵을 복사해서 그리는 것이라서 CPU, VDP에 부담이 조금 됩니다만,

박자 간의 여유가 있으니 로드(부하)를 잘 분산하면 큰 무리없이 그려낼 수 있습니다요.




참고로, 테두리 컬러(빨강, 파랑, 초록 등)로 나오는 부분은 각 루틴에서 CPU를 점유하는 시간을 나타냅니다.

VDP가 1프레임을 출력하는 동안이죠.

여담이지만, 넌인터레이스 60Hz 모드로 출력중이니까 총 스캔라인은 262개입니다.

에뮬에서 보이는 것 보다는 조금 더 많습니다요.

현재 CPU IDLE은 30~40% 정도 될 것 같네요. (스샷에 노란색으로 표시해놨슴다)


화살표 색깔이 다른 놈(?)은 반박자 노트입니다.

오리지널 DDR에서도 저렇게 다른색으로 보여주고 있어요. 플레이어가 실수하지 않게~ ㅎ.ㅎ


버튼(발판?)을 누르는 타이밍 표시는 스프라이트를 점멸해서 반투명으로 보여주고 있습니다.

회색 화살표 4개를 표시하려면 16x16 표준 스트라이트 12개가 필요합니다ㅋ

수평으로 6개를 쓰고 있어서, 더블모드 또는 2인모드를 구현하려면 스프라이트가 24개 필요한데요.

VDP의 제약으로 점멸(6개씩 교대로 깜빡임)을 쓸 수 밖에 없습니다요 ㅎ.ㅎ



여기까지만 보면 간단한 듯 한데요.

사실 반박자 노트가 연속으로 나오면, 아래처럼 화살표 2개가 겹쳐서 표시됩니다.




VDP에서 비트맵 논리연산 복사를 사용하면 쉽게 겹치도록 만들 수 있습니다.

(보통 이걸 소프트 스프라이트라고 부르죠)


근데, 이걸 실제로 쓰면 VDP 부하가 늘어나니까 조금 위험해질 수 있어요 ㅎ.ㅎ

일반 비트맵 복사는 메모리읽기 1번 + 쓰기 1번인데,

논리연산을 넣으면 메모리읽기 2번 + 쓰기 1번으로 처리되니까...

VDP 부하를 줄이기위해(실제로는 부하를 일정하게 만들기 위해), 겹치는 화살표를 미리 다 그려놓습니다.


정박자 화살표랑 반박자 화살표 2세트가 있으니까, 조합하면 4세트의 화살표가 있으면 됩니다.

그리고 스크롤 완료 후 화살표를 지울 때에도 반박자 화살표는 반쪽만 지워야하니까... 한세트 추가요~

화살표가 총 5세트가 되었네요!




실제 게임화면에서는 이렇게 나오게됩니다.




화살표 그리기는 요렇게 완성되었습니다.


그럼, 다음편에서 보아요~ ㅎ.ㅎ/


2024년 2월 19일 월요일

TapTapRevolution 제작 #1 - DDR을 해보셨나요?




[서론]


예전에 오락실에서 비트매니아, 댄스댄스레볼루션 같은 리듬게임이 유행하던 시절이 있었는데요.

저는 이쪽엔 그닥 소질이 없어서 가끔 DDR, Ez2Dj의 쉬운 곡들만 눌러서 좀 해봤었네요.

결혼 초기에는 플스2에 DDR장판을 연결해서, 와이프랑 방방(?) 뛰면서 씐났던 기억도 나구요.

...벌써 18년전의 추억으로ㄷㄷ


갑자기 리듬게임 얘기는 왜 꺼냈냐구요?ㅋ


작년에 Ponpoko Remake를 만들 때, Oraksil이라는 이름으로 PCB를 만들었습니다.

대용량 플래쉬롬(8MB)과 PCM 출력을 활용하려고 만든건데요.

너구리 게임에는 PCM 출력이 없으니, 그닥 유용하게 쓰이진않았네요.

(첫 부팅 시 동영상이 나오도록 했는데, 여기도 일부러 PCM을 제거했다는 소문이...조용한 동영상ㅋ)


그 후 PCM 사운드를 활용하는 게임을 한번 만들어보자~ 라며 이런저런 생각을 해봤습니다.

.

.

역시나 아이디어 고갈ㅋ 사운드 PCM -> 음악 -> 리듬게임?

그냥 DDR 비슷한 게임(짭DDR)을 만들기로 결론을 냈습니다요~

이름은... TTR (TapTapRevolution) 입니다 ㅎ.ㅎ



[본론]


혹시 DDR을 안해보신 분은 아래 게임스샷을 한번 보시죠.




노래가 흐르고, 화면 아래에서 화살표(노트)들이 위로 올라갑니다.

타이밍 맞춰서 상,하,좌,우 발판을 눌러주면 됩니다.


먼저 게임이 구동될 사양을 정해야하는데요.


사운드의 경우는 H/W로 노래(PCM 데이터)를 출력하게 될테니, CPU쪽의 부담은 전혀 없습니다.

게임 로직은 플레이어 입력과 노트 타이밍을 확인하는게 대부분이죠?

CPU 부담은 적지만, 그래픽 부하(VDP 액세스)는 꽤 있을테니...

turboR 고속모드 보다는 일반 Z80 3.58MHz 모드가 더 효과적이겠습니다.


화면에는 많은 화살표 노트들이 나오게 될테니, 이건 스프라이트로 구현하면 좀 힘들겠네요.

물론 컬러를 단순하게 입혀주면 스프라이트 갯수 문제는 없을 수 있겠지만...

이왕이면 이쁜 그래픽이 좋지않겠습니까요? ㅎ.ㅎ

V9938의 비트맵 그래픽과 수직 스크롤을 활용하면 되겠습니다.


화살표들의 위로 올라가면서 색깔이 변하게 되는데요.

이건 팔레트 애니메이션으로 쉽게 처리가 되니 별문제 안되겠네요.

그래픽은 스크린5 모드(VDP G4 mode)로 결정합니다.


일단 도트부터 찍어보아요~

비트맵의 영원한 친구인 DD구락부와 blueMSX로 화살표를 그려보았습니다.




화살표의 크기는 24 x 24 픽셀입니다. 큼지막하니 비율도 좋고 모양도 이쁘네요.

우후~ 화살표만 봐도 게임의 절반은 완성한 듯한 기분입니다!! ㅎ.ㅎ


시작은 여기까지이구요. 다음편에서 이어지겠습니다.


그럼, 이만~ ㅎ.ㅎ/~