범인은 확인용 버튼 안에 있었다 | 디지몬 육성기 개발일지 3화
설정한 대로 안 될 때, 진짜 범인은 대개 딴 데 있다
디지몬 육성기 개발일지 · 3화
범인은 확인용 버튼 안에 있었다
조건을 정확히 맞춰 넣고 진화시켰는데 엉뚱한 종족이 나왔다. 범인은 진화 트리도, 엑셀도 아니었다.
2화 끝에서 예고했던 그 사고다. 에디터도 됐고 엑셀 백업도 됐으니 이제 진화가 트리 설정대로 착착 될 줄 알았다. 디버그 패널로 조건(퀘스트 해금 8, 노력치 4)을 정확히 채워 넣고 "다음단계" 버튼을 눌렀는데 — 설정과 전혀 다른 종족이 나왔다. 트리를 다시 열어봐도 멀쩡했고, 엑셀도 멀쩡했다. 그럼 대체 어디가 잘못된 걸까.
01오늘 할 일
어제 만든 두 가지 — 진화 트리 에디터와 엑셀 백업 — 가 실제로 게임 안에서 맞물려 도는지 확인하는 날이었다. 디버그 패널에서 조건 값을 채우고 즉시 진화시켜 보는 식으로, 트리에 그려 넣은 경로가 그대로 재현되는지 하나씩 검증할 계획이었다.
02오늘의 삽질
디버그 창으로 조건을 정확히 맞춰놓고 넘겼는데도 엉뚱한 놈이 됐다.
실제로 보낸 요청 그대로"정상적인 루트라면 쁘띠몬 → 토코몬x → 가부몬 → 토부캣몬으로 기본진화(fallback)만 가능해야 하는데, 토코몬 이후 드라코몬x, 그라우몬x로 진화하고 있어."
진화 트리 에디터를 다시 열어 조건을 하나하나 확인했다. 멀쩡했다. 어제 만든 엑셀도 다시 열어봤다. 그것도 멀쩡했다. 데이터는 문제가 없는데 결과만 계속 틀렸다. 설정 화면이 멀쩡해 보이는 것과 그 값이 실제로 판정에 쓰이는 것은 별개 문제였다.
03잘된 것
범인은 게임도, 데이터도 아니었다. 확인하려고 누른 디버그 패널의 "다음단계" 버튼 그 자체였다 — 조건을 평가하지 않고 진화 경로 목록의 첫 번째 종족으로 그냥 보내고 있었다. 검증하려고 쓴 도구가 검증 대상과 다른 규칙으로 돌고 있었던 셈이다. 그 버튼을 진짜 진화 로직(조건 → 기본진화 → 그래도 없으면 첫 번째)과 같은 경로를 타도록 고치고 나서 다시 돌려봤다.
같은 날 응가를 여러 개 만들어 뒀더니, 이번엔 응가끼리 서로 반대 방향으로 움직이는 게 눈에 띄었다. 원인을 짐작해서 그대로 물어봤다.
실제로 보낸 요청 그대로"응가도 1번과 2번의 생성 시간이 다르면 서로 반대 방향으로 움직이는데, 모두 같은 방향으로 동시에 작동했으면 좋겠어. 0.5초, 0.7초 단위에서 뭔가 생성되면 애니메이션이 엇박이 나는 거 아니야? 네 생각은 어때?"
추측이 맞았다. 각자 자기가 태어난 시각을 기준으로 박자를 세고 있던 게 문제였다. 전역 박자(모든 그림이 "지금 몇 번째 박자인지"를 공통으로 보고 그리는 시계 하나)를 두는 것으로 정리됐다. "고쳐줘"보다 "이게 원인 같은데 어떻게 생각해?"가 오늘도 더 빨랐다.
04실물기 비교 테스트
오늘도 실물기 사진을 꺼내 도트 단위로 맞춰보는 단계는 아니었다. 오늘 잡은 두 버그 다 화면 생김새가 아니라 내부 판정·타이밍 문제라, 비교할 실물기 사진 자체가 없다. 도트 단위 대조는 며칠 뒤 XAI 연출부터 진짜로 시작된다.
05다음에 할 것
다음은 실물기 XAI 연출을 재현할 차례다. 미리 말해두면 — 처음엔 "이 영상 보고 똑같이 만들 수 있어?"라고 실물기 촬영 영상을 통째로 던져줬는데, 이것도 잘 안 통했다. 영상은 "이런 느낌"까지만 전달되고, 정확한 타이밍은 결국 프레임을 하나하나 재서 숫자로 줘야 했다.
i정보 코너
여기부터는 순수 기술 정보만 모아뒀습니다. 굳이 안 읽으셔도 위 내용 이해에는 지장 없습니다.
| ENGINE | Godot 4.7 (Mobile 렌더링) |
| 진화 버그 원인 | 진화 트리·엑셀 데이터가 아니라 디버그 "다음단계" 버튼 — 조건 무시하고 next_forms[0]으로 강제 진화시키고 있었음 |
| 수정 | 디버그 버튼도 실제 진화 로직(조건 충족 → 기본진화 → 첫 번째)과 같은 함수를 타도록 통일 |
| 응가 엇박 원인 | 각 응가가 자기 생성 시각 기준으로 박자를 셈 → 전역 박자(공용 틱)로 통일해 해결 |
| 교훈 | 검증 도구 자체가 검증 대상과 다른 규칙으로 돌 수 있다 - 설정 화면이 멀쩡해 보여도 실제 판정 로직은 따로 확인해야 한다 |
| 재현 목표 | "비슷한 게임"이 아니라 실물기(Digital Monster X, XB 버전) 사양 그대로 |
← 이전 화: 2화 · 1시간 동안 같은 에러만 봤다
다음 화 → 4화 · 영상을 통째로 줬더니 "느낌"만 돌아왔다
When settings don't take effect, the real culprit is usually somewhere else
Digimon Raising Sim Devlog · Episode 3
The Culprit Was Inside the Verify Button
I set every condition exactly right and evolved the creature — and got a completely different species. The culprit was neither the evolution tree nor the spreadsheet.
This is the incident teased at the end of Episode 2. Editor: done. Excel backup: done. I figured evolution would now just follow the tree exactly. I filled in the debug panel's conditions (8 unlocked areas, 4 effort) precisely and hit "next stage" — and got a species that had nothing to do with the configured path. Reopened the tree — fine. Reopened the spreadsheet — also fine. So where, exactly, was this going wrong?
01Today's goal
Today was about confirming the two things built yesterday — the evolution tree editor and the Excel backup — actually work together inside the running game. The plan was to fill in condition values through the debug panel and force an immediate evolution, checking one by one that each path drawn into the tree actually reproduced.
02Today's mess
I matched the debug panel's condition values exactly and handed it off — and still got the wrong species.
the actual request, verbatim (translated)"On the correct route, Puttimon should only be able to reach TokomonX -> GabumonX -> TobucatMon as a fallback. But after Tokomon it's evolving into DracomonX or GrowlmonX instead."
I reopened the evolution tree editor and checked every condition, one at a time. Fine. Reopened yesterday's Excel file too. Also fine. The data had nothing wrong with it, yet the result kept coming out wrong. A settings screen that looks correct and a value that's actually being read by the evaluation logic turned out to be two separate problems.
03What went well
The culprit was neither the game nor the data. It was the debug panel's "next stage" button itself — it wasn't evaluating conditions at all, just sending the creature to whatever species happened to sit first in the evolution-path list. The very tool used to verify the system was running on different rules than the system it was verifying. Once that button was fixed to go through the same real evolution logic (conditions -> fallback -> first-in-list only as a last resort), I ran it again.
The same day, having left several poops sitting around to test something else, I noticed two of them bobbing in opposite directions. I guessed at the cause and asked about it directly.
the actual request, verbatim (translated)"When poop #1 and #2 are created at different times, they end up moving in opposite directions — I'd rather they all moved the same direction at the same time. Isn't it that whenever something spawns on the 0.5s/0.7s tick, the animation ends up on a different beat? What do you think?"
The guess was right. Each poop was counting its own beat from its own spawn time. The fix was a single global beat — one clock that every drawing checks against ("what beat number is it right now") instead of counting its own. "What do you think is causing this?" beat "just fix it" again today.
04Comparing against the real device
Still not at the dot-level comparison stage today. Both of today's bugs were internal logic/timing problems, not something with a visual shape to hold up against a device photo. Real dot-by-dot comparison starts for real in a few days, with the XAI sequence.
05What's next
Next up is reproducing the real device's XAI sequence. Spoiler: the first approach was handing over an entire recording of the real device and asking "can you build this to match, exactly?" That didn't really work either. Video only conveys "roughly this vibe" — the precise timing still had to come from counting frames by hand and turning them into numbers.
iInfo corner
Pure technical detail from here down. Skipping it won't hurt your understanding of the above.
| ENGINE | Godot 4.7 (Mobile rendering) |
| Evolution bug cause | Not the tree or the Excel data — the debug "next stage" button, which ignored conditions and force-evolved into next_forms[0] |
| Fix | Routed the debug button through the same real evolution logic (conditions met -> fallback -> first-in-list only as last resort) |
| Poop desync cause | Each poop counted its beat from its own spawn time -> unified onto one global shared tick |
| Lesson | The verification tool itself can run on different rules than what it's verifying — a correct-looking settings screen still needs the actual evaluation logic checked separately |
| Fidelity target | Not "a similar game" — the exact rules of the real device (Digital Monster X, XB version) |
댓글
댓글 쓰기