방구석에서 부랄긁으면서 보카로뮤비보다가 아이디어 얻었던거야 (보카로 듣는사람 있을진 모르겠지만 lagtrain, memerizer 같은 뮤비에서 큰 영감)
대충 방향키로 레일 이동하고 타이밍맞게 노트 처리하면 그에 맞춰서 캐릭터 애니메이션 재생하는 게임임
유저맵 지향적으로 만들어서 맵제작자가 직접 캐릭터 스프라이트와 춤 애니메이션들 직접 삽입하여 맵을 제작하는것이 가능
점프도 있어서 피해야하는 장애물이나 점프중에 처리하는 노트(뮤즈대시 생각하면 될듯) 도 추가예정
그동안 노트 관리하는 코드 구조 개선하고 이동노트 구현하고 대충 노트 스프라이트 만들었는데 생각보다 별로라 나중에 갈아엎을듯
1. 시인성문제
전에 누가 노트 시인성에 대한 문제지적했는데 42ms의 빡빡한 판정임에도 퍼펙트가 잘 나오고 이것저것 시도한건 많았는데 오히려 노트가 안읽혀서 일단은 그대로 두기로 함
이부분은 괜찮은 아이디어가 생각안난다면 이대로 갈듯함 dancerush 의 down 노트처럼 동그랗게 구현도 해볼까 생각중
(예시사진)
2. 싱크문제
godot의 AudioPlayer.get_playback_position() 은 문제가 있음
오디오 버퍼 위치를 대략적으로 알려주기에 리겜에 필요한 ^정확한^ 싱크가 아닌것임
(대충 예시를 들자면 5fps의 속도로 재생되는 gif의 현재 재생위치를 구한다면 0.2 0.4 0.6 0.8 1 이런식으로 출력한다는거지 내가 이해한바로는 이런데 오디오 버퍼에 대한 정확한 지식은 없어서 틀린 예시일수도있음)
하지만 이를 보간할 방법이 충분히 있음 고도엔 사운드 출력을 전체적으로 담당하는 AudioServer라는 녀석이 있는데 여기에 관련 함수가 있음
대충 흐름에 맞게 코드를 작성한다면 이렇게 됨 리듬게임 개발 그것도 고도로 하는 갤럼이 있을진 모르겠지만 코드 남겨둠
출력 지연시간 (소리가 출력장치까지 전달되기까지의 지연)
AudioServer.get_output_latency()
마지막 믹스에서 진행된 시간
AudioServer.get_time_since_last_mix()
예상 지연 시간 구하기
var estimated_latency = AudioServer.get_output_latency() - AudioServer.get_time_since_last_mix()
이렇게 구한 estimated_latency값을 get_playback_position() 에서 빼면 되는것임
이렇게 1번 문제는 보류인상태고 2번은 깔끔하게 해결함
3. 구현 해야할것
부가 플레이 (롱노트, 장애물 등)
맵 에디터(좀 빡셀듯)
난이도 자동측정 알고리즘(존나 개씹빡셀듯ㅇㅇ)
비트맵 id 관리, 유저 랭킹 관리 서버(개씹헬빡셀듯)
4. 수익화?
사실 수익화를 할 생각은 없었음 그냥 부랄긁다가 생긴 아이디어고 무료로 푸는 툴 같은 마인드였는데
생각보다 내가 뽑아낸 게임 뽄새가 좀 괜찮으면 작곡가랑 아트 구해서 기본볼륨 채워서 스팀에 5천원정도에 팔아도 괜찮지않을까
커뮤니티가 마구 자라서 유저맵들이 마구 만들어지고 오스나 비트세이버처럼 되는 뇌내망상 행복회로 돌리는중
사실 그냥 만들다 찍싸고 깃헙에 오픈소스로 뿌릴확률 99.9% 이긴함
아댄스러시아시는구나정말갓겜임니다
사볼하러 오락실 들락거릴때 가끔하는사람 보이면 신기함
2번 뭔가 이상한데? get_playback_position + AudioServer.get_time_since_last_mix() - AudioServer.get_output_latency() 해야 하는거 아니야?
아니면 get_playback_position - (AudioServer.get_time_to_next_mix() + AudioServer.get_output_latency()) 하던지
찾아보니깐 이게 맞네 고맙다