음악에는 4/4 박자 같은 여러 박자가 존재합니다. 그렇다면 리듬 게임에서는 어떤 걸 박자의 기준으로 삼을까요?
예로 bmse 스크립트 파일 안을 보면 여러 정보가 있는데 그 중 BPM이 적혀있는 것을 확인할 수 있습니다.
리듬게임에서는 이 BPM(Beat per Minutes)을 기준으로 노트가 배치될 시간을 계산합니다.
계산하기에 앞서 BMSE 에디터 & 스크립트는 1/4, 1/8, 1/16, 1/32 등등의 박자를 정해놓았습니다.
같이 BMSE를 공부하는 스터디 멤버의 말에 따르면 1/32가 BMSE에서의 최소박자라고 합니다. 그런데 간혹 BMSE스크립트를 보다보면 아닌게 있었던 것 같습니다..
그럼 계산을 한 번 해봅시다.
초당 비트가 필요하므로
1/4박자 기준으로
1 BPM = 1분당 1비트
= 1초당 1/60 비트
조금 일반화하면
x BPM = 1분당 x비트
x BPS = 1초당 x/60비트
이제 박자도 일반화 해볼까요?
1/4박자는 한 마디에 4개의 비트가 들어간다는 소리이므로 최소단위인 1/32박자인 경우는 8배 더 많이 들어가면 됩니다.
x BPM = 1분당 x비트 (1/4박자)
= 1초당 x/60비트 (1/4박자)
= 1초당 (8 * x) / 60비트 (1/32박자)
그림처럼 노래의 시간이 총 10초라고 하면, 노트에 2초라는 시간이 배정되면 2초뒤에 반드시 판정선에 도착해야합니다.
위를 적용하기 위해선 위에서 구한 식에서 한 비트당 초를 구해야 합니다. BPS(Beat per Second)가 아닌 SPB(Second per Beat)가 필요하다는 거죠.
단순히 식을 뒤집으면
Second Per Beat = 60 / (8 * x) (1/32박자) 라는 결론을 도출할 수 있습니다.
이걸로 한 마디당 시간도 구할 수 있는데 1/32박자 기준으로 한 마디에 32개의 비트가 들어가니
Second Per Bar = (60*32) / (8 * x) 라는 식을 얻을 수 있습니다.
제일 첫번쨰 그림인 bmse 스크립트는 "삼바랜드"라는 곡인데 2분이라는 플레이 타임을 가집니다.
그림에는 없지만 스크립트를 보면 66마디를 가지고 있고 132BPM 입니다.
한 마디당 시간은? (60*32) / (8* 132) = 1.818181818....초
66마디가 있으니까 1.8181818...초 * 66마디 = 120초. 2분이라는 시간이 정확히 나오는 것을 확인할 수 있습니다.
리듬게임을 만들 떄, 싱글 트랙에서 멀티트랙. 랜덤 노트 배치까지 해왔지만
리듬게임에 널리 사용되고 있는 BMS 에디터에서 제작되는 스크립트 형식에 맞춰 노트를 배치하는 것은 결코 쉽지 않았습니다.
BPM에 대한 개념과 스크립트 분석 등등.. 어려운 점이 많았는데 이 글이 많은 도움이 됬으면 합니다.
'SDL > 리듬게임(C, C++)' 카테고리의 다른 글
프로젝트 리소스 구조 및 클래스 설명 (0) | 2023.04.11 |
---|---|
리듬게임 영상 참고용 (0) | 2020.12.14 |
포스팅 예정 (1) | 2018.01.14 |
01. 현재 진행 상황 (0) | 2018.01.07 |
00. 리듬게임 Github (2) | 2018.01.07 |