모래게임 Sandrop TIL 3
도안을 확보하는 법
그림을 사람이 계속 그릴 수는 없다
레벨마다 다른 도안이 필요한데 손으로 계속 그릴 수는 없다. 오픈소스 이모지(Noto, Apache 2.0)를 쓰기로 하고, 그걸 게임이 쓰는 형식으로 바꾸는 경로를 만들었다. 색을 몇 개로 줄이는 과정을 양자화라고 하는데, 그림마다 대표색을 골라 주는 방식이라 적응 양자화라 부른다.
여기서 걸린 것 하나. 이 게임은 색 하나가 바스켓 하나라서 색 수가 곧 난이도이자 화면 자리다. 그래서 쓸 수 있는 색이 다섯 개뿐인데, 배경을 그대로 두고 색을 줄이면 배경이 그중 한 칸을 차지해 버린다.
배경을 먼저 지우고 그림 부분만 색을 줄인 뒤, 배경은 나중에 따로 얹기로 했다.
- 자원이 몇 개뿐인 시스템에서는 “쓸 데 없는 것이 한 칸을 먹는지”를 먼저 본다. 다섯 중 하나면 20%다
- 라이선스가 열린 소재를 쓰면 양이 문제가 안 된다. 대신 출처 표기 방식을 처음에 정해 둔다
도안이 난이도의 절반을 이미 정해 버린다
같은 방식으로 만든 도안인데 봇 클리어율이 0%에서 94%까지 널뛰었다. 색이 얽힌 나선 사탕은 아무도 못 깨고, 단색에 가까운 얼굴은 거의 다 깬다.
레벨 번호만 보고 도안을 배정하면 같은 난이도 표시인데 체감이 완전히 달라진다. 그래서 도안마다 “위에서 아래로 색이 몇 번 바뀌는가”를 세어 점수를 매기고, 그 점수로 어느 구간에 쓸지 정했다.
점수는 어디까지나 짐작이라 안전망을 뒀다. 실제로 재본 값이 목표에서 많이 벗어나면 그 도안은 버리고 다시 뽑는다.
- 난이도를 만드는 것이 장치라고 생각했는데 소재가 이미 절반을 정하고 있었다. 무엇이 실제로 난이도를 만드는지 먼저 봐야 한다
- 짐작으로 만든 점수는 짐작으로 두고, 실측으로 거르는 층을 따로 둔다. 짐작을 정교하게 만드는 것보다 싸다
있는데 안 보이는 색이 생긴다
색을 여러 바스켓으로 쪼개다 보니, 원래 픽셀이 적은 색은 잘게 나뉘어 한 통을 다 부어도 화면에 티가 안 났다. 플레이어 입장에서는 부었는데 아무 일도 안 일어난 것이다.
한 통이 붓는 최소량을 정해서 그보다 잘게 쪼개지지 않게 했다.
- 나눌 수 있다고 다 나누면 안 된다. 나눈 조각이 사람 눈에 보이는 크기인지가 하한을 정한다
화면에 새어 나온 것
규칙적인 값을 그대로 쓰면 무늬가 보인다
알갱이 질감을 주려고 픽셀 번호로 밝기를 흔들었더니, 화면에 여덟 칸 주기의 은은한 줄무늬가 생겼다. 원래 없던 무늬다.
번호를 그대로 쓰면 값이 규칙적으로 순환하고, 그 주기가 화면에서 줄로 보인다. 번호를 한 번 뒤섞은 뒤에 쓰니 사라졌다.
- 결정적인 값을 쓰는 것과 규칙적인 값을 쓰는 것은 다르다. 매번 같아야 하지만 규칙이 보이면 안 된다
화면을 넘길 때
돌아온 뒤가 아니라 나가는 순간에 처리한다
레벨을 깨고 다음 레벨로 이어서 갔다가 목록으로 나오면, 방금 깬 레벨에 클리어 표시가 안 떴다.
목록에서 레벨을 열 때 “이 화면에서 돌아오면 목록을 갱신하라”고 해 뒀는데, 다음 레벨로 넘어가는 방식이 현재 화면을 새 화면으로 갈아 끼우는 것이었다. 갈아 끼워지면 원래 화면은 “돌아왔을 때”를 못 맞는다.
기다릴 자리를 옮기기로 했다. 게임 화면이 실제로 닫히는 순간에 갱신한다.
- 뒷정리를 “돌아온 뒤”에 걸면 중간에 경로가 바뀔 때 통째로 놓친다. 떠나는 순간에 거는 편이 어느 경로로 나가든 걸린다