매치 시즈에 이벤트를 넣었습니다. 아직 개발 중인 게임이고, 이번 작업은 "한 판이 평평하게 흘러가는" 문제를 손본 것입니다.
침식과 특수 블록까지 붙이고 나니 규칙은 다 갖춰졌는데, 30초 뒤나 3분 뒤나 하는 일이 똑같았습니다. 밀려오면 막고, 틈나면 점수를 벌고. 판이 오르며 조금씩 빨라지긴 하지만 그건 강도의 변화지 사건이 아닙니다.
특수 블록이 먼저 있어야 했습니다
이벤트를 만들기 전에 받아칠 수단부터 정리했습니다. 보상 사다리는 이렇습니다.
- 3매치 — 인접 침식 한 겹
- 2×2 정사각 — 라인 블록 + 시간 보너스
- 직선 4매치 — 라인 블록. 가로/세로 한 줄을 통째로 지웁니다
- L자·T자 교차 — 폭탄. 3×3을 지우고, 그 범위의 침식은 **강도와 무관하게 완전히
사라집니다**
- 직선 5매치 — 폭탄이었다가 나중에 컬러밤으로 바꿨습니다. 아래에 이유를 적었습니다
- 3연쇄 이상 — 단계마다 가장 강한 침식을 한 겹씩 자동으로 벗깁니다
여기서 중요한 결정이 하나 있었습니다. 특수 블록은 만들어지면 판에 남습니다. 만들자마자 터지면 그냥 큰 점수일 뿐인데, 남아 있으면 "지금 쓸까, 아껴 둘까"가 생깁니다. 폭탄 하나를 들고 침식이 몰려오길 기다리는 순간이 만들어집니다.
2×2는 직접 바꾼 경우에만 인정하고 연쇄 중에는 세지 않습니다. 무작위로 떨어진 블록이 2×2 한 색을 이룰 확률은 36개 자리를 다 합쳐도 0.8%쯤인데, 연쇄가 길어지면 이게 계속 얻어걸립니다. 실력으로 만든 것과 그냥 굴러 들어온 것을 같은 값으로 쳐 주고 싶지 않았습니다.
네 가지 사건
이벤트 간격은 25초에서 시작해 판마다 1.5초씩 좁혀지고, 15초에서 멈춥니다. 위협 둘과 기회 둘을 섞어서, 같은 종류가 연달아 나오지 않게 했습니다.
쇄도(SURGE) — 위협. 예고가 여기저기 한꺼번에 뜹니다. 다 막을 수는 없으니 어디를 포기할지 정해야 합니다.
혈맥(VEIN) — 위협, 3판부터. 가장자리 한 줄에 한 칸 걸러 예고가 깔립니다. 흩어진 게 아니라 한 줄이라, 라인 블록 하나면 통째로 막힙니다. 위협을 만들면서 동시에 "아껴 둔 특수 블록을 지금 쓰라"고 말하는 사건입니다. 손에 라인 블록이 없으면 그냥 아픕니다.
유물(RELIC) — 기회. 금빛 유물이 보드에 놓입니다. 12초 안에 매치에 포함시키면 600점과 8초, 그리고 모든 침식이 한 겹 벗겨집니다. 판을 뒤집을 만한 보상이라 시간 제한을 짧게 걸었습니다. 유물은 별도 물체가 아니라 특수 블록과 같은 자리에 얹었습니다. 그러면 중력·교환·소멸 처리를 새로 짤 필요 없이 그대로 물려받습니다.
광란(FRENZY) — 기회, 2판부터. 8초 동안 시간이 멈추고 점수가 1.5배가 됩니다. 타이머가 생명인 게임에서 시간이 멈춘다는 건, 그 8초 동안은 손해를 계산하지 말고 제일 큰 걸 노리라는 뜻입니다.
이 글을 쓴 뒤 이벤트를 일곱 가지로 늘리고 5매치 보상을 컬러밤으로 바꿨습니다 — 이어지는 글에 적었습니다.
앞으로 이벤트를 더 늘릴 계획입니다
지금 넷은 위협 둘·기회 둘이라는 뼈대를 세워 본 것에 가깝습니다. 이 틀이 생각보다 잘 굴러가서, 여기에 성격이 다른 사건을 계속 얹어 볼 생각입니다. 보드 전체를 흔드는 것, 특정 색만 노리는 것, 시간을 대가로 뭔가를 사는 것 — 방향은 여러 갈래로 열어 뒀고 어떤 게 실제로 재미있는지는 붙여 봐야 압니다.
소리도 코드로 만듭니다
효과음 열네 가지를 파일 없이 만듭니다. 시작할 때 파형을 계산해서 메모리에 올려 두고, 열두 개짜리 재생 통로를 돌려 씁니다.
정한 규칙이 하나 있습니다. 한 번의 지우기에 매치 소리 하나와 "가장 큰 사건" 소리 하나만 낸다. 처음엔 일어난 일마다 다 소리를 냈는데, 연쇄가 터지면 십수 개가 한꺼번에 울려서 무슨 일이 났는지 오히려 안 들렸습니다. 폭탄이 터졌으면 폭탄 소리만 납니다.
검증은 화면이 아니라 파일로 봅니다
자가 검사 147개가 돌아갑니다. 통과 여부를 화면에 찍힌 글자가 아니라 결과 파일로 판정합니다. 로그가 잘리거나 엔진이 딴 소리를 섞어도 오판하지 않게요.
애니메이션이 도는 상태들은 캡처를 자동으로 뜹니다. 교환 중, 지워지는 중, 떨어지는 중, 예고, 특수 블록, 침식 — 각각 애니메이션 한가운데서 한 장씩. 정지 화면만 보면 "중간이 어색한" 문제를 절대 못 잡습니다.
검증을 돌릴 때 지킬 것도 몇 개 알아냈습니다. 창은 최소화하면 안 됩니다 — 2D 캔버스가 그리기를 멈춰서 캡처가 빈 화면으로 나옵니다. 대신 화면 밖으로 치워 둡니다. 그리고 반드시 음소거로 돌립니다. 자동 검사가 열네 가지 소리를 다 내면서 도는 건 한 번이면 충분했습니다.