꺼질 때마다 죽으니까 헷갈렸다 | 디지몬 육성기 개발일지 11화
디지몬 육성기 개발일지 · 11화
꺼질 때마다 죽으니까 헷갈렸다
무엇을 — 앱을 꺼 둔 사이의 알림 지연, 꺼진 동안 생긴 병과 부상, 끌 때의 콜드를 다시 정했다.
왜 — 껐다 켤 때마다 디지몬이 아프거나 죽어 있어서 무엇이 규칙이고 무엇이 버그인지 헷갈렸다.
결과 — 정확한 알람과 호출 시계 완충을 넣었고, 설명서에 없던 6시간 규칙을 지웠고, 끄면 콜드로 재우게 했다.
그 무렵 앱을 껐다 켤 때마다 디지몬이 아프거나 죽어 있었다. 그게 규칙인지 버그인지 나도 헷갈렸다.
9월 11일은 새벽 1시 22분, 이 질문으로 시작했다.
"APK 버젼에서 알람이 지연없이 오게 하는 방법은 없을까?"
01이번 하루의 할 일 — 꺼져 있는 동안 디지몬은 어떻게 되나
이날 한 일은 거의 다 "게임이 꺼져 있는 동안"에 대한 것이었다. 꺼져 있는 동안 알림은 언제 오는지, 그 사이에 디지몬에게 무슨 일이 생기는지, 끌 때 디지몬을 어떤 상태로 두는지.
02잘 안된 것 — 알람은 얼마나 늦게 오나
안드로이드는 화면이 꺼지고 충전도 안 하고 한동안 가만히 두면 깊은 절전에 들어간다. 그러면 앱 하나에 9분에 알람 하나씩만 보내 준다. 디지몬은 호출이 오고 10분 안에 돌봐 주지 않으면 실수로 기록된다. 그래서 물었다.
"9분단위면 사실상 호출 이후 10분안에 케어해주지 않으면 케어미스인데, 최악의 경우 1분밖에 시간이 없다는거아니야?"
다른 방법을 묻다가 이런 생각도 했다.
"호출 타이머를 부메랑 날리듯 외부로 보냈다가 시간에 맞춰 돌아오면 좋을텐ㅁ데"
그냥 해 본 생각이었다. 그건 결국 외부 서버가 필요한 이야기였는데, 온라인 서버를 구축해 본 적이 없어서 걱정됐고 지금 단계에서 돈을 들일 생각도 없었다. 그래서 딱히 아쉽지는 않았다. 4분 뒤에 정했다.
"외부 서버는 일단 제외하고 정확알람 + 호출시계완충 으로 하자."
정확한 알람은 정해진 시각에 맞춰 오는 알람이다. 호출 시계 완충은 앱이 꺼져 있던 시간에는 10분 시계를 멈춰 두고, 켠 뒤부터 세는 것이다. 알람이 늦게 와도 그 늦은 만큼 손해를 보지 않게 했다. 그날 태블릿에서 다시 재 보니, 5분 뒤로 걸어 둔 첫 알람이 예정 시각에 그대로 왔다. 같은 날 처음 쟀을 때는 3분 늦게 왔던 알람이었다.
03잘된 것 — 끌 때 디지몬을 어떻게 두나
낮 12시 22분, 이렇게 보냈다.
"디지몬이 자꾸 꺼질때마다 죽으니까 헷갈려. 세팅에서 close로 게임을 종료하면 디지몬들이 콜드 상태로 들어가게 해줘. 임의적으로 상태만 바꾸는건 충돌이 있을 수도 있으니까, c버튼으로 iDLE상태로 가서 콜드시키거나 자고있으면 꺠운 다음 콜드시키는것 처럼 기존 규칙은 지키면서 물리적으로 콜드시키는것처럼 해줘"
임의로 상태를 바꾸면 또 다른 곳에서 충돌이 생길 것 같았다. 그래서 상태만 바꾸는 게 아니라 물리적으로 버튼을 누른 것처럼 콜드시켜야겠다고 생각했다. 그리고 플레이어도 다시 켰을 때 콜드 상태여야 연결성이 있다고 생각했다.
같은 무렵 알림 진동도 붙였다. 조건은 한 줄이었다. "무음모드 -> 진동, 일반모드 -> 소리".
04실물기 비교 테스트 — 6시간 규칙은 누가 정했나
낮 12시, 앱을 한참 꺼 놨다가 열어 봤다.
"지금 apk한참꺼놨다가 봤는데, 응가도 있고 질병도있고 부상도 있었어. 질병하고 부상이 왜 걸렸지?"
게임에는 근력이 0인 채로 6시간이 지나면 부상, 배고픔이 0인 채로 6시간이 지나면 질병이라는 규칙이 들어 있었다. 2분 뒤에 물었다.
"근력 0으로 6시간이 부상이었어? 이거 실물기 규칙이었나?"
설명서에 그런 규칙은 없었다. 설명서에 있는 질병 원인은 몸무게 99G, 그리고 응가 8개를 30분 방치하는 것뿐이다. 부상은 배틀에서 졌을 때뿐이다. 6시간은 다른 규칙의 숫자가 잘못 옮겨 온 것이었다. 처음 든 건 왜 이렇게 했지 하는 궁금증이었다. 그런데 이제 시간이 하도 많이 지나서, 내가 정한 규칙이었는지 실물기 규칙이었는지 헷갈리기 시작했다. 6분 뒤에 보냈다.
"실물기 규칙으로 하자."
05아직 남은 것 — 두 번 말한 것, 남은 9분
새벽 4시 31분에 "게임 시작하면 시작할때마다 메인화면이던데, (…) 그 이후로는 마지막 게임화면을 틀어줘"라고 보냈다. 그런데 오후 1시 4분, 같은 말을 다시 해야 했다.
"껐다 켜면 기존 상태로 되돌려달라고 했는데 왜 메인메뉴로 돌아오는거지? (…) 다시말할게 익스펜드 상태로 껐다면 익스펜드 상태로 켜지는거야. XA를 플레이하다가 껐으면 XA가 켜지는거야"
그냥 좀 답답했다. 근데 어쩔 수 없는 한계점이라고 생각했다.
깊은 절전의 9분도 남아 있다. 시계를 멈춰 두는 걸로 피해는 막았지만, 알람이 늦게 올 수 있다는 것 자체는 그대로다.
i정보 코너
여기부터는 기술 정보만 모아뒀습니다.
| ENGINE | Godot 4.7 (Mobile 렌더링) |
| 안드로이드 알람 | 정확한 알람으로 예약. 깊은 절전 중에는 앱당 9분에 하나만 온다 |
| 호출 시계 완충 | 앱이 꺼져 있던 동안은 호출 10분(졸림 30분) 시계를 멈추고, 켠 뒤부터 센다 |
| 질병 원인 | 몸무게 99G, 응가 8개 30분 방치 |
| 부상 원인 | 배틀 패배(20% 확률) |
| 끌 때 | SETTING의 CLOSE로 끄면 두 기기 모두 콜드. Idle로 돌아가고 자고 있으면 깨운 뒤 콜드 메뉴와 같은 길을 밟는다 (09-14부터는 트레이 종료·안드로이드 뒤로 가기 등 다른 종료 길도 같은 길을 탄다) |
| 알림 진동 | 무음 모드는 진동, 일반 모드는 소리 |
자주 묻는 것
Q. 코딩을 몰라도 게임을 만들 수 있나? 이 개발일지가 그 기록이다. 나는 코드를 읽거나 고치지 않고, AI(Claude Code)에게 말로 시키고 화면으로 확인한다.
Q. 앱을 꺼 두면 디지몬이 죽나? SETTING의 CLOSE로 끄면 콜드 상태로 들어가 시간이 멈춘다. 그냥 내리면 시간은 계속 흐르고, 그동안 올 알림은 미리 예약된다.
Q. 알림이 늦게 올 수 있나? 안드로이드 깊은 절전 중에는 최대 9분 늦을 수 있다. 그 대신 꺼져 있던 동안은 호출 시계가 멈춰 있다.
← 이전 화: 10화 · 끌 때마다 디지몬이 죽을 때까지 방치된다고 가정했다
Digimon Raising Sim Devlog · Episode 11
It Kept Dying Every Time I Closed It, and I Lost Track
What — I redid late notifications while the app is closed, the sickness and injury that showed up while it was off, and putting the Digimon into cold sleep on exit.
Why — every time I reopened it the Digimon was sick or dead, and I couldn't tell what was a rule and what was a bug.
Result — exact alarms plus a paused call clock, a 6-hour rule that was never in the manual removed, and cold sleep on exit.
Back then, every time I closed and reopened the app, the Digimon was sick or dead. I couldn't tell whether that was a rule or a bug.
September 11th started at 1:22 AM with this question.
"Is there a way to make alarms arrive with no delay in the APK version?"
01The day's to-do list — what happens to the Digimon while it's off?
Almost everything that day was about "while the game is off." When notifications arrive while it's closed, what happens to the Digimon in the meantime, and what state to leave it in when you close it.
02What didn't work — how late can an alarm be?
When an Android device sits with the screen off, not charging and untouched for a while, it goes into deep sleep. Then it only lets each app have one alarm every 9 minutes. A Digimon that calls and isn't cared for within 10 minutes gets a care mistake. So I asked.
"If it's in 9-minute steps, and not caring within 10 minutes of a call is a care mistake, doesn't that mean in the worst case there's only 1 minute?"
Asking about other options, I also had this thought.
"It'd be nice to send the call timer out like a boomerang and have it come back on time"
It was just a thought. In the end it meant needing an external server, and I'd never built an online server, so I was worried, and I had no plan to spend money at this stage. So I didn't really feel I was missing out. Four minutes later I decided.
"Leave out the external server for now and go with exact alarms + call clock buffering."
An exact alarm is one that arrives at the set time. Call clock buffering stops the 10-minute clock while the app was off and starts counting after you open it, so a late alarm doesn't cost you the minutes it was late. When I measured again on the tablet that day, the first alarm, set for 5 minutes later, arrived right on schedule. Measured earlier the same day, before the change, it had come 3 minutes late.
03What went well — how should the Digimon be left on exit?
At 12:22 PM I sent this.
"The Digimon keeps dying every time it's turned off, so it's confusing. When I quit with Close in Settings, put the Digimon into cold. Just changing the state arbitrarily might cause conflicts, so do it like going to Idle with the C button and then cold, or waking it up first if it's asleep and then cold — keep the existing rules and make it go cold physically."
I felt that changing the state arbitrarily would cause a conflict somewhere else. So I thought it shouldn't just flip the state but put it into cold as if the buttons were physically pressed. And I thought that for the player, it had to be in cold when they open it again for things to feel connected.
Around the same time I added vibration to notifications. The condition was one line: "Silent mode -> vibrate, normal mode -> sound".
04Comparing against the real device — who made the 6-hour rule?
At noon I opened the app after leaving it closed for a long time.
"I just checked the APK after leaving it off for ages, and there was poop, sickness and an injury. Why did it get sick and injured?"
The game had a rule: 6 hours at zero strength meant an injury, 6 hours at zero hunger meant sickness. Two minutes later I asked.
"Six hours at strength 0 was an injury? Was that a real-device rule?"
The manual had no such rule. The only causes of sickness in the manual are a weight of 99G and leaving 8 poops for 30 minutes. Injury only comes from losing a battle. The 6 hours was a number carried over by mistake from another rule. The first thing I felt was curiosity — why was it done like this? But so much time had passed that I'd started losing track of whether it was a rule I had made or a real-device rule. Six minutes later I sent this.
"Let's go with the real-device rule."
05What's left — the thing I said twice, and the 9 minutes
At 4:31 AM I sent, "Every time I start the game it's on the main screen (…) after the first time, open the last game screen." But at 1:04 PM I had to say it again.
"I asked you to restore the previous state when I close and reopen, so why does it come back to the main menu? (…) Let me say it again: if I closed it in Expand, it opens in Expand. If I closed it while playing XA, XA opens."
I was just a bit frustrated. But I thought it was a limitation I couldn't do anything about.
The 9 minutes of deep sleep are still there too. Pausing the clock stopped the damage, but the fact that an alarm can come late hasn't changed.
iInfo corner
Technical notes only from here on.
| ENGINE | Godot 4.7 (Mobile renderer) |
| Android alarms | Booked as exact alarms. In deep sleep only one per app every 9 minutes |
| Call clock buffering | While the app was off, the 10-minute call clock (30 for sleepy) is paused and starts counting after it opens |
| Causes of sickness | Weight 99G, 8 poops left for 30 minutes |
| Causes of injury | Losing a battle (20% chance) |
| On exit | Quitting with Close in Settings puts both devices into cold. It returns to Idle, wakes the Digimon if asleep, then takes the same path as the cold menu (from 09-14, other ways of quitting such as the tray's quit and Android's back button take the same path) |
| Notification vibration | Vibrate in silent mode, sound in normal mode |
FAQ
Q. Can you make a game without knowing how to code? This devlog is the record of trying. I don't read or edit code; I tell an AI (Claude Code) what to do in words and check the result on screen.
Q. Does the Digimon die if I leave the app closed? Quitting with Close in Settings puts it into cold and stops time. If you just put the app in the background, time keeps going and the notifications that will come are booked in advance.
Q. Can notifications arrive late? In Android deep sleep they can be up to 9 minutes late. In exchange, the call clock is paused while the app was off.
댓글
댓글 쓰기