분류
게임 개발
혼자 방치형 게임과 텍스트 게임을 만들며 막힌 곳을 모았다. Godot 의 함정, 세이브·오프라인 보상, 전투 버그, 플레이 테스트에서 배운 것이다.
10편 · 마지막 글 2026.10.23
게임 개발 글
10편 중 1–10
아무것도 안 골랐는데 다음 장으로 넘어갔다, 범인은 null
선택지를 하나도 고르지 않았는데 다음 장으로 넘어갔다. 장면마다 있는 resolve() 는 특정 조합만 처리하고 나머지는 null 을 돌려줬다. 그 null 을 누가 읽느냐가 문제였다.
스킬 이펙트는 검정 위에 빛을 더해 그렸다
번개, 화염, 검기, 레벨업까지 이펙트 아홉 개를 파이썬 파일 하나로 뽑았다. 빛은 검정 위에 더해서 그리고, 투명판의 알파는 그 밝기에서 뽑아낸다.
막힌 이유를 말하지 않는 버튼은 버그로 읽힌다
「도토만 레벨업된다」 「각성이 안 된다」 「템을 다 팔았다」. 테스터에겐 셋 다 버그였다. 코드로 보면 대부분 설계대로 움직였다. 차이는 화면에 붙은 문장 한 줄이었다.
앞줄에서 브루니만 맞았다, 범인은 적의 표적 규칙
테스터가 앞줄에서 브루니만 맞는 것 같다고 했다. 느낌이 아니었다. 적은 전열 중 칸 번호가 가장 작은 유닛을 치고, 그 칸에는 늘 리더가 서 있었다.
숫자만 오르는 게임에서 사람들은 언제 떠날까
키우기 게임 다섯과 비교군 하나, 6종의 1~2★ 리뷰 3,950건을 세어 보니 「반복이 지겹다」는 불만은 6~8% 바닥값이었다. 사람들이 떠난 건 새로 내릴 결정이 없어지는 순간이었다.
꺼 둔 동안의 보상은 프레임이 아니라 시각 차로 센다
브라우저 탭이 숨으면 requestAnimationFrame 이 멈추고 전투 연출도 선다. 그래도 방치 보상은 하나도 새지 않는다. 마지막으로 받은 시각과 지금 시각의 차로 세기 때문이다.
40MB wasm 을 25MiB 상한 무료 호스팅에 올리는 법
Godot 웹 빌드의 index.wasm 은 약 40MB 인데 Cloudflare Pages 는 파일 하나에 25MiB 까지만 받는다. 엔진은 그대로 두고, 압축본을 브라우저가 직접 풀게 했다.
정수를 저장했는데 float 로 돌아왔다, 세이브 서명이 깨진 이유
Godot 에서 세이브에 HMAC 서명을 걸었더니 아무도 손대지 않은 파일이 위조로 떨어졌다. JSON.parse_string 이 정수를 전부 float 로 돌려준 탓이었다.
함수 이름을 _draw 로 지었더니 웹에서만 두 번 그려졌다
항아리 화면 내용이 웹 빌드에서만 두 번 그려졌다. 헤드리스 시험은 조용했다. 내가 지은 함수 이름 _draw 가 엔진의 가상 함수였다.
1인 개발 뽑기 게임도 확률을 전부 공개해야 할까
매출 1억 원 이하면 법의 확률 공개 의무에서 빠진다. 그런데 Google Play 와 App Store 는 매출과 상관없이 확률을 요구한다. 결국 면제를 버리고 동료 한 명 단위까지 공개하기로 했다.
조건에 맞는 글이 없다. 브루니가 숨었나 보다.